bootstrap-modal-rails 2.0 → 2.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # Bootstrap::Modal::Rails
2
2
 
3
- Rails Asset Gem for the default [https://github.com/jschr/bootstrap-modal](Bootstrap Modal) class by [https://github.com/jschr](Jordan Schroter)
3
+ Rails Asset Gem for the default [Bootstrap Modal](https://github.com/jschr/bootstrap-modal) class by [Jordan Schroter](https://github.com/jschr)
4
4
 
5
5
  ## Installation
6
6
 
@@ -1,7 +1,7 @@
1
1
  module Bootstrap
2
2
  module Modal
3
3
  module Rails
4
- VERSION = "2.0"
4
+ VERSION = "2.1"
5
5
  end
6
6
  end
7
7
  end
@@ -1,5 +1,5 @@
1
1
  /* ===========================================================
2
- * bootstrap-modal.js v2.0
2
+ * bootstrap-modal.js v2.1
3
3
  * ===========================================================
4
4
  * Copyright 2012 Jordan Schroter
5
5
  *
@@ -20,79 +20,55 @@
20
20
  !function ($) {
21
21
 
22
22
  "use strict"; // jshint ;_;
23
-
23
+
24
24
  /* MODAL CLASS DEFINITION
25
25
  * ====================== */
26
26
 
27
27
  var Modal = function (element, options) {
28
28
  this.init(element, options);
29
- }
29
+ };
30
30
 
31
31
  Modal.prototype = {
32
32
 
33
- constructor: Modal,
34
-
33
+ constructor: Modal,
34
+
35
35
  init: function (element, options) {
36
36
  this.options = options;
37
-
37
+
38
38
  this.$element = $(element)
39
39
  .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this));
40
-
40
+
41
41
  this.options.remote && this.$element.find('.modal-body').load(this.options.remote);
42
-
43
- var manager = typeof this.options.manager === 'function' ?
42
+
43
+ var manager = typeof this.options.manager === 'function' ?
44
44
  this.options.manager.call(this) : this.options.manager;
45
45
 
46
- manager = manager.appendModal ?
46
+ manager = manager.appendModal ?
47
47
  manager : $(manager).modalmanager().data('modalmanager');
48
48
 
49
49
  manager.appendModal(this);
50
- },
51
-
50
+ },
51
+
52
52
  toggle: function () {
53
53
  return this[!this.isShown ? 'show' : 'hide']();
54
- },
55
-
54
+ },
55
+
56
56
  show: function () {
57
- var that = this,
58
- e = $.Event('show');
59
-
57
+ var e = $.Event('show');
58
+
60
59
  if (this.isShown) return;
61
60
 
62
61
  this.$element.triggerHandler(e);
63
62
 
64
63
  if (e.isDefaultPrevented()) return;
65
-
66
- if (this.options.width){
67
- this.$element.css('width', this.options.width);
68
-
69
- var that = this;
70
- this.$element.css('margin-left', function () {
71
- if (/%/ig.test(that.options.width)){
72
- return -(parseInt(that.options.width) / 2) + '%';
73
- } else {
74
- return -($(this).width() / 2) + 'px';
75
- }
76
- });
77
- }
78
-
79
- var prop = this.options.height ? 'height' : 'max-height';
80
-
81
- var value = this.options.height || this.options.maxHeight;
82
-
83
- if (value){
84
- this.$element.find('.modal-body')
85
- .css('overflow', 'auto')
86
- .css(prop, value);
87
- }
88
64
 
89
65
  this.escape();
90
66
 
91
67
  this.tab();
92
-
68
+
93
69
  this.options.loading && this.loading();
94
- },
95
-
70
+ },
71
+
96
72
  hide: function (e) {
97
73
  e && e.preventDefault();
98
74
 
@@ -107,7 +83,7 @@
107
83
  this.escape();
108
84
 
109
85
  this.tab();
110
-
86
+
111
87
  this.isLoading && this.loading();
112
88
 
113
89
  $(document).off('focusin.modal');
@@ -122,108 +98,149 @@
122
98
  $.support.transition && this.$element.hasClass('fade') ?
123
99
  this.hideWithTransition() :
124
100
  this.hideModal();
125
- },
101
+ },
102
+
103
+ layout: function () {
104
+ var prop = this.options.height ? 'height' : 'max-height',
105
+ value = this.options.height || this.options.maxHeight;
106
+
107
+ if (this.options.width){
108
+ this.$element.css('width', this.options.width);
109
+
110
+ var that = this;
111
+ this.$element.css('margin-left', function () {
112
+ if (/%/ig.test(that.options.width)){
113
+ return -(parseInt(that.options.width) / 2) + '%';
114
+ } else {
115
+ return -($(this).width() / 2) + 'px';
116
+ }
117
+ });
118
+ } else {
119
+ this.$element.css('width', '');
120
+ this.$element.css('margin-left', '');
121
+ }
122
+
123
+ this.$element.find('.modal-body')
124
+ .css('overflow', '')
125
+ .css(prop, '');
126
+
127
+ var modalOverflow = $(window).height() - 10 < this.$element.height();
128
+
129
+ if (value){
130
+ this.$element.find('.modal-body')
131
+ .css('overflow', 'auto')
132
+ .css(prop, value);
133
+ }
134
+
135
+ if (modalOverflow || this.options.modalOverflow) {
136
+ this.$element
137
+ .css('margin-top', 0)
138
+ .addClass('modal-overflow');
139
+ } else {
140
+ this.$element
141
+ .css('margin-top', 0 - this.$element.height() / 2)
142
+ .removeClass('modal-overflow');
143
+ }
144
+ },
126
145
 
