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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/.eslintrc.js +109 -0
  2. package/.github/workflows/ci.yml +13 -3
  3. package/dist/components/accordion.css +1 -1
  4. package/dist/components/accordion.js +571 -598
  5. package/dist/components/accordion.min.css +1 -1
  6. package/dist/components/accordion.min.js +1 -1
  7. package/dist/components/ad.css +1 -1
  8. package/dist/components/ad.min.css +1 -1
  9. package/dist/components/api.js +1164 -1186
  10. package/dist/components/api.min.js +1 -1
  11. package/dist/components/breadcrumb.css +1 -1
  12. package/dist/components/breadcrumb.min.css +1 -1
  13. package/dist/components/button.css +1 -1
  14. package/dist/components/button.min.css +1 -1
  15. package/dist/components/calendar.css +1 -1
  16. package/dist/components/calendar.js +1897 -1818
  17. package/dist/components/calendar.min.css +1 -1
  18. package/dist/components/calendar.min.js +1 -1
  19. package/dist/components/card.css +1 -1
  20. package/dist/components/card.min.css +1 -1
  21. package/dist/components/checkbox.css +1 -1
  22. package/dist/components/checkbox.js +844 -841
  23. package/dist/components/checkbox.min.css +1 -1
  24. package/dist/components/checkbox.min.js +1 -1
  25. package/dist/components/comment.css +1 -1
  26. package/dist/components/comment.min.css +1 -1
  27. package/dist/components/container.css +3 -1
  28. package/dist/components/container.min.css +2 -2
  29. package/dist/components/dimmer.css +1 -1
  30. package/dist/components/dimmer.js +710 -737
  31. package/dist/components/dimmer.min.css +1 -1
  32. package/dist/components/dimmer.min.js +1 -1
  33. package/dist/components/divider.css +1 -1
  34. package/dist/components/divider.min.css +1 -1
  35. package/dist/components/dropdown.css +11 -8
  36. package/dist/components/dropdown.js +4163 -4238
  37. package/dist/components/dropdown.min.css +2 -2
  38. package/dist/components/dropdown.min.js +1 -1
  39. package/dist/components/embed.css +1 -1
  40. package/dist/components/embed.js +653 -675
  41. package/dist/components/embed.min.css +1 -1
  42. package/dist/components/embed.min.js +1 -1
  43. package/dist/components/feed.css +1 -1
  44. package/dist/components/feed.min.css +1 -1
  45. package/dist/components/flag.css +1 -1
  46. package/dist/components/flag.min.css +1 -1
  47. package/dist/components/flyout.css +6 -3
  48. package/dist/components/flyout.js +1466 -1467
  49. package/dist/components/flyout.min.css +2 -2
  50. package/dist/components/flyout.min.js +1 -1
  51. package/dist/components/form.css +1 -1
  52. package/dist/components/form.js +1981 -2004
  53. package/dist/components/form.min.css +1 -1
  54. package/dist/components/form.min.js +1 -1
  55. package/dist/components/grid.css +1 -1
  56. package/dist/components/grid.min.css +1 -1
  57. package/dist/components/header.css +1 -1
  58. package/dist/components/header.min.css +1 -1
  59. package/dist/components/icon.css +1 -1
  60. package/dist/components/icon.min.css +1 -1
  61. package/dist/components/image.css +1 -1
  62. package/dist/components/image.min.css +1 -1
  63. package/dist/components/input.css +1 -1
  64. package/dist/components/input.min.css +1 -1
  65. package/dist/components/item.css +1 -1
  66. package/dist/components/item.min.css +1 -1
  67. package/dist/components/label.css +1 -1
  68. package/dist/components/label.min.css +1 -1
  69. package/dist/components/list.css +1 -1
  70. package/dist/components/list.min.css +1 -1
  71. package/dist/components/loader.css +1 -1
  72. package/dist/components/loader.min.css +1 -1
  73. package/dist/components/message.css +1 -1
  74. package/dist/components/message.min.css +1 -1
  75. package/dist/components/modal.css +7 -1
  76. package/dist/components/modal.js +1493 -1487
  77. package/dist/components/modal.min.css +2 -2
  78. package/dist/components/modal.min.js +1 -1
  79. package/dist/components/nag.css +1 -1
  80. package/dist/components/nag.js +520 -529
  81. package/dist/components/nag.min.css +1 -1
  82. package/dist/components/nag.min.js +1 -1
  83. package/dist/components/placeholder.css +1 -1
  84. package/dist/components/placeholder.min.css +1 -1
  85. package/dist/components/popup.css +1 -1
  86. package/dist/components/popup.js +1439 -1456
  87. package/dist/components/popup.min.css +1 -1
  88. package/dist/components/popup.min.js +1 -1
  89. package/dist/components/progress.css +1 -1
  90. package/dist/components/progress.js +971 -997
  91. package/dist/components/progress.min.css +1 -1
  92. package/dist/components/progress.min.js +1 -1
  93. package/dist/components/rail.css +1 -1
  94. package/dist/components/rail.min.css +1 -1
  95. package/dist/components/rating.css +1 -1
  96. package/dist/components/rating.js +508 -524
  97. package/dist/components/rating.min.css +1 -1
  98. package/dist/components/rating.min.js +1 -1
  99. package/dist/components/reset.css +1 -1
  100. package/dist/components/reset.min.css +1 -1
  101. package/dist/components/reveal.css +1 -1
  102. package/dist/components/reveal.min.css +1 -1
  103. package/dist/components/search.css +3 -1
  104. package/dist/components/search.js +1500 -1534
  105. package/dist/components/search.min.css +2 -2
  106. package/dist/components/search.min.js +1 -1
  107. package/dist/components/segment.css +3 -1
  108. package/dist/components/segment.min.css +2 -2
  109. package/dist/components/shape.css +1 -1
  110. package/dist/components/shape.js +794 -809
  111. package/dist/components/shape.min.css +1 -1
  112. package/dist/components/shape.min.js +1 -1
  113. package/dist/components/sidebar.css +3 -1
  114. package/dist/components/sidebar.js +1079 -1104
  115. package/dist/components/sidebar.min.css +2 -2
  116. package/dist/components/sidebar.min.js +1 -1
  117. package/dist/components/site.css +1 -1
  118. package/dist/components/site.js +457 -472
  119. package/dist/components/site.min.css +1 -1
  120. package/dist/components/site.min.js +1 -1
  121. package/dist/components/slider.js +1289 -1311
  122. package/dist/components/slider.min.js +1 -1
  123. package/dist/components/state.js +641 -657
  124. package/dist/components/state.min.js +1 -1
  125. package/dist/components/statistic.css +1 -1
  126. package/dist/components/statistic.min.css +1 -1
  127. package/dist/components/step.css +1 -1
  128. package/dist/components/step.min.css +1 -1
  129. package/dist/components/sticky.css +1 -1
  130. package/dist/components/sticky.js +859 -903
  131. package/dist/components/sticky.min.css +1 -1
  132. package/dist/components/sticky.min.js +1 -1
  133. package/dist/components/tab.css +1 -1
  134. package/dist/components/tab.js +923 -963
  135. package/dist/components/tab.min.css +1 -1
  136. package/dist/components/tab.min.js +1 -1
  137. package/dist/components/table.css +5 -1
  138. package/dist/components/table.min.css +2 -2
  139. package/dist/components/text.css +1 -1
  140. package/dist/components/text.min.css +1 -1
  141. package/dist/components/toast.css +1 -1
  142. package/dist/components/toast.js +889 -891
  143. package/dist/components/toast.min.css +1 -1
  144. package/dist/components/toast.min.js +1 -1
  145. package/dist/components/transition.css +1 -1
  146. package/dist/components/transition.js +1043 -1077
  147. package/dist/components/transition.min.css +1 -1
  148. package/dist/components/transition.min.js +1 -1
  149. package/dist/components/visibility.js +1222 -1244
  150. package/dist/components/visibility.min.js +1 -1
  151. package/dist/semantic.css +84 -60
  152. package/dist/semantic.js +29033 -29479
  153. package/dist/semantic.min.css +2 -2
  154. package/dist/semantic.min.js +1 -1
  155. package/examples/assets/show-examples.js +13 -13
  156. package/gulpfile.js +9 -10
  157. package/package.json +5 -2
  158. package/scripts/nightly-version.js +81 -75
  159. package/src/definitions/behaviors/api.js +1163 -1185
  160. package/src/definitions/behaviors/form.js +1980 -2003
  161. package/src/definitions/behaviors/state.js +647 -663
  162. package/src/definitions/behaviors/visibility.js +1221 -1243
  163. package/src/definitions/collections/table.less +2 -0
  164. package/src/definitions/elements/container.less +1 -0
  165. package/src/definitions/elements/segment.less +1 -0
  166. package/src/definitions/globals/site.js +456 -471
  167. package/src/definitions/modules/accordion.js +570 -597
  168. package/src/definitions/modules/calendar.js +1896 -1817
  169. package/src/definitions/modules/checkbox.js +849 -846
  170. package/src/definitions/modules/dimmer.js +709 -736
  171. package/src/definitions/modules/dropdown.js +4162 -4237
  172. package/src/definitions/modules/dropdown.less +5 -8
  173. package/src/definitions/modules/embed.js +652 -674
  174. package/src/definitions/modules/flyout.js +1465 -1466
  175. package/src/definitions/modules/flyout.less +15 -12
  176. package/src/definitions/modules/modal.js +1492 -1486
  177. package/src/definitions/modules/modal.less +3 -0
  178. package/src/definitions/modules/nag.js +519 -528
  179. package/src/definitions/modules/popup.js +1438 -1455
  180. package/src/definitions/modules/progress.js +970 -996
  181. package/src/definitions/modules/rating.js +507 -523
  182. package/src/definitions/modules/search.js +1499 -1533
  183. package/src/definitions/modules/search.less +1 -0
  184. package/src/definitions/modules/shape.js +801 -816
  185. package/src/definitions/modules/sidebar.js +1078 -1103
  186. package/src/definitions/modules/sidebar.less +1 -0
  187. package/src/definitions/modules/slider.js +1288 -1310
  188. package/src/definitions/modules/sticky.js +875 -919
  189. package/src/definitions/modules/tab.js +922 -962
  190. package/src/definitions/modules/toast.js +888 -890
  191. package/src/definitions/modules/transition.js +1048 -1082
  192. package/src/themes/default/elements/container.variables +0 -7
  193. package/src/themes/default/elements/segment.variables +0 -7
  194. package/src/themes/default/globals/site.variables +7 -0
  195. package/src/themes/default/globals/variation.variables +1 -0
  196. package/tasks/admin/components/create.js +274 -276
  197. package/tasks/admin/components/init.js +123 -130
  198. package/tasks/admin/components/update.js +149 -157
  199. package/tasks/admin/distributions/create.js +184 -187
  200. package/tasks/admin/distributions/init.js +123 -130
  201. package/tasks/admin/distributions/update.js +145 -152
  202. package/tasks/admin/publish.js +5 -7
  203. package/tasks/admin/register.js +36 -38
  204. package/tasks/admin/release.js +8 -10
  205. package/tasks/build/assets.js +42 -39
  206. package/tasks/build/css.js +225 -216
  207. package/tasks/build/javascript.js +118 -113
  208. package/tasks/build.js +10 -10
  209. package/tasks/check-install.js +14 -16
  210. package/tasks/clean.js +5 -5
  211. package/tasks/collections/admin.js +34 -36
  212. package/tasks/collections/build.js +18 -20
  213. package/tasks/collections/docs.js +9 -11
  214. package/tasks/collections/install.js +9 -11
  215. package/tasks/collections/rtl.js +9 -11
  216. package/tasks/collections/various.js +8 -10
  217. package/tasks/config/admin/github.js +17 -17
  218. package/tasks/config/admin/oauth.example.js +4 -4
  219. package/tasks/config/admin/release.js +98 -98
  220. package/tasks/config/admin/templates/component-package.js +9 -10
  221. package/tasks/config/admin/templates/css-package.js +18 -20
  222. package/tasks/config/admin/templates/less-package.js +11 -13
  223. package/tasks/config/defaults.js +116 -116
  224. package/tasks/config/docs.js +23 -23
  225. package/tasks/config/npm/gulpfile.js +8 -9
  226. package/tasks/config/project/config.js +127 -134
  227. package/tasks/config/project/install.js +715 -713
  228. package/tasks/config/project/release.js +32 -38
  229. package/tasks/config/tasks.js +163 -164
  230. package/tasks/config/user.js +23 -29
  231. package/tasks/docs/build.js +97 -95
  232. package/tasks/docs/metadata.js +90 -96
  233. package/tasks/docs/serve.js +80 -81
  234. package/tasks/install.js +370 -378
  235. package/tasks/rtl/build.js +2 -2
  236. package/tasks/rtl/watch.js +2 -2
  237. package/tasks/version.js +4 -4
  238. package/tasks/watch.js +28 -30
  239. package/test/meteor/assets.js +10 -13
  240. package/test/meteor/fonts.js +12 -13
  241. package/test/modules/accordion.spec.js +6 -8
  242. package/test/modules/checkbox.spec.js +5 -7
  243. package/test/modules/dropdown.spec.js +5 -7
  244. package/test/modules/modal.spec.js +6 -8
  245. package/test/modules/module.spec.js +158 -178
  246. package/test/modules/popup.spec.js +5 -7
  247. package/test/modules/search.spec.js +5 -7
  248. package/test/modules/shape.spec.js +5 -7
  249. package/test/modules/sidebar.spec.js +5 -7
  250. package/test/modules/tab.spec.js +6 -8
  251. package/test/modules/transition.spec.js +5 -7
  252. package/test/modules/video.spec.js +5 -7
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.9.1-beta.17+3767ba8 - Checkbox
2
+ * # Fomantic-UI 2.9.1-beta.18+935e235 - Checkbox
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -8,876 +8,879 @@
8
8
  *
