fomantic-ui 2.9.0-beta.29 → 2.9.0-beta.292

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 (408) hide show
  1. package/.all-contributorsrc +242 -3
  2. package/.github/codeql/codeql-config.yml +4 -0
  3. package/.github/dependabot.yml +10 -0
  4. package/.github/workflows/ci.yml +10 -6
  5. package/.github/workflows/codeql.yml +68 -0
  6. package/.github/workflows/nightly.yml +16 -8
  7. package/.github/workflows/release.yml +34 -0
  8. package/CONTRIBUTORS.md +81 -37
  9. package/FAQ.md +38 -38
  10. package/README.md +8 -8
  11. package/dist/components/accordion.css +176 -36
  12. package/dist/components/accordion.js +6 -3
  13. package/dist/components/accordion.min.css +2 -2
  14. package/dist/components/accordion.min.js +3 -3
  15. package/dist/components/ad.css +4 -4
  16. package/dist/components/ad.min.css +2 -2
  17. package/dist/components/api.js +89 -30
  18. package/dist/components/api.min.js +3 -3
  19. package/dist/components/breadcrumb.css +1 -1
  20. package/dist/components/breadcrumb.min.css +1 -1
  21. package/dist/components/button.css +204 -157
  22. package/dist/components/button.min.css +2 -2
  23. package/dist/components/calendar.css +18 -1
  24. package/dist/components/calendar.js +85 -68
  25. package/dist/components/calendar.min.css +2 -2
  26. package/dist/components/calendar.min.js +3 -3
  27. package/dist/components/card.css +754 -117
  28. package/dist/components/card.min.css +2 -2
  29. package/dist/components/checkbox.css +92 -91
  30. package/dist/components/checkbox.js +17 -11
  31. package/dist/components/checkbox.min.css +2 -2
  32. package/dist/components/checkbox.min.js +3 -3
  33. package/dist/components/comment.css +12 -12
  34. package/dist/components/comment.min.css +2 -2
  35. package/dist/components/container.css +98 -4
  36. package/dist/components/container.min.css +2 -2
  37. package/dist/components/dimmer.css +29 -14
  38. package/dist/components/dimmer.js +11 -5
  39. package/dist/components/dimmer.min.css +2 -2
  40. package/dist/components/dimmer.min.js +3 -3
  41. package/dist/components/divider.css +31 -31
  42. package/dist/components/divider.min.css +2 -2
  43. package/dist/components/dropdown.css +90 -50
  44. package/dist/components/dropdown.js +134 -110
  45. package/dist/components/dropdown.min.css +2 -2
  46. package/dist/components/dropdown.min.js +3 -3
  47. package/dist/components/embed.css +5 -5
  48. package/dist/components/embed.js +1 -1
  49. package/dist/components/embed.min.css +2 -2
  50. package/dist/components/embed.min.js +3 -3
  51. package/dist/components/emoji.css +10847 -8841
  52. package/dist/components/emoji.min.css +1 -1
  53. package/dist/components/feed.css +29 -29
  54. package/dist/components/feed.min.css +2 -2
  55. package/dist/components/flag.css +1011 -902
  56. package/dist/components/flag.min.css +2 -2
  57. package/dist/components/form.css +160 -83
  58. package/dist/components/form.js +39 -30
  59. package/dist/components/form.min.css +2 -2
  60. package/dist/components/form.min.js +3 -3
  61. package/dist/components/grid.css +25 -21
  62. package/dist/components/grid.min.css +2 -2
  63. package/dist/components/header.css +6 -4
  64. package/dist/components/header.min.css +2 -2
  65. package/dist/components/icon.css +2063 -1984
  66. package/dist/components/icon.min.css +2 -2
  67. package/dist/components/image.css +1 -1
  68. package/dist/components/image.min.css +1 -1
  69. package/dist/components/input.css +759 -22
  70. package/dist/components/input.min.css +2 -2
  71. package/dist/components/item.css +17 -17
  72. package/dist/components/item.min.css +2 -2
  73. package/dist/components/label.css +72 -68
  74. package/dist/components/label.min.css +2 -2
  75. package/dist/components/list.css +31 -31
  76. package/dist/components/list.min.css +2 -2
  77. package/dist/components/loader.css +352 -352
  78. package/dist/components/loader.min.css +2 -2
  79. package/dist/components/menu.css +108 -76
  80. package/dist/components/menu.min.css +1 -1
  81. package/dist/components/message.css +43 -43
  82. package/dist/components/message.min.css +2 -2
  83. package/dist/components/modal.css +14 -2
  84. package/dist/components/modal.js +128 -50
  85. package/dist/components/modal.min.css +2 -2
  86. package/dist/components/modal.min.js +3 -3
  87. package/dist/components/nag.css +1 -1
  88. package/dist/components/nag.js +2 -2
  89. package/dist/components/nag.min.css +1 -1
  90. package/dist/components/nag.min.js +3 -3
  91. package/dist/components/placeholder.css +33 -33
  92. package/dist/components/placeholder.min.css +2 -2
  93. package/dist/components/popup.css +100 -104
  94. package/dist/components/popup.js +11 -11
  95. package/dist/components/popup.min.css +2 -2
  96. package/dist/components/popup.min.js +3 -3
  97. package/dist/components/progress.css +1 -1
  98. package/dist/components/progress.js +4 -1
  99. package/dist/components/progress.min.css +1 -1
  100. package/dist/components/progress.min.js +3 -3
  101. package/dist/components/rail.css +1 -1
  102. package/dist/components/rail.min.css +1 -1
  103. package/dist/components/rating.css +1 -1
  104. package/dist/components/rating.js +1 -1
  105. package/dist/components/rating.min.css +1 -1
  106. package/dist/components/rating.min.js +3 -3
  107. package/dist/components/reset.css +5 -4
  108. package/dist/components/reset.min.css +2 -2
  109. package/dist/components/reveal.css +1 -1
  110. package/dist/components/reveal.min.css +1 -1
  111. package/dist/components/search.css +6 -6
  112. package/dist/components/search.js +2 -2
  113. package/dist/components/search.min.css +2 -2
  114. package/dist/components/search.min.js +3 -3
  115. package/dist/components/segment.css +118 -34
  116. package/dist/components/segment.min.css +2 -2
  117. package/dist/components/shape.css +1 -1
  118. package/dist/components/shape.js +3 -3
  119. package/dist/components/shape.min.css +1 -1
  120. package/dist/components/shape.min.js +3 -3
  121. package/dist/components/sidebar.css +7 -5
  122. package/dist/components/sidebar.js +14 -12
  123. package/dist/components/sidebar.min.css +2 -2
  124. package/dist/components/sidebar.min.js +3 -3
  125. package/dist/components/site.css +139 -42
  126. package/dist/components/site.js +1 -1
  127. package/dist/components/site.min.css +2 -2
  128. package/dist/components/site.min.js +3 -3
  129. package/dist/components/slider.css +17 -17
  130. package/dist/components/slider.js +68 -51
  131. package/dist/components/slider.min.css +1 -1
  132. package/dist/components/slider.min.js +3 -3
  133. package/dist/components/state.js +2 -2
  134. package/dist/components/state.min.js +3 -3
  135. package/dist/components/statistic.css +4 -4
  136. package/dist/components/statistic.min.css +2 -2
  137. package/dist/components/step.css +31 -31
  138. package/dist/components/step.min.css +2 -2
  139. package/dist/components/sticky.css +1 -1
  140. package/dist/components/sticky.js +4 -4
  141. package/dist/components/sticky.min.css +1 -1
  142. package/dist/components/sticky.min.js +3 -3
  143. package/dist/components/tab.css +5 -5
  144. package/dist/components/tab.js +24 -6
  145. package/dist/components/tab.min.css +2 -2
  146. package/dist/components/tab.min.js +3 -3
  147. package/dist/components/table.css +1684 -272
  148. package/dist/components/table.min.css +2 -2
  149. package/dist/components/text.css +1 -1
  150. package/dist/components/text.min.css +1 -1
  151. package/dist/components/toast.css +42 -1
  152. package/dist/components/toast.js +63 -31
  153. package/dist/components/toast.min.css +2 -2
  154. package/dist/components/toast.min.js +3 -3
  155. package/dist/components/transition.css +1 -1
  156. package/dist/components/transition.js +21 -16
  157. package/dist/components/transition.min.css +1 -1
  158. package/dist/components/transition.min.js +3 -3
  159. package/dist/components/visibility.js +2 -2
  160. package/dist/components/visibility.min.js +3 -3
  161. package/dist/semantic.css +20165 -13374
  162. package/dist/semantic.js +734 -455
  163. package/dist/semantic.min.css +3 -3
  164. package/dist/semantic.min.js +3 -3
  165. package/dist/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  166. package/dist/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  167. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  168. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  169. package/dist/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  170. package/dist/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  171. package/dist/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  172. package/dist/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  173. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  174. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  175. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  176. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  177. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  178. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  179. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  180. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  181. package/dist/themes/default/assets/fonts/brand-icons.eot +0 -0
  182. package/dist/themes/default/assets/fonts/brand-icons.svg +801 -654
  183. package/dist/themes/default/assets/fonts/brand-icons.ttf +0 -0
  184. package/dist/themes/default/assets/fonts/brand-icons.woff +0 -0
  185. package/dist/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  186. package/dist/themes/default/assets/fonts/icons.eot +0 -0
  187. package/dist/themes/default/assets/fonts/icons.svg +1175 -1079
  188. package/dist/themes/default/assets/fonts/icons.ttf +0 -0
  189. package/dist/themes/default/assets/fonts/icons.woff +0 -0
  190. package/dist/themes/default/assets/fonts/icons.woff2 +0 -0
  191. package/dist/themes/default/assets/fonts/outline-icons.eot +0 -0
  192. package/dist/themes/default/assets/fonts/outline-icons.svg +93 -95
  193. package/dist/themes/default/assets/fonts/outline-icons.ttf +0 -0
  194. package/dist/themes/default/assets/fonts/outline-icons.woff +0 -0
  195. package/dist/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  196. package/dist/themes/{default → famfamfam}/assets/images/flags.png +0 -0
  197. package/examples/assets/library/iframe-content.js +8 -8
  198. package/examples/assets/library/iframe.js +3 -3
  199. package/examples/components/button.html +1 -1
  200. package/examples/components/card.html +1 -1
  201. package/examples/components/input.html +1 -1
  202. package/examples/components/menu.html +1 -1
  203. package/examples/components/site.html +1 -1
  204. package/examples/components/table.html +1 -1
  205. package/package.json +18 -16
  206. package/scripts/nightly-version.js +47 -38
  207. package/src/definitions/behaviors/api.js +88 -29
  208. package/src/definitions/behaviors/form.js +38 -29
  209. package/src/definitions/behaviors/state.js +1 -1
  210. package/src/definitions/behaviors/visibility.js +1 -1
  211. package/src/definitions/collections/form.less +229 -165
  212. package/src/definitions/collections/grid.less +723 -687
  213. package/src/definitions/collections/menu.less +232 -170
  214. package/src/definitions/collections/message.less +49 -47
  215. package/src/definitions/collections/table.less +882 -272
  216. package/src/definitions/elements/button.less +611 -469
  217. package/src/definitions/elements/container.less +145 -8
  218. package/src/definitions/elements/divider.less +24 -24
  219. package/src/definitions/elements/emoji.less +39 -10
  220. package/src/definitions/elements/flag.less +53 -18
  221. package/src/definitions/elements/header.less +46 -37
  222. package/src/definitions/elements/icon.less +39 -32
  223. package/src/definitions/elements/input.less +281 -33
  224. package/src/definitions/elements/label.less +132 -128
  225. package/src/definitions/elements/list.less +84 -75
  226. package/src/definitions/elements/loader.less +99 -98
  227. package/src/definitions/elements/placeholder.less +32 -32
  228. package/src/definitions/elements/segment.less +177 -56
  229. package/src/definitions/elements/step.less +76 -72
  230. package/src/definitions/elements/text.less +17 -15
  231. package/src/definitions/globals/reset.less +2 -2
  232. package/src/definitions/globals/site.less +25 -2
  233. package/src/definitions/modules/accordion.js +5 -2
  234. package/src/definitions/modules/accordion.less +371 -219
  235. package/src/definitions/modules/calendar.js +84 -67
  236. package/src/definitions/modules/calendar.less +20 -0
  237. package/src/definitions/modules/checkbox.js +16 -10
  238. package/src/definitions/modules/checkbox.less +83 -227
  239. package/src/definitions/modules/dimmer.js +10 -4
  240. package/src/definitions/modules/dimmer.less +22 -8
  241. package/src/definitions/modules/dropdown.js +133 -109
  242. package/src/definitions/modules/dropdown.less +191 -136
  243. package/src/definitions/modules/embed.less +4 -4
  244. package/src/definitions/modules/modal.js +127 -49
  245. package/src/definitions/modules/modal.less +12 -0
  246. package/src/definitions/modules/nag.js +1 -1
  247. package/src/definitions/modules/nag.less +20 -19
  248. package/src/definitions/modules/popup.js +10 -10
  249. package/src/definitions/modules/popup.less +86 -90
  250. package/src/definitions/modules/progress.js +3 -0
  251. package/src/definitions/modules/progress.less +19 -18
  252. package/src/definitions/modules/rating.less +35 -34
  253. package/src/definitions/modules/search.js +1 -1
  254. package/src/definitions/modules/search.less +35 -19
  255. package/src/definitions/modules/shape.js +2 -2
  256. package/src/definitions/modules/sidebar.js +13 -11
  257. package/src/definitions/modules/sidebar.less +36 -22
  258. package/src/definitions/modules/slider.js +67 -50
  259. package/src/definitions/modules/slider.less +48 -47
  260. package/src/definitions/modules/sticky.js +3 -3
  261. package/src/definitions/modules/sticky.less +3 -1
  262. package/src/definitions/modules/tab.js +23 -5
  263. package/src/definitions/modules/tab.less +4 -4
  264. package/src/definitions/modules/toast.js +62 -30
  265. package/src/definitions/modules/toast.less +51 -16
  266. package/src/definitions/modules/transition.js +20 -15
  267. package/src/definitions/views/ad.less +3 -3
  268. package/src/definitions/views/card.less +522 -375
  269. package/src/definitions/views/comment.less +93 -82
  270. package/src/definitions/views/feed.less +164 -144
  271. package/src/definitions/views/item.less +251 -198
  272. package/src/definitions/views/statistic.less +91 -89
  273. package/src/theme.less +13 -2
  274. package/src/themes/amazon/globals/site.variables +1 -0
  275. package/src/themes/basic/elements/icon.overrides +149 -149
  276. package/src/themes/basic/elements/step.overrides +2 -2
  277. package/src/themes/bookish/elements/header.overrides +1 -1
  278. package/src/themes/chubby/elements/button.overrides +1 -1
  279. package/src/themes/chubby/elements/header.overrides +1 -1
  280. package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  281. package/src/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  282. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  283. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  284. package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  285. package/src/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  286. package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  287. package/src/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  288. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  289. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  290. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  291. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  292. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  293. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  294. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  295. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  296. package/src/themes/default/assets/fonts/brand-icons.eot +0 -0
  297. package/src/themes/default/assets/fonts/brand-icons.svg +801 -654
  298. package/src/themes/default/assets/fonts/brand-icons.ttf +0 -0
  299. package/src/themes/default/assets/fonts/brand-icons.woff +0 -0
  300. package/src/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  301. package/src/themes/default/assets/fonts/icons.eot +0 -0
  302. package/src/themes/default/assets/fonts/icons.svg +1175 -1079
  303. package/src/themes/default/assets/fonts/icons.ttf +0 -0
  304. package/src/themes/default/assets/fonts/icons.woff +0 -0
  305. package/src/themes/default/assets/fonts/icons.woff2 +0 -0
  306. package/src/themes/default/assets/fonts/outline-icons.eot +0 -0
  307. package/src/themes/default/assets/fonts/outline-icons.svg +93 -95
  308. package/src/themes/default/assets/fonts/outline-icons.ttf +0 -0
  309. package/src/themes/default/assets/fonts/outline-icons.woff +0 -0
  310. package/src/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  311. package/src/themes/default/collections/form.variables +4 -0
  312. package/src/themes/default/collections/menu.variables +6 -0
  313. package/src/themes/default/collections/table.variables +52 -0
  314. package/src/themes/default/elements/button.variables +7 -1
  315. package/src/themes/default/elements/container.variables +12 -0
  316. package/src/themes/default/elements/divider.overrides +7 -7
  317. package/src/themes/default/elements/emoji.overrides +0 -3090
  318. package/src/themes/default/elements/emoji.variables +3575 -1
  319. package/src/themes/default/elements/flag.overrides +0 -991
  320. package/src/themes/default/elements/flag.variables +1609 -5
  321. package/src/themes/default/elements/icon.overrides +1975 -1949
  322. package/src/themes/default/elements/icon.variables +1 -0
  323. package/src/themes/default/elements/input.variables +15 -0
  324. package/src/themes/default/elements/segment.variables +8 -0
  325. package/src/themes/default/elements/step.overrides +3 -3
  326. package/src/themes/default/globals/site.variables +109 -8
  327. package/src/themes/default/globals/variation.variables +140 -6
  328. package/src/themes/default/modules/accordion.overrides +6 -5
  329. package/src/themes/default/modules/accordion.variables +49 -2
  330. package/src/themes/default/modules/calendar.variables +3 -0
  331. package/src/themes/default/modules/checkbox.overrides +9 -9
  332. package/src/themes/default/modules/checkbox.variables +5 -5
  333. package/src/themes/default/modules/dimmer.variables +1 -1
  334. package/src/themes/default/modules/dropdown.overrides +5 -5
  335. package/src/themes/default/modules/dropdown.variables +4 -10
  336. package/src/themes/default/modules/modal.variables +13 -0
  337. package/src/themes/default/modules/popup.variables +0 -2
  338. package/src/themes/default/modules/toast.variables +3 -0
  339. package/src/themes/default/views/card.variables +8 -0
  340. package/src/themes/{default → famfamfam}/assets/images/flags.png +0 -0
  341. package/src/themes/famfamfam/elements/flag.overrides +1026 -0
  342. package/src/themes/famfamfam/elements/flag.variables +20 -0
  343. package/src/themes/github/elements/icon.overrides +206 -206
  344. package/src/themes/github/elements/step.overrides +5 -5
  345. package/src/themes/github/globals/site.variables +1 -0
  346. package/src/themes/github/modules/dropdown.overrides +6 -6
  347. package/src/themes/instagram/views/card.overrides +1 -1
  348. package/src/themes/joypixels/elements/emoji.overrides +0 -3089
  349. package/src/themes/joypixels/elements/emoji.variables +3574 -5
  350. package/src/themes/material/collections/menu.overrides +1 -1
  351. package/src/themes/material/elements/button.overrides +1 -1
  352. package/src/themes/material/elements/header.overrides +1 -1
  353. package/src/themes/material/elements/icon.overrides +932 -932
  354. package/src/themes/material/globals/site.variables +0 -1
  355. package/src/themes/material/modules/dropdown.overrides +1 -1
  356. package/src/themes/material/modules/modal.overrides +1 -1
  357. package/src/themes/pulsar/elements/loader.overrides +2 -2
  358. package/src/themes/resetcss/globals/reset.overrides +3 -3
  359. package/src/themes/rtl/globals/site.overrides +1 -1
  360. package/src/themes/striped/modules/progress.overrides +1 -1
  361. package/src/themes/systemfont/globals/reset.overrides +8 -0
  362. package/src/themes/systemfont/globals/site.variables +10 -0
  363. package/src/themes/twitter/elements/emoji.overrides +0 -3091
  364. package/src/themes/twitter/elements/emoji.variables +3570 -6
  365. package/tasks/admin/distributions/create.js +1 -1
  366. package/tasks/admin/publish.js +1 -1
  367. package/tasks/admin/release.js +1 -1
  368. package/tasks/build/assets.js +1 -1
  369. package/tasks/build/css.js +9 -4
  370. package/tasks/build/javascript.js +3 -3
  371. package/tasks/check-install.js +1 -1
  372. package/tasks/clean.js +1 -1
  373. package/tasks/collections/README.md +1 -1
  374. package/tasks/collections/admin.js +1 -1
  375. package/tasks/config/admin/oauth.example.js +1 -1
  376. package/tasks/config/admin/templates/composer.json +1 -1
  377. package/tasks/config/project/install.js +15 -13
  378. package/tasks/install.js +1 -0
  379. package/tasks/rtl/watch.js +1 -1
  380. package/tasks/version.js +1 -1
  381. package/test/fixtures/accordion.html +1 -1
  382. package/test/fixtures/checkbox.html +1 -1
  383. package/test/fixtures/dropdown.html +1 -1
  384. package/test/fixtures/modal.html +1 -1
  385. package/test/fixtures/popup.html +1 -1
  386. package/test/fixtures/rating.html +1 -1
  387. package/test/fixtures/shape.html +1 -1
  388. package/test/fixtures/sidebar.html +1 -1
  389. package/test/fixtures/tab.html +1 -1
  390. package/test/fixtures/transition.html +1 -1
  391. package/test/fixtures/video.html +1 -1
  392. package/test/helpers/jasmine-jquery.js +2 -2
  393. package/test/helpers/jasmine-sinon.js +1 -1
  394. package/test/helpers/jquery-events.js +1 -1
  395. package/test/helpers/sinon.js +3 -3
  396. package/test/meteor/fonts.js +1 -1
  397. package/test/modules/accordion.spec.js +1 -1
  398. package/test/modules/checkbox.spec.js +1 -1
  399. package/test/modules/dropdown.spec.js +1 -1
  400. package/test/modules/modal.spec.js +1 -1
  401. package/test/modules/module.spec.js +1 -1
  402. package/test/modules/popup.spec.js +1 -1
  403. package/test/modules/search.spec.js +1 -1
  404. package/test/modules/shape.spec.js +1 -1
  405. package/test/modules/sidebar.spec.js +1 -1
  406. package/test/modules/tab.spec.js +1 -1
  407. package/test/modules/transition.spec.js +1 -1
  408. package/test/modules/video.spec.js +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.9.0-beta.29 - Dropdown