127
146
  tab: function () {
128
147
  var that = this;
129
148
 
130
- if (this.isShown && this.options.consumeTab) {
131
- this.$element.on('keydown.tabindex.modal', '[data-tabindex]', function (e) {
132
- if (e.keyCode && e.keyCode == 9){
133
- var $next = $(this),
134
- $rollover = $(this);
135
-
136
- that.$element.find('[data-tabindex]:enabled:not([readonly])').each(function (e) {
137
- if (!e.shiftKey){
138
- $next = $next.data('tabindex') < $(this).data('tabindex') ?
139
- $next = $(this) :
140
- $rollover = $(this);
141
- } else {
142
- $next = $next.data('tabindex') > $(this).data('tabindex') ?
143
- $next = $(this) :
144
- $rollover = $(this);
145
- }
146
- });
147
-
148
- $next[0] !== $(this)[0] ?
149
- $next.focus() : $rollover.focus();
150
-
151
- e.preventDefault();
152
-
153
- }
154
- });
149
+ if (this.isShown && this.options.consumeTab) {
150
+ this.$element.on('keydown.tabindex.modal', '[data-tabindex]', function (e) {
151
+ if (e.keyCode && e.keyCode == 9){
152
+ var $next = $(this),
153
+ $rollover = $(this);
154
+
155
+ that.$element.find('[data-tabindex]:enabled:not([readonly])').each(function (e) {
156
+ if (!e.shiftKey){
157
+ $next = $next.data('tabindex') < $(this).data('tabindex') ?
158
+ $next = $(this) :
159
+ $rollover = $(this);
160
+ } else {
161
+ $next = $next.data('tabindex') > $(this).data('tabindex') ?
162
+ $next = $(this) :
163
+ $rollover = $(this);
164
+ }
165
+ });
166
+
167
+ $next[0] !== $(this)[0] ?
168
+ $next.focus() : $rollover.focus();
169
+
170
+ e.preventDefault();
171
+ }
172
+ });
155
173
  } else if (!this.isShown) {
156
174
  this.$element.off('keydown.tabindex.modal');
157
175
  }
158
- },
159
-
176
+ },
177
+
160
178
  escape: function () {
161
179
  var that = this;
162
180
  if (this.isShown && this.options.keyboard) {
163
181
  if (!this.$element.attr('tabindex')) this.$element.attr('tabindex', -1);
164
-
182
+
165
183
  this.$element.on('keyup.dismiss.modal', function (e) {
166
184
  e.which == 27 && that.hide();
167
185
  });
168
186
  } else if (!this.isShown) {
169
187
  this.$element.off('keyup.dismiss.modal')
170
188
  }
171
- },
172
-
189
+ },
190
+
173
191
  hideWithTransition: function () {
174
192
  var that = this
175
193
  , timeout = setTimeout(function () {
176
- that.$element.off($.support.transition.end)
177
- that.hideModal()
194
+ that.$element.off($.support.transition.end);
195
+ that.hideModal();
178
196
  }, 500);
179
197
 
180
198
  this.$element.one($.support.transition.end, function () {
181
- clearTimeout(timeout)
182
- that.hideModal()
199
+ clearTimeout(timeout);
200
+ that.hideModal();
183
201
  });
184
- },
185
-
202
+ },
203
+
186
204
  hideModal: function () {
187
205
  this.$element
188
206
  .hide()
189
207
  .triggerHandler('hidden');
190
208
 
191
-
192
209
  var prop = this.options.height ? 'height' : 'max-height';
193
210
  var value = this.options.height || this.options.maxHeight;
194
-
211
+
195
212
  if (value){
196
213
  this.$element.find('.modal-body')
197
214
  .css('overflow', '')
198
215
  .css(prop, '');
199
216
  }
200
217
 
201
- },
218
+ },
202
219
 
