(function ($) { namespace('Drupal.media.browser'); Drupal.media.browser.selectedMedia = []; Drupal.media.browser.mediaAdded = function () {}; Drupal.media.browser.selectionFinalized = function (selectedMedia) { // This is intended to be overridden if a callee wants to be triggered // when the media selection is finalized from inside the browser. // This is used for the file upload form for instance. }; Drupal.behaviors.experimentalMediaBrowser = { attach: function (context) { if (Drupal.settings.media.selectedMedia) { Drupal.media.browser.selectMedia(Drupal.settings.media.selectedMedia); // Fire a confirmation of some sort. Drupal.media.browser.finalizeSelection(); } $('#media-browser-tabset').tabs({ show: Drupal.media.browser.resizeIframe }); $('.media-browser-tab').each( Drupal.media.browser.validateButtons ); } // Wait for additional params to be passed in. }; Drupal.media.browser.launch = function () { }; Drupal.media.browser.validateButtons = function() { // The media browser runs in an IFRAME. The Drupal.media.popups.mediaBrowser() // function sets up the IFRAME and "OK" and "Cancel" buttons that are outside // of the IFRAME, so that their click handlers can destroy the IFRAME while // retaining information about what media items were selected. However, // Drupal UI convention is to place all action buttons on the same "line" // at the bottom of the form, so if the form within the IFRAME contains a // "Submit" button or other action buttons, then the "OK" and "Cancel" // buttons below the IFRAME break this convention and confuse the user. // Therefore, we add "Submit" and "Cancel" buttons inside the IFRAME, and // have their click action trigger the click action of the corresonding // "OK" and "Cancel" buttons that are outside the IFRAME. media.css contains // CSS rules that hide the outside buttons. // // We don't add a "Submit" button if the form already has one, since in these // cases, another round-trip to the server is needed before the user's // selection is finalized. For these cases, when the form's real Submit // button is clicked, the server either returns another form for the user to // fill out, or else a completion page that contains or sets the // Drupal.media.browser.selectedMedia variable. If the latter, then // Drupal.media.popups.mediaBrowser.mediaBrowserOnLoad() auto-triggers the // "OK" button action to finalize the selection and remove the IFRAME. // // @todo An alternate, less hacky solution would be most welcome. if (!($('.form-submit', this).length > 0)) { $('' + Drupal.t('Submit') + '').appendTo(this).bind('click', Drupal.media.browser.submit); if (!($('.fake-cancel', this).length > 0)) { $('' + Drupal.t('Cancel') + '').appendTo(this).bind('click', Drupal.media.browser.submit); } } else if (!($('.fake-cancel', this).length > 0)) { var parent = $('.form-actions', this); if (!parent.length) { parent = $('form > div', this); } $('' + Drupal.t('Cancel') + '').appendTo(parent).bind('click', Drupal.media.browser.submit); } }; Drupal.media.browser.submit = function () { // @see Drupal.media.browser.validateButtons(). var buttons = $(parent.window.document.body).find('#mediaBrowser').parent('.ui-dialog').find('.ui-dialog-buttonpane button'); if ($(this).hasClass('fake-cancel')) { buttons[1].click(); } else { buttons[0].click(); } } Drupal.media.browser.selectMedia = function (selectedMedia) { Drupal.media.browser.selectedMedia = selectedMedia; }; Drupal.media.browser.finalizeSelection = function () { if (!Drupal.media.browser.selectedMedia) { throw new exception(Drupal.t('Cannot continue, nothing selected')); } else { Drupal.media.browser.selectionFinalized(Drupal.media.browser.selectedMedia); } }; Drupal.media.browser.resizeIframe = function (event) { var h = $('body').height(); $(parent.window.document).find('#mediaBrowser').height(h); }; }(jQuery));