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
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.9.1-beta.2+f5a64f3 - State
2
+ * # Fomantic-UI 2.9.1-beta.20+d4987bf - State
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -8,704 +8,686 @@
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
-
15
- $.isFunction = $.isFunction || function(obj) {
16
- return typeof obj === "function" && typeof obj.nodeType !== "number";
17
- };
18
-
19
- window = (typeof window != 'undefined' && window.Math == Math)
20
- ? window
21
- : (typeof self != 'undefined' && self.Math == Math)
22
- ? self
23
- : Function('return this')()
24
- ;
25
-
26
- $.fn.state = function(parameters) {
27
- var
28
- $allModules = $(this),
29
-
30
- moduleSelector = $allModules.selector || '',
14
+ function isFunction(obj) {
15
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
16
+ }
31
17
 
32
- time = new Date().getTime(),
33
- performance = [],
18
+ window = (typeof window != 'undefined' && window.Math == Math)
19
+ ? window
20
+ : globalThis;
34
21
 
35
- query = arguments[0],
36
- methodInvoked = (typeof query == 'string'),
37
- queryArguments = [].slice.call(arguments, 1),
22
+ $.fn.state = function (parameters) {
23
+ var
24
+ $allModules = $(this),
38
25
 
39
- returnedValue
40
- ;
41
- $allModules
42
- .each(function() {
43
- var
44
- settings = ( $.isPlainObject(parameters) )
45
- ? $.extend(true, {}, $.fn.state.settings, parameters)
46
- : $.extend({}, $.fn.state.settings),
26
+ moduleSelector = $allModules.selector || '',
47
27
 
48
- error = settings.error,
49
- metadata = settings.metadata,
50
- className = settings.className,
51
- namespace = settings.namespace,
52
- states = settings.states,
53
- text = settings.text,
28
+ time = new Date().getTime(),
29
+ performance = [],
54
30
 
55
- eventNamespace = '.' + namespace,
56
- moduleNamespace = namespace + '-module',
31
+ query = arguments[0],
32
+ methodInvoked = (typeof query == 'string'),
33
+ queryArguments = [].slice.call(arguments, 1),
57
34
 
58
- $module = $(this),
35
+ returnedValue
36
+ ;
37
+ $allModules.each(function () {
38
+ var
39
+ settings = ($.isPlainObject(parameters))
40
+ ? $.extend(true, {}, $.fn.state.settings, parameters)
41
+ : $.extend({}, $.fn.state.settings),
59
42
 
60
- element = this,
61
- instance = $module.data(moduleNamespace),
43
+ error = settings.error,
44
+ metadata = settings.metadata,
45
+ className = settings.className,
46
+ namespace = settings.namespace,
47
+ states = settings.states,
48
+ text = settings.text,
62
49
 
63
- module
64
- ;
65
- module = {
50
+ eventNamespace = '.' + namespace,
51
+ moduleNamespace = namespace + '-module',
66
52
 
67
- initialize: function() {
68
- module.verbose('Initializing module');
53
+ $module = $(this),
69
54
 
70
- // allow module to guess desired state based on element
71
- if(settings.automatic) {
72
- module.add.defaults();
73
- }
55
+ element = this,
56
+ instance = $module.data(moduleNamespace),
74
57
 
75
- // bind events with delegated events
76
- if(settings.context && moduleSelector !== '') {
77
- ([window,document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context))
78
- .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)
79
- .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)
80
- .on(moduleSelector, 'click' + eventNamespace, module.toggle.state)
58
+ module
81
59
  ;
82
- }
83
- else {
84
- $module
85
- .on('mouseenter' + eventNamespace, module.change.text)
86
- .on('mouseleave' + eventNamespace, module.reset.text)
87
- .on('click' + eventNamespace, module.toggle.state)
88
- ;
89
- }
90
- module.instantiate();
91
- },
92
-
93
- instantiate: function() {
94
- module.verbose('Storing instance of module', module);
95
- instance = module;
96
- $module
97
- .data(moduleNamespace, module)
98
- ;
99
- },
100
-
101
- destroy: function() {
102
- module.verbose('Destroying previous module', instance);
103
- $module
104
- .off(eventNamespace)
105
- .removeData(moduleNamespace)
106
- ;
107
- },
60
+ module = {
61
+
62
+ initialize: function () {
63
+ module.verbose('Initializing module');
64
+
65
+ // allow module to guess desired state based on element
66
+ if (settings.automatic) {
67
+ module.add.defaults();
68
+ }
69
+
70
+ // bind events with delegated events
71
+ if (settings.context && moduleSelector !== '') {
72
+ ([window, document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context))
73
+ .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)
74
+ .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)
75
+ .on(moduleSelector, 'click' + eventNamespace, module.toggle.state)
76
+ ;
77
+ } else {
78
+ $module
79
+ .on('mouseenter' + eventNamespace, module.change.text)
80
+ .on('mouseleave' + eventNamespace, module.reset.text)
81
+ .on('click' + eventNamespace, module.toggle.state)
82
+ ;
83
+ }
84
+ module.instantiate();
85
+ },
86
+
87
+ instantiate: function () {
88
+ module.verbose('Storing instance of module', module);
89
+ instance = module;
90
+ $module
91
+ .data(moduleNamespace, module)
92
+ ;
93
+ },
94
+
95
+ destroy: function () {
96
+ module.verbose('Destroying previous module', instance);
97
+ $module
98
+ .off(eventNamespace)
99
+ .removeData(moduleNamespace)
100
+ ;
101
+ },
102
+
103
+ refresh: function () {
104
+ module.verbose('Refreshing selector cache');
105
+ $module = $(element);
106
+ },
107
+
108
+ add: {
109
+ defaults: function () {
110
+ var
111
+ userStates = parameters && $.isPlainObject(parameters.states)
112
+ ? parameters.states
113
+ : {}
114
+ ;
115
+ $.each(settings.defaults, function (type, typeStates) {
116
+ if (module.is[type] !== undefined && module.is[type]()) {
117
+ module.verbose('Adding default states', type, element);
118
+ $.extend(settings.states, typeStates, userStates);
119
+ }
120
+ });
121
+ },
122
+ },
123
+
124
+ is: {
125
+
126
+ active: function () {
127
+ return $module.hasClass(className.active);
128
+ },
129
+ loading: function () {
130
+ return $module.hasClass(className.loading);
131
+ },
132
+ inactive: function () {
133
+ return !($module.hasClass(className.active));
134
+ },
135
+ state: function (state) {
136
+ if (className[state] === undefined) {
137
+ return false;
138
+ }
139
+
140
+ return $module.hasClass(className[state]);
141
+ },
142
+
143
+ enabled: function () {
144
+ return !($module.is(settings.filter.active));
145
+ },
146
+ disabled: function () {
147
+ return ($module.is(settings.filter.active));
148
+ },
149
+ textEnabled: function () {
150
+ return !($module.is(settings.filter.text));
151
+ },
152
+
153
+ // definitions for automatic type detection
154
+ button: function () {
155
+ return $module.is('.button:not(a, .submit)');
156
+ },
157
+ input: function () {
158
+ return $module.is('input');
159
+ },
160
+ progress: function () {
161
+ return $module.is('.ui.progress');
162
+ },
163
+ },
164
+
165
+ allow: function (state) {
166
+ module.debug('Now allowing state', state);
167
+ states[state] = true;
168
+ },
169
+ disallow: function (state) {
170
+ module.debug('No longer allowing', state);
171
+ states[state] = false;
172
+ },
173
+
174
+ allows: function (state) {
175
+ return states[state] || false;
176
+ },
177
+
178
+ enable: function () {
179
+ $module.removeClass(className.disabled);
180
+ },
181
+
182
+ disable: function () {
183
+ $module.addClass(className.disabled);
184
+ },
185
+
186
+ setState: function (state) {
187
+ if (module.allows(state)) {
188
+ $module.addClass(className[state]);
189
+ }
190
+ },
191
+
192
+ removeState: function (state) {
193
+ if (module.allows(state)) {
194
+ $module.removeClass(className[state]);
195
+ }
196
+ },
197
+
198
+ toggle: {
199
+ state: function () {
200
+ var
201
+ apiRequest,
202
+ requestCancelled
203
+ ;
204
+ if (module.allows('active') && module.is.enabled()) {
205
+ module.refresh();
206
+ if ($.fn.api !== undefined) {
207
+ apiRequest = $module.api('get request');
208
+ requestCancelled = $module.api('was cancelled');
209
+ if (requestCancelled) {
210
+ module.debug('API Request cancelled by beforesend');
211
+ settings.activateTest = function () {
212
+ return false;
213
+ };
214
+ settings.deactivateTest = function () {
215
+ return false;
216
+ };
217
+ } else if (apiRequest) {
218
+ module.listenTo(apiRequest);
219
+
220
+ return;
221
+ }
222
+ }
223
+ module.change.state();
224
+ }
225
+ },
226
+ },
227
+
228
+ listenTo: function (apiRequest) {
229
+ module.debug('API request detected, waiting for state signal', apiRequest);
230
+ if (apiRequest) {
231
+ if (text.loading) {
232
+ module.update.text(text.loading);
233
+ }
234
+ $.when(apiRequest)
235
+ .then(function () {
236
+ if (apiRequest.state() == 'resolved') {
237
+ module.debug('API request succeeded');
238
+ settings.activateTest = function () {
239
+ return true;
240
+ };
241
+ settings.deactivateTest = function () {
242
+ return true;
243
+ };
244
+ } else {
245
+ module.debug('API request failed');
246
+ settings.activateTest = function () {
247
+ return false;
248
+ };
249
+ settings.deactivateTest = function () {
250
+ return false;
251
+ };
252
+ }
253
+ module.change.state();
254
+ })
255
+ ;
256
+ }
257
+ },
258
+
259
+ // checks whether active/inactive state can be given
260
+ change: {
261
+
262
+ state: function () {
263
+ module.debug('Determining state change direction');
264
+ // inactive to active change
265
+ if (module.is.inactive()) {
266
+ module.activate();
267
+ } else {
268
+ module.deactivate();
269
+ }
270
+ if (settings.sync) {
271
+ module.sync();
272
+ }
273
+ settings.onChange.call(element);
274
+ },
275
+
276
+ text: function () {
277
+ if (module.is.textEnabled()) {
278
+ if (module.is.disabled()) {
279
+ module.verbose('Changing text to disabled text', text.hover);
280
+ module.update.text(text.disabled);
281
+ } else if (module.is.active()) {
282
+ if (text.hover) {
283
+ module.verbose('Changing text to hover text', text.hover);
284
+ module.update.text(text.hover);
285
+ } else if (text.deactivate) {
286
+ module.verbose('Changing text to deactivating text', text.deactivate);
287
+ module.update.text(text.deactivate);
288
+ }
289
+ } else {
290
+ if (text.hover) {
291
+ module.verbose('Changing text to hover text', text.hover);
292
+ module.update.text(text.hover);
293
+ } else if (text.activate) {
294
+ module.verbose('Changing text to activating text', text.activate);
295
+ module.update.text(text.activate);
296
+ }
297
+ }
298
+ }
299
+ },
300
+
301
+ },
302
+
303
+ activate: function () {
304
+ if (settings.activateTest.call(element)) {
305
+ module.debug('Setting state to active');
306
+ $module
307
+ .addClass(className.active)
308
+ ;
309
+ module.update.text(text.active);
310
+ settings.onActivate.call(element);
311
+ }
312
+ },
313
+
314
+ deactivate: function () {
315
+ if (settings.deactivateTest.call(element)) {
316
+ module.debug('Setting state to inactive');
317
+ $module
318
+ .removeClass(className.active)
319
+ ;
320
+ module.update.text(text.inactive);
321
+ settings.onDeactivate.call(element);
322
+ }
323
+ },
324
+
325
+ sync: function () {
326
+ module.verbose('Syncing other buttons to current state');
327
+ if (module.is.active()) {
328
+ $allModules
329
+ .not($module)
330
+ .state('activate')
331
+ ;
332
+ } else {
333
+ $allModules
334
+ .not($module)
335
+ .state('deactivate')
336
+ ;
337
+ }
338
+ },
339
+
340
+ get: {
341
+ text: function () {
342
+ return (settings.selector.text)
343
+ ? $module.find(settings.selector.text).text()
344
+ : $module.html();
345
+ },
346
+ textFor: function (state) {
347
+ return text[state] || false;
348
+ },
349
+ },
350
+
351
+ flash: {
352
+ text: function (text, duration, callback) {
353
+ var
354
+ previousText = module.get.text();
355
+ module.debug('Flashing text message', text, duration);
356
+ text = text || settings.text.flash;
357
+ duration = duration || settings.flashDuration;
358
+ callback = callback || function () {};
359
+ module.update.text(text);
360
+ setTimeout(function () {
361
+ module.update.text(previousText);
362
+ callback.call(element);
363
+ }, duration);
364
+ },
365
+ },
366
+
367
+ reset: {
368
+ // on mouseout sets text to previous value
369
+ text: function () {
370
+ var
371
+ activeText = text.active || $module.data(metadata.storedText),
372
+ inactiveText = text.inactive || $module.data(metadata.storedText)
373
+ ;
374
+ if (module.is.textEnabled()) {
375
+ if (module.is.active() && activeText) {
376
+ module.verbose('Resetting active text', activeText);
377
+ module.update.text(activeText);
378
+ } else if (inactiveText) {
379
+ module.verbose('Resetting inactive text', activeText);
380
+ module.update.text(inactiveText);
381
+ }
382
+ }
383
+ },
384
+ },
385
+
386
+ update: {
387
+ text: function (text) {
388
+ var
389
+ currentText = module.get.text();
390
+ if (text && text !== currentText) {
391
+ module.debug('Updating text', text);
392
+ if (settings.selector.text) {
393
+ $module
394
+ .data(metadata.storedText, text)
395
+ .find(settings.selector.text)
396
+ .text(text)
397
+ ;
398
+ } else {
399
+ $module
400
+ .data(metadata.storedText, text)
401
+ .html(text)
402
+ ;
403
+ }
404
+ } else {
405
+ module.debug('Text is already set, ignoring update', text);
406
+ }
407
+ },
408
+ },
409
+
410
+ setting: function (name, value) {
411
+ module.debug('Changing setting', name, value);
412
+ if ($.isPlainObject(name)) {
413
+ $.extend(true, settings, name);
414
+ } else if (value !== undefined) {
415
+ if ($.isPlainObject(settings[name])) {
416
+ $.extend(true, settings[name], value);
417
+ } else {
418
+ settings[name] = value;
419
+ }
420
+ } else {
421
+ return settings[name];
422
+ }
423
+ },
424
+ internal: function (name, value) {
425
+ if ($.isPlainObject(name)) {
426
+ $.extend(true, module, name);
427
+ } else if (value !== undefined) {
428
+ module[name] = value;
429
+ } else {
430
+ return module[name];
431
+ }
432
+ },
433
+ debug: function () {
434
+ if (!settings.silent && settings.debug) {
435
+ if (settings.performance) {
436
+ module.performance.log(arguments);
437
+ } else {
438
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
439
+ module.debug.apply(console, arguments);
440
+ }
441
+ }
442
+ },
443
+ verbose: function () {
444
+ if (!settings.silent && settings.verbose && settings.debug) {
445
+ if (settings.performance) {
446
+ module.performance.log(arguments);
447
+ } else {
448
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
449
+ module.verbose.apply(console, arguments);
450
+ }
451
+ }
452
+ },
453
+ error: function () {
454
+ if (!settings.silent) {
455
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
456
+ module.error.apply(console, arguments);
457
+ }
458
+ },
459
+ performance: {
460
+ log: function (message) {
461
+ var
462
+ currentTime,
463
+ executionTime,
464
+ previousTime
465
+ ;
466
+ if (settings.performance) {
467
+ currentTime = new Date().getTime();
468
+ previousTime = time || currentTime;
469
+ executionTime = currentTime - previousTime;
470
+ time = currentTime;
471
+ performance.push({
472
+ Name: message[0],
473
+ Arguments: [].slice.call(message, 1) || '',
474
+ Element: element,
475
+ 'Execution Time': executionTime,
476
+ });
477
+ }
478
+ clearTimeout(module.performance.timer);
479
+ module.performance.timer = setTimeout(module.performance.display, 500);
480
+ },
481
+ display: function () {
482
+ var
483
+ title = settings.name + ':',
484
+ totalTime = 0
485
+ ;
486
+ time = false;
487
+ clearTimeout(module.performance.timer);
488
+ $.each(performance, function (index, data) {
489
+ totalTime += data['Execution Time'];
490
+ });
491
+ title += ' ' + totalTime + 'ms';
492
+ if (moduleSelector) {
493
+ title += ' \'' + moduleSelector + '\'';
494
+ }
495
+ if ((console.group !== undefined || console.table !== undefined) && performance.length > 0) {
496
+ console.groupCollapsed(title);
497
+ if (console.table) {
498
+ console.table(performance);
499
+ } else {
500
+ $.each(performance, function (index, data) {
501
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
502
+ });
503
+ }
504
+ console.groupEnd();
505
+ }
506
+ performance = [];
507
+ },
508
+ },
509
+ invoke: function (query, passedArguments, context) {
510
+ var
511
+ object = instance,
512
+ maxDepth,
513
+ found,
514
+ response
515
+ ;
516
+ passedArguments = passedArguments || queryArguments;
517
+ context = context || element;
518
+ if (typeof query == 'string' && object !== undefined) {
519
+ query = query.split(/[\. ]/);
520
+ maxDepth = query.length - 1;
521
+ $.each(query, function (depth, value) {
522
+ var camelCaseValue = (depth != maxDepth)
523
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
524
+ : query
525
+ ;
526
+ if ($.isPlainObject(object[camelCaseValue]) && (depth != maxDepth)) {
527
+ object = object[camelCaseValue];
528
+ } else if (object[camelCaseValue] !== undefined) {
529
+ found = object[camelCaseValue];
530
+
531
+ return false;
532
+ } else if ($.isPlainObject(object[value]) && (depth != maxDepth)) {
533
+ object = object[value];
534
+ } else if (object[value] !== undefined) {
535
+ found = object[value];
536
+
537
+ return false;
538
+ } else {
539
+ module.error(error.method, query);
540
+
541
+ return false;
542
+ }
543
+ });
544
+ }
545
+ if (isFunction(found)) {
546
+ response = found.apply(context, passedArguments);
547
+ } else if (found !== undefined) {
548
+ response = found;
549
+ }
550
+ if (Array.isArray(returnedValue)) {
551
+ returnedValue.push(response);
552
+ } else if (returnedValue !== undefined) {
553
+ returnedValue = [returnedValue, response];
554
+ } else if (response !== undefined) {
555
+ returnedValue = response;
556
+ }
557
+
558
+ return found;
559
+ },
560
+ };
561
+
562
+ if (methodInvoked) {
563
+ if (instance === undefined) {
564
+ module.initialize();
565
+ }
566
+ module.invoke(query);
567
+ } else {
568
+ if (instance !== undefined) {
569
+ instance.invoke('destroy');
570
+ }
571
+ module.initialize();
572
+ }
573
+ });
108
574
 
109
- refresh: function() {
110
- module.verbose('Refreshing selector cache');
111
- $module = $(element);
112
- },
575
+ return (returnedValue !== undefined)
576
+ ? returnedValue
577
+ : this;
578
+ };
113
579
 
