fomantic-ui 2.9.0-beta.32 → 2.9.0-beta.320

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 (424) hide show
  1. package/.all-contributorsrc +274 -4
  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 +86 -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 +10 -4
  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 +92 -33
  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 +93 -74
  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 +21 -14
  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 +33 -18
  38. package/dist/components/dimmer.js +19 -10
  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 +100 -50
  44. package/dist/components/dropdown.js +212 -187
  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 +14 -10
  49. package/dist/components/embed.min.css +2 -2
  50. package/dist/components/embed.min.js +3 -3
  51. package/dist/components/emoji.css +10799 -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 +1021 -915
  56. package/dist/components/flag.min.css +2 -2
  57. package/dist/components/flyout.css +592 -0
  58. package/dist/components/flyout.js +1529 -0
  59. package/dist/components/flyout.min.css +9 -0
  60. package/dist/components/flyout.min.js +11 -0
  61. package/dist/components/form.css +160 -83
  62. package/dist/components/form.js +46 -42
  63. package/dist/components/form.min.css +2 -2
  64. package/dist/components/form.min.js +3 -3
  65. package/dist/components/grid.css +25 -21
  66. package/dist/components/grid.min.css +2 -2
  67. package/dist/components/header.css +6 -4
  68. package/dist/components/header.min.css +2 -2
  69. package/dist/components/icon.css +2063 -1984
  70. package/dist/components/icon.min.css +2 -2
  71. package/dist/components/image.css +1 -1
  72. package/dist/components/image.min.css +1 -1
  73. package/dist/components/input.css +759 -22
  74. package/dist/components/input.min.css +2 -2
  75. package/dist/components/item.css +17 -17
  76. package/dist/components/item.min.css +2 -2
  77. package/dist/components/label.css +72 -68
  78. package/dist/components/label.min.css +2 -2
  79. package/dist/components/list.css +31 -31
  80. package/dist/components/list.min.css +2 -2
  81. package/dist/components/loader.css +352 -352
  82. package/dist/components/loader.min.css +2 -2
  83. package/dist/components/menu.css +108 -76
  84. package/dist/components/menu.min.css +1 -1
  85. package/dist/components/message.css +43 -43
  86. package/dist/components/message.min.css +2 -2
  87. package/dist/components/modal.css +37 -6
  88. package/dist/components/modal.js +187 -84
  89. package/dist/components/modal.min.css +2 -2
  90. package/dist/components/modal.min.js +3 -3
  91. package/dist/components/nag.css +1 -1
  92. package/dist/components/nag.js +3 -3
  93. package/dist/components/nag.min.css +1 -1
  94. package/dist/components/nag.min.js +3 -3
  95. package/dist/components/placeholder.css +33 -33
  96. package/dist/components/placeholder.min.css +2 -2
  97. package/dist/components/popup.css +100 -104
  98. package/dist/components/popup.js +17 -23
  99. package/dist/components/popup.min.css +2 -2
  100. package/dist/components/popup.min.js +3 -3
  101. package/dist/components/progress.css +1 -1
  102. package/dist/components/progress.js +6 -3
  103. package/dist/components/progress.min.css +1 -1
  104. package/dist/components/progress.min.js +3 -3
  105. package/dist/components/rail.css +1 -1
  106. package/dist/components/rail.min.css +1 -1
  107. package/dist/components/rating.css +1 -1
  108. package/dist/components/rating.js +8 -4
  109. package/dist/components/rating.min.css +1 -1
  110. package/dist/components/rating.min.js +3 -3
  111. package/dist/components/reset.css +5 -4
  112. package/dist/components/reset.min.css +2 -2
  113. package/dist/components/reveal.css +1 -1
  114. package/dist/components/reveal.min.css +1 -1
  115. package/dist/components/search.css +6 -6
  116. package/dist/components/search.js +48 -21
  117. package/dist/components/search.min.css +2 -2
  118. package/dist/components/search.min.js +3 -3
  119. package/dist/components/segment.css +118 -34
  120. package/dist/components/segment.min.css +2 -2
  121. package/dist/components/shape.css +1 -1
  122. package/dist/components/shape.js +4 -4
  123. package/dist/components/shape.min.css +1 -1
  124. package/dist/components/shape.min.js +3 -3
  125. package/dist/components/sidebar.css +23 -9
  126. package/dist/components/sidebar.js +141 -44
  127. package/dist/components/sidebar.min.css +2 -2
  128. package/dist/components/sidebar.min.js +3 -3
  129. package/dist/components/site.css +139 -42
  130. package/dist/components/site.js +2 -2
  131. package/dist/components/site.min.css +2 -2
  132. package/dist/components/site.min.js +3 -3
  133. package/dist/components/slider.css +17 -17
  134. package/dist/components/slider.js +79 -64
  135. package/dist/components/slider.min.css +1 -1
  136. package/dist/components/slider.min.js +3 -3
  137. package/dist/components/state.js +3 -3
  138. package/dist/components/state.min.js +3 -3
  139. package/dist/components/statistic.css +4 -4
  140. package/dist/components/statistic.min.css +2 -2
  141. package/dist/components/step.css +31 -31
  142. package/dist/components/step.min.css +2 -2
  143. package/dist/components/sticky.css +1 -1
  144. package/dist/components/sticky.js +11 -18
  145. package/dist/components/sticky.min.css +1 -1
  146. package/dist/components/sticky.min.js +3 -3
  147. package/dist/components/tab.css +5 -5
  148. package/dist/components/tab.js +25 -7
  149. package/dist/components/tab.min.css +2 -2
  150. package/dist/components/tab.min.js +3 -3
  151. package/dist/components/table.css +1684 -272
  152. package/dist/components/table.min.css +2 -2
  153. package/dist/components/text.css +1 -1
  154. package/dist/components/text.min.css +1 -1
  155. package/dist/components/toast.css +43 -1
  156. package/dist/components/toast.js +68 -34
  157. package/dist/components/toast.min.css +2 -2
  158. package/dist/components/toast.min.js +3 -3
  159. package/dist/components/transition.css +1 -1
  160. package/dist/components/transition.js +27 -22
  161. package/dist/components/transition.min.css +1 -1
  162. package/dist/components/transition.min.js +3 -3
  163. package/dist/components/visibility.js +5 -5
  164. package/dist/components/visibility.min.js +3 -3
  165. package/dist/semantic.css +42008 -34578
  166. package/dist/semantic.js +2719 -763
  167. package/dist/semantic.min.css +3 -3
  168. package/dist/semantic.min.js +3 -3
  169. package/dist/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  170. package/dist/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  171. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  172. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  173. package/dist/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  174. package/dist/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  175. package/dist/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  176. package/dist/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  177. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  178. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  179. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  180. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  181. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  182. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  183. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  184. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  185. package/dist/themes/default/assets/fonts/brand-icons.eot +0 -0
  186. package/dist/themes/default/assets/fonts/brand-icons.svg +801 -654
  187. package/dist/themes/default/assets/fonts/brand-icons.ttf +0 -0
  188. package/dist/themes/default/assets/fonts/brand-icons.woff +0 -0
  189. package/dist/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  190. package/dist/themes/default/assets/fonts/icons.eot +0 -0
  191. package/dist/themes/default/assets/fonts/icons.svg +1175 -1079
  192. package/dist/themes/default/assets/fonts/icons.ttf +0 -0
  193. package/dist/themes/default/assets/fonts/icons.woff +0 -0
  194. package/dist/themes/default/assets/fonts/icons.woff2 +0 -0
  195. package/dist/themes/default/assets/fonts/outline-icons.eot +0 -0
  196. package/dist/themes/default/assets/fonts/outline-icons.svg +93 -95
  197. package/dist/themes/default/assets/fonts/outline-icons.ttf +0 -0
  198. package/dist/themes/default/assets/fonts/outline-icons.woff +0 -0
  199. package/dist/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  200. package/dist/themes/{default → famfamfam}/assets/images/flags.png +0 -0
  201. package/examples/assets/library/iframe-content.js +8 -8
  202. package/examples/assets/library/iframe.js +3 -3
  203. package/examples/components/button.html +1 -1
  204. package/examples/components/card.html +1 -1
  205. package/examples/components/input.html +1 -1
  206. package/examples/components/menu.html +1 -1
  207. package/examples/components/site.html +1 -1
  208. package/examples/components/table.html +1 -1
  209. package/package.json +18 -16
  210. package/scripts/nightly-version.js +47 -38
  211. package/src/definitions/behaviors/api.js +91 -32
  212. package/src/definitions/behaviors/form.js +45 -41
  213. package/src/definitions/behaviors/state.js +2 -2
  214. package/src/definitions/behaviors/visibility.js +4 -4
  215. package/src/definitions/collections/form.less +229 -166
  216. package/src/definitions/collections/grid.less +723 -687
  217. package/src/definitions/collections/menu.less +232 -170
  218. package/src/definitions/collections/message.less +49 -47
  219. package/src/definitions/collections/table.less +882 -272
  220. package/src/definitions/elements/button.less +611 -469
  221. package/src/definitions/elements/container.less +145 -8
  222. package/src/definitions/elements/divider.less +24 -24
  223. package/src/definitions/elements/emoji.less +39 -10
  224. package/src/definitions/elements/flag.less +54 -18
  225. package/src/definitions/elements/header.less +46 -37
  226. package/src/definitions/elements/icon.less +39 -32
  227. package/src/definitions/elements/input.less +281 -33
  228. package/src/definitions/elements/label.less +132 -128
  229. package/src/definitions/elements/list.less +84 -75
  230. package/src/definitions/elements/loader.less +99 -98
  231. package/src/definitions/elements/placeholder.less +32 -32
  232. package/src/definitions/elements/segment.less +177 -56
  233. package/src/definitions/elements/step.less +76 -72
  234. package/src/definitions/elements/text.less +17 -15
  235. package/src/definitions/globals/reset.less +2 -2
  236. package/src/definitions/globals/site.js +1 -1
  237. package/src/definitions/globals/site.less +25 -2
  238. package/src/definitions/modules/accordion.js +9 -3
  239. package/src/definitions/modules/accordion.less +371 -219
  240. package/src/definitions/modules/calendar.js +92 -73
  241. package/src/definitions/modules/calendar.less +20 -0
  242. package/src/definitions/modules/checkbox.js +20 -13
  243. package/src/definitions/modules/checkbox.less +83 -227
  244. package/src/definitions/modules/dimmer.js +18 -9
  245. package/src/definitions/modules/dimmer.less +26 -12
  246. package/src/definitions/modules/dropdown.js +211 -186
  247. package/src/definitions/modules/dropdown.less +201 -136
  248. package/src/definitions/modules/embed.js +13 -9
  249. package/src/definitions/modules/embed.less +4 -4
  250. package/src/definitions/modules/flyout.js +1529 -0
  251. package/src/definitions/modules/flyout.less +650 -0
  252. package/src/definitions/modules/modal.js +186 -83
  253. package/src/definitions/modules/modal.less +70 -33
  254. package/src/definitions/modules/nag.js +2 -2
  255. package/src/definitions/modules/nag.less +20 -19
  256. package/src/definitions/modules/popup.js +16 -22
  257. package/src/definitions/modules/popup.less +86 -90
  258. package/src/definitions/modules/progress.js +5 -2
  259. package/src/definitions/modules/progress.less +19 -18
  260. package/src/definitions/modules/rating.js +7 -3
  261. package/src/definitions/modules/rating.less +35 -34
  262. package/src/definitions/modules/search.js +47 -20
  263. package/src/definitions/modules/search.less +35 -19
  264. package/src/definitions/modules/shape.js +3 -3
  265. package/src/definitions/modules/sidebar.js +140 -43
  266. package/src/definitions/modules/sidebar.less +53 -24
  267. package/src/definitions/modules/slider.js +78 -63
  268. package/src/definitions/modules/slider.less +48 -47
  269. package/src/definitions/modules/sticky.js +10 -17
  270. package/src/definitions/modules/sticky.less +3 -1
  271. package/src/definitions/modules/tab.js +24 -6
  272. package/src/definitions/modules/tab.less +4 -4
  273. package/src/definitions/modules/toast.js +67 -33
  274. package/src/definitions/modules/toast.less +52 -16
  275. package/src/definitions/modules/transition.js +26 -21
  276. package/src/definitions/views/ad.less +3 -3
  277. package/src/definitions/views/card.less +522 -375
  278. package/src/definitions/views/comment.less +93 -82
  279. package/src/definitions/views/feed.less +164 -144
  280. package/src/definitions/views/item.less +251 -198
  281. package/src/definitions/views/statistic.less +91 -89
  282. package/src/semantic.less +1 -0
  283. package/src/theme.config.example +1 -0
  284. package/src/theme.less +13 -2
  285. package/src/themes/amazon/globals/site.variables +1 -0
  286. package/src/themes/basic/elements/icon.overrides +149 -149
  287. package/src/themes/basic/elements/step.overrides +2 -2
  288. package/src/themes/bookish/elements/header.overrides +1 -1
  289. package/src/themes/chubby/elements/button.overrides +1 -1
  290. package/src/themes/chubby/elements/header.overrides +1 -1
  291. package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  292. package/src/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  293. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  294. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  295. package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  296. package/src/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  297. package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  298. package/src/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  299. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  300. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  301. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  302. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  303. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  304. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  305. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  306. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  307. package/src/themes/default/assets/fonts/brand-icons.eot +0 -0
  308. package/src/themes/default/assets/fonts/brand-icons.svg +801 -654
  309. package/src/themes/default/assets/fonts/brand-icons.ttf +0 -0
  310. package/src/themes/default/assets/fonts/brand-icons.woff +0 -0
  311. package/src/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  312. package/src/themes/default/assets/fonts/icons.eot +0 -0
  313. package/src/themes/default/assets/fonts/icons.svg +1175 -1079
  314. package/src/themes/default/assets/fonts/icons.ttf +0 -0
  315. package/src/themes/default/assets/fonts/icons.woff +0 -0
  316. package/src/themes/default/assets/fonts/icons.woff2 +0 -0
  317. package/src/themes/default/assets/fonts/outline-icons.eot +0 -0
  318. package/src/themes/default/assets/fonts/outline-icons.svg +93 -95
  319. package/src/themes/default/assets/fonts/outline-icons.ttf +0 -0
  320. package/src/themes/default/assets/fonts/outline-icons.woff +0 -0
  321. package/src/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  322. package/src/themes/default/collections/form.variables +4 -0
  323. package/src/themes/default/collections/menu.variables +6 -0
  324. package/src/themes/default/collections/table.variables +52 -0
  325. package/src/themes/default/elements/button.variables +7 -1
  326. package/src/themes/default/elements/container.variables +12 -0
  327. package/src/themes/default/elements/divider.overrides +7 -7
  328. package/src/themes/default/elements/emoji.overrides +0 -3090
  329. package/src/themes/default/elements/emoji.variables +3563 -1
  330. package/src/themes/default/elements/flag.overrides +0 -991
  331. package/src/themes/default/elements/flag.variables +1603 -5
  332. package/src/themes/default/elements/icon.overrides +1975 -1949
  333. package/src/themes/default/elements/icon.variables +1 -0
  334. package/src/themes/default/elements/input.variables +15 -0
  335. package/src/themes/default/elements/segment.variables +8 -0
  336. package/src/themes/default/elements/step.overrides +3 -3
  337. package/src/themes/default/globals/site.variables +109 -8
  338. package/src/themes/default/globals/variation.variables +161 -6
  339. package/src/themes/default/modules/accordion.overrides +6 -5
  340. package/src/themes/default/modules/accordion.variables +49 -2
  341. package/src/themes/default/modules/calendar.variables +3 -0
  342. package/src/themes/default/modules/checkbox.overrides +9 -9
  343. package/src/themes/default/modules/checkbox.variables +5 -5
  344. package/src/themes/default/modules/dimmer.variables +1 -1
  345. package/src/themes/default/modules/dropdown.overrides +5 -5
  346. package/src/themes/default/modules/dropdown.variables +7 -10
  347. package/src/themes/default/modules/flyout.overrides +3 -0
  348. package/src/themes/default/modules/flyout.variables +100 -0
  349. package/src/themes/default/modules/modal.variables +16 -2
  350. package/src/themes/default/modules/popup.variables +0 -2
  351. package/src/themes/default/modules/sidebar.variables +4 -1
  352. package/src/themes/default/modules/toast.variables +3 -0
  353. package/src/themes/default/views/card.variables +8 -0
  354. package/src/themes/{default → famfamfam}/assets/images/flags.png +0 -0
  355. package/src/themes/famfamfam/elements/flag.overrides +1026 -0
  356. package/src/themes/famfamfam/elements/flag.variables +20 -0
  357. package/src/themes/github/elements/icon.overrides +206 -206
  358. package/src/themes/github/elements/step.overrides +5 -5
  359. package/src/themes/github/globals/site.variables +1 -0
  360. package/src/themes/github/modules/dropdown.overrides +6 -6
  361. package/src/themes/instagram/views/card.overrides +1 -1
  362. package/src/themes/joypixels/elements/emoji.overrides +0 -3089
  363. package/src/themes/joypixels/elements/emoji.variables +3562 -5
  364. package/src/themes/material/collections/menu.overrides +1 -1
  365. package/src/themes/material/elements/button.overrides +1 -1
  366. package/src/themes/material/elements/header.overrides +1 -1
  367. package/src/themes/material/elements/icon.overrides +932 -932
  368. package/src/themes/material/globals/site.variables +0 -1
  369. package/src/themes/material/modules/dropdown.overrides +1 -1
  370. package/src/themes/material/modules/modal.overrides +1 -1
  371. package/src/themes/pulsar/elements/loader.overrides +2 -2
  372. package/src/themes/resetcss/globals/reset.overrides +3 -3
  373. package/src/themes/rtl/globals/site.overrides +1 -1
  374. package/src/themes/striped/modules/progress.overrides +1 -1
  375. package/src/themes/systemfont/globals/reset.overrides +8 -0
  376. package/src/themes/systemfont/globals/site.variables +10 -0
  377. package/src/themes/twitter/elements/emoji.overrides +0 -3091
  378. package/src/themes/twitter/elements/emoji.variables +3558 -6
  379. package/tasks/admin/distributions/create.js +1 -1
  380. package/tasks/admin/publish.js +1 -1
  381. package/tasks/admin/release.js +1 -1
  382. package/tasks/build/assets.js +1 -1
  383. package/tasks/build/css.js +9 -4
  384. package/tasks/build/javascript.js +3 -3
  385. package/tasks/check-install.js +1 -1
  386. package/tasks/clean.js +1 -1
  387. package/tasks/collections/README.md +1 -1
  388. package/tasks/collections/admin.js +1 -1
  389. package/tasks/config/admin/oauth.example.js +1 -1
  390. package/tasks/config/admin/release.js +1 -0
  391. package/tasks/config/admin/templates/composer.json +1 -1
  392. package/tasks/config/defaults.js +1 -0
  393. package/tasks/config/project/install.js +16 -13
  394. package/tasks/install.js +1 -0
  395. package/tasks/rtl/watch.js +1 -1
  396. package/tasks/version.js +1 -1
  397. package/test/fixtures/accordion.html +1 -1
  398. package/test/fixtures/checkbox.html +1 -1
  399. package/test/fixtures/dropdown.html +1 -1
  400. package/test/fixtures/modal.html +1 -1
  401. package/test/fixtures/popup.html +1 -1
  402. package/test/fixtures/rating.html +1 -1
  403. package/test/fixtures/shape.html +1 -1
  404. package/test/fixtures/sidebar.html +1 -1
  405. package/test/fixtures/tab.html +1 -1
  406. package/test/fixtures/transition.html +1 -1
  407. package/test/fixtures/video.html +1 -1
  408. package/test/helpers/jasmine-jquery.js +2 -2
  409. package/test/helpers/jasmine-sinon.js +1 -1
  410. package/test/helpers/jquery-events.js +1 -1
  411. package/test/helpers/sinon.js +3 -3
  412. package/test/meteor/fonts.js +1 -1
  413. package/test/modules/accordion.spec.js +1 -1
  414. package/test/modules/checkbox.spec.js +1 -1
  415. package/test/modules/dropdown.spec.js +1 -1
  416. package/test/modules/modal.spec.js +1 -1
  417. package/test/modules/module.spec.js +1 -1
  418. package/test/modules/popup.spec.js +1 -1
  419. package/test/modules/search.spec.js +1 -1
  420. package/test/modules/shape.spec.js +1 -1
  421. package/test/modules/sidebar.spec.js +1 -1
  422. package/test/modules/tab.spec.js +1 -1
  423. package/test/modules/transition.spec.js +1 -1
  424. package/test/modules/video.spec.js +1 -1
