1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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));
|