123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- /**
- * @file: Popup dialog interfaces for the media project.
- *
- * Drupal.media.popups.mediaBrowser
- * Launches the media browser which allows users to pick a piece of media.
- *
- * Drupal.media.popups.mediaStyleSelector
- * Launches the style selection form where the user can choose
- * what format / style they want their media in.
- *
- */
- (function ($) {
- namespace('Drupal.media.popups');
- /**
- * Media browser popup. Creates a media browser dialog.
- *
- * @param {function}
- * onSelect Callback for when dialog is closed, received (Array
- * media, Object extra);
- * @param {Object}
- * globalOptions Global options that will get passed upon initialization of the browser.
- * @see Drupal.media.popups.mediaBrowser.getDefaults();
- *
- * @param {Object}
- * pluginOptions Options for specific plugins. These are passed
- * to the plugin upon initialization. If a function is passed here as
- * a callback, it is obviously not passed, but is accessible to the plugin
- * in Drupal.settings.variables.
- *
- * Example
- * pluginOptions = {library: {url_include_patterns:'/foo/bar'}};
- *
- * @param {Object}
- * widgetOptions Options controlling the appearance and behavior of the
- * modal dialog.
- * @see Drupal.media.popups.mediaBrowser.getDefaults();
- */
- Drupal.media.popups.mediaBrowser = function (onSelect, globalOptions, pluginOptions, widgetOptions) {
- var options = Drupal.media.popups.mediaBrowser.getDefaults();
- options.global = $.extend({}, options.global, globalOptions);
- options.plugins = pluginOptions;
- options.widget = $.extend({}, options.widget, widgetOptions);
- // Create it as a modal window.
- var browserSrc = options.widget.src;
- if ($.isArray(browserSrc) && browserSrc.length) {
- browserSrc = browserSrc[browserSrc.length - 1];
- }
- // Params to send along to the iframe. WIP.
- var params = {};
- $.extend(params, options.global);
- params.plugins = options.plugins;
- browserSrc += '&' + $.param(params);
- var mediaIframe = Drupal.media.popups.getPopupIframe(browserSrc, 'mediaBrowser');
- // Attach the onLoad event
- mediaIframe.bind('load', options, options.widget.onLoad);
- /**
- * Setting up the modal dialog
- */
- var ok = 'OK';
- var cancel = 'Cancel';
- var notSelected = 'You have not selected anything!';
- if (Drupal && Drupal.t) {
- ok = Drupal.t(ok);
- cancel = Drupal.t(cancel);
- notSelected = Drupal.t(notSelected);
- }
- // @todo: let some options come through here. Currently can't be changed.
- var dialogOptions = options.dialog;
- dialogOptions.buttons[ok] = function () {
- var selected = this.contentWindow.Drupal.media.browser.selectedMedia;
- if (selected.length < 1) {
- alert(notSelected);
- return;
- }
- onSelect(selected);
- $(this).dialog("destroy");
- $(this).remove();
- };
- dialogOptions.buttons[cancel] = function () {
- $(this).dialog("destroy");
- $(this).remove();
- };
- Drupal.media.popups.setDialogPadding(mediaIframe.dialog(dialogOptions));
- // Remove the title bar.
- mediaIframe.parents(".ui-dialog").find(".ui-dialog-titlebar").remove();
- Drupal.media.popups.overlayDisplace(mediaIframe.parents(".ui-dialog"));
- return mediaIframe;
- };
- Drupal.media.popups.mediaBrowser.mediaBrowserOnLoad = function (e) {
- var options = e.data;
- if (this.contentWindow.Drupal.media.browser.selectedMedia.length > 0) {
- var ok = $(this).dialog('option', 'buttons')['OK'];
- ok.call(this);
- return;
- }
- };
- Drupal.media.popups.mediaBrowser.getDefaults = function () {
- return {
- global: {
- types: [], // Types to allow, defaults to all.
- activePlugins: [] // If provided, a list of plugins which should be enabled.
- },
- widget: { // Settings for the actual iFrame which is launched.
- src: Drupal.settings.media.browserUrl, // Src of the media browser (if you want to totally override it)
- onLoad: Drupal.media.popups.mediaBrowser.mediaBrowserOnLoad // Onload function when iFrame loads.
- },
- dialog: Drupal.media.popups.getDialogOptions()
- };
- };
- Drupal.media.popups.mediaBrowser.finalizeSelection = function () {
- var selected = this.contentWindow.Drupal.media.browser.selectedMedia;
- if (selected.length < 1) {
- alert(notSelected);
- return;
- }
- onSelect(selected);
- $(this).dialog("destroy");
- $(this).remove();
- }
- /**
- * Style chooser Popup. Creates a dialog for a user to choose a media style.
- *
- * @param mediaFile
- * The mediaFile you are requesting this formatting form for.
- * @todo: should this be fid? That's actually all we need now.
- *
- * @param Function
- * onSubmit Function to be called when the user chooses a media
- * style. Takes one parameter (Object formattedMedia).
- *
- * @param Object
- * options Options for the mediaStyleChooser dialog.
- */
- Drupal.media.popups.mediaStyleSelector = function (mediaFile, onSelect, options) {
- var defaults = Drupal.media.popups.mediaStyleSelector.getDefaults();
- // @todo: remove this awful hack :(
- defaults.src = defaults.src.replace('-media_id-', mediaFile.fid);
- options = $.extend({}, defaults, options);
- // Create it as a modal window.
- var mediaIframe = Drupal.media.popups.getPopupIframe(options.src, 'mediaStyleSelector');
- // Attach the onLoad event
- mediaIframe.bind('load', options, options.onLoad);
- /**
- * Set up the button text
- */
- var ok = 'OK';
- var cancel = 'Cancel';
- var notSelected = 'Very sorry, there was an unknown error embedding media.';
- if (Drupal && Drupal.t) {
- ok = Drupal.t(ok);
- cancel = Drupal.t(cancel);
- notSelected = Drupal.t(notSelected);
- }
- // @todo: let some options come through here. Currently can't be changed.
- var dialogOptions = Drupal.media.popups.getDialogOptions();
- dialogOptions.buttons[ok] = function () {
- var formattedMedia = this.contentWindow.Drupal.media.formatForm.getFormattedMedia();
- if (!formattedMedia) {
- alert(notSelected);
- return;
- }
- onSelect(formattedMedia);
- $(this).dialog("destroy");
- $(this).remove();
- };
- dialogOptions.buttons[cancel] = function () {
- $(this).dialog("destroy");
- $(this).remove();
- };
- Drupal.media.popups.setDialogPadding(mediaIframe.dialog(dialogOptions));
- // Remove the title bar.
- mediaIframe.parents(".ui-dialog").find(".ui-dialog-titlebar").remove();
- Drupal.media.popups.overlayDisplace(mediaIframe.parents(".ui-dialog"));
- return mediaIframe;
- };
- Drupal.media.popups.mediaStyleSelector.mediaBrowserOnLoad = function (e) {
- };
- Drupal.media.popups.mediaStyleSelector.getDefaults = function () {
- return {
- src: Drupal.settings.media.styleSelectorUrl,
- onLoad: Drupal.media.popups.mediaStyleSelector.mediaBrowserOnLoad
- };
- };
- /**
- * Style chooser Popup. Creates a dialog for a user to choose a media style.
- *
- * @param mediaFile
- * The mediaFile you are requesting this formatting form for.
- * @todo: should this be fid? That's actually all we need now.
- *
- * @param Function
- * onSubmit Function to be called when the user chooses a media
- * style. Takes one parameter (Object formattedMedia).
- *
- * @param Object
- * options Options for the mediaStyleChooser dialog.
- */
- Drupal.media.popups.mediaFieldEditor = function (fid, onSelect, options) {
- var defaults = Drupal.media.popups.mediaFieldEditor.getDefaults();
- // @todo: remove this awful hack :(
- defaults.src = defaults.src.replace('-media_id-', fid);
- options = $.extend({}, defaults, options);
- // Create it as a modal window.
- var mediaIframe = Drupal.media.popups.getPopupIframe(options.src, 'mediaFieldEditor');
- // Attach the onLoad event
- // @TODO - This event is firing too early in IE on Windows 7,
- // - so the height being calculated is too short for the content.
- mediaIframe.bind('load', options, options.onLoad);
- /**
- * Set up the button text
- */
- var ok = 'OK';
- var cancel = 'Cancel';
- var notSelected = 'Very sorry, there was an unknown error embedding media.';
- if (Drupal && Drupal.t) {
- ok = Drupal.t(ok);
- cancel = Drupal.t(cancel);
- notSelected = Drupal.t(notSelected);
- }
- // @todo: let some options come through here. Currently can't be changed.
- var dialogOptions = Drupal.media.popups.getDialogOptions();
- dialogOptions.buttons[ok] = function () {
- alert('hell yeah');
- return "poo";
- var formattedMedia = this.contentWindow.Drupal.media.formatForm.getFormattedMedia();
- if (!formattedMedia) {
- alert(notSelected);
- return;
- }
- onSelect(formattedMedia);
- $(this).dialog("destroy");
- $(this).remove();
- };
- dialogOptions.buttons[cancel] = function () {
- $(this).dialog("destroy");
- $(this).remove();
- };
- Drupal.media.popups.setDialogPadding(mediaIframe.dialog(dialogOptions));
- // Remove the title bar.
- mediaIframe.parents(".ui-dialog").find(".ui-dialog-titlebar").remove();
- Drupal.media.popups.overlayDisplace(mediaIframe.parents(".ui-dialog"));
- return mediaIframe;
- };
- Drupal.media.popups.mediaFieldEditor.mediaBrowserOnLoad = function (e) {
- };
- Drupal.media.popups.mediaFieldEditor.getDefaults = function () {
- return {
- // @todo: do this for real
- src: '/media/-media_id-/edit?render=media-popup',
- onLoad: Drupal.media.popups.mediaFieldEditor.mediaBrowserOnLoad
- };
- };
- /**
- * Generic functions to both the media-browser and style selector
- */
- /**
- * Returns the commonly used options for the dialog.
- */
- Drupal.media.popups.getDialogOptions = function () {
- return {
- buttons: {},
- dialogClass: 'media-wrapper',
- modal: true,
- draggable: false,
- resizable: false,
- minWidth: 600,
- width: 800,
- height: 550,
- position: 'center',
- overlay: {
- backgroundColor: '#000000',
- opacity: 0.4
- }
- };
- };
- /**
- * Created padding on a dialog
- *
- * @param jQuery dialogElement
- * The element which has .dialog() attached to it.
- */
- Drupal.media.popups.setDialogPadding = function (dialogElement) {
- // @TODO: Perhaps remove this hardcoded reference to height.
- // - It's included to make IE on Windows 7 display the dialog without
- // collapsing. 550 is the height that displays all of the tab panes
- // within the Add Media overlay. This is either a bug in the jQuery
- // UI library, a bug in IE on Windows 7 or a bug in the way the
- // dialog is instantiated. Or a combo of the three.
- // All browsers except IE on Win7 ignore these defaults and adjust
- // the height of the iframe correctly to match the content in the panes
- dialogElement.height(dialogElement.dialog('option', 'height'));
- dialogElement.width(dialogElement.dialog('option', 'width'));
- };
- /**
- * Get an iframe to serve as the dialog's contents. Common to both plugins.
- */
- Drupal.media.popups.getPopupIframe = function (src, id, options) {
- var defaults = {width: '800px', scrolling: 'no'};
- var options = $.extend({}, defaults, options);
- return $('<iframe class="media-modal-frame"/>')
- .attr('src', src)
- .attr('width', options.width)
- .attr('id', id)
- .attr('scrolling', options.scrolling);
- };
- Drupal.media.popups.overlayDisplace = function (dialog) {
- if (parent.window.Drupal.overlay) {
- var overlayDisplace = parent.window.Drupal.overlay.getDisplacement('top');
- if (dialog.offset().top < overlayDisplace) {
- dialog.css('top', overlayDisplace);
- }
- }
- }
- })(jQuery);
|