fomantic-ui 2.9.1-beta.4 → 2.9.1-beta.40

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 (552) hide show
  1. package/.eslint/eqeqeq-rule.js +18 -0
  2. package/.eslint/index.js +29 -0
  3. package/.eslint/no-extra-parens-rule.js +17 -0
  4. package/.eslint/package.json +11 -0
  5. package/.eslintrc.js +123 -0
  6. package/.github/auto_assign.yml +0 -1
  7. package/.github/workflows/ci.yml +37 -4
  8. package/.github/workflows/nightly.yml +1 -1
  9. package/.github/workflows/release.yml +1 -1
  10. package/.prettierrc.js +12 -0
  11. package/.stylelintrc.js +48 -0
  12. package/README.md +1 -1
  13. package/dist/components/accordion.css +35 -53
  14. package/dist/components/accordion.js +568 -595
  15. package/dist/components/accordion.min.css +2 -2
  16. package/dist/components/accordion.min.js +3 -3
  17. package/dist/components/ad.css +34 -45
  18. package/dist/components/ad.min.css +2 -2
  19. package/dist/components/api.js +1157 -1179
  20. package/dist/components/api.min.js +3 -3
  21. package/dist/components/breadcrumb.css +5 -5
  22. package/dist/components/breadcrumb.min.css +2 -2
  23. package/dist/components/button.css +709 -1121
  24. package/dist/components/button.min.css +2 -2
  25. package/dist/components/calendar.css +24 -27
  26. package/dist/components/calendar.js +1934 -1809
  27. package/dist/components/calendar.min.css +2 -2
  28. package/dist/components/calendar.min.js +3 -3
  29. package/dist/components/card.css +219 -365
  30. package/dist/components/card.min.css +2 -2
  31. package/dist/components/checkbox.css +120 -191
  32. package/dist/components/checkbox.js +842 -841
  33. package/dist/components/checkbox.min.css +2 -2
  34. package/dist/components/checkbox.min.js +3 -3
  35. package/dist/components/comment.css +41 -59
  36. package/dist/components/comment.min.css +2 -2
  37. package/dist/components/container.css +7 -6
  38. package/dist/components/container.min.css +2 -2
  39. package/dist/components/dimmer.css +53 -172
  40. package/dist/components/dimmer.js +706 -737
  41. package/dist/components/dimmer.min.css +2 -2
  42. package/dist/components/dimmer.min.js +3 -3
  43. package/dist/components/divider.css +43 -61
  44. package/dist/components/divider.min.css +2 -2
  45. package/dist/components/dropdown.css +252 -386
  46. package/dist/components/dropdown.js +4179 -4236
  47. package/dist/components/dropdown.min.css +2 -2
  48. package/dist/components/dropdown.min.js +3 -3
  49. package/dist/components/embed.css +18 -29
  50. package/dist/components/embed.js +645 -675
  51. package/dist/components/embed.min.css +2 -2
  52. package/dist/components/embed.min.js +3 -3
  53. package/dist/components/emoji.css +3556 -3556
  54. package/dist/components/emoji.min.css +1 -1
  55. package/dist/components/feed.css +35 -57
  56. package/dist/components/feed.min.css +2 -2
  57. package/dist/components/flag.css +270 -268
  58. package/dist/components/flag.min.css +2 -2
  59. package/dist/components/flyout.css +94 -141
  60. package/dist/components/flyout.js +1460 -1465
  61. package/dist/components/flyout.min.css +2 -2
  62. package/dist/components/flyout.min.js +3 -3
  63. package/dist/components/form.css +244 -339
  64. package/dist/components/form.js +2020 -2004
  65. package/dist/components/form.min.css +2 -2
  66. package/dist/components/form.min.js +3 -3
  67. package/dist/components/grid.css +183 -329
  68. package/dist/components/grid.min.css +2 -2
  69. package/dist/components/header.css +118 -142
  70. package/dist/components/header.min.css +2 -2
  71. package/dist/components/icon.css +665 -745
  72. package/dist/components/icon.min.css +2 -2
  73. package/dist/components/image.css +39 -63
  74. package/dist/components/image.min.css +2 -2
  75. package/dist/components/input.css +356 -274
  76. package/dist/components/input.min.css +2 -2
  77. package/dist/components/item.css +84 -131
  78. package/dist/components/item.min.css +2 -2
  79. package/dist/components/label.css +359 -410
  80. package/dist/components/label.min.css +2 -2
  81. package/dist/components/list.css +49 -70
  82. package/dist/components/list.min.css +2 -2
  83. package/dist/components/loader.css +67 -155
  84. package/dist/components/loader.min.css +2 -2
  85. package/dist/components/menu.css +269 -431
  86. package/dist/components/menu.min.css +1 -1
  87. package/dist/components/message.css +125 -197
  88. package/dist/components/message.min.css +2 -2
  89. package/dist/components/modal.css +119 -154
  90. package/dist/components/modal.js +1488 -1486
  91. package/dist/components/modal.min.css +2 -2
  92. package/dist/components/modal.min.js +3 -3
  93. package/dist/components/nag.css +53 -63
  94. package/dist/components/nag.js +520 -526
  95. package/dist/components/nag.min.css +2 -2
  96. package/dist/components/nag.min.js +3 -3
  97. package/dist/components/placeholder.css +22 -42
  98. package/dist/components/placeholder.min.css +2 -2
  99. package/dist/components/popup.css +424 -202
  100. package/dist/components/popup.js +1454 -1456
  101. package/dist/components/popup.min.css +2 -2
  102. package/dist/components/popup.min.js +3 -3
  103. package/dist/components/progress.css +106 -211
  104. package/dist/components/progress.js +969 -997
  105. package/dist/components/progress.min.css +2 -2
  106. package/dist/components/progress.min.js +3 -3
  107. package/dist/components/rail.css +15 -20
  108. package/dist/components/rail.min.css +1 -1
  109. package/dist/components/rating.css +80 -121
  110. package/dist/components/rating.js +505 -523
  111. package/dist/components/rating.min.css +2 -2
  112. package/dist/components/rating.min.js +3 -3
  113. package/dist/components/reset.css +8 -13
  114. package/dist/components/reset.min.css +2 -2
  115. package/dist/components/reveal.css +44 -83
  116. package/dist/components/reveal.min.css +2 -2
  117. package/dist/components/search.css +69 -98
  118. package/dist/components/search.js +1520 -1534
  119. package/dist/components/search.min.css +2 -2
  120. package/dist/components/search.min.js +3 -3
  121. package/dist/components/segment.css +148 -224
  122. package/dist/components/segment.min.css +2 -2
  123. package/dist/components/shape.css +14 -30
  124. package/dist/components/shape.js +781 -810
  125. package/dist/components/shape.min.css +2 -2
  126. package/dist/components/shape.min.js +3 -3
  127. package/dist/components/sidebar.css +103 -206
  128. package/dist/components/sidebar.js +1061 -1099
  129. package/dist/components/sidebar.min.css +2 -2
  130. package/dist/components/sidebar.min.js +3 -3
  131. package/dist/components/site.css +28 -41
  132. package/dist/components/site.js +436 -476
  133. package/dist/components/site.min.css +2 -2
  134. package/dist/components/site.min.js +3 -3
  135. package/dist/components/slider.css +93 -121
  136. package/dist/components/slider.js +1310 -1311
  137. package/dist/components/slider.min.css +1 -1
  138. package/dist/components/slider.min.js +3 -3
  139. package/dist/components/state.js +639 -657
  140. package/dist/components/state.min.js +3 -3
  141. package/dist/components/statistic.css +75 -116
  142. package/dist/components/statistic.min.css +2 -2
  143. package/dist/components/step.css +77 -150
  144. package/dist/components/step.min.css +2 -2
  145. package/dist/components/sticky.css +1 -5
  146. package/dist/components/sticky.js +848 -901
  147. package/dist/components/sticky.min.css +2 -2
  148. package/dist/components/sticky.min.js +3 -3
  149. package/dist/components/tab.css +10 -14
  150. package/dist/components/tab.js +902 -966
  151. package/dist/components/tab.min.css +2 -2
  152. package/dist/components/tab.min.js +3 -3
  153. package/dist/components/table.css +547 -774
  154. package/dist/components/table.min.css +2 -2
  155. package/dist/components/text.css +32 -32
  156. package/dist/components/text.min.css +1 -1
  157. package/dist/components/toast.css +69 -147
  158. package/dist/components/toast.js +910 -884
  159. package/dist/components/toast.min.css +2 -2
  160. package/dist/components/toast.min.js +3 -3
  161. package/dist/components/transition.css +369 -1280
  162. package/dist/components/transition.js +1047 -1077
  163. package/dist/components/transition.min.css +2 -2
  164. package/dist/components/transition.min.js +3 -3
  165. package/dist/components/visibility.js +1213 -1245
  166. package/dist/components/visibility.min.js +3 -3
  167. package/dist/semantic.css +9482 -12264
  168. package/dist/semantic.js +29051 -29426
  169. package/dist/semantic.min.css +3 -3
  170. package/dist/semantic.min.js +3 -3
  171. package/dist/themes/basic/assets/fonts/icons.woff2 +0 -0
  172. package/dist/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  173. package/dist/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  174. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  175. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  176. package/dist/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  177. package/dist/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  178. package/dist/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  179. package/dist/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  180. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  181. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  182. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  183. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  184. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  185. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  186. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  187. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  188. package/dist/themes/github/assets/fonts/octicons.woff2 +0 -0
  189. package/examples/.eslintrc.js +6 -0
  190. package/examples/assets/library/jquery.min.js +2 -4
  191. package/examples/assets/show-examples.js +13 -13
  192. package/examples/attached.html +1 -1
  193. package/examples/bootstrap.html +1 -1
  194. package/examples/components/button.html +1 -1
  195. package/examples/components/card.html +6 -6
  196. package/examples/components/input.html +1 -1
  197. package/examples/components/menu.html +1 -1
  198. package/examples/components/site.html +1 -1
  199. package/examples/components/sticky-context.html +2 -2
  200. package/examples/components/table.html +1 -1
  201. package/examples/fixed.html +3 -3
  202. package/examples/grid.html +5 -5
  203. package/examples/homepage.html +1 -1
  204. package/examples/login.html +2 -2
  205. package/examples/responsive.html +2 -2
  206. package/examples/sticky.html +4 -4
  207. package/examples/theming.html +1 -1
  208. package/gulpfile.js +13 -11
  209. package/package.json +17 -10
  210. package/scripts/nightly-version.js +83 -75
  211. package/src/_site/collections/menu.overrides +1 -1
  212. package/src/_site/elements/flag.variables +2 -2
  213. package/src/_site/globals/site.variables +1 -1
  214. package/src/_site/modules/embed.variables +3 -0
  215. package/src/definitions/behaviors/api.js +1158 -1180
  216. package/src/definitions/behaviors/form.js +2019 -2003
  217. package/src/definitions/behaviors/state.js +645 -663
  218. package/src/definitions/behaviors/visibility.js +1212 -1244
  219. package/src/definitions/collections/breadcrumb.less +43 -47
  220. package/src/definitions/collections/form.less +866 -884
  221. package/src/definitions/collections/grid.less +1681 -1699
  222. package/src/definitions/collections/menu.less +1521 -1544
  223. package/src/definitions/collections/message.less +294 -298
  224. package/src/definitions/collections/table.less +1657 -1661
  225. package/src/definitions/elements/button.less +1714 -1756
  226. package/src/definitions/elements/container.less +211 -211
  227. package/src/definitions/elements/divider.less +198 -211
  228. package/src/definitions/elements/emoji.less +41 -48
  229. package/src/definitions/elements/flag.less +46 -48
  230. package/src/definitions/elements/header.less +351 -359
  231. package/src/definitions/elements/icon.less +541 -484
  232. package/src/definitions/elements/image.less +216 -227
  233. package/src/definitions/elements/input.less +692 -698
  234. package/src/definitions/elements/label.less +784 -806
  235. package/src/definitions/elements/list.less +810 -814
  236. package/src/definitions/elements/loader.less +273 -268
  237. package/src/definitions/elements/placeholder.less +173 -170
  238. package/src/definitions/elements/rail.less +93 -93
  239. package/src/definitions/elements/reveal.less +192 -198
  240. package/src/definitions/elements/segment.less +742 -749
  241. package/src/definitions/elements/step.less +423 -437
  242. package/src/definitions/elements/text.less +34 -36
  243. package/src/definitions/globals/reset.less +11 -8
  244. package/src/definitions/globals/site.js +435 -475
  245. package/src/definitions/globals/site.less +108 -110
  246. package/src/definitions/modules/accordion.js +567 -594
  247. package/src/definitions/modules/accordion.less +244 -248
  248. package/src/definitions/modules/calendar.js +1933 -1808
  249. package/src/definitions/modules/calendar.less +100 -97
  250. package/src/definitions/modules/checkbox.js +841 -840
  251. package/src/definitions/modules/checkbox.less +531 -552
  252. package/src/definitions/modules/dimmer.js +705 -736
  253. package/src/definitions/modules/dimmer.less +294 -305
  254. package/src/definitions/modules/dropdown.js +4178 -4235
  255. package/src/definitions/modules/dropdown.less +1568 -1598
  256. package/src/definitions/modules/embed.js +644 -674
  257. package/src/definitions/modules/embed.less +82 -84
  258. package/src/definitions/modules/flyout.js +1459 -1464
  259. package/src/definitions/modules/flyout.less +452 -455
  260. package/src/definitions/modules/modal.js +1487 -1485
  261. package/src/definitions/modules/modal.less +458 -467
  262. package/src/definitions/modules/nag.js +519 -525
  263. package/src/definitions/modules/nag.less +136 -149
  264. package/src/definitions/modules/popup.js +1453 -1455
  265. package/src/definitions/modules/popup.less +738 -693
  266. package/src/definitions/modules/progress.js +968 -996
  267. package/src/definitions/modules/progress.less +523 -499
  268. package/src/definitions/modules/rating.js +504 -522
  269. package/src/definitions/modules/rating.less +98 -103
  270. package/src/definitions/modules/search.js +1519 -1533
  271. package/src/definitions/modules/search.less +374 -394
  272. package/src/definitions/modules/shape.js +780 -809
  273. package/src/definitions/modules/shape.less +70 -79
  274. package/src/definitions/modules/sidebar.js +1060 -1098
  275. package/src/definitions/modules/sidebar.less +463 -476
  276. package/src/definitions/modules/slider.js +1309 -1310
  277. package/src/definitions/modules/slider.less +309 -310
  278. package/src/definitions/modules/sticky.js +864 -917
  279. package/src/definitions/modules/sticky.less +17 -25
  280. package/src/definitions/modules/tab.js +901 -965
  281. package/src/definitions/modules/tab.less +48 -54
  282. package/src/definitions/modules/toast.js +909 -883
  283. package/src/definitions/modules/toast.less +589 -589
  284. package/src/definitions/modules/transition.js +1046 -1076
  285. package/src/definitions/modules/transition.less +65 -31
  286. package/src/definitions/views/ad.less +207 -208
  287. package/src/definitions/views/card.less +955 -973
  288. package/src/definitions/views/comment.less +192 -200
  289. package/src/definitions/views/feed.less +222 -226
  290. package/src/definitions/views/item.less +437 -448
  291. package/src/definitions/views/statistic.less +273 -279
  292. package/src/semantic.less +8 -6
  293. package/src/theme.config.example +53 -53
  294. package/src/theme.less +44 -35
  295. package/src/themes/amazon/elements/button.overrides +23 -24
  296. package/src/themes/amazon/elements/button.variables +18 -23
  297. package/src/themes/amazon/globals/site.variables +16 -17
  298. package/src/themes/basic/assets/fonts/icons.woff2 +0 -0
  299. package/src/themes/basic/collections/table.overrides +0 -1
  300. package/src/themes/basic/collections/table.variables +3 -3
  301. package/src/themes/basic/elements/button.overrides +0 -1
  302. package/src/themes/basic/elements/button.variables +9 -9
  303. package/src/themes/basic/elements/icon.overrides +9 -169
  304. package/src/themes/basic/elements/icon.variables +161 -18
  305. package/src/themes/basic/elements/step.overrides +2 -2
  306. package/src/themes/basic/elements/step.variables +2 -2
  307. package/src/themes/basic/globals/reset.overrides +1 -1
  308. package/src/themes/basic/globals/reset.variables +1 -1
  309. package/src/themes/basic/modules/progress.variables +2 -2
  310. package/src/themes/basic/views/card.overrides +0 -1
  311. package/src/themes/basic/views/card.variables +6 -6
  312. package/src/themes/bookish/elements/header.overrides +4 -4
  313. package/src/themes/bookish/elements/header.variables +5 -5
  314. package/src/themes/bootstrap3/elements/button.overrides +3 -0
  315. package/src/themes/bootstrap3/elements/button.variables +20 -25
  316. package/src/themes/chubby/collections/form.overrides +9 -9
  317. package/src/themes/chubby/collections/form.variables +3 -3
  318. package/src/themes/chubby/collections/menu.overrides +3 -0
  319. package/src/themes/chubby/collections/menu.variables +3 -3
  320. package/src/themes/chubby/elements/button.overrides +8 -10
  321. package/src/themes/chubby/elements/button.variables +10 -10
  322. package/src/themes/chubby/elements/header.overrides +1 -1
  323. package/src/themes/chubby/elements/header.variables +4 -4
  324. package/src/themes/chubby/modules/accordion.overrides +2 -2
  325. package/src/themes/chubby/modules/accordion.variables +4 -4
  326. package/src/themes/chubby/views/comment.overrides +5 -5
  327. package/src/themes/chubby/views/comment.variables +11 -11
  328. package/src/themes/classic/collections/table.variables +3 -3
  329. package/src/themes/classic/elements/button.variables +36 -43
  330. package/src/themes/classic/elements/header.variables +4 -4
  331. package/src/themes/classic/modules/progress.variables +3 -3
  332. package/src/themes/classic/views/card.overrides +25 -27
  333. package/src/themes/classic/views/card.variables +7 -7
  334. package/src/themes/colored/modules/checkbox.overrides +3 -0
  335. package/src/themes/colored/modules/checkbox.variables +1 -3
  336. package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  337. package/src/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  338. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  339. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  340. package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  341. package/src/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  342. package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  343. package/src/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  344. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  345. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  346. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  347. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  348. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  349. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  350. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  351. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  352. package/src/themes/default/collections/breadcrumb.variables +4 -4
  353. package/src/themes/default/collections/form.variables +15 -16
  354. package/src/themes/default/collections/grid.overrides +0 -1
  355. package/src/themes/default/collections/grid.variables +15 -16
  356. package/src/themes/default/collections/menu.variables +31 -45
  357. package/src/themes/default/collections/message.variables +84 -123
  358. package/src/themes/default/collections/table.overrides +3 -0
  359. package/src/themes/default/collections/table.variables +30 -34
  360. package/src/themes/default/elements/button.variables +44 -53
  361. package/src/themes/default/elements/container.variables +8 -16
  362. package/src/themes/default/elements/divider.overrides +8 -9
  363. package/src/themes/default/elements/divider.variables +5 -6
  364. package/src/themes/default/elements/emoji.overrides +0 -1
  365. package/src/themes/default/elements/emoji.variables +3556 -3556
  366. package/src/themes/default/elements/flag.variables +1595 -1595
  367. package/src/themes/default/elements/header.overrides +0 -1
  368. package/src/themes/default/elements/header.variables +21 -21
  369. package/src/themes/default/elements/icon.variables +2016 -2009
  370. package/src/themes/default/elements/image.variables +6 -7
  371. package/src/themes/default/elements/input.variables +11 -12
  372. package/src/themes/default/elements/label.variables +25 -26
  373. package/src/themes/default/elements/list.variables +17 -21
  374. package/src/themes/default/elements/loader.variables +16 -17
  375. package/src/themes/default/elements/placeholder.variables +12 -9
  376. package/src/themes/default/elements/rail.variables +4 -5
  377. package/src/themes/default/elements/reveal.variables +1 -1
  378. package/src/themes/default/elements/segment.variables +24 -36
  379. package/src/themes/default/elements/step.overrides +4 -4
  380. package/src/themes/default/elements/step.variables +19 -22
  381. package/src/themes/default/elements/text.variables +2 -3
  382. package/src/themes/default/globals/colors.less +588 -588
  383. package/src/themes/default/globals/reset.overrides +63 -59
  384. package/src/themes/default/globals/reset.variables +1 -1
  385. package/src/themes/default/globals/site.variables +1075 -1123
  386. package/src/themes/default/globals/variation.variables +13 -4
  387. package/src/themes/default/modules/accordion.overrides +11 -11
  388. package/src/themes/default/modules/accordion.variables +15 -20
  389. package/src/themes/default/modules/calendar.variables +2 -0
  390. package/src/themes/default/modules/chatroom.variables +1 -1
  391. package/src/themes/default/modules/checkbox.overrides +9 -13
  392. package/src/themes/default/modules/checkbox.variables +24 -33
  393. package/src/themes/default/modules/dimmer.variables +14 -17
  394. package/src/themes/default/modules/dropdown.overrides +17 -17
  395. package/src/themes/default/modules/dropdown.variables +29 -31
  396. package/src/themes/default/modules/embed.variables +9 -13
  397. package/src/themes/default/modules/flyout.variables +10 -8
  398. package/src/themes/default/modules/modal.variables +64 -67
  399. package/src/themes/default/modules/nag.variables +11 -14
  400. package/src/themes/default/modules/popup.variables +14 -13
  401. package/src/themes/default/modules/progress.variables +17 -19
  402. package/src/themes/default/modules/rating.variables +10 -12
  403. package/src/themes/default/modules/search.variables +12 -17
  404. package/src/themes/default/modules/shape.variables +7 -8
  405. package/src/themes/default/modules/sidebar.variables +4 -4
  406. package/src/themes/default/modules/slider.variables +55 -54
  407. package/src/themes/default/modules/sticky.variables +1 -1
  408. package/src/themes/default/modules/toast.variables +8 -8
  409. package/src/themes/default/modules/transition.overrides +936 -915
  410. package/src/themes/default/modules/transition.variables +8 -1
  411. package/src/themes/default/views/ad.variables +1 -1
  412. package/src/themes/default/views/card.variables +33 -45
  413. package/src/themes/default/views/comment.variables +7 -9
  414. package/src/themes/default/views/feed.variables +10 -10
  415. package/src/themes/default/views/item.variables +20 -23
  416. package/src/themes/default/views/statistic.variables +8 -8
  417. package/src/themes/duo/elements/loader.variables +1 -1
  418. package/src/themes/famfamfam/elements/flag.overrides +263 -268
  419. package/src/themes/famfamfam/elements/flag.variables +4 -4
  420. package/src/themes/fixed-width/collections/grid.variables +4 -4
  421. package/src/themes/fixed-width/modules/modal.variables +11 -13
  422. package/src/themes/flat/collections/form.overrides +9 -9
  423. package/src/themes/flat/collections/form.variables +16 -17
  424. package/src/themes/flat/globals/site.variables +69 -74
  425. package/src/themes/github/assets/fonts/octicons.woff2 +0 -0
  426. package/src/themes/github/collections/breadcrumb.variables +0 -1
  427. package/src/themes/github/collections/form.overrides +7 -8
  428. package/src/themes/github/collections/form.variables +16 -18
  429. package/src/themes/github/collections/grid.variables +1 -2
  430. package/src/themes/github/collections/menu.overrides +2 -2
  431. package/src/themes/github/collections/menu.variables +24 -26
  432. package/src/themes/github/collections/message.overrides +3 -3
  433. package/src/themes/github/collections/message.variables +12 -14
  434. package/src/themes/github/collections/table.variables +2 -2
  435. package/src/themes/github/elements/button.overrides +0 -1
  436. package/src/themes/github/elements/button.variables +26 -30
  437. package/src/themes/github/elements/header.variables +2 -2
  438. package/src/themes/github/elements/icon.overrides +3 -208
  439. package/src/themes/github/elements/icon.variables +234 -19
  440. package/src/themes/github/elements/image.variables +1 -1
  441. package/src/themes/github/elements/input.overrides +16 -16
  442. package/src/themes/github/elements/input.variables +4 -5
  443. package/src/themes/github/elements/label.overrides +3 -3
  444. package/src/themes/github/elements/label.variables +0 -1
  445. package/src/themes/github/elements/segment.variables +9 -10
  446. package/src/themes/github/elements/step.overrides +13 -13
  447. package/src/themes/github/elements/step.variables +6 -6
  448. package/src/themes/github/globals/site.variables +16 -16
  449. package/src/themes/github/modules/dropdown.overrides +18 -19
  450. package/src/themes/github/modules/dropdown.variables +8 -10
  451. package/src/themes/github/modules/popup.variables +0 -2
  452. package/src/themes/gmail/collections/message.overrides +3 -0
  453. package/src/themes/gmail/collections/message.variables +4 -4
  454. package/src/themes/instagram/views/card.overrides +4 -5
  455. package/src/themes/instagram/views/card.variables +7 -8
  456. package/src/themes/joypixels/elements/emoji.overrides +0 -2
  457. package/src/themes/joypixels/elements/emoji.variables +3554 -3554
  458. package/src/themes/material/collections/menu.overrides +1 -1
  459. package/src/themes/material/collections/menu.variables +4 -4
  460. package/src/themes/material/elements/button.overrides +7 -9
  461. package/src/themes/material/elements/button.variables +44 -46
  462. package/src/themes/material/elements/header.overrides +3 -3
  463. package/src/themes/material/elements/header.variables +8 -10
  464. package/src/themes/material/elements/icon.overrides +3 -934
  465. package/src/themes/material/elements/icon.variables +958 -18
  466. package/src/themes/material/globals/site.overrides +3 -0
  467. package/src/themes/material/globals/site.variables +83 -84
  468. package/src/themes/material/modules/dropdown.overrides +2 -2
  469. package/src/themes/material/modules/dropdown.variables +5 -5
  470. package/src/themes/material/modules/modal.overrides +3 -3
  471. package/src/themes/material/modules/modal.variables +4 -5
  472. package/src/themes/pulsar/elements/loader.overrides +23 -61
  473. package/src/themes/raised/elements/button.variables +8 -9
  474. package/src/themes/resetcss/globals/reset.overrides +115 -33
  475. package/src/themes/resetcss/globals/reset.variables +1 -1
  476. package/src/themes/round/elements/button.overrides +3 -0
  477. package/src/themes/round/elements/button.variables +33 -38
  478. package/src/themes/rtl/globals/site.overrides +1 -1
  479. package/src/themes/rtl/globals/site.variables +5 -6
  480. package/src/themes/striped/modules/progress.overrides +20 -16
  481. package/src/themes/systemfont/globals/reset.overrides +1 -1
  482. package/src/themes/systemfont/globals/site.variables +6 -6
  483. package/src/themes/timeline/views/feed.overrides +12 -12
  484. package/src/themes/timeline/views/feed.variables +8 -8
  485. package/src/themes/twitter/elements/button.overrides +4 -5
  486. package/src/themes/twitter/elements/button.variables +17 -18
  487. package/src/themes/twitter/elements/emoji.variables +3556 -3556
  488. package/tasks/.eslintrc.js +9 -0
  489. package/tasks/README.md +2 -4
  490. package/tasks/admin/components/create.js +268 -277
  491. package/tasks/admin/components/init.js +123 -129
  492. package/tasks/admin/components/update.js +151 -158
  493. package/tasks/admin/distributions/create.js +183 -189
  494. package/tasks/admin/distributions/init.js +125 -131
  495. package/tasks/admin/distributions/update.js +147 -153
  496. package/tasks/admin/publish.js +5 -9
  497. package/tasks/admin/register.js +37 -39
  498. package/tasks/admin/release.js +8 -12
  499. package/tasks/build/assets.js +43 -40
  500. package/tasks/build/css.js +230 -217
  501. package/tasks/build/javascript.js +120 -114
  502. package/tasks/build.js +11 -11
  503. package/tasks/check-install.js +15 -17
  504. package/tasks/clean.js +6 -6
  505. package/tasks/collections/README.md +3 -5
  506. package/tasks/collections/admin.js +34 -36
  507. package/tasks/collections/build.js +19 -21
  508. package/tasks/collections/docs.js +11 -13
  509. package/tasks/collections/install.js +11 -13
  510. package/tasks/collections/rtl.js +9 -12
  511. package/tasks/collections/various.js +10 -12
  512. package/tasks/config/admin/github.js +17 -19
  513. package/tasks/config/admin/oauth.example.js +4 -4
  514. package/tasks/config/admin/release.js +98 -98
  515. package/tasks/config/admin/templates/README.md +8 -8
  516. package/tasks/config/admin/templates/bower.json +3 -2
  517. package/tasks/config/admin/templates/component-package.js +9 -10
  518. package/tasks/config/admin/templates/css-package.js +19 -21
  519. package/tasks/config/admin/templates/less-package.js +12 -14
  520. package/tasks/config/admin/templates/package.json +6 -6
  521. package/tasks/config/defaults.js +116 -116
  522. package/tasks/config/docs.js +23 -23
  523. package/tasks/config/npm/gulpfile.js +15 -14
  524. package/tasks/config/project/config.js +124 -136
  525. package/tasks/config/project/install.js +722 -719
  526. package/tasks/config/project/release.js +34 -41
  527. package/tasks/config/tasks.js +168 -167
  528. package/tasks/config/user.js +28 -29
  529. package/tasks/docs/build.js +100 -96
  530. package/tasks/docs/metadata.js +91 -98
  531. package/tasks/docs/serve.js +84 -82
  532. package/tasks/install.js +373 -382
  533. package/tasks/rtl/build.js +4 -3
  534. package/tasks/rtl/watch.js +4 -3
  535. package/tasks/version.js +4 -6
  536. package/tasks/watch.js +29 -31
  537. package/test/.eslintrc.js +23 -0
  538. package/test/meteor/assets.js +11 -14
  539. package/test/meteor/fonts.js +12 -13
  540. package/test/modules/accordion.spec.js +6 -8
  541. package/test/modules/checkbox.spec.js +5 -7
  542. package/test/modules/dropdown.spec.js +5 -7
  543. package/test/modules/modal.spec.js +6 -8
  544. package/test/modules/module.spec.js +158 -178
  545. package/test/modules/popup.spec.js +5 -7
  546. package/test/modules/search.spec.js +5 -7
  547. package/test/modules/shape.spec.js +5 -7
  548. package/test/modules/sidebar.spec.js +5 -7
  549. package/test/modules/tab.spec.js +6 -8
  550. package/test/modules/transition.spec.js +5 -7
  551. package/test/modules/video.spec.js +5 -7
  552. package/.github/workflows/codeql.yml +0 -68
