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
@@ -1,156 +0,0 @@
1
- +function ($) {
2
- 'use strict';
3
-
4
- // DROPDOWN CLASS DEFINITION
5
- // =========================
6
-
7
- var backdrop = '.dropdown-backdrop'
8
- var toggle = '[data-toggle="dropdown"]'
9
- var Dropdown = function (element) {
10
- $(element).on('click.bs.dropdown', this.toggle)
11
- }
12
-
13
- Dropdown.VERSION = '3.3.6'
14
-
15
- function getParent($this) {
16
- var selector = $this.attr('data-target')
17
-
18
- if (!selector) {
19
- selector = $this.attr('href')
20
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
21
- }
22
-
23
- var $parent = selector && $(selector)
24
-
25
- return $parent && $parent.length ? $parent : $this.parent()
26
- }
27
-
28
- function clearMenus(e) {
29
- if (e && e.which === 3) return
30
- $(backdrop).remove()
31
- $(toggle).each(function () {
32
- var $this = $(this)
33
- var $parent = getParent($this)
34
- var relatedTarget = { relatedTarget: this }
35
-
36
- if (!$parent.hasClass('open')) return
37
-
38
- if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
39
-
40
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
41
-
42
- if (e.isDefaultPrevented()) return
43
-
44
- $this.attr('aria-expanded', 'false')
45
- $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
46
- })
47
- }
48
-
49
- Dropdown.prototype.toggle = function (e) {
50
- var $this = $(this)
51
-
52
- if ($this.is('.disabled, :disabled')) return
53
-
54
- var $parent = getParent($this)
55
- var isActive = $parent.hasClass('open')
56
-
57
- clearMenus()
58
-
59
- if (!isActive) {
60
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
61
- // if mobile we use a backdrop because click events don't delegate
62
- $(document.createElement('div'))
63
- .addClass('dropdown-backdrop')
64
- .insertAfter($(this))
65
- .on('click', clearMenus)
66
- }
67
-
68
- var relatedTarget = { relatedTarget: this }
69
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
70
-
71
- if (e.isDefaultPrevented()) return
72
-
73
- $this
74
- .trigger('focus')
75
- .attr('aria-expanded', 'true')
76
-
77
- $parent
78
- .toggleClass('open')
79
- .trigger($.Event('shown.bs.dropdown', relatedTarget))
80
- }
81
-
82
- return false
83
- }
84
-
85
- Dropdown.prototype.keydown = function (e) {
86
- if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
87
-
88
- var $this = $(this)
89
-
90
- e.preventDefault()
91
- e.stopPropagation()
92
-
93
- if ($this.is('.disabled, :disabled')) return
94
-
95
- var $parent = getParent($this)
96
- var isActive = $parent.hasClass('open')
97
-
98
- if (!isActive && e.which != 27 || isActive && e.which == 27) {
99
- if (e.which == 27) $parent.find(toggle).trigger('focus')
100
- return $this.trigger('click')
101
- }
102
-
103
- var desc = ' li:not(.disabled):visible a'
104
- var $items = $parent.find('.dropdown-menu' + desc)
105
-
106
- if (!$items.length) return
107
-
108
- var index = $items.index(e.target)
109
-
110
- if (e.which == 38 && index > 0) index-- // up
111
- if (e.which == 40 && index < $items.length - 1) index++ // down
112
- if (!~index) index = 0
113
-
114
- $items.eq(index).trigger('focus')
115
- }
116
-
117
-
118
- // DROPDOWN PLUGIN DEFINITION
119
- // ==========================
120
-
121
- function Plugin(option) {
122
- return this.each(function () {
123
- var $this = $(this)
124
- var data = $this.data('bs.dropdown')
125
-
126
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
127
- if (typeof option == 'string') data[option].call($this)
128
- })
129
- }
130
-
131
- var old = $.fn.dropdown
132
-
133
- $.fn.dropdown = Plugin
134
- $.fn.dropdown.Constructor = Dropdown
135
-
136
-
137
- // DROPDOWN NO CONFLICT
138
- // ====================
139
-
140
- $.fn.dropdown.noConflict = function () {
141
- $.fn.dropdown = old
142
- return this
143
- }
144
-
145
-
146
- // APPLY TO STANDARD DROPDOWN ELEMENTS
147
- // ===================================
148
-
149
- $(document)
150
- .on('click.bs.dropdown.data-api', clearMenus)
151
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
152
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
153
- .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
154
- .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
155
-
156
- }(jQuery);
@@ -1,71 +0,0 @@
1
- $(function() {
2
-
3
- $("input[type=file].file-input").each(function(i,el){
4
- if (typeof $(this).attr("data-vendor-style") != 'undefined') {
5
- return;
6
- };
7
-
8
- var buttonWord = "Browse";
9
- if (typeof $(this).attr("title") != "undefined") {
10
- buttonWord = $(this).attr("title");
11
- };
12
-
13
- var input = $("<div>").append( $(el).eq(0).clone() ).html();
14
-
15
- var view = "btn";
16
- if (typeof $(this).attr("data-view") != "undefined") {
17
- view = $(this).attr("data-view");
18
- };
19
-
20
- var id = 'file-input-' + i
21
- $(el).replaceWith("<a class='"+view+" file-input' id='"+id+"'>"+buttonWord+input+"</a>");
22
-
23
- var viewChanged = null;
24
- if (typeof $(this).attr("data-view-changed") != "undefined") {
25
- viewChanged = $(this).attr("data-view-changed");
26
- };
27
-
28
- var hash_id = '#' + id
29
- $(hash_id).change(function(){
30
- $(hash_id).addClass(viewChanged);
31
- });
32
-
33
- var cssHtml = "<style>"+
34
- ".file-input { overflow: hidden; position: relative; cursor: pointer; z-index: 1; }"+
35
- ".file-input input[type=file], .btn-file input[type=file]:focus, .btn-file input[type=file]:hover { position: absolute; top: 0; left: 0; cursor: pointer; opacity: 0; z-index: 99; outline: 0; }"+
36
- "</style>";
37
-
38
- $("link[rel=stylesheet]").eq(0).before(cssHtml);
39
-
40
- }).promise().done( function(){
41
-
42
- $(".file-input").mousemove(function(cursor) {
43
- var input, wrapper, wrapperX, wrapperY, inputWidth, inputHeight, cursorX, cursorY;
44
-
45
- wrapper = $(this);
46
- input = wrapper.find("input");
47
- wrapperX = wrapper.offset().left;
48
- wrapperY = wrapper.offset().top;
49
- inputWidth = input.width();
50
- inputHeight = input.height();
51
- cursorX = cursor.pageX;
52
- cursorY = cursor.pageY;
53
- moveInputX = cursorX - wrapperX - inputWidth + 20;
54
- moveInputY = cursorY- wrapperY - (inputHeight/2);
55
-
56
- input.css({
57
- left:moveInputX,
58
- top:moveInputY
59
- });
60
- });
61
- });
62
-
63
- });
64
-
65
- function formFileGroup() { "use strict";
66
- $('.form-file-group-input').click();
67
-
68
- $('.form-file-group-input').change(function(){
69
- $('.form-file-group-text').val($('.form-file-group-input').val());
70
- });
71
- };
@@ -1,109 +0,0 @@
1
- ;(function ($, window, undefined) {
2
- // outside the scope of the jQuery plugin to
3
- // keep track of all dropdowns
4
- var $allDropdowns = $();
5
-
6
- // if instantlyCloseOthers is true, then it will instantly
7
- // shut other nav items when a new one is hovered over
8
- $.fn.dropdownHover = function (options) {
9
- // don't do anything if touch is supported
10
- // (plugin causes some issues on mobile)
11
- if('ontouchstart' in document) return this; // don't want to affect chaining
12
-
13
- // the element we really care about
14
- // is the dropdown-toggle's parent
15
- $allDropdowns = $allDropdowns.add(this.parent());
16
-
17
- return this.each(function () {
18
- var $this = $(this),
19
- $parent = $this.parent(),
20
- defaults = {
21
- delay: 500,
22
- instantlyCloseOthers: true
23
- },
24
- data = {
25
- delay: $(this).data('delay'),
26
- instantlyCloseOthers: $(this).data('close-others')
27
- },
28
- showEvent = 'show.bs.dropdown',
29
- hideEvent = 'hide.bs.dropdown',
30
- // shownEvent = 'shown.bs.dropdown',
31
- // hiddenEvent = 'hidden.bs.dropdown',
32
- settings = $.extend(true, {}, defaults, options, data),
33
- timeout;
34
-
35
- $parent.hover(function (event) {
36
- // so a neighbor can't open the dropdown
37
- if($parent.hasClass('open') && !$this.is(event.target)) {
38
- // stop this event, stop executing any code
39
- // in this callback but continue to propagate
40
- return true;
41
- }
42
-
43
- window.clearTimeout(timeout);
44
- openDropdown(event);
45
- }, function () {
46
- timeout = window.setTimeout(function () {
47
- $parent.removeClass('open');
48
- $this.trigger(hideEvent);
49
- }, settings.delay);
50
- });
51
-
52
- // clear timeout if hovering submenu
53
- $allDropdowns.find('.dropdown-menu').hover(function(){
54
- window.clearTimeout(timeout);
55
- }, function(){
56
- timeout = window.setTimeout(function () {
57
- $parent.removeClass('open');
58
- $this.trigger(hideEvent);
59
- }, settings.delay);
60
- });
61
-
62
- // this helps with button groups!
63
- $this.hover(function (event) {
64
- // this helps prevent a double event from firing.
65
- // see https://github.com/CWSpear/bootstrap-hover-dropdown/issues/55
66
- if($parent.hasClass('open') && !$parent.is(event.target)) {
67
- // stop this event, stop executing any code
68
- // in this callback but continue to propagate
69
- return true;
70
- }
71
-
72
- openDropdown(event);
73
- });
74
-
75
- // handle submenus
76
- $parent.find('.dropdown-submenu').each(function (){
77
- var $this = $(this);
78
- var subTimeout;
79
- $this.hover(function () {
80
- window.clearTimeout(subTimeout);
81
- $this.children('.dropdown-menu').show();
82
- // always close submenu siblings instantly
83
- $this.siblings().children('.dropdown-menu').hide();
84
- }, function () {
85
- var $submenu = $this.children('.dropdown-menu');
86
- subTimeout = window.setTimeout(function () {
87
- $submenu.hide();
88
- }, settings.delay);
89
- });
90
- });
91
-
92
- function openDropdown(event) {
93
- $allDropdowns.find(':focus').blur();
94
-
95
- if(settings.instantlyCloseOthers === true)
96
- $allDropdowns.removeClass('open');
97
-
98
- window.clearTimeout(timeout);
99
- $parent.addClass('open');
100
- $this.trigger(showEvent);
101
- }
102
- });
103
- };
104
-
105
- $(document).ready(function () {
106
- // apply dropdownHover to all elements with the data-hover="dropdown" attribute
107
- $('[data-hover="dropdown"]').dropdownHover();
108
- });
109
- })(jQuery, this);
@@ -1,341 +0,0 @@
1
- +function ($) { "use strict";
2
-
3
- var isIphone = (window.orientation !== undefined)
4
- var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1
5
- var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
6
-
7
- // INPUTMASK PUBLIC CLASS DEFINITION
8
- // =================================
9
-
10
- var Inputmask = function (element, options) {
11
- if (isAndroid) return // No support because caret positioning doesn't work on Android
12
-
13
- this.$element = $(element)
14
- this.options = $.extend({}, Inputmask.DEFAULTS, options)
15
- this.mask = String(this.options.mask)
16
-
17
- this.init()
18
- this.listen()
19
-
20
- this.checkVal() //Perform initial check for existing values
21
- }
22
-
23
- Inputmask.DEFAULTS = {
24
- mask: "",
25
- placeholder: "_",
26
- definitions: {
27
- '9': "[0-9]",
28
- 'a': "[A-Za-z]",
29
- 'w': "[A-Za-z0-9]",
30
- '*': "."
31
- }
32
- }
33
-
34
- Inputmask.prototype.init = function() {
35
- var defs = this.options.definitions
36
- var len = this.mask.length
37
-
38
- this.tests = []
39
- this.partialPosition = this.mask.length
40
- this.firstNonMaskPos = null
41
-
42
- $.each(this.mask.split(""), $.proxy(function(i, c) {
43
- if (c == '?') {
44
- len--
45
- this.partialPosition = i
46
- } else if (defs[c]) {
47
- this.tests.push(new RegExp(defs[c]))
48
- if (this.firstNonMaskPos === null)
49
- this.firstNonMaskPos = this.tests.length - 1
50
- } else {
51
- this.tests.push(null)
52
- }
53
- }, this))
54
-
55
- this.buffer = $.map(this.mask.split(""), $.proxy(function(c, i) {
56
- if (c != '?') return defs[c] ? this.options.placeholder : c
57
- }, this))
58
-
59
- this.focusText = this.$element.val()
60
-
61
- this.$element.data("rawMaskFn", $.proxy(function() {
62
- return $.map(this.buffer, function(c, i) {
63
- return this.tests[i] && c != this.options.placeholder ? c : null
64
- }).join('')
65
- }, this))
66
- }
67
-
68
- Inputmask.prototype.listen = function() {
69
- if (this.$element.attr("readonly")) return
70
-
71
- var pasteEventName = (isIE ? 'paste' : 'input') + ".bs.inputmask"
72
-
73
- this.$element
74
- .on("unmask.bs.inputmask", $.proxy(this.unmask, this))
75
-
76
- .on("focus.bs.inputmask", $.proxy(this.focusEvent, this))
77
- .on("blur.bs.inputmask", $.proxy(this.blurEvent, this))
78
-
79
- .on("keydown.bs.inputmask", $.proxy(this.keydownEvent, this))
80
- .on("keypress.bs.inputmask", $.proxy(this.keypressEvent, this))
81
-
82
- .on(pasteEventName, $.proxy(this.pasteEvent, this))
83
- }
84
-
85
- //Helper Function for Caret positioning
86
- Inputmask.prototype.caret = function(begin, end) {
87
- if (this.$element.length === 0) return
88
- if (typeof begin == 'number') {
89
- end = (typeof end == 'number') ? end : begin
90
- return this.$element.each(function() {
91
- if (this.setSelectionRange) {
92
- this.setSelectionRange(begin, end)
93
- } else if (this.createTextRange) {
94
- var range = this.createTextRange()
95
- range.collapse(true)
96
- range.moveEnd('character', end)
97
- range.moveStart('character', begin)
98
- range.select()
99
- }
100
- })
101
- } else {
102
- if (this.$element[0].setSelectionRange) {
103
- begin = this.$element[0].selectionStart
104
- end = this.$element[0].selectionEnd
105
- } else if (document.selection && document.selection.createRange) {
106
- var range = document.selection.createRange()
107
- begin = 0 - range.duplicate().moveStart('character', -100000)
108
- end = begin + range.text.length
109
- }
110
- return {
111
- begin: begin,
112
- end: end
113
- }
114
- }
115
- }
116
-
117
- Inputmask.prototype.seekNext = function(pos) {
118
- var len = this.mask.length
119
- while (++pos <= len && !this.tests[pos]);
120
-
121
- return pos
122
- }
123
-
124
- Inputmask.prototype.seekPrev = function(pos) {
125
- while (--pos >= 0 && !this.tests[pos]);
126
-
127
- return pos
128
- }
129
-
130
- Inputmask.prototype.shiftL = function(begin,end) {
131
- var len = this.mask.length
132
-
133
- if (begin < 0) return
134
-
135
- for (var i = begin, j = this.seekNext(end); i < len; i++) {
136
- if (this.tests[i]) {
137
- if (j < len && this.tests[i].test(this.buffer[j])) {
138
- this.buffer[i] = this.buffer[j]
139
- this.buffer[j] = this.options.placeholder
140
- } else
141
- break
142
- j = this.seekNext(j)
143
- }
144
- }
145
- this.writeBuffer()
146
- this.caret(Math.max(this.firstNonMaskPos, begin))
147
- }
148
-
149
- Inputmask.prototype.shiftR = function(pos) {
150
- var len = this.mask.length
151
-
152
- for (var i = pos, c = this.options.placeholder; i < len; i++) {
153
- if (this.tests[i]) {
154
- var j = this.seekNext(i)
155
- var t = this.buffer[i]
156
- this.buffer[i] = c
157
- if (j < len && this.tests[j].test(t))
158
- c = t
159
- else
160
- break
161
- }
162
- }
163
- },
164
-
165
- Inputmask.prototype.unmask = function() {
166
- this.$element
167
- .unbind(".bs.inputmask")
168
- .removeData("bs.inputmask")
169
- }
170
-
171
- Inputmask.prototype.focusEvent = function() {
172
- this.focusText = this.$element.val()
173
- var len = this.mask.length
174
- var pos = this.checkVal()
175
- this.writeBuffer()
176
-
177
- var that = this
178
- var moveCaret = function() {
179
- if (pos == len)
180
- that.caret(0, pos)
181
- else
182
- that.caret(pos)
183
- }
184
-
185
- moveCaret()
186
- setTimeout(moveCaret, 50)
187
- }
188
-
189
- Inputmask.prototype.blurEvent = function() {
190
- this.checkVal()
191
- if (this.$element.val() !== this.focusText) {
192
- this.$element.trigger('change')
193
- this.$element.trigger('input')
194
- }
195
- }
196
-
197
- Inputmask.prototype.keydownEvent = function(e) {
198
- var k = e.which
199
-
200
- //backspace, delete, and escape get special treatment
201
- if (k == 8 || k == 46 || (isIphone && k == 127)) {
202
- var pos = this.caret(),
203
- begin = pos.begin,
204
- end = pos.end
205
-
206
- if (end - begin === 0) {
207
- begin = k != 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1))
208
- end = k == 46 ? this.seekNext(end) : end
209
- }
210
- this.clearBuffer(begin, end)
211
- this.shiftL(begin, end - 1)
212
-
213
- return false
214
- } else if (k == 27) {//escape
215
- this.$element.val(this.focusText)
216
- this.caret(0, this.checkVal())
217
- return false
218
- }
219
- }
220
-
221
- Inputmask.prototype.keypressEvent = function(e) {
222
- var len = this.mask.length
223
-
224
- var k = e.which,
225
- pos = this.caret()
226
-
227
- if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
228
- return true
229
- } else if (k) {
230
- if (pos.end - pos.begin !== 0) {
231
- this.clearBuffer(pos.begin, pos.end)
232
- this.shiftL(pos.begin, pos.end - 1)
233
- }
234
-
235
- var p = this.seekNext(pos.begin - 1)
236
- if (p < len) {
237
- var c = String.fromCharCode(k)
238
- if (this.tests[p].test(c)) {
239
- this.shiftR(p)
240
- this.buffer[p] = c
241
- this.writeBuffer()
242
- var next = this.seekNext(p)
243
- this.caret(next)
244
- }
245
- }
246
- return false
247
- }
248
- }
249
-
250
- Inputmask.prototype.pasteEvent = function() {
251
- var that = this
252
-
253
- setTimeout(function() {
254
- that.caret(that.checkVal(true))
255
- }, 0)
256
- }
257
-
258
- Inputmask.prototype.clearBuffer = function(start, end) {
259
- var len = this.mask.length
260
-
261
- for (var i = start; i < end && i < len; i++) {
262
- if (this.tests[i])
263
- this.buffer[i] = this.options.placeholder
264
- }
265
- }
266
-
267
- Inputmask.prototype.writeBuffer = function() {
268
- return this.$element.val(this.buffer.join('')).val()
269
- }
270
-
271
- Inputmask.prototype.checkVal = function(allow) {
272
- var len = this.mask.length
273
- //try to place characters where they belong
274
- var test = this.$element.val()
275
- var lastMatch = -1
276
-
277
- for (var i = 0, pos = 0; i < len; i++) {
278
- if (this.tests[i]) {
279
- this.buffer[i] = this.options.placeholder
280
- while (pos++ < test.length) {
281
- var c = test.charAt(pos - 1)
282
- if (this.tests[i].test(c)) {
283
- this.buffer[i] = c
284
- lastMatch = i
285
- break
286
- }
287
- }
288
- if (pos > test.length)
289
- break
290
- } else if (this.buffer[i] == test.charAt(pos) && i != this.partialPosition) {
291
- pos++
292
- lastMatch = i
293
- }
294
- }
295
- if (!allow && lastMatch + 1 < this.partialPosition) {
296
- this.$element.val("")
297
- this.clearBuffer(0, len)
298
- } else if (allow || lastMatch + 1 >= this.partialPosition) {
299
- this.writeBuffer()
300
- if (!allow) this.$element.val(this.$element.val().substring(0, lastMatch + 1))
301
- }
302
- return (this.partialPosition ? i : this.firstNonMaskPos)
303
- }
304
-
305
-
306
- // INPUTMASK PLUGIN DEFINITION
307
- // ===========================
308
-
309
- var old = $.fn.inputmask
310
-
311
- $.fn.inputmask = function (options) {
312
- return this.each(function () {
313
- var $this = $(this)
314
- var data = $this.data('bs.inputmask')
315
-
316
- if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))
317
- })
318
- }
319
-
320
- $.fn.inputmask.Constructor = Inputmask
321
-
322
-
323
- // INPUTMASK NO CONFLICT
324
- // ====================
325
-
326
- $.fn.inputmask.noConflict = function () {
327
- $.fn.inputmask = old
328
- return this
329
- }
330
-
331
-
332
- // INPUTMASK DATA-API
333
- // ==================
334
-
335
- $(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
336
- var $this = $(this)
337
- if ($this.data('bs.inputmask')) return
338
- $this.inputmask($this.data())
339
- })
340
-
341
- }(window.jQuery);