bootstrap 4.0.0.alpha1

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.
Files changed (145) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +14 -0
  3. data/.gitignore +19 -0
  4. data/.travis.yml +16 -0
  5. data/CHANGELOG.md +7 -0
  6. data/Gemfile +13 -0
  7. data/LICENSE +21 -0
  8. data/README.md +143 -0
  9. data/Rakefile +75 -0
  10. data/assets/javascripts/bootstrap-sprockets.js +11 -0
  11. data/assets/javascripts/bootstrap.js +3560 -0
  12. data/assets/javascripts/bootstrap.min.js +220 -0
  13. data/assets/javascripts/bootstrap/alert.js +192 -0
  14. data/assets/javascripts/bootstrap/button.js +172 -0
  15. data/assets/javascripts/bootstrap/carousel.js +478 -0
  16. data/assets/javascripts/bootstrap/collapse.js +364 -0
  17. data/assets/javascripts/bootstrap/dropdown.js +293 -0
  18. data/assets/javascripts/bootstrap/modal.js +536 -0
  19. data/assets/javascripts/bootstrap/popover.js +201 -0
  20. data/assets/javascripts/bootstrap/scrollspy.js +320 -0
  21. data/assets/javascripts/bootstrap/tab.js +263 -0
  22. data/assets/javascripts/bootstrap/tooltip.js +619 -0
  23. data/assets/javascripts/bootstrap/util.js +157 -0
  24. data/assets/stylesheets/_bootstrap-flex.scss +8 -0
  25. data/assets/stylesheets/_bootstrap-grid.scss +62 -0
  26. data/assets/stylesheets/_bootstrap-reboot.scss +10 -0
  27. data/assets/stylesheets/_bootstrap.scss +55 -0
  28. data/assets/stylesheets/bootstrap/_alert.scss +65 -0
  29. data/assets/stylesheets/bootstrap/_animation.scss +27 -0
  30. data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -0
  31. data/assets/stylesheets/bootstrap/_button-group.scss +224 -0
  32. data/assets/stylesheets/bootstrap/_buttons.scss +174 -0
  33. data/assets/stylesheets/bootstrap/_card.scss +293 -0
  34. data/assets/stylesheets/bootstrap/_carousel.scss +252 -0
  35. data/assets/stylesheets/bootstrap/_close.scss +28 -0
  36. data/assets/stylesheets/bootstrap/_code.scss +58 -0
  37. data/assets/stylesheets/bootstrap/_custom-forms.scss +225 -0
  38. data/assets/stylesheets/bootstrap/_dropdown.scss +191 -0
  39. data/assets/stylesheets/bootstrap/_forms.scss +454 -0
  40. data/assets/stylesheets/bootstrap/_grid.scss +76 -0
  41. data/assets/stylesheets/bootstrap/_images.scss +28 -0
  42. data/assets/stylesheets/bootstrap/_input-group.scss +181 -0
  43. data/assets/stylesheets/bootstrap/_jumbotron.scss +22 -0
  44. data/assets/stylesheets/bootstrap/_labels.scss +75 -0
  45. data/assets/stylesheets/bootstrap/_list-group.scss +128 -0
  46. data/assets/stylesheets/bootstrap/_media.scss +90 -0
  47. data/assets/stylesheets/bootstrap/_mixins.scss +54 -0
  48. data/assets/stylesheets/bootstrap/_modal.scss +146 -0
  49. data/assets/stylesheets/bootstrap/_nav.scss +155 -0
  50. data/assets/stylesheets/bootstrap/_navbar.scss +230 -0
  51. data/assets/stylesheets/bootstrap/_normalize.scss +428 -0
  52. data/assets/stylesheets/bootstrap/_pager.scss +57 -0
  53. data/assets/stylesheets/bootstrap/_pagination.scss +82 -0
  54. data/assets/stylesheets/bootstrap/_popover.scss +140 -0
  55. data/assets/stylesheets/bootstrap/_print.scss +88 -0
  56. data/assets/stylesheets/bootstrap/_progress.scss +156 -0
  57. data/assets/stylesheets/bootstrap/_reboot.scss +298 -0
  58. data/assets/stylesheets/bootstrap/_responsive-embed.scss +38 -0
  59. data/assets/stylesheets/bootstrap/_tables.scss +193 -0
  60. data/assets/stylesheets/bootstrap/_tooltip.scss +85 -0
  61. data/assets/stylesheets/bootstrap/_type.scss +192 -0
  62. data/assets/stylesheets/bootstrap/_utilities-responsive.scss +49 -0
  63. data/assets/stylesheets/bootstrap/_utilities-spacing.scss +78 -0
  64. data/assets/stylesheets/bootstrap/_utilities.scss +117 -0
  65. data/assets/stylesheets/bootstrap/_variables.scss +632 -0
  66. data/assets/stylesheets/bootstrap/mixins/_alert.scss +14 -0
  67. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +13 -0
  68. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +35 -0
  69. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +76 -0
  70. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +100 -0
  71. data/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
  72. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +7 -0
  73. data/assets/stylesheets/bootstrap/mixins/_forms.scss +89 -0
  74. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +43 -0
  75. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +44 -0
  76. data/assets/stylesheets/bootstrap/mixins/_grid.scss +75 -0
  77. data/assets/stylesheets/bootstrap/mixins/_hover.scss +59 -0
  78. data/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
  79. data/assets/stylesheets/bootstrap/mixins/_label.scss +11 -0
  80. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +30 -0
  81. data/assets/stylesheets/bootstrap/mixins/_lists.scss +7 -0
  82. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
  83. data/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +9 -0
  84. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
  85. data/assets/stylesheets/bootstrap/mixins/_progress.scss +18 -0
  86. data/assets/stylesheets/bootstrap/mixins/_pulls.scss +6 -0
  87. data/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
  88. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +18 -0
  89. data/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
  90. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +32 -0
  91. data/assets/stylesheets/bootstrap/mixins/_size.scss +6 -0
  92. data/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
  93. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +30 -0
  94. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
  95. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +8 -0
  96. data/assets/stylesheets/bootstrap/mixins/_text-truncate.scss +8 -0
  97. data/bootstrap.gemspec +36 -0
  98. data/lib/bootstrap.rb +76 -0
  99. data/lib/bootstrap/engine.rb +11 -0
  100. data/lib/bootstrap/version.rb +4 -0
  101. data/tasks/updater.rb +67 -0
  102. data/tasks/updater/js.rb +37 -0
  103. data/tasks/updater/logger.rb +57 -0
  104. data/tasks/updater/network.rb +101 -0
  105. data/tasks/updater/scss.rb +34 -0
  106. data/templates/project/_bootstrap-variables.scss +633 -0
  107. data/templates/project/manifest.rb +18 -0
  108. data/templates/project/styles.scss +10 -0
  109. data/test/compass_test.rb +9 -0
  110. data/test/dummy_rails/README.rdoc +3 -0
  111. data/test/dummy_rails/Rakefile +6 -0
  112. data/test/dummy_rails/app/assets/images/.keep +0 -0
  113. data/test/dummy_rails/app/assets/javascripts/application.js +7 -0
  114. data/test/dummy_rails/app/assets/stylesheets/application.sass +1 -0
  115. data/test/dummy_rails/app/controllers/application_controller.rb +5 -0
  116. data/test/dummy_rails/app/controllers/pages_controller.rb +4 -0
  117. data/test/dummy_rails/app/helpers/application_helper.rb +2 -0
  118. data/test/dummy_rails/app/views/layouts/application.html.erb +14 -0
  119. data/test/dummy_rails/app/views/pages/root.html.slim +58 -0
  120. data/test/dummy_rails/config.ru +4 -0
  121. data/test/dummy_rails/config/application.rb +34 -0
  122. data/test/dummy_rails/config/boot.rb +5 -0
  123. data/test/dummy_rails/config/environment.rb +5 -0
  124. data/test/dummy_rails/config/environments/development.rb +23 -0
  125. data/test/dummy_rails/config/environments/production.rb +82 -0
  126. data/test/dummy_rails/config/environments/test.rb +38 -0
  127. data/test/dummy_rails/config/initializers/backtrace_silencers.rb +7 -0
  128. data/test/dummy_rails/config/initializers/filter_parameter_logging.rb +4 -0
  129. data/test/dummy_rails/config/initializers/inflections.rb +16 -0
  130. data/test/dummy_rails/config/initializers/mime_types.rb +5 -0
  131. data/test/dummy_rails/config/initializers/secret_token.rb +18 -0
  132. data/test/dummy_rails/config/initializers/session_store.rb +3 -0
  133. data/test/dummy_rails/config/initializers/wrap_parameters.rb +14 -0
  134. data/test/dummy_rails/config/locales/en.yml +3 -0
  135. data/test/dummy_rails/config/locales/es.yml +3 -0
  136. data/test/dummy_rails/config/routes.rb +3 -0
  137. data/test/dummy_rails/log/.keep +0 -0
  138. data/test/gemfiles/rails_4_2.gemfile +11 -0
  139. data/test/gemfiles/rails_head.gemfile +19 -0
  140. data/test/rails_test.rb +19 -0
  141. data/test/support/dummy_rails_integration.rb +22 -0
  142. data/test/support/reporting.rb +27 -0
  143. data/test/test_helper.rb +35 -0
  144. data/test/test_helper_rails.rb +6 -0
  145. metadata +433 -0
