active_frontend 13.3.0 → 14.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.fasterer.yml +19 -0
  4. data/.reek +27 -0
  5. data/.rubocop.yml +38 -0
  6. data/.scss-lint.yml +27 -0
  7. data/Rakefile +1 -1
  8. data/active_frontend.gemspec +21 -18
  9. data/app/.DS_Store +0 -0
  10. data/app/assets/.DS_Store +0 -0
  11. data/app/assets/fonts/.DS_Store +0 -0
  12. data/app/assets/fonts/dripicons/.DS_Store +0 -0
  13. data/app/assets/fonts/dripicons/dripicons.woff +0 -0
  14. data/app/assets/fonts/fakt-pro/.DS_Store +0 -0
  15. data/app/assets/fonts/fakt-pro/fakt-pro-bold.woff +0 -0
  16. data/app/assets/fonts/fakt-pro/fakt-pro-normal.woff +0 -0
  17. data/app/assets/fonts/fakt-pro/fakt-pro-semibold.woff +0 -0
  18. data/app/assets/fonts/fakt-pro/fakt-pro-semilight.woff +0 -0
  19. data/app/assets/fonts/fakt-soft-pro/.DS_Store +0 -0
  20. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-bold.woff +0 -0
  21. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-normal.woff +0 -0
  22. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-semibold.woff +0 -0
  23. data/app/assets/fonts/fakt-soft-pro/fakt-soft-pro-semilight.woff +0 -0
  24. data/app/assets/images/.DS_Store +0 -0
  25. data/app/assets/images/.keep +0 -0
  26. data/app/assets/images/placeholders/.DS_Store +0 -0
  27. data/app/assets/images/placeholders/camera-large.png +0 -0
  28. data/app/assets/images/placeholders/camera-small.png +0 -0
  29. data/app/assets/images/placeholders/camera.png +0 -0
  30. data/app/assets/images/placeholders/document-large.png +0 -0
  31. data/app/assets/images/placeholders/document-small.png +0 -0
  32. data/app/assets/images/placeholders/document.png +0 -0
  33. data/app/assets/images/placeholders/photo-large.png +0 -0
  34. data/app/assets/images/placeholders/{picture-small.png → photo-small.png} +0 -0
  35. data/app/assets/images/placeholders/photo.png +0 -0
  36. data/app/assets/images/placeholders/store-large.png +0 -0
  37. data/app/assets/images/placeholders/store-small.png +0 -0
  38. data/app/assets/images/placeholders/store.png +0 -0
  39. data/app/assets/images/placeholders/user-large.png +0 -0
  40. data/app/assets/images/placeholders/user-small.png +0 -0
  41. data/app/assets/images/placeholders/user.png +0 -0
  42. data/app/helpers/active_frontend_helper.rb +22 -37
  43. data/lib/.DS_Store +0 -0
  44. data/lib/active_frontend.rb +3 -4
  45. data/lib/active_frontend/.DS_Store +0 -0
  46. data/lib/active_frontend/version.rb +1 -1
  47. data/lib/generators/active_frontend/install_generator.rb +3 -3
  48. data/lib/generators/active_frontend/templates/install.js +35 -30
  49. data/lib/generators/active_frontend/templates/install.scss +55 -58
  50. data/vendor/.DS_Store +0 -0
  51. data/vendor/assets/.DS_Store +0 -0
  52. data/vendor/assets/javascripts/.DS_Store +0 -0
  53. data/vendor/assets/javascripts/active_frontend.js +35 -30
  54. data/vendor/assets/javascripts/base/_affix.js +170 -0
  55. data/vendor/assets/javascripts/base/_alert.js +80 -0
  56. data/vendor/assets/javascripts/base/_animation.js +106 -0
  57. data/vendor/assets/javascripts/base/_button.js +123 -0
  58. data/vendor/assets/javascripts/base/_carousel.js +237 -0
  59. data/vendor/assets/javascripts/base/_collapse.js +200 -0
  60. data/vendor/assets/javascripts/base/_colorpicker.js +147 -0
  61. data/vendor/assets/javascripts/base/_datepicker.js +1411 -0
  62. data/vendor/assets/javascripts/base/_dropdown.js +154 -0
  63. data/vendor/assets/javascripts/base/_filepicker.js +235 -0
  64. data/vendor/assets/javascripts/base/_hoverdown.js +116 -0
  65. data/vendor/assets/javascripts/base/_layout.js +126 -0
  66. data/vendor/assets/javascripts/base/_list.js +103 -0
  67. data/vendor/assets/javascripts/{_modal.js → base/_modal.js} +170 -167
  68. data/vendor/assets/javascripts/base/_popover.js +101 -0
  69. data/vendor/assets/javascripts/base/_scrollspy.js +161 -0
  70. data/vendor/assets/javascripts/base/_switch.js +160 -0
  71. data/vendor/assets/javascripts/base/_tab.js +139 -0
  72. data/vendor/assets/javascripts/base/_table.js +224 -0
  73. data/vendor/assets/javascripts/base/_timeago.js +270 -0
  74. data/vendor/assets/javascripts/base/_timepicker.js +541 -0
  75. data/vendor/assets/javascripts/base/_tooltip.js +525 -0
  76. data/vendor/assets/javascripts/base/_tour.js +268 -0
  77. data/vendor/assets/javascripts/base/_transition.js +52 -0
  78. data/vendor/assets/javascripts/base/_typeahead.js +362 -0
  79. data/vendor/assets/javascripts/extensions/_calendar.js +4709 -0
  80. data/vendor/assets/javascripts/extensions/_chart.js +9371 -0
  81. data/vendor/assets/javascripts/extensions/_map.js +2153 -0
  82. data/vendor/assets/stylesheets/.DS_Store +0 -0
  83. data/vendor/assets/stylesheets/{_mixin.scss → _utility.scss} +96 -10
  84. data/vendor/assets/stylesheets/_variable.scss +201 -19
  85. data/vendor/assets/stylesheets/active_frontend.scss +55 -58
  86. data/vendor/assets/stylesheets/blocks/_anchor.scss +15 -0
  87. data/vendor/assets/stylesheets/blocks/_button.scss +278 -0
  88. data/vendor/assets/stylesheets/blocks/_code.scss +144 -0
  89. data/vendor/assets/stylesheets/blocks/_common.scss +127 -0
  90. data/vendor/assets/stylesheets/blocks/_form.scss +508 -0
  91. data/vendor/assets/stylesheets/blocks/_icon.scss +359 -0
  92. data/vendor/assets/stylesheets/blocks/_list.scss +76 -0
  93. data/vendor/assets/stylesheets/blocks/_multimedia.scss +62 -0
  94. data/vendor/assets/stylesheets/blocks/_reset.scss +179 -0
  95. data/vendor/assets/stylesheets/blocks/_table.scss +211 -0
  96. data/vendor/assets/stylesheets/blocks/_typography.scss +204 -0
  97. data/vendor/assets/stylesheets/components/_ad.scss +78 -0
  98. data/vendor/assets/stylesheets/components/_affix.scss +14 -0
  99. data/vendor/assets/stylesheets/components/_alert.scss +50 -0
  100. data/vendor/assets/stylesheets/components/_animation.scss +1670 -0
  101. data/vendor/assets/stylesheets/components/_breadcrumb.scss +17 -0
  102. data/vendor/assets/stylesheets/components/_calendar.scss +213 -0
  103. data/vendor/assets/stylesheets/components/_card.scss +30 -0
  104. data/vendor/assets/stylesheets/components/_carousel.scss +135 -0
  105. data/vendor/assets/stylesheets/components/_chart.scss +10 -0
  106. data/vendor/assets/stylesheets/components/_collapse.scss +17 -0
  107. data/vendor/assets/stylesheets/components/_colorpicker.scss +38 -0
  108. data/vendor/assets/stylesheets/components/_datepicker.scss +80 -0
  109. data/vendor/assets/stylesheets/components/_dropmenu.scss +151 -0
  110. data/vendor/assets/stylesheets/components/_footer.scss +11 -0
  111. data/vendor/assets/stylesheets/components/_grid.scss +144 -0
  112. data/vendor/assets/stylesheets/components/_header.scss +99 -0
  113. data/vendor/assets/stylesheets/components/_label_and_badge.scss +57 -0
  114. data/vendor/assets/stylesheets/components/_layout.scss +63 -0
  115. data/vendor/assets/stylesheets/components/_map.scss +14 -0
  116. data/vendor/assets/stylesheets/components/_milestone.scss +49 -0
  117. data/vendor/assets/stylesheets/components/_missive.scss +40 -0
  118. data/vendor/assets/stylesheets/components/_modal.scss +126 -0
  119. data/vendor/assets/stylesheets/components/_nav_and_tab.scss +202 -0
  120. data/vendor/assets/stylesheets/components/_navbar.scss +66 -0
  121. data/vendor/assets/stylesheets/components/_pagination.scss +79 -0
  122. data/vendor/assets/stylesheets/components/_placeholder.scss +23 -0
  123. data/vendor/assets/stylesheets/components/_popover.scss +167 -0
  124. data/vendor/assets/stylesheets/components/_progress.scss +62 -0
  125. data/vendor/assets/stylesheets/components/_sidebar.scss +74 -0
  126. data/vendor/assets/stylesheets/components/_spinner.scss +83 -0
  127. data/vendor/assets/stylesheets/components/_switch.scss +150 -0
  128. data/vendor/assets/stylesheets/components/_timepicker.scss +30 -0
  129. data/vendor/assets/stylesheets/components/_tooltip.scss +93 -0
  130. data/vendor/assets/stylesheets/components/_transition.scss +12 -0
  131. data/vendor/assets/stylesheets/components/_typeahead.scss +18 -0
  132. metadata +150 -94
  133. data/app/assets/fonts/gotham/gotham-bold.woff +0 -0
  134. data/app/assets/fonts/gotham/gotham-book.woff +0 -0
  135. data/app/assets/fonts/gotham/gotham-light.woff +0 -0
  136. data/app/assets/fonts/gotham/gotham-medium.woff +0 -0
  137. data/app/assets/fonts/gotham/gotham-rounded-bold.woff +0 -0
  138. data/app/assets/fonts/gotham/gotham-rounded-book.woff +0 -0
  139. data/app/assets/fonts/gotham/gotham-rounded-light.woff +0 -0
  140. data/app/assets/fonts/gotham/gotham-rounded-medium.woff +0 -0
  141. data/app/assets/images/placeholders/archive-large.png +0 -0
  142. data/app/assets/images/placeholders/archive-small.png +0 -0
  143. data/app/assets/images/placeholders/archive.png +0 -0
  144. data/app/assets/images/placeholders/picture-large.png +0 -0
  145. data/app/assets/images/placeholders/picture.png +0 -0
  146. data/vendor/assets/javascripts/_affix.js +0 -153
  147. data/vendor/assets/javascripts/_alert.js +0 -85
  148. data/vendor/assets/javascripts/_animation.js +0 -103
  149. data/vendor/assets/javascripts/_button.js +0 -107
  150. data/vendor/assets/javascripts/_carousel.js +0 -228
  151. data/vendor/assets/javascripts/_chart.js +0 -3742
  152. data/vendor/assets/javascripts/_collapse.js +0 -202
  153. data/vendor/assets/javascripts/_color_picker.js +0 -108
  154. data/vendor/assets/javascripts/_date_picker.js +0 -1650
  155. data/vendor/assets/javascripts/_dropdown.js +0 -156
  156. data/vendor/assets/javascripts/_file_input.js +0 -71
  157. data/vendor/assets/javascripts/_hoverdown.js +0 -109
  158. data/vendor/assets/javascripts/_inputmask.js +0 -341
  159. data/vendor/assets/javascripts/_loader.js +0 -361
  160. data/vendor/assets/javascripts/_map.js +0 -2401
  161. data/vendor/assets/javascripts/_popover.js +0 -99
  162. data/vendor/assets/javascripts/_scrollspy.js +0 -163
  163. data/vendor/assets/javascripts/_slider.js +0 -1572
  164. data/vendor/assets/javascripts/_sort.js +0 -1432
  165. data/vendor/assets/javascripts/_swoggle.js +0 -415
  166. data/vendor/assets/javascripts/_tab.js +0 -146
  167. data/vendor/assets/javascripts/_tablespy.js +0 -1883
  168. data/vendor/assets/javascripts/_time_ago.js +0 -206
  169. data/vendor/assets/javascripts/_time_picker.js +0 -1088
  170. data/vendor/assets/javascripts/_tooltip.js +0 -504
  171. data/vendor/assets/javascripts/_transition.js +0 -50
  172. data/vendor/assets/javascripts/_typeahead.js +0 -366
  173. data/vendor/assets/stylesheets/_ad.scss +0 -63
  174. data/vendor/assets/stylesheets/_affix.scss +0 -14
  175. data/vendor/assets/stylesheets/_alert.scss +0 -114
  176. data/vendor/assets/stylesheets/_animation.scss +0 -1370
  177. data/vendor/assets/stylesheets/_breadcrumb.scss +0 -100
  178. data/vendor/assets/stylesheets/_button.scss +0 -386
  179. data/vendor/assets/stylesheets/_canvas.scss +0 -182
  180. data/vendor/assets/stylesheets/_carousel.scss +0 -158
  181. data/vendor/assets/stylesheets/_chart.scss +0 -15
  182. data/vendor/assets/stylesheets/_code.scss +0 -150
  183. data/vendor/assets/stylesheets/_collapse.scss +0 -14
  184. data/vendor/assets/stylesheets/_color.scss +0 -55
  185. data/vendor/assets/stylesheets/_colorpicker.scss +0 -63
  186. data/vendor/assets/stylesheets/_datepicker.scss +0 -122
  187. data/vendor/assets/stylesheets/_dropdown.scss +0 -248
  188. data/vendor/assets/stylesheets/_footer.scss +0 -71
  189. data/vendor/assets/stylesheets/_form.scss +0 -661
  190. data/vendor/assets/stylesheets/_grid.scss +0 -184
  191. data/vendor/assets/stylesheets/_header.scss +0 -156
  192. data/vendor/assets/stylesheets/_icon.scss +0 -362
  193. data/vendor/assets/stylesheets/_image.scss +0 -33
  194. data/vendor/assets/stylesheets/_label_and_badge.scss +0 -104
  195. data/vendor/assets/stylesheets/_link.scss +0 -55
  196. data/vendor/assets/stylesheets/_list.scss +0 -122
  197. data/vendor/assets/stylesheets/_loader.scss +0 -71
  198. data/vendor/assets/stylesheets/_map.scss +0 -44
  199. data/vendor/assets/stylesheets/_missive.scss +0 -74
  200. data/vendor/assets/stylesheets/_modal.scss +0 -204
  201. data/vendor/assets/stylesheets/_nav_and_tab.scss +0 -230
  202. data/vendor/assets/stylesheets/_navbar.scss +0 -73
  203. data/vendor/assets/stylesheets/_pagination.scss +0 -79
  204. data/vendor/assets/stylesheets/_panel.scss +0 -80
  205. data/vendor/assets/stylesheets/_placeholder.scss +0 -63
  206. data/vendor/assets/stylesheets/_popover.scss +0 -128
  207. data/vendor/assets/stylesheets/_progress.scss +0 -86
  208. data/vendor/assets/stylesheets/_reset.scss +0 -140
  209. data/vendor/assets/stylesheets/_sidebar.scss +0 -148
  210. data/vendor/assets/stylesheets/_slider.scss +0 -151
  211. data/vendor/assets/stylesheets/_spinner.scss +0 -572
  212. data/vendor/assets/stylesheets/_subheader.scss +0 -112
  213. data/vendor/assets/stylesheets/_swoggle.scss +0 -120
  214. data/vendor/assets/stylesheets/_table.scss +0 -210
  215. data/vendor/assets/stylesheets/_timepicker.scss +0 -77
  216. data/vendor/assets/stylesheets/_toolbar.scss +0 -130
  217. data/vendor/assets/stylesheets/_tooltip.scss +0 -105
  218. data/vendor/assets/stylesheets/_transition.scss +0 -11
  219. data/vendor/assets/stylesheets/_trunk.scss +0 -147
  220. data/vendor/assets/stylesheets/_typeahead.scss +0 -18
  221. data/vendor/assets/stylesheets/_typography.scss +0 -233
