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 276dc10..7bf7b7a 100644 --- a/media.module +++ b/media.module @@ -535,7 +535,7 @@ function media_form_field_ui_field_edit_form_alter(&$form, &$form_state) { * Implements hook_form_FORM_ID_alter(). */ function media_form_file_entity_edit_alter(&$form, &$form_state) { - // Make adjustments to the media edit form when used in a modal. + // Make adjustments to the file edit form when used in a CTools modal. if (!empty($form_state['ajax'])) { // Remove the preview and the delete button. $form['preview']['#access'] = FALSE; @@ -546,6 +546,14 @@ function media_form_file_entity_edit_alter(&$form, &$form_state) { $form['actions']['cancel']['#attributes']['class'][] = 'button-no'; $form['actions']['cancel']['#attributes']['class'][] = 'ctools-close-modal'; } + + // Make adjustments to the file edit form when used in the media modal. + $params = drupal_get_query_parameters(); + if (!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; + } } /** @@ -567,10 +575,21 @@ function media_form_alter(&$form, &$form_state, $form_id) { } } +/** + * Submit handler; direction form submissions in the media browser. + * + * @todo Handle editing 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))); + if (media_access('edit')) { + // Redirect to the edit form after selecting a file in the media browser. + $form_state['redirect'] = array("file/{$file->fid}/edit", array('query' => array('render' => 'media-popup', 'destination' => "media/browser?render=media-popup&fid={$file->fid}"))); + } + else { + $form_state['redirect'] = array('media/browser', array('query' => array('render' => 'media-popup', 'fid' => $file->fid))); + } } if (!empty($form_state['files'])) { $files = $form_state['files'];