fomantic-ui 2.9.1-beta.16 → 2.9.1-beta.18

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 (252) hide show
  1. package/.eslintrc.js +109 -0
  2. package/.github/workflows/ci.yml +13 -3
  3. package/dist/components/accordion.css +1 -1
  4. package/dist/components/accordion.js +571 -598
  5. package/dist/components/accordion.min.css +1 -1
  6. package/dist/components/accordion.min.js +1 -1
  7. package/dist/components/ad.css +1 -1
  8. package/dist/components/ad.min.css +1 -1
  9. package/dist/components/api.js +1164 -1186
  10. package/dist/components/api.min.js +1 -1
  11. package/dist/components/breadcrumb.css +1 -1
  12. package/dist/components/breadcrumb.min.css +1 -1
  13. package/dist/components/button.css +1 -1
  14. package/dist/components/button.min.css +1 -1
  15. package/dist/components/calendar.css +1 -1
  16. package/dist/components/calendar.js +1897 -1818
  17. package/dist/components/calendar.min.css +1 -1
  18. package/dist/components/calendar.min.js +1 -1
  19. package/dist/components/card.css +1 -1
  20. package/dist/components/card.min.css +1 -1
  21. package/dist/components/checkbox.css +1 -1
  22. package/dist/components/checkbox.js +844 -841
  23. package/dist/components/checkbox.min.css +1 -1
  24. package/dist/components/checkbox.min.js +1 -1
  25. package/dist/components/comment.css +1 -1
  26. package/dist/components/comment.min.css +1 -1
  27. package/dist/components/container.css +3 -1
  28. package/dist/components/container.min.css +2 -2
  29. package/dist/components/dimmer.css +1 -1
  30. package/dist/components/dimmer.js +710 -737
  31. package/dist/components/dimmer.min.css +1 -1
  32. package/dist/components/dimmer.min.js +1 -1
  33. package/dist/components/divider.css +1 -1
  34. package/dist/components/divider.min.css +1 -1
  35. package/dist/components/dropdown.css +11 -8
  36. package/dist/components/dropdown.js +4163 -4234
  37. package/dist/components/dropdown.min.css +2 -2
  38. package/dist/components/dropdown.min.js +2 -2
  39. package/dist/components/embed.css +1 -1
  40. package/dist/components/embed.js +653 -675
  41. package/dist/components/embed.min.css +1 -1
  42. package/dist/components/embed.min.js +1 -1
  43. package/dist/components/feed.css +1 -1
  44. package/dist/components/feed.min.css +1 -1
  45. package/dist/components/flag.css +1 -1
  46. package/dist/components/flag.min.css +1 -1
  47. package/dist/components/flyout.css +6 -3
  48. package/dist/components/flyout.js +1466 -1467
  49. package/dist/components/flyout.min.css +2 -2
  50. package/dist/components/flyout.min.js +1 -1
  51. package/dist/components/form.css +1 -1
  52. package/dist/components/form.js +1981 -2004
  53. package/dist/components/form.min.css +1 -1
  54. package/dist/components/form.min.js +1 -1
  55. package/dist/components/grid.css +1 -1
  56. package/dist/components/grid.min.css +1 -1
  57. package/dist/components/header.css +1 -1
  58. package/dist/components/header.min.css +1 -1
  59. package/dist/components/icon.css +1 -1
  60. package/dist/components/icon.min.css +1 -1
  61. package/dist/components/image.css +1 -1
  62. package/dist/components/image.min.css +1 -1
  63. package/dist/components/input.css +1 -1
  64. package/dist/components/input.min.css +1 -1
  65. package/dist/components/item.css +1 -1
  66. package/dist/components/item.min.css +1 -1
  67. package/dist/components/label.css +1 -1
  68. package/dist/components/label.min.css +1 -1
  69. package/dist/components/list.css +1 -1
  70. package/dist/components/list.min.css +1 -1
  71. package/dist/components/loader.css +1 -1
  72. package/dist/components/loader.min.css +1 -1
  73. package/dist/components/message.css +1 -1
  74. package/dist/components/message.min.css +1 -1
  75. package/dist/components/modal.css +7 -1
  76. package/dist/components/modal.js +1493 -1487
  77. package/dist/components/modal.min.css +2 -2
  78. package/dist/components/modal.min.js +1 -1
  79. package/dist/components/nag.css +1 -1
  80. package/dist/components/nag.js +520 -529
  81. package/dist/components/nag.min.css +1 -1
  82. package/dist/components/nag.min.js +1 -1
  83. package/dist/components/placeholder.css +1 -1
  84. package/dist/components/placeholder.min.css +1 -1
  85. package/dist/components/popup.css +1 -1
  86. package/dist/components/popup.js +1439 -1456
  87. package/dist/components/popup.min.css +1 -1
  88. package/dist/components/popup.min.js +1 -1
  89. package/dist/components/progress.css +1 -1
  90. package/dist/components/progress.js +971 -997
  91. package/dist/components/progress.min.css +1 -1
  92. package/dist/components/progress.min.js +1 -1
  93. package/dist/components/rail.css +1 -1
  94. package/dist/components/rail.min.css +1 -1
  95. package/dist/components/rating.css +1 -1
  96. package/dist/components/rating.js +508 -524
  97. package/dist/components/rating.min.css +1 -1
  98. package/dist/components/rating.min.js +1 -1
  99. package/dist/components/reset.css +1 -1
  100. package/dist/components/reset.min.css +1 -1
  101. package/dist/components/reveal.css +1 -1
  102. package/dist/components/reveal.min.css +1 -1
  103. package/dist/components/search.css +3 -1
  104. package/dist/components/search.js +1500 -1534
  105. package/dist/components/search.min.css +2 -2
  106. package/dist/components/search.min.js +1 -1
  107. package/dist/components/segment.css +3 -1
  108. package/dist/components/segment.min.css +2 -2
  109. package/dist/components/shape.css +1 -1
  110. package/dist/components/shape.js +794 -809
  111. package/dist/components/shape.min.css +1 -1
  112. package/dist/components/shape.min.js +1 -1
  113. package/dist/components/sidebar.css +3 -1
  114. package/dist/components/sidebar.js +1079 -1104
  115. package/dist/components/sidebar.min.css +2 -2
  116. package/dist/components/sidebar.min.js +1 -1
  117. package/dist/components/site.css +1 -1
  118. package/dist/components/site.js +457 -472
  119. package/dist/components/site.min.css +1 -1
  120. package/dist/components/site.min.js +1 -1
  121. package/dist/components/slider.js +1289 -1311
  122. package/dist/components/slider.min.js +1 -1
  123. package/dist/components/state.js +641 -657
  124. package/dist/components/state.min.js +1 -1
  125. package/dist/components/statistic.css +1 -1
  126. package/dist/components/statistic.min.css +1 -1
  127. package/dist/components/step.css +1 -1
  128. package/dist/components/step.min.css +1 -1
  129. package/dist/components/sticky.css +1 -1
  130. package/dist/components/sticky.js +859 -903
  131. package/dist/components/sticky.min.css +1 -1
  132. package/dist/components/sticky.min.js +1 -1
  133. package/dist/components/tab.css +1 -1
  134. package/dist/components/tab.js +923 -963
  135. package/dist/components/tab.min.css +1 -1
  136. package/dist/components/tab.min.js +1 -1
  137. package/dist/components/table.css +5 -1
  138. package/dist/components/table.min.css +2 -2
  139. package/dist/components/text.css +1 -1
  140. package/dist/components/text.min.css +1 -1
  141. package/dist/components/toast.css +1 -1
  142. package/dist/components/toast.js +889 -891
  143. package/dist/components/toast.min.css +1 -1
  144. package/dist/components/toast.min.js +1 -1
  145. package/dist/components/transition.css +1 -1
  146. package/dist/components/transition.js +1043 -1077
  147. package/dist/components/transition.min.css +1 -1
  148. package/dist/components/transition.min.js +1 -1
  149. package/dist/components/visibility.js +1222 -1244
  150. package/dist/components/visibility.min.js +1 -1
  151. package/dist/semantic.css +84 -60
  152. package/dist/semantic.js +29033 -29475
  153. package/dist/semantic.min.css +2 -2
  154. package/dist/semantic.min.js +2 -2
  155. package/examples/assets/show-examples.js +13 -13
  156. package/gulpfile.js +9 -10
  157. package/package.json +5 -2
  158. package/scripts/nightly-version.js +81 -75
  159. package/src/definitions/behaviors/api.js +1163 -1185
  160. package/src/definitions/behaviors/form.js +1980 -2003
  161. package/src/definitions/behaviors/state.js +647 -663
  162. package/src/definitions/behaviors/visibility.js +1221 -1243
  163. package/src/definitions/collections/table.less +2 -0
  164. package/src/definitions/elements/container.less +1 -0
  165. package/src/definitions/elements/segment.less +1 -0
  166. package/src/definitions/globals/site.js +456 -471
  167. package/src/definitions/modules/accordion.js +570 -597
  168. package/src/definitions/modules/calendar.js +1896 -1817
  169. package/src/definitions/modules/checkbox.js +849 -846
  170. package/src/definitions/modules/dimmer.js +709 -736
  171. package/src/definitions/modules/dropdown.js +4162 -4233
  172. package/src/definitions/modules/dropdown.less +5 -8
  173. package/src/definitions/modules/embed.js +652 -674
  174. package/src/definitions/modules/flyout.js +1465 -1466
  175. package/src/definitions/modules/flyout.less +15 -12
  176. package/src/definitions/modules/modal.js +1492 -1486
  177. package/src/definitions/modules/modal.less +3 -0
  178. package/src/definitions/modules/nag.js +519 -528
  179. package/src/definitions/modules/popup.js +1438 -1455
  180. package/src/definitions/modules/progress.js +970 -996
  181. package/src/definitions/modules/rating.js +507 -523
  182. package/src/definitions/modules/search.js +1499 -1533
  183. package/src/definitions/modules/search.less +1 -0
  184. package/src/definitions/modules/shape.js +801 -816
  185. package/src/definitions/modules/sidebar.js +1078 -1103
  186. package/src/definitions/modules/sidebar.less +1 -0
  187. package/src/definitions/modules/slider.js +1288 -1310
  188. package/src/definitions/modules/sticky.js +875 -919
  189. package/src/definitions/modules/tab.js +922 -962
  190. package/src/definitions/modules/toast.js +888 -890
  191. package/src/definitions/modules/transition.js +1048 -1082
  192. package/src/themes/default/elements/container.variables +0 -7
  193. package/src/themes/default/elements/segment.variables +0 -7
  194. package/src/themes/default/globals/site.variables +7 -0
  195. package/src/themes/default/globals/variation.variables +1 -0
  196. package/tasks/admin/components/create.js +274 -276
  197. package/tasks/admin/components/init.js +123 -130
  198. package/tasks/admin/components/update.js +149 -157
  199. package/tasks/admin/distributions/create.js +184 -187
  200. package/tasks/admin/distributions/init.js +123 -130
  201. package/tasks/admin/distributions/update.js +145 -152
  202. package/tasks/admin/publish.js +5 -7
  203. package/tasks/admin/register.js +36 -38
  204. package/tasks/admin/release.js +8 -10
  205. package/tasks/build/assets.js +42 -39
  206. package/tasks/build/css.js +225 -216
  207. package/tasks/build/javascript.js +118 -113
  208. package/tasks/build.js +10 -10
  209. package/tasks/check-install.js +14 -16
  210. package/tasks/clean.js +5 -5
  211. package/tasks/collections/admin.js +34 -36
  212. package/tasks/collections/build.js +18 -20
  213. package/tasks/collections/docs.js +9 -11
  214. package/tasks/collections/install.js +9 -11
  215. package/tasks/collections/rtl.js +9 -11
  216. package/tasks/collections/various.js +8 -10
  217. package/tasks/config/admin/github.js +17 -17
  218. package/tasks/config/admin/oauth.example.js +4 -4
  219. package/tasks/config/admin/release.js +98 -98
  220. package/tasks/config/admin/templates/component-package.js +9 -10
  221. package/tasks/config/admin/templates/css-package.js +18 -20
  222. package/tasks/config/admin/templates/less-package.js +11 -13
  223. package/tasks/config/defaults.js +116 -116
  224. package/tasks/config/docs.js +23 -23
  225. package/tasks/config/npm/gulpfile.js +8 -9
  226. package/tasks/config/project/config.js +127 -134
  227. package/tasks/config/project/install.js +715 -713
  228. package/tasks/config/project/release.js +32 -38
  229. package/tasks/config/tasks.js +163 -164
  230. package/tasks/config/user.js +23 -29
  231. package/tasks/docs/build.js +97 -95
  232. package/tasks/docs/metadata.js +90 -96
  233. package/tasks/docs/serve.js +80 -81
  234. package/tasks/install.js +370 -378
  235. package/tasks/rtl/build.js +2 -2
  236. package/tasks/rtl/watch.js +2 -2
  237. package/tasks/version.js +4 -4
  238. package/tasks/watch.js +28 -30
  239. package/test/meteor/assets.js +10 -13
  240. package/test/meteor/fonts.js +12 -13
  241. package/test/modules/accordion.spec.js +6 -8
  242. package/test/modules/checkbox.spec.js +5 -7
  243. package/test/modules/dropdown.spec.js +5 -7
  244. package/test/modules/modal.spec.js +6 -8
  245. package/test/modules/module.spec.js +158 -178
  246. package/test/modules/popup.spec.js +5 -7
  247. package/test/modules/search.spec.js +5 -7
  248. package/test/modules/shape.spec.js +5 -7
  249. package/test/modules/sidebar.spec.js +5 -7
  250. package/test/modules/tab.spec.js +6 -8
  251. package/test/modules/transition.spec.js +5 -7
  252. package/test/modules/video.spec.js +5 -7