203
220
  removeLoading: function () {
204
221
  this.$loading.remove();
205
222
  this.$loading = null;
206
223
  this.isLoading = false;
207
224
  },
208
-
225
+
209
226
  loading: function (callback) {
210
227
  callback = callback || function () {};
211
-
228
+
212
229
  var animate = this.$element.hasClass('fade') ? 'fade' : '';
213
-
230
+
214
231
  if (!this.isLoading) {
215
232
  var doAnimate = $.support.transition && animate;
216
-
233
+
217
234
  this.$loading = $('<div class="loading-mask ' + animate + '">')
218
235
  .append(this.options.spinner)
219
236
  .appendTo(this.$element);
220
237
 
221
- if (doAnimate) this.$loading[0].offsetWidth // force reflow
222
-
223
- this.$loading.addClass('in')
238
+ if (doAnimate) this.$loading[0].offsetWidth; // force reflow
239
+
240
+ this.$loading.addClass('in');
224
241
 
225
242
  this.isLoading = true;
226
-
243
+
227
244
  doAnimate ?
228
245
  this.$loading.one($.support.transition.end, callback) :
229
246
  callback();
@@ -240,7 +257,7 @@
240
257
  callback(this.isLoading);
241
258
  }
242
259
  },
243
-
260
+
244
261
  focus: function () {
245
262
  var $focusElem = this.$element.find(this.options.focusOn);
246
263
 
@@ -269,17 +286,17 @@
269
286
 
270
287
  this.focus();
271
288
  },
272
-
289
+
273
290
 
274
291
  destroy: function () {
275
292
  var e = $.Event('destroy');
276
293
  this.$element.triggerHandler(e);
277
294
  if (e.isDefaultPrevented()) return;
278
-
295
+
279
296
  this.teardown();
280
297
  },
281
-
282
- teardown: function () {
298
+
299
+ teardown: function () {
283
300
  if (!this.$parent.length){
284
301
  this.$element.remove();
285
302
  this.$element = null;
@@ -296,26 +313,26 @@
296
313
  .removeClass('in')
297
314
  .attr('aria-hidden', true);
298
315
  }
299
- }
316
+ };
300
317
 
301
318
 
302
319
  /* MODAL PLUGIN DEFINITION
303
320
  * ======================= */
304
321
 