@@ -0,0 +1,536 @@
1
+ 'use strict';
2
+
3
+ var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
4
+
5
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
6
+
7
+ /**
8
+ * --------------------------------------------------------------------------
9
+ * Bootstrap (v4.0.0): modal.js
10
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
11
+ * --------------------------------------------------------------------------
12
+ */
13
+
14
+ var Modal = (function ($) {
15
+
16
+ /**
17
+ * ------------------------------------------------------------------------
18
+ * Constants
19
+ * ------------------------------------------------------------------------
20
+ */
21
+
22
+ var NAME = 'modal';
23
+ var VERSION = '4.0.0';
24
+ var DATA_KEY = 'bs.modal';
25
+ var EVENT_KEY = '.' + DATA_KEY;
26
+ var DATA_API_KEY = '.data-api';
27
+ var JQUERY_NO_CONFLICT = $.fn[NAME];
28
+ var TRANSITION_DURATION = 300;
29
+ var BACKDROP_TRANSITION_DURATION = 150;
30
+
31
+ var Default = {
32
+ backdrop: true,
33
+ keyboard: true,
34
+ focus: true,
35
+ show: true
36
+ };
37
+
38
+ var DefaultType = {
39
+ backdrop: '(boolean|string)',
40
+ keyboard: 'boolean',
41
+ focus: 'boolean',
42
+ show: 'boolean'
43
+ };
44
+
45
+ var Event = {
46
+ HIDE: 'hide' + EVENT_KEY,
47
+ HIDDEN: 'hidden' + EVENT_KEY,
48
+ SHOW: 'show' + EVENT_KEY,
49
+ SHOWN: 'shown' + EVENT_KEY,
50
+ FOCUSIN: 'focusin' + EVENT_KEY,
51
+ RESIZE: 'resize' + EVENT_KEY,
52
+ CLICK_DISMISS: 'click.dismiss' + EVENT_KEY,
53
+ KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY,
54
+ MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY,
55
+ MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY,
56
+ CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
57
+ };
58
+
59
+ var ClassName = {
60
+ SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
61
+ BACKDROP: 'modal-backdrop',
62
+ OPEN: 'modal-open',
63
+ FADE: 'fade',
64
+ IN: 'in'
65
+ };
66
+
67
+ var Selector = {
68
+ DIALOG: '.modal-dialog',
69
+ DATA_TOGGLE: '[data-toggle="modal"]',
70
+ DATA_DISMISS: '[data-dismiss="modal"]',
71
+ FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
72
+ };
73
+
74
+ /**
75
+ * ------------------------------------------------------------------------
76
+ * Class Definition
77
+ * ------------------------------------------------------------------------
78
+ */
79
+
80
+ var Modal = (function () {
81
+ function Modal(element, config) {
82
+ _classCallCheck(this, Modal);
83
+
84
+ this._config = this._getConfig(config);
85
+ this._element = element;
86
+ this._dialog = $(element).find(Selector.DIALOG)[0];
87
+ this._backdrop = null;
88
+ this._isShown = false;
89
+ this._isBodyOverflowing = false;
90
+ this._ignoreBackdropClick = false;
91
+ this._originalBodyPadding = 0;
92
+ this._scrollbarWidth = 0;
93
+ }
94
+
95
+ /**
96
+ * ------------------------------------------------------------------------
97
+ * Data Api implementation
98
+ * ------------------------------------------------------------------------
99
+ */
100
+
101
+ // getters
102
+
103
+ _createClass(Modal, [{
104
+ key: 'toggle',
105
+
106
+ // public
107
+
108
+ value: function toggle(relatedTarget) {
109
+ return this._isShown ? this.hide() : this.show(relatedTarget);
110
+ }
111
+ }, {
112
+ key: 'show',
113
+ value: function show(relatedTarget) {
114
+ var _this = this;
115
+
116
+ var showEvent = $.Event(Event.SHOW, {
117
+ relatedTarget: relatedTarget
118
+ });
119
+
120
+ $(this._element).trigger(showEvent);
121
+
122
+ if (this._isShown || showEvent.isDefaultPrevented()) {
123
+ return;
124
+ }
125
+
126
+ this._isShown = true;
127
+
128
+ this._checkScrollbar();
129
+ this._setScrollbar();
130
+
131
+ $(document.body).addClass(ClassName.OPEN);
132
+
133
+ this._setEscapeEvent();
134
+ this._setResizeEvent();
135
+
136
+ $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
137
+
138
+ $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
139
+ $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {
140
+ if ($(event.target).is(_this._element)) {
141
+ that._ignoreBackdropClick = true;
142
+ }
143
+ });
144
+ });
145
+
146
+ this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
147
+ }
148
+ }, {
149
+ key: 'hide',
150
+ value: function hide(event) {
151
+ if (event) {
152
+ event.preventDefault();
153
+ }
154
+
155
+ var hideEvent = $.Event(Event.HIDE);
156
+
157
+ $(this._element).trigger(hideEvent);
158
+
159
+ if (!this._isShown || hideEvent.isDefaultPrevented()) {
160
+ return;
161
+ }
162
+
163
+ this._isShown = false;
164
+
165
+ this._setEscapeEvent();
166
+ this._setResizeEvent();
167
+
168
+ $(document).off(Event.FOCUSIN);
169
+
170
+ $(this._element).removeClass(ClassName.IN);
171
+
172
+ $(this._element).off(Event.CLICK_DISMISS);
173
+ $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
174
+
175
+ if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
176
+
177
+ $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
178
+ } else {
179
+ this._hideModal();
180
+ }
181
+ }
182
+ }, {
183
+ key: 'dispose',
184
+ value: function dispose() {
185
+ $.removeData(this._element, DATA_KEY);
186
+
187
+ $(window).off(EVENT_KEY);
188
+ $(document).off(EVENT_KEY);
189
+ $(this._element).off(EVENT_KEY);
190
+ $(this._backdrop).off(EVENT_KEY);
191
+
192
+ this._config = null;
193
+ this._element = null;
194
+ this._dialog = null;
195
+ this._backdrop = null;
196
+ this._isShown = null;
197
+ this._isBodyOverflowing = null;
198
+ this._ignoreBackdropClick = null;
199
+ this._originalBodyPadding = null;
200
+ this._scrollbarWidth = null;
201
+ }
202
+
203
+ // private
204
+
205
+ }, {
206
+ key: '_getConfig',
207
+ value: function _getConfig(config) {
208
+ config = $.extend({}, Default, config);
209
+ Util.typeCheckConfig(NAME, config, DefaultType);
210
+ return config;
211
+ }
212
+ }, {
213
+ key: '_showElement',
214
+ value: function _showElement(relatedTarget) {
215
+ var _this2 = this;
216
+
217
+ var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
218
+
219
+ if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
220
+ // don't move modals dom position
221
+ document.body.appendChild(this._element);
222
+ }
223
+
224
+ this._element.style.display = 'block';
225
+ this._element.scrollTop = 0;
226
+
227
+ if (transition) {
228
+ Util.reflow(this._element);
229
+ }
230
+
231
+ $(this._element).addClass(ClassName.IN);
232
+
233
+ if (this._config.focus) {
234
+ this._enforceFocus();
235
+ }
236
+
237
+ var shownEvent = $.Event(Event.SHOWN, {
238
+ relatedTarget: relatedTarget
239
+ });
240
+
241
+ var transitionComplete = function transitionComplete() {
242
+ if (_this2._config.focus) {
243
+ _this2._element.focus();
244
+ }
245
+ $(_this2._element).trigger(shownEvent);
246
+ };
247
+
248
+ if (transition) {
249
+ $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
250
+ } else {
251
+ transitionComplete();
252
+ }
253
+ }
254
+ }, {
255
+ key: '_enforceFocus',
256
+ value: function _enforceFocus() {
257
+ var _this3 = this;
258
+
259
+ $(document).off(Event.FOCUSIN) // guard against infinite focus loop
260
+ .on(Event.FOCUSIN, function (event) {
261
+ if (_this3._element !== event.target && !$(_this3._element).has(event.target).length) {
262
+ _this3._element.focus();
263
+ }
264
+ });
265
+ }
266
+ }, {
267
+ key: '_setEscapeEvent',
268
+ value: function _setEscapeEvent() {
269
+ var _this4 = this;
270
+
271
+ if (this._isShown && this._config.keyboard) {
272
+ $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
273
+ if (event.which === 27) {
274
+ _this4.hide();
275
+ }
276
+ });
277
+ } else if (!this._isShown) {
278
+ $(this._element).off(Event.KEYDOWN_DISMISS);
279
+ }
280
+ }
281
+ }, {
282
+ key: '_setResizeEvent',
283
+ value: function _setResizeEvent() {
284
+ if (this._isShown) {
285
+ $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
286
+ } else {
287
+ $(window).off(Event.RESIZE);
288
+ }
289
+ }
290
+ }, {
291
+ key: '_hideModal',
292
+ value: function _hideModal() {
293
+ var _this5 = this;
294
+
295
+ this._element.style.display = 'none';
296
+ this._showBackdrop(function () {
297
+ $(document.body).removeClass(ClassName.OPEN);
298
+ _this5._resetAdjustments();
299
+ _this5._resetScrollbar();
300
+ $(_this5._element).trigger(Event.HIDDEN);
301
+ });
302
+ }
303
+ }, {
304
+ key: '_removeBackdrop',
305
+ value: function _removeBackdrop() {
306
+ if (this._backdrop) {
307
+ $(this._backdrop).remove();
308
+ this._backdrop = null;
309
+ }
310
+ }
311
+ }, {
312
+ key: '_showBackdrop',
313
+ value: function _showBackdrop(callback) {
314
+ var _this6 = this;
315
+
316
+ var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
317
+
318
+ if (this._isShown && this._config.backdrop) {
319
+ var doAnimate = Util.supportsTransitionEnd() && animate;
320
+
321
+ this._backdrop = document.createElement('div');
322
+ this._backdrop.className = ClassName.BACKDROP;
323
+
324
+ if (animate) {
325
+ $(this._backdrop).addClass(animate);
326
+ }
327
+
328
+ $(this._backdrop).appendTo(document.body);
329
+
330
+ $(this._element).on(Event.CLICK_DISMISS, function (event) {
331
+ if (_this6._ignoreBackdropClick) {
332
+ _this6._ignoreBackdropClick = false;
333
+ return;
334
+ }
335
+ if (event.target !== event.currentTarget) {
336
+ return;
337
+ }
338
+ if (_this6._config.backdrop === 'static') {
339
+ _this6._element.focus();
340
+ } else {
341
+ _this6.hide();
342
+ }
343
+ });
344
+
345
+ if (doAnimate) {
346
+ Util.reflow(this._backdrop);
347
+ }
348
+
349
+ $(this._backdrop).addClass(ClassName.IN);
350
+
351
+ if (!callback) {
352
+ return;
353
+ }
354
+
355
+ if (!doAnimate) {
356
+ callback();
357
+ return;
358
+ }
359
+
360
+ $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
361
+ } else if (!this._isShown && this._backdrop) {
362
+ $(this._backdrop).removeClass(ClassName.IN);
363
+
364
+ var callbackRemove = function callbackRemove() {
365
+ _this6._removeBackdrop();
366
+ if (callback) {
367
+ callback();
368
+ }
369
+ };
370
+
371
+ if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
372
+ $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
373
+ } else {
374
+ callbackRemove();
375
+ }
376
+ } else if (callback) {
377
+ callback();
378
+ }
379
+ }
380
+
381
+ // ----------------------------------------------------------------------
382
+ // the following methods are used to handle overflowing modals
383
+ // todo (fat): these should probably be refactored out of modal.js
384
+ // ----------------------------------------------------------------------
385
+
386
+ }, {
387
+ key: '_handleUpdate',
388
+ value: function _handleUpdate() {
389
+ this._adjustDialog();
390
+ }
391
+ }, {
392
+ key: '_adjustDialog',
393
+ value: function _adjustDialog() {
394
+ var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
395
+
396
+ if (!this._isBodyOverflowing && isModalOverflowing) {
397
+ this._element.style.paddingLeft = this._scrollbarWidth + 'px';
398
+ }
399
+
400
+ if (this._isBodyOverflowing && !isModalOverflowing) {
401
+ this._element.style.paddingRight = this._scrollbarWidth + 'px~';
402
+ }
403
+ }
404
+ }, {
405
+ key: '_resetAdjustments',
406
+ value: function _resetAdjustments() {
407
+ this._element.style.paddingLeft = '';
408
+ this._element.style.paddingRight = '';
409
+ }
410
+ }, {
411
+ key: '_checkScrollbar',
412
+ value: function _checkScrollbar() {
413
+ var fullWindowWidth = window.innerWidth;
414
+ if (!fullWindowWidth) {
415
+ // workaround for missing window.innerWidth in IE8
416
+ var documentElementRect = document.documentElement.getBoundingClientRect();
417
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);
418
+ }
419
+ this._isBodyOverflowing = document.body.clientWidth < fullWindowWidth;
420
+ this._scrollbarWidth = this._getScrollbarWidth();
421
+ }
422
+ }, {
423
+ key: '_setScrollbar',
424
+ value: function _setScrollbar() {
425
+ var bodyPadding = parseInt($(Selector.FIXED_CONTENT).css('padding-right') || 0, 10);
426
+
427
+ this._originalBodyPadding = document.body.style.paddingRight || '';
428
+
429
+ if (this._isBodyOverflowing) {
430
+ document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px';
431
+ }
432
+ }
433
+ }, {
434
+ key: '_resetScrollbar',
435
+ value: function _resetScrollbar() {
436
+ document.body.style.paddingRight = this._originalBodyPadding;
437
+ }
438
+ }, {
439
+ key: '_getScrollbarWidth',
440
+ value: function _getScrollbarWidth() {
441
+ // thx d.walsh
442
+ var scrollDiv = document.createElement('div');
443
+ scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
444
+ document.body.appendChild(scrollDiv);
445
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
446
+ document.body.removeChild(scrollDiv);
447
+ return scrollbarWidth;
448
+ }
449
+
450
+ // static
451
+
452
+ }], [{
453
+ key: '_jQueryInterface',
454
+ value: function _jQueryInterface(config, relatedTarget) {
455
+ return this.each(function () {
456
+ var data = $(this).data(DATA_KEY);
457
+ var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config);
458
+
459
+ if (!data) {
460
+ data = new Modal(this, _config);
461
+ $(this).data(DATA_KEY, data);
462
+ }
463
+
464
+ if (typeof config === 'string') {
465
+ if (data[config] === undefined) {
466
+ throw new Error('No method named "' + config + '"');
467
+ }
468
+ data[config](relatedTarget);
469
+ } else if (_config.show) {
470
+ data.show(relatedTarget);
471
+ }
472
+ });
473
+ }
474
+ }, {
475
+ key: 'VERSION',
476
+ get: function get() {
477
+ return VERSION;
478
+ }
479
+ }, {
480
+ key: 'Default',
481
+ get: function get() {
482
+ return Default;
483
+ }
484
+ }]);
485
+
486
+ return Modal;
487
+ })();
488
+
489
+ $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
490
+ var _this7 = this;
491
+
492
+ var target = undefined;
493
+ var selector = Util.getSelectorFromElement(this);
494
+
495
+ if (selector) {
496
+ target = $(selector)[0];
497
+ }
498
+
499
+ var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
500
+
501
+ if (this.tagName === 'A') {
502
+ event.preventDefault();
503
+ }
504
+
505
+ var $target = $(target).one(Event.SHOW, function (showEvent) {
506
+ if (showEvent.isDefaultPrevented()) {
507
+ // only register focus restorer if modal will actually get shown
508
+ return;
509
+ }
510
+
511
+ $target.one(Event.HIDDEN, function () {
512
+ if ($(_this7).is(':visible')) {
513
+ _this7.focus();
514
+ }
515
+ });
516
+ });
517
+
518
+ Modal._jQueryInterface.call($(target), config, this);
519
+ });
520
+
521
+ /**
522
+ * ------------------------------------------------------------------------
523
+ * jQuery
524
+ * ------------------------------------------------------------------------
525
+ */
526
+
527
+ $.fn[NAME] = Modal._jQueryInterface;
528
+ $.fn[NAME].Constructor = Modal;
529
+ $.fn[NAME].noConflict = function () {
530
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
531
+ return Modal._jQueryInterface;
532
+ };
533
+
534
+ return Modal;
535
+ })(jQuery);
536
+ //# sourceMappingURL=modal.js.map