fomantic-ui 2.9.4-beta.5 → 2.9.4-beta.51

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 (248) hide show
  1. package/.all-contributorsrc +20 -1
  2. package/.eslintrc.js +17 -0
  3. package/.github/FUNDING.yml +1 -1
  4. package/.github/workflows/ci.yml +5 -5
  5. package/.github/workflows/depsreview.yml +14 -0
  6. package/.github/workflows/nightly.yml +1 -1
  7. package/.github/workflows/release.yml +1 -1
  8. package/CONTRIBUTORS.md +2 -0
  9. package/README.md +2 -12
  10. package/dist/components/accordion.css +1 -1
  11. package/dist/components/accordion.js +4 -2
  12. package/dist/components/accordion.min.css +1 -1
  13. package/dist/components/accordion.min.js +2 -2
  14. package/dist/components/ad.css +1 -1
  15. package/dist/components/ad.min.css +1 -1
  16. package/dist/components/api.js +7 -3
  17. package/dist/components/api.min.js +2 -2
  18. package/dist/components/breadcrumb.css +1 -1
  19. package/dist/components/breadcrumb.min.css +1 -1
  20. package/dist/components/button.css +19 -3
  21. package/dist/components/button.min.css +2 -2
  22. package/dist/components/calendar.css +1 -1
  23. package/dist/components/calendar.js +15 -3
  24. package/dist/components/calendar.min.css +1 -1
  25. package/dist/components/calendar.min.js +3 -3
  26. package/dist/components/card.css +1 -1
  27. package/dist/components/card.min.css +1 -1
  28. package/dist/components/checkbox.css +1 -1
  29. package/dist/components/checkbox.js +10 -4
  30. package/dist/components/checkbox.min.css +1 -1
  31. package/dist/components/checkbox.min.js +3 -3
  32. package/dist/components/comment.css +1 -1
  33. package/dist/components/comment.min.css +1 -1
  34. package/dist/components/container.css +1 -1
  35. package/dist/components/container.min.css +1 -1
  36. package/dist/components/dimmer.css +7 -3
  37. package/dist/components/dimmer.js +4 -2
  38. package/dist/components/dimmer.min.css +2 -2
  39. package/dist/components/dimmer.min.js +2 -2
  40. package/dist/components/divider.css +1 -1
  41. package/dist/components/divider.min.css +1 -1
  42. package/dist/components/dropdown.css +41 -38
  43. package/dist/components/dropdown.js +102 -33
  44. package/dist/components/dropdown.min.css +2 -2
  45. package/dist/components/dropdown.min.js +3 -3
  46. package/dist/components/embed.css +1 -1
  47. package/dist/components/embed.js +17 -7
  48. package/dist/components/embed.min.css +1 -1
  49. package/dist/components/embed.min.js +3 -3
  50. package/dist/components/emoji.css +1 -1
  51. package/dist/components/emoji.min.css +1 -1
  52. package/dist/components/feed.css +12 -1
  53. package/dist/components/feed.min.css +2 -2
  54. package/dist/components/flag.css +1 -1
  55. package/dist/components/flag.min.css +1 -1
  56. package/dist/components/flyout.css +1 -1
  57. package/dist/components/flyout.js +4 -2
  58. package/dist/components/flyout.min.css +1 -1
  59. package/dist/components/flyout.min.js +2 -2
  60. package/dist/components/form.css +15 -5
  61. package/dist/components/form.js +46 -20
  62. package/dist/components/form.min.css +2 -2
  63. package/dist/components/form.min.js +3 -3
  64. package/dist/components/grid.css +5 -5
  65. package/dist/components/grid.min.css +2 -2
  66. package/dist/components/header.css +4 -1
  67. package/dist/components/header.min.css +2 -2
  68. package/dist/components/icon.css +1 -1
  69. package/dist/components/icon.min.css +1 -1
  70. package/dist/components/image.css +1 -1
  71. package/dist/components/image.min.css +1 -1
  72. package/dist/components/input.css +30 -10
  73. package/dist/components/input.min.css +2 -2
  74. package/dist/components/item.css +1 -1
  75. package/dist/components/item.min.css +1 -1
  76. package/dist/components/label.css +1 -2
  77. package/dist/components/label.min.css +2 -2
  78. package/dist/components/list.css +1 -1
  79. package/dist/components/list.min.css +1 -1
  80. package/dist/components/loader.css +1 -1
  81. package/dist/components/loader.min.css +1 -1
  82. package/dist/components/menu.css +1 -2
  83. package/dist/components/menu.min.css +2 -2
  84. package/dist/components/message.css +1 -1
  85. package/dist/components/message.min.css +1 -1
  86. package/dist/components/modal.css +1 -1
  87. package/dist/components/modal.js +7 -3
  88. package/dist/components/modal.min.css +1 -1
  89. package/dist/components/modal.min.js +2 -2
  90. package/dist/components/nag.css +1 -1
  91. package/dist/components/nag.js +11 -5
  92. package/dist/components/nag.min.css +1 -1
  93. package/dist/components/nag.min.js +3 -3
  94. package/dist/components/placeholder.css +1 -1
  95. package/dist/components/placeholder.min.css +1 -1
  96. package/dist/components/popup.css +1 -2
  97. package/dist/components/popup.js +10 -4
  98. package/dist/components/popup.min.css +2 -2
  99. package/dist/components/popup.min.js +2 -2
  100. package/dist/components/progress.css +1 -1
  101. package/dist/components/progress.js +4 -2
  102. package/dist/components/progress.min.css +1 -1
  103. package/dist/components/progress.min.js +2 -2
  104. package/dist/components/rail.css +1 -1
  105. package/dist/components/rail.min.css +1 -1
  106. package/dist/components/rating.css +1 -1
  107. package/dist/components/rating.js +4 -2
  108. package/dist/components/rating.min.css +1 -1
  109. package/dist/components/rating.min.js +2 -2
  110. package/dist/components/reset.css +1 -1
  111. package/dist/components/reset.min.css +1 -1
  112. package/dist/components/reveal.css +1 -1
  113. package/dist/components/reveal.min.css +1 -1
  114. package/dist/components/search.css +1 -1
  115. package/dist/components/search.js +67 -14
  116. package/dist/components/search.min.css +1 -1
  117. package/dist/components/search.min.js +3 -3
  118. package/dist/components/segment.css +1 -1
  119. package/dist/components/segment.min.css +1 -1
  120. package/dist/components/shape.css +1 -1
  121. package/dist/components/shape.js +4 -2
  122. package/dist/components/shape.min.css +1 -1
  123. package/dist/components/shape.min.js +2 -2
  124. package/dist/components/sidebar.css +1 -1
  125. package/dist/components/sidebar.js +4 -2
  126. package/dist/components/sidebar.min.css +1 -1
  127. package/dist/components/sidebar.min.js +2 -2
  128. package/dist/components/site.css +14 -6
  129. package/dist/components/site.js +4 -2
  130. package/dist/components/site.min.css +2 -2
  131. package/dist/components/site.min.js +2 -2
  132. package/dist/components/slider.css +1 -1
  133. package/dist/components/slider.js +4 -2
  134. package/dist/components/slider.min.css +1 -1
  135. package/dist/components/slider.min.js +2 -2
  136. package/dist/components/state.js +4 -2
  137. package/dist/components/state.min.js +2 -2
  138. package/dist/components/statistic.css +1 -1
  139. package/dist/components/statistic.min.css +1 -1
  140. package/dist/components/step.css +1 -1
  141. package/dist/components/step.min.css +1 -1
  142. package/dist/components/sticky.css +1 -1
  143. package/dist/components/sticky.js +4 -2
  144. package/dist/components/sticky.min.css +1 -1
  145. package/dist/components/sticky.min.js +2 -2
  146. package/dist/components/tab.css +1 -1
  147. package/dist/components/tab.js +4 -2
  148. package/dist/components/tab.min.css +1 -1
  149. package/dist/components/tab.min.js +2 -2
  150. package/dist/components/table.css +32 -21
  151. package/dist/components/table.min.css +2 -2
  152. package/dist/components/text.css +1 -1
  153. package/dist/components/text.min.css +1 -1
  154. package/dist/components/toast.css +1 -1
  155. package/dist/components/toast.js +7 -3
  156. package/dist/components/toast.min.css +1 -1
  157. package/dist/components/toast.min.js +3 -3
  158. package/dist/components/transition.css +1 -1
  159. package/dist/components/transition.js +7 -3
  160. package/dist/components/transition.min.css +1 -1
  161. package/dist/components/transition.min.js +2 -2
  162. package/dist/components/visibility.js +4 -2
  163. package/dist/components/visibility.min.js +2 -2
  164. package/dist/semantic.css +239 -139
  165. package/dist/semantic.js +360 -130
  166. package/dist/semantic.min.css +3 -3
  167. package/dist/semantic.min.js +3 -3
  168. package/dist/themes/basic/assets/fonts/LICENSE.txt +91 -0
  169. package/dist/themes/default/assets/fonts/LICENSE_Lato.txt +94 -0
  170. package/dist/themes/default/assets/fonts/LICENSE_icons.txt +165 -0
  171. package/dist/themes/github/assets/fonts/LICENSE.txt +94 -0
  172. package/dist/themes/material/assets/fonts/LICENSE.txt +202 -0
  173. package/package.json +3 -3
  174. package/src/definitions/behaviors/api.js +6 -2
  175. package/src/definitions/behaviors/form.js +45 -19
  176. package/src/definitions/behaviors/state.js +3 -1
  177. package/src/definitions/behaviors/visibility.js +3 -1
  178. package/src/definitions/collections/form.less +14 -4
  179. package/src/definitions/collections/grid.less +4 -4
  180. package/src/definitions/collections/table.less +69 -54
  181. package/src/definitions/elements/button.less +25 -3
  182. package/src/definitions/elements/header.less +5 -0
  183. package/src/definitions/elements/input.less +14 -6
  184. package/src/definitions/globals/site.js +3 -1
  185. package/src/definitions/globals/site.less +17 -12
  186. package/src/definitions/modules/accordion.js +3 -1
  187. package/src/definitions/modules/calendar.js +14 -2
  188. package/src/definitions/modules/checkbox.js +9 -3
  189. package/src/definitions/modules/dimmer.js +3 -1
  190. package/src/definitions/modules/dimmer.less +8 -5
  191. package/src/definitions/modules/dropdown.js +101 -32
  192. package/src/definitions/modules/dropdown.less +38 -27
  193. package/src/definitions/modules/embed.js +16 -6
  194. package/src/definitions/modules/flyout.js +3 -1
  195. package/src/definitions/modules/modal.js +6 -2
  196. package/src/definitions/modules/nag.js +10 -4
  197. package/src/definitions/modules/popup.js +9 -3
  198. package/src/definitions/modules/progress.js +3 -1
  199. package/src/definitions/modules/rating.js +3 -1
  200. package/src/definitions/modules/search.js +66 -13
  201. package/src/definitions/modules/search.less +9 -2
  202. package/src/definitions/modules/shape.js +3 -1
  203. package/src/definitions/modules/sidebar.js +3 -1
  204. package/src/definitions/modules/slider.js +3 -1
  205. package/src/definitions/modules/sticky.js +3 -1
  206. package/src/definitions/modules/tab.js +3 -1
  207. package/src/definitions/modules/toast.js +6 -2
  208. package/src/definitions/modules/transition.js +6 -2
  209. package/src/definitions/views/feed.less +11 -0
  210. package/src/themes/basic/assets/fonts/LICENSE.txt +91 -0
  211. package/src/themes/default/assets/fonts/LICENSE_Lato.txt +94 -0
  212. package/src/themes/default/assets/fonts/LICENSE_icons.txt +165 -0
  213. package/src/themes/default/collections/form.variables +1 -0
  214. package/src/themes/default/elements/button.variables +2 -0
  215. package/src/themes/default/globals/site.variables +3 -0
  216. package/src/themes/default/globals/variation.variables +3 -0
  217. package/src/themes/default/modules/dropdown.variables +3 -0
  218. package/src/themes/default/modules/search.variables +3 -0
  219. package/src/themes/default/views/feed.variables +3 -0
  220. package/src/themes/github/assets/fonts/LICENSE.txt +94 -0
  221. package/src/themes/material/assets/fonts/LICENSE.txt +202 -0
  222. package/types/fomantic-ui-accordion.d.ts +1 -1
  223. package/types/fomantic-ui-api.d.ts +9 -3
  224. package/types/fomantic-ui-calendar.d.ts +93 -8
  225. package/types/fomantic-ui-checkbox.d.ts +14 -4
  226. package/types/fomantic-ui-dimmer.d.ts +1 -1
  227. package/types/fomantic-ui-dropdown.d.ts +48 -35
  228. package/types/fomantic-ui-embed.d.ts +19 -2
  229. package/types/fomantic-ui-flyout.d.ts +24 -10
  230. package/types/fomantic-ui-form.d.ts +123 -15
  231. package/types/fomantic-ui-modal.d.ts +75 -5
  232. package/types/fomantic-ui-nag.d.ts +4 -4
  233. package/types/fomantic-ui-popup.d.ts +11 -11
  234. package/types/fomantic-ui-progress.d.ts +12 -6
  235. package/types/fomantic-ui-rating.d.ts +1 -1
  236. package/types/fomantic-ui-search.d.ts +125 -14
  237. package/types/fomantic-ui-shape.d.ts +2 -2
  238. package/types/fomantic-ui-sidebar.d.ts +4 -4
  239. package/types/fomantic-ui-slider.d.ts +1 -1
  240. package/types/fomantic-ui-sticky.d.ts +1 -1
  241. package/types/fomantic-ui-tab.d.ts +5 -5
  242. package/types/fomantic-ui-toast.d.ts +14 -2
  243. package/types/fomantic-ui-transition.d.ts +29 -1
  244. package/types/fomantic-ui-visibility.d.ts +3 -3
  245. package/types/index.d.ts +25 -25
  246. package/types/tests.ts +188 -0
  247. package/types/tsconfig.json +1 -1
  248. package/types/fomantic-ui-tests.ts +0 -25
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.9.4-beta.5+f855ed7 - Dropdown
2
+ * # Fomantic-UI 2.9.4-beta.51+fa62639 - Dropdown
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -41,7 +41,6 @@
41
41
  display: none;
