active_frontend 13.3.0 → 14.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.fasterer.yml +19 -0
  4. data/.reek +27 -0
  5. data/.rubocop.yml +38 -0
  6. data/.scss-lint.yml +27 -0
  7. data/Rakefile +1 -1
  8. data/active_frontend.gemspec +21 -18
  9. data/app/.DS_Store +0 -0
  10. data/app/assets/.DS_Store +0 -0
  11. data/app/assets/fonts/.DS_Store +0 -0
  12. data/app/assets/fonts/dripicons/.DS_Store +0 -0
  13. data/app/assets/fonts/dripicons/dripicons.woff +0 -0
  14. data/app/assets/fonts/fakt-pro/.DS_Store +0 -0
  15. data/app/assets/fonts/fakt-pro/fakt-pro-bold.woff +0 -0
  16. data/app/assets/fonts/fakt-pro/fakt-pro-normal.woff +0 -0
  17. data/app/assets/fonts/fakt-pro/fakt-pro-semibold.woff +0 -0
  18. data/app/assets/fonts/fakt-pro/fakt-pro-semilight.woff +0 -0
  19. data/app/assets/fonts/fakt-soft-pro/.DS_Store +0 -0
  20. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-bold.woff +0 -0
  21. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-normal.woff +0 -0
  22. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-semibold.woff +0 -0
  23. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-semilight.woff +0 -0
  24. data/app/assets/images/.DS_Store +0 -0
  25. data/app/assets/images/.keep +0 -0
  26. data/app/assets/images/placeholders/.DS_Store +0 -0
  27. data/app/assets/images/placeholders/camera-large.png +0 -0
  28. data/app/assets/images/placeholders/camera-small.png +0 -0
  29. data/app/assets/images/placeholders/camera.png +0 -0
  30. data/app/assets/images/placeholders/document-large.png +0 -0
  31. data/app/assets/images/placeholders/document-small.png +0 -0
  32. data/app/assets/images/placeholders/document.png +0 -0
  33. data/app/assets/images/placeholders/photo-large.png +0 -0
  34. data/app/assets/images/placeholders/{picture-small.png → photo-small.png} +0 -0
  35. data/app/assets/images/placeholders/photo.png +0 -0
  36. data/app/assets/images/placeholders/store-large.png +0 -0
  37. data/app/assets/images/placeholders/store-small.png +0 -0
  38. data/app/assets/images/placeholders/store.png +0 -0
  39. data/app/assets/images/placeholders/user-large.png +0 -0
  40. data/app/assets/images/placeholders/user-small.png +0 -0
  41. data/app/assets/images/placeholders/user.png +0 -0
  42. data/app/helpers/active_frontend_helper.rb +22 -37
  43. data/lib/.DS_Store +0 -0
  44. data/lib/active_frontend.rb +3 -4
  45. data/lib/active_frontend/.DS_Store +0 -0
  46. data/lib/active_frontend/version.rb +1 -1
  47. data/lib/generators/active_frontend/install_generator.rb +3 -3
  48. data/lib/generators/active_frontend/templates/install.js +35 -30
  49. data/lib/generators/active_frontend/templates/install.scss +55 -58
  50. data/vendor/.DS_Store +0 -0
  51. data/vendor/assets/.DS_Store +0 -0
  52. data/vendor/assets/javascripts/.DS_Store +0 -0
  53. data/vendor/assets/javascripts/active_frontend.js +35 -30
  54. data/vendor/assets/javascripts/base/_affix.js +170 -0
  55. data/vendor/assets/javascripts/base/_alert.js +80 -0
  56. data/vendor/assets/javascripts/base/_animation.js +106 -0
  57. data/vendor/assets/javascripts/base/_button.js +123 -0
  58. data/vendor/assets/javascripts/base/_carousel.js +237 -0
  59. data/vendor/assets/javascripts/base/_collapse.js +200 -0
  60. data/vendor/assets/javascripts/base/_colorpicker.js +147 -0
  61. data/vendor/assets/javascripts/base/_datepicker.js +1411 -0
  62. data/vendor/assets/javascripts/base/_dropdown.js +154 -0
  63. data/vendor/assets/javascripts/base/_filepicker.js +235 -0
  64. data/vendor/assets/javascripts/base/_hoverdown.js +116 -0
  65. data/vendor/assets/javascripts/base/_layout.js +126 -0
  66. data/vendor/assets/javascripts/base/_list.js +103 -0
  67. data/vendor/assets/javascripts/{_modal.js → base/_modal.js} +170 -167
  68. data/vendor/assets/javascripts/base/_popover.js +101 -0
  69. data/vendor/assets/javascripts/base/_scrollspy.js +161 -0
  70. data/vendor/assets/javascripts/base/_switch.js +160 -0
  71. data/vendor/assets/javascripts/base/_tab.js +139 -0
  72. data/vendor/assets/javascripts/base/_table.js +224 -0
  73. data/vendor/assets/javascripts/base/_timeago.js +270 -0
  74. data/vendor/assets/javascripts/base/_timepicker.js +541 -0
  75. data/vendor/assets/javascripts/base/_tooltip.js +525 -0
  76. data/vendor/assets/javascripts/base/_tour.js +268 -0
  77. data/vendor/assets/javascripts/base/_transition.js +52 -0
  78. data/vendor/assets/javascripts/base/_typeahead.js +362 -0
  79. data/vendor/assets/javascripts/extensions/_calendar.js +4709 -0
  80. data/vendor/assets/javascripts/extensions/_chart.js +9371 -0
  81. data/vendor/assets/javascripts/extensions/_map.js +2153 -0
  82. data/vendor/assets/stylesheets/.DS_Store +0 -0
  83. data/vendor/assets/stylesheets/{_mixin.scss → _utility.scss} +96 -10
  84. data/vendor/assets/stylesheets/_variable.scss +201 -19
  85. data/vendor/assets/stylesheets/active_frontend.scss +55 -58
  86. data/vendor/assets/stylesheets/blocks/_anchor.scss +15 -0
  87. data/vendor/assets/stylesheets/blocks/_button.scss +278 -0
  88. data/vendor/assets/stylesheets/blocks/_code.scss +144 -0
  89. data/vendor/assets/stylesheets/blocks/_common.scss +127 -0
  90. data/vendor/assets/stylesheets/blocks/_form.scss +508 -0
  91. data/vendor/assets/stylesheets/blocks/_icon.scss +359 -0
  92. data/vendor/assets/stylesheets/blocks/_list.scss +76 -0
  93. data/vendor/assets/stylesheets/blocks/_multimedia.scss +62 -0
  94. data/vendor/assets/stylesheets/blocks/_reset.scss +179 -0
  95. data/vendor/assets/stylesheets/blocks/_table.scss +211 -0
  96. data/vendor/assets/stylesheets/blocks/_typography.scss +204 -0
  97. data/vendor/assets/stylesheets/components/_ad.scss +78 -0
  98. data/vendor/assets/stylesheets/components/_affix.scss +14 -0
  99. data/vendor/assets/stylesheets/components/_alert.scss +50 -0
  100. data/vendor/assets/stylesheets/components/_animation.scss +1670 -0
  101. data/vendor/assets/stylesheets/components/_breadcrumb.scss +17 -0
  102. data/vendor/assets/stylesheets/components/_calendar.scss +213 -0
  103. data/vendor/assets/stylesheets/components/_card.scss +30 -0
  104. data/vendor/assets/stylesheets/components/_carousel.scss +135 -0
  105. data/vendor/assets/stylesheets/components/_chart.scss +10 -0
  106. data/vendor/assets/stylesheets/components/_collapse.scss +17 -0
  107. data/vendor/assets/stylesheets/components/_colorpicker.scss +38 -0
  108. data/vendor/assets/stylesheets/components/_datepicker.scss +80 -0
  109. data/vendor/assets/stylesheets/components/_dropmenu.scss +151 -0
  110. data/vendor/assets/stylesheets/components/_footer.scss +11 -0
  111. data/vendor/assets/stylesheets/components/_grid.scss +144 -0
  112. data/vendor/assets/stylesheets/components/_header.scss +99 -0
  113. data/vendor/assets/stylesheets/components/_label_and_badge.scss +57 -0
  114. data/vendor/assets/stylesheets/components/_layout.scss +63 -0
  115. data/vendor/assets/stylesheets/components/_map.scss +14 -0
  116. data/vendor/assets/stylesheets/components/_milestone.scss +49 -0
  117. data/vendor/assets/stylesheets/components/_missive.scss +40 -0
  118. data/vendor/assets/stylesheets/components/_modal.scss +126 -0
  119. data/vendor/assets/stylesheets/components/_nav_and_tab.scss +202 -0
  120. data/vendor/assets/stylesheets/components/_navbar.scss +66 -0
  121. data/vendor/assets/stylesheets/components/_pagination.scss +79 -0
  122. data/vendor/assets/stylesheets/components/_placeholder.scss +23 -0
  123. data/vendor/assets/stylesheets/components/_popover.scss +167 -0
  124. data/vendor/assets/stylesheets/components/_progress.scss +62 -0
  125. data/vendor/assets/stylesheets/components/_sidebar.scss +74 -0
  126. data/vendor/assets/stylesheets/components/_spinner.scss +83 -0
  127. data/vendor/assets/stylesheets/components/_switch.scss +150 -0
  128. data/vendor/assets/stylesheets/components/_timepicker.scss +30 -0
  129. data/vendor/assets/stylesheets/components/_tooltip.scss +93 -0
  130. data/vendor/assets/stylesheets/components/_transition.scss +12 -0
  131. data/vendor/assets/stylesheets/components/_typeahead.scss +18 -0
  132. metadata +150 -94
  133. data/app/assets/fonts/gotham/gotham-bold.woff +0 -0
  134. data/app/assets/fonts/gotham/gotham-book.woff +0 -0
  135. data/app/assets/fonts/gotham/gotham-light.woff +0 -0
  136. data/app/assets/fonts/gotham/gotham-medium.woff +0 -0
  137. data/app/assets/fonts/gotham/gotham-rounded-bold.woff +0 -0
  138. data/app/assets/fonts/gotham/gotham-rounded-book.woff +0 -0
  139. data/app/assets/fonts/gotham/gotham-rounded-light.woff +0 -0
  140. data/app/assets/fonts/gotham/gotham-rounded-medium.woff +0 -0
  141. data/app/assets/images/placeholders/archive-large.png +0 -0
  142. data/app/assets/images/placeholders/archive-small.png +0 -0
  143. data/app/assets/images/placeholders/archive.png +0 -0
  144. data/app/assets/images/placeholders/picture-large.png +0 -0
  145. data/app/assets/images/placeholders/picture.png +0 -0
  146. data/vendor/assets/javascripts/_affix.js +0 -153
  147. data/vendor/assets/javascripts/_alert.js +0 -85
  148. data/vendor/assets/javascripts/_animation.js +0 -103
  149. data/vendor/assets/javascripts/_button.js +0 -107
  150. data/vendor/assets/javascripts/_carousel.js +0 -228
  151. data/vendor/assets/javascripts/_chart.js +0 -3742
  152. data/vendor/assets/javascripts/_collapse.js +0 -202
  153. data/vendor/assets/javascripts/_color_picker.js +0 -108
  154. data/vendor/assets/javascripts/_date_picker.js +0 -1650
  155. data/vendor/assets/javascripts/_dropdown.js +0 -156
  156. data/vendor/assets/javascripts/_file_input.js +0 -71
  157. data/vendor/assets/javascripts/_hoverdown.js +0 -109
  158. data/vendor/assets/javascripts/_inputmask.js +0 -341
  159. data/vendor/assets/javascripts/_loader.js +0 -361
  160. data/vendor/assets/javascripts/_map.js +0 -2401
  161. data/vendor/assets/javascripts/_popover.js +0 -99
  162. data/vendor/assets/javascripts/_scrollspy.js +0 -163
  163. data/vendor/assets/javascripts/_slider.js +0 -1572
  164. data/vendor/assets/javascripts/_sort.js +0 -1432
  165. data/vendor/assets/javascripts/_swoggle.js +0 -415
  166. data/vendor/assets/javascripts/_tab.js +0 -146
  167. data/vendor/assets/javascripts/_tablespy.js +0 -1883
  168. data/vendor/assets/javascripts/_time_ago.js +0 -206
  169. data/vendor/assets/javascripts/_time_picker.js +0 -1088
  170. data/vendor/assets/javascripts/_tooltip.js +0 -504
  171. data/vendor/assets/javascripts/_transition.js +0 -50
  172. data/vendor/assets/javascripts/_typeahead.js +0 -366
  173. data/vendor/assets/stylesheets/_ad.scss +0 -63
  174. data/vendor/assets/stylesheets/_affix.scss +0 -14
  175. data/vendor/assets/stylesheets/_alert.scss +0 -114
  176. data/vendor/assets/stylesheets/_animation.scss +0 -1370
  177. data/vendor/assets/stylesheets/_breadcrumb.scss +0 -100
  178. data/vendor/assets/stylesheets/_button.scss +0 -386
  179. data/vendor/assets/stylesheets/_canvas.scss +0 -182
  180. data/vendor/assets/stylesheets/_carousel.scss +0 -158
  181. data/vendor/assets/stylesheets/_chart.scss +0 -15
  182. data/vendor/assets/stylesheets/_code.scss +0 -150
  183. data/vendor/assets/stylesheets/_collapse.scss +0 -14
  184. data/vendor/assets/stylesheets/_color.scss +0 -55
  185. data/vendor/assets/stylesheets/_colorpicker.scss +0 -63
  186. data/vendor/assets/stylesheets/_datepicker.scss +0 -122
  187. data/vendor/assets/stylesheets/_dropdown.scss +0 -248
  188. data/vendor/assets/stylesheets/_footer.scss +0 -71
  189. data/vendor/assets/stylesheets/_form.scss +0 -661
  190. data/vendor/assets/stylesheets/_grid.scss +0 -184
  191. data/vendor/assets/stylesheets/_header.scss +0 -156
  192. data/vendor/assets/stylesheets/_icon.scss +0 -362
  193. data/vendor/assets/stylesheets/_image.scss +0 -33
  194. data/vendor/assets/stylesheets/_label_and_badge.scss +0 -104
  195. data/vendor/assets/stylesheets/_link.scss +0 -55
  196. data/vendor/assets/stylesheets/_list.scss +0 -122
  197. data/vendor/assets/stylesheets/_loader.scss +0 -71
  198. data/vendor/assets/stylesheets/_map.scss +0 -44
  199. data/vendor/assets/stylesheets/_missive.scss +0 -74
  200. data/vendor/assets/stylesheets/_modal.scss +0 -204
  201. data/vendor/assets/stylesheets/_nav_and_tab.scss +0 -230
  202. data/vendor/assets/stylesheets/_navbar.scss +0 -73
  203. data/vendor/assets/stylesheets/_pagination.scss +0 -79
  204. data/vendor/assets/stylesheets/_panel.scss +0 -80
  205. data/vendor/assets/stylesheets/_placeholder.scss +0 -63
  206. data/vendor/assets/stylesheets/_popover.scss +0 -128
  207. data/vendor/assets/stylesheets/_progress.scss +0 -86
  208. data/vendor/assets/stylesheets/_reset.scss +0 -140
  209. data/vendor/assets/stylesheets/_sidebar.scss +0 -148
  210. data/vendor/assets/stylesheets/_slider.scss +0 -151
  211. data/vendor/assets/stylesheets/_spinner.scss +0 -572
  212. data/vendor/assets/stylesheets/_subheader.scss +0 -112
  213. data/vendor/assets/stylesheets/_swoggle.scss +0 -120
  214. data/vendor/assets/stylesheets/_table.scss +0 -210
  215. data/vendor/assets/stylesheets/_timepicker.scss +0 -77
  216. data/vendor/assets/stylesheets/_toolbar.scss +0 -130
  217. data/vendor/assets/stylesheets/_tooltip.scss +0 -105
  218. data/vendor/assets/stylesheets/_transition.scss +0 -11
  219. data/vendor/assets/stylesheets/_trunk.scss +0 -147
  220. data/vendor/assets/stylesheets/_typeahead.scss +0 -18
  221. data/vendor/assets/stylesheets/_typography.scss +0 -233