305
- $.fn.modal = function (option) {
322
+ $.fn.modal = function (option, args) {
306
323
  return this.each(function () {
307
- var $this = $(this),
308
- data = $this.data('modal'),
324
+ var $this = $(this),
325
+ data = $this.data('modal'),
309
326
  options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option);
310
327
 
311
- if (!data) $this.data('modal', (data = new Modal(this, options)))
312
- if (typeof option == 'string') data[option]()
328
+ if (!data) $this.data('modal', (data = new Modal(this, options)));
329
+ if (typeof option == 'string') data[option].apply(data, [].concat(args));
313
330
  else if (options.show) data.show()
314
331
  })
315
- }
332
+ };
316
333
 
317
334
  $.fn.modal.defaults = {
318
- keyboard: true,
335
+ keyboard: true,
319
336
  backdrop: true,
320
337
  loading: false,
321
338
  show: true,
@@ -325,22 +342,24 @@
325
342
  modalOverflow: false,
326
343
  consumeTab: true,
327
344
  focusOn: null,
345
+ replace: false,
346
+ resize: false,
328
347
  attentionAnimation: 'shake',
329
348
  manager: 'body',
330
349
  spinner: '<div class="loading-spinner" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
331
- }
350
+ };
332
351
 
333
- $.fn.modal.Constructor = Modal
352
+ $.fn.modal.Constructor = Modal;
334
353
 
335
354
 
336
355
  /* MODAL DATA-API
337
356
  * ============== */
338
-
357
+
339
358
  $(function () {
340
359
  $(document).off('.modal').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
341
- var $this = $(this),
342
- href = $this.attr('href'),
343
- $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))), //strip for ie7
360
+ var $this = $(this),
361
+ href = $this.attr('href'),
362
+ $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))), //strip for ie7
344
363
  option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data());
345
364
 
346
365
  e.preventDefault();
@@ -352,4 +371,4 @@
352
371
  });
353
372
  });
354
373
 
