active_frontend 13.3.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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);