@@ -0,0 +1,126 @@
1
+ +function ($) {
2
+ 'use strict';
3
+
4
+ // LAYOUT CLASS DEFINITION
5
+ // =======================
6
+
7
+ var Layout = function (element, options) {
8
+ this.$element = $(element);
9
+ this.$window = $(window);
10
+ this.settings = {
11
+ direction: this.$element.data('direction'),
12
+ effect: this.$element.data('effect'),
13
+ target: this.$element.data('target')
14
+ };
15
+ this.options = $.extend({}, Layout.DEFAULTS, this.settings, options);
16
+
17
+ this.init();
18
+ this.toggleViewport();
19
+ };
20
+
21
+ if (!$.fn.animation) throw new Error('Layout requires animation.js');
22
+
23
+ Layout.VERSION = '1.0.0';
24
+ Layout.DEFAULTS = {
25
+ direction: 'left',
26
+ effect: 'slide',
27
+ target: '#layout-target'
28
+ };
29
+
30
+ Layout.prototype.constructor = Layout;
31
+
32
+ Layout.prototype.init = function () {
33
+ var _self = this;
34
+ var options = this.options;
35
+
36
+ this.$element.click(function () {
37
+ var target = $(_self.options.target);
38
+ var next = _self.getNext();
39
+ var toggle = 'out';
40
+
41
+ if (target.hasClass('hidden') || target.is(':hidden') || target.css('visibility') === 'hidden') {
42
+ toggle = 'in';
43
+ }
44
+
45
+ var effect = options.effect + '-' + toggle + '-' + options.direction;
46
+
47
+ _self.togglePosition('fixed');
48
+ target.animation({
49
+ duration: 'xxs',
50
+ effect: effect,
51
+ hide: toggle === 'out'
52
+ });
53
+ });
54
+ };
55
+
56
+ Layout.prototype.getNext = function () {
57
+ var next = $(this.options.target).next();
58
+ var id = next.attr('id');
59
+
60
+ if (id === undefined || id === '') {
61
+ id = 'show-bs-layout';
62
+ next.attr('id', id);
63
+ }
64
+
65
+ return $('#' + id);
66
+ };
67
+
68
+ Layout.prototype.togglePosition = function (klass) {
69
+ var target = $(this.options.target);
70
+
71
+ if (this.$window.width() < 767) {
72
+ target.addClass(klass);
73
+ } else {
74
+ target.removeClass(klass);
75
+ }
76
+ };
77
+
78
+ Layout.prototype.toggleViewport = function () {
79
+ var _self = this;
80
+
81
+ this.togglePosition('hidden fixed');
82
+
83
+ this.$window.on('resize.bs.layout orientationChange.bs.layout', function () {
84
+ _self.togglePosition('hidden fixed');
85
+ });
86
+ };
87
+
88
+ // LAYOUT PLUGIN DEFINITION
89
+ // ========================
90
+
91
+ function Plugin(option) {
92
+ return this.each(function () {
93
+ var $this = $(this);
94
+ var data = $this.data('bs.layout');
95
+ var options = typeof option === 'object' && option;
96
+
97
+ if (!data) $this.data('bs.layout', (data = new Layout(this, options)));
98
+ if (typeof option === 'string') data[option]();
99
+ });
100
+ }
101
+
102
+ var old = $.fn.layout;
103
+
104
+ $.fn.layout = Plugin;
105
+ $.fn.layout.Constructor = Layout;
106
+
107
+ // LAYOUT NO CONFLICT
108
+ // ==================
109
+
110
+ $.fn.layout.noConflict = function () {
111
+ $.fn.layout = old;
112
+ return this;
113
+ };
114
+
115
+ // LAYOUT DATA-API
116
+ // ==================
117
+
118
+ $(document).on('ready.bs.layout.data-api', function () {
119
+ $('[data-toggle="layout"]').each(function () {
120
+ var $this = $(this);
121
+ if ($this.data('layout')) return;
122
+ Plugin.call($this, $this.data());
123
+ });
124
+ });
125
+
126
+ }(jQuery);
@@ -0,0 +1,103 @@
1
+ +function ($) {
2
+ 'use strict';
3
+
4
+ // LIST CLASS DEFINITION
5
+ // =====================
6
+
7
+ var List = function (element, options) {
8
+ this.$element = $(element);
9
+ this.settings = {
10
+ input: this.$element.data('input'),
11
+ emptyText: this.$element.data('empty-text')
12
+ };
13
+ this.options = $.extend({}, List.DEFAULTS, this.settings, options);
14
+
15
+ this.$input = $(this.options.input);
16
+ this.$lis = this.$element.children();
17
+ this.$len = this.$lis.length;
18
+
19
+ this.init();
20
+ };
21
+
22
+ List.VERSION = '1.0.0';
23
+ List.DEFAULTS = {
24
+ callback: function (visible) {},
25
+ emptyText: 'No matches found',
26
+ input: null
27
+ };
28
+
29
+ List.prototype.constructor = List;
30
+
31
+ List.prototype.init = function () {
32
+ if (this.options.input === null) return this;
33
+
34
+ var _self = this;
35
+ var list = this.$element;
36
+ var element = this.$input;
37
+
38
+ element.keyup(function () {
39
+ var filter = element.val().toLowerCase();
40
+ var visible = 0;
41
+
42
+ for (var i = 0; i < _self.$len; i++) {
43
+ var li = $(_self.$lis[i]);
44
+
45
+ if (li.text().toLowerCase().indexOf(filter) >= 0) {
46
+ li.removeClass('hidden');
47
+ visible++;
48
+ } else {
49
+ li.addClass('hidden');
50
+ }
51
+ }
52
+
53
+ if (_self.options.placeholder !== null) {
54
+ list.find('.bsListEmpty').remove();
55
+
56
+ if (visible === 0) list.append('<li class="bsListEmpty">' + _self.options.emptyText + '</li>');
57
+ }
58
+
59
+ _self.options.callback(visible);
60
+
61
+ return false;
62
+ });
63
+ };
64
+
65
+ // LIST PLUGIN DEFINITION
66
+ // ======================
67
+
68
+ function Plugin(option) {
69
+ return this.each(function () {
70
+ var $this = $(this);
71
+ var data = $this.data('bs.list');
72
+ var options = typeof option === 'object' && option;
73
+
74
+ if (!data) $this.data('bs.list', (data = new List(this, options)));
75
+ if (typeof option === 'string') data[option]();
76
+ });
77
+ }
78
+
79
+ var old = $.fn.list;
80
+
81
+ $.fn.list = Plugin;
82
+ $.fn.list.Constructor = List;
83
+
84
+ // LIST NO CONFLICT
85
+ // ================
86
+
87
+ $.fn.list.noConflict = function () {
88
+ $.fn.list = old;
89
+ return this;
90
+ };
91
+
92
+ // LIST DATA-API
93
+ // =============
94
+
95
+ $(document).on('ready.bs.list.data-api', function () {
96
+ $('[data-toggle="list"]').each(function () {
97
+ var $this = $(this);
98
+ if ($this.data('list')) return;
99
+ Plugin.call($this, $this.data());
100
+ });
101
+ });
102
+
103
+ }(jQuery);
@@ -5,324 +5,327 @@
5
5
  // ======================