355
- }(window.jQuery);
374
+ }(window.jQuery);
@@ -1,5 +1,5 @@
1
- /* ===========================================================
2
- * bootstrap-modalmanager.js v2.0
1
+ /* ===========================================================
2
+ * bootstrap-modalmanager.js v2.1
3
3
  * ===========================================================
4
4
  * Copyright 2012 Jordan Schroter.
5
5
  *
@@ -25,7 +25,7 @@
25
25
 
26
26
  var ModalManager = function (element, options) {
27
27
  this.init(element, options);
28
- }
28
+ };
29
29
 
30
30
  ModalManager.prototype = {
31
31
 
@@ -36,6 +36,20 @@
36
36
  this.options = $.extend({}, $.fn.modalmanager.defaults, this.$element.data(), typeof options == 'object' && options);
37
37
  this.stack = [];
38
38
  this.backdropCount = 0;
39
+
40
+ if (this.options.resize) {
41
+ var resizeTimeout,
42
+ that = this;
43
+
44
+ $(window).on('resize.modal', function(){
45
+ resizeTimeout && clearTimeout(resizeTimeout);
46
+ resizeTimeout = setTimeout(function(){
47
+ for (var i = 0; i < that.stack.length; i++){
48
+ that.stack[i].isShown && that.stack[i].layout();
49
+ }
50
+ }, 10);
51
+ });
52
+ }
39
53
  },
40
54
 
41
55
  createModal: function (element, options) {
@@ -48,47 +62,46 @@
48
62
  var that = this;
49
63
 
50
64
  modal.$element.on('show.modalmanager', targetIsSelf(function (e) {
51
- modal.isShown = true;
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);
62
-
63
- modal.$element.appendTo(modal.$container);
64
-
65
- var modalOverflow = $(window).height() < modal.$element.height() || modal.options.modalOverflow;
66
-
67
- that.backdrop(modal, function () {
68
-
69
- modal.$element.show();
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
- }
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
- }
87
-
88
- transition ?
89
- modal.$element.one($.support.transition.end, complete) :
90
- complete();
91
- });
65
+
66
+ var showModal = function(){
67
+ modal.isShown = true;
68
+
69
+ var transition = $.support.transition && modal.$element.hasClass('fade');
70
+
71
+ that.$element
72
+ .toggleClass('modal-open', that.hasOpenModal())
73
+ .toggleClass('page-overflow', $(window).height() < that.$element.height());
74
+
75
+ modal.$parent = modal.$element.parent();
76
+
77
+ modal.$container = that.createContainer(modal);
78
+
79
+ modal.$element.appendTo(modal.$container);
80
+
81
+ that.backdrop(modal, function () {
82
+
83
+ modal.$element.show();
84
+
85
+ modal.layout();
86
+
87
+ modal.$element
88
+ .addClass('in')
89
+ .attr('aria-hidden', false);
90
+
91
+ var complete = function () {
92
+ that.setFocus();
93
+ modal.$element.triggerHandler('shown');
94
+ };
95
+
96
+ transition ?
97
+ modal.$element.one($.support.transition.end, complete) :
98
+ complete();
99
+ });
100
+ };
101
+
102
+ modal.options.replace ?
103
+ that.replace(showModal) :
104
+ showModal();
92
105
  }));
93
106
 
94
107
  modal.$element.on('hidden.modalmanager', targetIsSelf(function (e) {
@@ -96,7 +109,7 @@
96
109
  that.backdrop(modal);
97
110
 
98
111
  if (modal.$backdrop){
99
- $.support.transition && modal.$element.hasClass('fade')?
112
+ $.support.transition && modal.$element.hasClass('fade') ?
100
113
  modal.$backdrop.one($.support.transition.end, function () { that.destroyModal(modal) }) :
101
114
  that.destroyModal(modal);
102
115
  } else {
@@ -108,6 +121,7 @@
108
121
  modal.$element.on('destroy.modalmanager', targetIsSelf(function (e) {
109
122
  that.removeModal(modal);
110
123
  }));
124
+
111
125
  },
112
126
 
113
127
  destroyModal: function (modal) {
@@ -117,7 +131,7 @@
117
131
  var hasOpenModal = this.hasOpenModal();
118
132
 
119
133
  this.$element.toggleClass('modal-open', hasOpenModal);
120
-
134
+
121
135
  if (!hasOpenModal){
122
136
  this.$element.removeClass('page-overflow');
123
137
  }
@@ -164,24 +178,42 @@
164
178
  }
165
179
  },
166
180
 
181
+ replace: function (callback) {
182
+ var topModal;
183
+
184
+ for (var i = 0; i < this.stack.length; i++){
185
+ if (this.stack[i].isShown) topModal = this.stack[i];
186
+ }
187
+
188
+ if (topModal) {
189
+ this.$backdropHandle = topModal.$backdrop;
190
+ topModal.$backdrop = null;
191
+
192
+ callback && topModal.$element.one('hidden',
193
+ targetIsSelf( $.proxy(callback, this) ));
194
+
195
+ topModal.hide();
196
+ } else if (callback) {
197
+ callback();
198
+ }
199
+ },
200
+
167
201
  removeBackdrop: function (modal) {
168
202
  modal.$backdrop.remove();
169
203
  modal.$backdrop = null;
170
- },
204
+ },
171
205
 
172
206
  createBackdrop: function (animate) {
173
207
  var $backdrop;
174
208
 
175
- if (!this.isLoading) {
209
+ if (!this.$backdropHandle) {
176
210
  $backdrop = $('<div class="modal-backdrop ' + animate + '" />')
177
211
  .appendTo(this.$element);
178
-
179
212
  } else {
180
- $backdrop = this.$loading;
213
+ $backdrop = this.$backdropHandle;
181
214
  $backdrop.off('.modalmanager');
182
- this.$spinner.remove();
183
- this.isLoading = false;
184
- this.$loading = this.$spinner = null;
215
+ this.$backdropHandle = null;
216
+ this.isLoading && this.removeSpinner();
185
217
  }
186
218
 
187
219
  return $backdrop
@@ -190,13 +222,13 @@
190
222
  removeContainer: function (modal) {
191
223
  modal.$container.remove();
192
224
  modal.$container = null;
193
- },
225
+ },
194
226
 
195
227
  createContainer: function (modal) {
196
228
  var $container;
197
229
 
198
230
  $container = $('<div class="modal-scrollable">')
199
- .css('z-index', getzIndex( 'modal',
231
+ .css('z-index', getzIndex( 'modal',
200
232
  modal ? this.getIndexOfModal(modal) : this.stack.length ))
201
233
  .appendTo(this.$element);
202
234
 
@@ -216,20 +248,19 @@
216
248
 
217
249
  backdrop: function (modal, callback) {
218
250
  var animate = modal.$element.hasClass('fade') ? 'fade' : '',
219
- showBackdrop = modal.options.backdrop &&
251
+ showBackdrop = modal.options.backdrop &&
220
252
  this.backdropCount < this.options.backdropLimit;
221
253
 
222
254
  if (modal.isShown && showBackdrop) {
223
- var doAnimate = $.support.transition && animate && !this.isLoading;
224
-
255
+ var doAnimate = $.support.transition && animate && !this.$backdropHandle;
225
256
 
226
257
  modal.$backdrop = this.createBackdrop(animate);
227
258
 
228
- modal.$backdrop.css('z-index', getzIndex( 'backdrop', this.getIndexOfModal(modal) ))
259
+ modal.$backdrop.css('z-index', getzIndex( 'backdrop', this.getIndexOfModal(modal) ));
229
260
 
230
- if (doAnimate) modal.$backdrop[0].offsetWidth // force reflow
261
+ if (doAnimate) modal.$backdrop[0].offsetWidth; // force reflow
231
262
 
232
- modal.$backdrop.addClass('in')
263
+ modal.$backdrop.addClass('in');
233
264
 
234
265
  this.backdropCount += 1;
235
266
 
@@ -253,26 +284,32 @@
253
284
  }
254
285
  },
255
286
 
256
- removeLoading: function () {
257
- this.$loading && this.$loading.remove();
258
- this.$loading = null;
287
+ removeSpinner: function(){
288
+ this.$spinner && this.$spinner.remove();
289
+ this.$spinner = null;
259
290
  this.isLoading = false;
260
291
  },
261
292
 
293
+ removeLoading: function () {
294
+ this.$backdropHandle && this.$backdropHandle.remove();
295
+ this.$backdropHandle = null;
296
+ this.removeSpinner();
297
+ },
298
+
262
299
  loading: function (callback) {
263
300
  callback = callback || function () { };
264
-
301
+
265
302
  this.$element
266
303
  .toggleClass('modal-open', !this.isLoading || this.hasOpenModal())
267
304
  .toggleClass('page-overflow', $(window).height() < this.$element.height());
268
-
305
+
269
306
  if (!this.isLoading) {
270
307
 
271
- this.$loading = this.createBackdrop('fade');
308
+ this.$backdropHandle = this.createBackdrop('fade');
272
309
 
273
- this.$loading[0].offsetWidth // force reflow
310
+ this.$backdropHandle[0].offsetWidth; // force reflow
274
311
 
275
- this.$loading
312
+ this.$backdropHandle
276
313
  .css('z-index', getzIndex('backdrop', this.stack.length))
277
314
  .addClass('in');
278
315
 
@@ -288,31 +325,29 @@
288
325
  this.isLoading = true;
289
326
 
290
327
  $.support.transition ?
291
- this.$loading.one($.support.transition.end, callback) :
292
- callback();
293
-
294
- } else if (this.isLoading && this.$loading) {
295
- this.$loading.removeClass('in');
328
+ this.$backdropHandle.one($.support.transition.end, callback) :
329
+ callback();
296
330
 
297
- if (this.$spinner) this.$spinner.remove();
331
+ } else if (this.isLoading && this.$backdropHandle) {
332
+ this.$backdropHandle.removeClass('in');
298
333
 
299
334
  var that = this;
300
335
  $.support.transition ?
301
- this.$loading.one($.support.transition.end, function () { that.removeLoading() }) :
336
+ this.$backdropHandle.one($.support.transition.end, function () { that.removeLoading() }) :
302
337
  that.removeLoading();
303
338
 
304
339
  } else if (callback) {
305
340
  callback(this.isLoading);
306
341
  }
307
342
  }
308
- }
343
+ };
309
344
 
310
345
  /* PRIVATE METHODS
311
346
  * ======================= */
