fomantic-ui 2.9.0-beta.28 → 2.9.0-beta.282

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 (313) hide show
  1. package/.all-contributorsrc +224 -3
  2. package/.github/workflows/ci.yml +7 -6
  3. package/.github/workflows/nightly.yml +13 -8
  4. package/.github/workflows/release.yml +31 -0
  5. package/CONTRIBUTORS.md +77 -37
  6. package/README.md +8 -8
  7. package/dist/components/accordion.css +175 -35
  8. package/dist/components/accordion.js +6 -3
  9. package/dist/components/accordion.min.css +2 -2
  10. package/dist/components/accordion.min.js +3 -3
  11. package/dist/components/ad.css +4 -4
  12. package/dist/components/ad.min.css +2 -2
  13. package/dist/components/api.js +88 -29
  14. package/dist/components/api.min.js +3 -3
  15. package/dist/components/breadcrumb.css +1 -1
  16. package/dist/components/breadcrumb.min.css +1 -1
  17. package/dist/components/button.css +195 -148
  18. package/dist/components/button.min.css +2 -2
  19. package/dist/components/calendar.css +18 -1
  20. package/dist/components/calendar.js +84 -67
  21. package/dist/components/calendar.min.css +2 -2
  22. package/dist/components/calendar.min.js +3 -3
  23. package/dist/components/card.css +753 -116
  24. package/dist/components/card.min.css +2 -2
  25. package/dist/components/checkbox.css +92 -91
  26. package/dist/components/checkbox.js +17 -11
  27. package/dist/components/checkbox.min.css +2 -2
  28. package/dist/components/checkbox.min.js +3 -3
  29. package/dist/components/comment.css +12 -12
  30. package/dist/components/comment.min.css +2 -2
  31. package/dist/components/container.css +97 -3
  32. package/dist/components/container.min.css +2 -2
  33. package/dist/components/dimmer.css +29 -14
  34. package/dist/components/dimmer.js +11 -5
  35. package/dist/components/dimmer.min.css +2 -2
  36. package/dist/components/dimmer.min.js +3 -3
  37. package/dist/components/divider.css +31 -31
  38. package/dist/components/divider.min.css +2 -2
  39. package/dist/components/dropdown.css +89 -49
  40. package/dist/components/dropdown.js +95 -49
  41. package/dist/components/dropdown.min.css +2 -2
  42. package/dist/components/dropdown.min.js +3 -3
  43. package/dist/components/embed.css +5 -5
  44. package/dist/components/embed.js +1 -1
  45. package/dist/components/embed.min.css +2 -2
  46. package/dist/components/embed.min.js +3 -3
  47. package/dist/components/emoji.css +10840 -8832
  48. package/dist/components/emoji.min.css +1 -1
  49. package/dist/components/feed.css +29 -29
  50. package/dist/components/feed.min.css +2 -2
  51. package/dist/components/flag.css +1001 -892
  52. package/dist/components/flag.min.css +2 -2
  53. package/dist/components/form.css +158 -81
  54. package/dist/components/form.js +38 -29
  55. package/dist/components/form.min.css +2 -2
  56. package/dist/components/form.min.js +3 -3
  57. package/dist/components/grid.css +25 -21
  58. package/dist/components/grid.min.css +2 -2
  59. package/dist/components/header.css +5 -3
  60. package/dist/components/header.min.css +2 -2
  61. package/dist/components/icon.css +2063 -1984
  62. package/dist/components/icon.min.css +2 -2
  63. package/dist/components/image.css +1 -1
  64. package/dist/components/image.min.css +1 -1
  65. package/dist/components/input.css +758 -21
  66. package/dist/components/input.min.css +2 -2
  67. package/dist/components/item.css +16 -16
  68. package/dist/components/item.min.css +2 -2
  69. package/dist/components/label.css +64 -64
  70. package/dist/components/label.min.css +2 -2
  71. package/dist/components/list.css +30 -30
  72. package/dist/components/list.min.css +2 -2
  73. package/dist/components/loader.css +352 -352
  74. package/dist/components/loader.min.css +2 -2
  75. package/dist/components/menu.css +107 -75
  76. package/dist/components/menu.min.css +1 -1
  77. package/dist/components/message.css +42 -42
  78. package/dist/components/message.min.css +2 -2
  79. package/dist/components/modal.css +13 -1
  80. package/dist/components/modal.js +127 -49
  81. package/dist/components/modal.min.css +2 -2
  82. package/dist/components/modal.min.js +3 -3
  83. package/dist/components/nag.css +1 -1
  84. package/dist/components/nag.js +1 -1
  85. package/dist/components/nag.min.css +1 -1
  86. package/dist/components/nag.min.js +3 -3
  87. package/dist/components/placeholder.css +33 -33
  88. package/dist/components/placeholder.min.css +2 -2
  89. package/dist/components/popup.css +99 -103
  90. package/dist/components/popup.js +2 -2
  91. package/dist/components/popup.min.css +2 -2
  92. package/dist/components/popup.min.js +3 -3
  93. package/dist/components/progress.css +1 -1
  94. package/dist/components/progress.js +4 -1
  95. package/dist/components/progress.min.css +1 -1
  96. package/dist/components/progress.min.js +3 -3
  97. package/dist/components/rail.css +1 -1
  98. package/dist/components/rail.min.css +1 -1
  99. package/dist/components/rating.css +1 -1
  100. package/dist/components/rating.js +1 -1
  101. package/dist/components/rating.min.css +1 -1
  102. package/dist/components/rating.min.js +3 -3
  103. package/dist/components/reset.css +5 -4
  104. package/dist/components/reset.min.css +2 -2
  105. package/dist/components/reveal.css +1 -1
  106. package/dist/components/reveal.min.css +1 -1
  107. package/dist/components/search.css +3 -3
  108. package/dist/components/search.js +2 -2
  109. package/dist/components/search.min.css +2 -2
  110. package/dist/components/search.min.js +3 -3
  111. package/dist/components/segment.css +118 -34
  112. package/dist/components/segment.min.css +2 -2
  113. package/dist/components/shape.css +1 -1
  114. package/dist/components/shape.js +3 -3
  115. package/dist/components/shape.min.css +1 -1
  116. package/dist/components/shape.min.js +3 -3
  117. package/dist/components/sidebar.css +7 -5
  118. package/dist/components/sidebar.js +12 -10
  119. package/dist/components/sidebar.min.css +2 -2
  120. package/dist/components/sidebar.min.js +3 -3
  121. package/dist/components/site.css +65 -39
  122. package/dist/components/site.js +1 -1
  123. package/dist/components/site.min.css +2 -2
  124. package/dist/components/site.min.js +3 -3
  125. package/dist/components/slider.css +17 -17
  126. package/dist/components/slider.js +68 -51
  127. package/dist/components/slider.min.css +1 -1
  128. package/dist/components/slider.min.js +3 -3
  129. package/dist/components/state.js +1 -1
  130. package/dist/components/state.min.js +3 -3
  131. package/dist/components/statistic.css +2 -2
  132. package/dist/components/statistic.min.css +2 -2
  133. package/dist/components/step.css +30 -30
  134. package/dist/components/step.min.css +2 -2
  135. package/dist/components/sticky.css +1 -1
  136. package/dist/components/sticky.js +1 -1
  137. package/dist/components/sticky.min.css +1 -1
  138. package/dist/components/sticky.min.js +3 -3
  139. package/dist/components/tab.css +5 -5
  140. package/dist/components/tab.js +23 -5
  141. package/dist/components/tab.min.css +2 -2
  142. package/dist/components/tab.min.js +3 -3
  143. package/dist/components/table.css +1174 -32
  144. package/dist/components/table.min.css +2 -2
  145. package/dist/components/text.css +1 -1
  146. package/dist/components/text.min.css +1 -1
  147. package/dist/components/toast.css +39 -1
  148. package/dist/components/toast.js +56 -28
  149. package/dist/components/toast.min.css +2 -2
  150. package/dist/components/toast.min.js +3 -3
  151. package/dist/components/transition.css +1 -1
  152. package/dist/components/transition.js +21 -16
  153. package/dist/components/transition.min.css +1 -1
  154. package/dist/components/transition.min.js +3 -3
  155. package/dist/components/visibility.js +1 -1
  156. package/dist/components/visibility.min.js +3 -3
  157. package/dist/semantic.css +19523 -13089
  158. package/dist/semantic.js +666 -369
  159. package/dist/semantic.min.css +3 -3
  160. package/dist/semantic.min.js +3 -3
  161. package/dist/themes/default/assets/fonts/brand-icons.eot +0 -0
  162. package/dist/themes/default/assets/fonts/brand-icons.svg +801 -654
  163. package/dist/themes/default/assets/fonts/brand-icons.ttf +0 -0
  164. package/dist/themes/default/assets/fonts/brand-icons.woff +0 -0
  165. package/dist/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  166. package/dist/themes/default/assets/fonts/icons.eot +0 -0
  167. package/dist/themes/default/assets/fonts/icons.svg +1175 -1079
  168. package/dist/themes/default/assets/fonts/icons.ttf +0 -0
  169. package/dist/themes/default/assets/fonts/icons.woff +0 -0
  170. package/dist/themes/default/assets/fonts/icons.woff2 +0 -0
  171. package/dist/themes/default/assets/fonts/outline-icons.eot +0 -0
  172. package/dist/themes/default/assets/fonts/outline-icons.svg +93 -95
  173. package/dist/themes/default/assets/fonts/outline-icons.ttf +0 -0
  174. package/dist/themes/default/assets/fonts/outline-icons.woff +0 -0
  175. package/dist/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  176. package/examples/assets/library/iframe-content.js +8 -8
  177. package/examples/assets/library/iframe.js +3 -3
  178. package/package.json +18 -16
  179. package/scripts/nightly-version.js +47 -38
  180. package/src/definitions/behaviors/api.js +87 -28
  181. package/src/definitions/behaviors/form.js +37 -28
  182. package/src/definitions/collections/form.less +225 -161
  183. package/src/definitions/collections/grid.less +723 -687
  184. package/src/definitions/collections/menu.less +224 -166
  185. package/src/definitions/collections/message.less +49 -47
  186. package/src/definitions/collections/table.less +855 -268
  187. package/src/definitions/elements/button.less +611 -469
  188. package/src/definitions/elements/container.less +145 -8
  189. package/src/definitions/elements/divider.less +24 -24
  190. package/src/definitions/elements/emoji.less +16 -10
  191. package/src/definitions/elements/flag.less +8 -18
  192. package/src/definitions/elements/header.less +46 -37
  193. package/src/definitions/elements/icon.less +39 -32
  194. package/src/definitions/elements/input.less +268 -26
  195. package/src/definitions/elements/label.less +125 -124
  196. package/src/definitions/elements/list.less +84 -75
  197. package/src/definitions/elements/loader.less +99 -98
  198. package/src/definitions/elements/placeholder.less +32 -32
  199. package/src/definitions/elements/segment.less +174 -55
  200. package/src/definitions/elements/step.less +76 -72
  201. package/src/definitions/elements/text.less +17 -15
  202. package/src/definitions/globals/reset.less +2 -2
  203. package/src/definitions/globals/site.less +23 -2
  204. package/src/definitions/modules/accordion.js +5 -2
  205. package/src/definitions/modules/accordion.less +181 -29
  206. package/src/definitions/modules/calendar.js +83 -66
  207. package/src/definitions/modules/calendar.less +20 -0
  208. package/src/definitions/modules/checkbox.js +16 -10
  209. package/src/definitions/modules/checkbox.less +83 -227
  210. package/src/definitions/modules/dimmer.js +10 -4
  211. package/src/definitions/modules/dimmer.less +21 -8
  212. package/src/definitions/modules/dropdown.js +94 -48
  213. package/src/definitions/modules/dropdown.less +178 -127
  214. package/src/definitions/modules/embed.less +4 -4
  215. package/src/definitions/modules/modal.js +126 -48
  216. package/src/definitions/modules/modal.less +12 -0
  217. package/src/definitions/modules/nag.less +20 -19
  218. package/src/definitions/modules/popup.js +1 -1
  219. package/src/definitions/modules/popup.less +86 -90
  220. package/src/definitions/modules/progress.js +3 -0
  221. package/src/definitions/modules/progress.less +19 -18
  222. package/src/definitions/modules/rating.less +35 -34
  223. package/src/definitions/modules/search.js +1 -1
  224. package/src/definitions/modules/search.less +35 -19
  225. package/src/definitions/modules/shape.js +2 -2
  226. package/src/definitions/modules/sidebar.js +11 -9
  227. package/src/definitions/modules/sidebar.less +36 -22
  228. package/src/definitions/modules/slider.js +67 -50
  229. package/src/definitions/modules/slider.less +48 -47
  230. package/src/definitions/modules/tab.js +22 -4
  231. package/src/definitions/modules/tab.less +4 -4
  232. package/src/definitions/modules/toast.js +55 -27
  233. package/src/definitions/modules/toast.less +48 -16
  234. package/src/definitions/modules/transition.js +20 -15
  235. package/src/definitions/views/ad.less +3 -3
  236. package/src/definitions/views/card.less +519 -374
  237. package/src/definitions/views/comment.less +93 -82
  238. package/src/definitions/views/feed.less +164 -144
  239. package/src/definitions/views/item.less +251 -198
  240. package/src/definitions/views/statistic.less +91 -89
  241. package/src/themes/basic/elements/icon.overrides +149 -149
  242. package/src/themes/basic/elements/step.overrides +2 -2
  243. package/src/themes/bookish/elements/header.overrides +1 -1
  244. package/src/themes/chubby/elements/button.overrides +1 -1
  245. package/src/themes/chubby/elements/header.overrides +1 -1
  246. package/src/themes/default/assets/fonts/brand-icons.eot +0 -0
  247. package/src/themes/default/assets/fonts/brand-icons.svg +801 -654
  248. package/src/themes/default/assets/fonts/brand-icons.ttf +0 -0
  249. package/src/themes/default/assets/fonts/brand-icons.woff +0 -0
  250. package/src/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  251. package/src/themes/default/assets/fonts/icons.eot +0 -0
  252. package/src/themes/default/assets/fonts/icons.svg +1175 -1079
  253. package/src/themes/default/assets/fonts/icons.ttf +0 -0
  254. package/src/themes/default/assets/fonts/icons.woff +0 -0
  255. package/src/themes/default/assets/fonts/icons.woff2 +0 -0
  256. package/src/themes/default/assets/fonts/outline-icons.eot +0 -0
  257. package/src/themes/default/assets/fonts/outline-icons.svg +93 -95
  258. package/src/themes/default/assets/fonts/outline-icons.ttf +0 -0
  259. package/src/themes/default/assets/fonts/outline-icons.woff +0 -0
  260. package/src/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  261. package/src/themes/default/collections/form.variables +4 -0
  262. package/src/themes/default/collections/menu.variables +6 -0
  263. package/src/themes/default/collections/table.variables +52 -0
  264. package/src/themes/default/elements/button.variables +7 -1
  265. package/src/themes/default/elements/container.variables +12 -0
  266. package/src/themes/default/elements/divider.overrides +7 -7
  267. package/src/themes/default/elements/emoji.overrides +1737 -1235
  268. package/src/themes/default/elements/emoji.variables +1 -1
  269. package/src/themes/default/elements/flag.overrides +1641 -986
  270. package/src/themes/default/elements/flag.variables +7 -5
  271. package/src/themes/default/elements/icon.overrides +1975 -1949
  272. package/src/themes/default/elements/icon.variables +1 -0
  273. package/src/themes/default/elements/input.variables +15 -0
  274. package/src/themes/default/elements/segment.variables +8 -0
  275. package/src/themes/default/elements/step.overrides +3 -3
  276. package/src/themes/default/globals/site.variables +6 -0
  277. package/src/themes/default/globals/variation.variables +140 -6
  278. package/src/themes/default/modules/accordion.overrides +6 -5
  279. package/src/themes/default/modules/accordion.variables +49 -2
  280. package/src/themes/default/modules/calendar.variables +3 -0
  281. package/src/themes/default/modules/checkbox.overrides +9 -9
  282. package/src/themes/default/modules/checkbox.variables +5 -5
  283. package/src/themes/default/modules/dimmer.variables +1 -1
  284. package/src/themes/default/modules/dropdown.overrides +5 -5
  285. package/src/themes/default/modules/dropdown.variables +4 -10
  286. package/src/themes/default/modules/modal.variables +13 -0
  287. package/src/themes/default/modules/popup.variables +0 -2
  288. package/src/themes/default/modules/toast.variables +3 -0
  289. package/src/themes/default/views/card.variables +8 -0
  290. package/src/themes/famfamfam/elements/flag.overrides +1026 -0
  291. package/src/themes/famfamfam/elements/flag.variables +13 -0
  292. package/src/themes/github/elements/icon.overrides +206 -206
  293. package/src/themes/github/elements/step.overrides +5 -5
  294. package/src/themes/github/modules/dropdown.overrides +6 -6
  295. package/src/themes/instagram/views/card.overrides +1 -1
  296. package/src/themes/joypixels/elements/emoji.overrides +1762 -1260
  297. package/src/themes/joypixels/elements/emoji.variables +1 -1
  298. package/src/themes/material/collections/menu.overrides +1 -1
  299. package/src/themes/material/elements/button.overrides +1 -1
  300. package/src/themes/material/elements/header.overrides +1 -1
  301. package/src/themes/material/elements/icon.overrides +932 -932
  302. package/src/themes/material/globals/site.variables +0 -1
  303. package/src/themes/material/modules/dropdown.overrides +1 -1
  304. package/src/themes/material/modules/modal.overrides +1 -1
  305. package/src/themes/pulsar/elements/loader.overrides +2 -2
  306. package/src/themes/resetcss/globals/reset.overrides +3 -3
  307. package/src/themes/rtl/globals/site.overrides +1 -1
  308. package/src/themes/striped/modules/progress.overrides +1 -1
  309. package/src/themes/twitter/elements/emoji.overrides +1737 -1235
  310. package/tasks/build/css.js +6 -1
  311. package/tasks/config/project/install.js +15 -13
  312. package/tasks/install.js +1 -0
  313. package/test/helpers/sinon.js +2 -2
