fomantic-ui 2.9.0-beta.10 → 2.9.0-beta.100

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 (217) hide show
  1. package/.all-contributorsrc +188 -3
  2. package/CONTRIBUTORS.md +71 -37
  3. package/README.md +1 -1
  4. package/dist/components/accordion.css +50 -6
  5. package/dist/components/accordion.js +1 -1
  6. package/dist/components/accordion.min.css +2 -2
  7. package/dist/components/accordion.min.js +1 -1
  8. package/dist/components/ad.css +1 -1
  9. package/dist/components/ad.min.css +1 -1
  10. package/dist/components/api.js +25 -23
  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 +81 -81
  15. package/dist/components/button.min.css +2 -2
  16. package/dist/components/calendar.css +1 -1
  17. package/dist/components/calendar.js +6 -7
  18. package/dist/components/calendar.min.css +1 -1
  19. package/dist/components/calendar.min.js +2 -2
  20. package/dist/components/card.css +26 -19
  21. package/dist/components/card.min.css +2 -2
  22. package/dist/components/checkbox.css +2 -1
  23. package/dist/components/checkbox.js +17 -11
  24. package/dist/components/checkbox.min.css +2 -2
  25. package/dist/components/checkbox.min.js +2 -2
  26. package/dist/components/comment.css +11 -11
  27. package/dist/components/comment.min.css +1 -1
  28. package/dist/components/container.css +1 -1
  29. package/dist/components/container.min.css +1 -1
  30. package/dist/components/dimmer.css +28 -14
  31. package/dist/components/dimmer.js +1 -1
  32. package/dist/components/dimmer.min.css +2 -2
  33. package/dist/components/dimmer.min.js +1 -1
  34. package/dist/components/divider.css +1 -1
  35. package/dist/components/divider.min.css +1 -1
  36. package/dist/components/dropdown.css +28 -5
  37. package/dist/components/dropdown.js +14 -18
  38. package/dist/components/dropdown.min.css +2 -2
  39. package/dist/components/dropdown.min.js +2 -2
  40. package/dist/components/embed.css +1 -1
  41. package/dist/components/embed.js +1 -1
  42. package/dist/components/embed.min.css +1 -1
  43. package/dist/components/embed.min.js +1 -1
  44. package/dist/components/emoji.css +2 -2
  45. package/dist/components/feed.css +28 -28
  46. package/dist/components/feed.min.css +2 -2
  47. package/dist/components/flag.css +731 -625
  48. package/dist/components/flag.min.css +2 -2
  49. package/dist/components/form.css +103 -54
  50. package/dist/components/form.js +24 -22
  51. package/dist/components/form.min.css +2 -2
  52. package/dist/components/form.min.js +2 -2
  53. package/dist/components/grid.css +11 -8
  54. package/dist/components/grid.min.css +2 -2
  55. package/dist/components/header.css +1 -1
  56. package/dist/components/header.min.css +1 -1
  57. package/dist/components/icon.css +6 -1
  58. package/dist/components/icon.min.css +2 -2
  59. package/dist/components/image.css +1 -1
  60. package/dist/components/image.min.css +1 -1
  61. package/dist/components/input.css +17 -2
  62. package/dist/components/input.min.css +2 -2
  63. package/dist/components/item.css +13 -13
  64. package/dist/components/item.min.css +1 -1
  65. package/dist/components/label.css +1 -1
  66. package/dist/components/label.min.css +1 -1
  67. package/dist/components/list.css +1 -1
  68. package/dist/components/list.min.css +1 -1
  69. package/dist/components/loader.css +1 -1
  70. package/dist/components/loader.min.css +1 -1
  71. package/dist/components/menu.css +29 -5
  72. package/dist/components/menu.min.css +1 -1
  73. package/dist/components/message.css +41 -41
  74. package/dist/components/message.min.css +2 -2
  75. package/dist/components/modal.css +3 -1
  76. package/dist/components/modal.js +94 -30
  77. package/dist/components/modal.min.css +2 -2
  78. package/dist/components/modal.min.js +2 -2
  79. package/dist/components/nag.css +1 -1
  80. package/dist/components/nag.js +1 -1
  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 +5 -3
  86. package/dist/components/popup.js +1 -1
  87. package/dist/components/popup.min.css +2 -2
  88. package/dist/components/popup.min.js +1 -1
  89. package/dist/components/progress.css +1 -1
  90. package/dist/components/progress.js +1 -1
  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 +7 -46
  96. package/dist/components/rating.js +1 -1
  97. package/dist/components/rating.min.css +2 -2
  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 +1 -1
  104. package/dist/components/search.js +1 -1
  105. package/dist/components/search.min.css +1 -1
  106. package/dist/components/search.min.js +1 -1
  107. package/dist/components/segment.css +12 -6
  108. package/dist/components/segment.min.css +2 -2
  109. package/dist/components/shape.css +1 -1
  110. package/dist/components/shape.js +1 -1
  111. package/dist/components/shape.min.css +1 -1
  112. package/dist/components/shape.min.js +1 -1
  113. package/dist/components/sidebar.css +4 -2
  114. package/dist/components/sidebar.js +1 -1
  115. package/dist/components/sidebar.min.css +2 -2
  116. package/dist/components/sidebar.min.js +1 -1
  117. package/dist/components/site.css +61 -39
  118. package/dist/components/site.js +1 -1
  119. package/dist/components/site.min.css +2 -2
  120. package/dist/components/site.min.js +1 -1
  121. package/dist/components/slider.js +1 -1
  122. package/dist/components/slider.min.js +1 -1
  123. package/dist/components/state.js +1 -1
  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 +4 -4
  128. package/dist/components/step.min.css +2 -2
  129. package/dist/components/sticky.css +1 -1
  130. package/dist/components/sticky.js +1 -1
  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 +1 -1
  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 -3
  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 +33 -1
  142. package/dist/components/toast.js +54 -27
  143. package/dist/components/toast.min.css +2 -2
  144. package/dist/components/toast.min.js +2 -2
  145. package/dist/components/transition.css +1 -1
  146. package/dist/components/transition.js +1 -1
  147. package/dist/components/transition.min.css +1 -1
  148. package/dist/components/transition.min.js +1 -1
  149. package/dist/components/visibility.js +1 -1
  150. package/dist/components/visibility.min.js +1 -1
  151. package/dist/semantic.css +1408 -1030
  152. package/dist/semantic.js +252 -156
  153. package/dist/semantic.min.css +2 -2
  154. package/dist/semantic.min.js +2 -2
  155. package/examples/assets/library/iframe-content.js +5 -5
  156. package/package.json +2 -2
  157. package/src/definitions/behaviors/api.js +24 -22
  158. package/src/definitions/behaviors/form.js +23 -21
  159. package/src/definitions/collections/form.less +190 -139
  160. package/src/definitions/collections/grid.less +716 -680
  161. package/src/definitions/collections/menu.less +173 -126
  162. package/src/definitions/collections/message.less +48 -46
  163. package/src/definitions/collections/table.less +255 -242
  164. package/src/definitions/elements/button.less +360 -347
  165. package/src/definitions/elements/container.less +16 -8
  166. package/src/definitions/elements/emoji.less +15 -9
  167. package/src/definitions/elements/flag.less +7 -17
  168. package/src/definitions/elements/header.less +42 -35
  169. package/src/definitions/elements/icon.less +38 -31
  170. package/src/definitions/elements/input.less +23 -7
  171. package/src/definitions/elements/label.less +92 -91
  172. package/src/definitions/elements/list.less +55 -45
  173. package/src/definitions/elements/loader.less +30 -29
  174. package/src/definitions/elements/segment.less +30 -22
  175. package/src/definitions/elements/step.less +52 -48
  176. package/src/definitions/elements/text.less +17 -15
  177. package/src/definitions/globals/site.less +23 -2
  178. package/src/definitions/modules/accordion.less +55 -5
  179. package/src/definitions/modules/calendar.js +5 -6
  180. package/src/definitions/modules/checkbox.js +16 -10
  181. package/src/definitions/modules/checkbox.less +34 -178
  182. package/src/definitions/modules/dimmer.less +21 -8
  183. package/src/definitions/modules/dropdown.js +13 -17
  184. package/src/definitions/modules/dropdown.less +99 -67
  185. package/src/definitions/modules/modal.js +93 -29
  186. package/src/definitions/modules/modal.less +2 -0
  187. package/src/definitions/modules/nag.less +20 -19
  188. package/src/definitions/modules/popup.less +5 -1
  189. package/src/definitions/modules/progress.less +19 -18
  190. package/src/definitions/modules/rating.less +49 -42
  191. package/src/definitions/modules/search.less +32 -16
  192. package/src/definitions/modules/sidebar.less +33 -19
  193. package/src/definitions/modules/slider.less +39 -38
  194. package/src/definitions/modules/toast.js +53 -26
  195. package/src/definitions/modules/toast.less +46 -16
  196. package/src/definitions/views/card.less +402 -361
  197. package/src/definitions/views/comment.less +92 -81
  198. package/src/definitions/views/feed.less +164 -144
  199. package/src/definitions/views/item.less +249 -196
  200. package/src/definitions/views/statistic.less +90 -88
  201. package/src/themes/default/collections/menu.variables +6 -0
  202. package/src/themes/default/elements/button.variables +2 -1
  203. package/src/themes/default/elements/flag.overrides +1635 -986
  204. package/src/themes/default/elements/flag.variables +7 -5
  205. package/src/themes/default/elements/icon.overrides +35 -28
  206. package/src/themes/default/elements/icon.variables +1 -0
  207. package/src/themes/default/elements/step.overrides +1 -1
  208. package/src/themes/default/globals/site.variables +6 -0
  209. package/src/themes/default/globals/variation.variables +103 -6
  210. package/src/themes/default/modules/accordion.variables +15 -0
  211. package/src/themes/default/modules/dimmer.variables +1 -1
  212. package/src/themes/default/modules/dropdown.variables +1 -1
  213. package/src/themes/default/modules/toast.variables +3 -0
  214. package/src/themes/famfamfam/elements/flag.overrides +1026 -0
  215. package/src/themes/famfamfam/elements/flag.variables +13 -0
  216. package/tasks/build/css.js +6 -1
  217. package/test/helpers/sinon.js +1 -1