312
347
 
313
348
  // computes and caches the zindexes
314
349
  var getzIndex = (function () {
315
- var zIndexFactor,
350
+ var zIndexFactor,
316
351
  baseIndex = {};
317
352
 
318
353
  return function (type, pos) {
@@ -321,10 +356,10 @@
321
356
  var $baseModal = $('<div class="modal hide" />').appendTo('body'),
322
357
  $baseBackdrop = $('<div class="modal-backdrop hide" />').appendTo('body');
323
358
 
324
- baseIndex['modal'] = +$baseModal.css('z-index'),
325
- baseIndex['backdrop'] = +$baseBackdrop.css('z-index'),
359
+ baseIndex['modal'] = +$baseModal.css('z-index');
360
+ baseIndex['backdrop'] = +$baseBackdrop.css('z-index');
326
361
  zIndexFactor = baseIndex['modal'] - baseIndex['backdrop'];
327
-
362
+
328
363
  $baseModal.remove();
329
364
  $baseBackdrop.remove();
330
365
  $baseBackdrop = $baseModal = null;
@@ -333,16 +368,16 @@
333
368
  return baseIndex[type] + (zIndexFactor * pos);
334
369
 
335
370
  }
336
- }())
371
+ }());
337
372
 
338
- // make sure the event target is the modal itself in order to prevent
339
- // other components such as tabsfrom triggering the modal manager.
373
+ // make sure the event target is the modal itself in order to prevent
374
+ // other components such as tabsfrom triggering the modal manager.
340
375
  // if Boostsrap namespaced events, this would not be needed.
