bootstrap_modal_rails 2.0.3 → 2.0.4

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.
@@ -18,353 +18,353 @@
18
18
 
19
19
  !function ($) {
20
20
 
21
- "use strict"; // jshint ;_;
21
+ "use strict"; // jshint ;_;
22
22
 
23
- /* MODAL MANAGER CLASS DEFINITION
24
- * ====================== */
23
+ /* MODAL MANAGER CLASS DEFINITION
24
+ * ====================== */
25
25
 
26
- var ModalManager = function (element, options) {
27
- this.init(element, options);
28
- }
26
+ var ModalManager = function (element, options) {
27
+ this.init(element, options);
28
+ }
29
29
 
30
- ModalManager.prototype = {
30
+ ModalManager.prototype = {
31
31
 
32
- constructor: ModalManager,
32
+ constructor: ModalManager,
33
33
 
34
- init: function (element, options) {
35
- this.$element = $(element);
36
- this.options = $.extend({}, $.fn.modalmanager.defaults, this.$element.data(), typeof options == 'object' && options);
37
- this.stack = [];
38
- this.backdropCount = 0;
39
- },
34
+ init: function (element, options) {
35
+ this.$element = $(element);
36
+ this.options = $.extend({}, $.fn.modalmanager.defaults, this.$element.data(), typeof options == 'object' && options);
37
+ this.stack = [];
38
+ this.backdropCount = 0;
39
+ },
40
40
 
41
- createModal: function (element, options) {
42
- $(element).modal($.extend({ manager: this }, options));
43
- },
41
+ createModal: function (element, options) {
42
+ $(element).modal($.extend({ manager: this }, options));
43
+ },
44
44
 
45
- appendModal: function (modal) {
46
- this.stack.push(modal);
45
+ appendModal: function (modal) {
46
+ this.stack.push(modal);
47
47
 
48
- var that = this;
48
+ var that = this;
49
49
 
50
- modal.$element.on('show.modalmanager', targetIsSelf(function (e) {
51
- modal.isShown = true;
50
+ modal.$element.on('show.modalmanager', targetIsSelf(function (e) {
51
+ modal.isShown = true;
52
52
 
53
- var transition = $.support.transition && modal.$element.hasClass('fade');
54
-
55
- that.$element
56
- .toggleClass('modal-open', that.hasOpenModal())
57
- .toggleClass('page-overflow', $(window).height() < that.$element.height());
58
-
59
- modal.$parent = modal.$element.parent();
60
-
61
- modal.$container = that.createContainer(modal);
53
+ var transition = $.support.transition && modal.$element.hasClass('fade');
54
+
55
+ that.$element
56
+ .toggleClass('modal-open', that.hasOpenModal())
57
+ .toggleClass('page-overflow', $(window).height() < that.$element.height());
58
+
59
+ modal.$parent = modal.$element.parent();
60
+
61
+ modal.$container = that.createContainer(modal);
62
62
 
63
- modal.$element.appendTo(modal.$container);
63
+ modal.$element.appendTo(modal.$container);
64
64
 
65
- var modalOverflow = $(window).height() < modal.$element.height() || modal.options.modalOverflow;
66
-
67
- that.backdrop(modal, function () {
65
+ var modalOverflow = $(window).height() < modal.$element.height() || modal.options.modalOverflow;
66
+
67
+ that.backdrop(modal, function () {
68
68
 
69
- modal.$element.show();
69
+ modal.$element.show();
70
70
 
71
- if (transition) {
72
- modal.$element[0].style.display = 'run-in';
73
- modal.$element[0].offsetWidth;
74
- modal.$element.one($.support.transition.end, function () { modal.$element[0].style.display = 'block' });
75
- }
71
+ if (transition) {
72
+ modal.$element[0].style.display = 'run-in';
73
+ modal.$element[0].offsetWidth;
74
+ modal.$element.one($.support.transition.end, function () { modal.$element[0].style.display = 'block' });
75
+ }
76
76
 
77
- modal.$element
78
- .toggleClass('modal-overflow', modalOverflow)
79
- .css('margin-top', modalOverflow ? 0 : 0 - modal.$element.height()/2)
80
- .addClass('in')
81
- .attr('aria-hidden', false);
82
-
83
- var complete = function () {
84
- that.setFocus();
85
- modal.$element.triggerHandler('shown');
86
- }
77
+ modal.$element
78
+ .toggleClass('modal-overflow', modalOverflow)
79
+ .css('margin-top', modalOverflow ? 0 : 0 - modal.$element.height()/2)
80
+ .addClass('in')
81
+ .attr('aria-hidden', false);
82
+
83
+ var complete = function () {
84
+ that.setFocus();
85
+ modal.$element.triggerHandler('shown');
86
+ }
87
87
 
88
- transition ?
89
- modal.$element.one($.support.transition.end, complete) :
90
- complete();
91
- });
92
- }));
88
+ transition ?
89
+ modal.$element.one($.support.transition.end, complete) :
90
+ complete();
91
+ });
92
+ }));
93
93
 
94
- modal.$element.on('hidden.modalmanager', targetIsSelf(function (e) {
94
+ modal.$element.on('hidden.modalmanager', targetIsSelf(function (e) {
95
95
 
96
- that.backdrop(modal);
96
+ that.backdrop(modal);
97
97
 
98
- if (modal.$backdrop){
99
- $.support.transition && modal.$element.hasClass('fade')?
100
- modal.$backdrop.one($.support.transition.end, function () { that.destroyModal(modal) }) :
101
- that.destroyModal(modal);
102
- } else {
103
- that.destroyModal(modal);
104
- }
98
+ if (modal.$backdrop){
99
+ $.support.transition && modal.$element.hasClass('fade')?
100
+ modal.$backdrop.one($.support.transition.end, function () { that.destroyModal(modal) }) :
101
+ that.destroyModal(modal);
102
+ } else {
103
+ that.destroyModal(modal);
104
+ }
105
105
 
106
- }));
106
+ }));
107
107
 
108
- modal.$element.on('destroy.modalmanager', targetIsSelf(function (e) {
109
- that.removeModal(modal);
110
- }));
111
- },
112
-
113
- destroyModal: function (modal) {
108
+ modal.$element.on('destroy.modalmanager', targetIsSelf(function (e) {
109
+ that.removeModal(modal);
110
+ }));
111
+ },
112
+
113
+ destroyModal: function (modal) {
114
114
 
115
- modal.destroy();
115
+ modal.destroy();
116
116
 
117
- var hasOpenModal = this.hasOpenModal();
117
+ var hasOpenModal = this.hasOpenModal();
118
118
 
119
- this.$element.toggleClass('modal-open', hasOpenModal);
120
-
121
- if (!hasOpenModal){
122
- this.$element.removeClass('page-overflow');
123
- }
119
+ this.$element.toggleClass('modal-open', hasOpenModal);
120
+
121
+ if (!hasOpenModal){
122
+ this.$element.removeClass('page-overflow');
123
+ }
124
124
 
125
- this.removeContainer(modal);
125
+ this.removeContainer(modal);
126
126
 
127
- this.setFocus();
128
- },
127
+ this.setFocus();
128
+ },
129
129
 
130
- hasOpenModal: function () {
131
- for (var i = 0; i < this.stack.length; i++){
132
- if (this.stack[i].isShown) return true;
133
- }
130
+ hasOpenModal: function () {
131
+ for (var i = 0; i < this.stack.length; i++){
132
+ if (this.stack[i].isShown) return true;
133
+ }
134
134
 
135
- return false;
136
- },
135
+ return false;
136
+ },
137
137
 
138
- setFocus: function () {
139
- var topModal;
138
+ setFocus: function () {
139
+ var topModal;
140
140
 
141
- for (var i = 0; i < this.stack.length; i++){
142
- if (this.stack[i].isShown) topModal = this.stack[i];
143
- }
141
+ for (var i = 0; i < this.stack.length; i++){
142
+ if (this.stack[i].isShown) topModal = this.stack[i];
143
+ }
144
144
 
145
- if (!topModal) return;
145
+ if (!topModal) return;
146
146
 
147
- topModal.focus();
147
+ topModal.focus();
148
148
 
149
- },
149
+ },
150
150
 
151
- removeModal: function (modal) {
152
- modal.$element.off('.modalmanager');
153
- if (modal.$backdrop) this.removeBackdrop.call(modal);
154
- this.stack.splice(this.getIndexOfModal(modal), 1);
155
- },
151
+ removeModal: function (modal) {
152
+ modal.$element.off('.modalmanager');
153
+ if (modal.$backdrop) this.removeBackdrop.call(modal);
154
+ this.stack.splice(this.getIndexOfModal(modal), 1);
155
+ },
156
156
 
157
- getModalAt: function (index) {
158
- return this.stack[index];
159
- },
157
+ getModalAt: function (index) {
158
+ return this.stack[index];
159
+ },
160
160
 
161
- getIndexOfModal: function (modal) {
162
- for (var i = 0; i < this.stack.length; i++){
163
- if (modal === this.stack[i]) return i;
164
- }
165
- },
161
+ getIndexOfModal: function (modal) {
162
+ for (var i = 0; i < this.stack.length; i++){
163
+ if (modal === this.stack[i]) return i;
164
+ }
165
+ },
166
166
 
167
- removeBackdrop: function (modal) {
168
- modal.$backdrop.remove();
169
- modal.$backdrop = null;
170
- },
167
+ removeBackdrop: function (modal) {
168
+ modal.$backdrop.remove();
169
+ modal.$backdrop = null;
170
+ },
171
171
 
172
- createBackdrop: function (animate) {
173
- var $backdrop;
172
+ createBackdrop: function (animate) {
173
+ var $backdrop;
174
174
 
175
- if (!this.isLoading) {
176
- $backdrop = $('<div class="modal-backdrop ' + animate + '" />')
177
- .appendTo(this.$element);
175
+ if (!this.isLoading) {
176
+ $backdrop = $('<div class="modal-backdrop ' + animate + '" />')
177
+ .appendTo(this.$element);
178
178
 
179
- } else {
180
- $backdrop = this.$loading;
181
- $backdrop.off('.modalmanager');
182
- this.$spinner.remove();
183
- this.isLoading = false;
184
- this.$loading = this.$spinner = null;
185
- }
179
+ } else {
180
+ $backdrop = this.$loading;
181
+ $backdrop.off('.modalmanager');
182
+ this.$spinner.remove();
183
+ this.isLoading = false;
184
+ this.$loading = this.$spinner = null;
185
+ }
186
186
 
187
- return $backdrop
188
- },
187
+ return $backdrop
188
+ },
189
189
 
190
- removeContainer: function (modal) {
191
- modal.$container.remove();
192
- modal.$container = null;
193
- },
190
+ removeContainer: function (modal) {
191
+ modal.$container.remove();
192
+ modal.$container = null;
193
+ },
194
194
 
195
- createContainer: function (modal) {
196
- var $container;
195
+ createContainer: function (modal) {
196
+ var $container;
197
197
 
198
- $container = $('<div class="modal-scrollable">')
199
- .css('z-index', getzIndex( 'modal',
200
- modal ? this.getIndexOfModal(modal) : this.stack.length ))
201
- .appendTo(this.$element);
198
+ $container = $('<div class="modal-scrollable">')
199
+ .css('z-index', getzIndex( 'modal',
200
+ modal ? this.getIndexOfModal(modal) : this.stack.length ))
201
+ .appendTo(this.$element);
202
202
 
203
- if (modal && modal.options.backdrop != 'static') {
204
- $container.on('click.modal', targetIsSelf(function (e) {
205
- modal.hide();
206
- }));
207
- } else if (modal) {
208
- $container.on('click.modal', targetIsSelf(function (e) {
209
- modal.attention();
210
- }));
211
- }
203
+ if (modal && modal.options.backdrop != 'static') {
204
+ $container.on('click.modal', targetIsSelf(function (e) {
205
+ modal.hide();
206
+ }));
207
+ } else if (modal) {
208
+ $container.on('click.modal', targetIsSelf(function (e) {
209
+ modal.attention();
210
+ }));
211
+ }
212
212
 
213
- return $container;
213
+ return $container;
214
214
 
215
- },
215
+ },
216
216
 
217
- backdrop: function (modal, callback) {
218
- var animate = modal.$element.hasClass('fade') ? 'fade' : '',
219
- showBackdrop = modal.options.backdrop &&
220
- this.backdropCount < this.options.backdropLimit;
217
+ backdrop: function (modal, callback) {
218
+ var animate = modal.$element.hasClass('fade') ? 'fade' : '',
219
+ showBackdrop = modal.options.backdrop &&
220
+ this.backdropCount < this.options.backdropLimit;
221
221
 
222
- if (modal.isShown && showBackdrop) {
223
- var doAnimate = $.support.transition && animate && !this.isLoading;
222
+ if (modal.isShown && showBackdrop) {
223
+ var doAnimate = $.support.transition && animate && !this.isLoading;
224
224
 
225
225
 
226
- modal.$backdrop = this.createBackdrop(animate);
226
+ modal.$backdrop = this.createBackdrop(animate);
227
227
 
228
- modal.$backdrop.css('z-index', getzIndex( 'backdrop', this.getIndexOfModal(modal) ))
228
+ modal.$backdrop.css('z-index', getzIndex( 'backdrop', this.getIndexOfModal(modal) ))
229
229
 
230
- if (doAnimate) modal.$backdrop[0].offsetWidth // force reflow
230
+ if (doAnimate) modal.$backdrop[0].offsetWidth // force reflow
231
231
 
232
- modal.$backdrop.addClass('in')
232
+ modal.$backdrop.addClass('in')
233
233
 
234
- this.backdropCount += 1;
234
+ this.backdropCount += 1;
235
235
 
236
- doAnimate ?
237
- modal.$backdrop.one($.support.transition.end, callback) :
238
- callback();
236
+ doAnimate ?
237
+ modal.$backdrop.one($.support.transition.end, callback) :
238
+ callback();
239
239
 
240
- } else if (!modal.isShown && modal.$backdrop) {
241
- modal.$backdrop.removeClass('in');
240
+ } else if (!modal.isShown && modal.$backdrop) {
241
+ modal.$backdrop.removeClass('in');
242
242
 
243
- this.backdropCount -= 1;
243
+ this.backdropCount -= 1;
244
244
 
245
- var that = this;
245
+ var that = this;
246
246
 
247
- $.support.transition && modal.$element.hasClass('fade')?
248
- modal.$backdrop.one($.support.transition.end, function () { that.removeBackdrop(modal) }) :
249
- that.removeBackdrop(modal);
247
+ $.support.transition && modal.$element.hasClass('fade')?
248
+ modal.$backdrop.one($.support.transition.end, function () { that.removeBackdrop(modal) }) :
249
+ that.removeBackdrop(modal);
250
250
 
251
- } else if (callback) {
252
- callback();
253
- }
254
- },
251
+ } else if (callback) {
252
+ callback();
253
+ }
254
+ },
255
255
 
256
- removeLoading: function () {
257
- this.$loading && this.$loading.remove();
258
- this.$loading = null;
259
- this.isLoading = false;
260
- },
256
+ removeLoading: function () {
257
+ this.$loading && this.$loading.remove();
258
+ this.$loading = null;
259
+ this.isLoading = false;
260
+ },
261
261
 
262
- loading: function (callback) {
263
- callback = callback || function () { };
264
-
265
- this.$element
266
- .toggleClass('modal-open', !this.isLoading || this.hasOpenModal())
267
- .toggleClass('page-overflow', $(window).height() < this.$element.height());
268
-
269
- if (!this.isLoading) {
262
+ loading: function (callback) {
263
+ callback = callback || function () { };
264
+
265
+ this.$element
266
+ .toggleClass('modal-open', !this.isLoading || this.hasOpenModal())
267
+ .toggleClass('page-overflow', $(window).height() < this.$element.height());
268
+
269
+ if (!this.isLoading) {
270
270
 
271
- this.$loading = this.createBackdrop('fade');
271
+ this.$loading = this.createBackdrop('fade');
272
272
 
273
- this.$loading[0].offsetWidth // force reflow
273
+ this.$loading[0].offsetWidth // force reflow
274
274
 
275
- this.$loading
276
- .css('z-index', getzIndex('backdrop', this.stack.length))
277
- .addClass('in');
275
+ this.$loading
276
+ .css('z-index', getzIndex('backdrop', this.stack.length))
277
+ .addClass('in');
278
278
 
279
- var $spinner = $(this.options.spinner)
280
- .css('z-index', getzIndex('modal', this.stack.length))
281
- .appendTo(this.$element)
282
- .addClass('in');
279
+ var $spinner = $(this.options.spinner)
280
+ .css('z-index', getzIndex('modal', this.stack.length))
281
+ .appendTo(this.$element)
282
+ .addClass('in');
283
283
 
284
- this.$spinner = $(this.createContainer())
285
- .append($spinner)
286
- .on('click.modalmanager', $.proxy(this.loading, this));
284
+ this.$spinner = $(this.createContainer())
285
+ .append($spinner)
286
+ .on('click.modalmanager', $.proxy(this.loading, this));
287
287
 
288
- this.isLoading = true;
288
+ this.isLoading = true;
289
289
 
290
- $.support.transition ?
291
- this.$loading.one($.support.transition.end, callback) :
292
- callback();
290
+ $.support.transition ?
291
+ this.$loading.one($.support.transition.end, callback) :
292
+ callback();
293
293
 
294
- } else if (this.isLoading && this.$loading) {
295
- this.$loading.removeClass('in');
294
+ } else if (this.isLoading && this.$loading) {
295
+ this.$loading.removeClass('in');
296
296
 
297
- if (this.$spinner) this.$spinner.remove();
297
+ if (this.$spinner) this.$spinner.remove();
298
298
 
299
- var that = this;
300
- $.support.transition ?
301
- this.$loading.one($.support.transition.end, function () { that.removeLoading() }) :
302
- that.removeLoading();
299
+ var that = this;
300
+ $.support.transition ?
301
+ this.$loading.one($.support.transition.end, function () { that.removeLoading() }) :
302
+ that.removeLoading();
303
303
 
304
- } else if (callback) {
305
- callback(this.isLoading);
306
- }
307
- }
308
- }
304
+ } else if (callback) {
305
+ callback(this.isLoading);
306
+ }
307
+ }
308
+ }
309
309
 
310
- /* PRIVATE METHODS
311
- * ======================= */
310
+ /* PRIVATE METHODS
311
+ * ======================= */
312
312
 
313
- // computes and caches the zindexes
314
- var getzIndex = (function () {
315
- var zIndexFactor,
316
- baseIndex = {};
313
+ // computes and caches the zindexes
314
+ var getzIndex = (function () {
315
+ var zIndexFactor,
316
+ baseIndex = {};
317
317
 
318
- return function (type, pos) {
318
+ return function (type, pos) {
319
319
 
320
- if (typeof zIndexFactor === 'undefined'){
321
- var $baseModal = $('<div class="modal hide" />').appendTo('body'),
322
- $baseBackdrop = $('<div class="modal-backdrop hide" />').appendTo('body');
320
+ if (typeof zIndexFactor === 'undefined'){
321
+ var $baseModal = $('<div class="modal hide" />').appendTo('body'),
322
+ $baseBackdrop = $('<div class="modal-backdrop hide" />').appendTo('body');
323
323
 
324
- baseIndex['modal'] = +$baseModal.css('z-index'),
325
- baseIndex['backdrop'] = +$baseBackdrop.css('z-index'),
326
- zIndexFactor = baseIndex['modal'] - baseIndex['backdrop'];
327
-
328
- $baseModal.remove();
329
- $baseBackdrop.remove();
330
- $baseBackdrop = $baseModal = null;
331
- }
324
+ baseIndex['modal'] = +$baseModal.css('z-index'),
325
+ baseIndex['backdrop'] = +$baseBackdrop.css('z-index'),
326
+ zIndexFactor = baseIndex['modal'] - baseIndex['backdrop'];
327
+
328
+ $baseModal.remove();
329
+ $baseBackdrop.remove();
330
+ $baseBackdrop = $baseModal = null;
331
+ }
332
332
 
333
- return baseIndex[type] + (zIndexFactor * pos);
333
+ return baseIndex[type] + (zIndexFactor * pos);
334
334
 
335
- }
336
- }())
337
-
338
- // make sure the event target is the modal itself in order to prevent
339
- // other components such as tabsfrom triggering the modal manager.
340
- // if Boostsrap namespaced events, this would not be needed.
341
- function targetIsSelf(callback){
342
- return function (e) {
343
- if (this === e.target){
344
- return callback.apply(this, arguments);
345
- }
346
- }
347
- }
348
-
349
-
350
- /* MODAL MANAGER PLUGIN DEFINITION
351
- * ======================= */
352
-
353
- $.fn.modalmanager = function (option) {
354
- return this.each(function () {
355
- var $this = $(this),
356
- data = $this.data('modalmanager');
357
-
358
- if (!data) $this.data('modalmanager', (data = new ModalManager(this, option)))
359
- if (typeof option === 'string') data[option]()
360
- })
361
- }
362
-
363
- $.fn.modalmanager.defaults = {
364
- backdropLimit: 999,
365
- spinner: '<div class="loading-spinner fade" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
366
- }
335
+ }
336
+ }())
337
+
338
+ // make sure the event target is the modal itself in order to prevent
339
+ // other components such as tabsfrom triggering the modal manager.
340
+ // if Boostsrap namespaced events, this would not be needed.
341
+ function targetIsSelf(callback){
342
+ return function (e) {
343
+ if (this === e.target){
344
+ return callback.apply(this, arguments);
345
+ }
346
+ }
347
+ }
348
+
349
+
350
+ /* MODAL MANAGER PLUGIN DEFINITION
351
+ * ======================= */
352
+
353
+ $.fn.modalmanager = function (option) {
354
+ return this.each(function () {
355
+ var $this = $(this),
356
+ data = $this.data('modalmanager');
357
+
358
+ if (!data) $this.data('modalmanager', (data = new ModalManager(this, option)))
359
+ if (typeof option === 'string') data[option]()
360
+ })
361
+ }
362
+
363
+ $.fn.modalmanager.defaults = {
364
+ backdropLimit: 999,
365
+ spinner: '<div class="loading-spinner fade" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
366
+ }
367
367
 
368
- $.fn.modalmanager.Constructor = ModalManager
368
+ $.fn.modalmanager.Constructor = ModalManager
369
369
 
370
370
  }(jQuery);