6
6
 
7
7
  var Modal = function (element, options) {
8
- this.options = options
9
- this.$body = $(document.body)
10
- this.$element = $(element)
11
- this.$dialog = this.$element.find('.modal-dialog')
12
- this.$backdrop = null
13
- this.isShown = null
14
- this.originalBodyPad = null
15
- this.scrollbarWidth = 0
16
- this.ignoreBackdropClick = false
8
+ this.$body = $(document.body);
9
+ this.$element = $(element);
10
+ this.options = options;
11
+
12
+ this.$dialog = this.$element.find('.modal-dialog');
13
+ this.$backdrop = null;
14
+ this.isShown = null;
15
+ this.originalBodyPad = null;
16
+ this.scrollbarWidth = 0;
17
+ this.ignoreBackdropClick = false;
17
18
 
18
19
  if (this.options.remote) {
19
20
  this.$element
20
- .find('.modal-content')
21
+ .find('.modal-body')
21
22
  .load(this.options.remote, $.proxy(function () {
22
- this.$element.trigger('loaded.bs.modal')
23
- }, this))
23
+ this.$element.trigger('loaded.bs.modal');
24
+ }, this));
24
25
  }
25
- }
26
-
27
- Modal.VERSION = '3.3.6'
28
-
29
- Modal.TRANSITION_DURATION = 300
30
- Modal.BACKDROP_TRANSITION_DURATION = 150
26
+ };
31
27
 