@@ -68,7 +68,7 @@
68
68
  }
69
69
 
70
70
  /* Scrollbars */
71
- .addScrollbars() when (@useCustomScrollbars) {
71
+ & when (@useCustomScrollbars) {
72
72
  .ui.dimmer:not(.inverted)::-webkit-scrollbar-track {
73
73
  background: @trackInvertedBackground;
74
74
  }
@@ -81,8 +81,17 @@
81
81
  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {
82
82
  background: @thumbInvertedHoverBackground;
83
83
  }
84
+ .ui.dimmer:not(.inverted) {
85
+ /* IE11 */
86
+ scrollbar-face-color: @thumbInvertedBackgroundHex;
87
+ scrollbar-shadow-color: @thumbInvertedBackgroundHex;
88
+ scrollbar-track-color: @trackInvertedBackgroundHex;
89
+ scrollbar-arrow-color: @trackInvertedBackgroundHex;
90
+
91
+ /* firefox : first color thumb, second track */
92
+ scrollbar-color: @thumbInvertedBackground @trackInvertedBackground;
93
+ }
84
94
  }
85
- .addScrollbars();
86
95
 
87
96
  /*******************************
88
97
  States
@@ -171,17 +180,21 @@ body.dimmable > .dimmer {
171
180
  Blurring
172
181
  ---------------*/
173
182
 
174
- .blurring.dimmable > :not(.dimmer) {
175
- filter: @blurredStartFilter;
176
- transition: @blurredTransition;
177
- }
178
- .blurring.dimmed.dimmable > :not(.dimmer):not(.popup) {
179
- filter: @blurredEndFilter;
183
+ @supports (not (-webkit-backdrop-filter: none)) and (not (backdrop-filter: none)) {
184
+ .blurring.dimmable > :not(.dimmer) {
185
+ filter: @blurredStartFilter;
186
+ transition: @blurredTransition;
187
+ }
188
+ .blurring.dimmed.dimmable > :not(.dimmer):not(.popup) {
189
+ filter: @blurredEndFilter;
190
+ }
180
191
  }
181
192
 
182
193
  /* Dimmer Color */
183
194
  .blurring.dimmable > .dimmer {
184
195
  background: @blurredBackgroundColor;
196
+ -webkit-backdrop-filter: @blurredEndFilter;
197
+ backdrop-filter: @blurredEndFilter;
185
198
  }
186
199
  .blurring.dimmable > .inverted.dimmer {
187
200
  background: @blurredInvertedBackgroundColor;
@@ -200,6 +200,7 @@ $.fn.dropdown = function(parameters) {
200
200
  select: function() {
201
201
  if(module.has.input() && selectObserver) {
202
202
  selectObserver.observe($module[0], {
203
+ attributes: true,
203
204
  childList : true,
204
205
  subtree : true
205
206
  });
@@ -224,7 +225,7 @@ $.fn.dropdown = function(parameters) {
224
225
 
225
226
  create: {
226
227
  id: function() {
227
- id = (Math.random().toString(16) + '000000000').substr(2, 8);
228
+ id = (Math.random().toString(16) + '000000000').slice(2, 10);
228
229
  elementNamespace = '.' + id;
229
230
  module.verbose('Creating unique id for element', id);
230
231
  },
@@ -421,6 +422,9 @@ $.fn.dropdown = function(parameters) {
421
422
  module.debug('Disabling dropdown');
422
423
  $module.addClass(className.disabled);
423
424
  }
425
+ if($input.is('[required]')) {
426
+ settings.forceSelection = true;
427
+ }
424
428
  $input
425
429
  .removeAttr('required')
426
430
  .removeAttr('class')
@@ -625,6 +629,11 @@ $.fn.dropdown = function(parameters) {
625
629
  $module
626
630
  .on('change' + eventNamespace, selector.input, module.event.change)
627
631
  ;
632
+ if(module.is.multiple() && module.is.searchSelection()) {
633
+ $module
634
+ .on('paste' + eventNamespace, selector.search, module.event.paste)
635
+ ;
636
+ }
628
637
  },
629
638
  mouseEvents: function() {
630
639
  module.verbose('Binding mouse events');
@@ -844,7 +853,7 @@ $.fn.dropdown = function(parameters) {
844
853
  var value = module.is.multiple() ? module.get.values() : module.get.value();
845
854
  if (value !== '') {
846
855
  module.verbose('Value(s) present after click icon, select value(s) in items');
847
- module.set.selected(value, null, null, true);
856
+ module.set.selected(value, null, true, true);
848
857
  }
849
858
  }
850
859
  iconClicked = false;
@@ -1044,7 +1053,7 @@ $.fn.dropdown = function(parameters) {
1044
1053
  menuConfig[fields.values] = values;
1045
1054
  module.setup.menu(menuConfig);
1046
1055
  $.each(values, function(index, item) {
1047
- if(item.selected == true) {
1056
+ if(item.selected === true) {
1048
1057
  module.debug('Setting initial selection to', item[fields.value]);
1049
1058
  module.set.selected(item[fields.value]);
1050
1059
  if(!module.is.multiple()) {
@@ -1073,6 +1082,15 @@ $.fn.dropdown = function(parameters) {
1073
1082
  },
1074
1083
 
1075
1084
  event: {
1085
+ paste: function(event) {
1086
+ var pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text'),
1087
+ tokens = pasteValue.split(settings.delimiter)
1088
+ ;
1089
+ tokens.forEach(function(value){
1090
+ module.set.selected(module.escape.htmlEntities(value.trim()), null, true, true);
1091
+ });
1092
+ event.preventDefault();
1093
+ },
1076
1094
  change: function() {
1077
1095
  if(!internalChange) {
1078
1096
  module.debug('Input changed, updating selection');
@@ -1285,8 +1303,8 @@ $.fn.dropdown = function(parameters) {
1285
1303
  },
1286
1304
  select: {
1287
1305
  mutation: function(mutations) {
1288
- module.debug('<select> modified, recreating menu');
1289
1306
  if(module.is.selectMutation(mutations)) {
1307
+ module.debug('<select> modified, recreating menu');
1290
1308
  module.disconnect.selectObserver();
1291
1309
  module.refresh();
1292
1310
  module.setup.select();
@@ -1381,7 +1399,7 @@ $.fn.dropdown = function(parameters) {
1381
1399
  module.remove.userAddition();
1382
1400
  }
1383
1401
  module.remove.searchTerm();
1384
- if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {
1402
+ if(!module.is.focusedOnSearch() && skipRefocus !== true) {
1385
1403
  module.focusSearch(true);
1386
1404
  }
1387
1405
  }
@@ -1513,7 +1531,7 @@ $.fn.dropdown = function(parameters) {
1513
1531
  keydown: function(event) {
1514
1532
  var
1515
1533
  pressedKey = event.which,
1516
- isShortcutKey = module.is.inObject(pressedKey, keys)
1534
+ isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter
1517
1535
  ;
1518
1536
  if(isShortcutKey) {
1519
1537
  var
@@ -1531,7 +1549,7 @@ $.fn.dropdown = function(parameters) {
1531
1549
  hasSubMenu = ($subMenu.length> 0),
1532
1550
  hasSelectedItem = ($selectedItem.length > 0),
1533
1551
  selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
1534
- delimiterPressed = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),
1552
+ delimiterPressed = (event.key === settings.delimiter && module.is.multiple()),
1535
1553
  isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
1536
1554
  $nextItem,
1537
1555
  isSubMenuItem,
@@ -1629,7 +1647,7 @@ $.fn.dropdown = function(parameters) {
1629
1647
  .addClass(className.selected)
1630
1648
  ;
1631
1649
  module.set.scrollPosition($nextItem);
1632
- if(settings.selectOnKeydown && module.is.single()) {
1650
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1633
1651
  module.set.selectedItem($nextItem);
1634
1652
  }
1635
1653
  }
@@ -1656,7 +1674,7 @@ $.fn.dropdown = function(parameters) {
1656
1674
  .addClass(className.selected)
1657
1675
  ;
1658
1676
  module.set.scrollPosition($nextItem);
1659
- if(settings.selectOnKeydown && module.is.single()) {
1677
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1660
1678
  module.set.selectedItem($nextItem);
1661
1679
  }
1662
1680
  }
@@ -1787,7 +1805,7 @@ $.fn.dropdown = function(parameters) {
1787
1805
  ;
1788
1806
  if( module.can.activate( $(element) ) ) {
1789
1807
  module.set.selected(value, $(element));
1790
- if(!module.is.multiple()) {
1808
+ if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
1791
1809
  module.hideAndClear();
1792
1810
  }
1793
1811
  }
@@ -1800,7 +1818,7 @@ $.fn.dropdown = function(parameters) {
1800
1818
  ;
1801
1819
  if( module.can.activate( $(element) ) ) {
1802
1820
  module.set.value(value, text, $(element));
1803
- if(!module.is.multiple()) {
1821
+ if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
1804
1822
  module.hideAndClear();
1805
1823
  }
1806
1824
  }
@@ -1851,7 +1869,7 @@ $.fn.dropdown = function(parameters) {
1851
1869
  ;
1852
1870
  $sizer.text(value);
1853
1871
  // prevent rounding issues
1854
- return Math.ceil( $sizer.width() + 1);
1872
+ return Math.ceil( $sizer.width() + (module.is.edge() ? 3 : 1));
1855
1873
  },
1856
1874
  selectionCount: function() {
1857
1875
  var
@@ -2320,7 +2338,7 @@ $.fn.dropdown = function(parameters) {
2320
2338
  module.error(error.noStorage);
2321
2339
  return;
2322
2340
  }
2323
- name = sessionStorage.getItem(value);
2341
+ name = sessionStorage.getItem(value + elementNamespace);
2324
2342
  return (name !== undefined)
2325
2343
  ? name
2326
2344
  : false
@@ -2364,7 +2382,7 @@ $.fn.dropdown = function(parameters) {
2364
2382
  return;
2365
2383
  }
2366
2384
  module.verbose('Saving remote data to session storage', value, name);
2367
- sessionStorage.setItem(value, name);
2385
+ sessionStorage.setItem(value + elementNamespace, name);
2368
2386
  }
2369
2387
  },
2370
2388
 
@@ -2424,7 +2442,7 @@ $.fn.dropdown = function(parameters) {
2424
2442
  $nextSelectedItem
2425
2443
  .addClass(className.selected)
2426
2444
  ;
2427
- if(settings.selectOnKeydown && module.is.single()) {
2445
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
2428
2446
  module.set.selectedItem($nextSelectedItem);
2429
2447
  }
2430
2448
  $menu
@@ -2510,7 +2528,7 @@ $.fn.dropdown = function(parameters) {
2510
2528
  var
2511
2529
  length = module.get.query().length
2512
2530
  ;
2513
- $search.val( text.substr(0, length));
2531
+ $search.val( text.slice(0, length));
2514
2532
  },
2515
2533
  scrollPosition: function($item, forceScroll) {
2516
2534
  var
@@ -2627,13 +2645,13 @@ $.fn.dropdown = function(parameters) {
2627
2645
  module.set.scrollPosition($nextValue);
2628
2646
  $selectedItem.removeClass(className.selected);
2629
2647
  $nextValue.addClass(className.selected);
2630
- if(settings.selectOnKeydown && module.is.single()) {
2648
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
2631
2649
  module.set.selectedItem($nextValue);
2632
2650
  }
2633
2651
  }
2634
2652
  },
2635
2653
  direction: function($menu) {
2636
- if(settings.direction == 'auto') {
2654
+ if(settings.direction === 'auto') {
2637
2655
  // reset position, remove upward if it's base menu
2638
2656
  if (!$menu) {
2639
2657
  module.remove.upward();
@@ -2652,7 +2670,7 @@ $.fn.dropdown = function(parameters) {
2652
2670
  module.set.leftward($menu);
2653
2671
  }
2654
2672
  }
2655
- else if(settings.direction == 'upward') {
2673
+ else if(settings.direction === 'upward') {
2656
2674
  module.set.upward($menu);
2657
2675
  }
2658
2676
  },
@@ -2665,6 +2683,11 @@ $.fn.dropdown = function(parameters) {
2665
2683
  $element.addClass(className.leftward);
2666
2684
  },
2667
2685
  value: function(value, text, $selected, preventChangeTrigger) {
2686
+ if(typeof text === 'boolean') {
2687
+ preventChangeTrigger = text;
2688
+ $selected = undefined;
2689
+ text = undefined;
2690
+ }
2668
2691
  if(value !== undefined && value !== '' && !(Array.isArray(value) && value.length === 0)) {
2669
2692
  $input.removeClass(className.noselection);
2670
2693
  } else {
@@ -2728,12 +2751,21 @@ $.fn.dropdown = function(parameters) {
2728
2751
  visible: function() {
2729
2752
  $module.addClass(className.visible);
2730
2753
  },
2731
- exactly: function(value, $selectedItem) {
2754
+ exactly: function(value, $selectedItem, preventChangeTrigger) {
2755
+ if(typeof $selectedItem === 'boolean') {
2756
+ preventChangeTrigger = $selectedItem;
2757
+ $selectedItem = undefined;
2758
+ }
2732
2759
  module.debug('Setting selected to exact values');
2733
2760
  module.clear();
2734
- module.set.selected(value, $selectedItem);
2761
+ module.set.selected(value, $selectedItem, preventChangeTrigger);
2735
2762
  },
2736
2763
  selected: function(value, $selectedItem, preventChangeTrigger, keepSearchTerm) {
2764
+ if(typeof $selectedItem === 'boolean') {
2765
+ keepSearchTerm = preventChangeTrigger;
2766
+ preventChangeTrigger = $selectedItem;
2767
+ $selectedItem = undefined;
2768
+ }
2737
2769
  var
2738
2770
  isMultiple = module.is.multiple()
2739
2771
  ;
@@ -2765,23 +2797,30 @@ $.fn.dropdown = function(parameters) {
2765
2797
 
2766
2798
  isFiltered = $selected.hasClass(className.filtered),
2767
2799
  isActive = $selected.hasClass(className.active),
2800
+ isActionable = $selected.hasClass(className.actionable),
2768
2801
  isUserValue = $selected.hasClass(className.addition),
2769
- shouldAnimate = (isMultiple && $selectedItem.length == 1)
2802
+ shouldAnimate = (isMultiple && $selectedItem && $selectedItem.length === 1)
2770
2803
  ;
2771
- if(isMultiple) {
2804
+ if(isActionable){
2805
+ if((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
2806
+ module.save.remoteData(selectedText, selectedValue);
2807
+ }
2808
+ settings.onActionable.call(element, selectedValue, selectedText, $selected);
2809
+ }
2810
+ else if(isMultiple) {
2772
2811
  if(!isActive || isUserValue) {
2773
2812
  if(settings.apiSettings && settings.saveRemoteData) {
2774
2813
  module.save.remoteData(selectedText, selectedValue);
2775
2814
  }
2776
2815
  if(settings.useLabels) {
2816
+ module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
2777
2817
  module.add.label(selectedValue, selectedText, shouldAnimate);
2778
- module.add.value(selectedValue, selectedText, $selected);
2779
2818
  module.set.activeItem($selected);
2780
2819
  module.filterActive();
2781
2820
  module.select.nextAvailable($selectedItem);
2782
2821
  }
2783
2822
  else {
2784
- module.add.value(selectedValue, selectedText, $selected);
2823
+ module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
2785
2824
  module.set.text(module.add.variables(message.count));
2786
2825
  module.set.activeItem($selected);
2787
2826
  }
@@ -2795,7 +2834,7 @@ $.fn.dropdown = function(parameters) {
2795
2834
  if(settings.apiSettings && settings.saveRemoteData) {
2796
2835
  module.save.remoteData(selectedText, selectedValue);
2797
2836
  }
2798
- if (!keepSearchTerm) {
2837
+ if (!keepSearchTerm && !$selected.hasClass(className.actionable)) {
2799
2838
  module.set.text(selectedText);
2800
2839
  }
2801
2840
  module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
@@ -2970,7 +3009,12 @@ $.fn.dropdown = function(parameters) {
2970
3009
  }
2971
3010
  return message;
2972
3011
  },
2973
- value: function(addedValue, addedText, $selectedItem) {
3012
+ value: function(addedValue, addedText, $selectedItem, preventChangeTrigger) {
3013
+ if(typeof addedText === 'boolean') {
3014
+ preventChangeTrigger = addedText;
3015
+ $selectedItem = undefined;
3016
+ addedText = undefined;
3017
+ }
2974
3018
  var
2975
3019
  currentValue = module.get.values(true),
2976
3020
  newValue
@@ -2985,7 +3029,7 @@ $.fn.dropdown = function(parameters) {
2985
3029
  }
2986
3030
  // extend current array
2987
3031
  if(Array.isArray(currentValue)) {
2988
- newValue = currentValue.concat([addedValue]);
3032
+ newValue = $selectedItem && $selectedItem.hasClass(className.actionable) ? currentValue : currentValue.concat([addedValue]);
2989
3033
  newValue = module.get.uniqueArray(newValue);
2990
3034
  }
2991
3035
  else {
@@ -3009,7 +3053,7 @@ $.fn.dropdown = function(parameters) {
3009
3053
  else {
3010
3054
  settings.onAdd.call(element, addedValue, addedText, $selectedItem);
3011
3055
  }
3012
- module.set.value(newValue, addedText, $selectedItem);
3056
+ module.set.value(newValue, addedText, $selectedItem, preventChangeTrigger);
3013
3057
  module.check.maxSelections();
3014
3058
  },
3015
3059
  },
@@ -3069,18 +3113,10 @@ $.fn.dropdown = function(parameters) {
3069
3113
  return;
3070
3114
  }
3071
3115
  // temporarily disconnect observer
3072
- if(selectObserver) {
3073
- selectObserver.disconnect();
3074
- module.verbose('Temporarily disconnecting mutation observer');
3075
- }
3116
+ module.disconnect.selectObserver();
3076
3117
  $option.remove();
3077
3118
  module.verbose('Removing user addition as an <option>', escapedValue);
3078
- if(selectObserver) {
3079
- selectObserver.observe($input[0], {
3080
- childList : true,
3081
- subtree : true
3082
- });
3083
- }
3119
+ module.observe.select();
3084
3120
  },
3085
3121
  message: function() {
3086
3122
  $menu.children(selector.message).remove();
@@ -3379,8 +3415,11 @@ $.fn.dropdown = function(parameters) {
3379
3415
  bubbledIconClick: function(event) {
3380
3416
  return $(event.target).closest($icon).length > 0;
3381
3417
  },
3418
+ edge: function() {
3419
+ return !!window.chrome && !!window.StyleMedia;
3420
+ },
3382
3421
  chrome: function() {
3383
- return !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
3422
+ return !!window.chrome && !window.StyleMedia;
3384
3423
  },
3385
3424
  alreadySetup: function() {
3386
3425
  return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
@@ -3445,7 +3484,7 @@ $.fn.dropdown = function(parameters) {
3445
3484
  selectChanged = false
3446
3485
  ;
3447
3486
  $.each(mutations, function(index, mutation) {
3448
- if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
3487
+ if($(mutation.target).is('select, option, optgroup') || $(mutation.addedNodes).is('select')) {
3449
3488
  selectChanged = true;
3450
3489
  return false;
3451
3490
  }
@@ -3990,7 +4029,7 @@ $.fn.dropdown.settings = {
3990
4029
  keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing
3991
4030
 
3992
4031
  match : 'both', // what to match against with search selection (both, text, or label)
3993
- fullTextSearch : false, // search anywhere in value (set to 'exact' to require exact matches)
4032
+ fullTextSearch : 'exact', // search anywhere in value (set to 'exact' to require exact matches)
3994
4033
  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...)
3995
4034
  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)
3996
4035
 
@@ -3998,7 +4037,7 @@ $.fn.dropdown.settings = {
3998
4037
  preserveHTML : true, // preserve html when selecting value
3999
4038
  sortSelect : false, // sort selection on init
4000
4039
 
4001
- forceSelection : true, // force a choice on blur with search selection
4040
+ forceSelection : false, // force a choice on blur with search selection
4002
4041
 
4003
4042
  allowAdditions : false, // whether multiple select should allow user added values
4004
4043
  ignoreCase : false, // whether to consider case sensitivity when creating labels
@@ -4009,7 +4048,7 @@ $.fn.dropdown.settings = {
4009
4048
  useLabels : true, // whether multiple select should filter currently active selections from choices
4010
4049
  delimiter : ',', // when multiselect uses normal <input> the values will be delimited with this character
4011
4050
 
4012
- showOnFocus : true, // show menu on focus
4051
+ showOnFocus : false, // show menu on focus
4013
4052
  allowReselection : false, // whether current value should trigger callbacks when reselected
4014
4053
  allowTab : true, // add tabindex to element
4015
4054
  allowCategorySelection : false, // allow elements with sub-menus to be selected
@@ -4024,6 +4063,8 @@ $.fn.dropdown.settings = {
4024
4063
 
4025
4064
  headerDivider : true, // whether option headers should have an additional divider line underneath when converted from <select> <optgroup>
4026
4065
 
4066
+ collapseOnActionable : true, // whether the dropdown should collapse upon selection of an actionable item
4067
+
4027
4068
  // label settings on multi-select
4028
4069
  label: {
4029
4070
  transition : 'scale',
@@ -4043,6 +4084,7 @@ $.fn.dropdown.settings = {
4043
4084
  onChange : function(value, text, $selected){},
4044
4085
  onAdd : function(value, text, $selected){},
4045
4086
  onRemove : function(value, text, $selected){},
4087
+ onActionable : function(value, text, $selected){},
4046
4088
  onSearch : function(searchTerm){},
4047
4089
 
4048
4090
  onLabelSelect : function($selectedLabels){},
@@ -4105,12 +4147,12 @@ $.fn.dropdown.settings = {
4105
4147
  icon : 'icon', // optional icon name
4106
4148
  iconClass : 'iconClass', // optional individual class for icon (for example to use flag instead)
4107
4149
  class : 'class', // optional individual class for item/header
4108
- divider : 'divider' // optional divider append for group headers
4150
+ divider : 'divider', // optional divider append for group headers
4151
+ actionable : 'actionable' // optional actionable item
4109
4152
  },
4110
4153
 
4111
4154
  keys : {
4112
4155
  backspace : 8,
4113
- delimiter : 188, // comma
4114
4156
  deleteKey : 46,
4115
4157
  enter : 13,
4116
4158
  escape : 27,
@@ -4177,7 +4219,8 @@ $.fn.dropdown.settings = {
4177
4219
  header : 'header',
4178
4220
  divider : 'divider',
4179
4221
  groupIcon : '',
4180
- unfilterable : 'unfilterable'
4222
+ unfilterable : 'unfilterable',
4223
+ actionable : 'actionable'
4181
4224
  }
4182
4225
 
4183
4226
  };
@@ -4252,6 +4295,9 @@ $.fn.dropdown.settings.templates = {
4252
4295
  maybeText = (option[fields.text])
4253
4296
  ? ' data-text="' + deQuote(option[fields.text],true) + '"'
4254
4297
  : '',
4298
+ maybeActionable = (option[fields.actionable])
4299
+ ? className.actionable+' '
4300
+ : '',
4255
4301
  maybeDisabled = (option[fields.disabled])
4256
4302
  ? className.disabled+' '
4257
4303
  : '',
@@ -4260,7 +4306,7 @@ $.fn.dropdown.settings.templates = {
4260
4306
  : '',
4261
4307
  hasDescription = (escape(option[fields.description] || '', preserveHTML) != '')
4262
4308
  ;
4263
- html += '<div class="'+ maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4309
+ html += '<div class="'+ maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4264
4310
  if (isMenu) {
4265
4311
  html += '<i class="'+ (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
4266
4312
  }