fomantic-ui 2.9.1-beta.2 → 2.9.1-beta.20

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