28
+ Modal.VERSION = '1.0.0';
29
+ Modal.TRANSITION_DURATION = 300;
30
+ Modal.BACKDROP_TRANSITION_DURATION = 150;
32
31
  Modal.DEFAULTS = {
33
32
  backdrop: true,
34
33
  keyboard: true,
35
34
  show: true
36
- }
35
+ };
36
+
37
+ Modal.prototype.constructor = Modal;
37
38
 
38
39
  Modal.prototype.toggle = function (_relatedTarget) {
39
- return this.isShown ? this.hide() : this.show(_relatedTarget)
40
- }
40
+ return this.isShown ? this.hide() : this.show(_relatedTarget);
41
+ };
41
42
 
42
43
  Modal.prototype.show = function (_relatedTarget) {
43
- var that = this
44
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
45
-
46
- this.$element.trigger(e)
47
-
48
- if (this.isShown || e.isDefaultPrevented()) return
44
+ var that = this;
45
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget });
49
46
 
50
- this.isShown = true
47
+ this.$element.trigger(e);
51
48
 
52
- this.checkScrollbar()
53
- this.setScrollbar()
54
- this.$body.addClass('modal-open')
49
+ if (this.isShown || e.isDefaultPrevented()) return;
55
50
 
56
- this.escape()
57
- this.resize()
51
+ this.isShown = true;
58
52
 
