101 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
 | 
						|
(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));
 |