@@ -8,1012 +8,948 @@
8
8
  *
9
9
  */
10
10
 
11
- ;(function ($, window, document, undefined) {
12
-
13
- 'use strict';
14
-
15
- $.isWindow = $.isWindow || function(obj) {
16
- return obj != null && obj === obj.window;
17
- };
18
- $.isFunction = $.isFunction || function(obj) {
19
- return typeof obj === "function" && typeof obj.nodeType !== "number";
20
- };
21
-
22
- window = (typeof window != 'undefined' && window.Math == Math)
23
- ? window
24
- : (typeof self != 'undefined' && self.Math == Math)
25
- ? self
26
- : Function('return this')()
27
- ;
28
-
29
- $.fn.tab = function(parameters) {
30
-
31
- var
32
- // use window context if none specified
33
- $allModules = $.isFunction(this)
34
- ? $(window)
35
- : $(this),
36
-
37
- moduleSelector = $allModules.selector || '',
38
- time = new Date().getTime(),
39
- performance = [],
40
-
41
- query = arguments[0],
42
- methodInvoked = (typeof query == 'string'),
43
- queryArguments = [].slice.call(arguments, 1),
44
-
45
- initializedHistory = false,
46
- returnedValue
47
- ;
48
-
49
- $allModules
50
- .each(function() {
51
- var
52
-
53
- settings = ( $.isPlainObject(parameters) )
54
- ? $.extend(true, {}, $.fn.tab.settings, parameters)
55
- : $.extend({}, $.fn.tab.settings),
56
-
57
- className = settings.className,
58
- metadata = settings.metadata,
59
- selector = settings.selector,
60
- error = settings.error,
61
- regExp = settings.regExp,
62
-
63
- eventNamespace = '.' + settings.namespace,
64
- moduleNamespace = 'module-' + settings.namespace,
65
-
66
- $module = $(this),
67
- $context,
68
- $tabs,
69
-
70
- cache = {},
71
- firstLoad = true,
72
- recursionDepth = 0,
73
- element = this,
74
- instance = $module.data(moduleNamespace),
75
-
76
- activeTabPath,
77
- parameterArray,
78
- module,
79
-
80
- historyEvent
81
-
82
- ;
83
-
84
- module = {
85
-
86
- initialize: function() {
87
- module.debug('Initializing tab menu item', $module);
88
- module.fix.callbacks();
89
- module.determineTabs();
90
-
91
- module.debug('Determining tabs', settings.context, $tabs);
92
- // set up automatic routing
93
- if(settings.auto) {
94
- module.set.auto();
95
- }
96
- module.bind.events();
97
-
98
- if(settings.history && !initializedHistory) {
99
- module.initializeHistory();
100
- initializedHistory = true;
101
- }
102
-
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
- }
115
-
116
- module.instantiate();
117
- },
118
-
119
- instantiate: function () {
120
- module.verbose('Storing instance of module', module);
121
- instance = module;
122
- $module
123
- .data(moduleNamespace, module)
124
- ;
125
- },
126
-
127
- destroy: function() {
128
- module.debug('Destroying tabs', $module);
129
- $module
130
- .removeData(moduleNamespace)
131
- .off(eventNamespace)
132
- ;
133
- },
11
+ (function ($, window, document) {
12
+ 'use strict';
13
+
14
+ function isWindow(obj) {
15
+ return obj !== null && obj === obj.window;
16
+ }
17
+
18
+ function isFunction(obj) {
19
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
20
+ }
21
+
22
+ window = window !== undefined && window.Math === Math
23
+ ? window
24
+ : globalThis;
25
+
26
+ $.fn.tab = function (parameters) {
27
+ var
28
+ // use window context if none specified
29
+ $allModules = isFunction(this)
30
+ ? $(window)
31
+ : $(this),
32
+ $document = $(document),
33
+ moduleSelector = $allModules.selector || '',
34
+ time = Date.now(),
35
+ performance = [],
36
+
37
+ query = arguments[0],
38
+ methodInvoked = typeof query === 'string',
39
+ queryArguments = [].slice.call(arguments, 1),
40
+
41
+ initializedHistory = false,
42
+ returnedValue
43
+ ;
44
+
45
+ $allModules.each(function () {
46
+ var
47
+ settings = $.isPlainObject(parameters)
48
+ ? $.extend(true, {}, $.fn.tab.settings, parameters)
49
+ : $.extend({}, $.fn.tab.settings),
50
+
51
+ className = settings.className,
52
+ metadata = settings.metadata,
53
+ selector = settings.selector,
54
+ error = settings.error,
55
+ regExp = settings.regExp,
56
+
57
+ eventNamespace = '.' + settings.namespace,
58
+ moduleNamespace = 'module-' + settings.namespace,
59
+
60
+ $module = $(this),
61
+ $context,
62
+ $tabs,
63
+
64
+ cache = {},
65
+ firstLoad = true,
66
+ recursionDepth = 0,
67
+ element = this,
68
+ instance = $module.data(moduleNamespace),
69
+
70
+ activeTabPath,
71
+ parameterArray,
72
+ module,
73
+
74
+ historyEvent
75
+ ;
134
76
 
135
- bind: {
136
- events: function() {
137
- // if using $.tab don't add events
138
- if( !$.isWindow( element ) ) {
139
- module.debug('Attaching tab activation events to element', $module);
140
- $module
141
- .on('click' + eventNamespace, module.event.click)
142
- ;
143
- }
144
- }
145
- },
77
+ module = {
78
+
79
+ initialize: function () {
80
+ module.debug('Initializing tab menu item', $module);
81
+ module.determineTabs();
82
+
83
+ module.debug('Determining tabs', settings.context, $tabs);
84
+ // set up automatic routing
85
+ if (settings.auto) {
86
+ module.set.auto();
87
+ }
88
+ module.bind.events();
89
+
90
+ if (settings.history && !initializedHistory) {
91
+ module.initializeHistory();
92
+ initializedHistory = true;
93
+ }
94
+
95
+ var activeTab = module.determine.activeTab();
96
+ if (settings.autoTabActivation && instance === undefined && activeTab === null) {
97
+ activeTab = settings.autoTabActivation === true ? module.get.initialPath() : settings.autoTabActivation;
98
+ module.debug('No active tab detected, setting tab active', activeTab);
99
+ module.changeTab(activeTab);
100
+ }
101
+ if (activeTab !== null && settings.history) {
102
+ var autoUpdate = $.address.autoUpdate();
103
+ $.address.autoUpdate(false);
104
+ $.address.value(activeTab);
105
+ $.address.autoUpdate(autoUpdate);
106
+ }
107
+
108
+ module.instantiate();
109
+ },
146
110
 
147
- determineTabs: function() {
148
- var
149
- $reference
150
- ;
111
+ instantiate: function () {
112
+ module.verbose('Storing instance of module', module);
113
+ instance = module;
114
+ $module
115
+ .data(moduleNamespace, module)
116
+ ;
117
+ },
151
118
 
152
- // determine tab context
153
- if(settings.context === 'parent') {
154
- if($module.closest(selector.ui).length > 0) {
155
- $reference = $module.closest(selector.ui);
156
- module.verbose('Using closest UI element as parent', $reference);
157
- }
158
- else {
159
- $reference = $module;
160
- }
161
- $context = $reference.parent();
162
- module.verbose('Determined parent element for creating context', $context);
163
- }
164
- else if(settings.context) {
165
- $context = [window,document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context);
166
- module.verbose('Using selector for tab context', settings.context, $context);
167
- }
168
- else {
169
- $context = $('body');
170
- }
171
- // find tabs
172
- if(settings.childrenOnly) {
173
- $tabs = $context.children(selector.tabs);
174
- module.debug('Searching tab context children for tabs', $context, $tabs);
175
- }
176
- else {
177
- $tabs = $context.find(selector.tabs);
178
- module.debug('Searching tab context for tabs', $context, $tabs);
179
- }
180
- },
119
+ destroy: function () {
120
+ module.debug('Destroying tabs', $module);
121
+ $module
122
+ .removeData(moduleNamespace)
123
+ .off(eventNamespace)
124
+ ;
125
+ },
181
126
 
182
- fix: {
183
- callbacks: function() {
184
- if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {
185
- if(parameters.onTabLoad) {
186
- parameters.onLoad = parameters.onTabLoad;
187
- delete parameters.onTabLoad;
188
- module.error(error.legacyLoad, parameters.onLoad);
189
- }
190
- if(parameters.onTabInit) {
191
- parameters.onFirstLoad = parameters.onTabInit;
192
- delete parameters.onTabInit;
193
- module.error(error.legacyInit, parameters.onFirstLoad);
194
- }
195
- settings = $.extend(true, {}, $.fn.tab.settings, parameters);
196
- }
197
- }
198
- },
127
+ bind: {
128
+ events: function () {
129
+ // if using $.tab don't add events
130
+ if (!isWindow(element)) {
131
+ module.debug('Attaching tab activation events to element', $module);
132
+ $module
133
+ .on('click' + eventNamespace, module.event.click)
134
+ ;
135
+ }
136
+ },
137
+ },
199
138
 
200
- initializeHistory: function() {
201
- module.debug('Initializing page state');
202
- if( $.address === undefined ) {
203
- module.error(error.state);
204
- return false;
205
- }
206
- else {
207
- if(settings.historyType == 'state') {
208
- module.debug('Using HTML5 to manage state');
209
- if(settings.path !== false) {
210
- $.address
211
- .history(true)
212
- .state(settings.path)
213
- ;
214
- $(window).trigger('popstate');
215
- }
216
- else {
217
- module.error(error.path);
218
- return false;
219
- }
220
- }
221
- $.address
222
- .bind('change', module.event.history.change)
223
- ;
224
- }
225
- },
139
+ determineTabs: function () {
140
+ var
141
+ $reference
142
+ ;
143
+
144
+ // determine tab context
145
+ if (settings.context === 'parent') {
146
+ if ($module.closest(selector.ui).length > 0) {
147
+ $reference = $module.closest(selector.ui);
148
+ module.verbose('Using closest UI element as parent', $reference);
149
+ } else {
150
+ $reference = $module;
151
+ }
152
+ $context = $reference.parent();
153
+ module.verbose('Determined parent element for creating context', $context);
154
+ } else if (settings.context) {
155
+ $context = [window, document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $(settings.context);
156
+ module.verbose('Using selector for tab context', settings.context, $context);
157
+ } else {
158
+ $context = $('body');
159
+ }
160
+ // find tabs
161
+ if (settings.childrenOnly) {
162
+ $tabs = $context.children(selector.tabs);
163
+ module.debug('Searching tab context children for tabs', $context, $tabs);
164
+ } else {
165
+ $tabs = $context.find(selector.tabs);
166
+ module.debug('Searching tab context for tabs', $context, $tabs);
167
+ }
168
+ },
226
169
 
227
- event: {
228
- click: function(event) {
229
- var
230
- tabPath = $(this).data(metadata.tab)
231
- ;
232
- if(tabPath !== undefined) {
233
- if(settings.history) {
234
- module.verbose('Updating page state', event);
235
- $.address.value(tabPath);
236
- }
237
- else {
238
- module.verbose('Changing tab', event);
239
- module.changeTab(tabPath);
240
- }
241
- event.preventDefault();
242
- }
243
- else {
244
- module.debug('No tab specified');
245
- }
246
- },
247
- history: {
248
- change: function(event) {
249
- var
250
- tabPath = event.pathNames.join('/') || module.get.initialPath(),
251
- pageTitle = settings.templates.determineTitle(tabPath) || false
252
- ;
253
- module.performance.display();
254
- module.debug('History change event', tabPath, event);
255
- historyEvent = event;
256
- if(tabPath !== undefined) {
257
- module.changeTab(tabPath);
258
- }
259
- if(pageTitle) {
260
- $.address.title(pageTitle);
261
- }
262
- }
263
- }
264
- },
170
+ initializeHistory: function () {
171
+ module.debug('Initializing page state');
172
+ if ($.address === undefined) {
173
+ module.error(error.state);
174
+
175
+ return false;
176
+ }
177
+ if (settings.historyType === 'state') {
178
+ module.debug('Using HTML5 to manage state');
179
+ if (settings.path !== false) {
180
+ $.address
181
+ .history(true)
182
+ .state(settings.path)
183
+ ;
184
+ $(window).trigger('popstate');
185
+ } else {
186
+ module.error(error.path);
187
+
188
+ return false;
189
+ }
190
+ }
191
+ $.address
192
+ .bind('change', module.event.history.change)
193
+ ;
194
+ },
265
195
 
266
- refresh: function() {
267
- if(activeTabPath) {
268
- module.debug('Refreshing tab', activeTabPath);
269
- module.changeTab(activeTabPath);
270
- }
271
- },
196
+ event: {
197
+ click: function (event) {
198
+ var
199
+ tabPath = $(this).data(metadata.tab)
200
+ ;
201
+ if (tabPath !== undefined) {
202
+ if (settings.history) {
203
+ module.verbose('Updating page state', event);
204
+ $.address.value(tabPath);
205
+ } else {
206
+ module.verbose('Changing tab', event);
207
+ module.changeTab(tabPath);
208
+ }
209
+ event.preventDefault();
210
+ } else {
211
+ module.debug('No tab specified');
212
+ }
213
+ },
214
+ history: {
215
+ change: function (event) {
216
+ var
217
+ tabPath = event.pathNames.join('/') || module.get.initialPath(),
218
+ pageTitle = settings.templates.determineTitle(tabPath) || false
219
+ ;
220
+ module.performance.display();
221
+ module.debug('History change event', tabPath, event);
222
+ historyEvent = event;
223
+ if (tabPath !== undefined) {
224
+ module.changeTab(tabPath);
225
+ }
226
+ if (pageTitle) {
227
+ $.address.title(pageTitle);
228
+ }
229
+ },
230
+ },
231
+ },
272
232
 
273
- cache: {
233
+ refresh: function () {
234
+ if (activeTabPath) {
235
+ module.debug('Refreshing tab', activeTabPath);
236
+ module.changeTab(activeTabPath);
237
+ }
238
+ },
274
239
 
275
- read: function(cacheKey) {
276
- return (cacheKey !== undefined)
277
- ? cache[cacheKey]
278
- : false
279
- ;
280
- },
281
- add: function(cacheKey, content) {
282
- cacheKey = cacheKey || activeTabPath;
283
- module.debug('Adding cached content for', cacheKey);
284
- cache[cacheKey] = content;
285
- },
286
- remove: function(cacheKey) {
287
- cacheKey = cacheKey || activeTabPath;
288
- module.debug('Removing cached content for', cacheKey);
289
- delete cache[cacheKey];
290
- }
291
- },
240
+ cache: {
241
+
242
+ read: function (cacheKey) {
243
+ return cacheKey !== undefined
244
+ ? cache[cacheKey]
245
+ : false;
246
+ },
247
+ add: function (cacheKey, content) {
248
+ cacheKey = cacheKey || activeTabPath;
249
+ module.debug('Adding cached content for', cacheKey);
250
+ cache[cacheKey] = content;
251
+ },
252
+ remove: function (cacheKey) {
253
+ cacheKey = cacheKey || activeTabPath;
254
+ module.debug('Removing cached content for', cacheKey);
255
+ delete cache[cacheKey];
256
+ },
257
+ },
292
258
 
293
- escape: {
294
- string: function(text) {
295
- text = String(text);
296
- return text.replace(regExp.escape, '\\$&');
297
- }
298
- },
259
+ escape: {
260
+ string: function (text) {
261
+ text = String(text);
299
262
 
300
- set: {
301
- auto: function() {
302
- var
303
- url = (typeof settings.path == 'string')
304
- ? settings.path.replace(/\/$/, '') + '/{$tab}'
305
- : '/{$tab}'
306
- ;
307
- module.verbose('Setting up automatic tab retrieval from server', url);
308
- if($.isPlainObject(settings.apiSettings)) {
309
- settings.apiSettings.url = url;
310
- }
311
- else {
312
- settings.apiSettings = {
313
- url: url
314
- };
315
- }
316
- },
317
- loading: function(tabPath) {
318
- var
319
- $tab = module.get.tabElement(tabPath),
320
- isLoading = $tab.hasClass(className.loading)
321
- ;
322
- if(!isLoading) {
323
- module.verbose('Setting loading state for', $tab);
324
- $tab
325
- .addClass(className.loading)
326
- .siblings($tabs)
327
- .removeClass(className.active + ' ' + className.loading)
328
- ;
329
- if($tab.length > 0) {
330
- settings.onRequest.call($tab[0], tabPath);
331
- }
332
- }
333
- },
334
- state: function(state) {
335
- $.address.value(state);
336
- }
337
- },
263
+ return text.replace(regExp.escape, '\\$&');
264
+ },
265
+ },
338
266
 
339
- changeTab: function(tabPath) {
340
- var
341
- pushStateAvailable = (window.history && window.history.pushState),
342
- shouldIgnoreLoad = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),
343
- remoteContent = (settings.auto || $.isPlainObject(settings.apiSettings) ),
344
- // only add default path if not remote content
345
- pathArray = (remoteContent && !shouldIgnoreLoad)
346
- ? module.utilities.pathToArray(tabPath)
347
- : module.get.defaultPathArray(tabPath)
348
- ;
349
- tabPath = module.utilities.arrayToPath(pathArray);
350
- $.each(pathArray, function(index, tab) {
351
- var
352
- currentPathArray = pathArray.slice(0, index + 1),
353
- currentPath = module.utilities.arrayToPath(currentPathArray),
267
+ set: {
268
+ auto: function () {
269
+ var
270
+ url = typeof settings.path === 'string'
271
+ ? settings.path.replace(/\/$/, '') + '/{$tab}'
272
+ : '/{$tab}'
273
+ ;
274
+ module.verbose('Setting up automatic tab retrieval from server', url);
275
+ if ($.isPlainObject(settings.apiSettings)) {
276
+ settings.apiSettings.url = url;
277
+ } else {
278
+ settings.apiSettings = {
279
+ url: url,
280
+ };
281
+ }
282
+ },
283
+ loading: function (tabPath) {
284
+ var
285
+ $tab = module.get.tabElement(tabPath),
286
+ isLoading = $tab.hasClass(className.loading)
287
+ ;
288
+ if (!isLoading) {
289
+ module.verbose('Setting loading state for', $tab);
290
+ $tab
291
+ .addClass(className.loading)
292
+ .siblings($tabs)
293
+ .removeClass(className.active + ' ' + className.loading)
294
+ ;
295
+ if ($tab.length > 0) {
296
+ settings.onRequest.call($tab[0], tabPath);
297
+ }
298
+ }
299
+ },
300
+ state: function (state) {
301
+ $.address.value(state);
302
+ },
303
+ },
354
304
 
355
- isTab = module.is.tab(currentPath),
356
- isLastIndex = (index + 1 == pathArray.length),
305
+ changeTab: function (tabPath) {
306
+ var
307
+ pushStateAvailable = window.history && window.history.pushState,
308
+ shouldIgnoreLoad = pushStateAvailable && settings.ignoreFirstLoad && firstLoad,
309
+ remoteContent = settings.auto || $.isPlainObject(settings.apiSettings),
310
+ // only add default path if not remote content
311
+ pathArray = remoteContent && !shouldIgnoreLoad
312
+ ? module.utilities.pathToArray(tabPath)
313
+ : module.get.defaultPathArray(tabPath)
314
+ ;
315
+ tabPath = module.utilities.arrayToPath(pathArray);
316
+ $.each(pathArray, function (index, tab) {
317
+ var
318
+ currentPathArray = pathArray.slice(0, index + 1),
319
+ currentPath = module.utilities.arrayToPath(currentPathArray),
320
+
321
+ isTab = module.is.tab(currentPath),
322
+ isLastIndex = index + 1 === pathArray.length,
323
+
324
+ $tab = module.get.tabElement(currentPath),
325
+ $anchor,
326
+ nextPathArray,
327
+ nextPath,
328
+ isLastTab
329
+ ;
330
+ module.verbose('Looking for tab', tab);
331
+ if (isTab) {
332
+ module.verbose('Tab was found', tab);
333
+ // scope up
334
+ activeTabPath = currentPath;
335
+ parameterArray = module.utilities.filterArray(pathArray, currentPathArray);
336
+
337
+ if (isLastIndex) {
338
+ isLastTab = true;
339
+ } else {
340
+ nextPathArray = pathArray.slice(0, index + 2);
341
+ nextPath = module.utilities.arrayToPath(nextPathArray);
342
+ isLastTab = !module.is.tab(nextPath);
343
+ if (isLastTab) {
344
+ module.verbose('Tab parameters found', nextPathArray);
345
+ }
346
+ }
347
+ if (settings.onBeforeChange.call(element, currentPath) === false) {
348
+ module.debug('onBeforeChange returned false, cancelling tab change', $tab);
349
+
350
+ return false;
351
+ }
352
+ if (isLastTab && remoteContent) {
353
+ if (!shouldIgnoreLoad) {
354
+ module.activate.navigation(currentPath);
355
+ module.fetch.content(currentPath, tabPath);
356
+ } else {
357
+ module.debug('Ignoring remote content on first tab load', currentPath);
358
+ firstLoad = false;
359
+ module.cache.add(tabPath, $tab.html());
360
+ module.activate.all(currentPath);
361
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
362
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
363
+ }
364
+
365
+ return false;
366
+ }
367
+
368
+ module.debug('Opened local tab', currentPath);
369
+ module.activate.all(currentPath);
370
+ if (!module.cache.read(currentPath)) {
371
+ module.cache.add(currentPath, true);
372
+ module.debug('First time tab loaded calling tab init');
373
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
374
+ }
375
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
376
+ } else if (tabPath.search('/') === -1 && tabPath !== '') {
377
+ // look for in page anchor
378
+ tabPath = module.escape.string(tabPath);
379
+ $anchor = $('#' + tabPath + ', a[name="' + tabPath + '"]');
380
+ currentPath = $anchor.closest('[data-tab]').data(metadata.tab);
381
+ $tab = module.get.tabElement(currentPath);
382
+ // if anchor exists use parent tab
383
+ if ($anchor && $anchor.length > 0 && currentPath) {
384
+ module.debug('Anchor link used, opening parent tab', $tab, $anchor);
385
+ if (settings.onBeforeChange.call(element, currentPath) === false) {
386
+ module.debug('onBeforeChange returned false, cancelling tab change', $tab);
387
+
388
+ return false;
389
+ }
390
+ if (!$tab.hasClass(className.active)) {
391
+ setTimeout(function () {
392
+ module.scrollTo($anchor);
393
+ }, 0);
394
+ }
395
+ module.activate.all(currentPath);
396
+ if (!module.cache.read(currentPath)) {
397
+ module.cache.add(currentPath, true);
398
+ module.debug('First time tab loaded calling tab init');
399
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
400
+ }
401
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
402
+
403
+ return false;
404
+ }
405
+ } else {
406
+ module.error(error.missingTab, $module, $context, currentPath);
407
+
408
+ return false;
409
+ }
410
+ });
411
+ },
357
412
 
358
- $tab = module.get.tabElement(currentPath),
359
- $anchor,
360
- nextPathArray,
361
- nextPath,
362
- isLastTab
363
- ;
364
- module.verbose('Looking for tab', tab);
365
- if(isTab) {
366
- module.verbose('Tab was found', tab);
367
- // scope up
368
- activeTabPath = currentPath;
369
- parameterArray = module.utilities.filterArray(pathArray, currentPathArray);
370
-
371
- if(isLastIndex) {
372
- isLastTab = true;
373
- }
374
- else {
375
- nextPathArray = pathArray.slice(0, index + 2);
376
- nextPath = module.utilities.arrayToPath(nextPathArray);
377
- isLastTab = ( !module.is.tab(nextPath) );
378
- if(isLastTab) {
379
- module.verbose('Tab parameters found', nextPathArray);
380
- }
381
- }
382
- if (settings.onBeforeChange.call(element, currentPath) === false) {
383
- module.debug('onBeforeChange returned false, cancelling tab change', $tab);
384
- return false;
385
- }
386
- if(isLastTab && remoteContent) {
387
- if(!shouldIgnoreLoad) {
388
- module.activate.navigation(currentPath);
389
- module.fetch.content(currentPath, tabPath);
390
- }
391
- else {
392
- module.debug('Ignoring remote content on first tab load', currentPath);
393
- firstLoad = false;
394
- module.cache.add(tabPath, $tab.html());
395
- module.activate.all(currentPath);
396
- settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
397
- settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
398
- }
399
- return false;
400
- }
401
- else {
402
- module.debug('Opened local tab', currentPath);
403
- module.activate.all(currentPath);
404
- if( !module.cache.read(currentPath) ) {
405
- module.cache.add(currentPath, true);
406
- module.debug('First time tab loaded calling tab init');
407
- settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
408
- }
409
- settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
410
- }
413
+ scrollTo: function ($element) {
414
+ var
415
+ scrollOffset = $element && $element.length > 0
416
+ ? $element.offset().top
417
+ : false
418
+ ;
419
+ if (scrollOffset !== false) {
420
+ module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);
421
+ $document.scrollTop(scrollOffset);
422
+ }
423
+ },
411
424
 
412
- }
413
- else if(tabPath.search('/') == -1 && tabPath !== '') {
414
- // look for in page anchor
415
- tabPath = module.escape.string(tabPath);
416
- $anchor = $('#' + tabPath + ', a[name="' + tabPath + '"]');
417
- currentPath = $anchor.closest('[data-tab]').data(metadata.tab);
418
- $tab = module.get.tabElement(currentPath);
419
- // if anchor exists use parent tab
420
- if($anchor && $anchor.length > 0 && currentPath) {
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
- }
426
- if( !$tab.hasClass(className.active) ) {
427
- setTimeout(function() {
428
- module.scrollTo($anchor);
429
- }, 0);
430
- }
431
- module.activate.all(currentPath);
432
- if( !module.cache.read(currentPath) ) {
433
- module.cache.add(currentPath, true);
434
- module.debug('First time tab loaded calling tab init');
435
- settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
436
- }
437
- settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
438
- return false;
439
- }
440
- }
441
- else {
442
- module.error(error.missingTab, $module, $context, currentPath);
443
- return false;
444
- }
445
- });
446
- },
425
+ update: {
426
+ content: function (tabPath, html, evaluateScripts) {
427
+ var
428
+ $tab = module.get.tabElement(tabPath),
429
+ tab = $tab[0]
430
+ ;
431
+ evaluateScripts = evaluateScripts !== undefined
432
+ ? evaluateScripts
433
+ : settings.evaluateScripts;
434
+ if (typeof settings.cacheType === 'string' && settings.cacheType.toLowerCase() === 'dom' && typeof html !== 'string') {
435
+ $tab
436
+ .empty()
437
+ .append($(html).clone(true))
438
+ ;
439
+ } else {
440
+ if (evaluateScripts) {
441
+ module.debug('Updating HTML and evaluating inline scripts', tabPath, html);
442
+ $tab.html(html);
443
+ } else {
444
+ module.debug('Updating HTML', tabPath, html);
445
+ tab.innerHTML = html;
446
+ }
447
+ }
448
+ },
449
+ },
447
450
 
448
- scrollTo: function($element) {
449
- var
450
- scrollOffset = ($element && $element.length > 0)
451
- ? $element.offset().top
452
- : false
453
- ;
454
- if(scrollOffset !== false) {
455
- module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);
456
- $(document).scrollTop(scrollOffset);
457
- }
458
- },
451
+ fetch: {
452
+
453
+ content: function (tabPath, fullTabPath) {
454
+ var
455
+ $tab = module.get.tabElement(tabPath),
456
+ apiSettings = {
457
+ dataType: 'html',
458
+ encodeParameters: false,
459
+ on: 'now',
460
+ cache: settings.alwaysRefresh,
461
+ headers: {
462
+ 'X-Remote': true,
463
+ },
464
+ onSuccess: function (response) {
465
+ if (settings.cacheType === 'response') {
466
+ module.cache.add(fullTabPath, response);
467
+ }
468
+ module.update.content(tabPath, response);
469
+ if (tabPath == activeTabPath) {
470
+ module.debug('Content loaded', tabPath);
471
+ module.activate.tab(tabPath);
472
+ } else {
473
+ module.debug('Content loaded in background', tabPath);
474
+ }
475
+ settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);
476
+ settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
477
+
478
+ if (settings.loadOnce) {
479
+ module.cache.add(fullTabPath, true);
480
+ } else if (typeof settings.cacheType === 'string' && settings.cacheType.toLowerCase() === 'dom' && $tab.children().length > 0) {
481
+ setTimeout(function () {
482
+ var
483
+ $clone = $tab.children().clone(true)
484
+ ;
485
+ $clone = $clone.not('script');
486
+ module.cache.add(fullTabPath, $clone);
487
+ }, 0);
488
+ } else {
489
+ module.cache.add(fullTabPath, $tab.html());
490
+ }
491
+ },
492
+ urlData: {
493
+ tab: fullTabPath,
494
+ },
495
+ },
496
+ request = $tab.api('get request') || false,
497
+ existingRequest = request && request.state() === 'pending',
498
+ requestSettings,
499
+ cachedContent
500
+ ;
501
+
502
+ fullTabPath = fullTabPath || tabPath;
503
+ cachedContent = module.cache.read(fullTabPath);
504
+
505
+ if (settings.cache && cachedContent) {
506
+ module.activate.tab(tabPath);
507
+ module.debug('Adding cached content', fullTabPath);
508
+ if (!settings.loadOnce) {
509
+ if (settings.evaluateScripts === 'once') {
510
+ module.update.content(tabPath, cachedContent, false);
511
+ } else {
512
+ module.update.content(tabPath, cachedContent);
513
+ }
514
+ }
515
+ settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
516
+ } else if (existingRequest) {
517
+ module.set.loading(tabPath);
518
+ module.debug('Content is already loading', fullTabPath);
519
+ } else if ($.api !== undefined) {
520
+ requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);
521
+ module.debug('Retrieving remote content', fullTabPath, requestSettings);
522
+ module.set.loading(tabPath);
523
+ $tab.api(requestSettings);
524
+ } else {
525
+ module.error(error.api);
526
+ }
527
+ },
528
+ },
459
529
 
460
- update: {
461
- content: function(tabPath, html, evaluateScripts) {
462
- var
463
- $tab = module.get.tabElement(tabPath),
464
- tab = $tab[0]
465
- ;
466
- evaluateScripts = (evaluateScripts !== undefined)
467
- ? evaluateScripts
468
- : settings.evaluateScripts
469
- ;
470
- if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && typeof html !== 'string') {
471
- $tab
472
- .empty()
473
- .append($(html).clone(true))
474
- ;
475
- }
476
- else {
477
- if(evaluateScripts) {
478
- module.debug('Updating HTML and evaluating inline scripts', tabPath, html);
479
- $tab.html(html);
480
- }
481
- else {
482
- module.debug('Updating HTML', tabPath, html);
483
- tab.innerHTML = html;
484
- }
485
- }
486
- }
487
- },
530
+ activate: {
531
+ all: function (tabPath) {
532
+ module.activate.tab(tabPath);
533
+ module.activate.navigation(tabPath);
534
+ },
535
+ tab: function (tabPath) {
536
+ var
537
+ $tab = module.get.tabElement(tabPath),
538
+ $deactiveTabs = settings.deactivate === 'siblings'
539
+ ? $tab.siblings($tabs)
540
+ : $tabs.not($tab),
541
+ isActive = $tab.hasClass(className.active)
542
+ ;
543
+ module.verbose('Showing tab content for', $tab);
544
+ if (!isActive) {
545
+ $tab
546
+ .addClass(className.active)
547
+ ;
548
+ $deactiveTabs
549
+ .removeClass(className.active + ' ' + className.loading)
550
+ ;
551
+ if ($tab.length > 0) {
552
+ settings.onVisible.call($tab[0], tabPath);
553
+ }
554
+ }
555
+ },
556
+ navigation: function (tabPath) {
557
+ var
558
+ $navigation = module.get.navElement(tabPath),
559
+ $deactiveNavigation = settings.deactivate === 'siblings'
560
+ ? $navigation.siblings($allModules)
561
+ : $allModules.not($navigation),
562
+ isActive = $navigation.hasClass(className.active)
563
+ ;
564
+ module.verbose('Activating tab navigation for', $navigation, tabPath);
565
+ if (!isActive) {
566
+ $navigation
567
+ .addClass(className.active)
568
+ ;
569
+ $deactiveNavigation
570
+ .removeClass(className.active + ' ' + className.loading)
571
+ ;
572
+ }
573
+ },
574
+ },
488
575
 
489
- fetch: {
576
+ deactivate: {
577
+ all: function () {
578
+ module.deactivate.navigation();
579
+ module.deactivate.tabs();
580
+ },
581
+ navigation: function () {
582
+ $allModules
583
+ .removeClass(className.active)
584
+ ;
585
+ },
586
+ tabs: function () {
587
+ $tabs
588
+ .removeClass(className.active + ' ' + className.loading)
589
+ ;
590
+ },
591
+ },
490
592
 
491
- content: function(tabPath, fullTabPath) {
492
- var
493
- $tab = module.get.tabElement(tabPath),
494
- apiSettings = {
495
- dataType : 'html',
496
- encodeParameters : false,
497
- on : 'now',
498
- cache : settings.alwaysRefresh,
499
- headers : {
500
- 'X-Remote': true
593
+ is: {
594
+ tab: function (tabName) {
595
+ return tabName !== undefined
596
+ ? module.get.tabElement(tabName).length > 0
597
+ : false;
598
+ },
501
599
  },
502
- onSuccess : function(response) {
503
- if(settings.cacheType == 'response') {
504
- module.cache.add(fullTabPath, response);
505
- }
506
- module.update.content(tabPath, response);
507
- if(tabPath == activeTabPath) {
508
- module.debug('Content loaded', tabPath);
509
- module.activate.tab(tabPath);
510
- }
511
- else {
512
- module.debug('Content loaded in background', tabPath);
513
- }
514
- settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);
515
- settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
516
-
517
- if(settings.loadOnce) {
518
- module.cache.add(fullTabPath, true);
519
- }
520
- else if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && $tab.children().length > 0) {
521
- setTimeout(function() {
522
- var
523
- $clone = $tab.children().clone(true)
524
- ;
525
- $clone = $clone.not('script');
526
- module.cache.add(fullTabPath, $clone);
527
- }, 0);
528
- }
529
- else {
530
- module.cache.add(fullTabPath, $tab.html());
531
- }
600
+
601
+ get: {
602
+ initialPath: function () {
603
+ return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);
604
+ },
605
+ path: function () {
606
+ return $.address.value();
607
+ },
608
+ // adds default tabs to tab path
609
+ defaultPathArray: function (tabPath) {
610
+ return module.utilities.pathToArray(module.get.defaultPath(tabPath));
611
+ },
612
+ defaultPath: function (tabPath) {
613
+ var
614
+ $defaultNav = $allModules.filter('[data-' + metadata.tab + '^="' + module.escape.string(tabPath) + '/"]').eq(0),
615
+ defaultTab = $defaultNav.data(metadata.tab) || false
616
+ ;
617
+ if (defaultTab) {
618
+ module.debug('Found default tab', defaultTab);
619
+ if (recursionDepth < settings.maxDepth) {
620
+ recursionDepth++;
621
+
622
+ return module.get.defaultPath(defaultTab);
623
+ }
624
+ module.error(error.recursion);
625
+ } else {
626
+ module.debug('No default tabs found for', tabPath, $tabs);
627
+ }
628
+ recursionDepth = 0;
629
+
630
+ return tabPath;
631
+ },
632
+ navElement: function (tabPath) {
633
+ tabPath = tabPath || activeTabPath;
634
+
635
+ return $allModules.filter('[data-' + metadata.tab + '="' + module.escape.string(tabPath) + '"]');
636
+ },
637
+ tabElement: function (tabPath) {
638
+ var
639
+ $fullPathTab,
640
+ $simplePathTab,
641
+ tabPathArray,
642
+ lastTab
643
+ ;
644
+ tabPath = tabPath || activeTabPath;
645
+ tabPathArray = module.utilities.pathToArray(tabPath);
646
+ lastTab = module.utilities.last(tabPathArray);
647
+ $fullPathTab = $tabs.filter('[data-' + metadata.tab + '="' + module.escape.string(tabPath) + '"]');
648
+ $simplePathTab = $tabs.filter('[data-' + metadata.tab + '="' + module.escape.string(lastTab) + '"]');
649
+
650
+ return $fullPathTab.length > 0
651
+ ? $fullPathTab
652
+ : $simplePathTab;
653
+ },
654
+ tab: function () {
655
+ return activeTabPath;
656
+ },
532
657
  },
533
- urlData: {
534
- tab: fullTabPath
535
- }
536
- },
537
- request = $tab.api('get request') || false,
538
- existingRequest = ( request && request.state() === 'pending' ),
539
- requestSettings,
540
- cachedContent
541
- ;
542
658
 
543
- fullTabPath = fullTabPath || tabPath;
544
- cachedContent = module.cache.read(fullTabPath);
659
+ determine: {
660
+ activeTab: function () {
661
+ var activeTab = null;
662
+
663
+ $tabs.each(function (_index, tab) {
664
+ var $tab = $(tab);
665
+
666
+ if ($tab.hasClass(className.active)) {
667
+ var
668
+ tabPath = $(this).data(metadata.tab),
669
+ $anchor = $allModules.filter('[data-' + metadata.tab + '="' + module.escape.string(tabPath) + '"]')
670
+ ;
671
+
672
+ if ($anchor.hasClass(className.active)) {
673
+ activeTab = tabPath;
674
+ }
675
+ }
676
+ });
545
677
 
678
+ return activeTab;
679
+ },
680
+ },
681
+
682
+ utilities: {
683
+ filterArray: function (keepArray, removeArray) {
684
+ return $.grep(keepArray, function (keepValue) {
685
+ return $.inArray(keepValue, removeArray) === -1;
686
+ });
687
+ },
688
+ last: function (array) {
689
+ return Array.isArray(array)
690
+ ? array[array.length - 1]
691
+ : false;
692
+ },
693
+ pathToArray: function (pathName) {
694
+ if (pathName === undefined) {
695
+ pathName = activeTabPath;
696
+ }
697
+
698
+ return typeof pathName === 'string'
699
+ ? pathName.split('/')
700
+ : [pathName];
701
+ },
702
+ arrayToPath: function (pathArray) {
703
+ return Array.isArray(pathArray)
704
+ ? pathArray.join('/')
705
+ : false;
706
+ },
707
+ },
546
708
 
547
- if(settings.cache && cachedContent) {
548
- module.activate.tab(tabPath);
549
- module.debug('Adding cached content', fullTabPath);
550
- if(!settings.loadOnce) {
551
- if(settings.evaluateScripts == 'once') {
552
- module.update.content(tabPath, cachedContent, false);
709
+ setting: function (name, value) {
710
+ module.debug('Changing setting', name, value);
711
+ if ($.isPlainObject(name)) {
712
+ $.extend(true, settings, name);
713
+ } else if (value !== undefined) {
714
+ if ($.isPlainObject(settings[name])) {
715
+ $.extend(true, settings[name], value);
716
+ } else {
717
+ settings[name] = value;
718
+ }
719
+ } else {
720
+ return settings[name];
721
+ }
722
+ },
723
+ internal: function (name, value) {
724
+ if ($.isPlainObject(name)) {
725
+ $.extend(true, module, name);
726
+ } else if (value !== undefined) {
727
+ module[name] = value;
728
+ } else {
729
+ return module[name];
730
+ }
731
+ },
732
+ debug: function () {
733
+ if (!settings.silent && settings.debug) {
734
+ if (settings.performance) {
735
+ module.performance.log(arguments);
736
+ } else {
737
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
738
+ module.debug.apply(console, arguments);
739
+ }
740
+ }
741
+ },
742
+ verbose: function () {
743
+ if (!settings.silent && settings.verbose && settings.debug) {
744
+ if (settings.performance) {
745
+ module.performance.log(arguments);
746
+ } else {
747
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
748
+ module.verbose.apply(console, arguments);
749
+ }
750
+ }
751
+ },
752
+ error: function () {
753
+ if (!settings.silent) {
754
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
755
+ module.error.apply(console, arguments);
756
+ }
757
+ },
758
+ performance: {
759
+ log: function (message) {
760
+ var
761
+ currentTime,
762
+ executionTime,
763
+ previousTime
764
+ ;
765
+ if (settings.performance) {
766
+ currentTime = Date.now();
767
+ previousTime = time || currentTime;
768
+ executionTime = currentTime - previousTime;
769
+ time = currentTime;
770
+ performance.push({
771
+ Name: message[0],
772
+ Arguments: [].slice.call(message, 1) || '',
773
+ Element: element,
774
+ 'Execution Time': executionTime,
775
+ });
776
+ }
777
+ clearTimeout(module.performance.timer);
778
+ module.performance.timer = setTimeout(module.performance.display, 500);
779
+ },
780
+ display: function () {
781
+ var
782
+ title = settings.name + ':',
783
+ totalTime = 0
784
+ ;
785
+ time = false;
786
+ clearTimeout(module.performance.timer);
787
+ $.each(performance, function (index, data) {
788
+ totalTime += data['Execution Time'];
789
+ });
790
+ title += ' ' + totalTime + 'ms';
791
+ if (moduleSelector) {
792
+ title += ' \'' + moduleSelector + '\'';
793
+ }
794
+ if (performance.length > 0) {
795
+ console.groupCollapsed(title);
796
+ if (console.table) {
797
+ console.table(performance);
798
+ } else {
799
+ $.each(performance, function (index, data) {
800
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
801
+ });
802
+ }
803
+ console.groupEnd();
804
+ }
805
+ performance = [];
806
+ },
807
+ },
808
+ invoke: function (query, passedArguments, context) {
809
+ var
810
+ object = instance,
811
+ maxDepth,
812
+ found,
813
+ response
814
+ ;
815
+ passedArguments = passedArguments || queryArguments;
816
+ context = context || element;
817
+ if (typeof query === 'string' && object !== undefined) {
818
+ query = query.split(/[ .]/);
819
+ maxDepth = query.length - 1;
820
+ $.each(query, function (depth, value) {
821
+ var camelCaseValue = depth !== maxDepth
822
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
823
+ : query
824
+ ;
825
+ if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
826
+ object = object[camelCaseValue];
827
+ } else if (object[camelCaseValue] !== undefined) {
828
+ found = object[camelCaseValue];
829
+
830
+ return false;
831
+ } else if ($.isPlainObject(object[value]) && (depth !== maxDepth)) {
832
+ object = object[value];
833
+ } else if (object[value] !== undefined) {
834
+ found = object[value];
835
+
836
+ return false;
837
+ } else {
838
+ module.error(error.method, query);
839
+
840
+ return false;
841
+ }
842
+ });
843
+ }
844
+ if (isFunction(found)) {
845
+ response = found.apply(context, passedArguments);
846
+ } else if (found !== undefined) {
847
+ response = found;
848
+ }
849
+ if (Array.isArray(returnedValue)) {
850
+ returnedValue.push(response);
851
+ } else if (returnedValue !== undefined) {
852
+ returnedValue = [returnedValue, response];
853
+ } else if (response !== undefined) {
854
+ returnedValue = response;
855
+ }
856
+
857
+ return found;
858
+ },
859
+ };
860
+ if (methodInvoked) {
861
+ if (instance === undefined) {
862
+ module.initialize();
553
863
  }
554
- else {
555
- module.update.content(tabPath, cachedContent);
864
+ module.invoke(query);
865
+ } else {
866
+ if (instance !== undefined) {
867
+ instance.invoke('destroy');
556
868
  }
557
- }
558
- settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
559
- }
560
- else if(existingRequest) {
561
- module.set.loading(tabPath);
562
- module.debug('Content is already loading', fullTabPath);
563
- }
564
- else if($.api !== undefined) {
565
- requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);
566
- module.debug('Retrieving remote content', fullTabPath, requestSettings);
567
- module.set.loading(tabPath);
568
- $tab.api(requestSettings);
869
+ module.initialize();
569
870
  }
570
- else {
571
- module.error(error.api);
572
- }
573
- }
574
- },
871
+ });
575
872
 
576
- activate: {
577
- all: function(tabPath) {
578
- module.activate.tab(tabPath);
579
- module.activate.navigation(tabPath);
580
- },
581
- tab: function(tabPath) {
582
- var
583
- $tab = module.get.tabElement(tabPath),
584
- $deactiveTabs = (settings.deactivate == 'siblings')
585
- ? $tab.siblings($tabs)
586
- : $tabs.not($tab),
587
- isActive = $tab.hasClass(className.active)
588
- ;
589
- module.verbose('Showing tab content for', $tab);
590
- if(!isActive) {
591
- $tab
592
- .addClass(className.active)
593
- ;
594
- $deactiveTabs
595
- .removeClass(className.active + ' ' + className.loading)
596
- ;
597
- if($tab.length > 0) {
598
- settings.onVisible.call($tab[0], tabPath);
599
- }
600
- }
601
- },
602
- navigation: function(tabPath) {
603
- var
604
- $navigation = module.get.navElement(tabPath),
605
- $deactiveNavigation = (settings.deactivate == 'siblings')
606
- ? $navigation.siblings($allModules)
607
- : $allModules.not($navigation),
608
- isActive = $navigation.hasClass(className.active)
609
- ;
610
- module.verbose('Activating tab navigation for', $navigation, tabPath);
611
- if(!isActive) {
612
- $navigation
613
- .addClass(className.active)
614
- ;
615
- $deactiveNavigation
616
- .removeClass(className.active + ' ' + className.loading)
617
- ;
618
- }
619
- }
620
- },
873
+ return returnedValue !== undefined
874
+ ? returnedValue
875
+ : this;
876
+ };
621
877
 
622
- deactivate: {
623
- all: function() {
624
- module.deactivate.navigation();
625
- module.deactivate.tabs();
626
- },
627
- navigation: function() {
628
- $allModules
629
- .removeClass(className.active)
630
- ;
631
- },
632
- tabs: function() {
633
- $tabs
634
- .removeClass(className.active + ' ' + className.loading)
635
- ;
636
- }
637
- },
878
+ // shortcut for tabbed content with no defined navigation
879
+ $.tab = function () {
880
+ $(window).tab.apply(this, arguments);
881
+ };
638
882
 
639
- is: {
640
- tab: function(tabName) {
641
- return (tabName !== undefined)
642
- ? ( module.get.tabElement(tabName).length > 0 )
643
- : false
644
- ;
645
- }
646
- },
883
+ $.fn.tab.settings = {
647
884
 
648
- get: {
649
- initialPath: function() {
650
- return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);
651
- },
652
- path: function() {
653
- return $.address.value();
654
- },
655
- // adds default tabs to tab path
656
- defaultPathArray: function(tabPath) {
657
- return module.utilities.pathToArray( module.get.defaultPath(tabPath) );
658
- },
659
- defaultPath: function(tabPath) {
660
- var
661
- $defaultNav = $allModules.filter('[data-' + metadata.tab + '^="' + module.escape.string(tabPath) + '/"]').eq(0),
662
- defaultTab = $defaultNav.data(metadata.tab) || false
663
- ;
664
- if( defaultTab ) {
665
- module.debug('Found default tab', defaultTab);
666
- if(recursionDepth < settings.maxDepth) {
667
- recursionDepth++;
668
- return module.get.defaultPath(defaultTab);
669
- }
670
- module.error(error.recursion);
671
- }
672
- else {
673
- module.debug('No default tabs found for', tabPath, $tabs);
674
- }
675
- recursionDepth = 0;
676
- return tabPath;
677
- },
678
- navElement: function(tabPath) {
679
- tabPath = tabPath || activeTabPath;
680
- return $allModules.filter('[data-' + metadata.tab + '="' + module.escape.string(tabPath) + '"]');
681
- },
682
- tabElement: function(tabPath) {
683
- var
684
- $fullPathTab,
685
- $simplePathTab,
686
- tabPathArray,
687
- lastTab
688
- ;
689
- tabPath = tabPath || activeTabPath;
690
- tabPathArray = module.utilities.pathToArray(tabPath);
691
- lastTab = module.utilities.last(tabPathArray);
692
- $fullPathTab = $tabs.filter('[data-' + metadata.tab + '="' + module.escape.string(tabPath) + '"]');
693
- $simplePathTab = $tabs.filter('[data-' + metadata.tab + '="' + module.escape.string(lastTab) + '"]');
694
- return ($fullPathTab.length > 0)
695
- ? $fullPathTab
696
- : $simplePathTab
697
- ;
698
- },
699
- tab: function() {
700
- return activeTabPath;
701
- }
702
- },
885
+ name: 'Tab',
886
+ namespace: 'tab',
703
887
 
704
- determine: {
705
- activeTab: function() {
706
- var activeTab = null;
888
+ silent: false,
889
+ debug: false,
890
+ verbose: false,
891
+ performance: true,
707
892
 
708
- $tabs.each(function(_index, tab) {
709
- var $tab = $(tab);
893
+ auto: false, // uses pjax style endpoints fetching content from same url with remote-content headers
894
+ history: false, // use browser history
895
+ historyType: 'hash', // #/ or html5 state
896
+ path: false, // base path of url
710
897
 
711
- if( $tab.hasClass(className.active) ) {
712
- var
713
- tabPath = $(this).data(metadata.tab),
714
- $anchor = $allModules.filter('[data-' + metadata.tab + '="' + module.escape.string(tabPath) + '"]')
715
- ;
898
+ context: false, // specify a context that tabs must appear inside
899
+ childrenOnly: false, // use only tabs that are children of context
900
+ maxDepth: 25, // max depth a tab can be nested
716
901
 
717
- if( $anchor.hasClass(className.active) ) {
718
- activeTab = tabPath;
719
- }
720
- }
721
- });
902
+ deactivate: 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together
722
903
 
723
- return activeTab;
724
- }
725
- },
904
+ alwaysRefresh: false, // load tab content new every tab click
905
+ cache: true, // cache the content requests to pull locally
906
+ loadOnce: false, // Whether tab data should only be loaded once when using remote content
907
+ cacheType: 'response', // Whether to cache exact response, or to html cache contents after scripts execute
908
+ ignoreFirstLoad: false, // don't load remote content on first load
726
909
 
727
- utilities: {
728
- filterArray: function(keepArray, removeArray) {
729
- return $.grep(keepArray, function(keepValue) {
730
- return ( $.inArray(keepValue, removeArray) == -1);
731
- });
732
- },
733
- last: function(array) {
734
- return Array.isArray(array)
735
- ? array[ array.length - 1]
736
- : false
737
- ;
738
- },
739
- pathToArray: function(pathName) {
740
- if(pathName === undefined) {
741
- pathName = activeTabPath;
742
- }
743
- return typeof pathName == 'string'
744
- ? pathName.split('/')
745
- : [pathName]
746
- ;
747
- },
748
- arrayToPath: function(pathArray) {
749
- return Array.isArray(pathArray)
750
- ? pathArray.join('/')
751
- : false
752
- ;
753
- }
754
- },
910
+ apiSettings: false, // settings for api call
911
+ evaluateScripts: 'once', // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content
912
+ autoTabActivation: true, // whether a non existing active tab will auto activate the first available tab
755
913
 
756
- setting: function(name, value) {
757
- module.debug('Changing setting', name, value);
758
- if( $.isPlainObject(name) ) {
759
- $.extend(true, settings, name);
760
- }
761
- else if(value !== undefined) {
762
- if($.isPlainObject(settings[name])) {
763
- $.extend(true, settings[name], value);
764
- }
765
- else {
766
- settings[name] = value;
767
- }
768
- }
769
- else {
770
- return settings[name];
771
- }
914
+ onFirstLoad: function (tabPath, parameterArray, historyEvent) {}, // called first time loaded
915
+ onLoad: function (tabPath, parameterArray, historyEvent) {}, // called on every load
916
+ onVisible: function (tabPath, parameterArray, historyEvent) {}, // called every time tab visible
917
+ onRequest: function (tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content
918
+ onBeforeChange: function (tabPath) {}, // called before a tab is about to be changed. Returning false will cancel the tab change
919
+
920
+ templates: {
921
+ determineTitle: function (tabArray) {}, // returns page title for path
772
922
  },
773
- internal: function(name, value) {
774
- if( $.isPlainObject(name) ) {
775
- $.extend(true, module, name);
776
- }
777
- else if(value !== undefined) {
778
- module[name] = value;
779
- }
780
- else {
781
- return module[name];
782
- }
923
+
924
+ error: {
925
+ api: 'You attempted to load content without API module',
926
+ method: 'The method you called is not defined',
927
+ missingTab: 'Activated tab cannot be found. Tabs are case-sensitive.',
928
+ noContent: 'The tab you specified is missing a content url.',
929
+ path: 'History enabled, but no path was specified',
930
+ recursion: 'Max recursive depth reached',
931
+ state: 'History requires Asual\'s Address library <https://github.com/asual/jquery-address>',
783
932
  },
784
- debug: function() {
785
- if(!settings.silent && settings.debug) {
786
- if(settings.performance) {
787
- module.performance.log(arguments);
788
- }
789
- else {
790
- module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
791
- module.debug.apply(console, arguments);
792
- }
793
- }
933
+
934
+ regExp: {
935
+ escape: /[\s#$()*+,.:=?@[\\\]^{|}-]/g,
794
936
  },
795
- verbose: function() {
796
- if(!settings.silent && settings.verbose && settings.debug) {
797
- if(settings.performance) {
798
- module.performance.log(arguments);
799
- }
800
- else {
801
- module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
802
- module.verbose.apply(console, arguments);
803
- }
804
- }
937
+
938
+ metadata: {
939
+ tab: 'tab',
940
+ loaded: 'loaded',
941
+ promise: 'promise',
805
942
  },
806
- error: function() {
807
- if(!settings.silent) {
808
- module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
809
- module.error.apply(console, arguments);
810
- }
943
+
944
+ className: {
945
+ loading: 'loading',
946
+ active: 'active',
811
947
  },
812
- performance: {
813
- log: function(message) {
814
- var
815
- currentTime,
816
- executionTime,
817
- previousTime
818
- ;
819
- if(settings.performance) {
820
- currentTime = new Date().getTime();
821
- previousTime = time || currentTime;
822
- executionTime = currentTime - previousTime;
823
- time = currentTime;
824
- performance.push({
825
- 'Name' : message[0],
826
- 'Arguments' : [].slice.call(message, 1) || '',
827
- 'Element' : element,
828
- 'Execution Time' : executionTime
829
- });
830
- }
831
- clearTimeout(module.performance.timer);
832
- module.performance.timer = setTimeout(module.performance.display, 500);
833
- },
834
- display: function() {
835
- var
836
- title = settings.name + ':',
837
- totalTime = 0
838
- ;
839
- time = false;
840
- clearTimeout(module.performance.timer);
841
- $.each(performance, function(index, data) {
842
- totalTime += data['Execution Time'];
843
- });
844
- title += ' ' + totalTime + 'ms';
845
- if(moduleSelector) {
846
- title += ' \'' + moduleSelector + '\'';
847
- }
848
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
849
- console.groupCollapsed(title);
850
- if(console.table) {
851
- console.table(performance);
852
- }
853
- else {
854
- $.each(performance, function(index, data) {
855
- console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
856
- });
857
- }
858
- console.groupEnd();
859
- }
860
- performance = [];
861
- }
948
+
949
+ selector: {
950
+ tabs: '.ui.tab',
951
+ ui: '.ui',
862
952
  },
863
- invoke: function(query, passedArguments, context) {
864
- var
865
- object = instance,
866
- maxDepth,
867
- found,
868
- response
869
- ;
870
- passedArguments = passedArguments || queryArguments;
871
- context = context || element;
872
- if(typeof query == 'string' && object !== undefined) {
873
- query = query.split(/[\. ]/);
874
- maxDepth = query.length - 1;
875
- $.each(query, function(depth, value) {
876
- var camelCaseValue = (depth != maxDepth)
877
- ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
878
- : query
879
- ;
880
- if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
881
- object = object[camelCaseValue];
882
- }
883
- else if( object[camelCaseValue] !== undefined ) {
884
- found = object[camelCaseValue];
885
- return false;
886
- }
887
- else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
888
- object = object[value];
889
- }
890
- else if( object[value] !== undefined ) {
891
- found = object[value];
892
- return false;
893
- }
894
- else {
895
- module.error(error.method, query);
896
- return false;
897
- }
898
- });
899
- }
900
- if ( $.isFunction( found ) ) {
901
- response = found.apply(context, passedArguments);
902
- }
903
- else if(found !== undefined) {
904
- response = found;
905
- }
906
- if(Array.isArray(returnedValue)) {
907
- returnedValue.push(response);
908
- }
909
- else if(returnedValue !== undefined) {
910
- returnedValue = [returnedValue, response];
911
- }
912
- else if(response !== undefined) {
913
- returnedValue = response;
914
- }
915
- return found;
916
- }
917
- };
918
- if(methodInvoked) {
919
- if(instance === undefined) {
920
- module.initialize();
921
- }
922
- module.invoke(query);
923
- }
924
- else {
925
- if(instance !== undefined) {
926
- instance.invoke('destroy');
927
- }
928
- module.initialize();
929
- }
930
- })
931
- ;
932
- return (returnedValue !== undefined)
933
- ? returnedValue
934
- : this
935
- ;
936
-
937
- };
938
-
939
- // shortcut for tabbed content with no defined navigation
940
- $.tab = function() {
941
- $(window).tab.apply(this, arguments);
942
- };
943
-
944
- $.fn.tab.settings = {
945
-
946
- name : 'Tab',
947
- namespace : 'tab',
948
-
949
- silent : false,
950
- debug : false,
951
- verbose : false,
952
- performance : true,
953
-
954
- auto : false, // uses pjax style endpoints fetching content from same url with remote-content headers
955
- history : false, // use browser history
956
- historyType : 'hash', // #/ or html5 state
957
- path : false, // base path of url
958
-
959
- context : false, // specify a context that tabs must appear inside
960
- childrenOnly : false, // use only tabs that are children of context
961
- maxDepth : 25, // max depth a tab can be nested
962
-
963
- deactivate : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together
964
-
965
- alwaysRefresh : false, // load tab content new every tab click
966
- cache : true, // cache the content requests to pull locally
967
- loadOnce : false, // Whether tab data should only be loaded once when using remote content
968
- cacheType : 'response', // Whether to cache exact response, or to html cache contents after scripts execute
969
- ignoreFirstLoad : false, // don't load remote content on first load
970
-
971
- apiSettings : false, // settings for api call
972
- evaluateScripts : 'once', // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content
973
- autoTabActivation: true, // whether a non existing active tab will auto activate the first available tab
974
-
975
- onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded
976
- onLoad : function(tabPath, parameterArray, historyEvent) {}, // called on every load
977
- onVisible : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible
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
980
-
981
- templates : {
982
- determineTitle: function(tabArray) {} // returns page title for path
983
- },
984
-
985
- error: {
986
- api : 'You attempted to load content without API module',
987
- method : 'The method you called is not defined',
988
- missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',
989
- noContent : 'The tab you specified is missing a content url.',
990
- path : 'History enabled, but no path was specified',
991
- recursion : 'Max recursive depth reached',
992
- legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',
993
- legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',
994
- state : 'History requires Asual\'s Address library <https://github.com/asual/jquery-address>'
995
- },
996
-
997
- regExp : {
998
- escape : /[-[\]{}()*+?.,\\^$|#\s:=@]/g
999
- },
1000
-
1001
- metadata : {
1002
- tab : 'tab',
1003
- loaded : 'loaded',
1004
- promise: 'promise'
1005
- },
1006
-
1007
- className : {
1008
- loading : 'loading',
1009
- active : 'active'
1010
- },
1011
-
1012
- selector : {
1013
- tabs : '.ui.tab',
1014
- ui : '.ui'
1015
- }
1016
-
1017
- };
1018
-
1019
- })( jQuery, window, document );
953
+
954
+ };
955
+ })(jQuery, window, document);