59
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
53
+ this.checkScrollbar();
54
+ this.setScrollbar();
55
+ this.$body.addClass('modal-open');
56
+ this.escape();
57
+ this.resize();
58
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this));
60
59
 
61
60
  this.$dialog.on('mousedown.dismiss.bs.modal', function () {
62
61
  that.$element.one('mouseup.dismiss.bs.modal', function (e) {
63
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
64
- })
65
- })
62
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true;
63
+ });
64
+ });
66
65
 
67
66
  this.backdrop(function () {
68
- var transition = $.support.transition && that.$element.hasClass('fade')
67
+ var transition = $.support.transition && that.$element.hasClass('fade');
69
68
 
70
- if (!that.$element.parent().length) {
71
- that.$element.appendTo(that.$body) // don't move modals dom position
72
- }
69
+ if (!that.$element.parent().length) that.$element.appendTo(that.$body);
73
70
 
74
71
  that.$element
75
72
  .show()
76
- .scrollTop(0)
73
+ .scrollTop(0);
77
74
 
78
- that.adjustDialog()
75
+ that.adjustDialog();
79
76
 
80
- if (transition) {
81
- that.$element[0].offsetWidth // force reflow
82
- }
77
+ if (transition) that.$element[0].offsetWidth;
83
78
 
84
- that.$element.addClass('in')
79
+ that.$element.addClass('in');
80
+ that.enforceFocus();
85
81
 
86
- that.enforceFocus()
87
-
88
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
82
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget });
89
83
 