341
376
  function targetIsSelf(callback){
342
377
  return function (e) {
343
378
  if (this === e.target){
344
379
  return callback.apply(this, arguments);
345
- }
380
+ }
346
381
  }
347
382
  }
348
383
 
@@ -350,21 +385,22 @@
350
385
  /* MODAL MANAGER PLUGIN DEFINITION
351
386
  * ======================= */
352
387
 
353
- $.fn.modalmanager = function (option) {
388
+ $.fn.modalmanager = function (option, args) {
354
389
  return this.each(function () {
355
- var $this = $(this),
390
+ var $this = $(this),
356
391
  data = $this.data('modalmanager');
357
392
 
358
393
  if (!data) $this.data('modalmanager', (data = new ModalManager(this, option)))
359
- if (typeof option === 'string') data[option]()
394
+ if (typeof option === 'string') data[option].apply(data, [].concat(args))
360
395
  })
361
- }
396
+ };
362
397
 
363
398
  $.fn.modalmanager.defaults = {
364
399
  backdropLimit: 999,
400
+ resize: true,
365
401
  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
- }
402
+ };
367
403
 
368
404
  $.fn.modalmanager.Constructor = ModalManager
369
405
 
370
- }(jQuery);
406
+ }(jQuery);
@@ -8,7 +8,6 @@
8
8
  */
9
9
 
10
10
  .modal-open {
11
- position: relative; /* safari */
12
11
  overflow: hidden;
13
12
  }
14
13
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap-modal-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.0'
4
+ version: '2.1'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-05 00:00:00.000000000 Z
12
+ date: 2013-01-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -53,18 +53,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
53
  - - ! '>='
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
- segments:
57
- - 0
58
- hash: -894969782333094102
59
56
  required_rubygems_version: !ruby/object:Gem::Requirement
60
57
  none: false
61
58
  requirements:
62
59
  - - ! '>='
63
60
  - !ruby/object:Gem::Version
64
61
  version: '0'
65
- segments:
66
- - 0
67
- hash: -894969782333094102
68
62
  requirements: []
69
63
  rubyforge_project:
70
64
  rubygems_version: 1.8.24