2
+ * # Fomantic-UI 2.9.0-beta.292+4ee9307 - Dropdown
3
3
  * http://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -30,11 +30,6 @@ $.fn.dropdown = function(parameters) {
30
30
 
31
31
  moduleSelector = $allModules.selector || '',
32
32
 
33
- hasTouch = ('ontouchstart' in document.documentElement),
34
- clickEvent = hasTouch
35
- ? 'touchstart'
36
- : 'click',
37
-
38
33
  time = new Date().getTime(),
39
34
  performance = [],
40
35
 
@@ -66,7 +61,7 @@ $.fn.dropdown = function(parameters) {
66
61
  moduleNamespace = 'module-' + namespace,
67
62
 
68
63
  $module = $(this),
69
- $context = $(settings.context),
64
+ $context = [window,document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context),
70
65
  $text = $module.find(selector.text),
71
66
  $search = $module.find(selector.search),
72
67
  $sizer = $module.find(selector.sizer),
@@ -200,6 +195,7 @@ $.fn.dropdown = function(parameters) {
200
195
  select: function() {
201
196
  if(module.has.input() && selectObserver) {
202
197
  selectObserver.observe($module[0], {
198
+ attributes: true,
203
199
  childList : true,
204
200
  subtree : true
205
201
  });
@@ -224,7 +220,7 @@ $.fn.dropdown = function(parameters) {
224
220
 
225
221
  create: {
226
222
  id: function() {
227
- id = (Math.random().toString(16) + '000000000').substr(2, 8);
223
+ id = (Math.random().toString(16) + '000000000').slice(2, 10);
228
224
  elementNamespace = '.' + id;
229
225
  module.verbose('Creating unique id for element', id);
230
226
  },
@@ -421,6 +417,9 @@ $.fn.dropdown = function(parameters) {
421
417
  module.debug('Disabling dropdown');
422
418
  $module.addClass(className.disabled);
423
419
  }
420
+ if($input.is('[required]')) {
421
+ settings.forceSelection = true;
422
+ }
424
423
  $input
425
424
  .removeAttr('required')
426
425
  .removeAttr('class')
@@ -537,9 +536,7 @@ $.fn.dropdown = function(parameters) {
537
536
  }
538
537
  if(settings.onShow.call(element) !== false) {
539
538
  module.animate.show(function() {
540
- if( module.can.click() ) {
541
- module.bind.intent();
542
- }
539
+ module.bind.intent();
543
540
  if(module.has.search() && !preventFocus) {
544
541
  module.focusSearch();
545
542
  }
@@ -566,8 +563,17 @@ $.fn.dropdown = function(parameters) {
566
563
  }
567
564
  callback.call(element);
568
565
  });
566
+ // Hide submenus explicitly. On some browsers (esp. mobile), they will not automatically receive a
567
+ // mouseleave event
568
+ var $subMenu = $module.find(selector.menu);
569
+ if($subMenu.length > 0) {
570
+ module.verbose('Hiding sub-menu', $subMenu);
571
+ $subMenu.each(function() {
572
+ module.animate.hide(false, $(this));
573
+ });
574
+ }
569
575
  }
570
- } else if( module.can.click() ) {
576
+ } else {
571
577
  module.unbind.intent();
572
578
  }
573
579
  iconClicked = false;
@@ -625,13 +631,18 @@ $.fn.dropdown = function(parameters) {
625
631
  $module
626
632
  .on('change' + eventNamespace, selector.input, module.event.change)
627
633
  ;
634
+ if(module.is.multiple() && module.is.searchSelection()) {
635
+ $module
636
+ .on('paste' + eventNamespace, selector.search, module.event.paste)
637
+ ;
638
+ }
628
639
  },
629
640
  mouseEvents: function() {
630
641
  module.verbose('Binding mouse events');
631
642
  if(module.is.multiple()) {
632
643
  $module
633
- .on(clickEvent + eventNamespace, selector.label, module.event.label.click)
634
- .on(clickEvent + eventNamespace, selector.remove, module.event.remove.click)
644
+ .on('click' + eventNamespace, selector.label, module.event.label.click)
645
+ .on('click' + eventNamespace, selector.remove, module.event.remove.click)
635
646
  ;
636
647
  }
637
648
  if( module.is.searchSelection() ) {
@@ -640,31 +651,33 @@ $.fn.dropdown = function(parameters) {
640
651
  .on('mouseup' + eventNamespace, module.event.mouseup)
641
652
  .on('mousedown' + eventNamespace, selector.menu, module.event.menu.mousedown)
642
653
  .on('mouseup' + eventNamespace, selector.menu, module.event.menu.mouseup)
643
- .on(clickEvent + eventNamespace, selector.icon, module.event.icon.click)
644
- .on(clickEvent + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
654
+ .on('click' + eventNamespace, selector.icon, module.event.icon.click)
655
+ .on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
645
656
  .on('focus' + eventNamespace, selector.search, module.event.search.focus)
646
- .on(clickEvent + eventNamespace, selector.search, module.event.search.focus)
657
+ .on('click' + eventNamespace, selector.search, module.event.search.focus)
647
658
  .on('blur' + eventNamespace, selector.search, module.event.search.blur)
648
- .on(clickEvent + eventNamespace, selector.text, module.event.text.focus)
659
+ .on('click' + eventNamespace, selector.text, module.event.text.focus)
649
660
  ;
650
661
  if(module.is.multiple()) {
651
662
  $module
652
- .on(clickEvent + eventNamespace, module.event.click)
653
- .on(clickEvent + eventNamespace, module.event.search.focus)
663
+ .on('click' + eventNamespace, module.event.click)
664
+ .on('click' + eventNamespace, module.event.search.focus)
654
665
  ;
655
666
  }
656
667
  }
657
668
  else {
658
669
  if(settings.on == 'click') {
659
670
  $module
660
- .on(clickEvent + eventNamespace, selector.icon, module.event.icon.click)
661
- .on(clickEvent + eventNamespace, module.event.test.toggle)
671
+ .on('click' + eventNamespace, selector.icon, module.event.icon.click)
672
+ .on('click' + eventNamespace, module.event.test.toggle)
662
673
  ;
663
674
  }
664
675
  else if(settings.on == 'hover') {
665
676
  $module
666
677
  .on('mouseenter' + eventNamespace, module.delay.show)
667
678
  .on('mouseleave' + eventNamespace, module.delay.hide)
679
+ .on('touchstart' + eventNamespace, module.event.test.toggle)
680
+ .on('touchstart' + eventNamespace, selector.icon, module.event.icon.click)
668
681
  ;
669
682
  }
670
683
  else {
@@ -676,7 +689,7 @@ $.fn.dropdown = function(parameters) {
676
689
  .on('mousedown' + eventNamespace, module.event.mousedown)
677
690
  .on('mouseup' + eventNamespace, module.event.mouseup)
678
691
  .on('focus' + eventNamespace, module.event.focus)
679
- .on(clickEvent + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
692
+ .on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
680
693
  ;
681
694
  if(module.has.menuSearch() ) {
682
695
  $module
@@ -690,21 +703,16 @@ $.fn.dropdown = function(parameters) {
690
703
  }
691
704
  }
692
705
  $menu
693
- .on((hasTouch ? 'touchstart' : 'mouseenter') + eventNamespace, selector.item, module.event.item.mouseenter)
706
+ .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
707
+ .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
694
708
  .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
695
709
  .on('click' + eventNamespace, selector.item, module.event.item.click)
696
710
  ;
697
711
  },
698
712
  intent: function() {
699
713
  module.verbose('Binding hide intent event to document');
700
- if(hasTouch) {
701
- $document
702
- .on('touchstart' + elementNamespace, module.event.test.touch)
703
- .on('touchmove' + elementNamespace, module.event.test.touch)
704
- ;
705
- }
706
714
  $document
707
- .on(clickEvent + elementNamespace, module.event.test.hide)
715
+ .on('click' + elementNamespace, module.event.test.hide)
708
716
  ;
709
717
  }
710
718
  },
@@ -712,14 +720,8 @@ $.fn.dropdown = function(parameters) {
712
720
  unbind: {
713
721
  intent: function() {
714
722
  module.verbose('Removing hide intent event from document');
715
- if(hasTouch) {
716
- $document
717
- .off('touchstart' + elementNamespace)
718
- .off('touchmove' + elementNamespace)
719
- ;
720
- }
721
723
  $document
722
- .off(clickEvent + elementNamespace)
724
+ .off('click' + elementNamespace)
723
725
  ;
724
726
  }
725
727
  },
@@ -844,7 +846,7 @@ $.fn.dropdown = function(parameters) {
844
846
  var value = module.is.multiple() ? module.get.values() : module.get.value();
845
847
  if (value !== '') {
846
848
  module.verbose('Value(s) present after click icon, select value(s) in items');
847
- module.set.selected(value, null, null, true);
849
+ module.set.selected(value, null, true, true);
848
850
  }
849
851
  }
850
852
  iconClicked = false;
@@ -1044,7 +1046,7 @@ $.fn.dropdown = function(parameters) {
1044
1046
  menuConfig[fields.values] = values;
1045
1047
  module.setup.menu(menuConfig);
1046
1048
  $.each(values, function(index, item) {
1047
- if(item.selected == true) {
1049
+ if(item.selected === true) {
1048
1050
  module.debug('Setting initial selection to', item[fields.value]);
1049
1051
  module.set.selected(item[fields.value]);
1050
1052
  if(!module.is.multiple()) {
@@ -1065,7 +1067,7 @@ $.fn.dropdown = function(parameters) {
1065
1067
  settings.preserveHTML
1066
1068
  )
1067
1069
  ;
1068
- $input.append('<option value="' + value + '">' + name + '</option>');
1070
+ $input.append('<option value="' + value + '"' + (item.selected === true ? ' selected' : '') + '>' + name + '</option>');
1069
1071
  });
1070
1072
  module.observe.select();
1071
1073
  }
@@ -1073,6 +1075,15 @@ $.fn.dropdown = function(parameters) {
1073
1075
  },
1074
1076
 
1075
1077
  event: {
1078
+ paste: function(event) {
1079
+ var pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text'),
1080
+ tokens = pasteValue.split(settings.delimiter)
1081
+ ;
1082
+ tokens.forEach(function(value){
1083
+ module.set.selected(module.escape.htmlEntities(value.trim()), null, true, true);
1084
+ });
1085
+ event.preventDefault();
1086
+ },
1076
1087
  change: function() {
1077
1088
  if(!internalChange) {
1078
1089
  module.debug('Input changed, updating selection');
@@ -1249,23 +1260,12 @@ $.fn.dropdown = function(parameters) {
1249
1260
  if (!module.is.multiple() || (module.is.multiple() && !module.is.active())) {
1250
1261
  focused = true;
1251
1262
  }
1252
- if( module.determine.eventOnElement(event, toggleBehavior) ) {
1263
+ if( module.determine.eventOnElement(event, toggleBehavior) && event.type !== 'touchstart') {
1264
+ // do not preventDefault of touchstart; so emulated mouseenter is triggered on first touch and not later
1265
+ // (when selecting an item). The double-showing of the dropdown through both events does not hurt.
1253
1266
  event.preventDefault();
1254
1267
  }
1255
1268
  },
1256
- touch: function(event) {
1257
- module.determine.eventOnElement(event, function() {
1258
- if(event.type == 'touchstart') {
1259
- module.timer = setTimeout(function() {
1260
- module.hide();
1261
- }, settings.delay.touch);
1262
- }
1263
- else if(event.type == 'touchmove') {
1264
- clearTimeout(module.timer);
1265
- }
1266
- });
1267
- event.stopPropagation();
1268
- },
1269
1269
  hide: function(event) {
1270
1270
  if(module.determine.eventInModule(event, module.hide)){
1271
1271
  if(element.id && $(event.target).attr('for') === element.id){
@@ -1285,8 +1285,8 @@ $.fn.dropdown = function(parameters) {
1285
1285
  },
1286
1286
  select: {
1287
1287
  mutation: function(mutations) {
1288
- module.debug('<select> modified, recreating menu');
1289
1288
  if(module.is.selectMutation(mutations)) {
1289
+ module.debug('<select> modified, recreating menu');
1290
1290
  module.disconnect.selectObserver();
1291
1291
  module.refresh();
1292
1292
  module.setup.select();
@@ -1349,13 +1349,15 @@ $.fn.dropdown = function(parameters) {
1349
1349
  },
1350
1350
  mouseleave: function(event) {
1351
1351
  var
1352
- $subMenu = $(this).children(selector.menu)
1352
+ $subMenu = $(this).find(selector.menu)
1353
1353
  ;
1354
1354
  if($subMenu.length > 0) {
1355
1355
  clearTimeout(module.itemTimer);
1356
1356
  module.itemTimer = setTimeout(function() {
1357
1357
  module.verbose('Hiding sub-menu', $subMenu);
1358
- module.animate.hide(false, $subMenu);
1358
+ $subMenu.each(function() {
1359
+ module.animate.hide(false, $(this));
1360
+ });
1359
1361
  }, settings.delay.hide);
1360
1362
  }
1361
1363
  },
@@ -1381,7 +1383,7 @@ $.fn.dropdown = function(parameters) {
1381
1383
  module.remove.userAddition();
1382
1384
  }
1383
1385
  module.remove.searchTerm();
1384
- if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {
1386
+ if(!module.is.focusedOnSearch() && skipRefocus !== true) {
1385
1387
  module.focusSearch(true);
1386
1388
  }
1387
1389
  }
@@ -1513,7 +1515,7 @@ $.fn.dropdown = function(parameters) {
1513
1515
  keydown: function(event) {
1514
1516
  var
1515
1517
  pressedKey = event.which,
1516
- isShortcutKey = module.is.inObject(pressedKey, keys)
1518
+ isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter
1517
1519
  ;
1518
1520
  if(isShortcutKey) {
1519
1521
  var
@@ -1531,7 +1533,7 @@ $.fn.dropdown = function(parameters) {
1531
1533
  hasSubMenu = ($subMenu.length> 0),
1532
1534
  hasSelectedItem = ($selectedItem.length > 0),
1533
1535
  selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
1534
- delimiterPressed = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),
1536
+ delimiterPressed = (event.key === settings.delimiter && module.is.multiple()),
1535
1537
  isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
1536
1538
  $nextItem,
1537
1539
  isSubMenuItem,
@@ -1629,7 +1631,7 @@ $.fn.dropdown = function(parameters) {
1629
1631
  .addClass(className.selected)
1630
1632
  ;
1631
1633
  module.set.scrollPosition($nextItem);
1632
- if(settings.selectOnKeydown && module.is.single()) {
1634
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1633
1635
  module.set.selectedItem($nextItem);
1634
1636
  }
1635
1637
  }
@@ -1656,7 +1658,7 @@ $.fn.dropdown = function(parameters) {
1656
1658
  .addClass(className.selected)
1657
1659
  ;
1658
1660
  module.set.scrollPosition($nextItem);
1659
- if(settings.selectOnKeydown && module.is.single()) {
1661
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1660
1662
  module.set.selectedItem($nextItem);
1661
1663
  }
1662
1664
  }
@@ -1787,7 +1789,7 @@ $.fn.dropdown = function(parameters) {
1787
1789
  ;
1788
1790
  if( module.can.activate( $(element) ) ) {
1789
1791
  module.set.selected(value, $(element));
1790
- if(!module.is.multiple()) {
1792
+ if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
1791
1793
  module.hideAndClear();
1792
1794
  }
1793
1795
  }
@@ -1800,7 +1802,7 @@ $.fn.dropdown = function(parameters) {
1800
1802
  ;
1801
1803
  if( module.can.activate( $(element) ) ) {
1802
1804
  module.set.value(value, text, $(element));
1803
- if(!module.is.multiple()) {
1805
+ if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
1804
1806
  module.hideAndClear();
1805
1807
  }
1806
1808
  }
@@ -1851,7 +1853,7 @@ $.fn.dropdown = function(parameters) {
1851
1853
  ;
1852
1854
  $sizer.text(value);
1853
1855
  // prevent rounding issues
1854
- return Math.ceil( $sizer.width() + 1);
1856
+ return Math.ceil( $sizer.width() + (module.is.edge() ? 3 : 1));
1855
1857
  },
1856
1858
  selectionCount: function() {
1857
1859
  var
@@ -2320,7 +2322,7 @@ $.fn.dropdown = function(parameters) {
2320
2322
  module.error(error.noStorage);
2321
2323
  return;
2322
2324
  }
2323
- name = sessionStorage.getItem(value);
2325
+ name = sessionStorage.getItem(value + elementNamespace);
2324
2326
  return (name !== undefined)
2325
2327
  ? name
2326
2328
  : false
@@ -2364,7 +2366,7 @@ $.fn.dropdown = function(parameters) {
2364
2366
  return;
2365
2367
  }
2366
2368
  module.verbose('Saving remote data to session storage', value, name);
2367
- sessionStorage.setItem(value, name);
2369
+ sessionStorage.setItem(value + elementNamespace, name);
2368
2370
  }
2369
2371
  },
2370
2372
 
@@ -2424,7 +2426,7 @@ $.fn.dropdown = function(parameters) {
2424
2426
  $nextSelectedItem
2425
2427
  .addClass(className.selected)
2426
2428
  ;
2427
- if(settings.selectOnKeydown && module.is.single()) {
2429
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
2428
2430
  module.set.selectedItem($nextSelectedItem);
2429
2431
  }
2430
2432
  $menu
@@ -2510,7 +2512,7 @@ $.fn.dropdown = function(parameters) {
2510
2512
  var
2511
2513
  length = module.get.query().length
2512
2514
  ;
2513
- $search.val( text.substr(0, length));
2515
+ $search.val( text.slice(0, length));
2514
2516
  },
2515
2517
  scrollPosition: function($item, forceScroll) {
2516
2518
  var
@@ -2627,13 +2629,13 @@ $.fn.dropdown = function(parameters) {
2627
2629
  module.set.scrollPosition($nextValue);
2628
2630
  $selectedItem.removeClass(className.selected);
2629
2631
  $nextValue.addClass(className.selected);
2630
- if(settings.selectOnKeydown && module.is.single()) {
2632
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
2631
2633
  module.set.selectedItem($nextValue);
2632
2634
  }
2633
2635
  }
2634
2636
  },
2635
2637
  direction: function($menu) {
2636
- if(settings.direction == 'auto') {
2638
+ if(settings.direction === 'auto') {
2637
2639
  // reset position, remove upward if it's base menu
2638
2640
  if (!$menu) {
2639
2641
  module.remove.upward();
@@ -2652,7 +2654,7 @@ $.fn.dropdown = function(parameters) {
2652
2654
  module.set.leftward($menu);
2653
2655
  }
2654
2656
  }
2655
- else if(settings.direction == 'upward') {
2657
+ else if(settings.direction === 'upward') {
2656
2658
  module.set.upward($menu);
2657
2659
  }
2658
2660
  },
@@ -2665,6 +2667,11 @@ $.fn.dropdown = function(parameters) {
2665
2667
  $element.addClass(className.leftward);
2666
2668
  },
2667
2669
  value: function(value, text, $selected, preventChangeTrigger) {
2670
+ if(typeof text === 'boolean') {
2671
+ preventChangeTrigger = text;
2672
+ $selected = undefined;
2673
+ text = undefined;
2674
+ }
2668
2675
  if(value !== undefined && value !== '' && !(Array.isArray(value) && value.length === 0)) {
2669
2676
  $input.removeClass(className.noselection);
2670
2677
  } else {
@@ -2728,12 +2735,21 @@ $.fn.dropdown = function(parameters) {
2728
2735
  visible: function() {
2729
2736
  $module.addClass(className.visible);
2730
2737
  },
2731
- exactly: function(value, $selectedItem) {
2738
+ exactly: function(value, $selectedItem, preventChangeTrigger) {
2739
+ if(typeof $selectedItem === 'boolean') {
2740
+ preventChangeTrigger = $selectedItem;
2741
+ $selectedItem = undefined;
2742
+ }
2732
2743
  module.debug('Setting selected to exact values');
2733
2744
  module.clear();
2734
- module.set.selected(value, $selectedItem);
2745
+ module.set.selected(value, $selectedItem, preventChangeTrigger);
2735
2746
  },
2736
2747
  selected: function(value, $selectedItem, preventChangeTrigger, keepSearchTerm) {
2748
+ if(typeof $selectedItem === 'boolean') {
2749
+ keepSearchTerm = preventChangeTrigger;
2750
+ preventChangeTrigger = $selectedItem;
2751
+ $selectedItem = undefined;
2752
+ }
2737
2753
  var
2738
2754
  isMultiple = module.is.multiple()
2739
2755
  ;
@@ -2765,23 +2781,30 @@ $.fn.dropdown = function(parameters) {
2765
2781
 
2766
2782
  isFiltered = $selected.hasClass(className.filtered),
2767
2783
  isActive = $selected.hasClass(className.active),
2784
+ isActionable = $selected.hasClass(className.actionable),
2768
2785
  isUserValue = $selected.hasClass(className.addition),
2769
- shouldAnimate = (isMultiple && $selectedItem.length == 1)
2786
+ shouldAnimate = (isMultiple && $selectedItem && $selectedItem.length === 1)
2770
2787
  ;
2771
- if(isMultiple) {
2788
+ if(isActionable){
2789
+ if((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
2790
+ module.save.remoteData(selectedText, selectedValue);
2791
+ }
2792
+ settings.onActionable.call(element, selectedValue, selectedText, $selected);
2793
+ }
2794
+ else if(isMultiple) {
2772
2795
  if(!isActive || isUserValue) {
2773
2796
  if(settings.apiSettings && settings.saveRemoteData) {
2774
2797
  module.save.remoteData(selectedText, selectedValue);
2775
2798
  }
2776
2799
  if(settings.useLabels) {
2800
+ module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
2777
2801
  module.add.label(selectedValue, selectedText, shouldAnimate);
2778
- module.add.value(selectedValue, selectedText, $selected);
2779
2802
  module.set.activeItem($selected);
2780
2803
  module.filterActive();
2781
2804
  module.select.nextAvailable($selectedItem);
2782
2805
  }
2783
2806
  else {
2784
- module.add.value(selectedValue, selectedText, $selected);
2807
+ module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
2785
2808
  module.set.text(module.add.variables(message.count));
2786
2809
  module.set.activeItem($selected);
2787
2810
  }
@@ -2795,7 +2818,7 @@ $.fn.dropdown = function(parameters) {
2795
2818
  if(settings.apiSettings && settings.saveRemoteData) {
2796
2819
  module.save.remoteData(selectedText, selectedValue);
2797
2820
  }
2798
- if (!keepSearchTerm) {
2821
+ if (!keepSearchTerm && !$selected.hasClass(className.actionable)) {
2799
2822
  module.set.text(selectedText);
2800
2823
  }
2801
2824
  module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
@@ -2894,7 +2917,7 @@ $.fn.dropdown = function(parameters) {
2894
2917
  $('<option/>')
2895
2918
  .prop('value', escapedValue)
2896
2919
  .addClass(className.addition)
2897
- .html(value)
2920
+ .text(value)
2898
2921
  .appendTo($input)
2899
2922
  ;
2900
2923
  module.verbose('Adding user addition as an <option>', value);
@@ -2970,7 +2993,12 @@ $.fn.dropdown = function(parameters) {
2970
2993
  }
2971
2994
  return message;
2972
2995
  },
2973
- value: function(addedValue, addedText, $selectedItem) {
2996
+ value: function(addedValue, addedText, $selectedItem, preventChangeTrigger) {
2997
+ if(typeof addedText === 'boolean') {
2998
+ preventChangeTrigger = addedText;
2999
+ $selectedItem = undefined;
3000
+ addedText = undefined;
3001
+ }
2974
3002
  var
2975
3003
  currentValue = module.get.values(true),
2976
3004
  newValue
@@ -2985,7 +3013,7 @@ $.fn.dropdown = function(parameters) {
2985
3013
  }
2986
3014
  // extend current array
2987
3015
  if(Array.isArray(currentValue)) {
2988
- newValue = currentValue.concat([addedValue]);
3016
+ newValue = $selectedItem && $selectedItem.hasClass(className.actionable) ? currentValue : currentValue.concat([addedValue]);
2989
3017
  newValue = module.get.uniqueArray(newValue);
2990
3018
  }
2991
3019
  else {
@@ -3009,7 +3037,7 @@ $.fn.dropdown = function(parameters) {
3009
3037
  else {
3010
3038
  settings.onAdd.call(element, addedValue, addedText, $selectedItem);
3011
3039
  }
3012
- module.set.value(newValue, addedText, $selectedItem);
3040
+ module.set.value(newValue, addedText, $selectedItem, preventChangeTrigger);
3013
3041
  module.check.maxSelections();
3014
3042
  },
3015
3043
  },
@@ -3069,18 +3097,10 @@ $.fn.dropdown = function(parameters) {
3069
3097
  return;
3070
3098
  }
3071
3099
  // temporarily disconnect observer
3072
- if(selectObserver) {
3073
- selectObserver.disconnect();
3074
- module.verbose('Temporarily disconnecting mutation observer');
3075
- }
3100
+ module.disconnect.selectObserver();
3076
3101
  $option.remove();
3077
3102
  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
- }
3103
+ module.observe.select();
3084
3104
  },
3085
3105
  message: function() {
3086
3106
  $menu.children(selector.message).remove();
@@ -3379,8 +3399,11 @@ $.fn.dropdown = function(parameters) {
3379
3399
  bubbledIconClick: function(event) {
3380
3400
  return $(event.target).closest($icon).length > 0;
3381
3401
  },
3402
+ edge: function() {
3403
+ return !!window.chrome && !!window.StyleMedia;
3404
+ },
3382
3405
  chrome: function() {
3383
- return !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
3406
+ return !!window.chrome && !window.StyleMedia;
3384
3407
  },
3385
3408
  alreadySetup: function() {
3386
3409
  return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
@@ -3445,7 +3468,7 @@ $.fn.dropdown = function(parameters) {
3445
3468
  selectChanged = false
3446
3469
  ;
3447
3470
  $.each(mutations, function(index, mutation) {
3448
- if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
3471
+ if($(mutation.target).is('select, option, optgroup') || $(mutation.addedNodes).is('select')) {
3449
3472
  selectChanged = true;
3450
3473
  return false;
3451
3474
  }
@@ -3587,9 +3610,6 @@ $.fn.dropdown = function(parameters) {
3587
3610
  $currentMenu.removeClass(className.loading);
3588
3611
  return canOpenRightward;
3589
3612
  },
3590
- click: function() {
3591
- return (hasTouch || settings.on == 'click');
3592
- },
3593
3613
  extendSelect: function() {
3594
3614
  return settings.allowAdditions || settings.apiSettings;
3595
3615
  },
@@ -3659,9 +3679,7 @@ $.fn.dropdown = function(parameters) {
3659
3679
  start = ($subMenu)
3660
3680
  ? function() {}
3661
3681
  : function() {
3662
- if( module.can.click() ) {
3663
- module.unbind.intent();
3664
- }
3682
+ module.unbind.intent();
3665
3683
  module.remove.active();
3666
3684
  },
3667
3685
  transition = settings.transition.hideMethod || module.get.transition($subMenu)
@@ -3990,7 +4008,7 @@ $.fn.dropdown.settings = {
3990
4008
  keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing
3991
4009
 
3992
4010
  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)
4011
+ fullTextSearch : 'exact', // search anywhere in value (set to 'exact' to require exact matches)
3994
4012
  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
4013
  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
4014
 
@@ -3998,7 +4016,7 @@ $.fn.dropdown.settings = {
3998
4016
  preserveHTML : true, // preserve html when selecting value
3999
4017
  sortSelect : false, // sort selection on init
4000
4018
 
4001
- forceSelection : true, // force a choice on blur with search selection
4019
+ forceSelection : false, // force a choice on blur with search selection
4002
4020
 
4003
4021
  allowAdditions : false, // whether multiple select should allow user added values
4004
4022
  ignoreCase : false, // whether to consider case sensitivity when creating labels
@@ -4009,7 +4027,7 @@ $.fn.dropdown.settings = {
4009
4027
  useLabels : true, // whether multiple select should filter currently active selections from choices
4010
4028
  delimiter : ',', // when multiselect uses normal <input> the values will be delimited with this character
4011
4029
 
4012
- showOnFocus : true, // show menu on focus
4030
+ showOnFocus : false, // show menu on focus
4013
4031
  allowReselection : false, // whether current value should trigger callbacks when reselected
4014
4032
  allowTab : true, // add tabindex to element
4015
4033
  allowCategorySelection : false, // allow elements with sub-menus to be selected
@@ -4024,6 +4042,8 @@ $.fn.dropdown.settings = {
4024
4042
 
4025
4043
  headerDivider : true, // whether option headers should have an additional divider line underneath when converted from <select> <optgroup>
4026
4044
 
4045
+ collapseOnActionable : true, // whether the dropdown should collapse upon selection of an actionable item
4046
+
4027
4047
  // label settings on multi-select
4028
4048
  label: {
4029
4049
  transition : 'scale',
@@ -4036,13 +4056,13 @@ $.fn.dropdown.settings = {
4036
4056
  hide : 300,
4037
4057
  show : 200,
4038
4058
  search : 20,
4039
- touch : 50
4040
4059
  },
4041
4060
 
4042
4061
  /* Callbacks */
4043
4062
  onChange : function(value, text, $selected){},
4044
4063
  onAdd : function(value, text, $selected){},
4045
4064
  onRemove : function(value, text, $selected){},
4065
+ onActionable : function(value, text, $selected){},
4046
4066
  onSearch : function(searchTerm){},
4047
4067
 
4048
4068
  onLabelSelect : function($selectedLabels){},
@@ -4105,12 +4125,12 @@ $.fn.dropdown.settings = {
4105
4125
  icon : 'icon', // optional icon name
4106
4126
  iconClass : 'iconClass', // optional individual class for icon (for example to use flag instead)
4107
4127
  class : 'class', // optional individual class for item/header
4108
- divider : 'divider' // optional divider append for group headers
4128
+ divider : 'divider', // optional divider append for group headers
4129
+ actionable : 'actionable' // optional actionable item
4109
4130
  },
4110
4131
 
4111
4132
  keys : {
4112
4133
  backspace : 8,
4113
- delimiter : 188, // comma
4114
4134
  deleteKey : 46,
4115
4135
  enter : 13,
4116
4136
  escape : 27,
@@ -4177,7 +4197,8 @@ $.fn.dropdown.settings = {
4177
4197
  header : 'header',
4178
4198
  divider : 'divider',
4179
4199
  groupIcon : '',
4180
- unfilterable : 'unfilterable'
4200
+ unfilterable : 'unfilterable',
4201
+ actionable : 'actionable'
4181
4202
  }
4182
4203
 
4183
4204
  };
@@ -4252,6 +4273,9 @@ $.fn.dropdown.settings.templates = {
4252
4273
  maybeText = (option[fields.text])
4253
4274
  ? ' data-text="' + deQuote(option[fields.text],true) + '"'
4254
4275
  : '',
4276
+ maybeActionable = (option[fields.actionable])
4277
+ ? className.actionable+' '
4278
+ : '',
4255
4279
  maybeDisabled = (option[fields.disabled])
4256
4280
  ? className.disabled+' '
4257
4281
  : '',
@@ -4260,7 +4284,7 @@ $.fn.dropdown.settings.templates = {
4260
4284
  : '',
4261
4285
  hasDescription = (escape(option[fields.description] || '', preserveHTML) != '')
4262
4286
  ;
4263
- html += '<div class="'+ maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4287
+ html += '<div class="'+ maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4264
4288
  if (isMenu) {
4265
4289
  html += '<i class="'+ (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
4266
4290
  }