@@ -0,0 +1,154 @@
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 = '1.0.0';
14
+
15
+ Dropdown.prototype.constructor = Dropdown;
16
+
17
+ Dropdown.prototype.toggle = function (e) {
18
+ var $this = $(this);
19
+
20
+ if ($this.is('.disabled, :disabled')) return;
21
+
22
+ var $parent = getParent($this);
23
+ var isActive = $parent.hasClass('open');
24
+
25
+ clearMenus();
26
+
27
+ if (!isActive) {
28
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
29
+ $(document.createElement('div'))
30
+ .addClass('dropdown-backdrop')
31
+ .insertAfter($(this))
32
+ .on('click', clearMenus);
33
+ }
34
+
35
+ var relatedTarget = { relatedTarget: this };
36
+
37
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));
38
+
39
+ if (e.isDefaultPrevented()) return;
40
+
41
+ $this.trigger('focus')
42
+ .attr('aria-expanded', 'true');
43
+ $parent.toggleClass('open')
44
+ .trigger($.Event('shown.bs.dropdown', relatedTarget));
45
+ }
46
+
47
+ return false;
48
+ };
49
+
50
+ Dropdown.prototype.keydown = function (e) {
51
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;
52
+
53
+ var $this = $(this);
54
+
55
+ e.preventDefault();
56
+ e.stopPropagation();
57
+
58
+ if ($this.is('.disabled, :disabled')) return;
59
+
60
+ var $parent = getParent($this);
61
+ var isActive = $parent.hasClass('open');
62
+
63
+ if (!isActive && e.which != 27 || isActive && e.which === 27) {
64
+ if (e.which === 27) $parent.find(toggle).trigger('focus');
65
+ return $this.trigger('click');
66
+ }
67
+
68
+ var desc = ' li:not(.disabled):visible a';
69
+ var $items = $parent.find('.dropdown-menu' + desc);
70
+
71
+ if (!$items.length) return;
72
+
73
+ var index = $items.index(e.target);
74
+
75
+ if (e.which === 38 && index > 0) index--;
76
+ if (e.which === 40 && index < $items.length - 1) index++;
77
+ if (!~index) index = 0;
78
+
79
+ $items.eq(index).trigger('focus');
80
+ };
81
+
82
+ function getParent($this) {
83
+ var selector = $this.attr('data-target');
84
+
85
+ if (!selector) {
86
+ selector = $this.attr('href');
87
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '');
88
+ }
89
+
90
+ var $parent = selector && $(selector);
91
+
92
+ return $parent && $parent.length ? $parent : $this.parent();
93
+ }
94
+
95
+ function clearMenus(e) {
96
+ if (e && e.which === 3) return;
97
+
98
+ $(backdrop).remove();
99
+ $(toggle).each(function () {
100
+ var $this = $(this);
101
+ var $parent = getParent($this);
102
+ var relatedTarget = { relatedTarget: this };
103
+
104
+ if (!$parent.hasClass('open')) return;
105
+ if (e && e.type === 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return;
106
+
107
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));
108
+
109
+ if (e.isDefaultPrevented()) return;
110
+
111
+ $this.attr('aria-expanded', 'false');
112
+ $parent
113
+ .removeClass('open')
114
+ .trigger($.Event('hidden.bs.dropdown', relatedTarget));
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]();
128
+ });
129
+ }
130
+
131
+ var old = $.fn.dropdown;
132
+
133
+ $.fn.dropdown = Plugin;
134
+ $.fn.dropdown.Constructor = Dropdown;
135
+
136
+ // DROPDOWN NO CONFLICT
137
+ // ====================
138
+
139
+ $.fn.dropdown.noConflict = function () {
140
+ $.fn.dropdown = old;
141
+ return this;
142
+ };
143
+
144
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
145
+ // ===================================
146
+
147
+ $(document)
148
+ .on('click.bs.dropdown.data-api', clearMenus)
149
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation(); })
150
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
151
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
152
+ .on('keydown.bs.dropdown.data-api', '.dropmenu', Dropdown.prototype.keydown);
153
+
154
+ }(jQuery);
@@ -0,0 +1,235 @@
1
+ +function ($) {
2
+ 'use strict';
3
+
4
+ // FILEPICKER PUBLIC CLASS DEFINITION
5
+ // ==================================
6
+
7
+ var nextId = 0;
8
+ var Filepicker = function (element, options) {
9
+ this.$element = $(element);
10
+ this.settings = {
11
+ badgeClass: this.$element.data('badge-class'),
12
+ buttonBefore: this.$element.data('button-before'),
13
+ buttonClass: this.$element.data('button-class'),
14
+ buttonText: this.$element.data('button-text'),
15
+ disabled: this.$element.data('disabled'),
16
+ iconClass: this.$element.data('icon-class'),
17
+ inputClass: this.$element.data('input-class'),
18
+ inputPlaceholder: this.$element.data('input-placeholder'),
19
+ showBadge: this.$element.data('show-badge'),
20
+ showIcon: this.$element.data('show-icon'),
21
+ showInput: this.$element.data('show-input')
22
+ };
23
+ this.options = $.extend({}, Filepicker.DEFAULTS, this.settings, options);
24
+
25
+ this.$elementFilepicker = [];
26
+ this.init();
27
+ };
28
+
29
+ Filepicker.VERSION = '1.0.0';
30
+ Filepicker.DEFAULTS = {
31
+ badgeClass: 'badge badge-color-black',
32
+ buttonBefore: false,
33
+ buttonClass: 'btn',
34
+ buttonText: 'Browse',
35
+ disabled: false,
36
+ iconClass: 'icon-folder-open',
37
+ inputClass: 'form-input',
38
+ inputPlaceholder: 'Select a file...',
39
+ showBadge: true,
40
+ showIcon: true,
41
+ showInput: true
42
+ };
43
+
44
+ Filepicker.prototype.constructor = Filepicker;
45
+
46
+ Filepicker.prototype.init = function () {
47
+ var _self = this;
48
+ var id = this.setId();
49
+ var btn = this.setButton(id);
50
+ var html = this.setHtml(btn);
51
+ var container = this.setContainer(html);
52
+
53
+ this.$elementFilepicker = $(container);
54
+ this.$element
55
+ .attr('tabindex', '-1')
56
+ .css({
57
+ 'position' : 'absolute',
58
+ 'clip' : 'rect(0 0 0 0)'
59
+ })
60
+ .after(this.$elementFilepicker);
61
+
62
+ if (this.options.disabled) this.$element.attr('disabled', 'true');
63
+
64
+ this.$element.change(function () {
65
+ var files = _self.pushNameFiles();
66
+
67
+ if (_self.options.showInput === false && _self.options.showBadge) {
68
+ if (_self.$elementFilepicker.find('.badge').length === 0) {
69
+ _self.badgeAppend(files);
70
+ } else if (files.length === 0) {
71
+ _self.badgeRemove();
72
+ } else {
73
+ _self.$elementFilepicker
74
+ .find('.badge')
75
+ .html(files.length);
76
+ }
77
+ } else {
78
+ _self.badgeRemove();
79
+ }
80
+ });
81
+
82
+ if (window.navigator.userAgent.search(/firefox/i) > -1) {
83
+ this.$elementFilepicker.find('label').click(function () {
84
+ _self.$element.click();
85
+ return false;
86
+ });
87
+ }
88
+ };
89
+
90
+ Filepicker.prototype.badgeAppend = function (files) {
91
+ var badge = ' <span class="' +
92
+ this.options.badgeClass +
93
+ '">' +
94
+ files.length +
95
+ '</span>';
96
+
97
+ this.$elementFilepicker
98
+ .find('label')
99
+ .append(badge);
100
+ };
101
+
102
+ Filepicker.prototype.badgeRemove = function () {
103
+ this.$elementFilepicker
104
+ .find('.badge')
105
+ .remove();
106
+ };
107
+
108
+ Filepicker.prototype.setButton = function (id) {
109
+ return '<label for="' + id +
110
+ '" class="' +
111
+ this.options.buttonClass +
112
+ '" ' +
113
+ (this.options.disabled ? 'disabled="true"' : '') + '>' +
114
+ this.htmlIcon() +
115
+ '<span class="buttonText">' + this.options.buttonText + '</span>' +
116
+ '</label>';
117
+ };
118
+
119
+ Filepicker.prototype.setId = function () {
120
+ var id = this.$element.attr('id');
121
+
122
+ if (id === '' || !id) {
123
+ id = 'filepicker-' + nextId;
124
+ this.$element.attr({ 'id': id });
125
+ nextId++;
126
+ }
127
+
128
+ return id;
129
+ };
130
+
131
+ Filepicker.prototype.setHtml = function (btn) {
132
+ return this.options.buttonBefore ?
133
+ btn + this.htmlInput() :
134
+ this.htmlInput() + btn;
135
+ };
136
+
137
+ Filepicker.prototype.setContainer = function (html) {
138
+ return '<div class="filepicker ' +
139
+ this.options.inputClass +
140
+ (this.options.showInput === true ? ' with-form-addons' : '') +
141
+ '">' +
142
+ html +
143
+ '</div>';
144
+ };
145
+
146
+ Filepicker.prototype.clearVal = function () {
147
+ this.$elementFilepicker
148
+ .find(':text')
149
+ .val('');
150
+ };
151
+
152
+ Filepicker.prototype.htmlIcon = function () {
153
+ if (this.options.showIcon) {
154
+ return '<span class="icon-span-filepicker ' +
155
+ this.options.iconClass +
156
+ '"></span> ';
157
+ } else {
158
+ return '';
159
+ }
160
+ };
161
+
162
+ Filepicker.prototype.htmlInput = function () {
163
+ if (this.options.showInput) {
164
+ return '<input type="text" placeholder="' +
165
+ this.options.inputPlaceholder +
166
+ '" disabled> ';
167
+ } else {
168
+ return '';
169
+ }
170
+ };
171
+
172
+ Filepicker.prototype.pushNameFiles = function () {
173
+ var content = '', files = [];
174
+ if (this.$element[0].files === undefined) {
175
+ files[0] = {
176
+ name: this.$element[0] && this.$element[0].value
177
+ };
178
+ } else {
179
+ files = this.$element[0].files;
180
+ }
181
+
182
+ for (var i = 0; i < files.length; i++) {
183
+ content += files[i].name.split("\\").pop() + ', ';
184
+ }
185
+
186
+ if (content !== '') {
187
+ this.$elementFilepicker
188
+ .find(':text')
189
+ .val(content.replace(/\, $/g, ''));
190
+ } else {
191
+ this.clearVal();;
192
+ }
193
+
194
+ return files;
195
+ };
196
+
197
+ // FILEPICKER PLUGIN DEFINITION
198
+ // ============================
199
+
200
+ function Plugin(option) {
201
+ return this.each(function () {
202
+ var $this = $(this);
203
+ var data = $this.data('bs.filepicker');
204
+ var options = typeof option === 'object' && option;
205
+
206
+ if (!data) $this.data('bs.filepicker', (data = new Filepicker(this, options)));
207
+ if (typeof option === 'string') data[option]();
208
+ });
209
+ }
210
+
211
+ var old = $.fn.filepicker;
212
+
213
+ $.fn.filepicker = Plugin;
214
+ $.fn.filepicker.Constructor = Filepicker;
215
+
216
+ // FILEPICKER NO CONFLICT
217
+ // =====================
218
+
219
+ $.fn.filepicker.noConflict = function () {
220
+ $.fn.filepicker = old;
221
+ return this;
222
+ };
223
+
224
+ // FILEPICKER DATA-API
225
+ // ==================
226
+
227
+ $(document).on('ready.bs.filepicker.data-api', function () {
228
+ $('[data-toggle="filepicker"]').each(function () {
229
+ var $this = $(this);
230
+ if ($this.data('filepicker')) return;
231
+ Plugin.call($this, $this.data());
232
+ });
233
+ });
234
+
235
+ }(jQuery);
@@ -0,0 +1,116 @@
1
+ +function ($) {
2
+ 'use strict';
3
+
4
+ // HOVERDOWN CLASS DEFINITION
5
+ // ==========================
6
+
7
+ var Hoverdown = function (element, options) {
8
+ this.$element = $(element);
9
+ this.settings = {
10
+ delay: this.$element.data('delay'),
11
+ timeout: this.$element.data('timeout')
12
+ };
13
+ this.options = $.extend({}, Hoverdown.DEFAULTS, this.settings, options);
14
+
15
+ this.$parent = this.$element.parent();
16
+ this.$dropmenu = this.$parent.find('.dropmenu').first();
17
+ this.$timeout = null;
18
+
19
+ this.init();
20
+ };
21
+
22
+ if (!$.fn.dropdown) throw new Error('Hoverdown requires dropdown.js');
23
+
24
+ Hoverdown.VERSION = '1.0.0';
25
+ Hoverdown.DEFAULTS = {
26
+ delay: 500,
27
+ timeout: 500
28
+ };
29
+
30
+ Hoverdown.prototype.constructor = Hoverdown;
31
+
32
+ Hoverdown.prototype.init = function () {
33
+ if ('ontouchstart' in document) return this;
34
+
35
+ var _self = this;
36
+
37
+ window.clearTimeout(this.$timeout);
38
+
39
+ this.$parent.hover(function () {
40
+ _self.openMenu();
41
+ }, function () {
42
+ _self.hoverOutTimeout();
43
+
44
+ _self.$dropmenu.hover(function () {
45
+ window.clearTimeout(_self.$timeout);
46
+ }, function () {
47
+ _self.hoverOutDelay();
48
+ });
49
+ });
50
+ };
51
+
52
+ Hoverdown.prototype.hoverOutTimeout = function () {
53
+ var _self = this;
54
+
55
+ this.$timeout = window.setTimeout(function () {
56
+ _self.closeMenu();
57
+ }, this.options.timeout);
58
+ };
59
+
60
+ Hoverdown.prototype.hoverOutDelay = function () {
61
+ var _self = this;
62
+
63
+ window.setTimeout(function () {
64
+ _self.closeMenu();
65
+ }, this.options.delay);
66
+ };
67
+
68
+ Hoverdown.prototype.openMenu = function () {
69
+ this.$parent.addClass('open');
70
+ this.$dropmenu.trigger('show.bs.dropdown');
71
+ };
72
+
73
+ Hoverdown.prototype.closeMenu = function () {
74
+ this.$parent.removeClass('open');
75
+ this.$dropmenu.trigger('hide.bs.dropdown');
76
+ };
77
+
78
+ // HOVERDOWN PLUGIN DEFINITION
79
+ // ===========================
80
+
81
+ function Plugin(option) {
82
+ return this.each(function () {
83
+ var $this = $(this);
84
+ var data = $this.data('bs.hoverdown');
85
+ var options = typeof option === 'object' && option;
86
+
87
+ if (!data) $this.data('bs.hoverdown', (data = new Hoverdown(this, options)));
88
+ if (typeof option === 'string') data[option]();
89
+ });
90
+ }
91
+
92
+ var old = $.fn.hoverdown;
93
+
94
+ $.fn.hoverdown = Plugin;
95
+ $.fn.hoverdown.Constructor = Hoverdown;
96
+
97
+ // HOVERDOWN NO CONFLICT
98
+ // =====================
99
+
100
+ $.fn.hoverdown.noConflict = function () {
101
+ $.fn.hoverdown = old;
102
+ return this;
103
+ };
104
+
105
+ // HOVERDOWN DATA-API
106
+ // ==================
107
+
108
+ $(document).on('ready.bs.hoverdown.data-api', function () {
109
+ $('[data-hover="dropdown"]').each(function () {
110
+ var $this = $(this);
111
+ if ($this.data('hoverdown')) return;
112
+ Plugin.call($this, $this.data());
113
+ });
114
+ });
115
+
116
+ }(jQuery);