@@ -70,6 +70,7 @@ $.fn.slider = function(parameters) {
70
70
 
71
71
  $module = $(this),
72
72
  $currThumb,
73
+ touchIdentifier,
73
74
  $thumb,
74
75
  $secondThumb,
75
76
  $track,
@@ -86,7 +87,6 @@ $.fn.slider = function(parameters) {
86
87
  secondPos,
87
88
  offset,
88
89
  precision,
89
- isTouch,
90
90
  gapRatio = 1,
91
91
  previousValue,
92
92
 
@@ -104,7 +104,6 @@ $.fn.slider = function(parameters) {
104
104
  currentRange += 1;
105
105
  documentEventID = currentRange;
106
106
 
107
- isTouch = module.setup.testOutTouch();
108
107
  module.setup.layout();
109
108
  module.setup.labels();
110
109
 
@@ -175,14 +174,6 @@ $.fn.slider = function(parameters) {
175
174
  }
176
175
  }
177
176
  },
178
- testOutTouch: function() {
179
- try {
180
- document.createEvent('TouchEvent');
181
- return true;
182
- } catch (e) {
183
- return false;
184
- }
185
- },
186
177
  customLabel: function() {
187
178
  var
188
179
  $children = $labels.find('.label'),
@@ -236,9 +227,6 @@ $.fn.slider = function(parameters) {
236
227
  module.bind.globalKeyboardEvents();
237
228
  module.bind.keyboardEvents();
238
229
  module.bind.mouseEvents();
239
- if(module.is.touch()) {
240
- module.bind.touchEvents();
241
- }
242
230
  if (settings.autoAdjustLabels) {
243
231
  module.bind.windowEvents();
244
232
  }
@@ -251,7 +239,7 @@ $.fn.slider = function(parameters) {
251
239
  $(document).on('keydown' + eventNamespace + documentEventID, module.event.activateFocus);
252
240
  },
253
241
  mouseEvents: function() {
254
- module.verbose('Binding mouse events');
242
+ module.verbose('Binding mouse and touch events');
255
243
  $module.find('.track, .thumb, .inner').on('mousedown' + eventNamespace, function(event) {
256
244
  event.stopImmediatePropagation();
257
245
  event.preventDefault();
@@ -264,27 +252,20 @@ $.fn.slider = function(parameters) {
264
252
  $module.on('mouseleave' + eventNamespace, function(event) {
265
253
  isHover = false;
266
254
  });
267
- },
268
- touchEvents: function() {
269
- module.verbose('Binding touch events');
270
- $module.find('.track, .thumb, .inner').on('touchstart' + eventNamespace, function(event) {
271
- event.stopImmediatePropagation();
272
- event.preventDefault();
273
- module.event.down(event);
274
- });
275
- $module.on('touchstart' + eventNamespace, module.event.down);
255
+ // All touch events are invoked on the element where the touch *started*. Thus, we can bind them all
256
+ // on the thumb(s) and don't need to worry about interference with other components, i.e. no dynamic binding
257
+ // and unbinding required.
258
+ $module.find('.thumb')
259
+ .on('touchstart' + eventNamespace, module.event.touchDown)
260
+ .on('touchmove' + eventNamespace, module.event.move)
261
+ .on('touchend' + eventNamespace, module.event.up)
262
+ .on('touchcancel' + eventNamespace, module.event.touchCancel);
276
263
  },
277
264
  slidingEvents: function() {
278
265
  // these don't need the identifier because we only ever want one of them to be registered with document
279
266
  module.verbose('Binding page wide events while handle is being draged');
280
- if(module.is.touch()) {
281
- $(document).on('touchmove' + eventNamespace, module.event.move);
282
- $(document).on('touchend' + eventNamespace, module.event.up);
283
- }
284
- else {
285
- $(document).on('mousemove' + eventNamespace, module.event.move);
286
- $(document).on('mouseup' + eventNamespace, module.event.up);
287
- }
267
+ $(document).on('mousemove' + eventNamespace, module.event.move);
268
+ $(document).on('mouseup' + eventNamespace, module.event.up);
288
269
  },
289
270
  windowEvents: function() {
290
271
  $window.on('resize' + eventNamespace, module.event.resize);
@@ -294,24 +275,22 @@ $.fn.slider = function(parameters) {
294
275
  unbind: {
295
276
  events: function() {
296
277
  $module.find('.track, .thumb, .inner').off('mousedown' + eventNamespace);
297
- $module.find('.track, .thumb, .inner').off('touchstart' + eventNamespace);
298
278
  $module.off('mousedown' + eventNamespace);
299
279
  $module.off('mouseenter' + eventNamespace);
300
280
  $module.off('mouseleave' + eventNamespace);
301
- $module.off('touchstart' + eventNamespace);
281
+ $module.find('.thumb')
282
+ .off('touchstart' + eventNamespace)
283
+ .off('touchmove' + eventNamespace)
284
+ .off('touchend' + eventNamespace)
285
+ .off('touchcancel' + eventNamespace);
302
286
  $module.off('keydown' + eventNamespace);
303
287
  $module.off('focusout' + eventNamespace);
304
288
  $(document).off('keydown' + eventNamespace + documentEventID, module.event.activateFocus);
305
289
  $window.off('resize' + eventNamespace);
306
290
  },
307
291
  slidingEvents: function() {
308
- if(module.is.touch()) {
309
- $(document).off('touchmove' + eventNamespace);
310
- $(document).off('touchend' + eventNamespace);
311
- } else {
312
- $(document).off('mousemove' + eventNamespace);
313
- $(document).off('mouseup' + eventNamespace);
314
- }
292
+ $(document).off('mousemove' + eventNamespace);
293
+ $(document).off('mouseup' + eventNamespace);
315
294
  },
316
295
  },
317
296
 
@@ -341,10 +320,31 @@ $.fn.slider = function(parameters) {
341
320
  module.bind.slidingEvents();
342
321
  }
343
322
  },
323
+ touchDown: function(event) {
324
+ event.preventDefault(); // disable mouse emulation and touch-scrolling
325
+ event.stopImmediatePropagation();
326
+ if(touchIdentifier !== undefined) {
327
+ // ignore multiple touches on the same slider --
328
+ // we cannot handle changing both thumbs at once due to shared state
329
+ return;
330
+ }
331
+ $currThumb = $(event.target);
332
+ var touchEvent = event.touches ? event : event.originalEvent;
333
+ touchIdentifier = touchEvent.targetTouches[0].identifier;
334
+ if(previousValue === undefined) {
335
+ previousValue = module.get.currentThumbValue();
336
+ }
337
+ },
344
338
  move: function(event) {
345
- event.preventDefault();
339
+ if(event.type == 'mousemove') {
340
+ event.preventDefault(); // prevent text selection etc.
341
+ }
342
+ if(module.is.disabled()) {
343
+ // touch events are always bound, so we need to prevent touch-sliding on disabled sliders here
344
+ return;
345
+ }
346
346
  var value = module.determine.valueFromEvent(event);
347
- if($currThumb === undefined) {
347
+ if(event.type == 'mousemove' && $currThumb === undefined) {
348
348
  var
349
349
  eventPos = module.determine.eventPos(event),
350
350
  newPos = module.determine.pos(eventPos)
@@ -381,10 +381,23 @@ $.fn.slider = function(parameters) {
381
381
  },
382
382
  up: function(event) {
383
383
  event.preventDefault();
384
+ if(module.is.disabled()) {
385
+ // touch events are always bound, so we need to prevent touch-sliding on disabled sliders here
386
+ return;
387
+ }
384
388
  var value = module.determine.valueFromEvent(event);
385
389
  module.set.value(value);
386
390
  module.unbind.slidingEvents();
391
+ touchIdentifier = undefined;
392
+ if (previousValue !== undefined) {
393
+ previousValue = undefined;
394
+ }
395
+ },
396
+ touchCancel: function(event) {
397
+ event.preventDefault();
398
+ touchIdentifier = undefined;
387
399
  if (previousValue !== undefined) {
400
+ module.update.value(previousValue);
388
401
  previousValue = undefined;
389
402
  }
390
403
  },
@@ -441,8 +454,8 @@ $.fn.slider = function(parameters) {
441
454
  module.setup.labels();
442
455
  },
443
456
  takeStep: function(multiplier) {
457
+ multiplier = multiplier != undefined ? multiplier : 1;
444
458
  var
445
- multiplier = multiplier != undefined ? multiplier : 1,
446
459
  step = module.get.step(),
447
460
  currValue = module.get.currentThumbValue()
448
461
  ;
@@ -459,8 +472,8 @@ $.fn.slider = function(parameters) {
459
472
  },
460
473
 
461
474
  backStep: function(multiplier) {
475
+ multiplier = multiplier != undefined ? multiplier : 1;
462
476
  var
463
- multiplier = multiplier != undefined ? multiplier : 1,
464
477
  step = module.get.step(),
465
478
  currValue = module.get.currentThumbValue()
466
479
  ;
@@ -500,9 +513,6 @@ $.fn.slider = function(parameters) {
500
513
  },
501
514
  smooth: function() {
502
515
  return settings.smooth || $module.hasClass(settings.className.smooth);
503
- },
504
- touch: function() {
505
- return isTouch;
506
516
  }
507
517
  },
508
518
 
@@ -711,11 +721,11 @@ $.fn.slider = function(parameters) {
711
721
  ;
712
722
  return pos;
713
723
  },
714
- positionFromValue: function(value) {
724
+ positionFromValue: function(val) {
715
725
  var
716
726
  min = module.get.min(),
717
727
  max = module.get.max(),
718
- value = value > max ? max : value < min ? min : value,
728
+ value = val > max ? max : val < min ? min : val,
719
729
  trackLength = module.get.trackLength(),
720
730
  ratio = (value - min) / (max - min),
721
731
  position = Math.round(ratio * trackLength)
@@ -766,12 +776,19 @@ $.fn.slider = function(parameters) {
766
776
  return value;
767
777
  },
768
778
  eventPos: function(event) {
769
- if(module.is.touch()) {
779
+ if(event.type === "touchmove" || event.type === "touchend") {
780
+ var
781
+ touchEvent = event.touches ? event : event.originalEvent,
782
+ touch = touchEvent.changedTouches[0]; // fall back to first touch if correct touch not found
783
+ for(var i=0; i < touchEvent.touches.length; i++) {
784
+ if(touchEvent.touches[i].identifier === touchIdentifier) {
785
+ touch = touchEvent.touches[i];
786
+ break;
787
+ }
788
+ }
770
789
  var
771
- touchEvent = event.changedTouches ? event : event.originalEvent,
772
- touches = touchEvent.changedTouches[0] ? touchEvent.changedTouches : touchEvent.touches,
773
- touchY = touches[0].pageY,
774
- touchX = touches[0].pageX
790
+ touchY = touch.pageY,
791
+ touchX = touch.pageX
775
792
  ;
776
793
  return module.is.vertical() ? touchY : touchX;
777
794
  }
@@ -916,14 +933,12 @@ $.fn.slider = function(parameters) {
916
933
  },
917
934
  position: function(position, which) {
918
935
  var thumbVal = module.determine.value(position);
919
- switch (which) {
920
- case 'second':
921
- module.secondThumbVal = thumbVal;
922
- module.update.position(thumbVal, $secondThumb);
923
- break;
924
- default:
925
- module.thumbVal = thumbVal;
926
- module.update.position(thumbVal, $thumb);
936
+ if (which === 'second') {
937
+ module.secondThumbVal = thumbVal;
938
+ module.update.position(thumbVal, $secondThumb);
939
+ } else {
940
+ module.thumbVal = thumbVal;
941
+ module.update.position(thumbVal, $thumb);
927
942
  }
928
943
  value = Math.abs(module.thumbVal - (module.secondThumbVal || 0));
929
944
  module.set.value(value);
@@ -1192,7 +1207,7 @@ $.fn.slider = function(parameters) {
1192
1207
  response
1193
1208
  ;
1194
1209
  passedArguments = passedArguments || queryArguments;
1195
- context = element || context;
1210
+ context = context || element;
1196
1211
  if(typeof query == 'string' && object !== undefined) {
1197
1212
  query = query.split(/[\. ]/);
1198
1213
  maxDepth = query.length - 1;
@@ -206,7 +206,7 @@
206
206
  transform: translate(-50%, 100%);
207
207
  }
208
208
  & when (@variationSliderTicked) {
209
- .ui.labeled.ticked.slider > .labels .label:after {
209
+ .ui.labeled.ticked.slider > .labels .label::after {
210
210
  content: ' ';
211
211
  height: @labelHeight;
212
212
  width: @labelWidth;
@@ -215,11 +215,11 @@
215
215
  top: 100%;
216
216
  left: 50%;
217
217
  }
218
- .ui.bottom.aligned.labeled.ticked.slider > .labels .label:after {
218
+ .ui.bottom.aligned.labeled.ticked.slider > .labels .label::after {
219
219
  top: auto;
220
220
  bottom: 100%;
221
221
  }
222
- .ui.labeled.ticked.slider > .labels .halftick.label:after {
222
+ .ui.labeled.ticked.slider > .labels .halftick.label::after {
223
223
  height: (@labelHeight / 2);
224
224
  }
225
225
  }
@@ -240,13 +240,13 @@
240
240
  transform: translate(-100%, -50%);
241
241
  }
242
242
 
243
- .ui.labeled.vertical.slider > .labels .label:after {
243
+ .ui.labeled.vertical.slider > .labels .label::after {
244
244
  width: @labelHeight;
245
245
  height: @labelWidth;
246
246
  left: 100%;
247
247
  top: 50%;
248
248
  }
249
- .ui.labeled.vertical.slider > .labels .halftick.label:after {
249
+ .ui.labeled.vertical.slider > .labels .halftick.label::after {
250
250
  width: (@labelHeight / 2);
251
251
  height: @labelWidth;
252
252
  }
@@ -291,46 +291,47 @@
291
291
  /*--------------
292
292
  Colors
293
293
  ---------------*/
294
+ & when not (@variationSliderColors = false) {
295
+ each(@variationSliderColors, {
296
+ @color: @value;
297
+ @c: @colors[@@color][color];
298
+ @l: @colors[@@color][light];
299
+ @h: @colors[@@color][hover];
300
+ @lh: @colors[@@color][lightHover];
301
+
302
+ /* Standard */
303
+ .ui.@{color}.slider .inner .track-fill {
304
+ background-color: @c;
305
+ }
306
+ & when (@variationSliderInverted) {
307
+ .ui.@{color}.inverted.slider .inner .track-fill {
308
+ background-color: @l;
309
+ }
310
+ }
294
311
 
295
- each(@colors, {
296
- @color: replace(@key, '@', '');
297
- @c: @colors[@@color][color];
298
- @l: @colors[@@color][light];
299
- @h: @colors[@@color][hover];
300
- @lh: @colors[@@color][lightHover];
301
-
302
- /* Standard */
303
- .ui.@{color}.slider .inner .track-fill {
304
- background-color: @c;
305
- }
306
- & when (@variationSliderInverted) {
307
- .ui.@{color}.inverted.slider .inner .track-fill {
308
- background-color: @l;
309
- }
310
- }
311
-
312
- & when (@variationSliderBasic) {
313
- /* Basic */
314
- .ui.@{color}.slider.basic .inner .thumb {
315
- background-color: @c;
316
- }
317
- .ui.@{color}.slider.basic .inner .thumb:hover,
318
- .ui.@{color}.slider.basic:focus .inner .thumb {
319
- background-color: @h;
320
- }
321
- & when (@variationSliderInverted) {
322
- /* Basic Inverted */
323
- .ui.@{color}.inverted.slider.basic .inner .thumb {
324
- background-color: @l;
325
- }
326
- .ui.@{color}.inverted.slider.basic .inner .thumb:hover,
327
- .ui.@{color}.inverted.slider.basic:focus .inner .thumb {
328
- background-color: @lh;
329
- }
330
- }
331
- }
312
+ & when (@variationSliderBasic) {
313
+ /* Basic */
314
+ .ui.@{color}.slider.basic .inner .thumb {
315
+ background-color: @c;
316
+ }
317
+ .ui.@{color}.slider.basic .inner .thumb:hover,
318
+ .ui.@{color}.slider.basic:focus .inner .thumb {
319
+ background-color: @h;
320
+ }
321
+ & when (@variationSliderInverted) {
322
+ /* Basic Inverted */
323
+ .ui.@{color}.inverted.slider.basic .inner .thumb {
324
+ background-color: @l;
325
+ }
326
+ .ui.@{color}.inverted.slider.basic .inner .thumb:hover,
327
+ .ui.@{color}.inverted.slider.basic:focus .inner .thumb {
328
+ background-color: @lh;
329
+ }
330
+ }
331
+ }
332
332
 
333
- })
333
+ })
334
+ }
334
335
 
335
336
  & when (@variationSliderBasic) {
336
337
  /*--------------
@@ -385,10 +386,10 @@ each(@colors, {
385
386
  }
386
387
  & when (@variationSliderLabeled) {
387
388
  .ui.@{value}.labeled.slider:not(.vertical) > .labels,
388
- .ui.@{value}.labeled.slider:not(.vertical) > .labels .label:after {
389
+ .ui.@{value}.labeled.slider:not(.vertical) > .labels .label::after {
389
390
  height: @@lh;
390
391
  }
391
- .ui.@{value}.labeled.slider:not(.vertical) > .labels .halftick.label:after {
392
+ .ui.@{value}.labeled.slider:not(.vertical) > .labels .halftick.label::after {
392
393
  height: (@@lh / 2);
393
394
  }
394
395
  }
@@ -404,10 +405,10 @@ each(@colors, {
404
405
  }
405
406
  & when (@variationSliderLabeled) {
406
407
  .ui.@{value}.labeled.vertical.slider> .labels,
407
- .ui.@{value}.labeled.vertical.slider> .labels .label:after {
408
+ .ui.@{value}.labeled.vertical.slider> .labels .label::after {
408
409
  width: @@lh;
409
410
  }
410
- .ui.@{value}.labeled.vertical.slider> .labels .halftick.label:after {
411
+ .ui.@{value}.labeled.vertical.slider> .labels .halftick.label::after {
411
412
  width: (@@lh / 2);
412
413
  }
413
414
  }
@@ -53,7 +53,7 @@ $.fn.sticky = function(parameters) {
53
53
 
54
54
  $module = $(this),
55
55
  $window = $(window),
56
- $scroll = $(settings.scrollContext),
56
+ $scroll = [window,document].indexOf(settings.scrollContext) < 0 ? $(document).find(settings.scrollContext) : $(settings.scrollContext),
57
57
  $container,
58
58
  $context,
59
59
 
@@ -139,7 +139,7 @@ $.fn.sticky = function(parameters) {
139
139
 
140
140
  determineContainer: function() {
141
141
  if(settings.container) {
142
- $container = $(settings.container);
142
+ $container = [window,document].indexOf(settings.container) < 0 ? $(document).find(settings.container) : $(settings.container);
143
143
  }
144
144
  else {
145
145
  $container = $module.offsetParent();
@@ -148,14 +148,13 @@ $.fn.sticky = function(parameters) {
148
148
 
149
149
  determineContext: function() {
150
150
  if(settings.context) {
151
- $context = $(settings.context);
151
+ $context = [window,document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context);
152
152
  }
153
153
  else {
154
154
  $context = $container;
155
155
  }
156
156
  if($context.length === 0) {
157
157
  module.error(error.invalidContext, settings.context, $module);
158
- return;
159
158
  }
160
159
  },
161
160
 
@@ -166,7 +165,6 @@ $.fn.sticky = function(parameters) {
166
165
  if(module.cache.element.height > module.cache.context.height) {
167
166
  module.reset();
168
167
  module.error(error.elementSize, $module);
169
- return;
170
168
  }
171
169
  },
172
170
 
@@ -317,13 +315,8 @@ $.fn.sticky = function(parameters) {
317
315
  direction = 'down'
318
316
  ;
319
317
  scroll = scroll || $scroll.scrollTop();
320
- if(module.lastScroll !== undefined) {
321
- if(module.lastScroll < scroll) {
322
- direction = 'down';
323
- }
324
- else if(module.lastScroll > scroll) {
318
+ if(module.lastScroll && module.lastScroll > scroll) {
325
319
  direction = 'up';
326
- }
327
320
  }
328
321
  return direction;
329
322
  },
@@ -371,7 +364,7 @@ $.fn.sticky = function(parameters) {
371
364
  lastScroll: function() {
372
365
  delete module.lastScroll;
373
366
  },
374
- elementScroll: function(scroll) {
367
+ elementScroll: function() {
375
368
  delete module.elementScroll;
376
369
  },
377
370
  minimumSize: function() {
@@ -393,9 +386,9 @@ $.fn.sticky = function(parameters) {
393
386
  },
394
387
  containerSize: function() {
395
388
  var
396
- tagName = $container.get(0).tagName
389
+ tagName = $container[0].tagName
397
390
  ;
398
- if(tagName === 'HTML' || tagName == 'body') {
391
+ if(tagName === 'HTML' || tagName === 'body') {
399
392
  // this can trigger for too many reasons
400
393
  //module.error(error.container, tagName, $module);
401
394
  module.determineContainer();
@@ -467,9 +460,9 @@ $.fn.sticky = function(parameters) {
467
460
  }
468
461
  },
469
462
 
470
- stick: function(scroll) {
463
+ stick: function(scrollPosition) {
471
464
  var
472
- cachedPosition = scroll || $scroll.scrollTop(),
465
+ cachedPosition = scrollPosition || $scroll.scrollTop(),
473
466
  cache = module.cache,
474
467
  fits = cache.fits,
475
468
  sameHeight = cache.sameHeight,
@@ -816,7 +809,7 @@ $.fn.sticky = function(parameters) {
816
809
  response
817
810
  ;
818
811
  passedArguments = passedArguments || queryArguments;
819
- context = element || context;
812
+ context = context || element;
820
813
  if(typeof query == 'string' && object !== undefined) {
821
814
  query = query.split(/[\. ]/);
822
815
  maxDepth = query.length - 1;
@@ -66,7 +66,9 @@
66
66
  .ui.native.sticky {
67
67
  position: -webkit-sticky;
68
68
  position: -moz-sticky;
69
- position: -ms-sticky;
69
+ & when (@supportIE) {
70
+ position: -ms-sticky;
71
+ }
70
72
  position: -o-sticky;
71
73
  position: sticky;
72
74
  }
@@ -100,10 +100,18 @@ $.fn.tab = function(parameters) {
100
100
  initializedHistory = true;
101
101
  }
102
102
 
103
- if(settings.autoTabActivation && instance === undefined && module.determine.activeTab() == null) {
104
- module.debug('No active tab detected, setting first tab active', module.get.initialPath());
105
- module.changeTab(settings.autoTabActivation === true ? module.get.initialPath() : settings.autoTabActivation);
106
- };
103
+ var activeTab = module.determine.activeTab();
104
+ if(settings.autoTabActivation && instance === undefined && activeTab == null) {
105
+ activeTab = settings.autoTabActivation === true ? module.get.initialPath() : settings.autoTabActivation;
106
+ module.debug('No active tab detected, setting tab active', activeTab);
107
+ module.changeTab(activeTab);
108
+ }
109
+ if(activeTab != null && settings.history) {
110
+ var autoUpdate = $.address.autoUpdate();
111
+ $.address.autoUpdate(false);
112
+ $.address.value(activeTab);
113
+ $.address.autoUpdate(autoUpdate);
114
+ }
107
115
 
108
116
  module.instantiate();
109
117
  },
@@ -154,7 +162,7 @@ $.fn.tab = function(parameters) {
154
162
  module.verbose('Determined parent element for creating context', $context);
155
163
  }
156
164
  else if(settings.context) {
157
- $context = $(settings.context);
165
+ $context = [window,document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context);
158
166
  module.verbose('Using selector for tab context', settings.context, $context);
159
167
  }
160
168
  else {
@@ -203,6 +211,7 @@ $.fn.tab = function(parameters) {
203
211
  .history(true)
204
212
  .state(settings.path)
205
213
  ;
214
+ $(window).trigger('popstate');
206
215
  }
207
216
  else {
208
217
  module.error(error.path);
@@ -370,6 +379,10 @@ $.fn.tab = function(parameters) {
370
379
  module.verbose('Tab parameters found', nextPathArray);
371
380
  }
372
381
  }
382
+ if (settings.onBeforeChange.call(element, currentPath) === false) {
383
+ module.debug('onBeforeChange returned false, cancelling tab change', $tab);
384
+ return false;
385
+ }
373
386
  if(isLastTab && remoteContent) {
374
387
  if(!shouldIgnoreLoad) {
375
388
  module.activate.navigation(currentPath);
@@ -406,6 +419,10 @@ $.fn.tab = function(parameters) {
406
419
  // if anchor exists use parent tab
407
420
  if($anchor && $anchor.length > 0 && currentPath) {
408
421
  module.debug('Anchor link used, opening parent tab', $tab, $anchor);
422
+ if (settings.onBeforeChange.call(element, currentPath) === false) {
423
+ module.debug('onBeforeChange returned false, cancelling tab change', $tab);
424
+ return false;
425
+ }
409
426
  if( !$tab.hasClass(className.active) ) {
410
427
  setTimeout(function() {
411
428
  module.scrollTo($anchor);
@@ -851,7 +868,7 @@ $.fn.tab = function(parameters) {
851
868
  response
852
869
  ;
853
870
  passedArguments = passedArguments || queryArguments;
854
- context = element || context;
871
+ context = context || element;
855
872
  if(typeof query == 'string' && object !== undefined) {
856
873
  query = query.split(/[\. ]/);
857
874
  maxDepth = query.length - 1;
@@ -959,6 +976,7 @@ $.fn.tab.settings = {
959
976
  onLoad : function(tabPath, parameterArray, historyEvent) {}, // called on every load
960
977
  onVisible : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible
961
978
  onRequest : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content
979
+ onBeforeChange: function(tabPath) {}, // called before a tab is about to be changed. Returning false will cancel the tab change
962
980
 
963
981
  templates : {
964
982
  determineTitle: function(tabArray) {} // returns page title for path
@@ -55,8 +55,8 @@
55
55
  left: @loadingContentOffset !important;
56
56
  }
57
57
 
58
- .ui.tab.loading:before,
59
- .ui.tab.loading.segment:before {
58
+ .ui.tab.loading::before,
59
+ .ui.tab.loading.segment::before {
60
60
  position: absolute;
61
61
  content: '';
62
62
  top: @loaderDistanceFromTop;
@@ -69,8 +69,8 @@
69
69
  border-radius: @circularRadius;
70
70
  border: @loaderLineWidth solid @loaderFillColor;
71
71
  }
72
- .ui.tab.loading:after,
73
- .ui.tab.loading.segment:after {
72
+ .ui.tab.loading::after,
73
+ .ui.tab.loading.segment::after {
74
74
  position: absolute;
75
75
  content: '';
76
76
  top: @loaderDistanceFromTop;