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
@@ -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);