42
42
  outline: none;
43
43
  top: 100%;
44
- min-width: -webkit-max-content;
45
44
  min-width: max-content;
46
45
  margin: 0;
47
46
  padding: 0;
@@ -407,7 +406,6 @@ select.ui.dropdown {
407
406
  width: auto;
408
407
  }
409
408
  .ui.compact.selection.dropdown > .menu:not(.multiline) {
410
- width: -webkit-max-content;
411
409
  width: max-content;
412
410
  }
413
411
 
@@ -444,70 +442,70 @@ select.ui.dropdown {
444
442
  padding: 0.78571429rem 1.14285714rem;
445
443
  }
446
444
  @media only screen and (max-width: 767.98px) {
447
- .ui.selection.dropdown.short .menu {
445
+ .ui.ui.selection.dropdown.short .menu {
448
446
  max-height: 6.01071429rem;
449
447
  }
450
- .ui.selection.dropdown[class*="very short"] .menu {
448
+ .ui.ui.selection.dropdown[class*="very short"] .menu {
451
449
  max-height: 4.00714286rem;
452
450
  }
453
451
  .ui.selection.dropdown:not(.unlimited) .menu {
454
452
  max-height: 8.01428571rem;
455
453
  }
456
- .ui.selection.dropdown.long .menu {
454
+ .ui.ui.selection.dropdown.long .menu {
457
455
  max-height: 16.02857143rem;
458
456
  }
459
- .ui.selection.dropdown[class*="very long"] .menu {
457
+ .ui.ui.selection.dropdown[class*="very long"] .menu {
460
458
  max-height: 24.04285714rem;
461
459
  }
462
460
  }
463
461
  @media only screen and (min-width: 768px) {
464
- .ui.selection.dropdown.short .menu {
462
+ .ui.ui.selection.dropdown.short .menu {
465
463
  max-height: 8.01428571rem;
466
464
  }
467
- .ui.selection.dropdown[class*="very short"] .menu {
465
+ .ui.ui.selection.dropdown[class*="very short"] .menu {
468
466
  max-height: 5.34285714rem;
469
467
  }
470
468
  .ui.selection.dropdown:not(.unlimited) .menu {
471
469
  max-height: 10.68571429rem;
472
470
  }
473
- .ui.selection.dropdown.long .menu {
471
+ .ui.ui.selection.dropdown.long .menu {
474
472
  max-height: 21.37142857rem;
475
473
  }
476
- .ui.selection.dropdown[class*="very long"] .menu {
474
+ .ui.ui.selection.dropdown[class*="very long"] .menu {
477
475
  max-height: 32.05714286rem;
478
476
  }
479
477
  }
480
478
  @media only screen and (min-width: 992px) {
481
- .ui.selection.dropdown.short .menu {
479
+ .ui.ui.selection.dropdown.short .menu {
482
480
  max-height: 12.02142857rem;
483
481
  }
484
- .ui.selection.dropdown[class*="very short"] .menu {
482
+ .ui.ui.selection.dropdown[class*="very short"] .menu {
485
483
  max-height: 8.01428571rem;
486
484
  }
487
485
  .ui.selection.dropdown:not(.unlimited) .menu {
488
486
  max-height: 16.02857143rem;
489
487
  }
490
- .ui.selection.dropdown.long .menu {
488
+ .ui.ui.selection.dropdown.long .menu {
491
489
  max-height: 32.05714286rem;
492
490
  }
493
- .ui.selection.dropdown[class*="very long"] .menu {
491
+ .ui.ui.selection.dropdown[class*="very long"] .menu {
494
492
  max-height: 48.08571429rem;
495
493
  }
496
494
  }
497
495
  @media only screen and (min-width: 1920px) {
498
- .ui.selection.dropdown.short .menu {
496
+ .ui.ui.selection.dropdown.short .menu {
499
497
  max-height: 16.02857143rem;
500
498
  }
501
- .ui.selection.dropdown[class*="very short"] .menu {
499
+ .ui.ui.selection.dropdown[class*="very short"] .menu {
502
500
  max-height: 10.68571429rem;
503
501
  }
504
502
  .ui.selection.dropdown:not(.unlimited) .menu {
505
503
  max-height: 21.37142857rem;
506
504
  }
507
- .ui.selection.dropdown.long .menu {
505
+ .ui.ui.selection.dropdown.long .menu {
508
506
  max-height: 42.74285714rem;
509
507
  }
510
- .ui.selection.dropdown[class*="very long"] .menu {
508
+ .ui.ui.selection.dropdown[class*="very long"] .menu {
511
509
  max-height: 64.11428571rem;
512
510
  }
513
511
  }
@@ -757,13 +755,13 @@ select.ui.dropdown {
757
755
  .ui.inline.dropdown > .remove.icon {
758
756
  right: 2.2em;
759
757
  }
760
- .ui.clearable.dropdown .text,
761
- .ui.clearable.dropdown a:last-of-type {
758
+ .ui.clearable.dropdown .text:not(.default),
759
+ .ui.clearable.dropdown:not(.search) > .ui.label:last-of-type {
762
760
  margin-right: 1.5em;
763
761
  }
764
762
  .ui.dropdown select.noselection ~ .remove.icon,
765
763
  .ui.dropdown input[value=""] ~ .remove.icon,
766
- .ui.dropdown input:not([value]) ~ .remove.icon,
764
+ .ui.dropdown input:not([value]):not(.search) ~ .remove.icon,
767
765
  .ui.dropdown.loading > .remove.icon {
768
766
  display: none;
769
767
  }
@@ -1791,32 +1789,32 @@ select.ui.dropdown {
1791
1789
  .ui.dropdown .menu > .item {
1792
1790
  font-size: 1rem;
1793
1791
  }
1794
- .ui.mini.dropdown,
1795
- .ui.mini.dropdown .menu > .item {
1792
+ .ui.ui.mini.dropdown,
1793
+ .ui.ui.mini.dropdown .menu > .item {
1796
1794
  font-size: 0.78571429rem;
1797
1795
  }
1798
- .ui.tiny.dropdown,
1799
- .ui.tiny.dropdown .menu > .item {
1796
+ .ui.ui.tiny.dropdown,
1797
+ .ui.ui.tiny.dropdown .menu > .item {
1800
1798
  font-size: 0.85714286rem;
1801
1799
  }
1802
- .ui.small.dropdown,
1803
- .ui.small.dropdown .menu > .item {
1800
+ .ui.ui.small.dropdown,
1801
+ .ui.ui.small.dropdown .menu > .item {
1804
1802
  font-size: 0.92857143rem;
1805
1803
  }
1806
- .ui.large.dropdown,
1807
- .ui.large.dropdown .menu > .item {
1804
+ .ui.ui.large.dropdown,
1805
+ .ui.ui.large.dropdown .menu > .item {
1808
1806
  font-size: 1.14285714rem;
1809
1807
  }
1810
- .ui.big.dropdown,
1811
- .ui.big.dropdown .menu > .item {
1808
+ .ui.ui.big.dropdown,
1809
+ .ui.ui.big.dropdown .menu > .item {
1812
1810
  font-size: 1.28571429rem;
1813
1811
  }
1814
- .ui.huge.dropdown,
1815
- .ui.huge.dropdown .menu > .item {
1812
+ .ui.ui.huge.dropdown,
1813
+ .ui.ui.huge.dropdown .menu > .item {
1816
1814
  font-size: 1.42857143rem;
1817
1815
  }
1818
- .ui.massive.dropdown,
1819
- .ui.massive.dropdown .menu > .item {
1816
+ .ui.ui.massive.dropdown,
1817
+ .ui.ui.massive.dropdown .menu > .item {
1820
1818
  font-size: 1.71428571rem;
1821
1819
  }
1822
1820
 
@@ -1978,9 +1976,14 @@ select.ui.dropdown {
1978
1976
  scrollbar-shadow-color: #656565;
1979
1977
  scrollbar-track-color: #323232;
1980
1978
  scrollbar-arrow-color: #323232;
1981
-
1979
+ }
1980
+ @supports (-moz-appearance: none) {
1981
+ .ui.dropdown .inverted.menu,
1982
+ .ui.inverted.dropdown .menu {
1983
+
1982
1984
  /* firefox: first color thumb, second track */
1983
- scrollbar-color: rgba(255, 255, 255, 0.25) rgba(255, 255, 255, 0.1);
1985
+ scrollbar-color: rgba(255, 255, 255, 0.25) rgba(255, 255, 255, 0.1);
1986
+ }
1984
1987
  }
1985
1988
  .ui.pointing.dropdown > .inverted.menu::after,
1986
1989
  .ui.inverted.pointing.dropdown > .menu::after {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.9.4-beta.5+f855ed7 - Dropdown
2
+ * # Fomantic-UI 2.9.4-beta.51+fa62639 - Dropdown
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -793,7 +793,7 @@
793
793
  }
794
794
  if (module.is.multiple()) {
795
795
  $.each(preSelected, function (index, value) {
796
- $item.filter('[data-value="' + value + '"]')
796
+ $item.filter('[data-' + metadata.value + '="' + value + '"]')
797
797
  .addClass(className.filtered)
798
798
  ;
799
799
  });
@@ -890,11 +890,13 @@
890
890
  ? query
891
891
  : module.get.query()
892
892
  ),
893
- results = null,
894
- escapedTerm = module.escape.string(searchTerm),
895
- regExpFlags = (settings.ignoreSearchCase ? 'i' : '') + 'gm',
893
+ results = null,
894
+ escapedTerm = module.escape.string(searchTerm),
895
+ regExpIgnore = settings.ignoreSearchCase ? 'i' : '',
896
+ regExpFlags = regExpIgnore + 'gm',
896
897
  beginsWithRegExp = new RegExp('^' + escapedTerm, regExpFlags)
897
898
  ;
899
+ module.remove.filteredItem();
898
900
  // avoid loop if we're matching nothing
899
901
  if (module.has.query()) {
900
902
  results = [];
@@ -938,12 +940,34 @@
938
940
  ;
939
941
  }
940
942
  module.debug('Showing only matched items', searchTerm);
941
- module.remove.filteredItem();
942
943
  if (results) {
943
944
  $item
944
945
  .not(results)
945
946
  .addClass(className.filtered)
946
947
  ;
948
+ if (settings.highlightMatches && (settings.match === 'both' || settings.match === 'text')) {
949
+ var querySplit = query.split(''),
950
+ diacriticReg = settings.ignoreDiacritics ? '[\u0300-\u036F]?' : '',
951
+ htmlReg = '(?![^<]*>)',
952
+ markedRegExp = new RegExp(htmlReg + '(' + querySplit.join(diacriticReg + ')(.*?)' + htmlReg + '(') + diacriticReg + ')', regExpIgnore),
953
+ markedReplacer = function () {
954
+ var args = [].slice.call(arguments, 1, querySplit.length * 2).map(function (x, i) {
955
+ return i & 1 ? x : '<mark>' + x + '</mark>'; // eslint-disable-line no-bitwise
956
+ });
957
+
958
+ return args.join('');
959
+ }
960
+ ;
961
+ $.each(results, function (index, result) {
962
+ var $result = $(result),
963
+ markedHTML = module.get.choiceText($result, true)
964
+ ;
965
+ if (settings.ignoreDiacritics) {
966
+ markedHTML = markedHTML.normalize('NFD');
967
+ }
968
+ $result.html(markedHTML.replace(markedRegExp, markedReplacer));
969
+ });
970
+ }
947
971
  }
948
972
 
949
973
  if (!module.has.query()) {
@@ -979,8 +1003,10 @@
979
1003
  termLength = term.length,
980
1004
  queryLength = query.length
981
1005
  ;
982
- query = settings.ignoreSearchCase ? query.toLowerCase() : query;
983
- term = settings.ignoreSearchCase ? term.toLowerCase() : term;
1006
+ if (settings.ignoreSearchCase) {
1007
+ query = query.toLowerCase();
1008
+ term = term.toLowerCase();
1009
+ }
984
1010
  if (queryLength > termLength) {
985
1011
  return false;
986
1012
  }
@@ -1187,7 +1213,7 @@
1187
1213
  if (!itemActivated && !pageLostFocus) {
1188
1214
  if (settings.forceSelection) {
1189
1215
  module.forceSelection();
1190
- } else if (!settings.allowAdditions) {
1216
+ } else if (!settings.allowAdditions && !settings.keepSearchTerm && !module.has.menuSearch()) {
1191
1217
  module.remove.searchTerm();
1192
1218
  }
1193
1219
  module.hide();
@@ -1236,7 +1262,9 @@
1236
1262
  module.set.filtered();
1237
1263
  }
1238
1264
  clearTimeout(module.timer);
1239
- module.timer = setTimeout(function () { module.search(); }, settings.delay.search);
1265
+ module.timer = setTimeout(function () {
1266
+ module.search();
1267
+ }, settings.delay.search);
1240
1268
  },
1241
1269
  label: {
1242
1270
  click: function (event) {
@@ -1413,7 +1441,9 @@
1413
1441
  module.remove.userAddition();
1414
1442
  }
1415
1443
  if (!settings.keepSearchTerm) {
1416
- module.remove.filteredItem();
1444
+ if (module.is.multiple()) {
1445
+ module.remove.filteredItem();
1446
+ }
1417
1447
  module.remove.searchTerm();
1418
1448
  }
1419
1449
  if (!module.is.visible() && $target.length > 0) {
@@ -2587,7 +2617,7 @@
2587
2617
  } else {
2588
2618
  $combo.text(text);
2589
2619
  }
2590
- } else if (settings.action === 'activate') {
2620
+ } else if (settings.action === 'activate' || isFunction(settings.action)) {
2591
2621
  if (text !== module.get.placeholderText() || isNotPlaceholder) {
2592
2622
  $text.removeClass(className.placeholder);
2593
2623
  }
@@ -2647,7 +2677,7 @@
2647
2677
  module.set.scrollPosition($nextValue);
2648
2678
  $selectedItem.removeClass(className.selected);
2649
2679
  $nextValue.addClass(className.selected);
2650
- if (settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
2680
+ if (settings.selectOnKeydown && module.is.single() && (!$nextItem || !$nextItem.hasClass(className.actionable))) {
2651
2681
  module.set.selectedItem($nextValue);
2652
2682
  }
2653
2683
  }
@@ -2768,19 +2798,27 @@
2768
2798
  $selectedItem = settings.allowAdditions
2769
2799
  ? $selectedItem || module.get.itemWithAdditions(value)
2770
2800
  : $selectedItem || module.get.item(value);
2771
- if (!$selectedItem) {
2801
+ if (!$selectedItem && value !== undefined) {
2772
2802
  return false;
2773
2803
  }
2774
- module.debug('Setting selected menu item to', $selectedItem);
2775
- if (module.is.multiple() && !keepSearchTerm) {
2776
- module.remove.searchWidth();
2777
- }
2778
- if (module.is.single()) {
2804
+ if (isMultiple) {
2805
+ if (!keepSearchTerm) {
2806
+ module.remove.searchWidth();
2807
+ }
2808
+ if (settings.useLabels) {
2809
+ module.remove.selectedItem();
2810
+ if (value === undefined) {
2811
+ module.remove.labels($module.find(selector.label), true);
2812
+ }
2813
+ }
2814
+ } else {
2779
2815
  module.remove.activeItem();
2780
2816
  module.remove.selectedItem();
2781
- } else if (settings.useLabels) {
2782
- module.remove.selectedItem();
2783
2817
  }
2818
+ if (!$selectedItem) {
2819
+ return false;
2820
+ }
2821
+ module.debug('Setting selected menu item to', $selectedItem);
2784
2822
  // select each item
2785
2823
  $selectedItem
2786
2824
  .each(function () {
@@ -3080,6 +3118,12 @@
3080
3118
  $item.removeClass(className.active);
3081
3119
  },
3082
3120
  filteredItem: function () {
3121
+ if (settings.highlightMatches) {
3122
+ $.each($item, function (index, item) {
3123
+ var $markItem = $(item);
3124
+ $markItem.html($markItem.html().replace(/<\/?mark>/g, ''));
3125
+ });
3126
+ }
3083
3127
  if (settings.useLabels && module.has.maxSelections()) {
3084
3128
  return;
3085
3129
  }
@@ -3424,7 +3468,12 @@
3424
3468
  return $selectedMenu.hasClass(className.leftward);
3425
3469
  },
3426
3470
  clearable: function () {
3427
- return $module.hasClass(className.clearable) || settings.clearable;
3471
+ var hasClearableClass = $module.hasClass(className.clearable);
3472
+ if (!hasClearableClass && settings.clearable) {
3473
+ $module.addClass(className.clearable);
3474
+ }
3475
+
3476
+ return hasClearableClass || settings.clearable;
3428
3477
  },
3429
3478
  disabled: function () {
3430
3479
  return $module.hasClass(className.disabled);
@@ -3747,12 +3796,16 @@
3747
3796
  show: function () {
3748
3797
  module.verbose('Delaying show event to ensure user intent');
3749
3798
  clearTimeout(module.timer);
3750
- module.timer = setTimeout(function () { module.show(); }, settings.delay.show);
3799
+ module.timer = setTimeout(function () {
3800
+ module.show();
3801
+ }, settings.delay.show);
3751
3802
  },
3752
3803
  hide: function () {
3753
3804
  module.verbose('Delaying hide event to ensure user intent');
3754
3805
  clearTimeout(module.timer);
3755
- module.timer = setTimeout(function () { module.hide(); }, settings.delay.hide);
3806
+ module.timer = setTimeout(function () {
3807
+ module.hide();
3808
+ }, settings.delay.hide);
3756
3809
  },
3757
3810
  },
3758
3811
 
@@ -3785,6 +3838,7 @@
3785
3838
  return text.replace(regExp.escape, '\\$&');
3786
3839
  },
3787
3840
  htmlEntities: function (string, forceAmpersand) {
3841
+ forceAmpersand = typeof forceAmpersand === 'number' ? false : forceAmpersand;
3788
3842
  var
3789
3843
  badChars = /["'<>`]/g,
3790
3844
  shouldEscape = /["&'<>`]/,
@@ -3801,8 +3855,7 @@
3801
3855
  ;
3802
3856
  if (shouldEscape.test(string)) {
3803
3857
  string = string.replace(forceAmpersand ? /&/g : /&(?![\d#a-z]{1,12};)/gi, '&amp;');
3804
-
3805
- return string.replace(badChars, escapedChar);
3858
+ string = string.replace(badChars, escapedChar);
3806
3859
  }
3807
3860
 
3808
3861
  return string;
@@ -3878,7 +3931,9 @@
3878
3931
  });
3879
3932
  }
3880
3933
  clearTimeout(module.performance.timer);
3881
- module.performance.timer = setTimeout(function () { module.performance.display(); }, 500);
3934
+ module.performance.timer = setTimeout(function () {
3935
+ module.performance.display();
3936
+ }, 500);
3882
3937
  },
3883
3938
  display: function () {
3884
3939
  var
@@ -4005,6 +4060,7 @@
4005
4060
 
4006
4061
  match: 'both', // what to match against with search selection (both, text, or label)
4007
4062
  fullTextSearch: 'exact', // search anywhere in value (set to 'exact' to require exact matches)
4063
+ highlightMatches: false, // Whether search result should highlight matching strings
4008
4064
  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...)
4009
4065
  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)
4010
4066
 
@@ -4120,9 +4176,11 @@
4120
4176
  descriptionVertical: 'descriptionVertical', // whether description should be vertical
4121
4177
  value: 'value', // actual dropdown value
4122
4178
  text: 'text', // displayed text when selected
4179
+ data: 'data', // custom data attributes
4123
4180
  type: 'type', // type of dropdown element
4124
4181
  image: 'image', // optional image path
4125
4182
  imageClass: 'imageClass', // optional individual class for image
4183
+ alt: 'alt', // optional alt text for image
4126
4184
  icon: 'icon', // optional icon name
4127
4185
  iconClass: 'iconClass', // optional individual class for icon (for example to use flag instead)
4128
4186
  class: 'class', // optional individual class for item/header
@@ -4229,8 +4287,7 @@
4229
4287
  ;
4230
4288
  if (shouldEscape.test(string)) {
4231
4289
  string = string.replace(/&(?![\d#a-z]{1,12};)/gi, '&amp;');
4232
-
4233
- return string.replace(badChars, escapedChar);
4290
+ string = string.replace(badChars, escapedChar);
4234
4291
  }
4235
4292
 
4236
4293
  return string;
@@ -4265,9 +4322,21 @@
4265
4322
  $.each(values, function (index, option) {
4266
4323
  var
4267
4324
  itemType = option[fields.type] || 'item',
4268
- isMenu = itemType.indexOf('menu') !== -1
4325
+ isMenu = itemType.indexOf('menu') !== -1,
4326
+ maybeData = '',
4327
+ dataObject = option[fields.data]
4269
4328
  ;
4270
-
4329
+ if (dataObject) {
4330
+ var dataKey,
4331
+ dataKeyEscaped
4332
+ ;
4333
+ for (dataKey in dataObject) {
4334
+ dataKeyEscaped = String(dataKey).replace(/\W/g, '');
4335
+ if (Object.prototype.hasOwnProperty.call(dataObject, dataKey) && ['text', 'value'].indexOf(dataKeyEscaped.toLowerCase()) === -1) {
4336
+ maybeData += ' data-' + dataKeyEscaped + '="' + deQuote(String(dataObject[dataKey])) + '"';
4337
+ }
4338
+ }
4339
+ }
4271
4340
  if (itemType === 'item' || isMenu) {
4272
4341
  var
4273
4342
  maybeText = option[fields.text]
@@ -4284,12 +4353,12 @@
4284
4353
  : '',
4285
4354
  hasDescription = escape(option[fields.description] || '', preserveHTML) !== ''
4286
4355
  ;
4287
- html += '<div class="' + deQuote(maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] || className.item)) + '" data-value="' + deQuote(option[fields.value], true) + '"' + maybeText + '>';
4356
+ html += '<div class="' + deQuote(maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] || className.item)) + '" data-value="' + deQuote(option[fields.value], true) + '"' + maybeText + maybeData + '>';
4288
4357
  if (isMenu) {
4289
4358
  html += '<i class="' + (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
4290
4359
  }
4291
4360
  if (option[fields.image]) {
4292
- html += '<img class="' + deQuote(option[fields.imageClass] || className.image) + '" src="' + deQuote(option[fields.image]) + '">';
4361
+ html += '<img class="' + deQuote(option[fields.imageClass] || className.image) + '" src="' + deQuote(option[fields.image]) + (option[fields.alt] ? '" alt="' + deQuote(option[fields.alt]) : '') + '">';
4293
4362
  }
4294
4363
  if (option[fields.icon]) {
4295
4364
  html += '<i class="' + deQuote(option[fields.icon] + ' ' + (option[fields.iconClass] || className.icon)) + '"></i>';