123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- (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)) {
- $('<a class="button button-yes fake-ok">' + Drupal.t('Submit') + '</a>').appendTo(this).bind('click', Drupal.media.browser.submit);
- if (!($('.fake-cancel', this).length > 0)) {
- $('<a class="button button-no fake-cancel">' + Drupal.t('Cancel') + '</a>').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);
- }
- $('<a class="button button-no fake-cancel">' + Drupal.t('Cancel') + '</a>').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));
|