package/dist/semantic.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * # Fomantic UI - 2.9.0-beta.10
2
+ * # Fomantic UI - 2.9.0-beta.100
3
3
  * https://github.com/fomantic/Fomantic-UI
4
4
  * http://fomantic-ui.com/
5
5
  *
@@ -9,7 +9,7 @@
9
9
  *
10
10
  */
11
11
  /*!
12
- * # Fomantic-UI 2.9.0-beta.10 - Site
12
+ * # Fomantic-UI 2.9.0-beta.100 - Site
13
13
  * http://github.com/fomantic/Fomantic-UI/
14
14
  *
15
15
  *
@@ -503,7 +503,7 @@ $.extend($.expr[ ":" ], {
503
503
  })( jQuery, window, document );
504
504
 
505
505
  /*!
506
- * # Fomantic-UI 2.9.0-beta.10 - Form Validation
506
+ * # Fomantic-UI 2.9.0-beta.100 - Form Validation
507
507
  * http://github.com/fomantic/Fomantic-UI/
508
508
  *
509
509
  *
@@ -923,6 +923,7 @@ $.fn.form = function(parameters) {
923
923
  $field.one('keyup' + eventNamespace, module.event.field.keyup);
924
924
  module.submit();
925
925
  module.debug('Enter pressed on input submitting form');
926
+ event.preventDefault();
926
927
  }
927
928
  keyHeldDown = true;
928
929
  }
@@ -1390,13 +1391,13 @@ $.fn.form = function(parameters) {
1390
1391
  }
1391
1392
  if(settings.inline) {
1392
1393
  if(!promptExists) {
1393
- $prompt = settings.templates.prompt(errors, className.label);
1394
+ $prompt = $('<div/>').addClass(className.label);
1394
1395
  $prompt
1395
1396
  .appendTo($fieldGroup)
1396
1397
  ;
1397
1398
  }
1398
1399
  $prompt
1399
- .html(errors[0])
1400
+ .html(settings.templates.prompt(errors))
1400
1401
  ;
1401
1402
  if(!promptExists) {
1402
1403
  if(settings.transition && module.can.useElement('transition') && $module.transition('is supported')) {
@@ -1589,12 +1590,15 @@ $.fn.form = function(parameters) {
1589
1590
  }
1590
1591
  else if(isCheckbox) {
1591
1592
  module.verbose('Setting checkbox value', value, $element);
1592
- if(value === true || value === 1) {
1593
+ if(value === true || value === 1 || value === 'on') {
1593
1594
  $element.checkbox('check');
1594
1595
  }
1595
1596
  else {
1596
1597
  $element.checkbox('uncheck');
1597
1598
  }
1599
+ if(typeof value === 'string') {
1600
+ $field.val(value);
1601
+ }
1598
1602
  }
1599
1603
  else if(isDropdown) {
1600
1604
  module.verbose('Setting dropdown value', value, $element);
@@ -1707,7 +1711,7 @@ $.fn.form = function(parameters) {
1707
1711
  if(event && $module.data('moduleApi') !== undefined) {
1708
1712
  event.stopImmediatePropagation();
1709
1713
  }
1710
- if(settings.errorFocus) {
1714
+ if(settings.errorFocus && ignoreCallbacks !== true) {
1711
1715
  var focusElement, hasTabIndex = true;
1712
1716
  if (typeof settings.errorFocus === 'string') {
1713
1717
  focusElement = $(settings.errorFocus);
@@ -2030,7 +2034,7 @@ $.fn.form.settings = {
2030
2034
 
2031
2035
  autoCheckRequired : false,
2032
2036
  preventLeaving : false,
2033
- errorFocus : false,
2037
+ errorFocus : true,
2034
2038
  dateHandling : 'date', // 'date', 'input', 'formatter'
2035
2039
 
2036
2040
  onValid : function() {},
@@ -2086,7 +2090,6 @@ $.fn.form.settings = {
2086
2090
  doesntContain : '{name} cannot contain "{ruleValue}"',
2087
2091
  doesntContainExactly : '{name} cannot contain exactly "{ruleValue}"',
2088
2092
  minLength : '{name} must be at least {ruleValue} characters',
2089
- length : '{name} must be at least {ruleValue} characters',
2090
2093
  exactLength : '{name} must be exactly {ruleValue} characters',
2091
2094
  maxLength : '{name} cannot be longer than {ruleValue} characters',
2092
2095
  match : '{name} must match {ruleValue} field',
@@ -2100,7 +2103,7 @@ $.fn.form.settings = {
2100
2103
  selector : {
2101
2104
  checkbox : 'input[type="checkbox"], input[type="radio"]',
2102
2105
  clear : '.clear',
2103
- field : 'input:not(.search):not([type="file"]), textarea, select',
2106
+ field : 'input:not(.search):not([type="file"]):not([type="reset"]):not([type="button"]):not([type="submit"]), textarea, select',
2104
2107
  group : '.field',
2105
2108
  input : 'input:not([type="file"])',
2106
2109
  message : '.error.message',
@@ -2141,15 +2144,22 @@ $.fn.form.settings = {
2141
2144
  html += '<li>' + value + '</li>';
2142
2145
  });
2143
2146
  html += '</ul>';
2144
- return $(html);
2147
+ return html;
2145
2148
  },
2146
2149
 
2147
- // template that produces label
2148
- prompt: function(errors, labelClasses) {
2149
- return $('<div/>')
2150
- .addClass(labelClasses)
2151
- .html(errors[0])
2150
+ // template that produces label content
2151
+ prompt: function(errors) {
2152
+ if(errors.length === 1){
2153
+ return errors[0];
2154
+ }
2155
+ var
2156
+ html = '<ul class="ui list">'
2152
2157
  ;
2158
+ $.each(errors, function(index, value) {
2159
+ html += '<li>' + value + '</li>';
2160
+ });
2161
+ html += '</ul>';
2162
+ return html;
2153
2163
  }
2154
2164
  },
2155
2165
 
@@ -2359,14 +2369,6 @@ $.fn.form.settings = {
2359
2369
  ;
2360
2370
  },
2361
2371
 
2362
- // see rls notes for 2.0.6 (this is a duplicate of minLength)
2363
- length: function(value, requiredLength) {
2364
- return (value !== undefined)
2365
- ? (value.length >= requiredLength)
2366
- : false
2367
- ;
2368
- },
2369
-
2370
2372
  // is exactly length
2371
2373
  exactLength: function(value, requiredLength) {
2372
2374
  return (value !== undefined)
@@ -2575,7 +2577,7 @@ $.fn.form.settings = {
2575
2577
  })( jQuery, window, document );
2576
2578
 
2577
2579
  /*!
2578
- * # Fomantic-UI 2.9.0-beta.10 - Accordion
2580
+ * # Fomantic-UI 2.9.0-beta.100 - Accordion
2579
2581
  * http://github.com/fomantic/Fomantic-UI/
2580
2582
  *
2581
2583
  *
@@ -3194,7 +3196,7 @@ $.extend( $.easing, {
3194
3196
 
3195
3197
 
3196
3198
  /*!
3197
- * # Fomantic-UI 2.9.0-beta.10 - Calendar
3199
+ * # Fomantic-UI 2.9.0-beta.100 - Calendar
3198
3200
  * http://github.com/fomantic/Fomantic-UI/
3199
3201
  *
3200
3202
  *
@@ -3317,7 +3319,7 @@ $.fn.calendar = function(parameters) {
3317
3319
  module.set.maxDate($module.data(metadata.maxDate));
3318
3320
  }
3319
3321
  module.setting('type', module.get.type());
3320
- module.setting('on', settings.on || ($input.length ? 'focus' : 'click'));
3322
+ module.setting('on', settings.on || 'click');
3321
3323
  },
3322
3324
  popup: function () {
3323
3325
  if (settings.inline) {
@@ -3348,7 +3350,10 @@ $.fn.calendar = function(parameters) {
3348
3350
  module.refreshTooltips();
3349
3351
  return settings.onVisible.apply($container, arguments);
3350
3352
  };
3351
- var onHidden = settings.onHidden;
3353
+ var onHidden = function () {
3354
+ module.blur();
3355
+ return settings.onHidden.apply($container, arguments)
3356
+ }
3352
3357
  if (!$input.length) {
3353
3358
  //no input, $container has to handle focus/blur
3354
3359
  $container.attr('tabindex', '0');
@@ -3357,10 +3362,6 @@ $.fn.calendar = function(parameters) {
3357
3362
  module.focus();
3358
3363
  return settings.onVisible.apply($container, arguments);
3359
3364
  };
3360
- onHidden = function () {
3361
- module.blur();
3362
- return settings.onHidden.apply($container, arguments);
3363
- };
3364
3365
  }
3365
3366
  var onShow = function () {
3366
3367
  //reset the focus date onShow
@@ -5067,7 +5068,7 @@ $.fn.calendar.settings = {
5067
5068
  })(jQuery, window, document);
5068
5069
 
5069
5070
  /*!
5070
- * # Fomantic-UI 2.9.0-beta.10 - Checkbox
5071
+ * # Fomantic-UI 2.9.0-beta.100 - Checkbox
5071
5072
  * http://github.com/fomantic/Fomantic-UI/
5072
5073
  *
5073
5074
  *
@@ -5307,18 +5308,26 @@ $.fn.checkbox = function(parameters) {
5307
5308
  }
5308
5309
  }
5309
5310
 
5311
+ shortcutPressed = false;
5310
5312
  if(key == keyCode.escape) {
5311
5313
  module.verbose('Escape key pressed blurring field');
5312
5314
  $input.blur();
5313
5315
  shortcutPressed = true;
5314
5316
  }
5315
- else if(!event.ctrlKey && ( key == keyCode.space || (key == keyCode.enter && settings.enableEnterKey)) ) {
5316
- module.verbose('Enter/space key pressed, toggling checkbox');
5317
- module.toggle();
5318
- shortcutPressed = true;
5319
- }
5320
- else {
5321
- shortcutPressed = false;
5317
+ else if(!event.ctrlKey && module.can.change()) {
5318
+ if( key == keyCode.space || (key == keyCode.enter && settings.enableEnterKey) ) {
5319
+ module.verbose('Enter/space key pressed, toggling checkbox');
5320
+ module.toggle();
5321
+ shortcutPressed = true;
5322
+ } else if($module.is('.toggle, .slider') && !module.is.radio()) {
5323
+ if(key == keyCode.left && module.is.checked()) {
5324
+ module.uncheck();
5325
+ shortcutPressed = true;
5326
+ } else if(key == keyCode.right && module.is.unchecked()) {
5327
+ module.check();
5328
+ shortcutPressed = true;
5329
+ }
5330
+ }
5322
5331
  }
5323
5332
  },
5324
5333
  keyup: function(event) {
@@ -5391,7 +5400,6 @@ $.fn.checkbox = function(parameters) {
5391
5400
  settings.onEnable.call(input);
5392
5401
  // preserve legacy callbacks
5393
5402
  settings.onEnabled.call(input);
5394
- module.trigger.change();
5395
5403
  }
5396
5404
  },
5397
5405
 
@@ -5406,7 +5414,6 @@ $.fn.checkbox = function(parameters) {
5406
5414
  settings.onDisable.call(input);
5407
5415
  // preserve legacy callbacks
5408
5416
  settings.onDisabled.call(input);
5409
- module.trigger.change();
5410
5417
  }
5411
5418
  },
5412
5419
 
@@ -5934,7 +5941,7 @@ $.fn.checkbox.settings = {
5934
5941
 
5935
5942
  selector : {
5936
5943
  checkbox : '.ui.checkbox',
5937
- label : 'label, .box',
5944
+ label : 'label',
5938
5945
  input : 'input[type="checkbox"], input[type="radio"]',
5939
5946
  link : 'a[href]'
5940
5947
  }
@@ -5944,7 +5951,7 @@ $.fn.checkbox.settings = {
5944
5951
  })( jQuery, window, document );
5945
5952
 
5946
5953
  /*!
5947
- * # Fomantic-UI 2.9.0-beta.10 - Dimmer
5954
+ * # Fomantic-UI 2.9.0-beta.100 - Dimmer
5948
5955
  * http://github.com/fomantic/Fomantic-UI/
5949
5956
  *
5950
5957
  *
@@ -6701,7 +6708,7 @@ $.fn.dimmer.settings = {
6701
6708
  })( jQuery, window, document );
6702
6709
 
6703
6710
  /*!
6704
- * # Fomantic-UI 2.9.0-beta.10 - Dropdown
6711
+ * # Fomantic-UI 2.9.0-beta.100 - Dropdown
6705
6712
  * http://github.com/fomantic/Fomantic-UI/
6706
6713
  *
6707
6714
  *
@@ -6902,6 +6909,7 @@ $.fn.dropdown = function(parameters) {
6902
6909
  select: function() {
6903
6910
  if(module.has.input() && selectObserver) {
6904
6911
  selectObserver.observe($module[0], {
6912
+ attributes: true,
6905
6913
  childList : true,
6906
6914
  subtree : true
6907
6915
  });
@@ -7123,6 +7131,9 @@ $.fn.dropdown = function(parameters) {
7123
7131
  module.debug('Disabling dropdown');
7124
7132
  $module.addClass(className.disabled);
7125
7133
  }
7134
+ if($input.is('[required]')) {
7135
+ settings.forceSelection = true;
7136
+ }
7126
7137
  $input
7127
7138
  .removeAttr('required')
7128
7139
  .removeAttr('class')
@@ -7987,8 +7998,8 @@ $.fn.dropdown = function(parameters) {
7987
7998
  },
7988
7999
  select: {
7989
8000
  mutation: function(mutations) {
7990
- module.debug('<select> modified, recreating menu');
7991
8001
  if(module.is.selectMutation(mutations)) {
8002
+ module.debug('<select> modified, recreating menu');
7992
8003
  module.disconnect.selectObserver();
7993
8004
  module.refresh();
7994
8005
  module.setup.select();
@@ -9022,7 +9033,7 @@ $.fn.dropdown = function(parameters) {
9022
9033
  module.error(error.noStorage);
9023
9034
  return;
9024
9035
  }
9025
- name = sessionStorage.getItem(value);
9036
+ name = sessionStorage.getItem(value + elementNamespace);
9026
9037
  return (name !== undefined)
9027
9038
  ? name
9028
9039
  : false
@@ -9066,7 +9077,7 @@ $.fn.dropdown = function(parameters) {
9066
9077
  return;
9067
9078
  }
9068
9079
  module.verbose('Saving remote data to session storage', value, name);
9069
- sessionStorage.setItem(value, name);
9080
+ sessionStorage.setItem(value + elementNamespace, name);
9070
9081
  }
9071
9082
  },
9072
9083
 
@@ -9771,18 +9782,10 @@ $.fn.dropdown = function(parameters) {
9771
9782
  return;
9772
9783
  }
9773
9784
  // temporarily disconnect observer
9774
- if(selectObserver) {
9775
- selectObserver.disconnect();
9776
- module.verbose('Temporarily disconnecting mutation observer');
9777
- }
9785
+ module.disconnect.selectObserver();
9778
9786
  $option.remove();
9779
9787
  module.verbose('Removing user addition as an <option>', escapedValue);
9780
- if(selectObserver) {
9781
- selectObserver.observe($input[0], {
9782
- childList : true,
9783
- subtree : true
9784
- });
9785
- }
9788
+ module.observe.select();
9786
9789
  },
9787
9790
  message: function() {
9788
9791
  $menu.children(selector.message).remove();
@@ -10147,7 +10150,7 @@ $.fn.dropdown = function(parameters) {
10147
10150
  selectChanged = false
10148
10151
  ;
10149
10152
  $.each(mutations, function(index, mutation) {
10150
- if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
10153
+ if($(mutation.target).is('select, option, optgroup') || $(mutation.addedNodes).is('select')) {
10151
10154
  selectChanged = true;
10152
10155
  return false;
10153
10156
  }
@@ -10692,7 +10695,7 @@ $.fn.dropdown.settings = {
10692
10695
  keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing
10693
10696
 
10694
10697
  match : 'both', // what to match against with search selection (both, text, or label)
10695
- fullTextSearch : false, // search anywhere in value (set to 'exact' to require exact matches)
10698
+ fullTextSearch : 'exact', // search anywhere in value (set to 'exact' to require exact matches)
10696
10699
  ignoreDiacritics : false, // match results also if they contain diacritics of the same base character (for example searching for "a" will also match "á" or "â" or "à", etc...)
10697
10700
  hideDividers : false, // Whether to hide any divider elements (specified in selector.divider) that are sibling to any items when searched (set to true will hide all dividers, set to 'empty' will hide them when they are not followed by a visible item)
10698
10701
 
@@ -10700,7 +10703,7 @@ $.fn.dropdown.settings = {
10700
10703
  preserveHTML : true, // preserve html when selecting value
10701
10704
  sortSelect : false, // sort selection on init
10702
10705
 
10703
- forceSelection : true, // force a choice on blur with search selection
10706
+ forceSelection : false, // force a choice on blur with search selection
10704
10707
 
10705
10708
  allowAdditions : false, // whether multiple select should allow user added values
10706
10709
  ignoreCase : false, // whether to consider case sensitivity when creating labels
@@ -10711,7 +10714,7 @@ $.fn.dropdown.settings = {
10711
10714
  useLabels : true, // whether multiple select should filter currently active selections from choices
10712
10715
  delimiter : ',', // when multiselect uses normal <input> the values will be delimited with this character
10713
10716
 
10714
- showOnFocus : true, // show menu on focus
10717
+ showOnFocus : false, // show menu on focus
10715
10718
  allowReselection : false, // whether current value should trigger callbacks when reselected
10716
10719
  allowTab : true, // add tabindex to element
10717
10720
  allowCategorySelection : false, // allow elements with sub-menus to be selected
@@ -11032,7 +11035,7 @@ $.fn.dropdown.settings.templates = {
11032
11035
  })( jQuery, window, document );
11033
11036
 
11034
11037
  /*!
11035
- * # Fomantic-UI 2.9.0-beta.10 - Embed
11038
+ * # Fomantic-UI 2.9.0-beta.100 - Embed
11036
11039
  * http://github.com/fomantic/Fomantic-UI/
11037
11040
  *
11038
11041
  *
@@ -11742,7 +11745,7 @@ $.fn.embed.settings = {
11742
11745
  })( jQuery, window, document );
11743
11746
 
11744
11747
  /*!
11745
- * # Fomantic-UI 2.9.0-beta.10 - Modal
11748
+ * # Fomantic-UI 2.9.0-beta.100 - Modal
11746
11749
  * http://github.com/fomantic/Fomantic-UI/
11747
11750
  *
11748
11751
  *
@@ -11809,7 +11812,8 @@ $.fn.modal = function(parameters) {
11809
11812
 
11810
11813
  $module = $(this),
11811
11814
  $context = $(settings.context),
11812
- $close = $module.find(selector.close),
11815
+ $closeIcon = $module.find(selector.closeIcon),
11816
+ $inputs,
11813
11817
 
11814
11818
  $allModals,
11815
11819
  $otherModals,
@@ -11835,6 +11839,7 @@ $.fn.modal = function(parameters) {
11835
11839
  module = {
11836
11840
 
11837
11841
  initialize: function() {
11842
+ module.create.id();
11838
11843
  if(!$module.hasClass('modal')) {
11839
11844
  module.create.modal();
11840
11845
  if(!$.isFunction(settings.onHidden)) {
@@ -11859,15 +11864,17 @@ $.fn.modal = function(parameters) {
11859
11864
  $actions.empty();
11860
11865
  }
11861
11866
  settings.actions.forEach(function (el) {
11862
- var icon = el[fields.icon] ? '<i class="' + module.helpers.deQuote(el[fields.icon]) + ' icon"></i>' : '',
11867
+ var icon = el[fields.icon] ? '<i '+(el[fields.text] ? 'aria-hidden="true"' : '')+' class="' + module.helpers.deQuote(el[fields.icon]) + ' icon"></i>' : '',
11863
11868
  text = module.helpers.escape(el[fields.text] || '', settings.preserveHTML),
11864
11869
  cls = module.helpers.deQuote(el[fields.class] || ''),
11865
11870
  click = el[fields.click] && $.isFunction(el[fields.click]) ? el[fields.click] : function () {};
11866
11871
  $actions.append($('<button/>', {
11867
11872
  html: icon + text,
11873
+ 'aria-label': $('<div>'+(el[fields.text] || el[fields.icon] || '')+'</div>').text(),
11868
11874
  class: className.button + ' ' + cls,
11869
11875
  click: function () {
11870
- if (click.call(element, $module) === false) {
11876
+ var button = $(this);
11877
+ if (button.is(selector.approve) || button.is(selector.deny) || click.call(element, $module) === false) {
11871
11878
  return;
11872
11879
  }
11873
11880
  module.hide();
@@ -11878,7 +11885,6 @@ $.fn.modal = function(parameters) {
11878
11885
  module.cache = {};
11879
11886
  module.verbose('Initializing dimmer', $context);
11880
11887
 
11881
- module.create.id();
11882
11888
  module.create.dimmer();
11883
11889
 
11884
11890
  if ( settings.allowMultiple ) {
@@ -11888,11 +11894,9 @@ $.fn.modal = function(parameters) {
11888
11894
  $module.addClass('top aligned');
11889
11895
  }
11890
11896
  module.refreshModals();
11891
-
11897
+ module.refreshInputs();
11892
11898
  module.bind.events();
11893
- if(settings.observeChanges) {
11894
- module.observeChanges();
11895
- }
11899
+ module.observeChanges();
11896
11900
  module.instantiate();
11897
11901
  if(settings.autoShow){
11898
11902
  module.show();
@@ -11909,16 +11913,20 @@ $.fn.modal = function(parameters) {
11909
11913
 
11910
11914
  create: {
11911
11915
  modal: function() {
11912
- $module = $('<div/>', {class: className.modal});
11916
+ $module = $('<div/>', {class: className.modal, role: 'dialog', 'aria-modal': true});
11913
11917
  if (settings.closeIcon) {
11914
- $close = $('<i/>', {class: className.close})
11915
- $module.append($close);
11918
+ $closeIcon = $('<i/>', {class: className.close, role: 'button', tabindex: 0, 'aria-label': settings.text.close})
11919
+ $module.append($closeIcon);
11916
11920
  }
11917
11921
  if (settings.title !== '') {
11918
- $('<div/>', {class: className.title}).appendTo($module);
11922
+ var titleId = '_' + module.get.id() + 'title';
11923
+ $module.attr('aria-labelledby', titleId);
11924
+ $('<div/>', {class: className.title, id: titleId}).appendTo($module);
11919
11925
  }
11920
11926
  if (settings.content !== '') {
11921
- $('<div/>', {class: className.content}).appendTo($module);
11927
+ var descId = '_' + module.get.id() + 'desc';
11928
+ $module.attr('aria-describedby', descId);
11929
+ $('<div/>', {class: className.content, id: descId}).appendTo($module);
11922
11930
  }
11923
11931
  if (module.has.configActions()) {
11924
11932
  $('<div/>', {class: className.actions}).appendTo($module);
@@ -11971,15 +11979,21 @@ $.fn.modal = function(parameters) {
11971
11979
  ;
11972
11980
  $window.off(elementEventNamespace);
11973
11981
  $dimmer.off(elementEventNamespace);
11974
- $close.off(eventNamespace);
11982
+ $closeIcon.off(elementEventNamespace);
11983
+ if($inputs) {
11984
+ $inputs.off(elementEventNamespace);
11985
+ }
11975
11986
  $context.dimmer('destroy');
11976
11987
  },
11977
11988
 
11978
11989
  observeChanges: function() {
11979
11990
  if('MutationObserver' in window) {
11980
11991
  observer = new MutationObserver(function(mutations) {
11981
- module.debug('DOM tree modified, refreshing');
11982
- module.refresh();
11992
+ if(settings.observeChanges) {
11993
+ module.debug('DOM tree modified, refreshing');
11994
+ module.refresh();
11995
+ }
11996
+ module.refreshInputs();
11983
11997
  });
11984
11998
  observer.observe(element, {
11985
11999
  childList : true,
@@ -12004,6 +12018,23 @@ $.fn.modal = function(parameters) {
12004
12018
  $allModals = $otherModals.add($module);
12005
12019
  },
12006
12020
 
12021
+ refreshInputs: function(){
12022
+ if($inputs){
12023
+ $inputs
12024
+ .off('keydown' + elementEventNamespace)
12025
+ ;
12026
+ }
12027
+ $inputs = $module.find('[tabindex], :input').filter(':visible').filter(function() {
12028
+ return $(this).closest('.disabled').length === 0;
12029
+ });
12030
+ $inputs.first()
12031
+ .on('keydown' + elementEventNamespace, module.event.inputKeyDown.first)
12032
+ ;
12033
+ $inputs.last()
12034
+ .on('keydown' + elementEventNamespace, module.event.inputKeyDown.last)
12035
+ ;
12036
+ },
12037
+
12007
12038
  attachEvents: function(selector, event) {
12008
12039
  var
12009
12040
  $toggle = $(selector)
@@ -12032,6 +12063,9 @@ $.fn.modal = function(parameters) {
12032
12063
  .on('click' + eventNamespace, selector.approve, module.event.approve)
12033
12064
  .on('click' + eventNamespace, selector.deny, module.event.deny)
12034
12065
  ;
12066
+ $closeIcon
12067
+ .on('keyup' + elementEventNamespace, module.event.closeKeyUp)
12068
+ ;
12035
12069
  $window
12036
12070
  .on('resize' + elementEventNamespace, module.event.resize)
12037
12071
  ;
@@ -12050,7 +12084,7 @@ $.fn.modal = function(parameters) {
12050
12084
 
12051
12085
  get: {
12052
12086
  id: function() {
12053
- return (Math.random().toString(16) + '000000000').substr(2, 8);
12087
+ return id;
12054
12088
  },
12055
12089
  element: function() {
12056
12090
  return $module;
@@ -12089,10 +12123,38 @@ $.fn.modal = function(parameters) {
12089
12123
  close: function() {
12090
12124
  module.hide();
12091
12125
  },
12126
+ closeKeyUp: function(event){
12127
+ var
12128
+ keyCode = event.which
12129
+ ;
12130
+ if ((keyCode === settings.keys.enter || keyCode === settings.keys.space) && $module.hasClass(className.front)) {
12131
+ module.hide();
12132
+ }
12133
+ },
12134
+ inputKeyDown: {
12135
+ first: function(event) {
12136
+ var
12137
+ keyCode = event.which
12138
+ ;
12139
+ if (keyCode === settings.keys.tab && event.shiftKey) {
12140
+ $inputs.last().focus();
12141
+ event.preventDefault();
12142
+ }
12143
+ },
12144
+ last: function(event) {
12145
+ var
12146
+ keyCode = event.which
12147
+ ;
12148
+ if (keyCode === settings.keys.tab && !event.shiftKey) {
12149
+ $inputs.first().focus();
12150
+ event.preventDefault();
12151
+ }
12152
+ }
12153
+ },
12092
12154
  mousedown: function(event) {
12093
12155
  var
12094
12156
  $target = $(event.target),
12095
- isRtl = module.is.rtl();
12157
+ isRtl = module.is.rtl()
12096
12158
  ;
12097
12159
  initialMouseDownInModal = ($target.closest(selector.modal).length > 0);
12098
12160
  if(initialMouseDownInModal) {
@@ -12140,10 +12202,9 @@ $.fn.modal = function(parameters) {
12140
12202
  },
12141
12203
  keyboard: function(event) {
12142
12204
  var
12143
- keyCode = event.which,
12144
- escapeKey = 27
12205
+ keyCode = event.which
12145
12206
  ;
12146
- if(keyCode == escapeKey) {
12207
+ if(keyCode === settings.keys.escape) {
12147
12208
  if(settings.closable) {
12148
12209
  module.debug('Escape key pressed hiding modal');
12149
12210
  if ( $module.hasClass(className.front) ) {
@@ -12458,7 +12519,7 @@ $.fn.modal = function(parameters) {
12458
12519
  $module
12459
12520
  .off('mousedown' + elementEventNamespace)
12460
12521
  ;
12461
- }
12522
+ }
12462
12523
  $dimmer
12463
12524
  .off('mousedown' + elementEventNamespace)
12464
12525
  ;
@@ -12643,13 +12704,10 @@ $.fn.modal = function(parameters) {
12643
12704
  set: {
12644
12705
  autofocus: function() {
12645
12706
  var
12646
- $inputs = $module.find('[tabindex], :input').filter(':visible').filter(function() {
12647
- return $(this).closest('.disabled').length === 0;
12648
- }),
12649
12707
  $autofocus = $inputs.filter('[autofocus]'),
12650
12708
  $input = ($autofocus.length > 0)
12651
12709
  ? $autofocus.first()
12652
- : $inputs.first()
12710
+ : ($inputs.length > 1 ? $inputs.filter(':not(i.close)') : $inputs).first()
12653
12711
  ;
12654
12712
  if($input.length > 0) {
12655
12713
  $input.focus();
@@ -12731,7 +12789,7 @@ $.fn.modal = function(parameters) {
12731
12789
  ? $(document).scrollTop() + settings.padding
12732
12790
  : $(document).scrollTop() + (module.cache.contextHeight - module.cache.height - settings.padding),
12733
12791
  marginLeft: -(module.cache.width / 2)
12734
- })
12792
+ })
12735
12793
  ;
12736
12794
  } else {
12737
12795
  $module
@@ -12740,7 +12798,7 @@ $.fn.modal = function(parameters) {
12740
12798
  ? -(module.cache.height / 2)
12741
12799
  : settings.padding / 2,
12742
12800
  marginLeft: -(module.cache.width / 2)
12743
- })
12801
+ })
12744
12802
  ;
12745
12803
  }
12746
12804
  module.verbose('Setting modal offset for legacy mode');
@@ -13066,11 +13124,19 @@ $.fn.modal.settings = {
13066
13124
  // called after deny selector match
13067
13125
  onDeny : function(){ return true; },
13068
13126
 
13127
+ keys : {
13128
+ space : 32,
13129
+ enter : 13,
13130
+ escape : 27,
13131
+ tab : 9,
13132
+ },
13133
+
13069
13134
  selector : {
13070
13135
  title : '> .header',
13071
13136
  content : '> .content',
13072
13137
  actions : '> .actions',
13073
13138
  close : '> .close',
13139
+ closeIcon: '> .close',
13074
13140
  approve : '.actions .positive, .actions .approve, .actions .ok',
13075
13141
  deny : '.actions .negative, .actions .deny, .actions .cancel',
13076
13142
  modal : '.ui.modal',
@@ -13106,7 +13172,8 @@ $.fn.modal.settings = {
13106
13172
  },
13107
13173
  text: {
13108
13174
  ok : 'Ok',
13109
- cancel: 'Cancel'
13175
+ cancel: 'Cancel',
13176
+ close : 'Close'
13110
13177
  }
13111
13178
  };
13112
13179
 
@@ -13195,7 +13262,7 @@ $.fn.modal.settings.templates = {
13195
13262
  })( jQuery, window, document );
13196
13263
 
13197
13264
  /*!
13198
- * # Fomantic-UI 2.9.0-beta.10 - Nag
13265
+ * # Fomantic-UI 2.9.0-beta.100 - Nag
13199
13266
  * http://github.com/fomantic/Fomantic-UI/
13200
13267
  *
13201
13268
  *
@@ -13754,7 +13821,7 @@ $.extend( $.easing, {
13754
13821
  })( jQuery, window, document );
13755
13822
 
13756
13823
  /*!
13757
- * # Fomantic-UI 2.9.0-beta.10 - Popup
13824
+ * # Fomantic-UI 2.9.0-beta.100 - Popup
13758
13825
  * http://github.com/fomantic/Fomantic-UI/
13759
13826
  *
13760
13827
  *
@@ -15296,7 +15363,7 @@ $.fn.popup.settings = {
15296
15363
  })( jQuery, window, document );
15297
15364
 
15298
15365
  /*!
15299
- * # Fomantic-UI 2.9.0-beta.10 - Progress
15366
+ * # Fomantic-UI 2.9.0-beta.100 - Progress
15300
15367
  * http://github.com/fomantic/Fomantic-UI/
15301
15368
  *
15302
15369
  *
@@ -16330,7 +16397,7 @@ $.fn.progress.settings = {
16330
16397
  })( jQuery, window, document );
16331
16398
 
16332
16399
  /*!
16333
- * # Fomantic-UI 2.9.0-beta.10 - Slider
16400
+ * # Fomantic-UI 2.9.0-beta.100 - Slider
16334
16401
  * http://github.com/fomantic/Fomantic-UI/
16335
16402
  *
16336
16403
  *
@@ -17669,7 +17736,7 @@ $.fn.slider.settings = {
17669
17736
  })( jQuery, window, document );
17670
17737
 
17671
17738
  /*!
17672
- * # Fomantic-UI 2.9.0-beta.10 - Rating
17739
+ * # Fomantic-UI 2.9.0-beta.100 - Rating
17673
17740
  * http://github.com/fomantic/Fomantic-UI/
17674
17741
  *
17675
17742
  *
@@ -18224,7 +18291,7 @@ $.fn.rating.settings = {
18224
18291
  })( jQuery, window, document );
18225
18292
 
18226
18293
  /*!
18227
- * # Fomantic-UI 2.9.0-beta.10 - Search
18294
+ * # Fomantic-UI 2.9.0-beta.100 - Search
18228
18295
  * http://github.com/fomantic/Fomantic-UI/
18229
18296
  *
18230
18297
  *
@@ -19792,7 +19859,7 @@ $.fn.search.settings = {
19792
19859
  })( jQuery, window, document );
19793
19860
 
19794
19861
  /*!
19795
- * # Fomantic-UI 2.9.0-beta.10 - Shape
19862
+ * # Fomantic-UI 2.9.0-beta.100 - Shape
19796
19863
  * http://github.com/fomantic/Fomantic-UI/
19797
19864
  *
19798
19865
  *
@@ -20641,7 +20708,7 @@ $.fn.shape.settings = {
20641
20708
  })( jQuery, window, document );
20642
20709
 
20643
20710
  /*!
20644
- * # Fomantic-UI 2.9.0-beta.10 - Sidebar
20711
+ * # Fomantic-UI 2.9.0-beta.100 - Sidebar
20645
20712
  * http://github.com/fomantic/Fomantic-UI/
20646
20713
  *
20647
20714
  *
@@ -21678,7 +21745,7 @@ $.fn.sidebar.settings = {
21678
21745
  })( jQuery, window, document );
21679
21746
 
21680
21747
  /*!
21681
- * # Fomantic-UI 2.9.0-beta.10 - Sticky
21748
+ * # Fomantic-UI 2.9.0-beta.100 - Sticky
21682
21749
  * http://github.com/fomantic/Fomantic-UI/
21683
21750
  *
21684
21751
  *
@@ -22636,7 +22703,7 @@ $.fn.sticky.settings = {
22636
22703
  })( jQuery, window, document );
22637
22704
 
22638
22705
  /*!
22639
- * # Fomantic-UI 2.9.0-beta.10 - Tab
22706
+ * # Fomantic-UI 2.9.0-beta.100 - Tab
22640
22707
  * http://github.com/fomantic/Fomantic-UI/
22641
22708
  *
22642
22709
  *
@@ -23638,7 +23705,7 @@ $.fn.tab.settings = {
23638
23705
  })( jQuery, window, document );
23639
23706
 
23640
23707
  /*!
23641
- * # Fomantic-UI 2.9.0-beta.10 - Toast
23708
+ * # Fomantic-UI 2.9.0-beta.100 - Toast
23642
23709
  * http://github.com/fomantic/Fomantic-UI/
23643
23710
  *
23644
23711
  *
@@ -23708,12 +23775,14 @@ $.fn.toast = function(parameters) {
23708
23775
  element = this,
23709
23776
  instance = isToastComponent ? $module.data(moduleNamespace) : undefined,
23710
23777
 
23778
+ id,
23711
23779
  module
23712
23780
  ;
23713
23781
  module = {
23714
23782
 
23715
23783
  initialize: function() {
23716
23784
  module.verbose('Initializing element');
23785
+ module.create.id();
23717
23786
  if (!module.has.container()) {
23718
23787
  module.create.container();
23719
23788
  }
@@ -23763,17 +23832,22 @@ $.fn.toast = function(parameters) {
23763
23832
  },
23764
23833
 
23765
23834
  show: function(callback) {
23766
- callback = callback || function(){};
23767
- module.debug('Showing toast');
23768
23835
  if(settings.onShow.call($toastBox, element) === false) {
23769
23836
  module.debug('onShow callback returned false, cancelling toast animation');
23770
23837
  return;
23771
23838
  }
23839
+ callback = callback || function(){};
23840
+ module.debug('Showing toast');
23772
23841
  module.animate.show(callback);
23773
23842
  },
23774
23843
 
23775
23844
  close: function(callback) {
23845
+ if(settings.onHide.call($toastBox, element) === false) {
23846
+ module.debug('onHide callback returned false, cancelling toast animation');
23847
+ return;
23848
+ }
23776
23849
  callback = callback || function(){};
23850
+ module.debug('Closing toast');
23777
23851
  module.remove.visible();
23778
23852
  module.unbind.events();
23779
23853
  module.animate.close(callback);
@@ -23785,12 +23859,16 @@ $.fn.toast = function(parameters) {
23785
23859
  module.verbose('Creating container');
23786
23860
  $context.append($('<div/>',{class: settings.position + ' ' + className.container + ' ' +(settings.horizontal ? className.horizontal : '')}));
23787
23861
  },
23862
+ id: function() {
23863
+ id = (Math.random().toString(16) + '000000000').substr(2, 8);
23864
+ module.verbose('Creating unique id for element', id);
23865
+ },
23788
23866
  toast: function() {
23789
23867
  $toastBox = $('<div/>', {class: className.box});
23790
23868
  var iconClass = module.get.iconClass();
23791
23869
  if (!isToastComponent) {
23792
23870
  module.verbose('Creating toast');
23793
- $toast = $('<div/>');
23871
+ $toast = $('<div/>', {role: 'alert'});
23794
23872
  var $content = $('<div/>', {class: className.content});
23795
23873
  if (iconClass !== '') {
23796
23874
  $toast.append($('<i/>', {class: iconClass + ' ' + className.icon}));
@@ -23803,13 +23881,21 @@ $.fn.toast = function(parameters) {
23803
23881
  }));
23804
23882
  }
23805
23883
  if (settings.title !== '') {
23884
+ var titleId = '_' + module.get.id() + 'title';
23885
+ $toast.attr('aria-labelledby', titleId);
23806
23886
  $content.append($('<div/>', {
23807
23887
  class: className.title,
23808
- text: settings.title
23888
+ id: titleId,
23889
+ html: module.helpers.escape(settings.title, settings.preserveHTML)
23809
23890
  }));
23810
23891
  }
23811
-
23812
- $content.append($('<div/>', {class: className.message, html: module.helpers.escape(settings.message, settings.preserveHTML)}));
23892
+ var descId = '_' + module.get.id() + 'desc';
23893
+ $toast.attr('aria-describedby', descId);
23894
+ $content.append($('<div/>', {
23895
+ class: className.message,
23896
+ id: descId,
23897
+ html: module.helpers.escape(settings.message, settings.preserveHTML)
23898
+ }));
23813
23899
 
23814
23900
  $toast
23815
23901
  .addClass(settings.class + ' ' + className.toast)
@@ -23817,7 +23903,7 @@ $.fn.toast = function(parameters) {
23817
23903
  ;
23818
23904
  $toast.css('opacity', settings.opacity);
23819
23905
  if (settings.closeIcon) {
23820
- $close = $('<i/>', {class: className.close + ' ' + (typeof settings.closeIcon === 'string' ? settings.closeIcon : '')});
23906
+ $close = $('<i/>', {class: className.close + ' ' + (typeof settings.closeIcon === 'string' ? settings.closeIcon : ''), role: 'button', tabindex: 0, 'aria-label': settings.text.close});
23821
23907
  if($close.hasClass(className.left)) {
23822
23908
  $toast.prepend($close);
23823
23909
  } else {
@@ -23860,15 +23946,17 @@ $.fn.toast = function(parameters) {
23860
23946
  }
23861
23947
  }
23862
23948
  settings.actions.forEach(function (el) {
23863
- var icon = el[fields.icon] ? '<i class="' + module.helpers.deQuote(el[fields.icon]) + ' icon"></i>' : '',
23949
+ var icon = el[fields.icon] ? '<i '+(el[fields.text] ? 'aria-hidden="true"' : '')+' class="' + module.helpers.deQuote(el[fields.icon]) + ' icon"></i>' : '',
23864
23950
  text = module.helpers.escape(el[fields.text] || '', settings.preserveHTML),
23865
23951
  cls = module.helpers.deQuote(el[fields.class] || ''),
23866
23952
  click = el[fields.click] && $.isFunction(el[fields.click]) ? el[fields.click] : function () {};
23867
23953
  $actions.append($('<button/>', {
23868
23954
  html: icon + text,
23955
+ 'aria-label': $('<div>'+(el[fields.text] || el[fields.icon] || '')+'</div>').text(),
23869
23956
  class: className.button + ' ' + cls,
23870
23957
  click: function () {
23871
- if (click.call(element, $module) === false) {
23958
+ var button = $(this);
23959
+ if (button.is(selector.approve) || button.is(selector.deny) || click.call(element, $module) === false) {
23872
23960
  return;
23873
23961
  }
23874
23962
  module.close();
@@ -23968,13 +24056,12 @@ $.fn.toast = function(parameters) {
23968
24056
  bind: {
23969
24057
  events: function() {
23970
24058
  module.debug('Binding events to toast');
23971
- if(settings.closeOnClick || settings.closeIcon) {
23972
- (settings.closeIcon ? $close : $toast)
23973
- .on('click' + eventNamespace, module.event.click)
23974
- ;
24059
+ if(settings.closeIcon) {
24060
+ $close.on('click' + eventNamespace, module.event.close);
23975
24061
  }
24062
+ $toast.on('click' + eventNamespace, module.event.click);
23976
24063
  if($animationObject) {
23977
- $animationObject.on('animationend' + eventNamespace, module.close);
24064
+ $animationObject.on('animationend' + eventNamespace, module.event.close);
23978
24065
  }
23979
24066
  $toastBox
23980
24067
  .on('click' + eventNamespace, selector.approve, module.event.approve)
@@ -23986,11 +24073,10 @@ $.fn.toast = function(parameters) {
23986
24073
  unbind: {
23987
24074
  events: function() {
23988
24075
  module.debug('Unbinding events to toast');
23989
- if(settings.closeOnClick || settings.closeIcon) {
23990
- (settings.closeIcon ? $close : $toast)
23991
- .off('click' + eventNamespace)
23992
- ;
24076
+ if(settings.closeIcon) {
24077
+ $close.off('click' + eventNamespace);
23993
24078
  }
24079
+ $toast.off('click' + eventNamespace);
23994
24080
  if($animationObject) {
23995
24081
  $animationObject.off('animationend' + eventNamespace);
23996
24082
  }
@@ -24022,11 +24108,6 @@ $.fn.toast = function(parameters) {
24022
24108
  },
24023
24109
  close: function(callback) {
24024
24110
  callback = $.isFunction(callback) ? callback : function(){};
24025
- module.debug('Closing toast');
24026
- if(settings.onHide.call($toastBox, element) === false) {
24027
- module.debug('onHide callback returned false, cancelling toast animation');
24028
- return;
24029
- }
24030
24111
  if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
24031
24112
  $toastBox
24032
24113
  .transition({
@@ -24082,7 +24163,7 @@ $.fn.toast = function(parameters) {
24082
24163
  has: {
24083
24164
  container: function() {
24084
24165
  module.verbose('Determining if there is already a container');
24085
- return ($context.find(module.helpers.toClass(settings.position) + selector.container + (settings.horizontal ? module.helpers.toClass(className.horizontal) : '')).length > 0);
24166
+ return ($context.find(module.helpers.toClass(settings.position) + selector.container + (settings.horizontal ? module.helpers.toClass(className.horizontal) : ':not('+module.helpers.toClass(className.horizontal)+')')).length > 0);
24086
24167
  },
24087
24168
  toast: function(){
24088
24169
  return !!module.get.toast();
@@ -24096,8 +24177,11 @@ $.fn.toast = function(parameters) {
24096
24177
  },
24097
24178
 
24098
24179
  get: {
24180
+ id: function() {
24181
+ return id;
24182
+ },
24099
24183
  container: function() {
24100
- return ($context.find(module.helpers.toClass(settings.position) + selector.container)[0]);
24184
+ return ($context.find(module.helpers.toClass(settings.position) + selector.container + (settings.horizontal ? module.helpers.toClass(className.horizontal) : ':not('+module.helpers.toClass(className.horizontal)+')'))[0]);
24101
24185
  },
24102
24186
  toastBox: function() {
24103
24187
  return $toastBox || null;
@@ -24129,9 +24213,15 @@ $.fn.toast = function(parameters) {
24129
24213
  },
24130
24214
 
24131
24215
  event: {
24216
+ close: function(){
24217
+ module.close();
24218
+ },
24132
24219
  click: function(event) {
24133
24220
  if($(event.target).closest('a').length === 0) {
24134
- settings.onClick.call($toastBox, element);
24221
+ if(settings.onClick.call($toastBox, element) === false || !settings.closeOnClick) {
24222
+ module.verbose('Click callback returned false or close denied by setting cancelling close');
24223
+ return;
24224
+ }
24135
24225
  module.close();
24136
24226
  }
24137
24227
  },
@@ -24472,6 +24562,10 @@ $.fn.toast.settings = {
24472
24562
  unclickable : 'unclickable'
24473
24563
  },
24474
24564
 
24565
+ text: {
24566
+ close : 'Close'
24567
+ },
24568
+
24475
24569
  icons : {
24476
24570
  info : 'info',
24477
24571
  success : 'checkmark',
@@ -24531,7 +24625,7 @@ $.extend( $.easing, {
24531
24625
  })( jQuery, window, document );
24532
24626
 
24533
24627
  /*!
24534
- * # Fomantic-UI 2.9.0-beta.10 - Transition
24628
+ * # Fomantic-UI 2.9.0-beta.100 - Transition
24535
24629
  * http://github.com/fomantic/Fomantic-UI/
24536
24630
  *
24537
24631
  *
@@ -25641,7 +25735,7 @@ $.fn.transition.settings = {
25641
25735
  })( jQuery, window, document );
25642
25736
 
25643
25737
  /*!
25644
- * # Fomantic-UI 2.9.0-beta.10 - API
25738
+ * # Fomantic-UI 2.9.0-beta.100 - API
25645
25739
  * http://github.com/fomantic/Fomantic-UI/
25646
25740
  *
25647
25741
  *
@@ -25790,8 +25884,8 @@ $.api = $.fn.api = function(parameters) {
25790
25884
  module.error(error.noStorage);
25791
25885
  return;
25792
25886
  }
25793
- response = sessionStorage.getItem(url);
25794
- module.debug('Using cached response', url, response);
25887
+ response = sessionStorage.getItem(url + module.get.normalizedData());
25888
+ module.debug('Using cached response', url, settings.data, response);
25795
25889
  response = module.decode.json(response);
25796
25890
  return response;
25797
25891
  }
@@ -25809,8 +25903,8 @@ $.api = $.fn.api = function(parameters) {
25809
25903
  if( $.isPlainObject(response) ) {
25810
25904
  response = JSON.stringify(response);
25811
25905
  }
25812
- sessionStorage.setItem(url, response);
25813
- module.verbose('Storing cached response for url', url, response);
25906
+ sessionStorage.setItem(url + module.get.normalizedData(), response);
25907
+ module.verbose('Storing cached response for url', url, settings.data, response);
25814
25908
  }
25815
25909
  },
25816
25910
 
@@ -25976,10 +26070,6 @@ $.api = $.fn.api = function(parameters) {
25976
26070
  cancelled: function() {
25977
26071
  return (module.cancelled || false);
25978
26072
  },
25979
- succesful: function() {
25980
- module.verbose('This behavior will be deleted due to typo. Use "was successful" instead.');
25981
- return module.was.successful();
25982
- },
25983
26073
  successful: function() {
25984
26074
  return (module.request && module.request.state() == 'resolved');
25985
26075
  },
@@ -26071,25 +26161,29 @@ $.api = $.fn.api = function(parameters) {
26071
26161
  },
26072
26162
  formData: function(data) {
26073
26163
  var
26074
- canSerialize = ($.fn.serializeObject !== undefined),
26075
- formData = (canSerialize)
26076
- ? $form.serializeObject()
26077
- : $form.serialize(),
26164
+ formData = {},
26078
26165
  hasOtherData
26079
26166
  ;
26080
26167
  data = data || settings.data;
26081
26168
  hasOtherData = $.isPlainObject(data);
26082
26169
 
26083
- if(hasOtherData) {
26084
- if(canSerialize) {
26085
- module.debug('Extending existing data with form data', data, formData);
26086
- data = $.extend(true, {}, data, formData);
26087
- }
26088
- else {
26089
- module.error(error.missingSerialize);
26090
- module.debug('Cant extend data. Replacing data with form data', data, formData);
26091
- data = formData;
26170
+ $.each($form.serializeArray(), function (i, element) {
26171
+ var node = formData[element.name];
26172
+
26173
+ if ('undefined' !== typeof node && node !== null) {
26174
+ if (Array.isArray(node)) {
26175
+ node.push(element.value);
26176
+ } else {
26177
+ formData[element.name] = [node, element.value];
26178
+ }
26179
+ } else {
26180
+ formData[element.name] = element.value;
26092
26181
  }
26182
+ });
26183
+
26184
+ if(hasOtherData) {
26185
+ module.debug('Extending existing data with form data', data, formData);
26186
+ data = $.extend(true, {}, data, formData);
26093
26187
  }
26094
26188
  else {
26095
26189
  module.debug('Adding form data', formData);
@@ -26340,6 +26434,9 @@ $.api = $.fn.api = function(parameters) {
26340
26434
  },
26341
26435
 
26342
26436
  get: {
26437
+ normalizedData: function(){
26438
+ return typeof settings.data === "string" ? settings.data : JSON.stringify(settings.data, Object.keys(settings.data).sort());
26439
+ },
26343
26440
  responseFromXHR: function(xhr) {
26344
26441
  return $.isPlainObject(xhr)
26345
26442
  ? (module.is.expectingJSON())
@@ -26783,7 +26880,6 @@ $.api.settings = {
26783
26880
  legacyParameters : 'You are using legacy API success callback names',
26784
26881
  method : 'The method you called is not defined',
26785
26882
  missingAction : 'API action used but no url was defined',
26786
- missingSerialize : 'jquery-serialize-object is required to add form data to an existing data object',
26787
26883
  missingURL : 'No URL specified for api event',
26788
26884
  noReturnedValue : 'The beforeSend callback must return a settings object, beforeSend ignored.',
26789
26885
  noStorage : 'Caching responses locally requires session storage',
@@ -26819,7 +26915,7 @@ $.api.settings = {
26819
26915
  })( jQuery, window, document );
26820
26916
 
26821
26917
  /*!
26822
- * # Fomantic-UI 2.9.0-beta.10 - State
26918
+ * # Fomantic-UI 2.9.0-beta.100 - State
26823
26919
  * http://github.com/fomantic/Fomantic-UI/
26824
26920
  *
26825
26921
  *
@@ -27531,7 +27627,7 @@ $.fn.state.settings = {
27531
27627
  })( jQuery, window, document );
27532
27628
 
27533
27629
  /*!
27534
- * # Fomantic-UI 2.9.0-beta.10 - Visibility
27630
+ * # Fomantic-UI 2.9.0-beta.100 - Visibility
27535
27631
  * http://github.com/fomantic/Fomantic-UI/
27536
27632
  *
27537
27633
  *