90
84
  transition ?
91
- that.$dialog // wait for modal to slide in
85
+ that.$dialog
92
86
  .one('bsTransitionEnd', function () {
93
- that.$element.trigger('focus').trigger(e)
94
- })
95
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
96
- that.$element.trigger('focus').trigger(e)
97
- })
98
- }
87
+ that.$element.trigger('focus').trigger(e);
88
+ }).emulateTransitionEnd(Modal.TRANSITION_DURATION) :
89
+ that.$element
90
+ .trigger('focus')
91
+ .trigger(e);
92
+ });
93
+ };
99
94
 
100
95
  Modal.prototype.hide = function (e) {
101
- if (e) e.preventDefault()
96
+ if (e) e.preventDefault();
102
97
 
103
- e = $.Event('hide.bs.modal')
98
+ e = $.Event('hide.bs.modal');
104
99
 
105
- this.$element.trigger(e)
100
+ this.$element.trigger(e);
106
101
 
107
- if (!this.isShown || e.isDefaultPrevented()) return
102
+ if (!this.isShown || e.isDefaultPrevented()) return;
108
103
 
109
- this.isShown = false
104
+ this.isShown = false;
110
105
 
111
- this.escape()
112
- this.resize()
106
+ this.escape();
107
+ this.resize();
113
108
 
114
- $(document).off('focusin.bs.modal')
109
+ $(document).off('focusin.bs.modal');
115
110
 
116
111
  this.$element
117
112
  .removeClass('in')
118
113
  .off('click.dismiss.bs.modal')
119
- .off('mouseup.dismiss.bs.modal')
114
+ .off('mouseup.dismiss.bs.modal');
120
115
 
121
- this.$dialog.off('mousedown.dismiss.bs.modal')
116
+ this.$dialog.off('mousedown.dismiss.bs.modal');
122
117
 
123
118
  $.support.transition && this.$element.hasClass('fade') ?
124
119
  this.$element
125
120
  .one('bsTransitionEnd', $.proxy(this.hideModal, this))
126
121
  .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
127
- this.hideModal()
128
- }
122
+ this.hideModal();
123
+ };
129
124
 
