fomantic-ui 2.9.1-beta.3 → 2.9.1-beta.31

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 (540) 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/workflows/ci.yml +37 -4
  7. package/.github/workflows/nightly.yml +1 -1
  8. package/.github/workflows/release.yml +1 -1
  9. package/.prettierrc.js +12 -0
  10. package/.stylelintrc.js +48 -0
  11. package/README.md +1 -1
  12. package/dist/components/accordion.css +35 -53
  13. package/dist/components/accordion.js +568 -595
  14. package/dist/components/accordion.min.css +2 -2
  15. package/dist/components/accordion.min.js +2 -2
  16. package/dist/components/ad.css +34 -45
  17. package/dist/components/ad.min.css +2 -2
  18. package/dist/components/api.js +1157 -1179
  19. package/dist/components/api.min.js +2 -2
  20. package/dist/components/breadcrumb.css +5 -5
  21. package/dist/components/breadcrumb.min.css +2 -2
  22. package/dist/components/button.css +709 -1121
  23. package/dist/components/button.min.css +2 -2
  24. package/dist/components/calendar.css +24 -27
  25. package/dist/components/calendar.js +1934 -1809
  26. package/dist/components/calendar.min.css +2 -2
  27. package/dist/components/calendar.min.js +2 -2
  28. package/dist/components/card.css +219 -365
  29. package/dist/components/card.min.css +2 -2
  30. package/dist/components/checkbox.css +119 -187
  31. package/dist/components/checkbox.js +842 -841
  32. package/dist/components/checkbox.min.css +2 -2
  33. package/dist/components/checkbox.min.js +2 -2
  34. package/dist/components/comment.css +41 -59
  35. package/dist/components/comment.min.css +2 -2
  36. package/dist/components/container.css +7 -6
  37. package/dist/components/container.min.css +2 -2
  38. package/dist/components/dimmer.css +53 -172
  39. package/dist/components/dimmer.js +706 -737
  40. package/dist/components/dimmer.min.css +2 -2
  41. package/dist/components/dimmer.min.js +2 -2
  42. package/dist/components/divider.css +43 -61
  43. package/dist/components/divider.min.css +2 -2
  44. package/dist/components/dropdown.css +252 -386
  45. package/dist/components/dropdown.js +4179 -4236
  46. package/dist/components/dropdown.min.css +2 -2
  47. package/dist/components/dropdown.min.js +2 -2
  48. package/dist/components/embed.css +18 -29
  49. package/dist/components/embed.js +645 -675
  50. package/dist/components/embed.min.css +2 -2
  51. package/dist/components/embed.min.js +2 -2
  52. package/dist/components/emoji.css +9 -9
  53. package/dist/components/emoji.min.css +1 -1
  54. package/dist/components/feed.css +35 -57
  55. package/dist/components/feed.min.css +2 -2
  56. package/dist/components/flag.css +6 -4
  57. package/dist/components/flag.min.css +2 -2
  58. package/dist/components/flyout.css +86 -141
  59. package/dist/components/flyout.js +1457 -1465
  60. package/dist/components/flyout.min.css +2 -2
  61. package/dist/components/flyout.min.js +2 -2
  62. package/dist/components/form.css +244 -339
  63. package/dist/components/form.js +2020 -2004
  64. package/dist/components/form.min.css +2 -2
  65. package/dist/components/form.min.js +2 -2
  66. package/dist/components/grid.css +172 -319
  67. package/dist/components/grid.min.css +2 -2
  68. package/dist/components/header.css +118 -142
  69. package/dist/components/header.min.css +2 -2
  70. package/dist/components/icon.css +660 -718
  71. package/dist/components/icon.min.css +2 -2
  72. package/dist/components/image.css +39 -63
  73. package/dist/components/image.min.css +2 -2
  74. package/dist/components/input.css +356 -274
  75. package/dist/components/input.min.css +2 -2
  76. package/dist/components/item.css +84 -131
  77. package/dist/components/item.min.css +2 -2
  78. package/dist/components/label.css +359 -410
  79. package/dist/components/label.min.css +2 -2
  80. package/dist/components/list.css +49 -70
  81. package/dist/components/list.min.css +2 -2
  82. package/dist/components/loader.css +67 -155
  83. package/dist/components/loader.min.css +2 -2
  84. package/dist/components/menu.css +269 -431
  85. package/dist/components/menu.min.css +1 -1
  86. package/dist/components/message.css +125 -197
  87. package/dist/components/message.min.css +2 -2
  88. package/dist/components/modal.css +119 -154
  89. package/dist/components/modal.js +1488 -1486
  90. package/dist/components/modal.min.css +2 -2
  91. package/dist/components/modal.min.js +2 -2
  92. package/dist/components/nag.css +53 -63
  93. package/dist/components/nag.js +520 -526
  94. package/dist/components/nag.min.css +2 -2
  95. package/dist/components/nag.min.js +2 -2
  96. package/dist/components/placeholder.css +22 -42
  97. package/dist/components/placeholder.min.css +2 -2
  98. package/dist/components/popup.css +423 -201
  99. package/dist/components/popup.js +1454 -1456
  100. package/dist/components/popup.min.css +2 -2
  101. package/dist/components/popup.min.js +2 -2
  102. package/dist/components/progress.css +106 -211
  103. package/dist/components/progress.js +969 -997
  104. package/dist/components/progress.min.css +2 -2
  105. package/dist/components/progress.min.js +2 -2
  106. package/dist/components/rail.css +15 -20
  107. package/dist/components/rail.min.css +1 -1
  108. package/dist/components/rating.css +80 -121
  109. package/dist/components/rating.js +505 -523
  110. package/dist/components/rating.min.css +2 -2
  111. package/dist/components/rating.min.js +2 -2
  112. package/dist/components/reset.css +8 -13
  113. package/dist/components/reset.min.css +2 -2
  114. package/dist/components/reveal.css +44 -83
  115. package/dist/components/reveal.min.css +2 -2
  116. package/dist/components/search.css +69 -98
  117. package/dist/components/search.js +1493 -1534
  118. package/dist/components/search.min.css +2 -2
  119. package/dist/components/search.min.js +2 -2
  120. package/dist/components/segment.css +148 -224
  121. package/dist/components/segment.min.css +2 -2
  122. package/dist/components/shape.css +14 -30
  123. package/dist/components/shape.js +781 -810
  124. package/dist/components/shape.min.css +2 -2
  125. package/dist/components/shape.min.js +2 -2
  126. package/dist/components/sidebar.css +103 -206
  127. package/dist/components/sidebar.js +1061 -1099
  128. package/dist/components/sidebar.min.css +2 -2
  129. package/dist/components/sidebar.min.js +2 -2
  130. package/dist/components/site.css +28 -41
  131. package/dist/components/site.js +436 -476
  132. package/dist/components/site.min.css +2 -2
  133. package/dist/components/site.min.js +2 -2
  134. package/dist/components/slider.css +93 -121
  135. package/dist/components/slider.js +1310 -1311
  136. package/dist/components/slider.min.css +1 -1
  137. package/dist/components/slider.min.js +2 -2
  138. package/dist/components/state.js +639 -657
  139. package/dist/components/state.min.js +2 -2
  140. package/dist/components/statistic.css +75 -116
  141. package/dist/components/statistic.min.css +2 -2
  142. package/dist/components/step.css +77 -150
  143. package/dist/components/step.min.css +2 -2
  144. package/dist/components/sticky.css +1 -5
  145. package/dist/components/sticky.js +848 -901
  146. package/dist/components/sticky.min.css +2 -2
  147. package/dist/components/sticky.min.js +2 -2
  148. package/dist/components/tab.css +10 -14
  149. package/dist/components/tab.js +922 -965
  150. package/dist/components/tab.min.css +2 -2
  151. package/dist/components/tab.min.js +2 -2
  152. package/dist/components/table.css +547 -774
  153. package/dist/components/table.min.css +2 -2
  154. package/dist/components/text.css +32 -32
  155. package/dist/components/text.min.css +1 -1
  156. package/dist/components/toast.css +69 -147
  157. package/dist/components/toast.js +910 -884
  158. package/dist/components/toast.min.css +2 -2
  159. package/dist/components/toast.min.js +2 -2
  160. package/dist/components/transition.css +369 -1280
  161. package/dist/components/transition.js +1047 -1077
  162. package/dist/components/transition.min.css +2 -2
  163. package/dist/components/transition.min.js +2 -2
  164. package/dist/components/visibility.js +1213 -1245
  165. package/dist/components/visibility.min.js +2 -2
  166. package/dist/semantic.css +5637 -8398
  167. package/dist/semantic.js +29021 -29405
  168. package/dist/semantic.min.css +2 -2
  169. package/dist/semantic.min.js +2 -2
  170. package/dist/themes/basic/assets/fonts/icons.woff2 +0 -0
  171. package/dist/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  172. package/dist/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  173. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  174. package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  175. package/dist/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  176. package/dist/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  177. package/dist/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  178. package/dist/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  179. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  180. package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  181. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  182. package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  183. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  184. package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  185. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  186. package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  187. package/dist/themes/github/assets/fonts/octicons.woff2 +0 -0
  188. package/examples/.eslintrc.js +6 -0
  189. package/examples/assets/show-examples.js +13 -13
  190. package/examples/components/sticky-context.html +1 -1
  191. package/examples/fixed.html +2 -2
  192. package/examples/grid.html +4 -4
  193. package/examples/login.html +1 -1
  194. package/examples/responsive.html +1 -1
  195. package/examples/sticky.html +3 -3
  196. package/gulpfile.js +13 -11
  197. package/package.json +18 -11
  198. package/scripts/nightly-version.js +83 -75
  199. package/src/_site/collections/menu.overrides +1 -1
  200. package/src/_site/elements/flag.variables +2 -2
  201. package/src/_site/globals/site.variables +1 -1
  202. package/src/_site/modules/embed.variables +3 -0
  203. package/src/definitions/behaviors/api.js +1158 -1180
  204. package/src/definitions/behaviors/form.js +2019 -2003
  205. package/src/definitions/behaviors/state.js +645 -663
  206. package/src/definitions/behaviors/visibility.js +1212 -1244
  207. package/src/definitions/collections/breadcrumb.less +43 -47
  208. package/src/definitions/collections/form.less +866 -884
  209. package/src/definitions/collections/grid.less +1680 -1699
  210. package/src/definitions/collections/menu.less +1521 -1544
  211. package/src/definitions/collections/message.less +294 -298
  212. package/src/definitions/collections/table.less +1657 -1661
  213. package/src/definitions/elements/button.less +1714 -1756
  214. package/src/definitions/elements/container.less +211 -211
  215. package/src/definitions/elements/divider.less +198 -211
  216. package/src/definitions/elements/emoji.less +41 -48
  217. package/src/definitions/elements/flag.less +46 -48
  218. package/src/definitions/elements/header.less +351 -359
  219. package/src/definitions/elements/icon.less +541 -484
  220. package/src/definitions/elements/image.less +216 -227
  221. package/src/definitions/elements/input.less +692 -698
  222. package/src/definitions/elements/label.less +784 -806
  223. package/src/definitions/elements/list.less +810 -814
  224. package/src/definitions/elements/loader.less +273 -268
  225. package/src/definitions/elements/placeholder.less +173 -170
  226. package/src/definitions/elements/rail.less +93 -93
  227. package/src/definitions/elements/reveal.less +192 -198
  228. package/src/definitions/elements/segment.less +742 -749
  229. package/src/definitions/elements/step.less +423 -437
  230. package/src/definitions/elements/text.less +34 -36
  231. package/src/definitions/globals/reset.less +11 -8
  232. package/src/definitions/globals/site.js +435 -475
  233. package/src/definitions/globals/site.less +108 -110
  234. package/src/definitions/modules/accordion.js +567 -594
  235. package/src/definitions/modules/accordion.less +244 -248
  236. package/src/definitions/modules/calendar.js +1933 -1808
  237. package/src/definitions/modules/calendar.less +100 -97
  238. package/src/definitions/modules/checkbox.js +841 -840
  239. package/src/definitions/modules/checkbox.less +531 -552
  240. package/src/definitions/modules/dimmer.js +705 -736
  241. package/src/definitions/modules/dimmer.less +294 -305
  242. package/src/definitions/modules/dropdown.js +4178 -4235
  243. package/src/definitions/modules/dropdown.less +1568 -1598
  244. package/src/definitions/modules/embed.js +644 -674
  245. package/src/definitions/modules/embed.less +82 -84
  246. package/src/definitions/modules/flyout.js +1456 -1464
  247. package/src/definitions/modules/flyout.less +445 -456
  248. package/src/definitions/modules/modal.js +1487 -1485
  249. package/src/definitions/modules/modal.less +458 -467
  250. package/src/definitions/modules/nag.js +519 -525
  251. package/src/definitions/modules/nag.less +136 -149
  252. package/src/definitions/modules/popup.js +1453 -1455
  253. package/src/definitions/modules/popup.less +737 -692
  254. package/src/definitions/modules/progress.js +968 -996
  255. package/src/definitions/modules/progress.less +523 -499
  256. package/src/definitions/modules/rating.js +504 -522
  257. package/src/definitions/modules/rating.less +98 -103
  258. package/src/definitions/modules/search.js +1492 -1533
  259. package/src/definitions/modules/search.less +374 -394
  260. package/src/definitions/modules/shape.js +780 -809
  261. package/src/definitions/modules/shape.less +70 -79
  262. package/src/definitions/modules/sidebar.js +1060 -1098
  263. package/src/definitions/modules/sidebar.less +463 -476
  264. package/src/definitions/modules/slider.js +1309 -1310
  265. package/src/definitions/modules/slider.less +309 -310
  266. package/src/definitions/modules/sticky.js +864 -917
  267. package/src/definitions/modules/sticky.less +17 -25
  268. package/src/definitions/modules/tab.js +921 -964
  269. package/src/definitions/modules/tab.less +48 -54
  270. package/src/definitions/modules/toast.js +909 -883
  271. package/src/definitions/modules/toast.less +589 -589
  272. package/src/definitions/modules/transition.js +1046 -1076
  273. package/src/definitions/modules/transition.less +65 -31
  274. package/src/definitions/views/ad.less +207 -208
  275. package/src/definitions/views/card.less +955 -973
  276. package/src/definitions/views/comment.less +192 -200
  277. package/src/definitions/views/feed.less +222 -226
  278. package/src/definitions/views/item.less +437 -448
  279. package/src/definitions/views/statistic.less +273 -279
  280. package/src/semantic.less +8 -6
  281. package/src/theme.config.example +53 -53
  282. package/src/theme.less +44 -35
  283. package/src/themes/amazon/elements/button.overrides +23 -24
  284. package/src/themes/amazon/elements/button.variables +18 -23
  285. package/src/themes/amazon/globals/site.variables +16 -17
  286. package/src/themes/basic/assets/fonts/icons.woff2 +0 -0
  287. package/src/themes/basic/collections/table.overrides +0 -1
  288. package/src/themes/basic/collections/table.variables +3 -3
  289. package/src/themes/basic/elements/button.overrides +0 -1
  290. package/src/themes/basic/elements/button.variables +9 -9
  291. package/src/themes/basic/elements/icon.overrides +9 -169
  292. package/src/themes/basic/elements/icon.variables +161 -18
  293. package/src/themes/basic/elements/step.overrides +2 -2
  294. package/src/themes/basic/elements/step.variables +2 -2
  295. package/src/themes/basic/globals/reset.overrides +1 -1
  296. package/src/themes/basic/globals/reset.variables +1 -1
  297. package/src/themes/basic/modules/progress.variables +2 -2
  298. package/src/themes/basic/views/card.overrides +0 -1
  299. package/src/themes/basic/views/card.variables +6 -6
  300. package/src/themes/bookish/elements/header.overrides +4 -4
  301. package/src/themes/bookish/elements/header.variables +5 -5
  302. package/src/themes/bootstrap3/elements/button.overrides +3 -0
  303. package/src/themes/bootstrap3/elements/button.variables +20 -25
  304. package/src/themes/chubby/collections/form.overrides +9 -9
  305. package/src/themes/chubby/collections/form.variables +3 -3
  306. package/src/themes/chubby/collections/menu.overrides +3 -0
  307. package/src/themes/chubby/collections/menu.variables +3 -3
  308. package/src/themes/chubby/elements/button.overrides +8 -10
  309. package/src/themes/chubby/elements/button.variables +10 -10
  310. package/src/themes/chubby/elements/header.overrides +1 -1
  311. package/src/themes/chubby/elements/header.variables +4 -4
  312. package/src/themes/chubby/modules/accordion.overrides +2 -2
  313. package/src/themes/chubby/modules/accordion.variables +4 -4
  314. package/src/themes/chubby/views/comment.overrides +5 -5
  315. package/src/themes/chubby/views/comment.variables +11 -11
  316. package/src/themes/classic/collections/table.variables +3 -3
  317. package/src/themes/classic/elements/button.variables +36 -43
  318. package/src/themes/classic/elements/header.variables +4 -4
  319. package/src/themes/classic/modules/progress.variables +3 -3
  320. package/src/themes/classic/views/card.overrides +25 -27
  321. package/src/themes/classic/views/card.variables +7 -7
  322. package/src/themes/colored/modules/checkbox.overrides +3 -0
  323. package/src/themes/colored/modules/checkbox.variables +1 -3
  324. package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  325. package/src/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
  326. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  327. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  328. package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  329. package/src/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
  330. package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  331. package/src/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
  332. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  333. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  334. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  335. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
  336. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  337. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
  338. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  339. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  340. package/src/themes/default/collections/breadcrumb.variables +4 -4
  341. package/src/themes/default/collections/form.variables +15 -16
  342. package/src/themes/default/collections/grid.overrides +0 -1
  343. package/src/themes/default/collections/grid.variables +14 -16
  344. package/src/themes/default/collections/menu.variables +31 -45
  345. package/src/themes/default/collections/message.variables +84 -123
  346. package/src/themes/default/collections/table.overrides +3 -0
  347. package/src/themes/default/collections/table.variables +30 -34
  348. package/src/themes/default/elements/button.variables +45 -52
  349. package/src/themes/default/elements/container.variables +8 -16
  350. package/src/themes/default/elements/divider.overrides +8 -9
  351. package/src/themes/default/elements/divider.variables +5 -6
  352. package/src/themes/default/elements/emoji.overrides +0 -1
  353. package/src/themes/default/elements/emoji.variables +3555 -3555
  354. package/src/themes/default/elements/flag.variables +1594 -1594
  355. package/src/themes/default/elements/header.overrides +0 -1
  356. package/src/themes/default/elements/header.variables +21 -21
  357. package/src/themes/default/elements/icon.variables +2023 -2009
  358. package/src/themes/default/elements/image.variables +6 -7
  359. package/src/themes/default/elements/input.variables +11 -12
  360. package/src/themes/default/elements/label.variables +25 -26
  361. package/src/themes/default/elements/list.variables +17 -21
  362. package/src/themes/default/elements/loader.variables +16 -17
  363. package/src/themes/default/elements/placeholder.variables +12 -9
  364. package/src/themes/default/elements/rail.variables +4 -5
  365. package/src/themes/default/elements/reveal.variables +1 -1
  366. package/src/themes/default/elements/segment.variables +24 -36
  367. package/src/themes/default/elements/step.overrides +4 -4
  368. package/src/themes/default/elements/step.variables +19 -22
  369. package/src/themes/default/elements/text.variables +2 -3
  370. package/src/themes/default/globals/colors.less +588 -588
  371. package/src/themes/default/globals/reset.overrides +63 -59
  372. package/src/themes/default/globals/reset.variables +1 -1
  373. package/src/themes/default/globals/site.variables +1075 -1123
  374. package/src/themes/default/globals/variation.variables +13 -4
  375. package/src/themes/default/modules/accordion.overrides +11 -11
  376. package/src/themes/default/modules/accordion.variables +15 -20
  377. package/src/themes/default/modules/calendar.variables +2 -0
  378. package/src/themes/default/modules/chatroom.variables +1 -1
  379. package/src/themes/default/modules/checkbox.overrides +8 -9
  380. package/src/themes/default/modules/checkbox.variables +24 -33
  381. package/src/themes/default/modules/dimmer.variables +14 -17
  382. package/src/themes/default/modules/dropdown.overrides +17 -17
  383. package/src/themes/default/modules/dropdown.variables +29 -31
  384. package/src/themes/default/modules/embed.variables +9 -13
  385. package/src/themes/default/modules/flyout.variables +8 -8
  386. package/src/themes/default/modules/modal.variables +64 -67
  387. package/src/themes/default/modules/nag.variables +11 -14
  388. package/src/themes/default/modules/popup.variables +14 -13
  389. package/src/themes/default/modules/progress.variables +17 -19
  390. package/src/themes/default/modules/rating.variables +10 -12
  391. package/src/themes/default/modules/search.variables +12 -17
  392. package/src/themes/default/modules/shape.variables +7 -8
  393. package/src/themes/default/modules/sidebar.variables +4 -4
  394. package/src/themes/default/modules/slider.variables +55 -54
  395. package/src/themes/default/modules/sticky.variables +1 -1
  396. package/src/themes/default/modules/toast.variables +8 -8
  397. package/src/themes/default/modules/transition.overrides +936 -915
  398. package/src/themes/default/modules/transition.variables +8 -1
  399. package/src/themes/default/views/ad.variables +1 -1
  400. package/src/themes/default/views/card.variables +33 -45
  401. package/src/themes/default/views/comment.variables +7 -9
  402. package/src/themes/default/views/feed.variables +10 -10
  403. package/src/themes/default/views/item.variables +20 -23
  404. package/src/themes/default/views/statistic.variables +8 -8
  405. package/src/themes/duo/elements/loader.variables +1 -1
  406. package/src/themes/famfamfam/elements/flag.overrides +263 -268
  407. package/src/themes/famfamfam/elements/flag.variables +4 -4
  408. package/src/themes/fixed-width/collections/grid.variables +4 -4
  409. package/src/themes/fixed-width/modules/modal.variables +11 -13
  410. package/src/themes/flat/collections/form.overrides +9 -9
  411. package/src/themes/flat/collections/form.variables +16 -17
  412. package/src/themes/flat/globals/site.variables +69 -74
  413. package/src/themes/github/assets/fonts/octicons.woff2 +0 -0
  414. package/src/themes/github/collections/breadcrumb.variables +0 -1
  415. package/src/themes/github/collections/form.overrides +7 -8
  416. package/src/themes/github/collections/form.variables +16 -18
  417. package/src/themes/github/collections/grid.variables +1 -2
  418. package/src/themes/github/collections/menu.overrides +2 -2
  419. package/src/themes/github/collections/menu.variables +24 -26
  420. package/src/themes/github/collections/message.overrides +3 -3
  421. package/src/themes/github/collections/message.variables +12 -14
  422. package/src/themes/github/collections/table.variables +2 -2
  423. package/src/themes/github/elements/button.overrides +0 -1
  424. package/src/themes/github/elements/button.variables +26 -30
  425. package/src/themes/github/elements/header.variables +2 -2
  426. package/src/themes/github/elements/icon.overrides +3 -208
  427. package/src/themes/github/elements/icon.variables +234 -19
  428. package/src/themes/github/elements/image.variables +1 -1
  429. package/src/themes/github/elements/input.overrides +16 -16
  430. package/src/themes/github/elements/input.variables +4 -5
  431. package/src/themes/github/elements/label.overrides +3 -3
  432. package/src/themes/github/elements/label.variables +0 -1
  433. package/src/themes/github/elements/segment.variables +9 -10
  434. package/src/themes/github/elements/step.overrides +13 -13
  435. package/src/themes/github/elements/step.variables +6 -6
  436. package/src/themes/github/globals/site.variables +16 -16
  437. package/src/themes/github/modules/dropdown.overrides +18 -19
  438. package/src/themes/github/modules/dropdown.variables +8 -10
  439. package/src/themes/github/modules/popup.variables +0 -2
  440. package/src/themes/gmail/collections/message.overrides +3 -0
  441. package/src/themes/gmail/collections/message.variables +4 -4
  442. package/src/themes/instagram/views/card.overrides +4 -5
  443. package/src/themes/instagram/views/card.variables +7 -8
  444. package/src/themes/joypixels/elements/emoji.overrides +0 -2
  445. package/src/themes/joypixels/elements/emoji.variables +3554 -3554
  446. package/src/themes/material/collections/menu.overrides +1 -1
  447. package/src/themes/material/collections/menu.variables +4 -4
  448. package/src/themes/material/elements/button.overrides +7 -9
  449. package/src/themes/material/elements/button.variables +44 -46
  450. package/src/themes/material/elements/header.overrides +3 -3
  451. package/src/themes/material/elements/header.variables +8 -10
  452. package/src/themes/material/elements/icon.overrides +3 -934
  453. package/src/themes/material/elements/icon.variables +958 -18
  454. package/src/themes/material/globals/site.overrides +3 -0
  455. package/src/themes/material/globals/site.variables +83 -84
  456. package/src/themes/material/modules/dropdown.overrides +2 -2
  457. package/src/themes/material/modules/dropdown.variables +5 -5
  458. package/src/themes/material/modules/modal.overrides +3 -3
  459. package/src/themes/material/modules/modal.variables +4 -5
  460. package/src/themes/pulsar/elements/loader.overrides +23 -61
  461. package/src/themes/raised/elements/button.variables +8 -9
  462. package/src/themes/resetcss/globals/reset.overrides +115 -33
  463. package/src/themes/resetcss/globals/reset.variables +1 -1
  464. package/src/themes/round/elements/button.overrides +3 -0
  465. package/src/themes/round/elements/button.variables +33 -38
  466. package/src/themes/rtl/globals/site.overrides +1 -1
  467. package/src/themes/rtl/globals/site.variables +5 -6
  468. package/src/themes/striped/modules/progress.overrides +20 -16
  469. package/src/themes/systemfont/globals/reset.overrides +1 -1
  470. package/src/themes/systemfont/globals/site.variables +6 -6
  471. package/src/themes/timeline/views/feed.overrides +12 -12
  472. package/src/themes/timeline/views/feed.variables +8 -8
  473. package/src/themes/twitter/elements/button.overrides +4 -5
  474. package/src/themes/twitter/elements/button.variables +17 -18
  475. package/src/themes/twitter/elements/emoji.variables +3555 -3555
  476. package/tasks/.eslintrc.js +9 -0
  477. package/tasks/README.md +2 -4
  478. package/tasks/admin/components/create.js +268 -277
  479. package/tasks/admin/components/init.js +123 -129
  480. package/tasks/admin/components/update.js +151 -158
  481. package/tasks/admin/distributions/create.js +183 -189
  482. package/tasks/admin/distributions/init.js +125 -131
  483. package/tasks/admin/distributions/update.js +147 -153
  484. package/tasks/admin/publish.js +5 -9
  485. package/tasks/admin/register.js +37 -39
  486. package/tasks/admin/release.js +8 -12
  487. package/tasks/build/assets.js +43 -40
  488. package/tasks/build/css.js +230 -217
  489. package/tasks/build/javascript.js +120 -114
  490. package/tasks/build.js +11 -11
  491. package/tasks/check-install.js +15 -17
  492. package/tasks/clean.js +6 -6
  493. package/tasks/collections/README.md +3 -5
  494. package/tasks/collections/admin.js +34 -36
  495. package/tasks/collections/build.js +18 -21
  496. package/tasks/collections/docs.js +10 -13
  497. package/tasks/collections/install.js +10 -13
  498. package/tasks/collections/rtl.js +8 -12
  499. package/tasks/collections/various.js +9 -12
  500. package/tasks/config/admin/github.js +17 -19
  501. package/tasks/config/admin/oauth.example.js +4 -4
  502. package/tasks/config/admin/release.js +98 -98
  503. package/tasks/config/admin/templates/README.md +8 -8
  504. package/tasks/config/admin/templates/bower.json +3 -2
  505. package/tasks/config/admin/templates/component-package.js +9 -10
  506. package/tasks/config/admin/templates/css-package.js +19 -21
  507. package/tasks/config/admin/templates/less-package.js +12 -14
  508. package/tasks/config/admin/templates/package.json +5 -5
  509. package/tasks/config/defaults.js +116 -116
  510. package/tasks/config/docs.js +23 -23
  511. package/tasks/config/npm/gulpfile.js +15 -14
  512. package/tasks/config/project/config.js +124 -136
  513. package/tasks/config/project/install.js +722 -719
  514. package/tasks/config/project/release.js +34 -41
  515. package/tasks/config/tasks.js +168 -167
  516. package/tasks/config/user.js +28 -29
  517. package/tasks/docs/build.js +100 -96
  518. package/tasks/docs/metadata.js +91 -98
  519. package/tasks/docs/serve.js +84 -82
  520. package/tasks/install.js +373 -382
  521. package/tasks/rtl/build.js +3 -3
  522. package/tasks/rtl/watch.js +4 -3
  523. package/tasks/version.js +4 -6
  524. package/tasks/watch.js +29 -31
  525. package/test/.eslintrc.js +23 -0
  526. package/test/meteor/assets.js +11 -14
  527. package/test/meteor/fonts.js +12 -13
  528. package/test/modules/accordion.spec.js +6 -8
  529. package/test/modules/checkbox.spec.js +5 -7
  530. package/test/modules/dropdown.spec.js +5 -7
  531. package/test/modules/modal.spec.js +6 -8
  532. package/test/modules/module.spec.js +158 -178
  533. package/test/modules/popup.spec.js +5 -7
  534. package/test/modules/search.spec.js +5 -7
  535. package/test/modules/shape.spec.js +5 -7
  536. package/test/modules/sidebar.spec.js +5 -7
  537. package/test/modules/tab.spec.js +6 -8
  538. package/test/modules/transition.spec.js +5 -7
  539. package/test/modules/video.spec.js +5 -7
  540. package/.github/workflows/codeql.yml +0 -68
