jquery-qtip2-rails 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +13 -0
- data/jquery-qtip2-rails.gemspec +1 -0
- data/lib/jquery-qtip2-rails/version.rb +1 -1
- data/test/dummy/config/environments/production.rb +1 -1
- data/vendor/assets/jquery-qtip/jquery-qtip/src/ajax/ajax.js +10 -9
- data/vendor/assets/jquery-qtip/jquery-qtip/src/core.js +197 -144
- data/vendor/assets/jquery-qtip/jquery-qtip/src/ie6/ie6.js +8 -10
- data/vendor/assets/jquery-qtip/jquery-qtip/src/intro.js +9 -1
- data/vendor/assets/jquery-qtip/jquery-qtip/src/modal/modal.js +226 -195
- data/vendor/assets/jquery-qtip/jquery-qtip/src/tips/tips.css +9 -1
- data/vendor/assets/jquery-qtip/jquery-qtip/src/tips/tips.js +43 -23
- metadata +18 -2
@@ -1,8 +1,10 @@
|
|
1
|
+
var IE6;
|
2
|
+
|
1
3
|
/*
|
2
4
|
* BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)
|
3
5
|
* Special thanks to Brandon Aaron
|
4
6
|
*/
|
5
|
-
function
|
7
|
+
function Ie6(api)
|
6
8
|
{
|
7
9
|
var self = this,
|
8
10
|
elems = api.elements,
|
@@ -138,19 +140,15 @@ function IE6(api)
|
|
138
140
|
self.init();
|
139
141
|
}
|
140
142
|
|
141
|
-
PLUGINS.ie6 = function(api)
|
143
|
+
IE6 = PLUGINS.ie6 = function(api)
|
142
144
|
{
|
143
|
-
var
|
144
|
-
self = api.plugins.ie6;
|
145
|
+
var self = api.plugins.ie6;
|
145
146
|
|
146
147
|
// Proceed only if the browser is IE6
|
147
|
-
if(
|
148
|
-
return FALSE;
|
149
|
-
}
|
148
|
+
if(PLUGINS.ie !== 6) { return FALSE; }
|
150
149
|
|
151
|
-
return 'object' === typeof self ? self : (api.plugins.ie6 = new
|
150
|
+
return 'object' === typeof self ? self : (api.plugins.ie6 = new Ie6(api));
|
152
151
|
};
|
153
152
|
|
154
|
-
|
155
|
-
PLUGINS.ie6.initialize = 'render';
|
153
|
+
IE6.initialize = 'render';
|
156
154
|
|
@@ -23,22 +23,30 @@
|
|
23
23
|
FALSE = false,
|
24
24
|
NULL = null,
|
25
25
|
|
26
|
-
//
|
26
|
+
// Common variables
|
27
27
|
X = 'x', Y = 'y',
|
28
28
|
WIDTH = 'width',
|
29
29
|
HEIGHT = 'height',
|
30
|
+
|
31
|
+
// Positioning sides
|
30
32
|
TOP = 'top',
|
31
33
|
LEFT = 'left',
|
32
34
|
BOTTOM = 'bottom',
|
33
35
|
RIGHT = 'right',
|
34
36
|
CENTER = 'center',
|
37
|
+
|
38
|
+
// Position adjustment types
|
35
39
|
FLIP = 'flip',
|
36
40
|
FLIPINVERT = 'flipinvert',
|
37
41
|
SHIFT = 'shift',
|
38
42
|
|
43
|
+
// Used by image load detection (see core.js)
|
44
|
+
BLANKIMG = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==',
|
45
|
+
|
39
46
|
// Shortcut vars
|
40
47
|
QTIP, PLUGINS, MOUSE,
|
41
48
|
NAMESPACE = 'qtip',
|
49
|
+
HASATTR = 'data-hasqtip',
|
42
50
|
usedIDs = {},
|
43
51
|
widget = ['ui-widget', 'ui-tooltip'],
|
44
52
|
selector = 'div.qtip.'+NAMESPACE,
|
@@ -1,37 +1,43 @@
|
|
1
|
-
|
1
|
+
var MODAL, OVERLAY,
|
2
|
+
MODALATTR = 'is-modal-qtip',
|
3
|
+
MODALSELECTOR = selector + '['+MODALATTR+']',
|
4
|
+
MODALNS = '.qtipmodal';
|
5
|
+
|
6
|
+
OVERLAY = function()
|
2
7
|
{
|
3
8
|
var self = this,
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
9
|
+
focusableElems = {},
|
10
|
+
current, onLast,
|
11
|
+
prevState, elem;
|
12
|
+
|
13
|
+
// Modified code from jQuery UI 1.10.0 source
|
14
|
+
// http://code.jquery.com/ui/1.10.0/jquery-ui.js
|
15
|
+
function focusable(element) {
|
16
|
+
// Use the defined focusable checker when possible
|
17
|
+
if($.expr[':'].focusable) { return $.expr[':'].focusable; }
|
18
|
+
|
19
|
+
var isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')),
|
20
|
+
nodeName = element.nodeName.toLowerCase(),
|
21
|
+
map, mapName, img;
|
22
|
+
|
23
|
+
if('area' === nodeName) {
|
24
|
+
map = element.parentNode;
|
25
|
+
mapName = map.name;
|
26
|
+
if(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {
|
27
|
+
return false;
|
28
|
+
}
|
29
|
+
img = $('img[usemap=#' + mapName + ']')[0];
|
30
|
+
return !!img && img.is(':visible');
|
26
31
|
}
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
32
|
+
return (/input|select|textarea|button|object/.test( nodeName ) ?
|
33
|
+
!element.disabled :
|
34
|
+
'a' === nodeName ?
|
35
|
+
element.href || isTabIndexNotNaN :
|
36
|
+
isTabIndexNotNaN
|
37
|
+
);
|
33
38
|
}
|
34
39
|
|
40
|
+
// Focus inputs using cached focusable elements (see update())
|
35
41
|
function focusInputs(blurElems) {
|
36
42
|
// Blurring body element in IE causes window.open windows to unfocus!
|
37
43
|
if(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); }
|
@@ -40,9 +46,13 @@ function Modal(api)
|
|
40
46
|
else { focusableElems.first().focus(); }
|
41
47
|
}
|
42
48
|
|
49
|
+
// Steal focus from elements outside tooltip
|
43
50
|
function stealFocus(event) {
|
51
|
+
if(!elem.is(':visible')) { return; }
|
52
|
+
|
44
53
|
var target = $(event.target),
|
45
|
-
|
54
|
+
tooltip = current.elements.tooltip,
|
55
|
+
container = target.closest(selector),
|
46
56
|
targetOnTop;
|
47
57
|
|
48
58
|
// Determine if input container target is above this
|
@@ -52,31 +62,184 @@ function Modal(api)
|
|
52
62
|
// If we're showing a modal, but focus has landed on an input below
|
53
63
|
// this modal, divert focus to the first visible input in this modal
|
54
64
|
// or if we can't find one... the tooltip itself
|
55
|
-
if(!targetOnTop &&
|
65
|
+
if(!targetOnTop && target.closest(selector)[0] !== tooltip[0]) {
|
56
66
|
focusInputs(target);
|
57
67
|
}
|
68
|
+
|
69
|
+
// Detect when we leave the last focusable element...
|
70
|
+
onLast = event.target === focusableElems[focusableElems.length - 1];
|
58
71
|
}
|
59
72
|
|
73
|
+
$.extend(self, {
|
74
|
+
init: function()
|
75
|
+
{
|
76
|
+
// Create document overlay
|
77
|
+
elem = self.elem = $('<div />', {
|
78
|
+
id: 'qtip-overlay',
|
79
|
+
html: '<div></div>',
|
80
|
+
mousedown: function() { return FALSE; }
|
81
|
+
})
|
82
|
+
.hide();
|
83
|
+
|
84
|
+
// Update position on window resize or scroll
|
85
|
+
function resize() {
|
86
|
+
var win = $(this);
|
87
|
+
elem.css({
|
88
|
+
height: win.height(),
|
89
|
+
width: win.width()
|
90
|
+
});
|
91
|
+
}
|
92
|
+
$(window).bind('resize'+MODALNS, resize);
|
93
|
+
resize(); // Fire it initially too
|
94
|
+
|
95
|
+
// Make sure we can't focus anything outside the tooltip
|
96
|
+
$(document.body).bind('focusin'+MODALNS, stealFocus);
|
97
|
+
|
98
|
+
// Apply keyboard "Escape key" close handler
|
99
|
+
$(document).bind('keydown'+MODALNS, function(event) {
|
100
|
+
if(current && current.options.show.modal.escape && event.keyCode === 27) {
|
101
|
+
current.hide(event);
|
102
|
+
}
|
103
|
+
});
|
104
|
+
|
105
|
+
// Apply click handler for blur option
|
106
|
+
elem.bind('click'+MODALNS, function(event) {
|
107
|
+
if(current && current.options.show.modal.blur) {
|
108
|
+
current.hide(event);
|
109
|
+
}
|
110
|
+
});
|
111
|
+
|
112
|
+
return self;
|
113
|
+
},
|
114
|
+
|
115
|
+
update: function(api) {
|
116
|
+
// Update current API reference
|
117
|
+
current = api;
|
118
|
+
|
119
|
+
// Update focusable elements if enabled
|
120
|
+
if(api.options.show.modal.stealfocus !== FALSE) {
|
121
|
+
focusableElems = api.elements.tooltip.find('*').filter(function() {
|
122
|
+
return focusable(this);
|
123
|
+
});
|
124
|
+
}
|
125
|
+
else { focusableElems = []; }
|
126
|
+
},
|
127
|
+
|
128
|
+
toggle: function(api, state, duration)
|
129
|
+
{
|
130
|
+
var docBody = $(document.body),
|
131
|
+
tooltip = api.elements.tooltip,
|
132
|
+
options = api.options.show.modal,
|
133
|
+
effect = options.effect,
|
134
|
+
type = state ? 'show': 'hide',
|
135
|
+
visible = elem.is(':visible'),
|
136
|
+
modals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip),
|
137
|
+
zindex;
|
138
|
+
|
139
|
+
// Set active tooltip API reference
|
140
|
+
self.update(api);
|
141
|
+
|
142
|
+
// If the modal can steal the focus...
|
143
|
+
// Blur the current item and focus anything in the modal we an
|
144
|
+
if(state && options.stealfocus !== FALSE) {
|
145
|
+
focusInputs( $(':focus') );
|
146
|
+
}
|
147
|
+
|
148
|
+
// Toggle backdrop cursor style on show
|
149
|
+
elem.toggleClass('blurs', options.blur);
|
150
|
+
|
151
|
+
// Set position and append to body on show
|
152
|
+
if(state) {
|
153
|
+
elem.css({ left: 0, top: 0 })
|
154
|
+
.appendTo(document.body);
|
155
|
+
}
|
156
|
+
|
157
|
+
// Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible
|
158
|
+
if((elem.is(':animated') && visible === state && prevState !== FALSE) || (!state && modals.length)) {
|
159
|
+
return self;
|
160
|
+
}
|
161
|
+
|
162
|
+
// Stop all animations
|
163
|
+
elem.stop(TRUE, FALSE);
|
164
|
+
|
165
|
+
// Use custom function if provided
|
166
|
+
if($.isFunction(effect)) {
|
167
|
+
effect.call(elem, state);
|
168
|
+
}
|
169
|
+
|
170
|
+
// If no effect type is supplied, use a simple toggle
|
171
|
+
else if(effect === FALSE) {
|
172
|
+
elem[ type ]();
|
173
|
+
}
|
174
|
+
|
175
|
+
// Use basic fade function
|
176
|
+
else {
|
177
|
+
elem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() {
|
178
|
+
if(!state) { elem.hide(); }
|
179
|
+
});
|
180
|
+
}
|
181
|
+
|
182
|
+
// Reset position and detach from body on hide
|
183
|
+
if(!state) {
|
184
|
+
elem.queue(function(next) {
|
185
|
+
elem.css({ left: '', top: '' });
|
186
|
+
if(!modals.length) { elem.detach(); }
|
187
|
+
next();
|
188
|
+
});
|
189
|
+
}
|
190
|
+
|
191
|
+
// Cache the state
|
192
|
+
prevState = state;
|
193
|
+
|
194
|
+
// If the tooltip is destroyed, set referenceto null
|
195
|
+
if(current.destroyed) { current = NULL; }
|
196
|
+
|
197
|
+
return self;
|
198
|
+
}
|
199
|
+
});
|
200
|
+
|
201
|
+
self.init();
|
202
|
+
};
|
203
|
+
OVERLAY = new OVERLAY();
|
204
|
+
|
205
|
+
function Modal(api)
|
206
|
+
{
|
207
|
+
var self = this,
|
208
|
+
options = api.options.show.modal,
|
209
|
+
elems = api.elements,
|
210
|
+
tooltip = elems.tooltip,
|
211
|
+
namespace = MODALNS + api.id,
|
212
|
+
overlay;
|
213
|
+
|
214
|
+
// Setup option set checks
|
215
|
+
api.checks.modal = {
|
216
|
+
'^show.modal.(on|blur)$': function() {
|
217
|
+
// Initialise
|
218
|
+
self.destroy();
|
219
|
+
self.init();
|
220
|
+
|
221
|
+
// Show the modal if not visible already and tooltip is visible
|
222
|
+
overlay.toggle( tooltip.is(':visible') );
|
223
|
+
}
|
224
|
+
};
|
225
|
+
|
60
226
|
$.extend(self, {
|
61
227
|
init: function()
|
62
228
|
{
|
63
229
|
// If modal is disabled... return
|
64
230
|
if(!options.on) { return self; }
|
65
231
|
|
66
|
-
//
|
67
|
-
overlay =
|
232
|
+
// Set overlay reference
|
233
|
+
overlay = elems.overlay = OVERLAY.elem;
|
68
234
|
|
69
235
|
// Add unique attribute so we can grab modal tooltips easily via a selector
|
70
|
-
tooltip.attr(
|
236
|
+
tooltip.attr(MODALATTR, TRUE)
|
71
237
|
|
72
238
|
// Set z-index
|
73
|
-
.css('z-index', PLUGINS.modal.zindex + $(
|
239
|
+
.css('z-index', PLUGINS.modal.zindex + $(MODALSELECTOR).length)
|
74
240
|
|
75
|
-
// Remove previous bound events in globalNamespace
|
76
|
-
.unbind(globalNamespace).unbind(namespace)
|
77
|
-
|
78
241
|
// Apply our show/hide/focus modal events
|
79
|
-
.bind('tooltipshow'+
|
242
|
+
.bind('tooltipshow'+namespace+' tooltiphide'+namespace, function(event, api, duration) {
|
80
243
|
var oEvent = event.originalEvent;
|
81
244
|
|
82
245
|
// Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop
|
@@ -85,24 +248,24 @@ function Modal(api)
|
|
85
248
|
try { event.preventDefault(); } catch(e) {}
|
86
249
|
}
|
87
250
|
else if(!oEvent || (oEvent && !oEvent.solo)) {
|
88
|
-
self
|
251
|
+
self.toggle(event, event.type === 'tooltipshow', duration);
|
89
252
|
}
|
90
253
|
}
|
91
254
|
})
|
92
255
|
|
93
256
|
// Adjust modal z-index on tooltip focus
|
94
|
-
.bind('tooltipfocus'+
|
95
|
-
// If focus was cancelled before it
|
257
|
+
.bind('tooltipfocus'+namespace, function(event, api) {
|
258
|
+
// If focus was cancelled before it reached us, don't do anything
|
96
259
|
if(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; }
|
97
260
|
|
98
|
-
var qtips = $(
|
261
|
+
var qtips = $(MODALSELECTOR),
|
99
262
|
|
100
263
|
// Keep the modal's lower than other, regular qtips
|
101
264
|
newIndex = PLUGINS.modal.zindex + qtips.length,
|
102
265
|
curIndex = parseInt(tooltip[0].style.zIndex, 10);
|
103
266
|
|
104
267
|
// Set overlay z-index
|
105
|
-
overlay[0].style.zIndex = newIndex -
|
268
|
+
overlay[0].style.zIndex = newIndex - 1;
|
106
269
|
|
107
270
|
// Reduce modal z-index's and keep them properly ordered
|
108
271
|
qtips.each(function() {
|
@@ -112,191 +275,60 @@ function Modal(api)
|
|
112
275
|
});
|
113
276
|
|
114
277
|
// Fire blur event for focused tooltip
|
115
|
-
qtips.
|
278
|
+
qtips.filter('.' + focusClass).qtip('blur', event.originalEvent);
|
116
279
|
|
117
280
|
// Set the new z-index
|
118
281
|
tooltip.addClass(focusClass)[0].style.zIndex = newIndex;
|
119
282
|
|
283
|
+
// Set current
|
284
|
+
OVERLAY.update(api);
|
285
|
+
|
120
286
|
// Prevent default handling
|
121
287
|
try { event.preventDefault(); } catch(e) {}
|
122
288
|
})
|
123
289
|
|
124
290
|
// Focus any other visible modals when this one hides
|
125
|
-
.bind('tooltiphide'+
|
291
|
+
.bind('tooltiphide'+namespace, function(event) {
|
126
292
|
if(event.target === tooltip[0]) {
|
127
|
-
$(
|
293
|
+
$(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event);
|
128
294
|
}
|
129
295
|
});
|
130
296
|
|
131
|
-
// Apply keyboard "Escape key" close handler
|
132
|
-
if(options.escape) {
|
133
|
-
$(document).unbind(namespace).bind('keydown'+namespace, function(event) {
|
134
|
-
if(event.keyCode === 27 && tooltip.hasClass(focusClass)) {
|
135
|
-
api.hide(event);
|
136
|
-
}
|
137
|
-
});
|
138
|
-
}
|
139
|
-
|
140
|
-
// Apply click handler for blur option
|
141
|
-
if(options.blur) {
|
142
|
-
elems.overlay.unbind(namespace).bind('click'+namespace, function(event) {
|
143
|
-
if(tooltip.hasClass(focusClass)) { api.hide(event); }
|
144
|
-
});
|
145
|
-
}
|
146
|
-
|
147
|
-
// Update focusable elements
|
148
|
-
updateFocusable();
|
149
|
-
|
150
297
|
return self;
|
151
298
|
},
|
152
299
|
|
153
|
-
create: function()
|
154
|
-
{
|
155
|
-
var elem = $(overlaySelector), win = $(window);
|
156
|
-
|
157
|
-
// Return if overlay is already rendered
|
158
|
-
if(elem.length) {
|
159
|
-
// Modal overlay should always be below all tooltips if possible
|
160
|
-
return (elems.overlay = elem.insertAfter( $(selector).last() ));
|
161
|
-
}
|
162
|
-
|
163
|
-
// Create document overlay
|
164
|
-
overlay = elems.overlay = $('<div />', {
|
165
|
-
id: overlaySelector.substr(1),
|
166
|
-
html: '<div></div>',
|
167
|
-
mousedown: function() { return FALSE; }
|
168
|
-
})
|
169
|
-
.hide()
|
170
|
-
.insertAfter( $(selector).last() );
|
171
|
-
|
172
|
-
// Update position on window resize or scroll
|
173
|
-
function resize() {
|
174
|
-
overlay.css({
|
175
|
-
height: win.height(),
|
176
|
-
width: win.width()
|
177
|
-
});
|
178
|
-
}
|
179
|
-
win.unbind(globalNamespace).bind('resize'+globalNamespace, resize);
|
180
|
-
resize(); // Fire it initially too
|
181
|
-
|
182
|
-
return overlay;
|
183
|
-
},
|
184
|
-
|
185
300
|
toggle: function(event, state, duration)
|
186
301
|
{
|
187
302
|
// Make sure default event hasn't been prevented
|
188
303
|
if(event && event.isDefaultPrevented()) { return self; }
|
189
304
|
|
190
|
-
|
191
|
-
|
192
|
-
visible = overlay.is(':visible'),
|
193
|
-
modals = $('[' + attr + ']').filter(':visible').not(tooltip),
|
194
|
-
zindex;
|
195
|
-
|
196
|
-
// Create our overlay if it isn't present already
|
197
|
-
if(!overlay) { overlay = self.create(); }
|
198
|
-
|
199
|
-
// Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible
|
200
|
-
if((overlay.is(':animated') && visible === state && overlay.data('toggleState') !== FALSE) || (!state && modals.length)) {
|
201
|
-
return self;
|
202
|
-
}
|
203
|
-
|
204
|
-
// State specific...
|
205
|
-
if(state) {
|
206
|
-
// Set position
|
207
|
-
overlay.css({ left: 0, top: 0 });
|
208
|
-
|
209
|
-
// Toggle backdrop cursor style on show
|
210
|
-
overlay.toggleClass('blurs', options.blur);
|
211
|
-
|
212
|
-
// IF the modal can steal the focus
|
213
|
-
if(options.stealfocus !== FALSE) {
|
214
|
-
// Make sure we can't focus anything outside the tooltip
|
215
|
-
docBody.bind('focusin'+namespace, stealFocus);
|
216
|
-
|
217
|
-
// Blur the current item and focus anything in the modal we an
|
218
|
-
focusInputs( $('body :focus') );
|
219
|
-
}
|
220
|
-
}
|
221
|
-
else {
|
222
|
-
// Undelegate focus handler
|
223
|
-
docBody.unbind('focusin'+namespace);
|
224
|
-
}
|
225
|
-
|
226
|
-
// Stop all animations
|
227
|
-
overlay.stop(TRUE, FALSE).data('toggleState', state);
|
228
|
-
|
229
|
-
// Use custom function if provided
|
230
|
-
if($.isFunction(effect)) {
|
231
|
-
effect.call(overlay, state);
|
232
|
-
}
|
233
|
-
|
234
|
-
// If no effect type is supplied, use a simple toggle
|
235
|
-
else if(effect === FALSE) {
|
236
|
-
overlay[ type ]();
|
237
|
-
}
|
238
|
-
|
239
|
-
// Use basic fade function
|
240
|
-
else {
|
241
|
-
overlay.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() {
|
242
|
-
if(!state) { $(this).hide(); }
|
243
|
-
});
|
244
|
-
}
|
245
|
-
|
246
|
-
// Reset position on hide
|
247
|
-
if(!state) {
|
248
|
-
overlay.queue(function(next) {
|
249
|
-
overlay.css({ left: '', top: '' }).removeData('toggleState');
|
250
|
-
next();
|
251
|
-
});
|
252
|
-
}
|
305
|
+
// Toggle it
|
306
|
+
OVERLAY.toggle(api, !!state, duration);
|
253
307
|
|
254
308
|
return self;
|
255
309
|
},
|
256
310
|
|
257
|
-
|
258
|
-
hide: function(event, duration) { return self.toggle(event, FALSE, duration); },
|
259
|
-
|
260
|
-
destroy: function()
|
261
|
-
{
|
262
|
-
var delBlanket = overlay;
|
263
|
-
|
264
|
-
if(delBlanket) {
|
265
|
-
// Check if any other modal tooltips are present
|
266
|
-
delBlanket = $('[' + attr + ']').not(tooltip).length < 1;
|
267
|
-
|
268
|
-
// Remove overlay if needed
|
269
|
-
if(delBlanket) {
|
270
|
-
elems.overlay.remove();
|
271
|
-
$(document).unbind(globalNamespace);
|
272
|
-
}
|
273
|
-
else {
|
274
|
-
elems.overlay.unbind(globalNamespace+api.id);
|
275
|
-
}
|
276
|
-
|
277
|
-
// Undelegate focus handler
|
278
|
-
docBody.unbind('focusin'+namespace);
|
279
|
-
}
|
280
|
-
|
311
|
+
destroy: function() {
|
281
312
|
// Remove bound events
|
282
|
-
|
313
|
+
$([document, tooltip]).removeAttr(MODALATTR).unbind(namespace);
|
314
|
+
|
315
|
+
// Delete element reference
|
316
|
+
OVERLAY.toggle(api, FALSE);
|
317
|
+
delete elems.overlay;
|
283
318
|
}
|
284
319
|
});
|
285
320
|
|
286
321
|
self.init();
|
287
322
|
}
|
288
323
|
|
289
|
-
PLUGINS.modal = function(api) {
|
324
|
+
MODAL = PLUGINS.modal = function(api) {
|
290
325
|
var self = api.plugins.modal;
|
291
326
|
|
292
327
|
return 'object' === typeof self ? self : (api.plugins.modal = new Modal(api));
|
293
328
|
};
|
294
329
|
|
295
|
-
// Plugin needs to be initialized on render
|
296
|
-
PLUGINS.modal.initialize = 'render';
|
297
|
-
|
298
330
|
// Setup sanitiztion rules
|
299
|
-
|
331
|
+
MODAL.sanitize = function(opts) {
|
300
332
|
if(opts.show) {
|
301
333
|
if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; }
|
302
334
|
else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; }
|
@@ -304,11 +336,10 @@ PLUGINS.modal.sanitize = function(opts) {
|
|
304
336
|
};
|
305
337
|
|
306
338
|
// Base z-index for all modal tooltips (use qTip core z-index as a base)
|
307
|
-
|
339
|
+
MODAL.zindex = QTIP.zindex - 200;
|
308
340
|
|
309
|
-
//
|
310
|
-
|
311
|
-
PLUGINS.modal.focusable = ['a[href]', 'area[href]', 'input', 'select', 'textarea', 'button', 'iframe', 'object', 'embed', '[tabindex]', '[contenteditable]'];
|
341
|
+
// Plugin needs to be initialized on render
|
342
|
+
MODAL.initialize = 'render';
|
312
343
|
|
313
344
|
// Extend original api defaults
|
314
345
|
$.extend(TRUE, QTIP.defaults, {
|