@@ -8,1351 +8,1329 @@
8
8
  *
9
9
  */
10
10
 
11
- ;(function ( $, window, document, undefined ) {
11
+ (function ($, window, document, undefined) {
12
+ 'use strict';
12
13
 
13
- "use strict";
14
+ function isFunction(obj) {
15
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
16
+ }
14
17
 
15
- function isFunction(obj) {
16
- return typeof obj === "function" && typeof obj.nodeType !== "number";
17
- }
18
+ window = (typeof window != 'undefined' && window.Math == Math)
19
+ ? window
20
+ : (typeof self != 'undefined' && self.Math == Math)
21
+ ? self
22
+ : Function('return this')();
18
23
 
19
- window = (typeof window != 'undefined' && window.Math == Math)
20
- ? window
21
- : (typeof self != 'undefined' && self.Math == Math)
22
- ? self
23
- : Function('return this')()
24
- ;
24
+ $.fn.slider = function (parameters) {
25
+ var
26
+ $allModules = $(this),
27
+ $document = $(document),
28
+ $window = $(window),
25
29
 
26
- $.fn.slider = function(parameters) {
30
+ moduleSelector = $allModules.selector || '',
27
31
 
28
- var
29
- $allModules = $(this),
30
- $document = $(document),
31
- $window = $(window),
32
+ time = new Date().getTime(),
33
+ performance = [],
32
34
 
33
- moduleSelector = $allModules.selector || '',
35
+ query = arguments[0],
36
+ methodInvoked = (typeof query == 'string'),
37
+ queryArguments = [].slice.call(arguments, 1),
34
38
 
35
- time = new Date().getTime(),
36
- performance = [],
39
+ alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
37
40
 
38
- query = arguments[0],
39
- methodInvoked = (typeof query == 'string'),
40
- queryArguments = [].slice.call(arguments, 1),
41
+ SINGLE_STEP = 1,
42
+ BIG_STEP = 2,
43
+ NO_STEP = 0,
44
+ SINGLE_BACKSTEP = -1,
45
+ BIG_BACKSTEP = -2,
41
46
 
42
- alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
47
+ // Used to manage document bound events.
48
+ // Use this so that we can distinguish between which document events are bound to which range.
49
+ currentRange = 0,
43
50
 
44
- SINGLE_STEP = 1,
45
- BIG_STEP = 2,
46
- NO_STEP = 0,
47
- SINGLE_BACKSTEP = -1,
48
- BIG_BACKSTEP = -2,
51
+ returnedValue
52
+ ;
49
53
 
50
- // Used to manage document bound events.
51
- // Use this so that we can distinguish between which document events are bound to which range.
52
- currentRange = 0,
53
-
54
- returnedValue
55
- ;
56
-
57
- $allModules
58
- .each(function() {
59
-
60
- var
61
- settings = ( $.isPlainObject(parameters) )
62
- ? $.extend(true, {}, $.fn.slider.settings, parameters)
63
- : $.extend({}, $.fn.slider.settings),
64
-
65
- className = settings.className,
66
- metadata = settings.metadata,
67
- namespace = settings.namespace,
68
- error = settings.error,
69
- keys = settings.keys,
70
- interpretLabel = settings.interpretLabel,
71
-
72
- isHover = false,
73
- eventNamespace = '.' + namespace,
74
- moduleNamespace = 'module-' + namespace,
75
-
76
- $module = $(this),
77
- $currThumb,
78
- touchIdentifier,
79
- $thumb,
80
- $secondThumb,
81
- $track,
82
- $trackFill,
83
- $labels,
84
-
85
- element = this,
86
- instance = $module.data(moduleNamespace),
87
-
88
- documentEventID,
89
-
90
- value,
91
- position,
92
- secondPos,
93
- offset,
94
- precision,
95
- gapRatio = 1,
96
- previousValue,
97
-
98
- initialPosition,
99
- initialLoad,
100
- module
101
- ;
102
-
103
- module = {
104
-
105
- initialize: function() {
106
- module.debug('Initializing slider', settings);
107
- initialLoad = true;
108
-
109
- currentRange += 1;
110
- documentEventID = currentRange;
111
-
112
- module.setup.layout();
113
- module.setup.labels();
114
-
115
- if(!module.is.disabled()) {
116
- module.bind.events();
117
- }
118
-
119
- module.read.metadata();
120
- module.read.settings();
121
-
122
- initialLoad = false;
123
- module.instantiate();
124
- },
125
-
126
- instantiate: function() {
127
- module.verbose('Storing instance of slider', module);
128
- instance = module;
129
- $module
130
- .data(moduleNamespace, module)
131
- ;
132
- },
133
-
134
- destroy: function() {
135
- module.verbose('Destroying previous slider for', $module);
136
- clearInterval(instance.interval);
137
- module.unbind.events();
138
- module.unbind.slidingEvents();
139
- $module.removeData(moduleNamespace);
140
- instance = undefined;
141
- },
142
-
143
- setup: {
144
- layout: function() {
145
- if( $module.attr('tabindex') === undefined) {
146
- $module.attr('tabindex', 0);
147
- }
148
- if($module.find('.inner').length == 0) {
149
- $module.append("<div class='inner'>"
150
- + "<div class='track'></div>"
151
- + "<div class='track-fill'></div>"
152
- + "<div class='thumb'></div>"
153
- + "</div>");
154
- }
155
- precision = module.get.precision();
156
- $thumb = $module.find('.thumb:not(.second)');
157
- $currThumb = $thumb;
158
- if(module.is.range()) {
159
- if($module.find('.thumb.second').length == 0) {
160
- $module.find('.inner').append("<div class='thumb second'></div>");
161
- }
162
- $secondThumb = $module.find('.thumb.second');
163
- }
164
- $track = $module.find('.track');
165
- $trackFill = $module.find('.track-fill');
166
- offset = $thumb.width() / 2;
167
- },
168
- labels: function() {
169
- if(module.is.labeled()) {
170
- $labels = $module.find('.labels:not(.auto)');
171
- if($labels.length != 0) {
172
- module.setup.customLabel();
173
- } else {
174
- module.setup.autoLabel();
175
- }
176
-
177
- if (settings.showLabelTicks) {
178
- $module.addClass(className.ticked)
179
- }
180
- }
181
- },
182
- customLabel: function() {
54
+ $allModules.each(function () {
183
55
  var
184
- $children = $labels.find('.label'),
185
- numChildren = $children.length,
186
- min = module.get.min(),
187
- max = module.get.max(),
188
- ratio
56
+ settings = ($.isPlainObject(parameters))
57
+ ? $.extend(true, {}, $.fn.slider.settings, parameters)
58
+ : $.extend({}, $.fn.slider.settings),
59
+
60
+ className = settings.className,
61
+ metadata = settings.metadata,
62
+ namespace = settings.namespace,
63
+ error = settings.error,
64
+ keys = settings.keys,
65
+ interpretLabel = settings.interpretLabel,
66
+
67
+ isHover = false,
68
+ eventNamespace = '.' + namespace,
69
+ moduleNamespace = 'module-' + namespace,
70
+
71
+ $module = $(this),
72
+ $currThumb,
73
+ touchIdentifier,
74
+ $thumb,
75
+ $secondThumb,
76
+ $track,
77
+ $trackFill,
78
+ $labels,
79
+
80
+ element = this,
81
+ instance = $module.data(moduleNamespace),
82
+
83
+ documentEventID,
84
+
85
+ value,
86
+ position,
87
+ secondPos,
88
+ offset,
89
+ precision,
90
+ gapRatio = 1,
91
+ previousValue,
92
+
93
+ initialPosition,
94
+ initialLoad,
95
+ module
189
96
  ;
190
- $children.each(function(index) {
191
- var
192
- $child = $(this),
193
- attrValue = $child.attr('data-value')
194
- ;
195
- if(attrValue) {
196
- attrValue = attrValue > max ? max : attrValue < min ? min : attrValue;
197
- ratio = (attrValue - min) / (max - min);
198
- } else {
199
- ratio = (index + 1) / (numChildren + 1);
200
- }
201
- module.update.labelPosition(ratio, $(this));
202
- });
203
- },
204
- autoLabel: function() {
205
- $labels = $module.find('.labels');
206
- if($labels.length != 0) {
207
- $labels.empty();
208
- }
209
- else {
210
- $labels = $module.append('<ul class="auto labels"></ul>').find('.labels');
211
- }
212
- for(var i = 0, len = module.get.numLabels(); i <= len; i++) {
213
- var
214
- labelText = module.get.label(i),
215
- $label = (labelText !== "")
216
- ? !(i % module.get.gapRatio())
217
- ? $('<li class="label">' + labelText + '</li>')
218
- : $('<li class="halftick label"></li>')
219
- : null,
220
- ratio = i / len
221
- ;
222
- if($label) {
223
- module.update.labelPosition(ratio, $label);
224
- $labels.append($label);
225
- }
226
- }
227
- }
228
- },
229
97
 
230
- bind: {
231
- events: function() {
232
- module.bind.globalKeyboardEvents();
233
- module.bind.keyboardEvents();
234
- module.bind.mouseEvents();
235
- if (settings.autoAdjustLabels) {
236
- module.bind.windowEvents();
237
- }
238
- },
239
- keyboardEvents: function() {
240
- module.verbose('Binding keyboard events');
241
- $module.on('keydown' + eventNamespace, module.event.keydown);
242
- },
243
- globalKeyboardEvents: function() {
244
- $document.on('keydown' + eventNamespace + documentEventID, module.event.activateFocus);
245
- },
246
- mouseEvents: function() {
247
- module.verbose('Binding mouse and touch events');
248
- $module.find('.track, .thumb, .inner').on('mousedown' + eventNamespace, function(event) {
249
- event.stopImmediatePropagation();
250
- event.preventDefault();
251
- module.event.down(event);
252
- });
253
- $module.on('mousedown' + eventNamespace, module.event.down);
254
- $module.on('mouseenter' + eventNamespace, function(event) {
255
- isHover = true;
256
- });
257
- $module.on('mouseleave' + eventNamespace, function(event) {
258
- isHover = false;
259
- });
260
- // All touch events are invoked on the element where the touch *started*. Thus, we can bind them all
261
- // on the thumb(s) and don't need to worry about interference with other components, i.e. no dynamic binding
262
- // and unbinding required.
263
- $module.find('.thumb')
264
- .on('touchstart' + eventNamespace, module.event.touchDown)
265
- .on('touchmove' + eventNamespace, module.event.move)
266
- .on('touchend' + eventNamespace, module.event.up)
267
- .on('touchcancel' + eventNamespace, module.event.touchCancel);
268
- },
269
- slidingEvents: function() {
270
- // these don't need the identifier because we only ever want one of them to be registered with document
271
- module.verbose('Binding page wide events while handle is being draged');
272
- $document.on('mousemove' + eventNamespace, module.event.move);
273
- $document.on('mouseup' + eventNamespace, module.event.up);
274
- },
275
- windowEvents: function() {
276
- $window.on('resize' + eventNamespace, module.event.resize);
277
- }
278
- },
279
-
280
- unbind: {
281
- events: function() {
282
- $module.find('.track, .thumb, .inner').off('mousedown' + eventNamespace);
283
- $module.off('mousedown' + eventNamespace);
284
- $module.off('mouseenter' + eventNamespace);
285
- $module.off('mouseleave' + eventNamespace);
286
- $module.find('.thumb')
287
- .off('touchstart' + eventNamespace)
288
- .off('touchmove' + eventNamespace)
289
- .off('touchend' + eventNamespace)
290
- .off('touchcancel' + eventNamespace);
291
- $module.off('keydown' + eventNamespace);
292
- $module.off('focusout' + eventNamespace);
293
- $document.off('keydown' + eventNamespace + documentEventID, module.event.activateFocus);
294
- $window.off('resize' + eventNamespace);
295
- },
296
- slidingEvents: function() {
297
- $document.off('mousemove' + eventNamespace);
298
- $document.off('mouseup' + eventNamespace);
299
- },
300
- },
301
-
302
- event: {
303
- down: function(event) {
304
- event.preventDefault();
305
- if(module.is.range()) {
306
- var
307
- eventPos = module.determine.eventPos(event),
308
- newPos = module.determine.pos(eventPos)
309
- ;
310
- // Special handling if range mode and both thumbs have the same value
311
- if(settings.preventCrossover && module.is.range() && module.thumbVal === module.secondThumbVal) {
312
- initialPosition = newPos;
313
- $currThumb = undefined;
314
- } else {
315
- $currThumb = module.determine.closestThumb(newPos);
316
- }
317
- if (previousValue === undefined) {
318
- previousValue = module.get.currentThumbValue();
319
- }
320
- } else if (previousValue === undefined) {
321
- previousValue = module.get.value();
322
- }
323
-
324
- if(!module.is.disabled()) {
325
- module.bind.slidingEvents();
326
- }
327
- },
328
- touchDown: function(event) {
329
- event.preventDefault(); // disable mouse emulation and touch-scrolling
330
- event.stopImmediatePropagation();
331
- if(touchIdentifier !== undefined) {
332
- // ignore multiple touches on the same slider --
333
- // we cannot handle changing both thumbs at once due to shared state
334
- return;
335
- }
336
- $currThumb = $(event.target);
337
- var touchEvent = event.touches ? event : event.originalEvent;
338
- touchIdentifier = touchEvent.targetTouches[0].identifier;
339
- if(previousValue === undefined) {
340
- previousValue = module.get.currentThumbValue();
341
- }
342
- },
343
- move: function(event) {
344
- if(event.type == 'mousemove') {
345
- event.preventDefault(); // prevent text selection etc.
346
- }
347
- if(module.is.disabled()) {
348
- // touch events are always bound, so we need to prevent touch-sliding on disabled sliders here
349
- return;
350
- }
351
- var value = module.determine.valueFromEvent(event);
352
- if(event.type == 'mousemove' && $currThumb === undefined) {
353
- var
354
- eventPos = module.determine.eventPos(event),
355
- newPos = module.determine.pos(eventPos)
356
- ;
357
- $currThumb = initialPosition > newPos ? $thumb : $secondThumb;
358
- }
359
- if(module.get.step() == 0 || module.is.smooth()) {
360
- var
361
- thumbVal = module.thumbVal,
362
- secondThumbVal = module.secondThumbVal,
363
- thumbSmoothVal = module.determine.smoothValueFromEvent(event)
364
- ;
365
- if(!$currThumb.hasClass('second')) {
366
- if(settings.preventCrossover && module.is.range()) {
367
- value = Math.min(secondThumbVal, value);
368
- thumbSmoothVal = Math.min(secondThumbVal, thumbSmoothVal);
98
+ module = {
99
+
100
+ initialize: function () {
101
+ module.debug('Initializing slider', settings);
102
+ initialLoad = true;
103
+
104
+ currentRange += 1;
105
+ documentEventID = currentRange;
106
+
107
+ module.setup.layout();
108
+ module.setup.labels();
109
+
110
+ if (!module.is.disabled()) {
111
+ module.bind.events();
112
+ }
113
+
114
+ module.read.metadata();
115
+ module.read.settings();
116
+
117
+ initialLoad = false;
118
+ module.instantiate();
119
+ },
120
+
121
+ instantiate: function () {
122
+ module.verbose('Storing instance of slider', module);
123
+ instance = module;
124
+ $module
125
+ .data(moduleNamespace, module)
126
+ ;
127
+ },
128
+
129
+ destroy: function () {
130
+ module.verbose('Destroying previous slider for', $module);
131
+ clearInterval(instance.interval);
132
+ module.unbind.events();
133
+ module.unbind.slidingEvents();
134
+ $module.removeData(moduleNamespace);
135
+ instance = undefined;
136
+ },
137
+
138
+ setup: {
139
+ layout: function () {
140
+ if ($module.attr('tabindex') === undefined) {
141
+ $module.attr('tabindex', 0);
142
+ }
143
+ if ($module.find('.inner').length == 0) {
144
+ $module.append("<div class='inner'>"
145
+ + "<div class='track'></div>"
146
+ + "<div class='track-fill'></div>"
147
+ + "<div class='thumb'></div>"
148
+ + '</div>');
149
+ }
150
+ precision = module.get.precision();
151
+ $thumb = $module.find('.thumb:not(.second)');
152
+ $currThumb = $thumb;
153
+ if (module.is.range()) {
154
+ if ($module.find('.thumb.second').length == 0) {
155
+ $module.find('.inner').append("<div class='thumb second'></div>");
156
+ }
157
+ $secondThumb = $module.find('.thumb.second');
158
+ }
159
+ $track = $module.find('.track');
160
+ $trackFill = $module.find('.track-fill');
161
+ offset = $thumb.width() / 2;
162
+ },
163
+ labels: function () {
164
+ if (module.is.labeled()) {
165
+ $labels = $module.find('.labels:not(.auto)');
166
+ if ($labels.length != 0) {
167
+ module.setup.customLabel();
168
+ } else {
169
+ module.setup.autoLabel();
170
+ }
171
+
172
+ if (settings.showLabelTicks) {
173
+ $module.addClass(className.ticked);
174
+ }
175
+ }
176
+ },
177
+ customLabel: function () {
178
+ var
179
+ $children = $labels.find('.label'),
180
+ numChildren = $children.length,
181
+ min = module.get.min(),
182
+ max = module.get.max(),
183
+ ratio
184
+ ;
185
+ $children.each(function (index) {
186
+ var
187
+ $child = $(this),
188
+ attrValue = $child.attr('data-value')
189
+ ;
190
+ if (attrValue) {
191
+ attrValue = attrValue > max ? max : attrValue < min ? min : attrValue;
192
+ ratio = (attrValue - min) / (max - min);
193
+ } else {
194
+ ratio = (index + 1) / (numChildren + 1);
195
+ }
196
+ module.update.labelPosition(ratio, $(this));
197
+ });
198
+ },
199
+ autoLabel: function () {
200
+ $labels = $module.find('.labels');
201
+ if ($labels.length != 0) {
202
+ $labels.empty();
203
+ } else {
204
+ $labels = $module.append('<ul class="auto labels"></ul>').find('.labels');
205
+ }
206
+ for (var i = 0, len = module.get.numLabels(); i <= len; i++) {
207
+ var
208
+ labelText = module.get.label(i),
209
+ $label = (labelText !== '')
210
+ ? !(i % module.get.gapRatio())
211
+ ? $('<li class="label">' + labelText + '</li>')
212
+ : $('<li class="halftick label"></li>')
213
+ : null,
214
+ ratio = i / len
215
+ ;
216
+ if ($label) {
217
+ module.update.labelPosition(ratio, $label);
218
+ $labels.append($label);
219
+ }
220
+ }
221
+ },
222
+ },
223
+
224
+ bind: {
225
+ events: function () {
226
+ module.bind.globalKeyboardEvents();
227
+ module.bind.keyboardEvents();
228
+ module.bind.mouseEvents();
229
+ if (settings.autoAdjustLabels) {
230
+ module.bind.windowEvents();
231
+ }
232
+ },
233
+ keyboardEvents: function () {
234
+ module.verbose('Binding keyboard events');
235
+ $module.on('keydown' + eventNamespace, module.event.keydown);
236
+ },
237
+ globalKeyboardEvents: function () {
238
+ $document.on('keydown' + eventNamespace + documentEventID, module.event.activateFocus);
239
+ },
240
+ mouseEvents: function () {
241
+ module.verbose('Binding mouse and touch events');
242
+ $module.find('.track, .thumb, .inner').on('mousedown' + eventNamespace, function (event) {
243
+ event.stopImmediatePropagation();
244
+ event.preventDefault();
245
+ module.event.down(event);
246
+ });
247
+ $module.on('mousedown' + eventNamespace, module.event.down);
248
+ $module.on('mouseenter' + eventNamespace, function (event) {
249
+ isHover = true;
250
+ });
251
+ $module.on('mouseleave' + eventNamespace, function (event) {
252
+ isHover = false;
253
+ });
254
+ // All touch events are invoked on the element where the touch *started*. Thus, we can bind them all
255
+ // on the thumb(s) and don't need to worry about interference with other components, i.e. no dynamic binding
256
+ // and unbinding required.
257
+ $module.find('.thumb')
258
+ .on('touchstart' + eventNamespace, module.event.touchDown)
259
+ .on('touchmove' + eventNamespace, module.event.move)
260
+ .on('touchend' + eventNamespace, module.event.up)
261
+ .on('touchcancel' + eventNamespace, module.event.touchCancel)
262
+ ;
263
+ },
264
+ slidingEvents: function () {
265
+ // these don't need the identifier because we only ever want one of them to be registered with document
266
+ module.verbose('Binding page wide events while handle is being draged');
267
+ $document.on('mousemove' + eventNamespace, module.event.move);
268
+ $document.on('mouseup' + eventNamespace, module.event.up);
269
+ },
270
+ windowEvents: function () {
271
+ $window.on('resize' + eventNamespace, module.event.resize);
272
+ },
273
+ },
274
+
275
+ unbind: {
276
+ events: function () {
277
+ $module.find('.track, .thumb, .inner').off('mousedown' + eventNamespace);
278
+ $module.off('mousedown' + eventNamespace);
279
+ $module.off('mouseenter' + eventNamespace);
280
+ $module.off('mouseleave' + eventNamespace);
281
+ $module.find('.thumb')
282
+ .off('touchstart' + eventNamespace)
283
+ .off('touchmove' + eventNamespace)
284
+ .off('touchend' + eventNamespace)
285
+ .off('touchcancel' + eventNamespace)
286
+ ;
287
+ $module.off('keydown' + eventNamespace);
288
+ $module.off('focusout' + eventNamespace);
289
+ $document.off('keydown' + eventNamespace + documentEventID, module.event.activateFocus);
290
+ $window.off('resize' + eventNamespace);
291
+ },
292
+ slidingEvents: function () {
293
+ $document.off('mousemove' + eventNamespace);
294
+ $document.off('mouseup' + eventNamespace);
295
+ },
296
+ },
297
+
298
+ event: {
299
+ down: function (event) {
300
+ event.preventDefault();
301
+ if (module.is.range()) {
302
+ var
303
+ eventPos = module.determine.eventPos(event),
304
+ newPos = module.determine.pos(eventPos)
305
+ ;
306
+ // Special handling if range mode and both thumbs have the same value
307
+ if (settings.preventCrossover && module.is.range() && module.thumbVal === module.secondThumbVal) {
308
+ initialPosition = newPos;
309
+ $currThumb = undefined;
310
+ } else {
311
+ $currThumb = module.determine.closestThumb(newPos);
312
+ }
313
+ if (previousValue === undefined) {
314
+ previousValue = module.get.currentThumbValue();
315
+ }
316
+ } else if (previousValue === undefined) {
317
+ previousValue = module.get.value();
318
+ }
319
+
320
+ if (!module.is.disabled()) {
321
+ module.bind.slidingEvents();
322
+ }
323
+ },
324
+ touchDown: function (event) {
325
+ event.preventDefault(); // disable mouse emulation and touch-scrolling
326
+ event.stopImmediatePropagation();
327
+ if (touchIdentifier !== undefined) {
328
+ // ignore multiple touches on the same slider --
329
+ // we cannot handle changing both thumbs at once due to shared state
330
+ return;
331
+ }
332
+ $currThumb = $(event.target);
333
+ var touchEvent = event.touches ? event : event.originalEvent;
334
+ touchIdentifier = touchEvent.targetTouches[0].identifier;
335
+ if (previousValue === undefined) {
336
+ previousValue = module.get.currentThumbValue();
337
+ }
338
+ },
339
+ move: function (event) {
340
+ if (event.type == 'mousemove') {
341
+ event.preventDefault(); // prevent text selection etc.
342
+ }
343
+ if (module.is.disabled()) {
344
+ // touch events are always bound, so we need to prevent touch-sliding on disabled sliders here
345
+ return;
346
+ }
347
+ var value = module.determine.valueFromEvent(event);
348
+ if (event.type == 'mousemove' && $currThumb === undefined) {
349
+ var
350
+ eventPos = module.determine.eventPos(event),
351
+ newPos = module.determine.pos(eventPos)
352
+ ;
353
+ $currThumb = initialPosition > newPos ? $thumb : $secondThumb;
354
+ }
355
+ if (module.get.step() == 0 || module.is.smooth()) {
356
+ var
357
+ thumbVal = module.thumbVal,
358
+ secondThumbVal = module.secondThumbVal,
359
+ thumbSmoothVal = module.determine.smoothValueFromEvent(event)
360
+ ;
361
+ if (!$currThumb.hasClass('second')) {
362
+ if (settings.preventCrossover && module.is.range()) {
363
+ value = Math.min(secondThumbVal, value);
364
+ thumbSmoothVal = Math.min(secondThumbVal, thumbSmoothVal);
365
+ }
366
+ thumbVal = value;
367
+ } else {
368
+ if (settings.preventCrossover && module.is.range()) {
369
+ value = Math.max(thumbVal, value);
370
+ thumbSmoothVal = Math.max(thumbVal, thumbSmoothVal);
371
+ }
372
+ secondThumbVal = value;
373
+ }
374
+ value = Math.abs(thumbVal - (secondThumbVal || 0));
375
+ module.update.position(thumbSmoothVal);
376
+ settings.onMove.call(element, value, thumbVal, secondThumbVal);
377
+ } else {
378
+ module.update.value(value, function (value, thumbVal, secondThumbVal) {
379
+ settings.onMove.call(element, value, thumbVal, secondThumbVal);
380
+ });
381
+ }
382
+ },
383
+ up: function (event) {
384
+ event.preventDefault();
385
+ if (module.is.disabled()) {
386
+ // touch events are always bound, so we need to prevent touch-sliding on disabled sliders here
387
+ return;
388
+ }
389
+ var value = module.determine.valueFromEvent(event);
390
+ module.set.value(value);
391
+ module.unbind.slidingEvents();
392
+ touchIdentifier = undefined;
393
+ if (previousValue !== undefined) {
394
+ previousValue = undefined;
395
+ }
396
+ },
397
+ touchCancel: function (event) {
398
+ event.preventDefault();
399
+ touchIdentifier = undefined;
400
+ if (previousValue !== undefined) {
401
+ module.update.value(previousValue);
402
+ previousValue = undefined;
403
+ }
404
+ },
405
+ keydown: function (event, first) {
406
+ if (settings.preventCrossover && module.is.range() && module.thumbVal === module.secondThumbVal) {
407
+ $currThumb = undefined;
408
+ }
409
+ if (module.is.focused()) {
410
+ $document.trigger(event);
411
+ }
412
+ if (first || module.is.focused()) {
413
+ var step = module.determine.keyMovement(event);
414
+ if (step != NO_STEP) {
415
+ event.preventDefault();
416
+ switch (step) {
417
+ case SINGLE_STEP:
418
+ module.takeStep();
419
+
420
+ break;
421
+ case BIG_STEP:
422
+ module.takeStep(module.get.multiplier());
423
+
424
+ break;
425
+ case SINGLE_BACKSTEP:
426
+ module.backStep();
427
+
428
+ break;
429
+ case BIG_BACKSTEP:
430
+ module.backStep(module.get.multiplier());
431
+
432
+ break;
433
+ }
434
+ }
435
+ }
436
+ },
437
+ activateFocus: function (event) {
438
+ if (!module.is.focused() && module.is.hover() && module.determine.keyMovement(event) != NO_STEP) {
439
+ event.preventDefault();
440
+ module.event.keydown(event, true);
441
+ $module.trigger('focus');
442
+ }
443
+ },
444
+ resize: function (_event) {
445
+ // To avoid a useless performance cost, we only call the label refresh when its necessary
446
+ if (gapRatio != module.get.gapRatio()) {
447
+ module.setup.labels();
448
+ gapRatio = module.get.gapRatio();
449
+ }
450
+ },
451
+ },
452
+
453
+ resync: function () {
454
+ module.verbose('Resyncing thumb position based on value');
455
+ if (module.is.range()) {
456
+ module.update.position(module.secondThumbVal, $secondThumb);
457
+ }
458
+ module.update.position(module.thumbVal, $thumb);
459
+ module.setup.labels();
460
+ },
461
+ takeStep: function (multiplier) {
462
+ multiplier = multiplier != undefined ? multiplier : 1;
463
+ var
464
+ step = module.get.step(),
465
+ currValue = module.get.currentThumbValue()
466
+ ;
467
+ module.verbose('Taking a step');
468
+ if (step > 0) {
469
+ module.set.value(currValue + step * multiplier);
470
+ } else if (step == 0) {
471
+ var
472
+ precision = module.get.precision(),
473
+ newValue = currValue + (multiplier / precision)
474
+ ;
475
+ module.set.value(Math.round(newValue * precision) / precision);
476
+ }
477
+ },
478
+
479
+ backStep: function (multiplier) {
480
+ multiplier = multiplier != undefined ? multiplier : 1;
481
+ var
482
+ step = module.get.step(),
483
+ currValue = module.get.currentThumbValue()
484
+ ;
485
+ module.verbose('Going back a step');
486
+ if (step > 0) {
487
+ module.set.value(currValue - step * multiplier);
488
+ } else if (step == 0) {
489
+ var
490
+ precision = module.get.precision(),
491
+ newValue = currValue - (multiplier / precision)
492
+ ;
493
+ module.set.value(Math.round(newValue * precision) / precision);
494
+ }
495
+ },
496
+
497
+ is: {
498
+ range: function () {
499
+ return $module.hasClass(settings.className.range);
500
+ },
501
+ hover: function () {
502
+ return isHover;
503
+ },
504
+ focused: function () {
505
+ return $module.is(':focus');
506
+ },
507
+ disabled: function () {
508
+ return $module.hasClass(settings.className.disabled);
509
+ },
510
+ labeled: function () {
511
+ return $module.hasClass(settings.className.labeled);
512
+ },
513
+ reversed: function () {
514
+ return $module.hasClass(settings.className.reversed);
515
+ },
516
+ vertical: function () {
517
+ return $module.hasClass(settings.className.vertical);
518
+ },
519
+ smooth: function () {
520
+ return settings.smooth || $module.hasClass(settings.className.smooth);
521
+ },
522
+ },
523
+
524
+ get: {
525
+ trackOffset: function () {
526
+ if (module.is.vertical()) {
527
+ return $track.offset().top;
528
+ } else {
529
+ return $track.offset().left;
530
+ }
531
+ },
532
+ trackLength: function () {
533
+ if (module.is.vertical()) {
534
+ return $track.height();
535
+ } else {
536
+ return $track.width();
537
+ }
538
+ },
539
+ trackLeft: function () {
540
+ if (module.is.vertical()) {
541
+ return $track.position().top;
542
+ } else {
543
+ return $track.position().left;
544
+ }
545
+ },
546
+ trackStartPos: function () {
547
+ return module.is.reversed() ? module.get.trackLeft() + module.get.trackLength() : module.get.trackLeft();
548
+ },
549
+ trackEndPos: function () {
550
+ return module.is.reversed() ? module.get.trackLeft() : module.get.trackLeft() + module.get.trackLength();
551
+ },
552
+ trackStartMargin: function () {
553
+ var margin;
554
+ if (module.is.vertical()) {
555
+ margin = module.is.reversed() ? $module.css('padding-bottom') : $module.css('padding-top');
556
+ } else {
557
+ margin = module.is.reversed() ? $module.css('padding-right') : $module.css('padding-left');
558
+ }
559
+
560
+ return margin || '0px';
561
+ },
562
+ trackEndMargin: function () {
563
+ var margin;
564
+ if (module.is.vertical()) {
565
+ margin = module.is.reversed() ? $module.css('padding-top') : $module.css('padding-bottom');
566
+ } else {
567
+ margin = module.is.reversed() ? $module.css('padding-left') : $module.css('padding-right');
568
+ }
569
+
570
+ return margin || '0px';
571
+ },
572
+ precision: function () {
573
+ var
574
+ decimalPlaces,
575
+ step = module.get.step()
576
+ ;
577
+ if (step != 0) {
578
+ var split = String(step).split('.');
579
+ if (split.length == 2) {
580
+ decimalPlaces = split[1].length;
581
+ } else {
582
+ decimalPlaces = 0;
583
+ }
584
+ } else {
585
+ decimalPlaces = settings.decimalPlaces;
586
+ }
587
+ var precision = Math.pow(10, decimalPlaces);
588
+ module.debug('Precision determined', precision);
589
+
590
+ return precision;
591
+ },
592
+ min: function () {
593
+ return settings.min;
594
+ },
595
+ max: function () {
596
+ var
597
+ step = module.get.step(),
598
+ min = module.get.min(),
599
+ quotient = step === 0 ? 0 : Math.floor((settings.max - min) / step),
600
+ remainder = step === 0 ? 0 : (settings.max - min) % step
601
+ ;
602
+
603
+ return remainder === 0 ? settings.max : min + quotient * step;
604
+ },
605
+ step: function () {
606
+ return settings.step;
607
+ },
608
+ numLabels: function () {
609
+ var value = Math.round((module.get.max() - module.get.min()) / (module.get.step() === 0 ? 1 : module.get.step()));
610
+ module.debug('Determined that there should be ' + value + ' labels');
611
+
612
+ return value;
613
+ },
614
+ labelType: function () {
615
+ return settings.labelType;
616
+ },
617
+ label: function (value) {
618
+ if (interpretLabel) {
619
+ return interpretLabel(value);
620
+ }
621
+
622
+ switch (settings.labelType) {
623
+ case settings.labelTypes.number:
624
+ return Math.round(((value * (module.get.step() === 0 ? 1 : module.get.step())) + module.get.min()) * precision) / precision;
625
+ case settings.labelTypes.letter:
626
+ return alphabet[(value) % 26];
627
+ default:
628
+ return value;
629
+ }
630
+ },
631
+ value: function () {
632
+ return value;
633
+ },
634
+ currentThumbValue: function () {
635
+ return $currThumb !== undefined && $currThumb.hasClass('second') ? module.secondThumbVal : module.thumbVal;
636
+ },
637
+ thumbValue: function (which) {
638
+ switch (which) {
639
+ case 'second':
640
+ if (module.is.range()) {
641
+ return module.secondThumbVal;
642
+ } else {
643
+ module.error(error.notrange);
644
+
645
+ break;
646
+ }
647
+ case 'first':
648
+ default:
649
+ return module.thumbVal;
650
+ }
651
+ },
652
+ multiplier: function () {
653
+ return settings.pageMultiplier;
654
+ },
655
+ thumbPosition: function (which) {
656
+ switch (which) {
657
+ case 'second':
658
+ if (module.is.range()) {
659
+ return secondPos;
660
+ } else {
661
+ module.error(error.notrange);
662
+
663
+ break;
664
+ }
665
+ case 'first':
666
+ default:
667
+ return position;
668
+ }
669
+ },
670
+ gapRatio: function () {
671
+ var gapRatio = 1;
672
+
673
+ if (settings.autoAdjustLabels) {
674
+ var
675
+ numLabels = module.get.numLabels(),
676
+ trackLength = module.get.trackLength(),
677
+ gapCounter = 1
678
+ ;
679
+
680
+ // While the distance between two labels is too short,
681
+ // we divide the number of labels at each iteration
682
+ // and apply only if the modulo of the operation is an odd number.
683
+ if (trackLength > 0) {
684
+ while ((trackLength / numLabels) * gapCounter < settings.labelDistance) {
685
+ if (!(numLabels % gapCounter)) {
686
+ gapRatio = gapCounter;
687
+ }
688
+ gapCounter += 1;
689
+ }
690
+ }
691
+ }
692
+
693
+ return gapRatio;
694
+ },
695
+ },
696
+
697
+ determine: {
698
+ pos: function (pagePos) {
699
+ return module.is.reversed()
700
+ ? module.get.trackStartPos() - pagePos + module.get.trackOffset()
701
+ : pagePos - module.get.trackOffset() - module.get.trackStartPos();
702
+ },
703
+ closestThumb: function (eventPos) {
704
+ var
705
+ thumbPos = parseFloat(module.determine.thumbPos($thumb)),
706
+ thumbDelta = Math.abs(eventPos - thumbPos),
707
+ secondThumbPos = parseFloat(module.determine.thumbPos($secondThumb)),
708
+ secondThumbDelta = Math.abs(eventPos - secondThumbPos)
709
+ ;
710
+ if (thumbDelta === secondThumbDelta && module.get.thumbValue() === module.get.min()) {
711
+ return $secondThumb;
712
+ }
713
+
714
+ return thumbDelta <= secondThumbDelta ? $thumb : $secondThumb;
715
+ },
716
+ closestThumbPos: function (eventPos) {
717
+ var
718
+ thumbPos = parseFloat(module.determine.thumbPos($thumb)),
719
+ thumbDelta = Math.abs(eventPos - thumbPos),
720
+ secondThumbPos = parseFloat(module.determine.thumbPos($secondThumb)),
721
+ secondThumbDelta = Math.abs(eventPos - secondThumbPos)
722
+ ;
723
+
724
+ return thumbDelta <= secondThumbDelta ? thumbPos : secondThumbPos;
725
+ },
726
+ thumbPos: function ($element) {
727
+ var
728
+ pos = module.is.vertical()
729
+ ? module.is.reversed() ? $element.css('bottom') : $element.css('top')
730
+ : module.is.reversed() ? $element.css('right') : $element.css('left')
731
+ ;
732
+
733
+ return pos;
734
+ },
735
+ positionFromValue: function (val) {
736
+ var
737
+ min = module.get.min(),
738
+ max = module.get.max(),
739
+ value = val > max ? max : val < min ? min : val,
740
+ trackLength = module.get.trackLength(),
741
+ ratio = (value - min) / (max - min),
742
+ position = Math.round(ratio * trackLength)
743
+ ;
744
+ module.verbose('Determined position: ' + position + ' from value: ' + value);
745
+
746
+ return position;
747
+ },
748
+ positionFromRatio: function (ratio) {
749
+ var
750
+ trackLength = module.get.trackLength(),
751
+ step = module.get.step(),
752
+ position = Math.round(ratio * trackLength),
753
+ adjustedPos = (step == 0) ? position : Math.round(position / step) * step
754
+ ;
755
+
756
+ return adjustedPos;
757
+ },
758
+ valueFromEvent: function (event) {
759
+ var
760
+ eventPos = module.determine.eventPos(event),
761
+ newPos = module.determine.pos(eventPos),
762
+ value
763
+ ;
764
+ if (eventPos < module.get.trackOffset()) {
765
+ value = module.is.reversed() ? module.get.max() : module.get.min();
766
+ } else if (eventPos > module.get.trackOffset() + module.get.trackLength()) {
767
+ value = module.is.reversed() ? module.get.min() : module.get.max();
768
+ } else {
769
+ value = module.determine.value(newPos);
770
+ }
771
+
772
+ return value;
773
+ },
774
+ smoothValueFromEvent: function (event) {
775
+ var
776
+ min = module.get.min(),
777
+ max = module.get.max(),
778
+ trackLength = module.get.trackLength(),
779
+ eventPos = module.determine.eventPos(event),
780
+ newPos = eventPos - module.get.trackOffset(),
781
+ ratio,
782
+ value
783
+ ;
784
+ newPos = newPos < 0 ? 0 : newPos > trackLength ? trackLength : newPos;
785
+ ratio = newPos / trackLength;
786
+ if (module.is.reversed()) {
787
+ ratio = 1 - ratio;
788
+ }
789
+ value = ratio * (max - min) + min;
790
+
791
+ return value;
792
+ },
793
+ eventPos: function (event) {
794
+ if (event.type === 'touchmove' || event.type === 'touchend') {
795
+ var
796
+ touchEvent = event.touches ? event : event.originalEvent,
797
+ touch = touchEvent.changedTouches[0]; // fall back to first touch if correct touch not found
798
+ for (var i = 0; i < touchEvent.touches.length; i++) {
799
+ if (touchEvent.touches[i].identifier === touchIdentifier) {
800
+ touch = touchEvent.touches[i];
801
+
802
+ break;
803
+ }
804
+ }
805
+ var
806
+ touchY = touch.pageY,
807
+ touchX = touch.pageX
808
+ ;
809
+
810
+ return module.is.vertical() ? touchY : touchX;
811
+ }
812
+ var
813
+ clickY = event.pageY || event.originalEvent.pageY,
814
+ clickX = event.pageX || event.originalEvent.pageX
815
+ ;
816
+
817
+ return module.is.vertical() ? clickY : clickX;
818
+ },
819
+ value: function (position) {
820
+ var
821
+ startPos = module.is.reversed() ? module.get.trackEndPos() : module.get.trackStartPos(),
822
+ endPos = module.is.reversed() ? module.get.trackStartPos() : module.get.trackEndPos(),
823
+ ratio = (position - startPos) / (endPos - startPos),
824
+ range = module.get.max() - module.get.min(),
825
+ step = module.get.step(),
826
+ value = (ratio * range),
827
+ difference = (step == 0) ? value : Math.round(value / step) * step
828
+ ;
829
+ module.verbose('Determined value based upon position: ' + position + ' as: ' + value);
830
+ if (value != difference) {
831
+ module.verbose('Rounding value to closest step: ' + difference);
832
+ }
833
+ // Use precision to avoid ugly Javascript floating point rounding issues
834
+ // (like 35 * .01 = 0.35000000000000003)
835
+ module.verbose('Cutting off additional decimal places');
836
+
837
+ return Math.round((difference + module.get.min()) * precision) / precision;
838
+ },
839
+ keyMovement: function (event) {
840
+ var
841
+ key = event.which,
842
+ downArrow = module.is.vertical()
843
+ ? module.is.reversed() ? keys.downArrow : keys.upArrow
844
+ : keys.downArrow,
845
+ upArrow = module.is.vertical()
846
+ ? module.is.reversed() ? keys.upArrow : keys.downArrow
847
+ : keys.upArrow,
848
+ leftArrow = !module.is.vertical()
849
+ ? module.is.reversed() ? keys.rightArrow : keys.leftArrow
850
+ : keys.leftArrow,
851
+ rightArrow = !module.is.vertical()
852
+ ? module.is.reversed() ? keys.leftArrow : keys.rightArrow
853
+ : keys.rightArrow
854
+ ;
855
+ if (key == downArrow || key == leftArrow) {
856
+ return SINGLE_BACKSTEP;
857
+ } else if (key == upArrow || key == rightArrow) {
858
+ return SINGLE_STEP;
859
+ } else if (key == keys.pageDown) {
860
+ return BIG_BACKSTEP;
861
+ } else if (key == keys.pageUp) {
862
+ return BIG_STEP;
863
+ } else {
864
+ return NO_STEP;
865
+ }
866
+ },
867
+ },
868
+
869
+ handleNewValuePosition: function (val) {
870
+ var
871
+ min = module.get.min(),
872
+ max = module.get.max(),
873
+ newPos
874
+ ;
875
+ if (val <= min) {
876
+ val = min;
877
+ } else if (val >= max) {
878
+ val = max;
879
+ }
880
+ newPos = module.determine.positionFromValue(val);
881
+
882
+ return newPos;
883
+ },
884
+
885
+ set: {
886
+ value: function (newValue, fireChange) {
887
+ fireChange = fireChange !== false;
888
+ var toReset = previousValue === undefined;
889
+ previousValue = previousValue === undefined ? module.get.value() : previousValue;
890
+ module.update.value(newValue, function (value, thumbVal, secondThumbVal) {
891
+ if ((!initialLoad || settings.fireOnInit) && fireChange) {
892
+ if (newValue !== previousValue) {
893
+ settings.onChange.call(element, value, thumbVal, secondThumbVal);
894
+ }
895
+ settings.onMove.call(element, value, thumbVal, secondThumbVal);
896
+ }
897
+ if (toReset) {
898
+ previousValue = undefined;
899
+ }
900
+ });
901
+ },
902
+ rangeValue: function (first, second, fireChange) {
903
+ fireChange = fireChange !== false;
904
+ if (module.is.range()) {
905
+ var
906
+ min = module.get.min(),
907
+ max = module.get.max(),
908
+ toReset = previousValue === undefined
909
+ ;
910
+ previousValue = previousValue === undefined ? module.get.value() : previousValue;
911
+ if (first <= min) {
912
+ first = min;
913
+ } else if (first >= max) {
914
+ first = max;
915
+ }
916
+ if (second <= min) {
917
+ second = min;
918
+ } else if (second >= max) {
919
+ second = max;
920
+ }
921
+ module.thumbVal = first;
922
+ module.secondThumbVal = second;
923
+ value = Math.abs(module.thumbVal - module.secondThumbVal);
924
+ module.update.position(module.thumbVal, $thumb);
925
+ module.update.position(module.secondThumbVal, $secondThumb);
926
+ if ((!initialLoad || settings.fireOnInit) && fireChange) {
927
+ if (value !== previousValue) {
928
+ settings.onChange.call(element, value, module.thumbVal, module.secondThumbVal);
929
+ }
930
+ settings.onMove.call(element, value, module.thumbVal, module.secondThumbVal);
931
+ }
932
+ if (toReset) {
933
+ previousValue = undefined;
934
+ }
935
+ } else {
936
+ module.error(error.notrange);
937
+ }
938
+ },
939
+ position: function (position, which) {
940
+ var thumbVal = module.determine.value(position);
941
+ if (which === 'second') {
942
+ module.secondThumbVal = thumbVal;
943
+ module.update.position(thumbVal, $secondThumb);
944
+ } else {
945
+ module.thumbVal = thumbVal;
946
+ module.update.position(thumbVal, $thumb);
947
+ }
948
+ value = Math.abs(module.thumbVal - (module.secondThumbVal || 0));
949
+ module.set.value(value);
950
+ },
951
+ },
952
+
953
+ update: {
954
+ value: function (newValue, callback) {
955
+ var
956
+ min = module.get.min(),
957
+ max = module.get.max()
958
+ ;
959
+ if (newValue <= min) {
960
+ newValue = min;
961
+ } else if (newValue >= max) {
962
+ newValue = max;
963
+ }
964
+ if (!module.is.range()) {
965
+ value = newValue;
966
+ module.thumbVal = value;
967
+ } else {
968
+ if ($currThumb === undefined) {
969
+ $currThumb = newValue <= module.get.currentThumbValue() ? $thumb : $secondThumb;
970
+ }
971
+ if (!$currThumb.hasClass('second')) {
972
+ if (settings.preventCrossover && module.is.range()) {
973
+ newValue = Math.min(module.secondThumbVal, newValue);
974
+ }
975
+ module.thumbVal = newValue;
976
+ } else {
977
+ if (settings.preventCrossover && module.is.range()) {
978
+ newValue = Math.max(module.thumbVal, newValue);
979
+ }
980
+ module.secondThumbVal = newValue;
981
+ }
982
+ value = Math.abs(module.thumbVal - module.secondThumbVal);
983
+ }
984
+ module.update.position(newValue);
985
+ module.debug('Setting slider value to ' + value);
986
+ if (typeof callback === 'function') {
987
+ callback(value, module.thumbVal, module.secondThumbVal);
988
+ }
989
+ },
990
+ position: function (newValue, $element) {
991
+ var
992
+ newPos = module.handleNewValuePosition(newValue),
993
+ $targetThumb = $element != undefined ? $element : $currThumb,
994
+ thumbVal = module.thumbVal || module.get.min(),
995
+ secondThumbVal = module.secondThumbVal || module.get.min()
996
+ ;
997
+ if (module.is.range()) {
998
+ if (!$targetThumb.hasClass('second')) {
999
+ position = newPos;
1000
+ thumbVal = newValue;
1001
+ } else {
1002
+ secondPos = newPos;
1003
+ secondThumbVal = newValue;
1004
+ }
1005
+ } else {
1006
+ position = newPos;
1007
+ thumbVal = newValue;
1008
+ }
1009
+ var
1010
+ trackPosValue,
1011
+ thumbPosValue,
1012
+ min = module.get.min(),
1013
+ max = module.get.max(),
1014
+ thumbPosPercent = 100 * (newValue - min) / (max - min),
1015
+ trackStartPosPercent = 100 * (Math.min(thumbVal, secondThumbVal) - min) / (max - min),
1016
+ trackEndPosPercent = 100 * (1 - (Math.max(thumbVal, secondThumbVal) - min) / (max - min))
1017
+ ;
1018
+ if (module.is.vertical()) {
1019
+ if (module.is.reversed()) {
1020
+ thumbPosValue = { bottom: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', top: 'auto' };
1021
+ trackPosValue = { bottom: trackStartPosPercent + '%', top: trackEndPosPercent + '%' };
1022
+ } else {
1023
+ thumbPosValue = { top: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', bottom: 'auto' };
1024
+ trackPosValue = { top: trackStartPosPercent + '%', bottom: trackEndPosPercent + '%' };
1025
+ }
1026
+ } else {
1027
+ if (module.is.reversed()) {
1028
+ thumbPosValue = { right: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', left: 'auto' };
1029
+ trackPosValue = { right: trackStartPosPercent + '%', left: trackEndPosPercent + '%' };
1030
+ } else {
1031
+ thumbPosValue = { left: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', right: 'auto' };
1032
+ trackPosValue = { left: trackStartPosPercent + '%', right: trackEndPosPercent + '%' };
1033
+ }
1034
+ }
1035
+ $targetThumb.css(thumbPosValue);
1036
+ $trackFill.css(trackPosValue);
1037
+ module.debug('Setting slider position to ' + newPos);
1038
+ },
1039
+ labelPosition: function (ratio, $label) {
1040
+ var
1041
+ startMargin = module.get.trackStartMargin(),
1042
+ endMargin = module.get.trackEndMargin(),
1043
+ posDir = module.is.vertical()
1044
+ ? module.is.reversed() ? 'bottom' : 'top'
1045
+ : module.is.reversed() ? 'right' : 'left',
1046
+ startMarginMod = module.is.reversed() && !module.is.vertical() ? ' - ' : ' + '
1047
+ ;
1048
+ var position = '(100% - ' + startMargin + ' - ' + endMargin + ') * ' + ratio;
1049
+ $label.css(posDir, 'calc(' + position + startMarginMod + startMargin + ')');
1050
+ },
1051
+ },
1052
+
1053
+ goto: {
1054
+ max: function () {
1055
+ module.set.value(module.get.max());
1056
+ },
1057
+ min: function () {
1058
+ module.set.value(module.get.min());
1059
+ },
1060
+ },
1061
+
1062
+ read: {
1063
+ metadata: function () {
1064
+ var
1065
+ data = {
1066
+ thumbVal: $module.data(metadata.thumbVal),
1067
+ secondThumbVal: $module.data(metadata.secondThumbVal),
1068
+ }
1069
+ ;
1070
+ if (data.thumbVal) {
1071
+ if (module.is.range() && data.secondThumbVal) {
1072
+ module.debug('Current value set from metadata', data.thumbVal, data.secondThumbVal);
1073
+ module.set.rangeValue(data.thumbVal, data.secondThumbVal);
1074
+ } else {
1075
+ module.debug('Current value set from metadata', data.thumbVal);
1076
+ module.set.value(data.thumbVal);
1077
+ }
1078
+ }
1079
+ },
1080
+ settings: function () {
1081
+ if (settings.start !== false) {
1082
+ if (module.is.range()) {
1083
+ module.debug('Start position set from settings', settings.start, settings.end);
1084
+ module.set.rangeValue(settings.start, settings.end);
1085
+ } else {
1086
+ module.debug('Start position set from settings', settings.start);
1087
+ module.set.value(settings.start);
1088
+ }
1089
+ }
1090
+ },
1091
+ },
1092
+
1093
+ setting: function (name, value) {
1094
+ module.debug('Changing setting', name, value);
1095
+ if ($.isPlainObject(name)) {
1096
+ $.extend(true, settings, name);
1097
+ } else if (value !== undefined) {
1098
+ if ($.isPlainObject(settings[name])) {
1099
+ $.extend(true, settings[name], value);
1100
+ } else {
1101
+ settings[name] = value;
1102
+ }
1103
+ } else {
1104
+ return settings[name];
1105
+ }
1106
+ },
1107
+ internal: function (name, value) {
1108
+ if ($.isPlainObject(name)) {
1109
+ $.extend(true, module, name);
1110
+ } else if (value !== undefined) {
1111
+ module[name] = value;
1112
+ } else {
1113
+ return module[name];
1114
+ }
1115
+ },
1116
+ debug: function () {
1117
+ if (!settings.silent && settings.debug) {
1118
+ if (settings.performance) {
1119
+ module.performance.log(arguments);
1120
+ } else {
1121
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
1122
+ module.debug.apply(console, arguments);
1123
+ }
1124
+ }
1125
+ },
1126
+ verbose: function () {
1127
+ if (!settings.silent && settings.verbose && settings.debug) {
1128
+ if (settings.performance) {
1129
+ module.performance.log(arguments);
1130
+ } else {
1131
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
1132
+ module.verbose.apply(console, arguments);
1133
+ }
1134
+ }
1135
+ },
1136
+ error: function () {
1137
+ if (!settings.silent) {
1138
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
1139
+ module.error.apply(console, arguments);
1140
+ }
1141
+ },
1142
+
1143
+ performance: {
1144
+ log: function (message) {
1145
+ var
1146
+ currentTime,
1147
+ executionTime,
1148
+ previousTime
1149
+ ;
1150
+ if (settings.performance) {
1151
+ currentTime = new Date().getTime();
1152
+ previousTime = time || currentTime;
1153
+ executionTime = currentTime - previousTime;
1154
+ time = currentTime;
1155
+ performance.push({
1156
+ Name: message[0],
1157
+ Arguments: [].slice.call(message, 1) || '',
1158
+ Element: element,
1159
+ 'Execution Time': executionTime,
1160
+ });
1161
+ }
1162
+ clearTimeout(module.performance.timer);
1163
+ module.performance.timer = setTimeout(module.performance.display, 500);
1164
+ },
1165
+ display: function () {
1166
+ var
1167
+ title = settings.name + ':',
1168
+ totalTime = 0
1169
+ ;
1170
+ time = false;
1171
+ clearTimeout(module.performance.timer);
1172
+ $.each(performance, function (index, data) {
1173
+ totalTime += data['Execution Time'];
1174
+ });
1175
+ title += ' ' + totalTime + 'ms';
1176
+ if (moduleSelector) {
1177
+ title += ' \'' + moduleSelector + '\'';
1178
+ }
1179
+ if ((console.group !== undefined || console.table !== undefined) && performance.length > 0) {
1180
+ console.groupCollapsed(title);
1181
+ if (console.table) {
1182
+ console.table(performance);
1183
+ } else {
1184
+ $.each(performance, function (index, data) {
1185
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
1186
+ });
1187
+ }
1188
+ console.groupEnd();
1189
+ }
1190
+ performance = [];
1191
+ },
1192
+ },
1193
+
1194
+ invoke: function (query, passedArguments, context) {
1195
+ var
1196
+ object = instance,
1197
+ maxDepth,
1198
+ found,
1199
+ response
1200
+ ;
1201
+ passedArguments = passedArguments || queryArguments;
1202
+ context = context || element;
1203
+ if (typeof query == 'string' && object !== undefined) {
1204
+ query = query.split(/[\. ]/);
1205
+ maxDepth = query.length - 1;
1206
+ $.each(query, function (depth, value) {
1207
+ var camelCaseValue = (depth != maxDepth)
1208
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
1209
+ : query
1210
+ ;
1211
+ if ($.isPlainObject(object[camelCaseValue]) && (depth != maxDepth)) {
1212
+ object = object[camelCaseValue];
1213
+ } else if (object[camelCaseValue] !== undefined) {
1214
+ found = object[camelCaseValue];
1215
+
1216
+ return false;
1217
+ } else if ($.isPlainObject(object[value]) && (depth != maxDepth)) {
1218
+ object = object[value];
1219
+ } else if (object[value] !== undefined) {
1220
+ found = object[value];
1221
+
1222
+ return false;
1223
+ } else {
1224
+ module.error(error.method, query);
1225
+
1226
+ return false;
1227
+ }
1228
+ });
1229
+ }
1230
+ if (isFunction(found)) {
1231
+ response = found.apply(context, passedArguments);
1232
+ } else if (found !== undefined) {
1233
+ response = found;
1234
+ }
1235
+ if (Array.isArray(returnedValue)) {
1236
+ returnedValue.push(response);
1237
+ } else if (returnedValue !== undefined) {
1238
+ returnedValue = [returnedValue, response];
1239
+ } else if (response !== undefined) {
1240
+ returnedValue = response;
1241
+ }
1242
+
1243
+ return found;
1244
+ },
1245
+ };
1246
+
1247
+ if (methodInvoked) {
1248
+ if (instance === undefined) {
1249
+ module.initialize();
369
1250
  }
370
- thumbVal = value;
371
- } else {
372
- if(settings.preventCrossover && module.is.range()) {
373
- value = Math.max(thumbVal, value);
374
- thumbSmoothVal = Math.max(thumbVal, thumbSmoothVal);
375
- }
376
- secondThumbVal = value;
377
- }
378
- value = Math.abs(thumbVal - (secondThumbVal || 0));
379
- module.update.position(thumbSmoothVal);
380
- settings.onMove.call(element, value, thumbVal, secondThumbVal);
1251
+ module.invoke(query);
381
1252
  } else {
382
- module.update.value(value, function(value, thumbVal, secondThumbVal) {
383
- settings.onMove.call(element, value, thumbVal, secondThumbVal);
384
- });
385
- }
386
- },
387
- up: function(event) {
388
- event.preventDefault();
389
- if(module.is.disabled()) {
390
- // touch events are always bound, so we need to prevent touch-sliding on disabled sliders here
391
- return;
392
- }
393
- var value = module.determine.valueFromEvent(event);
394
- module.set.value(value);
395
- module.unbind.slidingEvents();
396
- touchIdentifier = undefined;
397
- if (previousValue !== undefined) {
398
- previousValue = undefined;
399
- }
400
- },
401
- touchCancel: function(event) {
402
- event.preventDefault();
403
- touchIdentifier = undefined;
404
- if (previousValue !== undefined) {
405
- module.update.value(previousValue);
406
- previousValue = undefined;
407
- }
408
- },
409
- keydown: function(event, first) {
410
- if(settings.preventCrossover && module.is.range() && module.thumbVal === module.secondThumbVal) {
411
- $currThumb = undefined;
412
- }
413
- if(module.is.focused()) {
414
- $document.trigger(event);
415
- }
416
- if(first || module.is.focused()) {
417
- var step = module.determine.keyMovement(event);
418
- if(step != NO_STEP) {
419
- event.preventDefault();
420
- switch(step) {
421
- case SINGLE_STEP:
422
- module.takeStep();
423
- break;
424
- case BIG_STEP:
425
- module.takeStep(module.get.multiplier());
426
- break;
427
- case SINGLE_BACKSTEP:
428
- module.backStep();
429
- break;
430
- case BIG_BACKSTEP:
431
- module.backStep(module.get.multiplier());
432
- break;
1253
+ if (instance !== undefined) {
1254
+ instance.invoke('destroy');
433
1255
  }
434
- }
435
- }
436
- },
437
- activateFocus: function(event) {
438
- if(!module.is.focused() && module.is.hover() && module.determine.keyMovement(event) != NO_STEP) {
439
- event.preventDefault();
440
- module.event.keydown(event, true);
441
- $module.trigger('focus');
1256
+ module.initialize();
442
1257
  }
443
- },
444
- resize: function(_event) {
445
- // To avoid a useless performance cost, we only call the label refresh when its necessary
446
- if (gapRatio != module.get.gapRatio()) {
447
- module.setup.labels();
448
- gapRatio = module.get.gapRatio();
449
- }
450
- }
451
- },
1258
+ });
452
1259
 
453
- resync: function() {
454
- module.verbose('Resyncing thumb position based on value');
455
- if(module.is.range()) {
456
- module.update.position(module.secondThumbVal, $secondThumb);
457
- }
458
- module.update.position(module.thumbVal, $thumb);
459
- module.setup.labels();
460
- },
461
- takeStep: function(multiplier) {
462
- multiplier = multiplier != undefined ? multiplier : 1;
463
- var
464
- step = module.get.step(),
465
- currValue = module.get.currentThumbValue()
466
- ;
467
- module.verbose('Taking a step');
468
- if(step > 0) {
469
- module.set.value(currValue + step * multiplier);
470
- } else if (step == 0){
471
- var
472
- precision = module.get.precision(),
473
- newValue = currValue + (multiplier/precision)
474
- ;
475
- module.set.value(Math.round(newValue * precision) / precision);
476
- }
477
- },
1260
+ return (returnedValue !== undefined)
1261
+ ? returnedValue
1262
+ : this;
1263
+ };
478
1264
 
479
- backStep: function(multiplier) {
480
- multiplier = multiplier != undefined ? multiplier : 1;
481
- var
482
- step = module.get.step(),
483
- currValue = module.get.currentThumbValue()
484
- ;
485
- module.verbose('Going back a step');
486
- if(step > 0) {
487
- module.set.value(currValue - step * multiplier);
488
- } else if (step == 0) {
489
- var
490
- precision = module.get.precision(),
491
- newValue = currValue - (multiplier/precision)
492
- ;
493
- module.set.value(Math.round(newValue * precision) / precision);
494
- }
495
- },
1265
+ $.fn.slider.settings = {
496
1266
 
497
- is: {
498
- range: function() {
499
- return $module.hasClass(settings.className.range);
500
- },
501
- hover: function() {
502
- return isHover;
503
- },
504
- focused: function() {
505
- return $module.is(':focus');
506
- },
507
- disabled: function() {
508
- return $module.hasClass(settings.className.disabled);
509
- },
510
- labeled: function() {
511
- return $module.hasClass(settings.className.labeled);
512
- },
513
- reversed: function() {
514
- return $module.hasClass(settings.className.reversed);
515
- },
516
- vertical: function() {
517
- return $module.hasClass(settings.className.vertical);
518
- },
519
- smooth: function() {
520
- return settings.smooth || $module.hasClass(settings.className.smooth);
521
- }
522
- },
1267
+ silent: false,
1268
+ debug: false,
1269
+ verbose: false,
1270
+ performance: true,
523
1271
 
524
- get: {
525
- trackOffset: function() {
526
- if (module.is.vertical()) {
527
- return $track.offset().top;
528
- } else {
529
- return $track.offset().left;
530
- }
531
- },
532
- trackLength: function() {
533
- if (module.is.vertical()) {
534
- return $track.height();
535
- } else {
536
- return $track.width();
537
- }
538
- },
539
- trackLeft: function() {
540
- if (module.is.vertical()) {
541
- return $track.position().top;
542
- } else {
543
- return $track.position().left;
544
- }
545
- },
546
- trackStartPos: function() {
547
- return module.is.reversed() ? module.get.trackLeft() + module.get.trackLength() : module.get.trackLeft();
548
- },
549
- trackEndPos: function() {
550
- return module.is.reversed() ? module.get.trackLeft() : module.get.trackLeft() + module.get.trackLength();
551
- },
552
- trackStartMargin: function () {
553
- var margin;
554
- if (module.is.vertical()) {
555
- margin = module.is.reversed() ? $module.css('padding-bottom') : $module.css('padding-top');
556
- } else {
557
- margin = module.is.reversed() ? $module.css('padding-right') : $module.css('padding-left');
558
- }
559
- return margin || '0px';
560
- },
561
- trackEndMargin: function () {
562
- var margin;
563
- if (module.is.vertical()) {
564
- margin = module.is.reversed() ? $module.css('padding-top') : $module.css('padding-bottom');
565
- } else {
566
- margin = module.is.reversed() ? $module.css('padding-left') : $module.css('padding-right');
567
- }
568
- return margin || '0px';
569
- },
570
- precision: function() {
571
- var
572
- decimalPlaces,
573
- step = module.get.step()
574
- ;
575
- if(step != 0) {
576
- var split = String(step).split('.');
577
- if(split.length == 2) {
578
- decimalPlaces = split[1].length;
579
- } else {
580
- decimalPlaces = 0;
581
- }
582
- } else {
583
- decimalPlaces = settings.decimalPlaces;
584
- }
585
- var precision = Math.pow(10, decimalPlaces);
586
- module.debug('Precision determined', precision);
587
- return precision;
588
- },
589
- min: function() {
590
- return settings.min;
591
- },
592
- max: function() {
593
- var step = module.get.step(),
594
- min = module.get.min(),
595
- quotient = step === 0 ? 0 : Math.floor((settings.max - min) / step),
596
- remainder = step === 0 ? 0 : (settings.max - min) % step;
597
- return remainder === 0 ? settings.max : min + quotient * step;
598
- },
599
- step: function() {
600
- return settings.step;
601
- },
602
- numLabels: function() {
603
- var value = Math.round((module.get.max() - module.get.min()) / (module.get.step() === 0 ? 1 : module.get.step()));
604
- module.debug('Determined that there should be ' + value + ' labels');
605
- return value;
606
- },
607
- labelType: function() {
608
- return settings.labelType;
609
- },
610
- label: function(value) {
611
- if(interpretLabel) {
612
- return interpretLabel(value);
613
- }
1272
+ name: 'Slider',
1273
+ namespace: 'slider',
614
1274
 
615
- switch (settings.labelType) {
616
- case settings.labelTypes.number:
617
- return Math.round(((value * (module.get.step() === 0 ? 1 : module.get.step())) + module.get.min()) * precision ) / precision;
618
- case settings.labelTypes.letter:
619
- return alphabet[(value) % 26];
620
- default:
621
- return value;
622
- }
623
- },
624
- value: function() {
625
- return value;
626
- },
627
- currentThumbValue: function() {
628
- return $currThumb !== undefined && $currThumb.hasClass('second') ? module.secondThumbVal : module.thumbVal;
629
- },
630
- thumbValue: function(which) {
631
- switch(which) {
632
- case 'second':
633
- if(module.is.range()) {
634
- return module.secondThumbVal;
635
- }
636
- else {
637
- module.error(error.notrange);
638
- break;
639
- }
640
- case 'first':
641
- default:
642
- return module.thumbVal;
643
- }
644
- },
645
- multiplier: function() {
646
- return settings.pageMultiplier;
647
- },
648
- thumbPosition: function(which) {
649
- switch(which) {
650
- case 'second':
651
- if(module.is.range()) {
652
- return secondPos;
653
- }
654
- else {
655
- module.error(error.notrange);
656
- break;
657
- }
658
- case 'first':
659
- default:
660
- return position;
661
- }
662
- },
663
- gapRatio: function() {
664
- var gapRatio = 1;
665
-
666
- if( settings.autoAdjustLabels ) {
667
- var
668
- numLabels = module.get.numLabels(),
669
- trackLength = module.get.trackLength(),
670
- gapCounter = 1
671
- ;
672
-
673
- // While the distance between two labels is too short,
674
- // we divide the number of labels at each iteration
675
- // and apply only if the modulo of the operation is an odd number.
676
- if(trackLength>0){
677
- while ((trackLength / numLabels) * gapCounter < settings.labelDistance) {
678
- if( !(numLabels % gapCounter) ) {
679
- gapRatio = gapCounter;
680
- }
681
- gapCounter += 1;
682
- }
683
- }
684
- }
685
- return gapRatio;
686
- }
1275
+ error: {
1276
+ method: 'The method you called is not defined.',
1277
+ notrange: 'This slider is not a range slider',
687
1278
  },
688
1279
 
689
- determine: {
690
- pos: function(pagePos) {
691
- return module.is.reversed()
692
- ?
693
- module.get.trackStartPos() - pagePos + module.get.trackOffset()
694
- :
695
- pagePos - module.get.trackOffset() - module.get.trackStartPos()
696
- ;
697
- },
698
- closestThumb: function(eventPos) {
699
- var
700
- thumbPos = parseFloat(module.determine.thumbPos($thumb)),
701
- thumbDelta = Math.abs(eventPos - thumbPos),
702
- secondThumbPos = parseFloat(module.determine.thumbPos($secondThumb)),
703
- secondThumbDelta = Math.abs(eventPos - secondThumbPos)
704
- ;
705
- if(thumbDelta === secondThumbDelta && module.get.thumbValue() === module.get.min()) {
706
- return $secondThumb;
707
- }
708
- return thumbDelta <= secondThumbDelta ? $thumb : $secondThumb;
709
- },
710
- closestThumbPos: function(eventPos) {
711
- var
712
- thumbPos = parseFloat(module.determine.thumbPos($thumb)),
713
- thumbDelta = Math.abs(eventPos - thumbPos),
714
- secondThumbPos = parseFloat(module.determine.thumbPos($secondThumb)),
715
- secondThumbDelta = Math.abs(eventPos - secondThumbPos)
716
- ;
717
- return thumbDelta <= secondThumbDelta ? thumbPos : secondThumbPos;
718
- },
719
- thumbPos: function($element) {
720
- var pos =
721
- module.is.vertical()
722
- ?
723
- module.is.reversed() ? $element.css('bottom') : $element.css('top')
724
- :
725
- module.is.reversed() ? $element.css('right') : $element.css('left')
726
- ;
727
- return pos;
728
- },
729
- positionFromValue: function(val) {
730
- var
731
- min = module.get.min(),
732
- max = module.get.max(),
733
- value = val > max ? max : val < min ? min : val,
734
- trackLength = module.get.trackLength(),
735
- ratio = (value - min) / (max - min),
736
- position = Math.round(ratio * trackLength)
737
- ;
738
- module.verbose('Determined position: ' + position + ' from value: ' + value);
739
- return position;
740
- },
741
- positionFromRatio: function(ratio) {
742
- var
743
- trackLength = module.get.trackLength(),
744
- step = module.get.step(),
745
- position = Math.round(ratio * trackLength),
746
- adjustedPos = (step == 0) ? position : Math.round(position / step) * step
747
- ;
748
- return adjustedPos;
749
- },
750
- valueFromEvent: function(event) {
751
- var
752
- eventPos = module.determine.eventPos(event),
753
- newPos = module.determine.pos(eventPos),
754
- value
755
- ;
756
- if(eventPos < module.get.trackOffset()) {
757
- value = module.is.reversed() ? module.get.max() : module.get.min();
758
- } else if(eventPos > module.get.trackOffset() + module.get.trackLength()) {
759
- value = module.is.reversed() ? module.get.min() : module.get.max();
760
- } else {
761
- value = module.determine.value(newPos);
762
- }
763
- return value;
764
- },
765
- smoothValueFromEvent: function(event) {
766
- var
767
- min = module.get.min(),
768
- max = module.get.max(),
769
- trackLength = module.get.trackLength(),
770
- eventPos = module.determine.eventPos(event),
771
- newPos = eventPos - module.get.trackOffset(),
772
- ratio,
773
- value
774
- ;
775
- newPos = newPos < 0 ? 0 : newPos > trackLength ? trackLength : newPos;
776
- ratio = newPos / trackLength;
777
- if (module.is.reversed()) {
778
- ratio = 1 - ratio;
779
- }
780
- value = ratio * (max - min) + min;
781
- return value;
782
- },
783
- eventPos: function(event) {
784
- if(event.type === "touchmove" || event.type === "touchend") {
785
- var
786
- touchEvent = event.touches ? event : event.originalEvent,
787
- touch = touchEvent.changedTouches[0]; // fall back to first touch if correct touch not found
788
- for(var i=0; i < touchEvent.touches.length; i++) {
789
- if(touchEvent.touches[i].identifier === touchIdentifier) {
790
- touch = touchEvent.touches[i];
791
- break;
792
- }
793
- }
794
- var
795
- touchY = touch.pageY,
796
- touchX = touch.pageX
797
- ;
798
- return module.is.vertical() ? touchY : touchX;
799
- }
800
- var
801
- clickY = event.pageY || event.originalEvent.pageY,
802
- clickX = event.pageX || event.originalEvent.pageX
803
- ;
804
- return module.is.vertical() ? clickY : clickX;
805
- },
806
- value: function(position) {
807
- var
808
- startPos = module.is.reversed() ? module.get.trackEndPos() : module.get.trackStartPos(),
809
- endPos = module.is.reversed() ? module.get.trackStartPos() : module.get.trackEndPos(),
810
- ratio = (position - startPos) / (endPos - startPos),
811
- range = module.get.max() - module.get.min(),
812
- step = module.get.step(),
813
- value = (ratio * range),
814
- difference = (step == 0) ? value : Math.round(value / step) * step
815
- ;
816
- module.verbose('Determined value based upon position: ' + position + ' as: ' + value);
817
- if(value != difference) {
818
- module.verbose('Rounding value to closest step: ' + difference);
819
- }
820
- // Use precision to avoid ugly Javascript floating point rounding issues
821
- // (like 35 * .01 = 0.35000000000000003)
822
- module.verbose('Cutting off additional decimal places');
823
- return Math.round((difference + module.get.min()) * precision) / precision;
824
- },
825
- keyMovement: function(event) {
826
- var
827
- key = event.which,
828
- downArrow =
829
- module.is.vertical()
830
- ?
831
- module.is.reversed() ? keys.downArrow : keys.upArrow
832
- :
833
- keys.downArrow
834
- ,
835
- upArrow =
836
- module.is.vertical()
837
- ?
838
- module.is.reversed() ? keys.upArrow : keys.downArrow
839
- :
840
- keys.upArrow
841
- ,
842
- leftArrow =
843
- !module.is.vertical()
844
- ?
845
- module.is.reversed() ? keys.rightArrow : keys.leftArrow
846
- :
847
- keys.leftArrow
848
- ,
849
- rightArrow =
850
- !module.is.vertical()
851
- ?
852
- module.is.reversed() ? keys.leftArrow : keys.rightArrow
853
- :
854
- keys.rightArrow
855
- ;
856
- if(key == downArrow || key == leftArrow) {
857
- return SINGLE_BACKSTEP;
858
- } else if(key == upArrow || key == rightArrow) {
859
- return SINGLE_STEP;
860
- } else if (key == keys.pageDown) {
861
- return BIG_BACKSTEP;
862
- } else if (key == keys.pageUp) {
863
- return BIG_STEP;
864
- } else {
865
- return NO_STEP;
866
- }
867
- }
1280
+ metadata: {
1281
+ thumbVal: 'thumbVal',
1282
+ secondThumbVal: 'secondThumbVal',
868
1283
  },
869
1284
 
870
- handleNewValuePosition: function(val) {
871
- var
872
- min = module.get.min(),
873
- max = module.get.max(),
874
- newPos
875
- ;
876
- if (val <= min) {
877
- val = min;
878
- } else if (val >= max) {
879
- val = max;
880
- }
881
- newPos = module.determine.positionFromValue(val);
882
- return newPos;
883
- },
1285
+ min: 0,
1286
+ max: 20,
1287
+ step: 1,
1288
+ start: 0,
1289
+ end: 20,
1290
+ labelType: 'number',
1291
+ showLabelTicks: false,
1292
+ smooth: false,
1293
+ autoAdjustLabels: true,
1294
+ labelDistance: 100,
1295
+ preventCrossover: true,
1296
+ fireOnInit: false,
1297
+ interpretLabel: false,
884
1298
 
885
- set: {
886
- value: function(newValue, fireChange) {
887
- fireChange = fireChange !== false;
888
- var toReset = previousValue === undefined;
889
- previousValue = previousValue === undefined ? module.get.value() : previousValue;
890
- module.update.value(newValue, function(value, thumbVal, secondThumbVal) {
891
- if ((!initialLoad || settings.fireOnInit) && fireChange){
892
- if (newValue !== previousValue) {
893
- settings.onChange.call(element, value, thumbVal, secondThumbVal);
894
- }
895
- settings.onMove.call(element, value, thumbVal, secondThumbVal);
896
- }
897
- if (toReset) {
898
- previousValue = undefined;
899
- }
900
- });
901
- },
902
- rangeValue: function(first, second, fireChange) {
903
- fireChange = fireChange !== false;
904
- if(module.is.range()) {
905
- var
906
- min = module.get.min(),
907
- max = module.get.max(),
908
- toReset = previousValue === undefined
909
- ;
910
- previousValue = previousValue === undefined ? module.get.value() : previousValue;
911
- if (first <= min) {
912
- first = min;
913
- } else if(first >= max){
914
- first = max;
915
- }
916
- if (second <= min) {
917
- second = min;
918
- } else if(second >= max){
919
- second = max;
920
- }
921
- module.thumbVal = first;
922
- module.secondThumbVal = second;
923
- value = Math.abs(module.thumbVal - module.secondThumbVal);
924
- module.update.position(module.thumbVal, $thumb);
925
- module.update.position(module.secondThumbVal, $secondThumb);
926
- if ((!initialLoad || settings.fireOnInit) && fireChange) {
927
- if (value !== previousValue) {
928
- settings.onChange.call(element, value, module.thumbVal, module.secondThumbVal);
929
- }
930
- settings.onMove.call(element, value, module.thumbVal, module.secondThumbVal);
931
- }
932
- if (toReset) {
933
- previousValue = undefined;
934
- }
935
- } else {
936
- module.error(error.notrange);
937
- }
938
- },
939
- position: function(position, which) {
940
- var thumbVal = module.determine.value(position);
941
- if (which === 'second') {
942
- module.secondThumbVal = thumbVal;
943
- module.update.position(thumbVal, $secondThumb);
944
- } else {
945
- module.thumbVal = thumbVal;
946
- module.update.position(thumbVal, $thumb);
947
- }
948
- value = Math.abs(module.thumbVal - (module.secondThumbVal || 0));
949
- module.set.value(value);
950
- }
951
- },
1299
+ // the decimal place to round to if step is undefined
1300
+ decimalPlaces: 2,
952
1301
 
953
- update: {
954
- value: function(newValue, callback) {
955
- var
956
- min = module.get.min(),
957
- max = module.get.max()
958
- ;
959
- if (newValue <= min) {
960
- newValue = min;
961
- } else if(newValue >= max){
962
- newValue = max;
963
- }
964
- if(!module.is.range()) {
965
- value = newValue;
966
- module.thumbVal = value;
967
- } else {
968
- if($currThumb === undefined) {
969
- $currThumb = newValue <= module.get.currentThumbValue() ? $thumb : $secondThumb;
970
- }
971
- if(!$currThumb.hasClass('second')) {
972
- if(settings.preventCrossover && module.is.range()) {
973
- newValue = Math.min(module.secondThumbVal, newValue);
974
- }
975
- module.thumbVal = newValue;
976
- } else {
977
- if(settings.preventCrossover && module.is.range()) {
978
- newValue = Math.max(module.thumbVal, newValue);
979
- }
980
- module.secondThumbVal = newValue;
981
- }
982
- value = Math.abs(module.thumbVal - module.secondThumbVal);
983
- }
984
- module.update.position(newValue);
985
- module.debug('Setting slider value to ' + value);
986
- if(typeof callback === 'function') {
987
- callback(value, module.thumbVal, module.secondThumbVal);
988
- }
989
- },
990
- position: function(newValue, $element) {
991
- var
992
- newPos = module.handleNewValuePosition(newValue),
993
- $targetThumb = $element != undefined ? $element : $currThumb,
994
- thumbVal = module.thumbVal || module.get.min(),
995
- secondThumbVal = module.secondThumbVal || module.get.min()
996
- ;
997
- if(module.is.range()) {
998
- if(!$targetThumb.hasClass('second')) {
999
- position = newPos;
1000
- thumbVal = newValue;
1001
- } else {
1002
- secondPos = newPos;
1003
- secondThumbVal = newValue;
1004
- }
1005
- } else {
1006
- position = newPos;
1007
- thumbVal = newValue;
1008
- }
1009
- var
1010
- trackPosValue,
1011
- thumbPosValue,
1012
- min = module.get.min(),
1013
- max = module.get.max(),
1014
- thumbPosPercent = 100 * (newValue - min) / (max - min),
1015
- trackStartPosPercent = 100 * (Math.min(thumbVal, secondThumbVal) - min) / (max - min),
1016
- trackEndPosPercent = 100 * (1 - (Math.max(thumbVal, secondThumbVal) - min) / (max - min))
1017
- ;
1018
- if (module.is.vertical()) {
1019
- if (module.is.reversed()) {
1020
- thumbPosValue = {bottom: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', top: 'auto'};
1021
- trackPosValue = {bottom: trackStartPosPercent + '%', top: trackEndPosPercent + '%'};
1022
- }
1023
- else {
1024
- thumbPosValue = {top: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', bottom: 'auto'};
1025
- trackPosValue = {top: trackStartPosPercent + '%', bottom: trackEndPosPercent + '%'};
1026
- }
1027
- } else {
1028
- if (module.is.reversed()) {
1029
- thumbPosValue = {right: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', left: 'auto'};
1030
- trackPosValue = {right: trackStartPosPercent + '%', left: trackEndPosPercent + '%'};
1031
- }
1032
- else {
1033
- thumbPosValue = {left: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', right: 'auto'};
1034
- trackPosValue = {left: trackStartPosPercent + '%', right: trackEndPosPercent + '%'};
1035
- }
1036
- }
1037
- $targetThumb.css(thumbPosValue);
1038
- $trackFill.css(trackPosValue);
1039
- module.debug('Setting slider position to ' + newPos);
1040
- },
1041
- labelPosition: function (ratio, $label) {
1042
- var
1043
- startMargin = module.get.trackStartMargin(),
1044
- endMargin = module.get.trackEndMargin(),
1045
- posDir =
1046
- module.is.vertical()
1047
- ?
1048
- module.is.reversed() ? 'bottom' : 'top'
1049
- :
1050
- module.is.reversed() ? 'right' : 'left',
1051
- startMarginMod = module.is.reversed() && !module.is.vertical() ? ' - ' : ' + '
1052
- ;
1053
- var position = '(100% - ' + startMargin + ' - ' + endMargin + ') * ' + ratio;
1054
- $label.css(posDir, 'calc(' + position + startMarginMod + startMargin + ')');
1055
- }
1056
- },
1302
+ // page up/down multiplier. How many more times the steps to take on page up/down press
1303
+ pageMultiplier: 2,
1057
1304
 
1058
- goto: {
1059
- max: function() {
1060
- module.set.value(module.get.max());
1061
- },
1062
- min: function() {
1063
- module.set.value(module.get.min());
1064
- },
1065
- },
1305
+ selector: {
1066
1306
 
1067
- read: {
1068
- metadata: function() {
1069
- var
1070
- data = {
1071
- thumbVal : $module.data(metadata.thumbVal),
1072
- secondThumbVal : $module.data(metadata.secondThumbVal)
1073
- }
1074
- ;
1075
- if(data.thumbVal) {
1076
- if(module.is.range() && data.secondThumbVal) {
1077
- module.debug('Current value set from metadata', data.thumbVal, data.secondThumbVal);
1078
- module.set.rangeValue(data.thumbVal, data.secondThumbVal);
1079
- } else {
1080
- module.debug('Current value set from metadata', data.thumbVal);
1081
- module.set.value(data.thumbVal);
1082
- }
1083
- }
1084
- },
1085
- settings: function() {
1086
- if(settings.start !== false) {
1087
- if(module.is.range()) {
1088
- module.debug('Start position set from settings', settings.start, settings.end);
1089
- module.set.rangeValue(settings.start, settings.end);
1090
- } else {
1091
- module.debug('Start position set from settings', settings.start);
1092
- module.set.value(settings.start);
1093
- }
1094
- }
1095
- }
1096
1307
  },
1097
1308
 
1098
- setting: function(name, value) {
1099
- module.debug('Changing setting', name, value);
1100
- if( $.isPlainObject(name) ) {
1101
- $.extend(true, settings, name);
1102
- }
1103
- else if(value !== undefined) {
1104
- if($.isPlainObject(settings[name])) {
1105
- $.extend(true, settings[name], value);
1106
- }
1107
- else {
1108
- settings[name] = value;
1109
- }
1110
- }
1111
- else {
1112
- return settings[name];
1113
- }
1114
- },
1115
- internal: function(name, value) {
1116
- if( $.isPlainObject(name) ) {
1117
- $.extend(true, module, name);
1118
- }
1119
- else if(value !== undefined) {
1120
- module[name] = value;
1121
- }
1122
- else {
1123
- return module[name];
1124
- }
1125
- },
1126
- debug: function() {
1127
- if(!settings.silent && settings.debug) {
1128
- if(settings.performance) {
1129
- module.performance.log(arguments);
1130
- }
1131
- else {
1132
- module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
1133
- module.debug.apply(console, arguments);
1134
- }
1135
- }
1136
- },
1137
- verbose: function() {
1138
- if(!settings.silent && settings.verbose && settings.debug) {
1139
- if(settings.performance) {
1140
- module.performance.log(arguments);
1141
- }
1142
- else {
1143
- module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
1144
- module.verbose.apply(console, arguments);
1145
- }
1146
- }
1309
+ className: {
1310
+ reversed: 'reversed',
1311
+ disabled: 'disabled',
1312
+ labeled: 'labeled',
1313
+ ticked: 'ticked',
1314
+ vertical: 'vertical',
1315
+ range: 'range',
1316
+ smooth: 'smooth',
1147
1317
  },
1148
- error: function() {
1149
- if(!settings.silent) {
1150
- module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
1151
- module.error.apply(console, arguments);
1152
- }
1318
+
1319
+ keys: {
1320
+ pageUp: 33,
1321
+ pageDown: 34,
1322
+ leftArrow: 37,
1323
+ upArrow: 38,
1324
+ rightArrow: 39,
1325
+ downArrow: 40,
1153
1326
  },
1154
1327
 
1155
- performance: {
1156
- log: function(message) {
1157
- var
1158
- currentTime,
1159
- executionTime,
1160
- previousTime
1161
- ;
1162
- if(settings.performance) {
1163
- currentTime = new Date().getTime();
1164
- previousTime = time || currentTime;
1165
- executionTime = currentTime - previousTime;
1166
- time = currentTime;
1167
- performance.push({
1168
- 'Name' : message[0],
1169
- 'Arguments' : [].slice.call(message, 1) || '',
1170
- 'Element' : element,
1171
- 'Execution Time' : executionTime
1172
- });
1173
- }
1174
- clearTimeout(module.performance.timer);
1175
- module.performance.timer = setTimeout(module.performance.display, 500);
1176
- },
1177
- display: function() {
1178
- var
1179
- title = settings.name + ':',
1180
- totalTime = 0
1181
- ;
1182
- time = false;
1183
- clearTimeout(module.performance.timer);
1184
- $.each(performance, function(index, data) {
1185
- totalTime += data['Execution Time'];
1186
- });
1187
- title += ' ' + totalTime + 'ms';
1188
- if(moduleSelector) {
1189
- title += ' \'' + moduleSelector + '\'';
1190
- }
1191
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
1192
- console.groupCollapsed(title);
1193
- if(console.table) {
1194
- console.table(performance);
1195
- }
1196
- else {
1197
- $.each(performance, function(index, data) {
1198
- console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
1199
- });
1200
- }
1201
- console.groupEnd();
1202
- }
1203
- performance = [];
1204
- }
1328
+ labelTypes: {
1329
+ number: 'number',
1330
+ letter: 'letter',
1205
1331
  },
1206
1332
 
1207
- invoke: function(query, passedArguments, context) {
1208
- var
1209
- object = instance,
1210
- maxDepth,
1211
- found,
1212
- response
1213
- ;
1214
- passedArguments = passedArguments || queryArguments;
1215
- context = context || element;
1216
- if(typeof query == 'string' && object !== undefined) {
1217
- query = query.split(/[\. ]/);
1218
- maxDepth = query.length - 1;
1219
- $.each(query, function(depth, value) {
1220
- var camelCaseValue = (depth != maxDepth)
1221
- ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
1222
- : query
1223
- ;
1224
- if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
1225
- object = object[camelCaseValue];
1226
- }
1227
- else if( object[camelCaseValue] !== undefined ) {
1228
- found = object[camelCaseValue];
1229
- return false;
1230
- }
1231
- else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
1232
- object = object[value];
1233
- }
1234
- else if( object[value] !== undefined ) {
1235
- found = object[value];
1236
- return false;
1237
- }
1238
- else {
1239
- module.error(error.method, query);
1240
- return false;
1241
- }
1242
- });
1243
- }
1244
- if ( isFunction( found ) ) {
1245
- response = found.apply(context, passedArguments);
1246
- }
1247
- else if(found !== undefined) {
1248
- response = found;
1249
- }
1250
- if(Array.isArray(returnedValue)) {
1251
- returnedValue.push(response);
1252
- }
1253
- else if(returnedValue !== undefined) {
1254
- returnedValue = [returnedValue, response];
1255
- }
1256
- else if(response !== undefined) {
1257
- returnedValue = response;
1258
- }
1259
- return found;
1260
- }
1261
- };
1262
-
1263
- if(methodInvoked) {
1264
- if(instance === undefined) {
1265
- module.initialize();
1266
- }
1267
- module.invoke(query);
1268
- }
1269
- else {
1270
- if(instance !== undefined) {
1271
- instance.invoke('destroy');
1272
- }
1273
- module.initialize();
1274
- }
1275
- })
1276
- ;
1277
-
1278
- return (returnedValue !== undefined)
1279
- ? returnedValue
1280
- : this
1281
- ;
1282
-
1283
- };
1284
-
1285
- $.fn.slider.settings = {
1286
-
1287
- silent : false,
1288
- debug : false,
1289
- verbose : false,
1290
- performance : true,
1291
-
1292
- name : 'Slider',
1293
- namespace : 'slider',
1294
-
1295
- error : {
1296
- method : 'The method you called is not defined.',
1297
- notrange : 'This slider is not a range slider'
1298
- },
1299
-
1300
- metadata: {
1301
- thumbVal : 'thumbVal',
1302
- secondThumbVal : 'secondThumbVal'
1303
- },
1304
-
1305
- min : 0,
1306
- max : 20,
1307
- step : 1,
1308
- start : 0,
1309
- end : 20,
1310
- labelType : 'number',
1311
- showLabelTicks : false,
1312
- smooth : false,
1313
- autoAdjustLabels : true,
1314
- labelDistance : 100,
1315
- preventCrossover : true,
1316
- fireOnInit : false,
1317
- interpretLabel : false,
1318
-
1319
- //the decimal place to round to if step is undefined
1320
- decimalPlaces : 2,
1321
-
1322
- // page up/down multiplier. How many more times the steps to take on page up/down press
1323
- pageMultiplier : 2,
1324
-
1325
- selector: {
1326
-
1327
- },
1328
-
1329
- className : {
1330
- reversed : 'reversed',
1331
- disabled : 'disabled',
1332
- labeled : 'labeled',
1333
- ticked : 'ticked',
1334
- vertical : 'vertical',
1335
- range : 'range',
1336
- smooth : 'smooth'
1337
- },
1338
-
1339
- keys : {
1340
- pageUp : 33,
1341
- pageDown : 34,
1342
- leftArrow : 37,
1343
- upArrow : 38,
1344
- rightArrow : 39,
1345
- downArrow : 40
1346
- },
1347
-
1348
- labelTypes : {
1349
- number : 'number',
1350
- letter : 'letter'
1351
- },
1352
-
1353
- onChange : function(value, thumbVal, secondThumbVal){},
1354
- onMove : function(value, thumbVal, secondThumbVal){},
1355
- };
1356
-
1357
-
1358
- })( jQuery, window, document );
1333
+ onChange: function (value, thumbVal, secondThumbVal) {},
1334
+ onMove: function (value, thumbVal, secondThumbVal) {},
1335
+ };
1336
+ })(jQuery, window, document);