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
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.9.1-beta.3+4b673d8 - Sticky
2
+ * # Fomantic-UI 2.9.1-beta.31+0b65a82 - Sticky
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -8,961 +8,908 @@
8
8
  *
9
9
  */
10
10
 
11
- ;(function ($, window, document, undefined) {
11
+ (function ($, window, document) {
12
+ 'use strict';
12
13
 
13
- 'use strict';
14
+ function isFunction(obj) {
15
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
16
+ }
14
17
 
15
- $.isFunction = $.isFunction || function(obj) {
16
- return typeof obj === "function" && typeof obj.nodeType !== "number";
17
- };
18
+ window = window !== undefined && window.Math === Math
19
+ ? window
20
+ : globalThis;
18
21
 
19
- window = (typeof window != 'undefined' && window.Math == Math)
20
- ? window
21
- : (typeof self != 'undefined' && self.Math == Math)
22
- ? self
23
- : Function('return this')()
24
- ;
22
+ $.fn.sticky = function (parameters) {
23
+ var
24
+ $allModules = $(this),
25
+ $document = $(document),
26
+ moduleSelector = $allModules.selector || '',
25
27
 
26
- $.fn.sticky = function(parameters) {
27
- var
28
- $allModules = $(this),
29
- moduleSelector = $allModules.selector || '',
28
+ time = Date.now(),
29
+ performance = [],
30
30
 
31
- time = new Date().getTime(),
32
- performance = [],
31
+ query = arguments[0],
32
+ methodInvoked = typeof query === 'string',
33
+ queryArguments = [].slice.call(arguments, 1),
34
+ returnedValue
35
+ ;
33
36
 
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),
37
+ $allModules.each(function () {
38
+ var
39
+ settings = $.isPlainObject(parameters)
40
+ ? $.extend(true, {}, $.fn.sticky.settings, parameters)
41
+ : $.extend({}, $.fn.sticky.settings),
46
42
 
47
- className = settings.className,
48
- namespace = settings.namespace,
49
- error = settings.error,
43
+ className = settings.className,
44
+ namespace = settings.namespace,
45
+ error = settings.error,
50
46
 
51
- eventNamespace = '.' + namespace,
52
- moduleNamespace = 'module-' + namespace,
47
+ eventNamespace = '.' + namespace,
48
+ moduleNamespace = 'module-' + namespace,
53
49
 
54
- $module = $(this),
55
- $window = $(window),
56
- $scroll = [window,document].indexOf(settings.scrollContext) < 0 ? $(document).find(settings.scrollContext) : $(settings.scrollContext),
57
- $container,
58
- $context,
50
+ $module = $(this),
51
+ $window = $(window),
52
+ $scroll = [window, document].indexOf(settings.scrollContext) < 0 ? $document.find(settings.scrollContext) : $(settings.scrollContext),
53
+ $container,
54
+ $context,
59
55
 
60
- instance = $module.data(moduleNamespace),
56
+ instance = $module.data(moduleNamespace),
61
57
 
62
- requestAnimationFrame = window.requestAnimationFrame
63
- || window.mozRequestAnimationFrame
64
- || window.webkitRequestAnimationFrame
65
- || window.msRequestAnimationFrame
66
- || function(callback) { setTimeout(callback, 0); },
58
+ element = this,
67
59
 
68
- element = this,
60
+ documentObserver,
61
+ observer,
62
+ module
63
+ ;
69
64
 
70
- documentObserver,
71
- observer,
72
- module
73
- ;
65
+ module = {
74
66
 
75
- module = {
67
+ initialize: function () {
68
+ module.determineContainer();
69
+ module.determineContext();
70
+ module.verbose('Initializing sticky', settings, $container);
76
71
 
77
- initialize: function() {
72
+ module.save.positions();
73
+ module.checkErrors();
74
+ module.bind.events();
78
75
 
79
- module.determineContainer();
80
- module.determineContext();
81
- module.verbose('Initializing sticky', settings, $container);
76
+ if (settings.observeChanges) {
77
+ module.observeChanges();
78
+ }
79
+ module.instantiate();
80
+ },
82
81
 
83
- module.save.positions();
84
- module.checkErrors();
85
- module.bind.events();
82
+ instantiate: function () {
83
+ module.verbose('Storing instance of module', module);
84
+ instance = module;
85
+ $module
86
+ .data(moduleNamespace, module)
87
+ ;
88
+ },
86
89
 
87
- if(settings.observeChanges) {
88
- module.observeChanges();
89
- }
90
- module.instantiate();
91
- },
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
+ },
92
108
 
93
- instantiate: function() {
94
- module.verbose('Storing instance of module', module);
95
- instance = module;
96
- $module
97
- .data(moduleNamespace, module)
98
- ;
99
- },
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
+ },
100
128
 
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
- },
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
+ },
119
136
 
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
- },
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
+ },
139
147
 
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
- },
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
+ },
148
157
 
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
- },
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
+ },
160
172
 
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
- },
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
+ },
170
211
 
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
- },
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
+ },
185
224
 
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
- },
225
+ supports: {
226
+ sticky: function () {
227
+ var
228
+ $element = $('<div/>')
229
+ ;
230
+ $element.addClass(className.supported);
224
231
 
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
- },
232
+ return $element.css('position').match('sticky');
233
+ },
234
+ },
237
235
 
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
- },
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
+ },
247
299
 
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
- }
273
- ;
274
- if( !module.is.standardScroll() ) {
275
- module.debug('Non-standard scroll. Removing scroll offset from element offset');
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
+ },
276
350
 
277
- scrollContext.top = $scroll.scrollTop();
278
- scrollContext.left = $scroll.scrollLeft();
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
+ },
279
367
 
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();
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
+ },
306
436
 
307
- module.stick();
308
- module.debug('Caching element positions', module.cache);
309
- }
310
- },
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
+ },
311
460
 
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
- },
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
+ },
339
545
 
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
- },
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
+ },
362
585
 
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
- },
586
+ setInitialPosition: function () {
587
+ module.debug('Returning to initial position');
588
+ module.unfix();
589
+ module.unbind();
590
+ },
379
591
 
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
- },
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
+ },
450
612
 
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
- },
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
+ },
474
633
 
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
- }
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
+ },
516
645
 
517
- }
518
- else if( module.is.fixed() ) {
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
+ },
519
659
 
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
- }
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
+ },
537
668
 
538
- // currently fixed bottom
539
- else if(module.is.bottom() ) {
669
+ resetCSS: function () {
670
+ $module
671
+ .css({
672
+ width: '',
673
+ height: '',
674
+ })
675
+ ;
676
+ $container
677
+ .css({
678
+ height: '',
679
+ })
680
+ ;
681
+ },
540
682
 
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
- }
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
+ };
557
827
 
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
- }
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);