130
125
  Modal.prototype.enforceFocus = function () {
131
126
  $(document)
132
127
  .off('focusin.bs.modal') // guard against infinite focus loop
133
128
  .on('focusin.bs.modal', $.proxy(function (e) {
134
129
  if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
135
- this.$element.trigger('focus')
130
+ this.$element.trigger('focus');
136
131
  }
137
- }, this))
138
- }
132
+ }, this));
133
+ };
139
134
 
140
135
  Modal.prototype.escape = function () {
141
136
  if (this.isShown && this.options.keyboard) {
142
137
  this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
143
- e.which == 27 && this.hide()
144
- }, this))
138
+ e.which === 27 && this.hide();
139
+ }, this));
145
140
  } else if (!this.isShown) {
146
- this.$element.off('keydown.dismiss.bs.modal')
141
+ this.$element.off('keydown.dismiss.bs.modal');
147
142
  }
148
- }
143
+ };
149
144
 
150
145
  Modal.prototype.resize = function () {
151
146
  if (this.isShown) {
152
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
147
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this));
153
148
  } else {
154
- $(window).off('resize.bs.modal')
149
+ $(window).off('resize.bs.modal');
155
150
  }
156
- }
151
+ };
157
152
 
158
153
  Modal.prototype.hideModal = function () {
159
- var that = this
160
- this.$element.hide()
154
+ var that = this;
155
+ this.$element.hide();
161
156
  this.backdrop(function () {
162
- that.$body.removeClass('modal-open')
163
- that.resetAdjustments()
164
- that.resetScrollbar()
165
- that.$element.trigger('hidden.bs.modal')
166
- })
167
- }
157
+ that.$body.removeClass('modal-open');
158
+ that.resetAdjustments();
159
+ that.resetScrollbar();
160
+ that.$element.trigger('hidden.bs.modal');
161
+ });
162
+ };
168
163
 
169
164
  Modal.prototype.removeBackdrop = function () {
170
- this.$backdrop && this.$backdrop.remove()
171
- this.$backdrop = null
172
- }
165
+ this.$backdrop && this.$backdrop.remove();
166
+ this.$backdrop = null;
167
+ };
173
168
 
174
169
  Modal.prototype.backdrop = function (callback) {
175
- var that = this
176
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
170
+ var that = this;
171
+ var animate = this.$element.hasClass('fade') ? 'fade' : '';
177
172
 
178
173
  if (this.isShown && this.options.backdrop) {
179
- var doAnimate = $.support.transition && animate
174
+ var doAnimate = $.support.transition && animate;
180
175
 
181
176
  this.$backdrop = $(document.createElement('div'))
182
177
  .addClass('modal-backdrop ' + animate)
183
- .appendTo(this.$body)
178
+ .appendTo(this.$body);
184
179
 
185
180
  this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
186
181
  if (this.ignoreBackdropClick) {
187
- this.ignoreBackdropClick = false
188
- return
182
+ this.ignoreBackdropClick = false;
183
+ return;
189
184
  }
190
- if (e.target !== e.currentTarget) return
191
- this.options.backdrop == 'static'
192
- ? this.$element[0].focus()
193
- : this.hide()
194
- }, this))
185
+ if (e.target !== e.currentTarget) return;
195
186
 
196
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
187
+ this.options.backdrop === 'static' ?
188
+ this.$element[0].focus() :
189
+ this.hide();
190
+ }, this));
197
191
 
198
- this.$backdrop.addClass('in')
192
+ if (doAnimate) this.$backdrop[0].offsetWidth;
199
193
 
200
- if (!callback) return
194
+ this.$backdrop.addClass('in');
195
+
196
+ if (!callback) return;
201
197
 
202
198
  doAnimate ?
203
199
  this.$backdrop
204
200
  .one('bsTransitionEnd', callback)
205
201
  .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
206
- callback()
202
+ callback();
207
203
 
208
204
  } else if (!this.isShown && this.$backdrop) {
209
- this.$backdrop.removeClass('in')
205
+ this.$backdrop.removeClass('in');
210
206
 
211
207
  var callbackRemove = function () {
212
- that.removeBackdrop()
213
- callback && callback()
214
- }
208
+ that.removeBackdrop();
209
+ callback && callback();
210
+ };
215
211
  $.support.transition && this.$element.hasClass('fade') ?
216
212
  this.$backdrop
217
213
  .one('bsTransitionEnd', callbackRemove)
218
214
  .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
219
- callbackRemove()
215
+ callbackRemove();
220
216
 
221
217
  } else if (callback) {
222
- callback()
218
+ callback();
223
219
  }
