diff --git a/js/media.browser.edit.js b/js/media.browser.edit.js new file mode 100644 index 0000000..a5ed231 --- /dev/null +++ b/js/media.browser.edit.js @@ -0,0 +1,34 @@ +/** + * @file media.browser.edit.js + * Special behavior when displaying the file edit form in the media browser iframe. + */ + +(function ($) { + Drupal.behaviors.mediaBrowserEdit = { + attach: function (context) { + var $iframe = $('iframe.media-modal-frame', top.document); + + // Adjust the iframe height. + var height = $iframe.height(); + var content_height = $('body').height(); + if (content_height > height) { + var window_height = $(top.window).height(); + var margin_top = parseInt($iframe.parent().css('top')); + height = Math.min(content_height, window_height - margin_top - 50); + $iframe.animate({height: height + 'px'}); + } + + // Enable iframe scrolling and remove padding. + $iframe + .attr('scrolling', 'auto') + .css({'padding': 0, 'margin': 0}); + + // Add document padding. + $('#media-browser-page-wrapper') + .css({ + 'padding': '1em 1em 0 1em', + 'margin-bottom': '1em', + }); + } + }; +})(jQuery); diff --git a/media.module b/media.module index 2d4b3aa..a184d10 100644 --- a/media.module +++ b/media.module @@ -564,19 +564,42 @@ function media_form_alter(&$form, &$form_state, $form_id) { // If the #media_browser key isset and is true we are using the browser // popup, so add the media_browser submit handler + // Expose file edit form after selecting files from the media browser. + // @see media_browser_form_submit(), media_browser_edit_form_submit() if (!empty($form_state['#media_browser'])) { $form['#submit'][] = 'media_browser_form_submit'; } + elseif ($form_id == 'file_entity_edit' && !empty($params['render']) && $params['render'] == 'media-popup') { + $form['#attached']['js'][] = drupal_get_path('module', 'media') . '/js/media.browser.edit.js'; + $form['actions']['cancel']['#access'] = FALSE; + $form['actions']['delete']['#access'] = FALSE; + $form['actions']['submit']['#submit'][] = 'media_browser_edit_form_submit'; + $form['#submit'][] = 'media_browser_edit_form_submit'; + } } +/** + * Show the file edit form in the media browser when any upload/create media + * form is submitted. + * + * @todo Handle multiple files from $form_state['files']. + */ function media_browser_form_submit($form, &$form_state) { if (!empty($form_state['file'])) { $file = $form_state['file']; - $form_state['redirect'] = array('media/browser', array('query' => array('render' => 'media-popup', 'fid' => $file->fid))); + $form_state['redirect'] = array("file/{$file->fid}/edit", array('query' => array('render' => 'media-popup'))); } - if (!empty($form_state['files'])) { - $files = $form_state['files']; - $form_state['redirect'] = array('media/browser', array('query' => array('render' => 'media-popup', 'fid' => array_keys($files)))); +} + +/** + * Redirect the file edit form back to the media browser when it appears in + * that context. + */ +function media_browser_edit_form_submit($form, &$form_state) { + $params = drupal_get_query_parameters(); + if (!empty($form_state['file']) && !empty($params['render']) && $params['render'] == 'media-popup') { + $file = $form_state['file']; + $form_state['redirect'] = array('media/browser', array('query' => array('render' => 'media-popup', 'fid' => $file->fid))); } }