summaryrefslogtreecommitdiff
path: root/sites/all/modules/media/js/media.browser.js
diff options
context:
space:
mode:
Diffstat (limited to 'sites/all/modules/media/js/media.browser.js')
-rw-r--r--sites/all/modules/media/js/media.browser.js124
1 files changed, 124 insertions, 0 deletions
diff --git a/sites/all/modules/media/js/media.browser.js b/sites/all/modules/media/js/media.browser.js
new file mode 100644
index 000000000..88490e598
--- /dev/null
+++ b/sites/all/modules/media/js/media.browser.js
@@ -0,0 +1,124 @@
+/**
+ * @file
+ * Provides default functions for the media browser
+ */
+
+(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.MediaBrowser = {
+ attach: function (context) {
+ if (Drupal.settings.media && Drupal.settings.media.selectedMedia) {
+ Drupal.media.browser.selectMedia(Drupal.settings.media.selectedMedia);
+ // Fire a confirmation of some sort.
+ Drupal.media.browser.finalizeSelection();
+ }
+
+ // Instantiate the tabs.
+ var showFunc = function(event, ui) {
+ // Store index of the tab being activated.
+ if (parent_iframe = Drupal.media.browser.getParentIframe(window)) {
+ $(parent_iframe).attr('current_tab', $('#media-tabs-wrapper > ul > li.ui-state-active').index());
+ }
+ };
+ var activeTab = Drupal.media.browser.tabFromHash();
+ $('#media-browser-tabset').once('MediaBrowser').tabs({
+ selected: activeTab, // jquery < 1.9
+ active: activeTab, // jquery >= 1.9
+ show: showFunc, // jquery ui < 1.8
+ activate: showFunc // jquery ui >= 1.8
+ });
+
+ $('.media-browser-tab').each( Drupal.media.browser.validateButtons );
+ }
+ // Wait for additional params to be passed in.
+};
+
+Drupal.media.browser.getParentIframe = function (window) {
+ var arrFrames = parent.document.getElementsByTagName("IFRAME");
+ for (var i = 0; i < arrFrames.length; i++) {
+ if (arrFrames[i].contentWindow === window) {
+ return arrFrames[i];
+ }
+ }
+}
+
+/**
+ * Get index of the active tab from window.location.hash
+ */
+Drupal.media.browser.tabFromHash = function () {
+ if (parent_iframe = Drupal.media.browser.getParentIframe(window)) {
+ return $(parent_iframe).attr('current_tab');
+ }
+ return 0;
+};
+
+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 an "OK" button that is outside of the
+ // IFRAME, so that its 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" button will appear below the IFRAME
+ // which breaks this convention and is confusing to the user. Therefore, we
+ // add a "Submit" button inside the IFRAME, and have its click action trigger
+ // the click action of the corresponding "OK" button that is outside the
+ // IFRAME. media.css contains CSS rules that hide the outside buttons.
+
+ // If a submit button is present, 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.
+
+ // We need to check for the fake submit button that is used on non-form based
+ // pane content. On these items we need to bind the clicks so that media can
+ // be selected or the window can be closed. This is still a hacky approach,
+ // but it is a step in the right direction.
+
+ $('a.button.fake-submit', this).once().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');
+ buttons[0].click();
+
+ // Return false to prevent the fake link "click" from continuing.
+ return false;
+}
+
+Drupal.media.browser.selectMedia = function (selectedMedia) {
+ Drupal.media.browser.selectedMedia = selectedMedia;
+};
+
+Drupal.media.browser.selectMediaAndSubmit = function (selectedMedia) {
+ Drupal.media.browser.selectedMedia = selectedMedia;
+ Drupal.media.browser.submit();
+};
+
+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);
+ }
+};
+
+}(jQuery));