224
- }
225
-
226
- // these following methods are used to handle overflowing modals
220
+ };
227
221
 
228
222
  Modal.prototype.handleUpdate = function () {
229
- this.adjustDialog()
230
- }
223
+ this.adjustDialog();
224
+ };
231
225
 
232
226
  Modal.prototype.adjustDialog = function () {
233
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
227
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight;
234
228
 
235
229
  this.$element.css({
236
230
  paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
237
231
  paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
238
- })
239
- }
232
+ });
233
+ };
240
234
 
241
235
  Modal.prototype.resetAdjustments = function () {
242
236
  this.$element.css({
243
237
  paddingLeft: '',
244
238
  paddingRight: ''
245
- })
246
- }
239
+ });
240
+ };
247
241
 
248
242
  Modal.prototype.checkScrollbar = function () {
249
- var fullWindowWidth = window.innerWidth
243
+ var fullWindowWidth = window.innerWidth;
244
+
250
245
  if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
251
- var documentElementRect = document.documentElement.getBoundingClientRect()
252
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
246
+ var documentElementRect = document.documentElement.getBoundingClientRect();
247
+
248
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);
253
249
  }
254
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
255
- this.scrollbarWidth = this.measureScrollbar()
256
- }
250
+
251
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth;
252
+ this.scrollbarWidth = this.measureScrollbar();
253
+ };
257
254
 
258
255
  Modal.prototype.setScrollbar = function () {
259
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
260
- this.originalBodyPad = document.body.style.paddingRight || ''
261
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
262
- }
256
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10);
257
+
258
+ this.originalBodyPad = document.body.style.paddingRight || '';
259
+
260
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth);
261
+ };
263
262
 
264
263
  Modal.prototype.resetScrollbar = function () {
265
- this.$body.css('padding-right', this.originalBodyPad)
266
- }
264
+ this.$body.css('padding-right', this.originalBodyPad);
265
+ };
267
266
 
268
267
  Modal.prototype.measureScrollbar = function () { // thx walsh
269
- var scrollDiv = document.createElement('div')
270
- scrollDiv.className = 'modal-scrollbar-measure'
271
- this.$body.append(scrollDiv)
272
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
273
- this.$body[0].removeChild(scrollDiv)
274
- return scrollbarWidth
275
- }
268
+ var scrollDiv = document.createElement('div');
269
+ scrollDiv.className = 'modal-scrollbar-measure';
270
+ this.$body.append(scrollDiv);
276
271
 
272
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
273
+ this.$body[0].removeChild(scrollDiv);
274
+
275
+ return scrollbarWidth;
276
+ };
277
277
 
278
278
  // MODAL PLUGIN DEFINITION
279
279
  // =======================
280
280
 
281
281
  function Plugin(option, _relatedTarget) {
282
282
  return this.each(function () {
283
- var $this = $(this)
284
- var data = $this.data('bs.modal')
285
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
286
-
287
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
288
- if (typeof option == 'string') data[option](_relatedTarget)
289
- else if (options.show) data.show(_relatedTarget)
290
- })
283
+ var $this = $(this);
284
+ var data = $this.data('bs.modal');
285
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option === 'object' && option);
286
+
287
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)));
288
+ if (typeof option === 'string') {
289
+ data[option](_relatedTarget);
290
+ } else if (options.show) {
291
+ data.show(_relatedTarget);
292
+ }
293
+ });
291
294
  }
292
295
 
293
- var old = $.fn.modal
294
-
295
- $.fn.modal = Plugin
296
- $.fn.modal.Constructor = Modal
296
+ var old = $.fn.modal;
297
297
 
298
+ $.fn.modal = Plugin;
299
+ $.fn.modal.Constructor = Modal;
298
300
 
299
301
  // MODAL NO CONFLICT
300
302
  // =================
301
303
 
302
304
  $.fn.modal.noConflict = function () {
303
- $.fn.modal = old
304
- return this
305
- }
306
-
305
+ $.fn.modal = old;
306
+ return this;
307
+ };
307
308
 
308
309
  // MODAL DATA-API
309
310
  // ==============
310
311
 
311
312
  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
312
- var $this = $(this)
313
- var href = $this.attr('href')
314
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
315
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
313
+ var $this = $(this);
314
+ var href = $this.attr('href');
315
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, '')));
316
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data());
316
317
 
317
- if ($this.is('a')) e.preventDefault()
318
+ if ($this.is('a')) e.preventDefault();
318
319
 
319
320
  $target.one('show.bs.modal', function (showEvent) {
320
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
321
+ if (showEvent.isDefaultPrevented()) return;
322
+
321
323
  $target.one('hidden.bs.modal', function () {
322
- $this.is(':visible') && $this.trigger('focus')
323
- })
324
- })
325
- Plugin.call($target, option, this)
326
- })
324
+ $this.is(':visible') && $this.trigger('focus');
325
+ });
326
+ });
327
+
328
+ Plugin.call($target, option, this);
329
+ });
327
330
 
328
331
  }(jQuery);