114
- add: {
115
- defaults: function() {
116
- var
117
- userStates = parameters && $.isPlainObject(parameters.states)
118
- ? parameters.states
119
- : {}
120
- ;
121
- $.each(settings.defaults, function(type, typeStates) {
122
- if( module.is[type] !== undefined && module.is[type]() ) {
123
- module.verbose('Adding default states', type, element);
124
- $.extend(settings.states, typeStates, userStates);
125
- }
126
- });
127
- }
128
- },
580
+ $.fn.state.settings = {
129
581
 
130
- is: {
131
-
132
- active: function() {
133
- return $module.hasClass(className.active);
134
- },
135
- loading: function() {
136
- return $module.hasClass(className.loading);
137
- },
138
- inactive: function() {
139
- return !( $module.hasClass(className.active) );
140
- },
141
- state: function(state) {
142
- if(className[state] === undefined) {
143
- return false;
144
- }
145
- return $module.hasClass( className[state] );
146
- },
147
-
148
- enabled: function() {
149
- return !( $module.is(settings.filter.active) );
150
- },
151
- disabled: function() {
152
- return ( $module.is(settings.filter.active) );
153
- },
154
- textEnabled: function() {
155
- return !( $module.is(settings.filter.text) );
156
- },
157
-
158
- // definitions for automatic type detection
159
- button: function() {
160
- return $module.is('.button:not(a, .submit)');
161
- },
162
- input: function() {
163
- return $module.is('input');
164
- },
165
- progress: function() {
166
- return $module.is('.ui.progress');
167
- }
168
- },
582
+ // module info
583
+ name: 'State',
169
584
 
170
- allow: function(state) {
171
- module.debug('Now allowing state', state);
172
- states[state] = true;
173
- },
174
- disallow: function(state) {
175
- module.debug('No longer allowing', state);
176
- states[state] = false;
177
- },
585
+ // debug output
586
+ debug: false,
178
587
 
179
- allows: function(state) {
180
- return states[state] || false;
181
- },
588
+ // verbose debug output
589
+ verbose: false,
182
590
 
183
- enable: function() {
184
- $module.removeClass(className.disabled);
185
- },
591
+ // namespace for events
592
+ namespace: 'state',
186
593
 
187
- disable: function() {
188
- $module.addClass(className.disabled);
189
- },
594
+ // debug data includes performance
595
+ performance: true,
190
596
 
191
- setState: function(state) {
192
- if(module.allows(state)) {
193
- $module.addClass( className[state] );
194
- }
195
- },
597
+ // callback occurs on state change
598
+ onActivate: function () {},
599
+ onDeactivate: function () {},
600
+ onChange: function () {},
196
601
 
197
- removeState: function(state) {
198
- if(module.allows(state)) {
199
- $module.removeClass( className[state] );
200
- }
602
+ // state test functions
603
+ activateTest: function () {
604
+ return true;
201
605
  },
202
-
203
- toggle: {
204
- state: function() {
205
- var
206
- apiRequest,
207
- requestCancelled
208
- ;
209
- if( module.allows('active') && module.is.enabled() ) {
210
- module.refresh();
211
- if($.fn.api !== undefined) {
212
- apiRequest = $module.api('get request');
213
- requestCancelled = $module.api('was cancelled');
214
- if( requestCancelled ) {
215
- module.debug('API Request cancelled by beforesend');
216
- settings.activateTest = function(){ return false; };
217
- settings.deactivateTest = function(){ return false; };
218
- }
219
- else if(apiRequest) {
220
- module.listenTo(apiRequest);
221
- return;
222
- }
223
- }
224
- module.change.state();
225
- }
226
- }
606
+ deactivateTest: function () {
607
+ return true;
227
608
  },
228
609
 
229
- listenTo: function(apiRequest) {
230
- module.debug('API request detected, waiting for state signal', apiRequest);
231
- if(apiRequest) {
232
- if(text.loading) {
233
- module.update.text(text.loading);
234
- }
235
- $.when(apiRequest)
236
- .then(function() {
237
- if(apiRequest.state() == 'resolved') {
238
- module.debug('API request succeeded');
239
- settings.activateTest = function(){ return true; };
240
- settings.deactivateTest = function(){ return true; };
241
- }
242
- else {
243
- module.debug('API request failed');
244
- settings.activateTest = function(){ return false; };
245
- settings.deactivateTest = function(){ return false; };
246
- }
247
- module.change.state();
248
- })
249
- ;
250
- }
251
- },
610
+ // whether to automatically map default states
611
+ automatic: true,
252
612
 
253
- // checks whether active/inactive state can be given
254
- change: {
613
+ // activate / deactivate changes all elements instantiated at same time
614
+ sync: false,
255
615
 
256
- state: function() {
257
- module.debug('Determining state change direction');
258
- // inactive to active change
259
- if( module.is.inactive() ) {
260
- module.activate();
261
- }
262
- else {
263
- module.deactivate();
264
- }
265
- if(settings.sync) {
266
- module.sync();
267
- }
268
- settings.onChange.call(element);
269
- },
270
-
271
- text: function() {
272
- if( module.is.textEnabled() ) {
273
- if(module.is.disabled() ) {
274
- module.verbose('Changing text to disabled text', text.hover);
275
- module.update.text(text.disabled);
276
- }
277
- else if( module.is.active() ) {
278
- if(text.hover) {
279
- module.verbose('Changing text to hover text', text.hover);
280
- module.update.text(text.hover);
281
- }
282
- else if(text.deactivate) {
283
- module.verbose('Changing text to deactivating text', text.deactivate);
284
- module.update.text(text.deactivate);
285
- }
286
- }
287
- else {
288
- if(text.hover) {
289
- module.verbose('Changing text to hover text', text.hover);
290
- module.update.text(text.hover);
291
- }
292
- else if(text.activate){
293
- module.verbose('Changing text to activating text', text.activate);
294
- module.update.text(text.activate);
295
- }
296
- }
297
- }
298
- }
616
+ // default flash text duration, used for temporarily changing text of an element
617
+ flashDuration: 1000,
299
618
 
619
+ // selector filter
620
+ filter: {
621
+ text: '.loading, .disabled',
622
+ active: '.disabled',
300
623
  },
301
624
 
302
- activate: function() {
303
- if( settings.activateTest.call(element) ) {
304
- module.debug('Setting state to active');
305
- $module
306
- .addClass(className.active)
307
- ;
308
- module.update.text(text.active);
309
- settings.onActivate.call(element);
310
- }
311
- },
625
+ context: false,
312
626
 
313
- deactivate: function() {
314
- if( settings.deactivateTest.call(element) ) {
315
- module.debug('Setting state to inactive');
316
- $module
317
- .removeClass(className.active)
318
- ;
319
- module.update.text(text.inactive);
320
- settings.onDeactivate.call(element);
321
- }
627
+ // error
628
+ error: {
629
+ beforeSend: 'The before send function has cancelled state change',
630
+ method: 'The method you called is not defined.',
322
631
  },
323
632
 
324
- sync: function() {
325
- module.verbose('Syncing other buttons to current state');
326
- if( module.is.active() ) {
327
- $allModules
328
- .not($module)
329
- .state('activate');
330
- }
331
- else {
332
- $allModules
333
- .not($module)
334
- .state('deactivate')
335
- ;
336
- }
633
+ // metadata
634
+ metadata: {
635
+ promise: 'promise',
636
+ storedText: 'stored-text',
337
637
  },
338
638
 
339
- get: {
340
- text: function() {
341
- return (settings.selector.text)
342
- ? $module.find(settings.selector.text).text()
343
- : $module.html()
344
- ;
345
- },
346
- textFor: function(state) {
347
- return text[state] || false;
348
- }
639
+ // change class on state
640
+ className: {
641
+ active: 'active',
642
+ disabled: 'disabled',
643
+ error: 'error',
644
+ loading: 'loading',
645
+ success: 'success',
646
+ warning: 'warning',
349
647
  },
350
648
 
351
- flash: {
352
- text: function(text, duration, callback) {
353
- var
354
- previousText = module.get.text()
355
- ;
356
- module.debug('Flashing text message', text, duration);
357
- text = text || settings.text.flash;
358
- duration = duration || settings.flashDuration;
359
- callback = callback || function() {};
360
- module.update.text(text);
361
- setTimeout(function(){
362
- module.update.text(previousText);
363
- callback.call(element);
364
- }, duration);
365
- }
649
+ selector: {
650
+ // selector for text node
651
+ text: false,
366
652
  },
367
653
 
368
- reset: {
369
- // on mouseout sets text to previous value
370
- text: function() {
371
- var
372
- activeText = text.active || $module.data(metadata.storedText),
373
- inactiveText = text.inactive || $module.data(metadata.storedText)
374
- ;
375
- if( module.is.textEnabled() ) {
376
- if( module.is.active() && activeText) {
377
- module.verbose('Resetting active text', activeText);
378
- module.update.text(activeText);
379
- }
380
- else if(inactiveText) {
381
- module.verbose('Resetting inactive text', activeText);
382
- module.update.text(inactiveText);
383
- }
384
- }
385
- }
654
+ defaults: {
655
+ input: {
656
+ disabled: true,
657
+ loading: true,
658
+ active: true,
659
+ },
660
+ button: {
661
+ disabled: true,
662
+ loading: true,
663
+ active: true,
664
+ },
665
+ progress: {
666
+ active: true,
667
+ success: true,
668
+ warning: true,
669
+ error: true,
670
+ },
386
671
  },
387
672
 
388
- update: {
389
- text: function(text) {
390
- var
391
- currentText = module.get.text()
392
- ;
393
- if(text && text !== currentText) {
394
- module.debug('Updating text', text);
395
- if(settings.selector.text) {
396
- $module
397
- .data(metadata.storedText, text)
398
- .find(settings.selector.text)
399
- .text(text)
400
- ;
401
- }
402
- else {
403
- $module
404
- .data(metadata.storedText, text)
405
- .html(text)
406
- ;
407
- }
408
- }
409
- else {
410
- module.debug('Text is already set, ignoring update', text);
411
- }
412
- }
673
+ states: {
674
+ active: true,
675
+ disabled: true,
676
+ error: true,
677
+ loading: true,
678
+ success: true,
679
+ warning: true,
413
680
  },
414
681
 
415
- setting: function(name, value) {
416
- module.debug('Changing setting', name, value);
417
- if( $.isPlainObject(name) ) {
418
- $.extend(true, settings, name);
419
- }
420
- else if(value !== undefined) {
421
- if($.isPlainObject(settings[name])) {
422
- $.extend(true, settings[name], value);
423
- }
424
- else {
425
- settings[name] = value;
426
- }
427
- }
428
- else {
429
- return settings[name];
430
- }
431
- },
432
- internal: function(name, value) {
433
- if( $.isPlainObject(name) ) {
434
- $.extend(true, module, name);
435
- }
436
- else if(value !== undefined) {
437
- module[name] = value;
438
- }
439
- else {
440
- return module[name];
441
- }
682
+ text: {
683
+ disabled: false,
684
+ flash: false,
685
+ hover: false,
686
+ active: false,
687
+ inactive: false,
688
+ activate: false,
689
+ deactivate: false,
442
690
  },
443
- debug: function() {
444
- if(!settings.silent && settings.debug) {
445
- if(settings.performance) {
446
- module.performance.log(arguments);
447
- }
448
- else {
449
- module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
450
- module.debug.apply(console, arguments);
451
- }
452
- }
453
- },
454
- verbose: function() {
455
- if(!settings.silent && settings.verbose && settings.debug) {
456
- if(settings.performance) {
457
- module.performance.log(arguments);
458
- }
459
- else {
460
- module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
461
- module.verbose.apply(console, arguments);
462
- }
463
- }
464
- },
465
- error: function() {
466
- if(!settings.silent) {
467
- module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
468
- module.error.apply(console, arguments);
469
- }
470
- },
471
- performance: {
472
- log: function(message) {
473
- var
474
- currentTime,
475
- executionTime,
476
- previousTime
477
- ;
478
- if(settings.performance) {
479
- currentTime = new Date().getTime();
480
- previousTime = time || currentTime;
481
- executionTime = currentTime - previousTime;
482
- time = currentTime;
483
- performance.push({
484
- 'Name' : message[0],
485
- 'Arguments' : [].slice.call(message, 1) || '',
486
- 'Element' : element,
487
- 'Execution Time' : executionTime
488
- });
489
- }
490
- clearTimeout(module.performance.timer);
491
- module.performance.timer = setTimeout(module.performance.display, 500);
492
- },
493
- display: function() {
494
- var
495
- title = settings.name + ':',
496
- totalTime = 0
497
- ;
498
- time = false;
499
- clearTimeout(module.performance.timer);
500
- $.each(performance, function(index, data) {
501
- totalTime += data['Execution Time'];
502
- });
503
- title += ' ' + totalTime + 'ms';
504
- if(moduleSelector) {
505
- title += ' \'' + moduleSelector + '\'';
506
- }
507
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
508
- console.groupCollapsed(title);
509
- if(console.table) {
510
- console.table(performance);
511
- }
512
- else {
513
- $.each(performance, function(index, data) {
514
- console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
515
- });
516
- }
517
- console.groupEnd();
518
- }
519
- performance = [];
520
- }
521
- },
522
- invoke: function(query, passedArguments, context) {
523
- var
524
- object = instance,
525
- maxDepth,
526
- found,
527
- response
528
- ;
529
- passedArguments = passedArguments || queryArguments;
530
- context = context || element;
531
- if(typeof query == 'string' && object !== undefined) {
532
- query = query.split(/[\. ]/);
533
- maxDepth = query.length - 1;
534
- $.each(query, function(depth, value) {
535
- var camelCaseValue = (depth != maxDepth)
536
- ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
537
- : query
538
- ;
539
- if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
540
- object = object[camelCaseValue];
541
- }
542
- else if( object[camelCaseValue] !== undefined ) {
543
- found = object[camelCaseValue];
544
- return false;
545
- }
546
- else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
547
- object = object[value];
548
- }
549
- else if( object[value] !== undefined ) {
550
- found = object[value];
551
- return false;
552
- }
553
- else {
554
- module.error(error.method, query);
555
- return false;
556
- }
557
- });
558
- }
559
- if ( $.isFunction( found ) ) {
560
- response = found.apply(context, passedArguments);
561
- }
562
- else if(found !== undefined) {
563
- response = found;
564
- }
565
- if(Array.isArray(returnedValue)) {
566
- returnedValue.push(response);
567
- }
568
- else if(returnedValue !== undefined) {
569
- returnedValue = [returnedValue, response];
570
- }
571
- else if(response !== undefined) {
572
- returnedValue = response;
573
- }
574
- return found;
575
- }
576
- };
577
-
578
- if(methodInvoked) {
579
- if(instance === undefined) {
580
- module.initialize();
581
- }
582
- module.invoke(query);
583
- }
584
- else {
585
- if(instance !== undefined) {
586
- instance.invoke('destroy');
587
- }
588
- module.initialize();
589
- }
590
- })
591
- ;
592
-
593
- return (returnedValue !== undefined)
594
- ? returnedValue
595
- : this
596
- ;
597
- };
598
-
599
- $.fn.state.settings = {
600
-
601
- // module info
602
- name : 'State',
603
-
604
- // debug output
605
- debug : false,
606
-
607
- // verbose debug output
608
- verbose : false,
609
-
610
- // namespace for events
611
- namespace : 'state',
612
-
613
- // debug data includes performance
614
- performance : true,
615
-
616
- // callback occurs on state change
617
- onActivate : function() {},
618
- onDeactivate : function() {},
619
- onChange : function() {},
620
-
621
- // state test functions
622
- activateTest : function() { return true; },
623
- deactivateTest : function() { return true; },
624
-
625
- // whether to automatically map default states
626
- automatic : true,
627
-
628
- // activate / deactivate changes all elements instantiated at same time
629
- sync : false,
630
-
631
- // default flash text duration, used for temporarily changing text of an element
632
- flashDuration : 1000,
633
-
634
- // selector filter
635
- filter : {
636
- text : '.loading, .disabled',
637
- active : '.disabled'
638
- },
639
-
640
- context : false,
641
-
642
- // error
643
- error: {
644
- beforeSend : 'The before send function has cancelled state change',
645
- method : 'The method you called is not defined.'
646
- },
647
-
648
- // metadata
649
- metadata: {
650
- promise : 'promise',
651
- storedText : 'stored-text'
652
- },
653
-
654
- // change class on state
655
- className: {
656
- active : 'active',
657
- disabled : 'disabled',
658
- error : 'error',
659
- loading : 'loading',
660
- success : 'success',
661
- warning : 'warning'
662
- },
663
-
664
- selector: {
665
- // selector for text node
666
- text: false
667
- },
668
-
669
- defaults : {
670
- input: {
671
- disabled : true,
672
- loading : true,
673
- active : true
674
- },
675
- button: {
676
- disabled : true,
677
- loading : true,
678
- active : true,
679
- },
680
- progress: {
681
- active : true,
682
- success : true,
683
- warning : true,
684
- error : true
685
- }
686
- },
687
-
688
- states : {
689
- active : true,
690
- disabled : true,
691
- error : true,
692
- loading : true,
693
- success : true,
694
- warning : true
695
- },
696
-
697
- text : {
698
- disabled : false,
699
- flash : false,
700
- hover : false,
701
- active : false,
702
- inactive : false,
703
- activate : false,
704
- deactivate : false
705
- }
706
-
707
- };
708
-
709
-
710
691
 
711
- })( jQuery, window, document );
692
+ };
693
+ })(jQuery, window, document);