9
9
  */
10
10
 
11
- ;(function ($, window, document, undefined) {
11
+ (function ($, window, document, undefined) {
12
+ 'use strict';
12
13
 
13
- 'use strict';
14
+ function isFunction(obj) {
15
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
16
+ }
14
17
 
15
- function isFunction(obj) {
16
- return typeof obj === "function" && typeof obj.nodeType !== "number";
17
- }
18
+ window = (typeof window != 'undefined' && window.Math == Math)
19
+ ? window
20
+ : (typeof self != 'undefined' && self.Math == Math)
21
+ ? self
22
+ : Function('return this')();
18
23
 
19
- window = (typeof window != 'undefined' && window.Math == Math)
20
- ? window
21
- : (typeof self != 'undefined' && self.Math == Math)
22
- ? self
23
- : Function('return this')()
24
- ;
24
+ $.fn.checkbox = function (parameters) {
25
+ var
26
+ $allModules = $(this),
27
+ moduleSelector = $allModules.selector || '',
25
28
 
26
- $.fn.checkbox = function(parameters) {
27
- var
28
- $allModules = $(this),
29
- moduleSelector = $allModules.selector || '',
29
+ time = new Date().getTime(),
30
+ performance = [],
30
31
 
31
- time = new Date().getTime(),
32
- performance = [],
32
+ query = arguments[0],
33
+ methodInvoked = (typeof query == 'string'),
34
+ queryArguments = [].slice.call(arguments, 1),
35
+ returnedValue
36
+ ;
33
37
 
34
- query = arguments[0],
35
- methodInvoked = (typeof query == 'string'),
36
- queryArguments = [].slice.call(arguments, 1),
37
- returnedValue
38
- ;
39
-
40
- $allModules
41
- .each(function() {
42
- var
43
- settings = $.extend(true, {}, $.fn.checkbox.settings, parameters),
44
-
45
- className = settings.className,
46
- namespace = settings.namespace,
47
- selector = settings.selector,
48
- error = settings.error,
49
-
50
- eventNamespace = '.' + namespace,
51
- moduleNamespace = 'module-' + namespace,
52
-
53
- $module = $(this),
54
- $label = $(this).children(selector.label),
55
- $input = $(this).children(selector.input),
56
- input = $input[0],
57
-
58
- initialLoad = false,
59
- shortcutPressed = false,
60
- instance = $module.data(moduleNamespace),
61
-
62
- observer,
63
- element = this,
64
- module
65
- ;
66
-
67
- module = {
68
-
69
- initialize: function() {
70
- module.verbose('Initializing checkbox', settings);
71
-
72
- module.create.label();
73
- module.bind.events();
74
-
75
- module.set.tabbable();
76
- module.hide.input();
77
-
78
- module.observeChanges();
79
- module.instantiate();
80
- module.setup();
81
- },
82
-
83
- instantiate: function() {
84
- module.verbose('Storing instance of module', module);
85
- instance = module;
86
- $module
87
- .data(moduleNamespace, module)
88
- ;
89
- },
90
-
91
- destroy: function() {
92
- module.verbose('Destroying module');
93
- module.unbind.events();
94
- module.show.input();
95
- $module.removeData(moduleNamespace);
96
- },
38
+ $allModules.each(function () {
39
+ var
40
+ settings = $.extend(true, {}, $.fn.checkbox.settings, parameters),
97
41
 
98
- fix: {
99
- reference: function() {
100
- if( $module.is(selector.input) ) {
101
- module.debug('Behavior called on <input> adjusting invoked element');
102
- $module = $module.closest(selector.checkbox);
103
- module.refresh();
104
- }
105
- }
106
- },
42
+ className = settings.className,
43
+ namespace = settings.namespace,
44
+ selector = settings.selector,
45
+ error = settings.error,
107
46
 
108
- setup: function() {
109
- module.set.initialLoad();
110
- if( module.is.indeterminate() ) {
111
- module.debug('Initial value is indeterminate');
112
- module.indeterminate();
113
- }
114
- else if( module.is.checked() ) {
115
- module.debug('Initial value is checked');
116
- module.check();
117
- }
118
- else {
119
- module.debug('Initial value is unchecked');
120
- module.uncheck();
121
- }
122
- module.remove.initialLoad();
123
- },
47
+ eventNamespace = '.' + namespace,
48
+ moduleNamespace = 'module-' + namespace,
124
49
 
125
- refresh: function() {
126
- $label = $module.children(selector.label);
127
- $input = $module.children(selector.input);
128
- input = $input[0];
129
- },
50
+ $module = $(this),
51
+ $label = $(this).children(selector.label),
52
+ $input = $(this).children(selector.input),
53
+ input = $input[0],
130
54
 
131
- hide: {
132
- input: function() {
133
- module.verbose('Modifying <input> z-index to be unselectable');
134
- $input.addClass(className.hidden);
135
- }
136
- },
137
- show: {
138
- input: function() {
139
- module.verbose('Modifying <input> z-index to be selectable');
140
- $input.removeClass(className.hidden);
141
- }
142
- },
55
+ initialLoad = false,
56
+ shortcutPressed = false,
57
+ instance = $module.data(moduleNamespace),
143
58
 
144
- observeChanges: function() {
145
- if('MutationObserver' in window) {
146
- observer = new MutationObserver(function(mutations) {
147
- module.debug('DOM tree modified, updating selector cache');
148
- module.refresh();
149
- });
150
- observer.observe(element, {
151
- childList : true,
152
- subtree : true
153
- });
154
- module.debug('Setting up mutation observer', observer);
155
- }
156
- },
157
-
158
- attachEvents: function(selector, event) {
159
- var
160
- $element = $(selector)
161
- ;
162
- event = isFunction(module[event])
163
- ? module[event]
164
- : module.toggle
165
- ;
166
- if($element.length > 0) {
167
- module.debug('Attaching checkbox events to element', selector, event);
168
- $element
169
- .on('click' + eventNamespace, event)
170
- ;
171
- }
172
- else {
173
- module.error(error.notFound);
174
- }
175
- },
176
-
177
- preventDefaultOnInputTarget: function() {
178
- if(typeof event !== 'undefined' && event !== null && $(event.target).is(selector.input)) {
179
- module.verbose('Preventing default check action after manual check action');
180
- event.preventDefault();
181
- }
182
- },
183
-
184
- event: {
185
- change: function(event) {
186
- if( !module.should.ignoreCallbacks() ) {
187
- settings.onChange.call(input);
188
- }
189
- },
190
- click: function(event) {
191
- var
192
- $target = $(event.target)
193
- ;
194
- if( $target.is(selector.input) ) {
195
- module.verbose('Using default check action on initialized checkbox');
196
- return;
197
- }
198
- if( $target.is(selector.link) ) {
199
- module.debug('Clicking link inside checkbox, skipping toggle');
200
- return;
201
- }
202
- module.toggle();
203
- $input.trigger('focus');
204
- event.preventDefault();
205
- },
206
- keydown: function(event) {
207
- var
208
- key = event.which,
209
- keyCode = {
210
- enter : 13,
211
- space : 32,
212
- escape : 27,
213
- left : 37,
214
- up : 38,
215
- right : 39,
216
- down : 40
217
- }
59
+ observer,
60
+ element = this,
61
+ module
218
62
  ;
219
63
 
220
- var r = module.get.radios(),
221
- rIndex = r.index($module),
222
- rLen = r.length,
223
- checkIndex = false;
224
-
225
- if(key == keyCode.left || key == keyCode.up) {
226
- checkIndex = (rIndex === 0 ? rLen : rIndex) - 1;
227
- } else if(key == keyCode.right || key == keyCode.down) {
228
- checkIndex = rIndex === rLen-1 ? 0 : rIndex+1;
229
- }
230
-
231
- if (!module.should.ignoreCallbacks() && checkIndex !== false) {
232
- if(settings.beforeUnchecked.apply(input)===false) {
233
- module.verbose('Option not allowed to be unchecked, cancelling key navigation');
234
- return false;
235
- }
236
- if (settings.beforeChecked.apply($(r[checkIndex]).children(selector.input)[0])===false) {
237
- module.verbose('Next option should not allow check, cancelling key navigation');
238
- return false;
239
- }
240
- }
241
-
242
- shortcutPressed = false;
243
- if(key == keyCode.escape) {
244
- module.verbose('Escape key pressed blurring field');
245
- $input.trigger('blur');
246
- shortcutPressed = true;
247
- event.stopPropagation();
248
- }
249
- else if(!event.ctrlKey && module.can.change()) {
250
- if( key == keyCode.space || (key == keyCode.enter && settings.enableEnterKey) ) {
251
- module.verbose('Enter/space key pressed, toggling checkbox');
252
- module.toggle();
253
- shortcutPressed = true;
254
- } else if($module.is('.toggle, .slider') && !module.is.radio()) {
255
- if(key == keyCode.left && module.is.checked()) {
256
- module.uncheck();
257
- shortcutPressed = true;
258
- } else if(key == keyCode.right && module.is.unchecked()) {
259
- module.check();
260
- shortcutPressed = true;
261
- }
64
+ module = {
65
+
66
+ initialize: function () {
67
+ module.verbose('Initializing checkbox', settings);
68
+
69
+ module.create.label();
70
+ module.bind.events();
71
+
72
+ module.set.tabbable();
73
+ module.hide.input();
74
+
75
+ module.observeChanges();
76
+ module.instantiate();
77
+ module.setup();
78
+ },
79
+
80
+ instantiate: function () {
81
+ module.verbose('Storing instance of module', module);
82
+ instance = module;
83
+ $module
84
+ .data(moduleNamespace, module)
85
+ ;
86
+ },
87
+
88
+ destroy: function () {
89
+ module.verbose('Destroying module');
90
+ module.unbind.events();
91
+ module.show.input();
92
+ $module.removeData(moduleNamespace);
93
+ },
94
+
95
+ fix: {
96
+ reference: function () {
97
+ if ($module.is(selector.input)) {
98
+ module.debug('Behavior called on <input> adjusting invoked element');
99
+ $module = $module.closest(selector.checkbox);
100
+ module.refresh();
101
+ }
102
+ },
103
+ },
104
+
105
+ setup: function () {
106
+ module.set.initialLoad();
107
+ if (module.is.indeterminate()) {
108
+ module.debug('Initial value is indeterminate');
109
+ module.indeterminate();
110
+ } else if (module.is.checked()) {
111
+ module.debug('Initial value is checked');
112
+ module.check();
113
+ } else {
114
+ module.debug('Initial value is unchecked');
115
+ module.uncheck();
116
+ }
117
+ module.remove.initialLoad();
118
+ },
119
+
120
+ refresh: function () {
121
+ $label = $module.children(selector.label);
122
+ $input = $module.children(selector.input);
123
+ input = $input[0];
124
+ },
125
+
126
+ hide: {
127
+ input: function () {
128
+ module.verbose('Modifying <input> z-index to be unselectable');
129
+ $input.addClass(className.hidden);
130
+ },
131
+ },
132
+ show: {
133
+ input: function () {
134
+ module.verbose('Modifying <input> z-index to be selectable');
135
+ $input.removeClass(className.hidden);
136
+ },
137
+ },
138
+
139
+ observeChanges: function () {
140
+ if ('MutationObserver' in window) {
141
+ observer = new MutationObserver(function (mutations) {
142
+ module.debug('DOM tree modified, updating selector cache');
143
+ module.refresh();
144
+ });
145
+ observer.observe(element, {
146
+ childList: true,
147
+ subtree: true,
148
+ });
149
+ module.debug('Setting up mutation observer', observer);
150
+ }
151
+ },
152
+
153
+ attachEvents: function (selector, event) {
154
+ var
155
+ $element = $(selector)
156
+ ;
157
+ event = isFunction(module[event])
158
+ ? module[event]
159
+ : module.toggle;
160
+ if ($element.length > 0) {
161
+ module.debug('Attaching checkbox events to element', selector, event);
162
+ $element
163
+ .on('click' + eventNamespace, event)
164
+ ;
165
+ } else {
166
+ module.error(error.notFound);
167
+ }
168
+ },
169
+
170
+ preventDefaultOnInputTarget: function () {
171
+ if (typeof event !== 'undefined' && event !== null && $(event.target).is(selector.input)) {
172
+ module.verbose('Preventing default check action after manual check action');
173
+ event.preventDefault();
174
+ }
175
+ },
176
+
177
+ event: {
178
+ change: function (event) {
179
+ if (!module.should.ignoreCallbacks()) {
180
+ settings.onChange.call(input);
181
+ }
182
+ },
183
+ click: function (event) {
184
+ var
185
+ $target = $(event.target)
186
+ ;
187
+ if ($target.is(selector.input)) {
188
+ module.verbose('Using default check action on initialized checkbox');
189
+
190
+ return;
191
+ }
192
+ if ($target.is(selector.link)) {
193
+ module.debug('Clicking link inside checkbox, skipping toggle');
194
+
195
+ return;
196
+ }
197
+ module.toggle();
198
+ $input.trigger('focus');
199
+ event.preventDefault();
200
+ },
201
+ keydown: function (event) {
202
+ var
203
+ key = event.which,
204
+ keyCode = {
205
+ enter: 13,
206
+ space: 32,
207
+ escape: 27,
208
+ left: 37,
209
+ up: 38,
210
+ right: 39,
211
+ down: 40,
212
+ }
213
+ ;
214
+
215
+ var
216
+ r = module.get.radios(),
217
+ rIndex = r.index($module),
218
+ rLen = r.length,
219
+ checkIndex = false
220
+ ;
221
+
222
+ if (key == keyCode.left || key == keyCode.up) {
223
+ checkIndex = (rIndex === 0 ? rLen : rIndex) - 1;
224
+ } else if (key == keyCode.right || key == keyCode.down) {
225
+ checkIndex = rIndex === rLen - 1 ? 0 : rIndex + 1;
226
+ }
227
+
228
+ if (!module.should.ignoreCallbacks() && checkIndex !== false) {
229
+ if (settings.beforeUnchecked.apply(input) === false) {
230
+ module.verbose('Option not allowed to be unchecked, cancelling key navigation');
231
+
232
+ return false;
233
+ }
234
+ if (settings.beforeChecked.apply($(r[checkIndex]).children(selector.input)[0]) === false) {
235
+ module.verbose('Next option should not allow check, cancelling key navigation');
236
+
237
+ return false;
238
+ }
239
+ }
240
+
241
+ shortcutPressed = false;
242
+ if (key == keyCode.escape) {
243
+ module.verbose('Escape key pressed blurring field');
244
+ $input.trigger('blur');
245
+ shortcutPressed = true;
246
+ event.stopPropagation();
247
+ } else if (!event.ctrlKey && module.can.change()) {
248
+ if (key == keyCode.space || (key == keyCode.enter && settings.enableEnterKey)) {
249
+ module.verbose('Enter/space key pressed, toggling checkbox');
250
+ module.toggle();
251
+ shortcutPressed = true;
252
+ } else if ($module.is('.toggle, .slider') && !module.is.radio()) {
253
+ if (key == keyCode.left && module.is.checked()) {
254
+ module.uncheck();
255
+ shortcutPressed = true;
256
+ } else if (key == keyCode.right && module.is.unchecked()) {
257
+ module.check();
258
+ shortcutPressed = true;
259
+ }
260
+ }
261
+ }
262
+ },
263
+ keyup: function (event) {
264
+ if (shortcutPressed) {
265
+ event.preventDefault();
266
+ }
267
+ },
268
+ },
269
+
270
+ check: function () {
271
+ if (!module.should.allowCheck()) {
272
+ return;
273
+ }
274
+ module.debug('Checking checkbox', $input);
275
+ module.set.checked();
276
+ if (!module.should.ignoreCallbacks()) {
277
+ settings.onChecked.call(input);
278
+ module.trigger.change();
279
+ }
280
+ module.preventDefaultOnInputTarget();
281
+ },
282
+
283
+ uncheck: function () {
284
+ if (!module.should.allowUncheck()) {
285
+ return;
286
+ }
287
+ module.debug('Unchecking checkbox');
288
+ module.set.unchecked();
289
+ if (!module.should.ignoreCallbacks()) {
290
+ settings.onUnchecked.call(input);
291
+ module.trigger.change();
292
+ }
293
+ module.preventDefaultOnInputTarget();
294
+ },
295
+
296
+ indeterminate: function () {
297
+ if (module.should.allowIndeterminate()) {
298
+ module.debug('Checkbox is already indeterminate');
299
+
300
+ return;
301
+ }
302
+ module.debug('Making checkbox indeterminate');
303
+ module.set.indeterminate();
304
+ if (!module.should.ignoreCallbacks()) {
305
+ settings.onIndeterminate.call(input);
306
+ module.trigger.change();
307
+ }
308
+ },
309
+
310
+ determinate: function () {
311
+ if (module.should.allowDeterminate()) {
312
+ module.debug('Checkbox is already determinate');
313
+
314
+ return;
315
+ }
316
+ module.debug('Making checkbox determinate');
317
+ module.set.determinate();
318
+ if (!module.should.ignoreCallbacks()) {
319
+ settings.onDeterminate.call(input);
320
+ module.trigger.change();
321
+ }
322
+ },
323
+
324
+ enable: function () {
325
+ if (module.is.enabled()) {
326
+ module.debug('Checkbox is already enabled');
327
+
328
+ return;
329
+ }
330
+ module.debug('Enabling checkbox');
331
+ module.set.enabled();
332
+ if (!module.should.ignoreCallbacks()) {
333
+ settings.onEnable.call(input);
334
+ // preserve legacy callbacks
335
+ settings.onEnabled.call(input);
336
+ }
337
+ },
338
+
339
+ disable: function () {
340
+ if (module.is.disabled()) {
341
+ module.debug('Checkbox is already disabled');
342
+
343
+ return;
344
+ }
345
+ module.debug('Disabling checkbox');
346
+ module.set.disabled();
347
+ if (!module.should.ignoreCallbacks()) {
348
+ settings.onDisable.call(input);
349
+ // preserve legacy callbacks
350
+ settings.onDisabled.call(input);
351
+ }
352
+ },
353
+
354
+ get: {
355
+ radios: function () {
356
+ var
357
+ name = module.get.name()
358
+ ;
359
+
360
+ return $('input[name="' + name + '"]').closest(selector.checkbox);
361
+ },
362
+ otherRadios: function () {
363
+ return module.get.radios().not($module);
364
+ },
365
+ name: function () {
366
+ return $input.attr('name');
367
+ },
368
+ },
369
+
370
+ is: {
371
+ initialLoad: function () {
372
+ return initialLoad;
373
+ },
374
+ radio: function () {
375
+ return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');
376
+ },
377
+ indeterminate: function () {
378
+ return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');
379
+ },
380
+ checked: function () {
381
+ return $input.prop('checked') !== undefined && $input.prop('checked');
382
+ },
383
+ disabled: function () {
384
+ return $input.prop('disabled') !== undefined && $input.prop('disabled');
385
+ },
386
+ enabled: function () {
387
+ return !module.is.disabled();
388
+ },
389
+ determinate: function () {
390
+ return !module.is.indeterminate();
391
+ },
392
+ unchecked: function () {
393
+ return !module.is.checked();
394
+ },
395
+ },
396
+
397
+ should: {
398
+ allowCheck: function () {
399
+ if (module.is.determinate() && module.is.checked() && !module.is.initialLoad()) {
400
+ module.debug('Should not allow check, checkbox is already checked');
401
+
402
+ return false;
403
+ }
404
+ if (!module.should.ignoreCallbacks() && settings.beforeChecked.apply(input) === false) {
405
+ module.debug('Should not allow check, beforeChecked cancelled');
406
+
407
+ return false;
408
+ }
409
+
410
+ return true;
411
+ },
412
+ allowUncheck: function () {
413
+ if (module.is.determinate() && module.is.unchecked() && !module.is.initialLoad()) {
414
+ module.debug('Should not allow uncheck, checkbox is already unchecked');
415
+
416
+ return false;
417
+ }
418
+ if (!module.should.ignoreCallbacks() && settings.beforeUnchecked.apply(input) === false) {
419
+ module.debug('Should not allow uncheck, beforeUnchecked cancelled');
420
+
421
+ return false;
422
+ }
423
+
424
+ return true;
425
+ },
426
+ allowIndeterminate: function () {
427
+ if (module.is.indeterminate() && !module.is.initialLoad()) {
428
+ module.debug('Should not allow indeterminate, checkbox is already indeterminate');
429
+
430
+ return false;
431
+ }
432
+ if (!module.should.ignoreCallbacks() && settings.beforeIndeterminate.apply(input) === false) {
433
+ module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');
434
+
435
+ return false;
436
+ }
437
+
438
+ return true;
439
+ },
440
+ allowDeterminate: function () {
441
+ if (module.is.determinate() && !module.is.initialLoad()) {
442
+ module.debug('Should not allow determinate, checkbox is already determinate');
443
+
444
+ return false;
445
+ }
446
+ if (!module.should.ignoreCallbacks() && settings.beforeDeterminate.apply(input) === false) {
447
+ module.debug('Should not allow determinate, beforeDeterminate cancelled');
448
+
449
+ return false;
450
+ }
451
+
452
+ return true;
453
+ },
454
+ ignoreCallbacks: function () {
455
+ return (initialLoad && !settings.fireOnInit);
456
+ },
457
+ },
458
+
459
+ can: {
460
+ change: function () {
461
+ return !($module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly'));
462
+ },
463
+ uncheck: function () {
464
+ return (typeof settings.uncheckable === 'boolean')
465
+ ? settings.uncheckable
466
+ : !module.is.radio();
467
+ },
468
+ },
469
+
470
+ set: {
471
+ initialLoad: function () {
472
+ initialLoad = true;
473
+ },
474
+ checked: function () {
475
+ module.verbose('Setting class to checked');
476
+ $module
477
+ .removeClass(className.indeterminate)
478
+ .addClass(className.checked)
479
+ ;
480
+ if (module.is.radio()) {
481
+ module.uncheckOthers();
482
+ }
483
+ if (!module.is.indeterminate() && module.is.checked()) {
484
+ module.debug('Input is already checked, skipping input property change');
485
+
486
+ return;
487
+ }
488
+ module.verbose('Setting state to checked', input);
489
+ $input
490
+ .prop('indeterminate', false)
491
+ .prop('checked', true)
492
+ ;
493
+ },
494
+ unchecked: function () {
495
+ module.verbose('Removing checked class');
496
+ $module
497
+ .removeClass(className.indeterminate)
498
+ .removeClass(className.checked)
499
+ ;
500
+ if (!module.is.indeterminate() && module.is.unchecked()) {
501
+ module.debug('Input is already unchecked');
502
+
503
+ return;
504
+ }
505
+ module.debug('Setting state to unchecked');
506
+ $input
507
+ .prop('indeterminate', false)
508
+ .prop('checked', false)
509
+ ;
510
+ },
511
+ indeterminate: function () {
512
+ module.verbose('Setting class to indeterminate');
513
+ $module
514
+ .addClass(className.indeterminate)
515
+ ;
516
+ if (module.is.indeterminate()) {
517
+ module.debug('Input is already indeterminate, skipping input property change');
518
+
519
+ return;
520
+ }
521
+ module.debug('Setting state to indeterminate');
522
+ $input
523
+ .prop('indeterminate', true)
524
+ ;
525
+ },
526
+ determinate: function () {
527
+ module.verbose('Removing indeterminate class');
528
+ $module
529
+ .removeClass(className.indeterminate)
530
+ ;
531
+ if (module.is.determinate()) {
532
+ module.debug('Input is already determinate, skipping input property change');
533
+
534
+ return;
535
+ }
536
+ module.debug('Setting state to determinate');
537
+ $input
538
+ .prop('indeterminate', false)
539
+ ;
540
+ },
541
+ disabled: function () {
542
+ module.verbose('Setting class to disabled');
543
+ $module
544
+ .addClass(className.disabled)
545
+ ;
546
+ if (module.is.disabled()) {
547
+ module.debug('Input is already disabled, skipping input property change');
548
+
549
+ return;
550
+ }
551
+ module.debug('Setting state to disabled');
552
+ $input
553
+ .prop('disabled', 'disabled')
554
+ ;
555
+ },
556
+ enabled: function () {
557
+ module.verbose('Removing disabled class');
558
+ $module.removeClass(className.disabled);
559
+ if (module.is.enabled()) {
560
+ module.debug('Input is already enabled, skipping input property change');
561
+
562
+ return;
563
+ }
564
+ module.debug('Setting state to enabled');
565
+ $input
566
+ .prop('disabled', false)
567
+ ;
568
+ },
569
+ tabbable: function () {
570
+ module.verbose('Adding tabindex to checkbox');
571
+ if ($input.attr('tabindex') === undefined) {
572
+ $input.attr('tabindex', 0);
573
+ }
574
+ },
575
+ },
576
+
577
+ remove: {
578
+ initialLoad: function () {
579
+ initialLoad = false;
580
+ },
581
+ },
582
+
583
+ trigger: {
584
+ change: function () {
585
+ var
586
+ inputElement = $input[0]
587
+ ;
588
+ if (inputElement) {
589
+ var events = document.createEvent('HTMLEvents');
590
+ module.verbose('Triggering native change event');
591
+ events.initEvent('change', true, false);
592
+ inputElement.dispatchEvent(events);
593
+ }
594
+ },
595
+ },
596
+
597
+ create: {
598
+ label: function () {
599
+ if ($input.prevAll(selector.label).length > 0) {
600
+ $input.prev(selector.label).detach().insertAfter($input);
601
+ module.debug('Moving existing label', $label);
602
+ } else if (!module.has.label()) {
603
+ $label = $('<label>').insertAfter($input);
604
+ module.debug('Creating label', $label);
605
+ }
606
+ },
607
+ },
608
+
609
+ has: {
610
+ label: function () {
611
+ return ($label.length > 0);
612
+ },
613
+ },
614
+
615
+ bind: {
616
+ events: function () {
617
+ module.verbose('Attaching checkbox events');
618
+ $module
619
+ .on('click' + eventNamespace, module.event.click)
620
+ .on('change' + eventNamespace, module.event.change)
621
+ .on('keydown' + eventNamespace, selector.input, module.event.keydown)
622
+ .on('keyup' + eventNamespace, selector.input, module.event.keyup)
623
+ ;
624
+ },
625
+ },
626
+
627
+ unbind: {
628
+ events: function () {
629
+ module.debug('Removing events');
630
+ $module
631
+ .off(eventNamespace)
632
+ ;
633
+ },
634
+ },
635
+
636
+ uncheckOthers: function () {
637
+ var
638
+ $radios = module.get.otherRadios()
639
+ ;
640
+ module.debug('Unchecking other radios', $radios);
641
+ $radios.removeClass(className.checked);
642
+ },
643
+
644
+ toggle: function () {
645
+ if (!module.can.change()) {
646
+ if (!module.is.radio()) {
647
+ module.debug('Checkbox is read-only or disabled, ignoring toggle');
648
+ }
649
+
650
+ return;
651
+ }
652
+ if (module.is.indeterminate() || module.is.unchecked()) {
653
+ module.debug('Currently unchecked');
654
+ module.check();
655
+ } else if (module.is.checked() && module.can.uncheck()) {
656
+ module.debug('Currently checked');
657
+ module.uncheck();
658
+ }
659
+ },
660
+ setting: function (name, value) {
661
+ module.debug('Changing setting', name, value);
662
+ if ($.isPlainObject(name)) {
663
+ $.extend(true, settings, name);
664
+ } else if (value !== undefined) {
665
+ if ($.isPlainObject(settings[name])) {
666
+ $.extend(true, settings[name], value);
667
+ } else {
668
+ settings[name] = value;
669
+ }
670
+ } else {
671
+ return settings[name];
672
+ }
673
+ },
674
+ internal: function (name, value) {
675
+ if ($.isPlainObject(name)) {
676
+ $.extend(true, module, name);
677
+ } else if (value !== undefined) {
678
+ module[name] = value;
679
+ } else {
680
+ return module[name];
681
+ }
682
+ },
683
+ debug: function () {
684
+ if (!settings.silent && settings.debug) {
685
+ if (settings.performance) {
686
+ module.performance.log(arguments);
687
+ } else {
688
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
689
+ module.debug.apply(console, arguments);
690
+ }
691
+ }
692
+ },
693
+ verbose: function () {
694
+ if (!settings.silent && settings.verbose && settings.debug) {
695
+ if (settings.performance) {
696
+ module.performance.log(arguments);
697
+ } else {
698
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
699
+ module.verbose.apply(console, arguments);
700
+ }
701
+ }
702
+ },
703
+ error: function () {
704
+ if (!settings.silent) {
705
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
706
+ module.error.apply(console, arguments);
707
+ }
708
+ },
709
+ performance: {
710
+ log: function (message) {
711
+ var
712
+ currentTime,
713
+ executionTime,
714
+ previousTime
715
+ ;
716
+ if (settings.performance) {
717
+ currentTime = new Date().getTime();
718
+ previousTime = time || currentTime;
719
+ executionTime = currentTime - previousTime;
720
+ time = currentTime;
721
+ performance.push({
722
+ Name: message[0],
723
+ Arguments: [].slice.call(message, 1) || '',
724
+ Element: element,
725
+ 'Execution Time': executionTime,
726
+ });
727
+ }
728
+ clearTimeout(module.performance.timer);
729
+ module.performance.timer = setTimeout(module.performance.display, 500);
730
+ },
731
+ display: function () {
732
+ var
733
+ title = settings.name + ':',
734
+ totalTime = 0
735
+ ;
736
+ time = false;
737
+ clearTimeout(module.performance.timer);
738
+ $.each(performance, function (index, data) {
739
+ totalTime += data['Execution Time'];
740
+ });
741
+ title += ' ' + totalTime + 'ms';
742
+ if (moduleSelector) {
743
+ title += ' \'' + moduleSelector + '\'';
744
+ }
745
+ if ((console.group !== undefined || console.table !== undefined) && performance.length > 0) {
746
+ console.groupCollapsed(title);
747
+ if (console.table) {
748
+ console.table(performance);
749
+ } else {
750
+ $.each(performance, function (index, data) {
751
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
752
+ });
753
+ }
754
+ console.groupEnd();
755
+ }
756
+ performance = [];
757
+ },
758
+ },
759
+ invoke: function (query, passedArguments, context) {
760
+ var
761
+ object = instance,
762
+ maxDepth,
763
+ found,
764
+ response
765
+ ;
766
+ passedArguments = passedArguments || queryArguments;
767
+ context = context || element;
768
+ if (typeof query == 'string' && object !== undefined) {
769
+ query = query.split(/[\. ]/);
770
+ maxDepth = query.length - 1;
771
+ $.each(query, function (depth, value) {
772
+ var camelCaseValue = (depth != maxDepth)
773
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
774
+ : query
775
+ ;
776
+ if ($.isPlainObject(object[camelCaseValue]) && (depth != maxDepth)) {
777
+ object = object[camelCaseValue];
778
+ } else if (object[camelCaseValue] !== undefined) {
779
+ found = object[camelCaseValue];
780
+
781
+ return false;
782
+ } else if ($.isPlainObject(object[value]) && (depth != maxDepth)) {
783
+ object = object[value];
784
+ } else if (object[value] !== undefined) {
785
+ found = object[value];
786
+
787
+ return false;
788
+ } else {
789
+ module.error(error.method, query);
790
+
791
+ return false;
792
+ }
793
+ });
794
+ }
795
+ if (isFunction(found)) {
796
+ response = found.apply(context, passedArguments);
797
+ } else if (found !== undefined) {
798
+ response = found;
799
+ }
800
+ if (Array.isArray(returnedValue)) {
801
+ returnedValue.push(response);
802
+ } else if (returnedValue !== undefined) {
803
+ returnedValue = [returnedValue, response];
804
+ } else if (response !== undefined) {
805
+ returnedValue = response;
806
+ }
807
+
808
+ return found;
809
+ },
810
+ };
811
+
812
+ if (methodInvoked) {
813
+ if (instance === undefined) {
814
+ module.initialize();
262
815
  }
816
+ module.invoke(query);
817
+ } else {
818
+ if (instance !== undefined) {
819
+ instance.invoke('destroy');
820
+ }
821
+ module.initialize();
263
822
  }
264
- },
265
- keyup: function(event) {
266
- if(shortcutPressed) {
267
- event.preventDefault();
268
- }
269
- }
270
- },
823
+ });
271
824
 
272
- check: function() {
273
- if( !module.should.allowCheck() ) {
274
- return;
275
- }
276
- module.debug('Checking checkbox', $input);
277
- module.set.checked();
278
- if( !module.should.ignoreCallbacks() ) {
279
- settings.onChecked.call(input);
280
- module.trigger.change();
281
- }
282
- module.preventDefaultOnInputTarget();
283
- },
825
+ return (returnedValue !== undefined)
826
+ ? returnedValue
827
+ : this;
828
+ };
284
829
 
285
- uncheck: function() {
286
- if( !module.should.allowUncheck() ) {
287
- return;
288
- }
289
- module.debug('Unchecking checkbox');
290
- module.set.unchecked();
291
- if( !module.should.ignoreCallbacks() ) {
292
- settings.onUnchecked.call(input);
293
- module.trigger.change();
294
- }
295
- module.preventDefaultOnInputTarget();
296
- },
830
+ $.fn.checkbox.settings = {
297
831
 
298
- indeterminate: function() {
299
- if( module.should.allowIndeterminate() ) {
300
- module.debug('Checkbox is already indeterminate');
301
- return;
302
- }
303
- module.debug('Making checkbox indeterminate');
304
- module.set.indeterminate();
305
- if( !module.should.ignoreCallbacks() ) {
306
- settings.onIndeterminate.call(input);
307
- module.trigger.change();
308
- }
309
- },
832
+ name: 'Checkbox',
833
+ namespace: 'checkbox',
310
834
 
311
- determinate: function() {
312
- if( module.should.allowDeterminate() ) {
313
- module.debug('Checkbox is already determinate');
314
- return;
315
- }
316
- module.debug('Making checkbox determinate');
317
- module.set.determinate();
318
- if( !module.should.ignoreCallbacks() ) {
319
- settings.onDeterminate.call(input);
320
- module.trigger.change();
321
- }
322
- },
835
+ silent: false,
836
+ debug: false,
837
+ verbose: false,
838
+ performance: true,
323
839
 
324
- enable: function() {
325
- if( module.is.enabled() ) {
326
- module.debug('Checkbox is already enabled');
327
- return;
328
- }
329
- module.debug('Enabling checkbox');
330
- module.set.enabled();
331
- if( !module.should.ignoreCallbacks() ) {
332
- settings.onEnable.call(input);
333
- // preserve legacy callbacks
334
- settings.onEnabled.call(input);
335
- }
336
- },
840
+ // delegated event context
841
+ uncheckable: 'auto',
842
+ fireOnInit: false,
843
+ enableEnterKey: true,
337
844
 
338
- disable: function() {
339
- if( module.is.disabled() ) {
340
- module.debug('Checkbox is already disabled');
341
- return;
342
- }
343
- module.debug('Disabling checkbox');
344
- module.set.disabled();
345
- if( !module.should.ignoreCallbacks() ) {
346
- settings.onDisable.call(input);
347
- // preserve legacy callbacks
348
- settings.onDisabled.call(input);
349
- }
350
- },
845
+ onChange: function () {},
351
846
 
352
- get: {
353
- radios: function() {
354
- var
355
- name = module.get.name()
356
- ;
357
- return $('input[name="' + name + '"]').closest(selector.checkbox);
358
- },
359
- otherRadios: function() {
360
- return module.get.radios().not($module);
361
- },
362
- name: function() {
363
- return $input.attr('name');
364
- }
365
- },
847
+ beforeChecked: function () {},
848
+ beforeUnchecked: function () {},
849
+ beforeDeterminate: function () {},
850
+ beforeIndeterminate: function () {},
366
851
 
367
- is: {
368
- initialLoad: function() {
369
- return initialLoad;
370
- },
371
- radio: function() {
372
- return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');
373
- },
374
- indeterminate: function() {
375
- return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');
376
- },
377
- checked: function() {
378
- return $input.prop('checked') !== undefined && $input.prop('checked');
379
- },
380
- disabled: function() {
381
- return $input.prop('disabled') !== undefined && $input.prop('disabled');
382
- },
383
- enabled: function() {
384
- return !module.is.disabled();
385
- },
386
- determinate: function() {
387
- return !module.is.indeterminate();
388
- },
389
- unchecked: function() {
390
- return !module.is.checked();
391
- }
392
- },
852
+ onChecked: function () {},
853
+ onUnchecked: function () {},
393
854
 
394
- should: {
395
- allowCheck: function() {
396
- if(module.is.determinate() && module.is.checked() && !module.is.initialLoad() ) {
397
- module.debug('Should not allow check, checkbox is already checked');
398
- return false;
399
- }
400
- if(!module.should.ignoreCallbacks() && settings.beforeChecked.apply(input) === false) {
401
- module.debug('Should not allow check, beforeChecked cancelled');
402
- return false;
403
- }
404
- return true;
405
- },
406
- allowUncheck: function() {
407
- if(module.is.determinate() && module.is.unchecked() && !module.is.initialLoad() ) {
408
- module.debug('Should not allow uncheck, checkbox is already unchecked');
409
- return false;
410
- }
411
- if(!module.should.ignoreCallbacks() && settings.beforeUnchecked.apply(input) === false) {
412
- module.debug('Should not allow uncheck, beforeUnchecked cancelled');
413
- return false;
414
- }
415
- return true;
416
- },
417
- allowIndeterminate: function() {
418
- if(module.is.indeterminate() && !module.is.initialLoad() ) {
419
- module.debug('Should not allow indeterminate, checkbox is already indeterminate');
420
- return false;
421
- }
422
- if(!module.should.ignoreCallbacks() && settings.beforeIndeterminate.apply(input) === false) {
423
- module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');
424
- return false;
425
- }
426
- return true;
427
- },
428
- allowDeterminate: function() {
429
- if(module.is.determinate() && !module.is.initialLoad() ) {
430
- module.debug('Should not allow determinate, checkbox is already determinate');
431
- return false;
432
- }
433
- if(!module.should.ignoreCallbacks() && settings.beforeDeterminate.apply(input) === false) {
434
- module.debug('Should not allow determinate, beforeDeterminate cancelled');
435
- return false;
436
- }
437
- return true;
438
- },
439
- ignoreCallbacks: function() {
440
- return (initialLoad && !settings.fireOnInit);
441
- }
442
- },
855
+ onDeterminate: function () {},
856
+ onIndeterminate: function () {},
443
857
 
444
- can: {
445
- change: function() {
446
- return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );
447
- },
448
- uncheck: function() {
449
- return (typeof settings.uncheckable === 'boolean')
450
- ? settings.uncheckable
451
- : !module.is.radio()
452
- ;
453
- }
454
- },
858
+ onEnable: function () {},
859
+ onDisable: function () {},
455
860
 
456
- set: {
457
- initialLoad: function() {
458
- initialLoad = true;
459
- },
460
- checked: function() {
461
- module.verbose('Setting class to checked');
462
- $module
463
- .removeClass(className.indeterminate)
464
- .addClass(className.checked)
465
- ;
466
- if( module.is.radio() ) {
467
- module.uncheckOthers();
468
- }
469
- if(!module.is.indeterminate() && module.is.checked()) {
470
- module.debug('Input is already checked, skipping input property change');
471
- return;
472
- }
473
- module.verbose('Setting state to checked', input);
474
- $input
475
- .prop('indeterminate', false)
476
- .prop('checked', true)
477
- ;
478
- },
479
- unchecked: function() {
480
- module.verbose('Removing checked class');
481
- $module
482
- .removeClass(className.indeterminate)
483
- .removeClass(className.checked)
484
- ;
485
- if(!module.is.indeterminate() && module.is.unchecked() ) {
486
- module.debug('Input is already unchecked');
487
- return;
488
- }
489
- module.debug('Setting state to unchecked');
490
- $input
491
- .prop('indeterminate', false)
492
- .prop('checked', false)
493
- ;
494
- },
495
- indeterminate: function() {
496
- module.verbose('Setting class to indeterminate');
497
- $module
498
- .addClass(className.indeterminate)
499
- ;
500
- if( module.is.indeterminate() ) {
501
- module.debug('Input is already indeterminate, skipping input property change');
502
- return;
503
- }
504
- module.debug('Setting state to indeterminate');
505
- $input
506
- .prop('indeterminate', true)
507
- ;
508
- },
509
- determinate: function() {
510
- module.verbose('Removing indeterminate class');
511
- $module
512
- .removeClass(className.indeterminate)
513
- ;
514
- if( module.is.determinate() ) {
515
- module.debug('Input is already determinate, skipping input property change');
516
- return;
517
- }
518
- module.debug('Setting state to determinate');
519
- $input
520
- .prop('indeterminate', false)
521
- ;
522
- },
523
- disabled: function() {
524
- module.verbose('Setting class to disabled');
525
- $module
526
- .addClass(className.disabled)
527
- ;
528
- if( module.is.disabled() ) {
529
- module.debug('Input is already disabled, skipping input property change');
530
- return;
531
- }
532
- module.debug('Setting state to disabled');
533
- $input
534
- .prop('disabled', 'disabled')
535
- ;
536
- },
537
- enabled: function() {
538
- module.verbose('Removing disabled class');
539
- $module.removeClass(className.disabled);
540
- if( module.is.enabled() ) {
541
- module.debug('Input is already enabled, skipping input property change');
542
- return;
543
- }
544
- module.debug('Setting state to enabled');
545
- $input
546
- .prop('disabled', false)
547
- ;
548
- },
549
- tabbable: function() {
550
- module.verbose('Adding tabindex to checkbox');
551
- if( $input.attr('tabindex') === undefined) {
552
- $input.attr('tabindex', 0);
553
- }
554
- }
555
- },
861
+ // preserve misspelled callbacks (will be removed in 3.0)
862
+ onEnabled: function () {},
863
+ onDisabled: function () {},
556
864
 
557
- remove: {
558
- initialLoad: function() {
559
- initialLoad = false;
560
- }
865
+ className: {
866
+ checked: 'checked',
867
+ indeterminate: 'indeterminate',
868
+ disabled: 'disabled',
869
+ hidden: 'hidden',
870
+ radio: 'radio',
871
+ readOnly: 'read-only',
561
872
  },
562
873
 
563
- trigger: {
564
- change: function() {
565
- var
566
- inputElement = $input[0]
567
- ;
568
- if(inputElement) {
569
- var events = document.createEvent('HTMLEvents');
570
- module.verbose('Triggering native change event');
571
- events.initEvent('change', true, false);
572
- inputElement.dispatchEvent(events);
573
- }
574
- }
874
+ error: {
875
+ method: 'The method you called is not defined',
575
876
  },
576
877
 
577
-
578
- create: {
579
- label: function() {
580
- if($input.prevAll(selector.label).length > 0) {
581
- $input.prev(selector.label).detach().insertAfter($input);
582
- module.debug('Moving existing label', $label);
583
- }
584
- else if( !module.has.label() ) {
585
- $label = $('<label>').insertAfter($input);
586
- module.debug('Creating label', $label);
587
- }
588
- }
878
+ selector: {
879
+ checkbox: '.ui.checkbox',
880
+ label: 'label',
881
+ input: 'input[type="checkbox"], input[type="radio"]',
882
+ link: 'a[href]',
589
883
  },
590
884
 
591
- has: {
592
- label: function() {
593
- return ($label.length > 0);
594
- }
595
- },
596
-
597
- bind: {
598
- events: function() {
599
- module.verbose('Attaching checkbox events');
600
- $module
601
- .on('click' + eventNamespace, module.event.click)
602
- .on('change' + eventNamespace, module.event.change)
603
- .on('keydown' + eventNamespace, selector.input, module.event.keydown)
604
- .on('keyup' + eventNamespace, selector.input, module.event.keyup)
605
- ;
606
- }
607
- },
608
-
609
- unbind: {
610
- events: function() {
611
- module.debug('Removing events');
612
- $module
613
- .off(eventNamespace)
614
- ;
615
- }
616
- },
617
-
618
- uncheckOthers: function() {
619
- var
620
- $radios = module.get.otherRadios()
621
- ;
622
- module.debug('Unchecking other radios', $radios);
623
- $radios.removeClass(className.checked);
624
- },
625
-
626
- toggle: function() {
627
- if( !module.can.change() ) {
628
- if(!module.is.radio()) {
629
- module.debug('Checkbox is read-only or disabled, ignoring toggle');
630
- }
631
- return;
632
- }
633
- if( module.is.indeterminate() || module.is.unchecked() ) {
634
- module.debug('Currently unchecked');
635
- module.check();
636
- }
637
- else if( module.is.checked() && module.can.uncheck() ) {
638
- module.debug('Currently checked');
639
- module.uncheck();
640
- }
641
- },
642
- setting: function(name, value) {
643
- module.debug('Changing setting', name, value);
644
- if( $.isPlainObject(name) ) {
645
- $.extend(true, settings, name);
646
- }
647
- else if(value !== undefined) {
648
- if($.isPlainObject(settings[name])) {
649
- $.extend(true, settings[name], value);
650
- }
651
- else {
652
- settings[name] = value;
653
- }
654
- }
655
- else {
656
- return settings[name];
657
- }
658
- },
659
- internal: function(name, value) {
660
- if( $.isPlainObject(name) ) {
661
- $.extend(true, module, name);
662
- }
663
- else if(value !== undefined) {
664
- module[name] = value;
665
- }
666
- else {
667
- return module[name];
668
- }
669
- },
670
- debug: function() {
671
- if(!settings.silent && settings.debug) {
672
- if(settings.performance) {
673
- module.performance.log(arguments);
674
- }
675
- else {
676
- module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
677
- module.debug.apply(console, arguments);
678
- }
679
- }
680
- },
681
- verbose: function() {
682
- if(!settings.silent && settings.verbose && settings.debug) {
683
- if(settings.performance) {
684
- module.performance.log(arguments);
685
- }
686
- else {
687
- module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
688
- module.verbose.apply(console, arguments);
689
- }
690
- }
691
- },
692
- error: function() {
693
- if(!settings.silent) {
694
- module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
695
- module.error.apply(console, arguments);
696
- }
697
- },
698
- performance: {
699
- log: function(message) {
700
- var
701
- currentTime,
702
- executionTime,
703
- previousTime
704
- ;
705
- if(settings.performance) {
706
- currentTime = new Date().getTime();
707
- previousTime = time || currentTime;
708
- executionTime = currentTime - previousTime;
709
- time = currentTime;
710
- performance.push({
711
- 'Name' : message[0],
712
- 'Arguments' : [].slice.call(message, 1) || '',
713
- 'Element' : element,
714
- 'Execution Time' : executionTime
715
- });
716
- }
717
- clearTimeout(module.performance.timer);
718
- module.performance.timer = setTimeout(module.performance.display, 500);
719
- },
720
- display: function() {
721
- var
722
- title = settings.name + ':',
723
- totalTime = 0
724
- ;
725
- time = false;
726
- clearTimeout(module.performance.timer);
727
- $.each(performance, function(index, data) {
728
- totalTime += data['Execution Time'];
729
- });
730
- title += ' ' + totalTime + 'ms';
731
- if(moduleSelector) {
732
- title += ' \'' + moduleSelector + '\'';
733
- }
734
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
735
- console.groupCollapsed(title);
736
- if(console.table) {
737
- console.table(performance);
738
- }
739
- else {
740
- $.each(performance, function(index, data) {
741
- console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
742
- });
743
- }
744
- console.groupEnd();
745
- }
746
- performance = [];
747
- }
748
- },
749
- invoke: function(query, passedArguments, context) {
750
- var
751
- object = instance,
752
- maxDepth,
753
- found,
754
- response
755
- ;
756
- passedArguments = passedArguments || queryArguments;
757
- context = context || element;
758
- if(typeof query == 'string' && object !== undefined) {
759
- query = query.split(/[\. ]/);
760
- maxDepth = query.length - 1;
761
- $.each(query, function(depth, value) {
762
- var camelCaseValue = (depth != maxDepth)
763
- ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
764
- : query
765
- ;
766
- if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
767
- object = object[camelCaseValue];
768
- }
769
- else if( object[camelCaseValue] !== undefined ) {
770
- found = object[camelCaseValue];
771
- return false;
772
- }
773
- else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
774
- object = object[value];
775
- }
776
- else if( object[value] !== undefined ) {
777
- found = object[value];
778
- return false;
779
- }
780
- else {
781
- module.error(error.method, query);
782
- return false;
783
- }
784
- });
785
- }
786
- if ( isFunction( found ) ) {
787
- response = found.apply(context, passedArguments);
788
- }
789
- else if(found !== undefined) {
790
- response = found;
791
- }
792
- if(Array.isArray(returnedValue)) {
793
- returnedValue.push(response);
794
- }
795
- else if(returnedValue !== undefined) {
796
- returnedValue = [returnedValue, response];
797
- }
798
- else if(response !== undefined) {
799
- returnedValue = response;
800
- }
801
- return found;
802
- }
803
- };
804
-
805
- if(methodInvoked) {
806
- if(instance === undefined) {
807
- module.initialize();
808
- }
809
- module.invoke(query);
810
- }
811
- else {
812
- if(instance !== undefined) {
813
- instance.invoke('destroy');
814
- }
815
- module.initialize();
816
- }
817
- })
818
- ;
819
-
820
- return (returnedValue !== undefined)
821
- ? returnedValue
822
- : this
823
- ;
824
- };
825
-
826
- $.fn.checkbox.settings = {
827
-
828
- name : 'Checkbox',
829
- namespace : 'checkbox',
830
-
831
- silent : false,
832
- debug : false,
833
- verbose : false,
834
- performance : true,
835
-
836
- // delegated event context
837
- uncheckable : 'auto',
838
- fireOnInit : false,
839
- enableEnterKey : true,
840
-
841
- onChange : function(){},
842
-
843
- beforeChecked : function(){},
844
- beforeUnchecked : function(){},
845
- beforeDeterminate : function(){},
846
- beforeIndeterminate : function(){},
847
-
848
- onChecked : function(){},
849
- onUnchecked : function(){},
850
-
851
- onDeterminate : function() {},
852
- onIndeterminate : function() {},
853
-
854
- onEnable : function(){},
855
- onDisable : function(){},
856
-
857
- // preserve misspelled callbacks (will be removed in 3.0)
858
- onEnabled : function(){},
859
- onDisabled : function(){},
860
-
861
- className : {
862
- checked : 'checked',
863
- indeterminate : 'indeterminate',
864
- disabled : 'disabled',
865
- hidden : 'hidden',
866
- radio : 'radio',
867
- readOnly : 'read-only'
868
- },
869
-
870
- error : {
871
- method : 'The method you called is not defined'
872
- },
873
-
874
- selector : {
875
- checkbox : '.ui.checkbox',
876
- label : 'label',
877
- input : 'input[type="checkbox"], input[type="radio"]',
878
- link : 'a[href]'
879
- }
880
-
881
- };
882
-
883
- })( jQuery, window, document );
885
+ };
886
+ })(jQuery, window, document);