@@ -8,961 +8,908 @@
8
8
  *
9
9
  */
10
10
 
11
- ;(function ($, window, document, undefined) {
12
-
13
- 'use strict';
14
-
15
- $.isFunction = $.isFunction || function(obj) {
16
- return typeof obj === "function" && typeof obj.nodeType !== "number";
17
- };
18
-
19
- window = (typeof window != 'undefined' && window.Math == Math)
20
- ? window
21
- : (typeof self != 'undefined' && self.Math == Math)
22
- ? self
23
- : Function('return this')()
24
- ;
25
-
26
- $.fn.sticky = function(parameters) {
27
- var
28
- $allModules = $(this),
29
- moduleSelector = $allModules.selector || '',
30
-
31
- time = new Date().getTime(),
32
- performance = [],
33
-
34
- query = arguments[0],
35
- methodInvoked = (typeof query == 'string'),
36
- queryArguments = [].slice.call(arguments, 1),
37
- returnedValue
38
- ;
39
-
40
- $allModules
41
- .each(function() {
42
- var
43
- settings = ( $.isPlainObject(parameters) )
44
- ? $.extend(true, {}, $.fn.sticky.settings, parameters)
45
- : $.extend({}, $.fn.sticky.settings),
46
-
47
- className = settings.className,
48
- namespace = settings.namespace,
49
- error = settings.error,
50
-
51
- eventNamespace = '.' + namespace,
52
- moduleNamespace = 'module-' + namespace,
53
-
54
- $module = $(this),
55
- $window = $(window),
56
- $scroll = [window,document].indexOf(settings.scrollContext) < 0 ? $(document).find(settings.scrollContext) : $(settings.scrollContext),
57
- $container,
58
- $context,
59
-
60
- instance = $module.data(moduleNamespace),
61
-
62
- requestAnimationFrame = window.requestAnimationFrame
63
- || window.mozRequestAnimationFrame
64
- || window.webkitRequestAnimationFrame
65
- || window.msRequestAnimationFrame
66
- || function(callback) { setTimeout(callback, 0); },
67
-
68
- element = this,
69
-
70
- documentObserver,
71
- observer,
72
- module
73
- ;
74
-
75
- module = {
76
-
77
- initialize: function() {
78
-
79
- module.determineContainer();
80
- module.determineContext();
81
- module.verbose('Initializing sticky', settings, $container);
82
-
83
- module.save.positions();
84
- module.checkErrors();
85
- module.bind.events();
86
-
87
- if(settings.observeChanges) {
88
- module.observeChanges();
89
- }
90
- module.instantiate();
91
- },
11
+ (function ($, window, document) {
12
+ 'use strict';
92
13
 
93
- instantiate: function() {
94
- module.verbose('Storing instance of module', module);
95
- instance = module;
96
- $module
97
- .data(moduleNamespace, module)
98
- ;
99
- },
14
+ function isFunction(obj) {
15
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
16
+ }
100
17
 
101
- destroy: function() {
102
- module.verbose('Destroying previous instance');
103
- module.reset();
104
- if(documentObserver) {
105
- documentObserver.disconnect();
106
- }
107
- if(observer) {
108
- observer.disconnect();
109
- }
110
- $window
111
- .off('load' + eventNamespace, module.event.load)
112
- .off('resize' + eventNamespace, module.event.resize)
113
- ;
114
- $scroll
115
- .off('scrollchange' + eventNamespace, module.event.scrollchange)
116
- ;
117
- $module.removeData(moduleNamespace);
118
- },
18
+ window = window !== undefined && window.Math === Math
19
+ ? window
20
+ : globalThis;
119
21
 
120
- observeChanges: function() {
121
- if('MutationObserver' in window) {
122
- documentObserver = new MutationObserver(module.event.documentChanged);
123
- observer = new MutationObserver(module.event.changed);
124
- documentObserver.observe(document, {
125
- childList : true,
126
- subtree : true
127
- });
128
- observer.observe(element, {
129
- childList : true,
130
- subtree : true
131
- });
132
- observer.observe($context[0], {
133
- childList : true,
134
- subtree : true
135
- });
136
- module.debug('Setting up mutation observer', observer);
137
- }
138
- },
22
+ $.fn.sticky = function (parameters) {
23
+ var
24
+ $allModules = $(this),
25
+ $document = $(document),
26
+ moduleSelector = $allModules.selector || '',
139
27
 
140
- determineContainer: function() {
141
- if(settings.container) {
142
- $container = [window,document].indexOf(settings.container) < 0 ? $(document).find(settings.container) : $(settings.container);
143
- }
144
- else {
145
- $container = $module.offsetParent();
146
- }
147
- },
28
+ time = Date.now(),
29
+ performance = [],
148
30
 
149
- determineContext: function() {
150
- if(settings.context) {
151
- $context = [window,document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context);
152
- }
153
- else {
154
- $context = $container;
155
- }
156
- if($context.length === 0) {
157
- module.error(error.invalidContext, settings.context, $module);
158
- }
159
- },
31
+ query = arguments[0],
32
+ methodInvoked = typeof query === 'string',
33
+ queryArguments = [].slice.call(arguments, 1),
34
+ returnedValue
35
+ ;
160
36
 
161
- checkErrors: function() {
162
- if( module.is.hidden() ) {
163
- module.error(error.visible, $module);
164
- }
165
- if(module.cache.element.height > module.cache.context.height) {
166
- module.reset();
167
- module.error(error.elementSize, $module);
168
- }
169
- },
37
+ $allModules.each(function () {
38
+ var
39
+ settings = $.isPlainObject(parameters)
40
+ ? $.extend(true, {}, $.fn.sticky.settings, parameters)
41
+ : $.extend({}, $.fn.sticky.settings),
170
42
 
171
- bind: {
172
- events: function() {
173
- $window
174
- .on('load' + eventNamespace, module.event.load)
175
- .on('resize' + eventNamespace, module.event.resize)
176
- ;
177
- // pub/sub pattern
178
- $scroll
179
- .off('scroll' + eventNamespace)
180
- .on('scroll' + eventNamespace, module.event.scroll)
181
- .on('scrollchange' + eventNamespace, module.event.scrollchange)
182
- ;
183
- }
184
- },
43
+ className = settings.className,
44
+ namespace = settings.namespace,
45
+ error = settings.error,
185
46
 
186
- event: {
187
- changed: function(mutations) {
188
- clearTimeout(module.timer);
189
- module.timer = setTimeout(function() {
190
- module.verbose('DOM tree modified, updating sticky menu', mutations);
191
- module.refresh();
192
- }, 100);
193
- },
194
- documentChanged: function(mutations) {
195
- [].forEach.call(mutations, function(mutation) {
196
- if(mutation.removedNodes) {
197
- [].forEach.call(mutation.removedNodes, function(node) {
198
- if(node == element || $(node).find(element).length > 0) {
199
- module.debug('Element removed from DOM, tearing down events');
200
- module.destroy();
201
- }
202
- });
203
- }
204
- });
205
- },
206
- load: function() {
207
- module.verbose('Page contents finished loading');
208
- requestAnimationFrame(module.refresh);
209
- },
210
- resize: function() {
211
- module.verbose('Window resized');
212
- requestAnimationFrame(module.refresh);
213
- },
214
- scroll: function() {
215
- requestAnimationFrame(function() {
216
- $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );
217
- });
218
- },
219
- scrollchange: function(event, scrollPosition) {
220
- module.stick(scrollPosition);
221
- settings.onScroll.call(element);
222
- }
223
- },
47
+ eventNamespace = '.' + namespace,
48
+ moduleNamespace = 'module-' + namespace,
224
49
 
225
- refresh: function(hardRefresh) {
226
- module.reset();
227
- if(!settings.context) {
228
- module.determineContext();
229
- }
230
- if(hardRefresh) {
231
- module.determineContainer();
232
- }
233
- module.save.positions();
234
- module.stick();
235
- settings.onReposition.call(element);
236
- },
50
+ $module = $(this),
51
+ $window = $(window),
52
+ $scroll = [window, document].indexOf(settings.scrollContext) < 0 ? $document.find(settings.scrollContext) : $(settings.scrollContext),
53
+ $container,
54
+ $context,
237
55
 
238
- supports: {
239
- sticky: function() {
240
- var
241
- $element = $('<div/>')
242
- ;
243
- $element.addClass(className.supported);
244
- return($element.css('position').match('sticky'));
245
- }
246
- },
56
+ instance = $module.data(moduleNamespace),
247
57
 
248
- save: {
249
- lastScroll: function(scroll) {
250
- module.lastScroll = scroll;
251
- },
252
- elementScroll: function(scroll) {
253
- module.elementScroll = scroll;
254
- },
255
- positions: function() {
256
- var
257
- scrollContext = {
258
- height : $scroll.height()
259
- },
260
- element = {
261
- margin: {
262
- top : parseInt($module.css('margin-top'), 10),
263
- bottom : parseInt($module.css('margin-bottom'), 10),
264
- },
265
- offset : $module.offset(),
266
- width : $module.outerWidth(),
267
- height : $module.outerHeight()
268
- },
269
- context = {
270
- offset : $context.offset(),
271
- height : $context.outerHeight()
272
- }
58
+ element = this,
59
+
60
+ documentObserver,
61
+ observer,
62
+ module
273
63
  ;
274
- if( !module.is.standardScroll() ) {
275
- module.debug('Non-standard scroll. Removing scroll offset from element offset');
276
64
 
277
- scrollContext.top = $scroll.scrollTop();
278
- scrollContext.left = $scroll.scrollLeft();
65
+ module = {
279
66
 
280
- element.offset.top += scrollContext.top;
281
- context.offset.top += scrollContext.top;
282
- element.offset.left += scrollContext.left;
283
- context.offset.left += scrollContext.left;
284
- }
285
- module.cache = {
286
- fits : ( (element.height + settings.offset) <= scrollContext.height),
287
- sameHeight : (element.height == context.height),
288
- scrollContext : {
289
- height : scrollContext.height
290
- },
291
- element: {
292
- margin : element.margin,
293
- top : element.offset.top - element.margin.top,
294
- left : element.offset.left,
295
- width : element.width,
296
- height : element.height,
297
- bottom : element.offset.top + element.height
298
- },
299
- context: {
300
- top : context.offset.top,
301
- height : context.height,
302
- bottom : context.offset.top + context.height
303
- }
304
- };
305
- module.set.containerSize();
67
+ initialize: function () {
68
+ module.determineContainer();
69
+ module.determineContext();
70
+ module.verbose('Initializing sticky', settings, $container);
306
71
 
307
- module.stick();
308
- module.debug('Caching element positions', module.cache);
309
- }
310
- },
72
+ module.save.positions();
73
+ module.checkErrors();
74
+ module.bind.events();
311
75
 
312
- get: {
313
- direction: function(scroll) {
314
- var
315
- direction = 'down'
316
- ;
317
- scroll = scroll || $scroll.scrollTop();
318
- if(module.lastScroll && module.lastScroll > scroll) {
319
- direction = 'up';
320
- }
321
- return direction;
322
- },
323
- scrollChange: function(scroll) {
324
- scroll = scroll || $scroll.scrollTop();
325
- return (module.lastScroll)
326
- ? (scroll - module.lastScroll)
327
- : 0
328
- ;
329
- },
330
- currentElementScroll: function() {
331
- if(module.elementScroll) {
332
- return module.elementScroll;
333
- }
334
- return ( module.is.top() )
335
- ? Math.abs(parseInt($module.css('top'), 10)) || 0
336
- : Math.abs(parseInt($module.css('bottom'), 10)) || 0
337
- ;
338
- },
76
+ if (settings.observeChanges) {
77
+ module.observeChanges();
78
+ }
79
+ module.instantiate();
80
+ },
339
81
 
340
- elementScroll: function(scroll) {
341
- scroll = scroll || $scroll.scrollTop();
342
- var
343
- element = module.cache.element,
344
- scrollContext = module.cache.scrollContext,
345
- delta = module.get.scrollChange(scroll),
346
- maxScroll = (element.height - scrollContext.height + settings.offset),
347
- elementScroll = module.get.currentElementScroll(),
348
- possibleScroll = (elementScroll + delta)
349
- ;
350
- if(module.cache.fits || possibleScroll < 0) {
351
- elementScroll = 0;
352
- }
353
- else if(possibleScroll > maxScroll ) {
354
- elementScroll = maxScroll;
355
- }
356
- else {
357
- elementScroll = possibleScroll;
358
- }
359
- return elementScroll;
360
- }
361
- },
82
+ instantiate: function () {
83
+ module.verbose('Storing instance of module', module);
84
+ instance = module;
85
+ $module
86
+ .data(moduleNamespace, module)
87
+ ;
88
+ },
362
89
 
363
- remove: {
364
- lastScroll: function() {
365
- delete module.lastScroll;
366
- },
367
- elementScroll: function() {
368
- delete module.elementScroll;
369
- },
370
- minimumSize: function() {
371
- $container
372
- .css('min-height', '')
373
- ;
374
- },
375
- offset: function() {
376
- $module.css('margin-top', '');
377
- }
378
- },
90
+ destroy: function () {
91
+ module.verbose('Destroying previous instance');
92
+ module.reset();
93
+ if (documentObserver) {
94
+ documentObserver.disconnect();
95
+ }
96
+ if (observer) {
97
+ observer.disconnect();
98
+ }
99
+ $window
100
+ .off('load' + eventNamespace, module.event.load)
101
+ .off('resize' + eventNamespace, module.event.resize)
102
+ ;
103
+ $scroll
104
+ .off('scrollchange' + eventNamespace, module.event.scrollchange)
105
+ ;
106
+ $module.removeData(moduleNamespace);
107
+ },
379
108
 
380
- set: {
381
- offset: function() {
382
- module.verbose('Setting offset on element', settings.offset);
383
- $module
384
- .css('margin-top', settings.offset)
385
- ;
386
- },
387
- containerSize: function() {
388
- var
389
- tagName = $container[0].tagName
390
- ;
391
- if(tagName === 'HTML' || tagName === 'body') {
392
- // this can trigger for too many reasons
393
- //module.error(error.container, tagName, $module);
394
- module.determineContainer();
395
- }
396
- else {
397
- var tallestHeight = Math.max(module.cache.context.height, module.cache.element.height);
398
- if(tallestHeight - $container.outerHeight() > settings.jitter) {
399
- module.debug('Context is taller than container. Specifying exact height for container', module.cache.context.height);
400
- $container.css({
401
- height: tallestHeight,
402
- });
403
- }
404
- else {
405
- $container.css({
406
- height: '',
407
- });
408
- }
409
- if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {
410
- module.debug('Context has padding, specifying exact height for container', module.cache.context.height);
411
- $container.css({
412
- height: module.cache.context.height
413
- });
414
- }
415
- }
416
- },
417
- minimumSize: function() {
418
- var
419
- element = module.cache.element
420
- ;
421
- $container
422
- .css('min-height', element.height)
423
- ;
424
- },
425
- scroll: function(scroll) {
426
- module.debug('Setting scroll on element', scroll);
427
- if(module.elementScroll == scroll) {
428
- return;
429
- }
430
- if( module.is.top() ) {
431
- $module
432
- .css('bottom', '')
433
- .css('top', -scroll)
434
- ;
435
- }
436
- if( module.is.bottom() ) {
437
- $module
438
- .css('top', '')
439
- .css('bottom', scroll)
440
- ;
441
- }
442
- },
443
- size: function() {
444
- if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {
445
- element.style.setProperty('width', module.cache.element.width + 'px', 'important');
446
- element.style.setProperty('height', module.cache.element.height + 'px', 'important');
447
- }
448
- }
449
- },
109
+ observeChanges: function () {
110
+ if ('MutationObserver' in window) {
111
+ documentObserver = new MutationObserver(module.event.documentChanged);
112
+ observer = new MutationObserver(module.event.changed);
113
+ documentObserver.observe(document, {
114
+ childList: true,
115
+ subtree: true,
116
+ });
117
+ observer.observe(element, {
118
+ childList: true,
119
+ subtree: true,
120
+ });
121
+ observer.observe($context[0], {
122
+ childList: true,
123
+ subtree: true,
124
+ });
125
+ module.debug('Setting up mutation observer', observer);
126
+ }
127
+ },
450
128
 
451
- is: {
452
- standardScroll: function() {
453
- return ($scroll[0] == window);
454
- },
455
- top: function() {
456
- return $module.hasClass(className.top);
457
- },
458
- bottom: function() {
459
- return $module.hasClass(className.bottom);
460
- },
461
- initialPosition: function() {
462
- return (!module.is.fixed() && !module.is.bound());
463
- },
464
- hidden: function() {
465
- return (!$module.is(':visible'));
466
- },
467
- bound: function() {
468
- return $module.hasClass(className.bound);
469
- },
470
- fixed: function() {
471
- return $module.hasClass(className.fixed);
472
- }
473
- },
129
+ determineContainer: function () {
130
+ if (settings.container) {
131
+ $container = [window, document].indexOf(settings.container) < 0 ? $document.find(settings.container) : $(settings.container);
132
+ } else {
133
+ $container = $module.offsetParent();
134
+ }
135
+ },
474
136
 
475
- stick: function(scrollPosition) {
476
- var
477
- cachedPosition = scrollPosition || $scroll.scrollTop(),
478
- cache = module.cache,
479
- fits = cache.fits,
480
- sameHeight = cache.sameHeight,
481
- element = cache.element,
482
- scrollContext = cache.scrollContext,
483
- context = cache.context,
484
- offset = (module.is.bottom() && settings.pushing)
485
- ? settings.bottomOffset
486
- : settings.offset,
487
- scroll = {
488
- top : cachedPosition + offset,
489
- bottom : cachedPosition + offset + scrollContext.height
490
- },
491
- elementScroll = (fits)
492
- ? 0
493
- : module.get.elementScroll(scroll.top),
494
-
495
- // shorthand
496
- doesntFit = !fits,
497
- elementVisible = (element.height !== 0)
498
- ;
499
- if(elementVisible && !sameHeight) {
500
-
501
- if( module.is.initialPosition() ) {
502
- if(scroll.top >= context.bottom) {
503
- module.debug('Initial element position is bottom of container');
504
- module.bindBottom();
505
- }
506
- else if(scroll.top > element.top) {
507
- if( (element.height + scroll.top - elementScroll) >= context.bottom && element.height < context.height) {
508
- module.debug('Initial element position is bottom of container');
509
- module.bindBottom();
510
- }
511
- else {
512
- module.debug('Initial element position is fixed');
513
- module.fixTop();
514
- }
515
- }
137
+ determineContext: function () {
138
+ if (settings.context) {
139
+ $context = [window, document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $(settings.context);
140
+ } else {
141
+ $context = $container;
142
+ }
143
+ if ($context.length === 0) {
144
+ module.error(error.invalidContext, settings.context, $module);
145
+ }
146
+ },
516
147
 
517
- }
518
- else if( module.is.fixed() ) {
148
+ checkErrors: function () {
149
+ if (module.is.hidden()) {
150
+ module.error(error.visible, $module);
151
+ }
152
+ if (module.cache.element.height > module.cache.context.height) {
153
+ module.reset();
154
+ module.error(error.elementSize, $module);
155
+ }
156
+ },
519
157
 
520
- // currently fixed top
521
- if( module.is.top() ) {
522
- if( scroll.top <= element.top ) {
523
- module.debug('Fixed element reached top of container');
524
- module.setInitialPosition();
525
- }
526
- else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {
527
- module.debug('Fixed element reached bottom of container');
528
- module.bindBottom();
529
- }
530
- // scroll element if larger than screen
531
- else if(doesntFit) {
532
- module.set.scroll(elementScroll);
533
- module.save.lastScroll(scroll.top);
534
- module.save.elementScroll(elementScroll);
535
- }
536
- }
158
+ bind: {
159
+ events: function () {
160
+ $window
161
+ .on('load' + eventNamespace, module.event.load)
162
+ .on('resize' + eventNamespace, module.event.resize)
163
+ ;
164
+ // pub/sub pattern
165
+ $scroll
166
+ .off('scroll' + eventNamespace)
167
+ .on('scroll' + eventNamespace, module.event.scroll)
168
+ .on('scrollchange' + eventNamespace, module.event.scrollchange)
169
+ ;
170
+ },
171
+ },
537
172
 
538
- // currently fixed bottom
539
- else if(module.is.bottom() ) {
173
+ event: {
174
+ changed: function (mutations) {
175
+ clearTimeout(module.timer);
176
+ module.timer = setTimeout(function () {
177
+ module.verbose('DOM tree modified, updating sticky menu', mutations);
178
+ module.refresh();
179
+ }, 100);
180
+ },
181
+ documentChanged: function (mutations) {
182
+ [].forEach.call(mutations, function (mutation) {
183
+ if (mutation.removedNodes) {
184
+ [].forEach.call(mutation.removedNodes, function (node) {
185
+ if (node === element || $(node).find(element).length > 0) {
186
+ module.debug('Element removed from DOM, tearing down events');
187
+ module.destroy();
188
+ }
189
+ });
190
+ }
191
+ });
192
+ },
193
+ load: function () {
194
+ module.verbose('Page contents finished loading');
195
+ requestAnimationFrame(module.refresh);
196
+ },
197
+ resize: function () {
198
+ module.verbose('Window resized');
199
+ requestAnimationFrame(module.refresh);
200
+ },
201
+ scroll: function () {
202
+ requestAnimationFrame(function () {
203
+ $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop());
204
+ });
205
+ },
206
+ scrollchange: function (event, scrollPosition) {
207
+ module.stick(scrollPosition);
208
+ settings.onScroll.call(element);
209
+ },
210
+ },
540
211
 
541
- // top edge
542
- if( (scroll.bottom - element.height) <= element.top) {
543
- module.debug('Bottom fixed rail has reached top of container');
544
- module.setInitialPosition();
545
- }
546
- // bottom edge
547
- else if(scroll.bottom >= context.bottom) {
548
- module.debug('Bottom fixed rail has reached bottom of container');
549
- module.bindBottom();
550
- }
551
- // scroll element if larger than screen
552
- else if(doesntFit) {
553
- module.set.scroll(elementScroll);
554
- module.save.lastScroll(scroll.top);
555
- module.save.elementScroll(elementScroll);
556
- }
212
+ refresh: function (hardRefresh) {
213
+ module.reset();
214
+ if (!settings.context) {
215
+ module.determineContext();
216
+ }
217
+ if (hardRefresh) {
218
+ module.determineContainer();
219
+ }
220
+ module.save.positions();
221
+ module.stick();
222
+ settings.onReposition.call(element);
223
+ },
557
224
 
558
- }
559
- }
560
- else if( module.is.bottom() ) {
561
- if( scroll.top <= element.top ) {
562
- module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');
563
- module.setInitialPosition();
564
- }
565
- else {
566
- if(settings.pushing) {
567
- if(module.is.bound() && scroll.bottom <= context.bottom ) {
568
- module.debug('Fixing bottom attached element to bottom of browser.');
569
- module.fixBottom();
570
- }
225
+ supports: {
226
+ sticky: function () {
227
+ var
228
+ $element = $('<div/>')
229
+ ;
230
+ $element.addClass(className.supported);
231
+
232
+ return $element.css('position').match('sticky');
233
+ },
234
+ },
235
+
236
+ save: {
237
+ lastScroll: function (scroll) {
238
+ module.lastScroll = scroll;
239
+ },
240
+ elementScroll: function (scroll) {
241
+ module.elementScroll = scroll;
242
+ },
243
+ positions: function () {
244
+ var
245
+ scrollContext = {
246
+ height: $scroll.height(),
247
+ },
248
+ element = {
249
+ margin: {
250
+ top: parseInt($module.css('margin-top'), 10),
251
+ bottom: parseInt($module.css('margin-bottom'), 10),
252
+ },
253
+ offset: $module.offset(),
254
+ width: $module.outerWidth(),
255
+ height: $module.outerHeight(),
256
+ },
257
+ context = {
258
+ offset: $context.offset(),
259
+ height: $context.outerHeight(),
260
+ }
261
+ ;
262
+ if (!module.is.standardScroll()) {
263
+ module.debug('Non-standard scroll. Removing scroll offset from element offset');
264
+
265
+ scrollContext.top = $scroll.scrollTop();
266
+ scrollContext.left = $scroll.scrollLeft();
267
+
268
+ element.offset.top += scrollContext.top;
269
+ context.offset.top += scrollContext.top;
270
+ element.offset.left += scrollContext.left;
271
+ context.offset.left += scrollContext.left;
272
+ }
273
+ module.cache = {
274
+ fits: (element.height + settings.offset) <= scrollContext.height,
275
+ sameHeight: element.height === context.height,
276
+ scrollContext: {
277
+ height: scrollContext.height,
278
+ },
279
+ element: {
280
+ margin: element.margin,
281
+ top: element.offset.top - element.margin.top,
282
+ left: element.offset.left,
283
+ width: element.width,
284
+ height: element.height,
285
+ bottom: element.offset.top + element.height,
286
+ },
287
+ context: {
288
+ top: context.offset.top,
289
+ height: context.height,
290
+ bottom: context.offset.top + context.height,
291
+ },
292
+ };
293
+ module.set.containerSize();
294
+
295
+ module.stick();
296
+ module.debug('Caching element positions', module.cache);
297
+ },
298
+ },
299
+
300
+ get: {
301
+ direction: function (scroll) {
302
+ var
303
+ direction = 'down'
304
+ ;
305
+ scroll = scroll || $scroll.scrollTop();
306
+ if (module.lastScroll && module.lastScroll > scroll) {
307
+ direction = 'up';
308
+ }
309
+
310
+ return direction;
311
+ },
312
+ scrollChange: function (scroll) {
313
+ scroll = scroll || $scroll.scrollTop();
314
+
315
+ return module.lastScroll
316
+ ? scroll - module.lastScroll
317
+ : 0;
318
+ },
319
+ currentElementScroll: function () {
320
+ if (module.elementScroll) {
321
+ return module.elementScroll;
322
+ }
323
+
324
+ return module.is.top()
325
+ ? Math.abs(parseInt($module.css('top'), 10)) || 0
326
+ : Math.abs(parseInt($module.css('bottom'), 10)) || 0;
327
+ },
328
+
329
+ elementScroll: function (scroll) {
330
+ scroll = scroll || $scroll.scrollTop();
331
+ var
332
+ element = module.cache.element,
333
+ scrollContext = module.cache.scrollContext,
334
+ delta = module.get.scrollChange(scroll),
335
+ maxScroll = element.height - scrollContext.height + settings.offset,
336
+ elementScroll = module.get.currentElementScroll(),
337
+ possibleScroll = elementScroll + delta
338
+ ;
339
+ if (module.cache.fits || possibleScroll < 0) {
340
+ elementScroll = 0;
341
+ } else if (possibleScroll > maxScroll) {
342
+ elementScroll = maxScroll;
343
+ } else {
344
+ elementScroll = possibleScroll;
345
+ }
346
+
347
+ return elementScroll;
348
+ },
349
+ },
350
+
351
+ remove: {
352
+ lastScroll: function () {
353
+ delete module.lastScroll;
354
+ },
355
+ elementScroll: function () {
356
+ delete module.elementScroll;
357
+ },
358
+ minimumSize: function () {
359
+ $container
360
+ .css('min-height', '')
361
+ ;
362
+ },
363
+ offset: function () {
364
+ $module.css('margin-top', '');
365
+ },
366
+ },
367
+
368
+ set: {
369
+ offset: function () {
370
+ module.verbose('Setting offset on element', settings.offset);
371
+ $module
372
+ .css('margin-top', settings.offset)
373
+ ;
374
+ },
375
+ containerSize: function () {
376
+ var
377
+ tagName = $container[0].tagName
378
+ ;
379
+ if (tagName === 'HTML' || tagName === 'body') {
380
+ // this can trigger for too many reasons
381
+ // module.error(error.container, tagName, $module);
382
+ module.determineContainer();
383
+ } else {
384
+ var tallestHeight = Math.max(module.cache.context.height, module.cache.element.height);
385
+ if (tallestHeight - $container.outerHeight() > settings.jitter) {
386
+ module.debug('Context is taller than container. Specifying exact height for container', module.cache.context.height);
387
+ $container.css({
388
+ height: tallestHeight,
389
+ });
390
+ } else {
391
+ $container.css({
392
+ height: '',
393
+ });
394
+ }
395
+ if (Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {
396
+ module.debug('Context has padding, specifying exact height for container', module.cache.context.height);
397
+ $container.css({
398
+ height: module.cache.context.height,
399
+ });
400
+ }
401
+ }
402
+ },
403
+ minimumSize: function () {
404
+ var
405
+ element = module.cache.element
406
+ ;
407
+ $container
408
+ .css('min-height', element.height)
409
+ ;
410
+ },
411
+ scroll: function (scroll) {
412
+ module.debug('Setting scroll on element', scroll);
413
+ if (module.elementScroll === scroll) {
414
+ return;
415
+ }
416
+ if (module.is.top()) {
417
+ $module
418
+ .css('bottom', '')
419
+ .css('top', -scroll + 'px')
420
+ ;
421
+ }
422
+ if (module.is.bottom()) {
423
+ $module
424
+ .css('top', '')
425
+ .css('bottom', scroll + 'px')
426
+ ;
427
+ }
428
+ },
429
+ size: function () {
430
+ if (module.cache.element.height !== 0 && module.cache.element.width !== 0) {
431
+ element.style.setProperty('width', module.cache.element.width + 'px', 'important');
432
+ element.style.setProperty('height', module.cache.element.height + 'px', 'important');
433
+ }
434
+ },
435
+ },
436
+
437
+ is: {
438
+ standardScroll: function () {
439
+ return $scroll[0] === window;
440
+ },
441
+ top: function () {
442
+ return $module.hasClass(className.top);
443
+ },
444
+ bottom: function () {
445
+ return $module.hasClass(className.bottom);
446
+ },
447
+ initialPosition: function () {
448
+ return !module.is.fixed() && !module.is.bound();
449
+ },
450
+ hidden: function () {
451
+ return !$module.is(':visible');
452
+ },
453
+ bound: function () {
454
+ return $module.hasClass(className.bound);
455
+ },
456
+ fixed: function () {
457
+ return $module.hasClass(className.fixed);
458
+ },
459
+ },
460
+
461
+ stick: function (scrollPosition) {
462
+ var
463
+ cachedPosition = scrollPosition || $scroll.scrollTop(),
464
+ cache = module.cache,
465
+ fits = cache.fits,
466
+ sameHeight = cache.sameHeight,
467
+ element = cache.element,
468
+ scrollContext = cache.scrollContext,
469
+ context = cache.context,
470
+ offset = module.is.bottom() && settings.pushing
471
+ ? settings.bottomOffset
472
+ : settings.offset,
473
+ scroll = {
474
+ top: cachedPosition + offset,
475
+ bottom: cachedPosition + offset + scrollContext.height,
476
+ },
477
+ elementScroll = fits
478
+ ? 0
479
+ : module.get.elementScroll(scroll.top),
480
+
481
+ // shorthand
482
+ doesntFit = !fits,
483
+ elementVisible = element.height !== 0
484
+ ;
485
+ if (elementVisible && !sameHeight) {
486
+ if (module.is.initialPosition()) {
487
+ if (scroll.top >= context.bottom) {
488
+ module.debug('Initial element position is bottom of container');
489
+ module.bindBottom();
490
+ } else if (scroll.top > element.top) {
491
+ if ((element.height + scroll.top - elementScroll) >= context.bottom && element.height < context.height) {
492
+ module.debug('Initial element position is bottom of container');
493
+ module.bindBottom();
494
+ } else {
495
+ module.debug('Initial element position is fixed');
496
+ module.fixTop();
497
+ }
498
+ }
499
+ } else if (module.is.fixed()) {
500
+ if (module.is.top()) {
501
+ if (scroll.top <= element.top) {
502
+ module.debug('Fixed element reached top of container');
503
+ module.setInitialPosition();
504
+ } else if ((element.height + scroll.top - elementScroll) >= context.bottom) {
505
+ module.debug('Fixed element reached bottom of container');
506
+ module.bindBottom();
507
+ } else if (doesntFit) { // scroll element if larger than screen
508
+ module.set.scroll(elementScroll);
509
+ module.save.lastScroll(scroll.top);
510
+ module.save.elementScroll(elementScroll);
511
+ }
512
+ } else if (module.is.bottom()) {
513
+ if ((scroll.bottom - element.height) <= element.top) { // top edge
514
+ module.debug('Bottom fixed rail has reached top of container');
515
+ module.setInitialPosition();
516
+ } else if (scroll.bottom >= context.bottom) { // bottom edge
517
+ module.debug('Bottom fixed rail has reached bottom of container');
518
+ module.bindBottom();
519
+ } else if (doesntFit) { // scroll element if larger than screen
520
+ module.set.scroll(elementScroll);
521
+ module.save.lastScroll(scroll.top);
522
+ module.save.elementScroll(elementScroll);
523
+ }
524
+ }
525
+ } else if (module.is.bottom()) {
526
+ if (scroll.top <= element.top) {
527
+ module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');
528
+ module.setInitialPosition();
529
+ } else {
530
+ if (settings.pushing) {
531
+ if (module.is.bound() && scroll.bottom <= context.bottom) {
532
+ module.debug('Fixing bottom attached element to bottom of browser.');
533
+ module.fixBottom();
534
+ }
535
+ } else {
536
+ if (module.is.bound() && (scroll.top <= context.bottom - element.height)) {
537
+ module.debug('Fixing bottom attached element to top of browser.');
538
+ module.fixTop();
539
+ }
540
+ }
541
+ }
542
+ }
543
+ }
544
+ },
545
+
546
+ bindTop: function () {
547
+ module.debug('Binding element to top of parent container');
548
+ module.remove.offset();
549
+ if (settings.setSize) {
550
+ module.set.size();
551
+ }
552
+ $module
553
+ .css({
554
+ left: '',
555
+ top: '',
556
+ marginBottom: '',
557
+ })
558
+ .removeClass(className.fixed)
559
+ .removeClass(className.bottom)
560
+ .addClass(className.bound)
561
+ .addClass(className.top)
562
+ ;
563
+ settings.onTop.call(element);
564
+ settings.onUnstick.call(element);
565
+ },
566
+ bindBottom: function () {
567
+ module.debug('Binding element to bottom of parent container');
568
+ module.remove.offset();
569
+ if (settings.setSize) {
570
+ module.set.size();
571
+ }
572
+ $module
573
+ .css({
574
+ left: '',
575
+ top: '',
576
+ })
577
+ .removeClass(className.fixed)
578
+ .removeClass(className.top)
579
+ .addClass(className.bound)
580
+ .addClass(className.bottom)
581
+ ;
582
+ settings.onBottom.call(element);
583
+ settings.onUnstick.call(element);
584
+ },
585
+
586
+ setInitialPosition: function () {
587
+ module.debug('Returning to initial position');
588
+ module.unfix();
589
+ module.unbind();
590
+ },
591
+
592
+ fixTop: function () {
593
+ module.debug('Fixing element to top of page');
594
+ if (settings.setSize) {
595
+ module.set.size();
596
+ }
597
+ module.set.minimumSize();
598
+ module.set.offset();
599
+ $module
600
+ .css({
601
+ left: module.cache.element.left,
602
+ bottom: '',
603
+ marginBottom: '',
604
+ })
605
+ .removeClass(className.bound)
606
+ .removeClass(className.bottom)
607
+ .addClass(className.fixed)
608
+ .addClass(className.top)
609
+ ;
610
+ settings.onStick.call(element);
611
+ },
612
+
613
+ fixBottom: function () {
614
+ module.debug('Sticking element to bottom of page');
615
+ if (settings.setSize) {
616
+ module.set.size();
617
+ }
618
+ module.set.minimumSize();
619
+ module.set.offset();
620
+ $module
621
+ .css({
622
+ left: module.cache.element.left,
623
+ bottom: '',
624
+ marginBottom: '',
625
+ })
626
+ .removeClass(className.bound)
627
+ .removeClass(className.top)
628
+ .addClass(className.fixed)
629
+ .addClass(className.bottom)
630
+ ;
631
+ settings.onStick.call(element);
632
+ },
633
+
634
+ unbind: function () {
635
+ if (module.is.bound()) {
636
+ module.debug('Removing container bound position on element');
637
+ module.remove.offset();
638
+ $module
639
+ .removeClass(className.bound)
640
+ .removeClass(className.top)
641
+ .removeClass(className.bottom)
642
+ ;
643
+ }
644
+ },
645
+
646
+ unfix: function () {
647
+ if (module.is.fixed()) {
648
+ module.debug('Removing fixed position on element');
649
+ module.remove.minimumSize();
650
+ module.remove.offset();
651
+ $module
652
+ .removeClass(className.fixed)
653
+ .removeClass(className.top)
654
+ .removeClass(className.bottom)
655
+ ;
656
+ settings.onUnstick.call(element);
657
+ }
658
+ },
659
+
660
+ reset: function () {
661
+ module.debug('Resetting elements position');
662
+ module.unbind();
663
+ module.unfix();
664
+ module.resetCSS();
665
+ module.remove.offset();
666
+ module.remove.lastScroll();
667
+ },
668
+
669
+ resetCSS: function () {
670
+ $module
671
+ .css({
672
+ width: '',
673
+ height: '',
674
+ })
675
+ ;
676
+ $container
677
+ .css({
678
+ height: '',
679
+ })
680
+ ;
681
+ },
682
+
683
+ setting: function (name, value) {
684
+ if ($.isPlainObject(name)) {
685
+ $.extend(true, settings, name);
686
+ } else if (value !== undefined) {
687
+ settings[name] = value;
688
+ } else {
689
+ return settings[name];
690
+ }
691
+ },
692
+ internal: function (name, value) {
693
+ if ($.isPlainObject(name)) {
694
+ $.extend(true, module, name);
695
+ } else if (value !== undefined) {
696
+ module[name] = value;
697
+ } else {
698
+ return module[name];
699
+ }
700
+ },
701
+ debug: function () {
702
+ if (!settings.silent && settings.debug) {
703
+ if (settings.performance) {
704
+ module.performance.log(arguments);
705
+ } else {
706
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
707
+ module.debug.apply(console, arguments);
708
+ }
709
+ }
710
+ },
711
+ verbose: function () {
712
+ if (!settings.silent && settings.verbose && settings.debug) {
713
+ if (settings.performance) {
714
+ module.performance.log(arguments);
715
+ } else {
716
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
717
+ module.verbose.apply(console, arguments);
718
+ }
719
+ }
720
+ },
721
+ error: function () {
722
+ if (!settings.silent) {
723
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
724
+ module.error.apply(console, arguments);
725
+ }
726
+ },
727
+ performance: {
728
+ log: function (message) {
729
+ var
730
+ currentTime,
731
+ executionTime,
732
+ previousTime
733
+ ;
734
+ if (settings.performance) {
735
+ currentTime = Date.now();
736
+ previousTime = time || currentTime;
737
+ executionTime = currentTime - previousTime;
738
+ time = currentTime;
739
+ performance.push({
740
+ Name: message[0],
741
+ Arguments: [].slice.call(message, 1) || '',
742
+ Element: element,
743
+ 'Execution Time': executionTime,
744
+ });
745
+ }
746
+ clearTimeout(module.performance.timer);
747
+ module.performance.timer = setTimeout(module.performance.display, 0);
748
+ },
749
+ display: function () {
750
+ var
751
+ title = settings.name + ':',
752
+ totalTime = 0
753
+ ;
754
+ time = false;
755
+ clearTimeout(module.performance.timer);
756
+ $.each(performance, function (index, data) {
757
+ totalTime += data['Execution Time'];
758
+ });
759
+ title += ' ' + totalTime + 'ms';
760
+ if (moduleSelector) {
761
+ title += ' \'' + moduleSelector + '\'';
762
+ }
763
+ if (performance.length > 0) {
764
+ console.groupCollapsed(title);
765
+ if (console.table) {
766
+ console.table(performance);
767
+ } else {
768
+ $.each(performance, function (index, data) {
769
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
770
+ });
771
+ }
772
+ console.groupEnd();
773
+ }
774
+ performance = [];
775
+ },
776
+ },
777
+ invoke: function (query, passedArguments, context) {
778
+ var
779
+ object = instance,
780
+ maxDepth,
781
+ found,
782
+ response
783
+ ;
784
+ passedArguments = passedArguments || queryArguments;
785
+ context = context || element;
786
+ if (typeof query === 'string' && object !== undefined) {
787
+ query = query.split(/[ .]/);
788
+ maxDepth = query.length - 1;
789
+ $.each(query, function (depth, value) {
790
+ var camelCaseValue = depth !== maxDepth
791
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
792
+ : query
793
+ ;
794
+ if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
795
+ object = object[camelCaseValue];
796
+ } else if (object[camelCaseValue] !== undefined) {
797
+ found = object[camelCaseValue];
798
+
799
+ return false;
800
+ } else if ($.isPlainObject(object[value]) && (depth !== maxDepth)) {
801
+ object = object[value];
802
+ } else if (object[value] !== undefined) {
803
+ found = object[value];
804
+
805
+ return false;
806
+ } else {
807
+ return false;
808
+ }
809
+ });
810
+ }
811
+ if (isFunction(found)) {
812
+ response = found.apply(context, passedArguments);
813
+ } else if (found !== undefined) {
814
+ response = found;
815
+ }
816
+ if (Array.isArray(returnedValue)) {
817
+ returnedValue.push(response);
818
+ } else if (returnedValue !== undefined) {
819
+ returnedValue = [returnedValue, response];
820
+ } else if (response !== undefined) {
821
+ returnedValue = response;
822
+ }
823
+
824
+ return found;
825
+ },
826
+ };
827
+
828
+ if (methodInvoked) {
829
+ if (instance === undefined) {
830
+ module.initialize();
571
831
  }
572
- else {
573
- if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {
574
- module.debug('Fixing bottom attached element to top of browser.');
575
- module.fixTop();
576
- }
832
+ module.invoke(query);
833
+ } else {
834
+ if (instance !== undefined) {
835
+ instance.invoke('destroy');
577
836
  }
578
- }
837
+ module.initialize();
579
838
  }
580
- }
581
- },
839
+ });
582
840
 
583
- bindTop: function() {
584
- module.debug('Binding element to top of parent container');
585
- module.remove.offset();
586
- if(settings.setSize) {
587
- module.set.size();
588
- }
589
- $module
590
- .css({
591
- left : '',
592
- top : '',
593
- marginBottom : ''
594
- })
595
- .removeClass(className.fixed)
596
- .removeClass(className.bottom)
597
- .addClass(className.bound)
598
- .addClass(className.top)
599
- ;
600
- settings.onTop.call(element);
601
- settings.onUnstick.call(element);
602
- },
603
- bindBottom: function() {
604
- module.debug('Binding element to bottom of parent container');
605
- module.remove.offset();
606
- if(settings.setSize) {
607
- module.set.size();
608
- }
609
- $module
610
- .css({
611
- left : '',
612
- top : ''
613
- })
614
- .removeClass(className.fixed)
615
- .removeClass(className.top)
616
- .addClass(className.bound)
617
- .addClass(className.bottom)
618
- ;
619
- settings.onBottom.call(element);
620
- settings.onUnstick.call(element);
621
- },
841
+ return returnedValue !== undefined
842
+ ? returnedValue
843
+ : this;
844
+ };
622
845
 
623
- setInitialPosition: function() {
624
- module.debug('Returning to initial position');
625
- module.unfix();
626
- module.unbind();
627
- },
846
+ $.fn.sticky.settings = {
628
847
 
848
+ name: 'Sticky',
849
+ namespace: 'sticky',
629
850
 
630
- fixTop: function() {
631
- module.debug('Fixing element to top of page');
632
- if(settings.setSize) {
633
- module.set.size();
634
- }
635
- module.set.minimumSize();
636
- module.set.offset();
637
- $module
638
- .css({
639
- left : module.cache.element.left,
640
- bottom : '',
641
- marginBottom : ''
642
- })
643
- .removeClass(className.bound)
644
- .removeClass(className.bottom)
645
- .addClass(className.fixed)
646
- .addClass(className.top)
647
- ;
648
- settings.onStick.call(element);
649
- },
851
+ silent: false,
852
+ debug: false,
853
+ verbose: true,
854
+ performance: true,
650
855
 
651
- fixBottom: function() {
652
- module.debug('Sticking element to bottom of page');
653
- if(settings.setSize) {
654
- module.set.size();
655
- }
656
- module.set.minimumSize();
657
- module.set.offset();
658
- $module
659
- .css({
660
- left : module.cache.element.left,
661
- bottom : '',
662
- marginBottom : ''
663
- })
664
- .removeClass(className.bound)
665
- .removeClass(className.top)
666
- .addClass(className.fixed)
667
- .addClass(className.bottom)
668
- ;
669
- settings.onStick.call(element);
670
- },
856
+ // whether to stick in the opposite direction on scroll up
857
+ pushing: false,
671
858
 
672
- unbind: function() {
673
- if( module.is.bound() ) {
674
- module.debug('Removing container bound position on element');
675
- module.remove.offset();
676
- $module
677
- .removeClass(className.bound)
678
- .removeClass(className.top)
679
- .removeClass(className.bottom)
680
- ;
681
- }
682
- },
859
+ context: false,
860
+ container: false,
683
861
 
684
- unfix: function() {
685
- if( module.is.fixed() ) {
686
- module.debug('Removing fixed position on element');
687
- module.remove.minimumSize();
688
- module.remove.offset();
689
- $module
690
- .removeClass(className.fixed)
691
- .removeClass(className.top)
692
- .removeClass(className.bottom)
693
- ;
694
- settings.onUnstick.call(element);
695
- }
696
- },
862
+ // Context to watch scroll events
863
+ scrollContext: window,
697
864
 
698
- reset: function() {
699
- module.debug('Resetting elements position');
700
- module.unbind();
701
- module.unfix();
702
- module.resetCSS();
703
- module.remove.offset();
704
- module.remove.lastScroll();
705
- },
865
+ // Offset to adjust scroll
866
+ offset: 0,
706
867
 
707
- resetCSS: function() {
708
- $module
709
- .css({
710
- width : '',
711
- height : ''
712
- })
713
- ;
714
- $container
715
- .css({
716
- height: ''
717
- })
718
- ;
719
- },
868
+ // Offset to adjust scroll when attached to bottom of screen
869
+ bottomOffset: 0,
720
870
 
721
- setting: function(name, value) {
722
- if( $.isPlainObject(name) ) {
723
- $.extend(true, settings, name);
724
- }
725
- else if(value !== undefined) {
726
- settings[name] = value;
727
- }
728
- else {
729
- return settings[name];
730
- }
731
- },
732
- internal: function(name, value) {
733
- if( $.isPlainObject(name) ) {
734
- $.extend(true, module, name);
735
- }
736
- else if(value !== undefined) {
737
- module[name] = value;
738
- }
739
- else {
740
- return module[name];
741
- }
742
- },
743
- debug: function() {
744
- if(!settings.silent && settings.debug) {
745
- if(settings.performance) {
746
- module.performance.log(arguments);
747
- }
748
- else {
749
- module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
750
- module.debug.apply(console, arguments);
751
- }
752
- }
753
- },
754
- verbose: function() {
755
- if(!settings.silent && settings.verbose && settings.debug) {
756
- if(settings.performance) {
757
- module.performance.log(arguments);
758
- }
759
- else {
760
- module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
761
- module.verbose.apply(console, arguments);
762
- }
763
- }
764
- },
765
- error: function() {
766
- if(!settings.silent) {
767
- module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
768
- module.error.apply(console, arguments);
769
- }
871
+ // will only set container height if difference between context and container is larger than this number
872
+ jitter: 5,
873
+
874
+ // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)
875
+ setSize: true,
876
+
877
+ // Whether to automatically observe changes with Mutation Observers
878
+ observeChanges: false,
879
+
880
+ // Called when position is recalculated
881
+ onReposition: function () {},
882
+
883
+ // Called on each scroll
884
+ onScroll: function () {},
885
+
886
+ // Called when element is stuck to viewport
887
+ onStick: function () {},
888
+
889
+ // Called when element is unstuck from viewport
890
+ onUnstick: function () {},
891
+
892
+ // Called when element reaches top of context
893
+ onTop: function () {},
894
+
895
+ // Called when element reaches bottom of context
896
+ onBottom: function () {},
897
+
898
+ error: {
899
+ container: 'Sticky element must be inside a relative container',
900
+ visible: 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to suppress this warning in production.',
901
+ method: 'The method you called is not defined.',
902
+ invalidContext: 'Context specified does not exist',
903
+ elementSize: 'Sticky element is larger than its container, cannot create sticky.',
770
904
  },
771
- performance: {
772
- log: function(message) {
773
- var
774
- currentTime,
775
- executionTime,
776
- previousTime
777
- ;
778
- if(settings.performance) {
779
- currentTime = new Date().getTime();
780
- previousTime = time || currentTime;
781
- executionTime = currentTime - previousTime;
782
- time = currentTime;
783
- performance.push({
784
- 'Name' : message[0],
785
- 'Arguments' : [].slice.call(message, 1) || '',
786
- 'Element' : element,
787
- 'Execution Time' : executionTime
788
- });
789
- }
790
- clearTimeout(module.performance.timer);
791
- module.performance.timer = setTimeout(module.performance.display, 0);
792
- },
793
- display: function() {
794
- var
795
- title = settings.name + ':',
796
- totalTime = 0
797
- ;
798
- time = false;
799
- clearTimeout(module.performance.timer);
800
- $.each(performance, function(index, data) {
801
- totalTime += data['Execution Time'];
802
- });
803
- title += ' ' + totalTime + 'ms';
804
- if(moduleSelector) {
805
- title += ' \'' + moduleSelector + '\'';
806
- }
807
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
808
- console.groupCollapsed(title);
809
- if(console.table) {
810
- console.table(performance);
811
- }
812
- else {
813
- $.each(performance, function(index, data) {
814
- console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
815
- });
816
- }
817
- console.groupEnd();
818
- }
819
- performance = [];
820
- }
905
+
906
+ className: {
907
+ bound: 'bound',
908
+ fixed: 'fixed',
909
+ supported: 'native',
910
+ top: 'top',
911
+ bottom: 'bottom',
821
912
  },
822
- invoke: function(query, passedArguments, context) {
823
- var
824
- object = instance,
825
- maxDepth,
826
- found,
827
- response
828
- ;
829
- passedArguments = passedArguments || queryArguments;
830
- context = context || element;
831
- if(typeof query == 'string' && object !== undefined) {
832
- query = query.split(/[\. ]/);
833
- maxDepth = query.length - 1;
834
- $.each(query, function(depth, value) {
835
- var camelCaseValue = (depth != maxDepth)
836
- ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
837
- : query
838
- ;
839
- if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
840
- object = object[camelCaseValue];
841
- }
842
- else if( object[camelCaseValue] !== undefined ) {
843
- found = object[camelCaseValue];
844
- return false;
845
- }
846
- else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
847
- object = object[value];
848
- }
849
- else if( object[value] !== undefined ) {
850
- found = object[value];
851
- return false;
852
- }
853
- else {
854
- return false;
855
- }
856
- });
857
- }
858
- if ( $.isFunction( found ) ) {
859
- response = found.apply(context, passedArguments);
860
- }
861
- else if(found !== undefined) {
862
- response = found;
863
- }
864
- if(Array.isArray(returnedValue)) {
865
- returnedValue.push(response);
866
- }
867
- else if(returnedValue !== undefined) {
868
- returnedValue = [returnedValue, response];
869
- }
870
- else if(response !== undefined) {
871
- returnedValue = response;
872
- }
873
- return found;
874
- }
875
- };
876
-
877
- if(methodInvoked) {
878
- if(instance === undefined) {
879
- module.initialize();
880
- }
881
- module.invoke(query);
882
- }
883
- else {
884
- if(instance !== undefined) {
885
- instance.invoke('destroy');
886
- }
887
- module.initialize();
888
- }
889
- })
890
- ;
891
-
892
- return (returnedValue !== undefined)
893
- ? returnedValue
894
- : this
895
- ;
896
- };
897
-
898
- $.fn.sticky.settings = {
899
-
900
- name : 'Sticky',
901
- namespace : 'sticky',
902
-
903
- silent : false,
904
- debug : false,
905
- verbose : true,
906
- performance : true,
907
-
908
- // whether to stick in the opposite direction on scroll up
909
- pushing : false,
910
-
911
- context : false,
912
- container : false,
913
-
914
- // Context to watch scroll events
915
- scrollContext : window,
916
-
917
- // Offset to adjust scroll
918
- offset : 0,
919
-
920
- // Offset to adjust scroll when attached to bottom of screen
921
- bottomOffset : 0,
922
-
923
- // will only set container height if difference between context and container is larger than this number
924
- jitter : 5,
925
-
926
- // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)
927
- setSize : true,
928
-
929
- // Whether to automatically observe changes with Mutation Observers
930
- observeChanges : false,
931
-
932
- // Called when position is recalculated
933
- onReposition : function(){},
934
-
935
- // Called on each scroll
936
- onScroll : function(){},
937
-
938
- // Called when element is stuck to viewport
939
- onStick : function(){},
940
-
941
- // Called when element is unstuck from viewport
942
- onUnstick : function(){},
943
-
944
- // Called when element reaches top of context
945
- onTop : function(){},
946
-
947
- // Called when element reaches bottom of context
948
- onBottom : function(){},
949
-
950
- error : {
951
- container : 'Sticky element must be inside a relative container',
952
- visible : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to suppress this warning in production.',
953
- method : 'The method you called is not defined.',
954
- invalidContext : 'Context specified does not exist',
955
- elementSize : 'Sticky element is larger than its container, cannot create sticky.'
956
- },
957
-
958
- className : {
959
- bound : 'bound',
960
- fixed : 'fixed',
961
- supported : 'native',
962
- top : 'top',
963
- bottom : 'bottom'
964
- }
965
-
966
- };
967
-
968
- })( jQuery, window, document );
913
+
914
+ };
915
+ })(jQuery, window, document);