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

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 +26 -0
  3. package/.eslint/no-extra-parens-rule.js +17 -0
  4. package/.eslint/package.json +11 -0
  5. package/.eslintrc.js +124 -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 +10 -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 +30 -33
  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 -130
  480. package/tasks/admin/components/update.js +151 -159
  481. package/tasks/admin/distributions/create.js +183 -189
  482. package/tasks/admin/distributions/init.js +125 -132
  483. package/tasks/admin/distributions/update.js +147 -154
  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 -20
  496. package/tasks/collections/docs.js +10 -12
  497. package/tasks/collections/install.js +10 -12
  498. package/tasks/collections/rtl.js +9 -11
  499. package/tasks/collections/various.js +9 -11
  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 +13 -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 +2 -4
  522. package/tasks/rtl/watch.js +2 -4
  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,1523 +8,1515 @@
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
- $.flyout = $.fn.flyout = function(parameters) {
27
- var
28
- $allModules = $(this),
29
- $window = $(window),
30
- $document = $(document),
31
- $html = $('html'),
32
- $head = $('head'),
33
- $body = $('body'),
34
-
35
- moduleSelector = $allModules.selector || '',
36
-
37
- time = new Date().getTime(),
38
- performance = [],
39
-
40
- query = arguments[0],
41
- methodInvoked = (typeof query == 'string'),
42
- queryArguments = [].slice.call(arguments, 1),
43
-
44
- requestAnimationFrame = window.requestAnimationFrame
45
- || window.mozRequestAnimationFrame
46
- || window.webkitRequestAnimationFrame
47
- || window.msRequestAnimationFrame
48
- || function(callback) { setTimeout(callback, 0); },
49
-
50
- returnedValue
51
- ;
52
-
53
- $allModules
54
- .each(function() {
55
- var
56
- settings = ( $.isPlainObject(parameters) )
57
- ? $.extend(true, {}, $.fn.flyout.settings, parameters)
58
- : $.extend({}, $.fn.flyout.settings),
59
-
60
- selector = settings.selector,
61
- className = settings.className,
62
- namespace = settings.namespace,
63
- fields = settings.fields,
64
- regExp = settings.regExp,
65
- error = settings.error,
66
-
67
- eventNamespace = '.' + namespace,
68
- moduleNamespace = 'module-' + namespace,
69
-
70
- $module = $(this),
71
- $context = [window,document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $body,
72
- $closeIcon = $module.find(selector.close),
73
- $inputs,
74
- $focusedElement,
75
-
76
- $flyouts = $module.children(selector.flyout),
77
- $pusher = $context.children(selector.pusher),
78
- $style,
79
-
80
- isFlyoutComponent = $module.hasClass('flyout'),
81
-
82
- element = this,
83
- instance = isFlyoutComponent ? $module.data(moduleNamespace) : undefined,
84
-
85
- ignoreRepeatedEvents = false,
86
- isBody = $context[0] === $body[0],
87
- initialBodyMargin = '',
88
- tempBodyMargin = '',
89
- hadScrollbar = false,
90
-
91
- elementNamespace,
92
- id,
93
- observer,
94
- currentScroll,
95
- transitionEvent,
96
-
97
- module
98
- ;
99
-
100
- module = {
101
-
102
- initialize: function() {
103
- module.debug('Initializing flyout', parameters);
104
-
105
- module.create.id();
106
- if(!isFlyoutComponent) {
107
- module.create.flyout();
108
- if(!$.isFunction(settings.onHidden)) {
109
- settings.onHidden = function () {
110
- module.destroy();
111
- $module.remove();
112
- };
113
- }
114
- if(!settings.autoShow) {
115
- settings.autoShow = true;
116
- }
117
- }
118
- $module.addClass(settings.class);
119
- if (settings.title !== '') {
120
- $module.find(selector.header).html(module.helpers.escape(settings.title, settings.preserveHTML)).addClass(settings.classTitle);
121
- }
122
- if (settings.content !== '') {
123
- $module.find(selector.content).html(module.helpers.escape(settings.content, settings.preserveHTML)).addClass(settings.classContent);
124
- }
125
- if(module.has.configActions()){
126
- var $actions = $module.find(selector.actions).addClass(settings.classActions);
127
- if ($actions.length === 0) {
128
- $actions = $('<div/>', {class: className.actions + ' ' + (settings.classActions || '')}).appendTo($module);
129
- } else {
130
- $actions.empty();
131
- }
132
- settings.actions.forEach(function (el) {
133
- var
134
- icon = el[fields.icon] ? '<i '+(el[fields.text] ? 'aria-hidden="true"' : '')+' class="' + module.helpers.deQuote(el[fields.icon]) + ' icon"></i>' : '',
135
- text = module.helpers.escape(el[fields.text] || '', settings.preserveHTML),
136
- cls = module.helpers.deQuote(el[fields.class] || ''),
137
- click = el[fields.click] && $.isFunction(el[fields.click]) ? el[fields.click] : function () {}
138
- ;
139
- $actions.append($('<button/>', {
140
- html: icon + text,
141
- 'aria-label': (el[fields.text] || el[fields.icon] || '').replace(/<[^>]+(>|$)/g,''),
142
- class: className.button + ' ' + cls,
143
- click: function () {
144
- if (click.call(element, $module) === false) {
145
- return;
146
- }
147
- module.hide();
148
- }
149
- }));
150
- });
151
- }
152
-
153
- transitionEvent = module.get.transitionEvent();
154
-
155
- // avoids locking rendering if initialized in onReady
156
- if(settings.delaySetup) {
157
- requestAnimationFrame(module.setup.layout);
158
- }
159
- else {
160
- module.setup.layout();
161
- }
162
-
163
- requestAnimationFrame(function() {
164
- module.setup.cache();
165
- });
166
-
167
- if (module.get.direction() == 'left' || module.get.direction() == 'right') {
168
- module.setup.heights();
169
- module.bind.resize();
170
- }
171
- module.bind.events();
172
- module.observeChanges();
173
- module.instantiate();
174
-
175
- if(settings.autoShow){
176
- module.show();
177
- }
178
- },
11
+ (function ($, window, document) {
12
+ 'use strict';
179
13
 
180
- instantiate: function() {
181
- module.verbose('Storing instance of module', module);
182
- instance = module;
183
- $module
184
- .data(moduleNamespace, instance)
185
- ;
186
- },
14
+ function isFunction(obj) {
15
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
16
+ }
187
17
 
188
- create: {
189
- flyout: function() {
190
- module.verbose('Programmaticaly create flyout', $context);
191
- $module = $('<div/>', {class: className.flyout, role: 'dialog', 'aria-modal': settings.dimPage});
192
- if (settings.closeIcon) {
193
- $closeIcon = $('<i/>', {class: className.close, role: 'button', tabindex: 0, 'aria-label': settings.text.close})
194
- $module.append($closeIcon);
195
- }
196
- if (settings.title !== '') {
197
- var titleId = '_' + module.get.id() + 'title';
198
- $module.attr('aria-labelledby', titleId);
199
- $('<div/>', {class: className.header, id: titleId}).appendTo($module);
200
- }
201
- if (settings.content !== '') {
202
- var descId = '_' + module.get.id() + 'desc';
203
- $module.attr('aria-describedby', descId);
204
- $('<div/>', {class: className.content, id: descId}).appendTo($module);
205
- }
206
- if (module.has.configActions()) {
207
- $('<div/>', {class: className.actions}).appendTo($module);
208
- }
209
- $module.prependTo($context);
210
- element = $module[0];
211
- },
212
- id: function() {
213
- id = (Math.random().toString(16) + '000000000').slice(2, 10);
214
- elementNamespace = '.' + id;
215
- module.verbose('Creating unique id for element', id);
216
- }
217
- },
18
+ window = window !== undefined && window.Math === Math
19
+ ? window
20
+ : globalThis;
218
21
 
219
- destroy: function() {
220
- if (observer) {
221
- observer.disconnect();
222
- }
223
- module.verbose('Destroying previous module for', $module);
224
- $module
225
- .off(eventNamespace)
226
- .removeData(moduleNamespace)
227
- ;
228
- if(module.is.ios()) {
229
- module.remove.ios();
230
- }
231
- $closeIcon.off(elementNamespace);
232
- if($inputs) {
233
- $inputs.off(elementNamespace);
234
- }
235
- // bound by uuid
236
- $context.off(elementNamespace);
237
- $window.off(elementNamespace);
238
- $document.off(elementNamespace);
239
- },
22
+ $.fn.flyout = function (parameters) {
23
+ var
24
+ $allModules = $(this),
25
+ $window = $(window),
26
+ $document = $(document),
27
+ $html = $('html'),
28
+ $head = $('head'),
29
+ $body = $('body'),
240
30
 
241
- event: {
242
- keyboard: function(event) {
243
- var
244
- keyCode = event.which
245
- ;
246
- if(keyCode === settings.keys.escape) {
247
- if(settings.closable) {
248
- module.debug('Escape key pressed hiding flyout');
249
- module.hide();
250
- }
251
- else {
252
- module.debug('Escape key pressed, but closable is set to false');
253
- }
254
- event.preventDefault();
255
- }
256
- },
257
- resize: function() {
258
- module.setup.heights();
259
- },
260
- clickaway: function(event) {
261
- if(settings.closable){
262
- var
263
- clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),
264
- clickedContext = ($context.is(event.target))
265
- ;
266
- if(clickedInPusher) {
267
- module.verbose('User clicked on dimmed page');
268
- module.hide();
269
- }
270
- if(clickedContext) {
271
- module.verbose('User clicked on dimmable context (scaled out page)');
272
- module.hide();
273
- }
274
- }
275
- },
276
- close: function(event) {
277
- module.hide();
278
- },
279
- closeKeyUp: function(event){
280
- var
281
- keyCode = event.which
282
- ;
283
- if (keyCode === settings.keys.enter || keyCode === settings.keys.space) {
284
- module.hide();
285
- }
286
- },
287
- inputKeyDown: {
288
- first: function(event) {
289
- var
290
- keyCode = event.which
291
- ;
292
- if (keyCode === settings.keys.tab && event.shiftKey) {
293
- $inputs.last().focus();
294
- event.preventDefault();
295
- }
296
- },
297
- last: function(event) {
298
- var
299
- keyCode = event.which
300
- ;
301
- if (keyCode === settings.keys.tab && !event.shiftKey) {
302
- $inputs.first().focus();
303
- event.preventDefault();
304
- }
305
- }
306
- },
307
- approve: function(event) {
308
- if (ignoreRepeatedEvents || settings.onApprove.call(module.element, $(this)) === false) {
309
- module.verbose('Approve callback returned false cancelling close');
310
- return;
311
- }
312
- ignoreRepeatedEvents = true;
313
- module.hide(function() {
314
- ignoreRepeatedEvents = false;
315
- });
316
- },
317
- deny: function(event) {
318
- if (ignoreRepeatedEvents || settings.onDeny.call(module.element, $(this)) === false) {
319
- module.verbose('Deny callback returned false cancelling close');
320
- return;
321
- }
322
- ignoreRepeatedEvents = true;
323
- module.hide(function() {
324
- ignoreRepeatedEvents = false;
325
- });
326
- },
327
- touch: function(event) {
328
- //event.stopPropagation();
329
- },
330
- containScroll: function(event) {
331
- if(element.scrollTop <= 0) {
332
- element.scrollTop = 1;
333
- }
334
- if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {
335
- element.scrollTop = element.scrollHeight - element.offsetHeight - 1;
336
- }
337
- },
338
- scroll: function(event) {
339
- if( $(event.target).closest(selector.flyout).length === 0 ) {
340
- event.preventDefault();
341
- }
342
- }
343
- },
31
+ moduleSelector = $allModules.selector || '',
344
32
 
345
- bind: {
346
- resize: function() {
347
- module.verbose('Adding resize event to window', $window);
348
- $window.on('resize' + elementNamespace, module.event.resize);
349
- },
350
- events: function() {
351
- module.verbose('Attaching events');
352
- $module
353
- .on('click' + eventNamespace, selector.close, module.event.close)
354
- .on('click' + eventNamespace, selector.approve, module.event.approve)
355
- .on('click' + eventNamespace, selector.deny, module.event.deny)
356
- ;
357
- $closeIcon
358
- .on('keyup' + elementNamespace, module.event.closeKeyUp)
359
- ;
360
- },
361
- clickaway: function() {
362
- module.verbose('Adding clickaway events to context', $context);
363
- $context
364
- .on('click' + elementNamespace, module.event.clickaway)
365
- .on('touchend' + elementNamespace, module.event.clickaway)
366
- ;
367
- },
368
- scrollLock: function() {
369
- if(settings.scrollLock) {
370
- module.debug('Disabling page scroll');
371
- hadScrollbar = module.has.scrollbar();
372
- if(hadScrollbar) {
373
- module.save.bodyMargin();
374
- module.set.bodyMargin();
375
- }
376
- $context.addClass(className.locked);
377
- }
378
- module.verbose('Adding events to contain flyout scroll');
379
- $document
380
- .on('touchmove' + elementNamespace, module.event.touch)
381
- ;
382
- $module
383
- .on('scroll' + eventNamespace, module.event.containScroll)
384
- ;
385
- }
386
- },
387
- unbind: {
388
- clickaway: function() {
389
- module.verbose('Removing clickaway events from context', $context);
390
- $context.off(elementNamespace);
391
- },
392
- scrollLock: function() {
393
- module.verbose('Removing scroll lock from page');
394
- if(hadScrollbar) {
395
- module.restore.bodyMargin();
396
- }
397
- $context.removeClass(className.locked);
398
- $document.off(elementNamespace);
399
- $module.off('scroll' + eventNamespace);
400
- }
401
- },
33
+ time = Date.now(),
34
+ performance = [],
35
+
36
+ query = arguments[0],
37
+ methodInvoked = typeof query === 'string',
38
+ queryArguments = [].slice.call(arguments, 1),
39
+
40
+ returnedValue
41
+ ;
402
42
 
403
- add: {
404
- inlineCSS: function() {
43
+ $allModules.each(function () {
405
44
  var
406
- width = module.cache.width || $module.outerWidth(),
407
- height = module.cache.height || $module.outerHeight(),
408
- isRTL = module.is.rtl(),
409
- direction = module.get.direction(),
410
- distance = {
411
- left : width,
412
- right : -width,
413
- top : height,
414
- bottom : -height
415
- },
416
- style
45
+ settings = $.isPlainObject(parameters)
46
+ ? $.extend(true, {}, $.fn.flyout.settings, parameters)
47
+ : $.extend({}, $.fn.flyout.settings),
48
+
49
+ selector = settings.selector,
50
+ className = settings.className,
51
+ namespace = settings.namespace,
52
+ fields = settings.fields,
53
+ regExp = settings.regExp,
54
+ error = settings.error,
55
+
56
+ eventNamespace = '.' + namespace,
57
+ moduleNamespace = 'module-' + namespace,
58
+
59
+ $module = $(this),
60
+ $context = [window, document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $body,
61
+ $closeIcon = $module.find(selector.close),
62
+ $inputs,
63
+ $focusedElement,
64
+
65
+ $flyouts = $module.children(selector.flyout),
66
+ $pusher = $context.children(selector.pusher),
67
+ $style,
68
+
69
+ isFlyoutComponent = $module.hasClass('flyout'),
70
+
71
+ element = this,
72
+ instance = isFlyoutComponent ? $module.data(moduleNamespace) : undefined,
73
+
74
+ ignoreRepeatedEvents = false,
75
+ isBody = $context[0] === $body[0],
76
+ initialBodyMargin = '',
77
+ tempBodyMargin = '',
78
+ hadScrollbar = false,
79
+
80
+ elementNamespace,
81
+ id,
82
+ observer,
83
+ currentScroll,
84
+ transitionEvent,
85
+
86
+ module
417
87
  ;
418
88
 
419
- if(isRTL){
420
- module.verbose('RTL detected, flipping widths');
421
- distance.left = -width;
422
- distance.right = width;
423
- }
89
+ module = {
90
+
91
+ initialize: function () {
92
+ module.debug('Initializing flyout', parameters);
93
+
94
+ module.create.id();
95
+ if (!isFlyoutComponent) {
96
+ module.create.flyout();
97
+ if (!isFunction(settings.onHidden)) {
98
+ settings.onHidden = function () {
99
+ module.destroy();
100
+ $module.remove();
101
+ };
102
+ }
103
+ if (!settings.autoShow) {
104
+ settings.autoShow = true;
105
+ }
106
+ }
107
+ $module.addClass(settings.class);
108
+ if (settings.title !== '') {
109
+ $module.find(selector.header).html(module.helpers.escape(settings.title, settings.preserveHTML)).addClass(settings.classTitle);
110
+ }
111
+ if (settings.content !== '') {
112
+ $module.find(selector.content).html(module.helpers.escape(settings.content, settings.preserveHTML)).addClass(settings.classContent);
113
+ }
114
+ if (module.has.configActions()) {
115
+ var $actions = $module.find(selector.actions).addClass(settings.classActions);
116
+ if ($actions.length === 0) {
117
+ $actions = $('<div/>', { class: className.actions + ' ' + (settings.classActions || '') }).appendTo($module);
118
+ } else {
119
+ $actions.empty();
120
+ }
121
+ settings.actions.forEach(function (el) {
122
+ var
123
+ icon = el[fields.icon]
124
+ ? '<i ' + (el[fields.text] ? 'aria-hidden="true"' : '') + ' class="' + module.helpers.deQuote(el[fields.icon]) + ' icon"></i>'
125
+ : '',
126
+ text = module.helpers.escape(el[fields.text] || '', settings.preserveHTML),
127
+ cls = module.helpers.deQuote(el[fields.class] || ''),
128
+ click = el[fields.click] && isFunction(el[fields.click])
129
+ ? el[fields.click]
130
+ : function () {}
131
+ ;
132
+ $actions.append($('<button/>', {
133
+ html: icon + text,
134
+ 'aria-label': (el[fields.text] || el[fields.icon] || '').replace(/<[^>]+(>|$)/g, ''),
135
+ class: className.button + ' ' + cls,
136
+ on: {
137
+ click: function () {
138
+ if (click.call(element, $module) === false) {
139
+ return;
140
+ }
141
+ module.hide();
142
+ },
143
+ },
144
+ }));
145
+ });
146
+ }
147
+
148
+ transitionEvent = module.get.transitionEvent();
149
+
150
+ // avoids locking rendering if initialized in onReady
151
+ if (settings.delaySetup) {
152
+ requestAnimationFrame(module.setup.layout);
153
+ } else {
154
+ module.setup.layout();
155
+ }
156
+
157
+ requestAnimationFrame(function () {
158
+ module.setup.cache();
159
+ });
160
+
161
+ if (module.get.direction() === 'left' || module.get.direction() === 'right') {
162
+ module.setup.heights();
163
+ module.bind.resize();
164
+ }
165
+ module.bind.events();
166
+ module.observeChanges();
167
+ module.instantiate();
168
+
169
+ if (settings.autoShow) {
170
+ module.show();
171
+ }
172
+ },
424
173
 
425
- style = '<style>';
426
-
427
- if(direction === 'left' || direction === 'right') {
428
- module.debug('Adding CSS rules for animation distance', width);
429
- style += ''
430
- + ' .ui.visible.' + direction + '.flyout ~ .fixed,'
431
- + ' .ui.visible.' + direction + '.flyout ~ .pusher {'
432
- + ' -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'
433
- + ' transform: translate3d('+ distance[direction] + 'px, 0, 0);'
434
- + ' }'
435
- ;
436
- }
437
- else if(direction === 'top' || direction == 'bottom') {
438
- style += ''
439
- + ' .ui.visible.' + direction + '.flyout ~ .fixed,'
440
- + ' .ui.visible.' + direction + '.flyout ~ .pusher {'
441
- + ' -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'
442
- + ' transform: translate3d(0, ' + distance[direction] + 'px, 0);'
443
- + ' }'
444
- ;
445
- }
174
+ instantiate: function () {
175
+ module.verbose('Storing instance of module', module);
176
+ instance = module;
177
+ $module
178
+ .data(moduleNamespace, instance)
179
+ ;
180
+ },
446
181
 
447
- /* IE is only browser not to create context with transforms */
448
- /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */
449
- if( module.is.ie() ) {
450
- if(direction === 'left' || direction === 'right') {
451
- module.debug('Adding CSS rules for animation distance', width);
452
- style += ''
453
- + ' body.pushable > .ui.visible.' + direction + '.flyout ~ .pusher::after {'
454
- + ' -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'
455
- + ' transform: translate3d('+ distance[direction] + 'px, 0, 0);'
456
- + ' }'
457
- ;
458
- }
459
- else if(direction === 'top' || direction == 'bottom') {
460
- style += ''
461
- + ' body.pushable > .ui.visible.' + direction + '.flyout ~ .pusher::after {'
462
- + ' -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'
463
- + ' transform: translate3d(0, ' + distance[direction] + 'px, 0);'
464
- + ' }'
465
- ;
466
- }
467
- /* opposite sides visible forces content overlay */
468
- style += ''
469
- + ' body.pushable > .ui.visible.left.flyout ~ .ui.visible.right.flyout ~ .pusher::after,'
470
- + ' body.pushable > .ui.visible.right.flyout ~ .ui.visible.left.flyout ~ .pusher::after {'
471
- + ' -webkit-transform: translate3d(0, 0, 0);'
472
- + ' transform: translate3d(0, 0, 0);'
473
- + ' }'
474
- ;
475
- }
476
- style += '</style>';
477
- $style = $(style)
478
- .appendTo($head)
479
- ;
480
- module.debug('Adding sizing css to head', $style);
481
- },
482
- keyboardShortcuts: function() {
483
- module.verbose('Adding keyboard shortcuts');
484
- $document
485
- .on('keydown' + eventNamespace, module.event.keyboard)
486
- ;
487
- }
488
- },
489
- observeChanges: function() {
490
- if('MutationObserver' in window) {
491
- observer = new MutationObserver(function(mutations) {
492
- module.refreshInputs();
493
- });
494
- observer.observe(element, {
495
- childList : true,
496
- subtree : true
497
- });
498
- module.debug('Setting up mutation observer', observer);
499
- }
500
- },
501
- refresh: function() {
502
- module.verbose('Refreshing selector cache');
503
- $context = [window,document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $body;
504
- module.refreshFlyouts();
505
- $pusher = $context.children(selector.pusher);
506
- module.clear.cache();
507
- },
182
+ create: {
183
+ flyout: function () {
184
+ module.verbose('Programmaticaly create flyout', $context);
185
+ $module = $('<div/>', { class: className.flyout, role: 'dialog', 'aria-modal': settings.dimPage });
186
+ if (settings.closeIcon) {
187
+ $closeIcon = $('<i/>', {
188
+ class: className.close,
189
+ role: 'button',
190
+ tabindex: 0,
191
+ 'aria-label': settings.text.close,
192
+ });
193
+ $module.append($closeIcon);
194
+ }
195
+ if (settings.title !== '') {
196
+ var titleId = '_' + module.get.id() + 'title';
197
+ $module.attr('aria-labelledby', titleId);
198
+ $('<div/>', { class: className.header, id: titleId }).appendTo($module);
199
+ }
200
+ if (settings.content !== '') {
201
+ var descId = '_' + module.get.id() + 'desc';
202
+ $module.attr('aria-describedby', descId);
203
+ $('<div/>', { class: className.content, id: descId }).appendTo($module);
204
+ }
205
+ if (module.has.configActions()) {
206
+ $('<div/>', { class: className.actions }).appendTo($module);
207
+ }
208
+ $module.prependTo($context);
209
+ element = $module[0];
210
+ },
211
+ id: function () {
212
+ id = (Math.random().toString(16) + '000000000').slice(2, 10);
213
+ elementNamespace = '.' + id;
214
+ module.verbose('Creating unique id for element', id);
215
+ },
216
+ },
508
217
 
509
- refreshFlyouts: function() {
510
- module.verbose('Refreshing other flyouts');
511
- $flyouts = $context.children(selector.flyout);
512
- },
218
+ destroy: function () {
219
+ if (observer) {
220
+ observer.disconnect();
221
+ }
222
+ module.verbose('Destroying previous module for', $module);
223
+ $module
224
+ .off(eventNamespace)
225
+ .removeData(moduleNamespace)
226
+ ;
227
+ if (module.is.ios()) {
228
+ module.remove.ios();
229
+ }
230
+ $closeIcon.off(elementNamespace);
231
+ if ($inputs) {
232
+ $inputs.off(elementNamespace);
233
+ }
234
+ // bound by uuid
235
+ $context.off(elementNamespace);
236
+ $window.off(elementNamespace);
237
+ $document.off(elementNamespace);
238
+ },
513
239
 
514
- refreshInputs: function(){
515
- if($inputs){
516
- $inputs
517
- .off('keydown' + elementNamespace)
518
- ;
519
- }
520
- if(!settings.dimPage){
521
- return;
522
- }
523
- $inputs = $module.find('[tabindex], :input').filter(':visible').filter(function() {
524
- return $(this).closest('.disabled').length === 0;
525
- });
526
- $inputs.first()
527
- .on('keydown' + elementNamespace, module.event.inputKeyDown.first)
528
- ;
529
- $inputs.last()
530
- .on('keydown' + elementNamespace, module.event.inputKeyDown.last)
531
- ;
532
- },
240
+ event: {
241
+ keyboard: function (event) {
242
+ var
243
+ keyCode = event.which
244
+ ;
245
+ if (keyCode === settings.keys.escape) {
246
+ if (settings.closable) {
247
+ module.debug('Escape key pressed hiding flyout');
248
+ module.hide();
249
+ } else {
250
+ module.debug('Escape key pressed, but closable is set to false');
251
+ }
252
+ event.preventDefault();
253
+ }
254
+ },
255
+ resize: function () {
256
+ module.setup.heights();
257
+ },
258
+ clickaway: function (event) {
259
+ if (settings.closable) {
260
+ var
261
+ clickedInPusher = $pusher.find(event.target).length > 0 || $pusher.is(event.target),
262
+ clickedContext = $context.is(event.target)
263
+ ;
264
+ if (clickedInPusher) {
265
+ module.verbose('User clicked on dimmed page');
266
+ module.hide();
267
+ }
268
+ if (clickedContext) {
269
+ module.verbose('User clicked on dimmable context (scaled out page)');
270
+ module.hide();
271
+ }
272
+ }
273
+ },
274
+ close: function (event) {
275
+ module.hide();
276
+ },
277
+ closeKeyUp: function (event) {
278
+ var
279
+ keyCode = event.which
280
+ ;
281
+ if (keyCode === settings.keys.enter || keyCode === settings.keys.space) {
282
+ module.hide();
283
+ }
284
+ },
285
+ inputKeyDown: {
286
+ first: function (event) {
287
+ var
288
+ keyCode = event.which
289
+ ;
290
+ if (keyCode === settings.keys.tab && event.shiftKey) {
291
+ $inputs.last().trigger('focus');
292
+ event.preventDefault();
293
+ }
294
+ },
295
+ last: function (event) {
296
+ var
297
+ keyCode = event.which
298
+ ;
299
+ if (keyCode === settings.keys.tab && !event.shiftKey) {
300
+ $inputs.first().trigger('focus');
301
+ event.preventDefault();
302
+ }
303
+ },
304
+ },
305
+ approve: function (event) {
306
+ if (ignoreRepeatedEvents || settings.onApprove.call(module.element, $(this)) === false) {
307
+ module.verbose('Approve callback returned false cancelling close');
308
+
309
+ return;
310
+ }
311
+ ignoreRepeatedEvents = true;
312
+ module.hide(function () {
313
+ ignoreRepeatedEvents = false;
314
+ });
315
+ },
316
+ deny: function (event) {
317
+ if (ignoreRepeatedEvents || settings.onDeny.call(module.element, $(this)) === false) {
318
+ module.verbose('Deny callback returned false cancelling close');
319
+
320
+ return;
321
+ }
322
+ ignoreRepeatedEvents = true;
323
+ module.hide(function () {
324
+ ignoreRepeatedEvents = false;
325
+ });
326
+ },
327
+ touch: function (event) {
328
+ // event.stopPropagation();
329
+ },
330
+ containScroll: function (event) {
331
+ if (element.scrollTop <= 0) {
332
+ element.scrollTop = 1;
333
+ }
334
+ if ((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {
335
+ element.scrollTop = element.scrollHeight - element.offsetHeight - 1;
336
+ }
337
+ },
338
+ scroll: function (event) {
339
+ if ($(event.target).closest(selector.flyout).length === 0) {
340
+ event.preventDefault();
341
+ }
342
+ },
343
+ },
533
344
 
534
- setup: {
535
- cache: function() {
536
- module.cache = {
537
- width : $module.outerWidth(),
538
- height : $module.outerHeight()
539
- };
540
- },
541
- layout: function() {
542
- if( $context.children(selector.pusher).length === 0 ) {
543
- module.debug('Adding wrapper element for flyout');
544
- module.error(error.pusher);
545
- $pusher = $('<div class="pusher" />');
546
- $context
547
- .children()
548
- .not(selector.omitted)
549
- .not($flyouts)
550
- .wrapAll($pusher)
551
- ;
552
- module.refresh();
553
- }
554
- if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {
555
- module.debug('Moved flyout to correct parent element');
556
- module.error(error.movedFlyout, element);
557
- $module.detach().prependTo($context);
558
- module.refresh();
559
- }
560
- if( module.is.mobile() ) {
561
- $module.addClass(className.fullscreen);
562
- }
563
- module.clear.cache();
564
- module.set.pushable();
565
- module.set.direction();
566
- },
567
- heights: function() {
568
- module.debug('Setting up heights', $module);
569
- var
570
- $header = $module.children(selector.header),
571
- $content = $module.children(selector.content),
572
- $actions = $module.children(selector.actions)
573
- ;
574
- $content.css('min-height', ($context.height() - $header.outerHeight() - $actions.outerHeight()) + 'px');
575
- }
576
- },
345
+ bind: {
346
+ resize: function () {
347
+ module.verbose('Adding resize event to window', $window);
348
+ $window.on('resize' + elementNamespace, module.event.resize);
349
+ },
350
+ events: function () {
351
+ module.verbose('Attaching events');
352
+ $module
353
+ .on('click' + eventNamespace, selector.close, module.event.close)
354
+ .on('click' + eventNamespace, selector.approve, module.event.approve)
355
+ .on('click' + eventNamespace, selector.deny, module.event.deny)
356
+ ;
357
+ $closeIcon
358
+ .on('keyup' + elementNamespace, module.event.closeKeyUp)
359
+ ;
360
+ },
361
+ clickaway: function () {
362
+ module.verbose('Adding clickaway events to context', $context);
363
+ $context
364
+ .on('click' + elementNamespace, module.event.clickaway)
365
+ .on('touchend' + elementNamespace, module.event.clickaway)
366
+ ;
367
+ },
368
+ scrollLock: function () {
369
+ if (settings.scrollLock) {
370
+ module.debug('Disabling page scroll');
371
+ hadScrollbar = module.has.scrollbar();
372
+ if (hadScrollbar) {
373
+ module.save.bodyMargin();
374
+ module.set.bodyMargin();
375
+ }
376
+ $context.addClass(className.locked);
377
+ }
378
+ module.verbose('Adding events to contain flyout scroll');
379
+ $document
380
+ .on('touchmove' + elementNamespace, module.event.touch)
381
+ ;
382
+ $module
383
+ .on('scroll' + eventNamespace, module.event.containScroll)
384
+ ;
385
+ },
386
+ },
387
+ unbind: {
388
+ clickaway: function () {
389
+ module.verbose('Removing clickaway events from context', $context);
390
+ $context.off(elementNamespace);
391
+ },
392
+ scrollLock: function () {
393
+ module.verbose('Removing scroll lock from page');
394
+ if (hadScrollbar) {
395
+ module.restore.bodyMargin();
396
+ }
397
+ $context.removeClass(className.locked);
398
+ $document.off(elementNamespace);
399
+ $module.off('scroll' + eventNamespace);
400
+ },
401
+ },
577
402
 
578
- attachEvents: function(selector, event) {
579
- var
580
- $toggle = $(selector)
581
- ;
582
- event = $.isFunction(module[event])
583
- ? module[event]
584
- : module.toggle
585
- ;
586
- if($toggle.length > 0) {
587
- module.debug('Attaching flyout events to element', selector, event);
588
- $toggle
589
- .on('click' + eventNamespace, event)
590
- ;
591
- }
592
- else {
593
- module.error(error.notFound, selector);
594
- }
595
- },
403
+ add: {
404
+ inlineCSS: function () {
405
+ var
406
+ width = module.cache.width || $module.outerWidth(),
407
+ height = module.cache.height || $module.outerHeight(),
408
+ isRTL = module.is.rtl(),
409
+ direction = module.get.direction(),
410
+ distance = {
411
+ left: width,
412
+ right: -width,
413
+ top: height,
414
+ bottom: -height,
415
+ },
416
+ style
417
+ ;
418
+
419
+ if (isRTL) {
420
+ module.verbose('RTL detected, flipping widths');
421
+ distance.left = -width;
422
+ distance.right = width;
423
+ }
424
+
425
+ style = '<style>';
426
+
427
+ if (direction === 'left' || direction === 'right') {
428
+ module.debug('Adding CSS rules for animation distance', width);
429
+ style += ''
430
+ + ' .ui.visible.' + direction + '.flyout ~ .fixed,'
431
+ + ' .ui.visible.' + direction + '.flyout ~ .pusher {'
432
+ + ' transform: translate3d(' + distance[direction] + 'px, 0, 0);'
433
+ + ' }';
434
+ } else if (direction === 'top' || direction === 'bottom') {
435
+ style += ''
436
+ + ' .ui.visible.' + direction + '.flyout ~ .fixed,'
437
+ + ' .ui.visible.' + direction + '.flyout ~ .pusher {'
438
+ + ' transform: translate3d(0, ' + distance[direction] + 'px, 0);'
439
+ + ' }';
440
+ }
441
+
442
+ /* IE is only browser not to create context with transforms */
443
+ /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */
444
+ if (module.is.ie()) {
445
+ if (direction === 'left' || direction === 'right') {
446
+ module.debug('Adding CSS rules for animation distance', width);
447
+ style += ''
448
+ + ' body.pushable > .ui.visible.' + direction + '.flyout ~ .pusher::after {'
449
+ + ' transform: translate3d(' + distance[direction] + 'px, 0, 0);'
450
+ + ' }';
451
+ } else if (direction === 'top' || direction === 'bottom') {
452
+ style += ''
453
+ + ' body.pushable > .ui.visible.' + direction + '.flyout ~ .pusher::after {'
454
+ + ' transform: translate3d(0, ' + distance[direction] + 'px, 0);'
455
+ + ' }';
456
+ }
457
+ /* opposite sides visible forces content overlay */
458
+ style += ''
459
+ + ' body.pushable > .ui.visible.left.flyout ~ .ui.visible.right.flyout ~ .pusher::after,'
460
+ + ' body.pushable > .ui.visible.right.flyout ~ .ui.visible.left.flyout ~ .pusher::after {'
461
+ + ' transform: translate3d(0, 0, 0);'
462
+ + ' }';
463
+ }
464
+ style += '</style>';
465
+ $style = $(style)
466
+ .appendTo($head)
467
+ ;
468
+ module.debug('Adding sizing css to head', $style);
469
+ },
470
+ keyboardShortcuts: function () {
471
+ module.verbose('Adding keyboard shortcuts');
472
+ $document
473
+ .on('keydown' + eventNamespace, module.event.keyboard)
474
+ ;
475
+ },
476
+ },
477
+ observeChanges: function () {
478
+ if ('MutationObserver' in window) {
479
+ observer = new MutationObserver(function (mutations) {
480
+ module.refreshInputs();
481
+ });
482
+ observer.observe(element, {
483
+ childList: true,
484
+ subtree: true,
485
+ });
486
+ module.debug('Setting up mutation observer', observer);
487
+ }
488
+ },
489
+ refresh: function () {
490
+ module.verbose('Refreshing selector cache');
491
+ $context = [window, document].indexOf(settings.context) < 0 ? $document.find(settings.context) : $body;
492
+ module.refreshFlyouts();
493
+ $pusher = $context.children(selector.pusher);
494
+ module.clear.cache();
495
+ },
596
496
 
597
- show: function(callback) {
598
- callback = $.isFunction(callback)
599
- ? callback
600
- : function(){}
601
- ;
602
- if(module.is.hidden()) {
603
- if(settings.onShow.call(element) === false) {
604
- module.verbose('Show callback returned false cancelling show');
605
- return;
606
- }
607
- module.refresh();
608
- if(module.othersActive()) {
609
- module.debug('Other flyouts currently visible');
610
- if(settings.exclusive) {
611
- module.hideOthers();
612
- } else {
613
- ignoreRepeatedEvents = false;
614
- }
615
- }
616
- module.set.dimmerStyles();
617
- module.pushPage(function() {
618
- callback.call(element);
619
- settings.onVisible.call(element);
620
- if(settings.keyboardShortcuts) {
621
- module.add.keyboardShortcuts();
622
- }
623
- module.save.focus();
624
- module.refreshInputs();
625
- if(settings.autofocus) {
626
- module.set.autofocus();
627
- }
628
- });
629
- settings.onChange.call(element);
630
- }
631
- else {
632
- module.debug('Flyout is already visible');
633
- }
634
- },
497
+ refreshFlyouts: function () {
498
+ module.verbose('Refreshing other flyouts');
499
+ $flyouts = $context.children(selector.flyout);
500
+ },
635
501
 
636
- hide: function(callback) {
637
- callback = $.isFunction(callback)
638
- ? callback
639
- : function(){}
640
- ;
641
- if(settings.onHide.call(element, $(this)) === false) {
642
- module.verbose('Hide callback returned false cancelling hide');
643
- ignoreRepeatedEvents = false;
644
- return false;
645
- }
646
- if(module.is.visible() || module.is.animating()) {
647
- module.debug('Hiding flyout', callback);
648
- module.refreshFlyouts();
649
- module.pullPage(function() {
650
- callback.call(element);
651
- if($.isFunction(settings.onHidden)) {
652
- settings.onHidden.call(element);
653
- }
654
- module.restore.focus();
655
- });
656
- settings.onChange.call(element);
657
- }
658
- },
502
+ refreshInputs: function () {
503
+ if ($inputs) {
504
+ $inputs
505
+ .off('keydown' + elementNamespace)
506
+ ;
507
+ }
508
+ if (!settings.dimPage) {
509
+ return;
510
+ }
511
+ $inputs = $module.find('[tabindex], :input').filter(':visible').filter(function () {
512
+ return $(this).closest('.disabled').length === 0;
513
+ });
514
+ $inputs.first()
515
+ .on('keydown' + elementNamespace, module.event.inputKeyDown.first)
516
+ ;
517
+ $inputs.last()
518
+ .on('keydown' + elementNamespace, module.event.inputKeyDown.last)
519
+ ;
520
+ },
659
521
 
660
- othersAnimating: function() {
661
- return ($flyouts.not($module).filter('.' + className.animating).length > 0);
662
- },
663
- othersVisible: function() {
664
- return ($flyouts.not($module).filter('.' + className.visible).length > 0);
665
- },
666
- othersActive: function() {
667
- return(module.othersVisible() || module.othersAnimating());
668
- },
522
+ setup: {
523
+ cache: function () {
524
+ module.cache = {
525
+ width: $module.outerWidth(),
526
+ height: $module.outerHeight(),
527
+ };
528
+ },
529
+ layout: function () {
530
+ if ($context.children(selector.pusher).length === 0) {
531
+ module.debug('Adding wrapper element for flyout');
532
+ module.error(error.pusher);
533
+ $pusher = $('<div class="pusher" />');
534
+ $context
535
+ .children()
536
+ .not(selector.omitted)
537
+ .not($flyouts)
538
+ .wrapAll($pusher)
539
+ ;
540
+ module.refresh();
541
+ }
542
+ if ($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {
543
+ module.debug('Moved flyout to correct parent element');
544
+ module.error(error.movedFlyout, element);
545
+ $module.detach().prependTo($context);
546
+ module.refresh();
547
+ }
548
+ if (module.is.mobile()) {
549
+ $module.addClass(className.fullscreen);
550
+ }
551
+ module.clear.cache();
552
+ module.set.pushable();
553
+ module.set.direction();
554
+ },
555
+ heights: function () {
556
+ module.debug('Setting up heights', $module);
557
+ var
558
+ $header = $module.children(selector.header),
559
+ $content = $module.children(selector.content),
560
+ $actions = $module.children(selector.actions)
561
+ ;
562
+ $content.css('min-height', ($context.height() - $header.outerHeight() - $actions.outerHeight()) + 'px');
563
+ },
564
+ },
669
565
 
670
- hideOthers: function(callback) {
671
- var
672
- $otherFlyouts = $flyouts.not($module).filter('.' + className.visible),
673
- flyoutCount = $otherFlyouts.length,
674
- callbackCount = 0
675
- ;
676
- callback = callback || function(){};
677
- $otherFlyouts
678
- .flyout('hide', function() {
679
- callbackCount++;
680
- if(callbackCount == flyoutCount) {
681
- callback();
682
- }
683
- })
684
- ;
685
- },
566
+ attachEvents: function (selector, event) {
567
+ var
568
+ $toggle = $(selector)
569
+ ;
570
+ event = isFunction(module[event])
571
+ ? module[event]
572
+ : module.toggle;
573
+ if ($toggle.length > 0) {
574
+ module.debug('Attaching flyout events to element', selector, event);
575
+ $toggle
576
+ .on('click' + eventNamespace, event)
577
+ ;
578
+ } else {
579
+ module.error(error.notFound, selector);
580
+ }
581
+ },
686
582
 
687
- toggle: function() {
688
- module.verbose('Determining toggled direction');
689
- if(module.is.hidden()) {
690
- module.show();
691
- }
692
- else {
693
- module.hide();
694
- }
695
- },
583
+ show: function (callback) {
584
+ callback = isFunction(callback)
585
+ ? callback
586
+ : function () {};
587
+ if (module.is.hidden()) {
588
+ if (settings.onShow.call(element) === false) {
589
+ module.verbose('Show callback returned false cancelling show');
590
+
591
+ return;
592
+ }
593
+ module.refresh();
594
+ if (module.othersActive()) {
595
+ module.debug('Other flyouts currently visible');
596
+ if (settings.exclusive) {
597
+ module.hideOthers();
598
+ } else {
599
+ ignoreRepeatedEvents = false;
600
+ }
601
+ }
602
+ module.set.dimmerStyles();
603
+ module.pushPage(function () {
604
+ callback.call(element);
605
+ settings.onVisible.call(element);
606
+ if (settings.keyboardShortcuts) {
607
+ module.add.keyboardShortcuts();
608
+ }
609
+ module.save.focus();
610
+ module.refreshInputs();
611
+ if (settings.autofocus) {
612
+ module.set.autofocus();
613
+ }
614
+ });
615
+ settings.onChange.call(element);
616
+ } else {
617
+ module.debug('Flyout is already visible');
618
+ }
619
+ },
696
620
 
697
- pushPage: function(callback) {
698
- var
699
- animate,
700
- dim,
701
- transitionEnd
702
- ;
703
- callback = $.isFunction(callback)
704
- ? callback
705
- : function(){}
706
- ;
707
- module.set.overlay();
708
- if(settings.returnScroll) {
709
- currentScroll = (isBody ? $window : $context).scrollTop();
710
- }
711
- module.bind.scrollLock();
712
- animate = function() {
713
- module.bind.clickaway();
714
- module.add.inlineCSS();
715
- module.set.animating();
716
- module.set.visible();
717
- };
718
- dim = function() {
719
- module.set.dimmed();
720
- };
721
- transitionEnd = function(event) {
722
- if( event.target == $module[0] ) {
723
- $module.off(transitionEvent + elementNamespace, transitionEnd);
724
- module.remove.animating();
725
- callback.call(element);
726
- }
727
- };
728
- $module.off(transitionEvent + elementNamespace);
729
- $module.on(transitionEvent + elementNamespace, transitionEnd);
730
- requestAnimationFrame(animate);
731
- if(settings.dimPage && !module.othersVisible()) {
732
- requestAnimationFrame(dim);
733
- }
734
- },
621
+ hide: function (callback) {
622
+ callback = isFunction(callback)
623
+ ? callback
624
+ : function () {};
625
+ if (settings.onHide.call(element, $(this)) === false) {
626
+ module.verbose('Hide callback returned false cancelling hide');
627
+ ignoreRepeatedEvents = false;
628
+
629
+ return false;
630
+ }
631
+ if (module.is.visible() || module.is.animating()) {
632
+ module.debug('Hiding flyout', callback);
633
+ module.refreshFlyouts();
634
+ module.pullPage(function () {
635
+ callback.call(element);
636
+ if (isFunction(settings.onHidden)) {
637
+ settings.onHidden.call(element);
638
+ }
639
+ module.restore.focus();
640
+ });
641
+ settings.onChange.call(element);
642
+ }
643
+ },
735
644
 
736
- pullPage: function(callback) {
737
- var
738
- animate,
739
- transitionEnd
740
- ;
741
- callback = $.isFunction(callback)
742
- ? callback
743
- : function(){}
744
- ;
745
- module.verbose('Removing context push state', module.get.direction());
746
-
747
- module.unbind.clickaway();
748
- if(!module.othersActive()) {
749
- module.unbind.scrollLock();
750
- if( settings.keyboardShortcuts ) {
751
- module.remove.keyboardShortcuts();
752
- }
753
- }
645
+ othersAnimating: function () {
646
+ return $flyouts.not($module).filter('.' + className.animating).length > 0;
647
+ },
648
+ othersVisible: function () {
649
+ return $flyouts.not($module).filter('.' + className.visible).length > 0;
650
+ },
651
+ othersActive: function () {
652
+ return module.othersVisible() || module.othersAnimating();
653
+ },
754
654
 
655
+ hideOthers: function (callback) {
656
+ var
657
+ $otherFlyouts = $flyouts.not($module).filter('.' + className.visible),
658
+ flyoutCount = $otherFlyouts.length,
659
+ callbackCount = 0
660
+ ;
661
+ callback = callback || function () {};
662
+ $otherFlyouts
663
+ .flyout('hide', function () {
664
+ callbackCount++;
665
+ if (callbackCount === flyoutCount) {
666
+ callback();
667
+ }
668
+ })
669
+ ;
670
+ },
755
671
 
756
- animate = function() {
757
- module.set.overlay();
758
- module.set.animating();
759
- if(settings.dimPage && !module.othersVisible()) {
760
- module.set.closing();
761
- }
762
- module.remove.visible();
763
- };
764
- transitionEnd = function(event) {
765
- if( event.target == $module[0] ) {
766
- $module.off(transitionEvent + elementNamespace, transitionEnd);
767
- module.remove.animating();
768
- module.remove.closing();
769
- module.remove.overlay();
770
- module.remove.inlineCSS();
771
- if(settings.returnScroll) {
772
- module.scrollBack();
773
- }
774
- if (settings.dimPage && !module.othersVisible()) {
775
- $pusher.removeClass(className.dimmed);
776
- }
777
- callback.call(element);
778
- }
779
- };
780
- $module.off(transitionEvent + elementNamespace);
781
- $module.on(transitionEvent + elementNamespace, transitionEnd);
782
- requestAnimationFrame(animate);
783
- },
672
+ toggle: function () {
673
+ module.verbose('Determining toggled direction');
674
+ if (module.is.hidden()) {
675
+ module.show();
676
+ } else {
677
+ module.hide();
678
+ }
679
+ },
784
680
 
785
- scrollToTop: function() {
786
- module.verbose('Scrolling to top of page to avoid animation issues');
787
- $module.scrollTop(0);
788
- (isBody ? $window : $context)[0].scrollTo(0, 0);
789
- },
681
+ pushPage: function (callback) {
682
+ var
683
+ animate,
684
+ dim,
685
+ transitionEnd
686
+ ;
687
+ callback = isFunction(callback)
688
+ ? callback
689
+ : function () {};
690
+ module.set.overlay();
691
+ if (settings.returnScroll) {
692
+ currentScroll = (isBody ? $window : $context).scrollTop();
693
+ }
694
+ module.bind.scrollLock();
695
+ animate = function () {
696
+ module.bind.clickaway();
697
+ module.add.inlineCSS();
698
+ module.set.animating();
699
+ module.set.visible();
700
+ };
701
+ dim = function () {
702
+ module.set.dimmed();
703
+ };
704
+ transitionEnd = function (event) {
705
+ if (event.target === $module[0]) {
706
+ $module.off(transitionEvent + elementNamespace, transitionEnd);
707
+ module.remove.animating();
708
+ callback.call(element);
709
+ }
710
+ };
711
+ $module.off(transitionEvent + elementNamespace);
712
+ $module.on(transitionEvent + elementNamespace, transitionEnd);
713
+ requestAnimationFrame(animate);
714
+ if (settings.dimPage && !module.othersVisible()) {
715
+ requestAnimationFrame(dim);
716
+ }
717
+ },
790
718
 
791
- scrollBack: function() {
792
- module.verbose('Scrolling back to original page position');
793
- (isBody ? $window : $context)[0].scrollTo(0, currentScroll);
794
- },
719
+ pullPage: function (callback) {
720
+ var
721
+ animate,
722
+ transitionEnd
723
+ ;
724
+ callback = isFunction(callback)
725
+ ? callback
726
+ : function () {};
727
+ module.verbose('Removing context push state', module.get.direction());
728
+
729
+ module.unbind.clickaway();
730
+ if (!module.othersActive()) {
731
+ module.unbind.scrollLock();
732
+ if (settings.keyboardShortcuts) {
733
+ module.remove.keyboardShortcuts();
734
+ }
735
+ }
736
+
737
+ animate = function () {
738
+ module.set.overlay();
739
+ module.set.animating();
740
+ if (settings.dimPage && !module.othersVisible()) {
741
+ module.set.closing();
742
+ }
743
+ module.remove.visible();
744
+ };
745
+ transitionEnd = function (event) {
746
+ if (event.target === $module[0]) {
747
+ $module.off(transitionEvent + elementNamespace, transitionEnd);
748
+ module.remove.animating();
749
+ module.remove.closing();
750
+ module.remove.overlay();
751
+ module.remove.inlineCSS();
752
+ if (settings.returnScroll) {
753
+ module.scrollBack();
754
+ }
755
+ if (settings.dimPage && !module.othersVisible()) {
756
+ $pusher.removeClass(className.dimmed);
757
+ }
758
+ callback.call(element);
759
+ }
760
+ };
761
+ $module.off(transitionEvent + elementNamespace);
762
+ $module.on(transitionEvent + elementNamespace, transitionEnd);
763
+ requestAnimationFrame(animate);
764
+ },
795
765
 
796
- clear: {
797
- cache: function() {
798
- module.verbose('Clearing cached dimensions');
799
- module.cache = {};
800
- }
801
- },
766
+ scrollToTop: function () {
767
+ module.verbose('Scrolling to top of page to avoid animation issues');
768
+ $module.scrollTop(0);
769
+ (isBody ? $window : $context)[0].scrollTo(0, 0);
770
+ },
802
771
 
803
- set: {
804
- autofocus: function() {
805
- var
806
- $autofocus = $inputs.filter('[autofocus]'),
807
- $input = ($autofocus.length > 0)
808
- ? $autofocus.first()
809
- : ($inputs.length > 1 ? $inputs.filter(':not(i.close)') : $inputs).first()
810
- ;
811
- if($input.length > 0) {
812
- $input.focus();
813
- }
814
- },
815
- dimmerStyles: function() {
816
- if(settings.blurring) {
817
- $pusher.addClass(className.blurring);
818
- }
819
- else {
820
- $pusher.removeClass(className.blurring);
821
- }
822
- },
823
- bodyMargin: function() {
824
- var position = module.can.leftBodyScrollbar() ? 'left':'right';
825
- $context.css((isBody ? 'margin-':'padding-')+position, tempBodyMargin + 'px');
826
- $context.find(selector.bodyFixed.replace('right',position)).each(function(){
827
- var el = $(this),
828
- attribute = el.css('position') === 'fixed' ? 'padding-'+position : position
829
- ;
830
- el.css(attribute, 'calc(' + el.css(attribute) + ' + ' + tempBodyMargin + 'px)');
831
- });
832
- },
833
-
834
- // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios
835
- // (This is no longer necessary in latest iOS)
836
- ios: function() {
837
- $html.addClass(className.ios);
838
- },
839
-
840
- // container
841
- pushed: function() {
842
- $context.addClass(className.pushed);
843
- },
844
- pushable: function() {
845
- $context.addClass(className.pushable);
846
- },
847
-
848
- // pusher
849
- dimmed: function() {
850
- $pusher.addClass(className.dimmed);
851
- },
852
-
853
- // flyout
854
- active: function() {
855
- $module.addClass(className.active);
856
- },
857
- animating: function() {
858
- $module.addClass(className.animating);
859
- },
860
- closing: function() {
861
- $pusher.addClass(className.closing);
862
- },
863
- direction: function(direction) {
864
- direction = direction || module.get.direction();
865
- $module.addClass(className[direction]);
866
- },
867
- visible: function() {
868
- $module.addClass(className.visible);
869
- },
870
- overlay: function() {
871
- $module.addClass(className.overlay);
872
- }
873
- },
874
- remove: {
772
+ scrollBack: function () {
773
+ module.verbose('Scrolling back to original page position');
774
+ (isBody ? $window : $context)[0].scrollTo(0, currentScroll);
775
+ },
875
776
 
876
- inlineCSS: function() {
877
- module.debug('Removing inline css styles', $style);
878
- if($style && $style.length > 0) {
879
- $style.remove();
880
- }
881
- },
882
- keyboardShortcuts: function() {
883
- module.verbose('Removing keyboard shortcuts');
884
- $document
885
- .off('keydown' + eventNamespace)
886
- ;
887
- },
888
-
889
- // ios scroll on html not document
890
- ios: function() {
891
- $html.removeClass(className.ios);
892
- },
893
-
894
- // context
895
- pushed: function() {
896
- $context.removeClass(className.pushed);
897
- },
898
- pushable: function() {
899
- $context.removeClass(className.pushable);
900
- },
901
-
902
- // flyout
903
- active: function() {
904
- $module.removeClass(className.active);
905
- },
906
- animating: function() {
907
- $module.removeClass(className.animating);
908
- },
909
- closing: function() {
910
- $pusher.removeClass(className.closing);
911
- },
912
- direction: function(direction) {
913
- direction = direction || module.get.direction();
914
- $module.removeClass(className[direction]);
915
- },
916
- visible: function() {
917
- $module.removeClass(className.visible);
918
- },
919
- overlay: function() {
920
- $module.removeClass(className.overlay);
921
- }
922
- },
777
+ clear: {
778
+ cache: function () {
779
+ module.verbose('Clearing cached dimensions');
780
+ module.cache = {};
781
+ },
782
+ },
923
783
 
924
- get: {
925
- direction: function() {
926
- if($module.hasClass(className.top)) {
927
- return className.top;
928
- }
929
- else if($module.hasClass(className.right)) {
930
- return className.right;
931
- }
932
- else if($module.hasClass(className.bottom)) {
933
- return className.bottom;
934
- }
935
- return className.left;
936
- },
937
- transitionEvent: function() {
938
- var
939
- element = document.createElement('element'),
940
- transitions = {
941
- 'transition' :'transitionend',
942
- 'OTransition' :'oTransitionEnd',
943
- 'MozTransition' :'transitionend',
944
- 'WebkitTransition' :'webkitTransitionEnd'
945
- },
946
- transition
947
- ;
948
- for(transition in transitions){
949
- if( element.style[transition] !== undefined ){
950
- return transitions[transition];
951
- }
952
- }
953
- },
954
- id: function() {
955
- return id;
956
- },
957
- element: function() {
958
- return $module;
959
- },
960
- settings: function() {
961
- return settings;
962
- }
963
- },
784
+ set: {
785
+ autofocus: function () {
786
+ var
787
+ $autofocus = $inputs.filter('[autofocus]'),
788
+ $input = $autofocus.length > 0
789
+ ? $autofocus.first()
790
+ : ($inputs.length > 1 ? $inputs.filter(':not(i.close)') : $inputs).first()
791
+ ;
792
+ if ($input.length > 0) {
793
+ $input.trigger('focus');
794
+ }
795
+ },
796
+ dimmerStyles: function () {
797
+ if (settings.blurring) {
798
+ $pusher.addClass(className.blurring);
799
+ } else {
800
+ $pusher.removeClass(className.blurring);
801
+ }
802
+ },
803
+ bodyMargin: function () {
804
+ var position = module.can.leftBodyScrollbar() ? 'left' : 'right';
805
+ $context.css((isBody ? 'margin-' : 'padding-') + position, tempBodyMargin + 'px');
806
+ $context.find(selector.bodyFixed.replace('right', position)).each(function () {
807
+ var
808
+ el = $(this),
809
+ attribute = el.css('position') === 'fixed' ? 'padding-' + position : position
810
+ ;
811
+ el.css(attribute, 'calc(' + el.css(attribute) + ' + ' + tempBodyMargin + 'px)');
812
+ });
813
+ },
814
+
815
+ // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios
816
+ // (This is no longer necessary in latest iOS)
817
+ ios: function () {
818
+ $html.addClass(className.ios);
819
+ },
820
+
821
+ // container
822
+ pushed: function () {
823
+ $context.addClass(className.pushed);
824
+ },
825
+ pushable: function () {
826
+ $context.addClass(className.pushable);
827
+ },
828
+
829
+ // pusher
830
+ dimmed: function () {
831
+ $pusher.addClass(className.dimmed);
832
+ },
833
+
834
+ // flyout
835
+ active: function () {
836
+ $module.addClass(className.active);
837
+ },
838
+ animating: function () {
839
+ $module.addClass(className.animating);
840
+ },
841
+ closing: function () {
842
+ $pusher.addClass(className.closing);
843
+ },
844
+ direction: function (direction) {
845
+ direction = direction || module.get.direction();
846
+ $module.addClass(className[direction]);
847
+ },
848
+ visible: function () {
849
+ $module.addClass(className.visible);
850
+ },
851
+ overlay: function () {
852
+ $module.addClass(className.overlay);
853
+ },
854
+ },
855
+ remove: {
856
+
857
+ inlineCSS: function () {
858
+ module.debug('Removing inline css styles', $style);
859
+ if ($style && $style.length > 0) {
860
+ $style.remove();
861
+ }
862
+ },
863
+ keyboardShortcuts: function () {
864
+ module.verbose('Removing keyboard shortcuts');
865
+ $document
866
+ .off('keydown' + eventNamespace)
867
+ ;
868
+ },
869
+
870
+ // ios scroll on html not document
871
+ ios: function () {
872
+ $html.removeClass(className.ios);
873
+ },
874
+
875
+ // context
876
+ pushed: function () {
877
+ $context.removeClass(className.pushed);
878
+ },
879
+ pushable: function () {
880
+ $context.removeClass(className.pushable);
881
+ },
882
+
883
+ // flyout
884
+ active: function () {
885
+ $module.removeClass(className.active);
886
+ },
887
+ animating: function () {
888
+ $module.removeClass(className.animating);
889
+ },
890
+ closing: function () {
891
+ $pusher.removeClass(className.closing);
892
+ },
893
+ direction: function (direction) {
894
+ direction = direction || module.get.direction();
895
+ $module.removeClass(className[direction]);
896
+ },
897
+ visible: function () {
898
+ $module.removeClass(className.visible);
899
+ },
900
+ overlay: function () {
901
+ $module.removeClass(className.overlay);
902
+ },
903
+ },
964
904
 
965
- can: {
966
- leftBodyScrollbar: function () {
967
- if (module.cache.leftBodyScrollbar === undefined) {
968
- module.cache.leftBodyScrollbar = module.is.rtl() && ((module.is.iframe && !module.is.firefox()) || module.is.safari() || module.is.edge() || module.is.ie());
969
- }
970
- return module.cache.leftBodyScrollbar;
971
- }
972
- },
905
+ get: {
906
+ direction: function () {
907
+ if ($module.hasClass(className.top)) {
908
+ return className.top;
909
+ }
910
+ if ($module.hasClass(className.right)) {
911
+ return className.right;
912
+ }
913
+ if ($module.hasClass(className.bottom)) {
914
+ return className.bottom;
915
+ }
916
+
917
+ return className.left;
918
+ },
919
+ transitionEvent: function () {
920
+ var
921
+ element = document.createElement('element'),
922
+ transitions = {
923
+ transition: 'transitionend',
924
+ OTransition: 'oTransitionEnd',
925
+ MozTransition: 'transitionend',
926
+ WebkitTransition: 'webkitTransitionEnd',
927
+ },
928
+ transition
929
+ ;
930
+ for (transition in transitions) {
931
+ if (element.style[transition] !== undefined) {
932
+ return transitions[transition];
933
+ }
934
+ }
935
+ },
936
+ id: function () {
937
+ return id;
938
+ },
939
+ element: function () {
940
+ return $module;
941
+ },
942
+ settings: function () {
943
+ return settings;
944
+ },
945
+ },
973
946
 
974
- save: {
975
- focus: function() {
976
- var
977
- $activeElement = $(document.activeElement),
978
- inCurrentFlyout = $activeElement.closest($module).length > 0
979
- ;
980
- if(!inCurrentFlyout) {
981
- $focusedElement = $(document.activeElement).blur();
947
+ can: {
948
+ leftBodyScrollbar: function () {
949
+ if (module.cache.leftBodyScrollbar === undefined) {
950
+ module.cache.leftBodyScrollbar = module.is.rtl() && ((module.is.iframe && !module.is.firefox()) || module.is.safari() || module.is.edge() || module.is.ie());
951
+ }
952
+
953
+ return module.cache.leftBodyScrollbar;
954
+ },
955
+ },
956
+
957
+ save: {
958
+ focus: function () {
959
+ var
960
+ $activeElement = $(document.activeElement),
961
+ inCurrentFlyout = $activeElement.closest($module).length > 0
962
+ ;
963
+ if (!inCurrentFlyout) {
964
+ $focusedElement = $(document.activeElement).trigger('blur');
965
+ }
966
+ },
967
+ bodyMargin: function () {
968
+ initialBodyMargin = $context.css((isBody ? 'margin-' : 'padding-') + (module.can.leftBodyScrollbar() ? 'left' : 'right'));
969
+ var
970
+ bodyMarginRightPixel = parseInt(initialBodyMargin.replace(/[^\d.]/g, ''), 10),
971
+ bodyScrollbarWidth = isBody ? window.innerWidth - document.documentElement.clientWidth : $context[0].offsetWidth - $context[0].clientWidth
972
+ ;
973
+ tempBodyMargin = bodyMarginRightPixel + bodyScrollbarWidth;
974
+ },
975
+ },
976
+
977
+ is: {
978
+ safari: function () {
979
+ if (module.cache.isSafari === undefined) {
980
+ module.cache.isSafari = /constructor/i.test(window.HTMLElement) || !!window.ApplePaySession;
981
+ }
982
+
983
+ return module.cache.isSafari;
984
+ },
985
+ edge: function () {
986
+ if (module.cache.isEdge === undefined) {
987
+ module.cache.isEdge = !!window.setImmediate && !module.is.ie();
988
+ }
989
+
990
+ return module.cache.isEdge;
991
+ },
992
+ firefox: function () {
993
+ if (module.cache.isFirefox === undefined) {
994
+ module.cache.isFirefox = !!window.InstallTrigger;
995
+ }
996
+
997
+ return module.cache.isFirefox;
998
+ },
999
+ iframe: function () {
1000
+ return !(self === top);
1001
+ },
1002
+ ie: function () {
1003
+ if (module.cache.isIE === undefined) {
1004
+ var
1005
+ isIE11 = !window.ActiveXObject && 'ActiveXObject' in window,
1006
+ isIE = 'ActiveXObject' in window
1007
+ ;
1008
+ module.cache.isIE = isIE11 || isIE;
1009
+ }
1010
+
1011
+ return module.cache.isIE;
1012
+ },
1013
+ ios: function () {
1014
+ var
1015
+ userAgent = navigator.userAgent,
1016
+ isIOS = userAgent.match(regExp.ios),
1017
+ isMobileChrome = userAgent.match(regExp.mobileChrome)
1018
+ ;
1019
+ if (isIOS && !isMobileChrome) {
1020
+ module.verbose('Browser was found to be iOS', userAgent);
1021
+
1022
+ return true;
1023
+ }
1024
+
1025
+ return false;
1026
+ },
1027
+ mobile: function () {
1028
+ var
1029
+ userAgent = navigator.userAgent,
1030
+ isMobile = userAgent.match(regExp.mobile)
1031
+ ;
1032
+ if (isMobile) {
1033
+ module.verbose('Browser was found to be mobile', userAgent);
1034
+
1035
+ return true;
1036
+ }
1037
+
1038
+ module.verbose('Browser is not mobile, using regular transition', userAgent);
1039
+
1040
+ return false;
1041
+ },
1042
+ hidden: function () {
1043
+ return !module.is.visible();
1044
+ },
1045
+ visible: function () {
1046
+ return $module.hasClass(className.visible);
1047
+ },
1048
+ animating: function () {
1049
+ return $context.hasClass(className.animating);
1050
+ },
1051
+ rtl: function () {
1052
+ if (module.cache.isRTL === undefined) {
1053
+ module.cache.isRTL = $module.attr('dir') === 'rtl' || $module.css('direction') === 'rtl' || $body.attr('dir') === 'rtl' || $body.css('direction') === 'rtl' || $context.attr('dir') === 'rtl' || $context.css('direction') === 'rtl';
1054
+ }
1055
+
1056
+ return module.cache.isRTL;
1057
+ },
1058
+ },
1059
+
1060
+ has: {
1061
+ configActions: function () {
1062
+ return Array.isArray(settings.actions) && settings.actions.length > 0;
1063
+ },
1064
+ scrollbar: function () {
1065
+ return isBody || $context.css('overflow-y') !== 'hidden';
1066
+ },
1067
+ },
1068
+
1069
+ restore: {
1070
+ focus: function () {
1071
+ if ($focusedElement && $focusedElement.length > 0 && settings.restoreFocus) {
1072
+ $focusedElement.trigger('focus');
1073
+ }
1074
+ },
1075
+ bodyMargin: function () {
1076
+ var position = module.can.leftBodyScrollbar() ? 'left' : 'right';
1077
+ $context.css((isBody ? 'margin-' : 'padding-') + position, initialBodyMargin);
1078
+ $context.find(selector.bodyFixed.replace('right', position)).each(function () {
1079
+ var
1080
+ el = $(this),
1081
+ attribute = el.css('position') === 'fixed' ? 'padding-' + position : position
1082
+ ;
1083
+ el.css(attribute, '');
1084
+ });
1085
+ },
1086
+ },
1087
+
1088
+ helpers: {
1089
+ deQuote: function (string) {
1090
+ return String(string).replace(/"/g, '');
1091
+ },
1092
+ escape: function (string, preserveHTML) {
1093
+ if (preserveHTML) {
1094
+ return string;
1095
+ }
1096
+ var
1097
+ badChars = /["'<>`]/g,
1098
+ shouldEscape = /["&'<>`]/,
1099
+ escape = {
1100
+ '<': '&lt;',
1101
+ '>': '&gt;',
1102
+ '"': '&quot;',
1103
+ "'": '&#x27;',
1104
+ '`': '&#x60;',
1105
+ },
1106
+ escapedChar = function (chr) {
1107
+ return escape[chr];
1108
+ }
1109
+ ;
1110
+ if (shouldEscape.test(string)) {
1111
+ string = string.replace(/&(?![\d#a-z]{1,12};)/gi, '&amp;');
1112
+
1113
+ return string.replace(badChars, escapedChar);
1114
+ }
1115
+
1116
+ return string;
1117
+ },
1118
+ },
1119
+
1120
+ setting: function (name, value) {
1121
+ module.debug('Changing setting', name, value);
1122
+ if ($.isPlainObject(name)) {
1123
+ $.extend(true, settings, name);
1124
+ } else if (value !== undefined) {
1125
+ if ($.isPlainObject(settings[name])) {
1126
+ $.extend(true, settings[name], value);
1127
+ } else {
1128
+ settings[name] = value;
1129
+ }
1130
+ } else {
1131
+ return settings[name];
1132
+ }
1133
+ },
1134
+ internal: function (name, value) {
1135
+ if ($.isPlainObject(name)) {
1136
+ $.extend(true, module, name);
1137
+ } else if (value !== undefined) {
1138
+ module[name] = value;
1139
+ } else {
1140
+ return module[name];
1141
+ }
1142
+ },
1143
+ debug: function () {
1144
+ if (!settings.silent && settings.debug) {
1145
+ if (settings.performance) {
1146
+ module.performance.log(arguments);
1147
+ } else {
1148
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
1149
+ module.debug.apply(console, arguments);
1150
+ }
1151
+ }
1152
+ },
1153
+ verbose: function () {
1154
+ if (!settings.silent && settings.verbose && settings.debug) {
1155
+ if (settings.performance) {
1156
+ module.performance.log(arguments);
1157
+ } else {
1158
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
1159
+ module.verbose.apply(console, arguments);
1160
+ }
1161
+ }
1162
+ },
1163
+ error: function () {
1164
+ if (!settings.silent) {
1165
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
1166
+ module.error.apply(console, arguments);
1167
+ }
1168
+ },
1169
+ performance: {
1170
+ log: function (message) {
1171
+ var
1172
+ currentTime,
1173
+ executionTime,
1174
+ previousTime
1175
+ ;
1176
+ if (settings.performance) {
1177
+ currentTime = Date.now();
1178
+ previousTime = time || currentTime;
1179
+ executionTime = currentTime - previousTime;
1180
+ time = currentTime;
1181
+ performance.push({
1182
+ Name: message[0],
1183
+ Arguments: [].slice.call(message, 1) || '',
1184
+ Element: element,
1185
+ 'Execution Time': executionTime,
1186
+ });
1187
+ }
1188
+ clearTimeout(module.performance.timer);
1189
+ module.performance.timer = setTimeout(module.performance.display, 500);
1190
+ },
1191
+ display: function () {
1192
+ var
1193
+ title = settings.name + ':',
1194
+ totalTime = 0
1195
+ ;
1196
+ time = false;
1197
+ clearTimeout(module.performance.timer);
1198
+ $.each(performance, function (index, data) {
1199
+ totalTime += data['Execution Time'];
1200
+ });
1201
+ title += ' ' + totalTime + 'ms';
1202
+ if (moduleSelector) {
1203
+ title += ' \'' + moduleSelector + '\'';
1204
+ }
1205
+ if (performance.length > 0) {
1206
+ console.groupCollapsed(title);
1207
+ if (console.table) {
1208
+ console.table(performance);
1209
+ } else {
1210
+ $.each(performance, function (index, data) {
1211
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
1212
+ });
1213
+ }
1214
+ console.groupEnd();
1215
+ }
1216
+ performance = [];
1217
+ },
1218
+ },
1219
+ invoke: function (query, passedArguments, context) {
1220
+ var
1221
+ object = instance,
1222
+ maxDepth,
1223
+ found,
1224
+ response
1225
+ ;
1226
+ passedArguments = passedArguments || queryArguments;
1227
+ context = element || context;
1228
+ if (typeof query === 'string' && object !== undefined) {
1229
+ query = query.split(/[ .]/);
1230
+ maxDepth = query.length - 1;
1231
+ $.each(query, function (depth, value) {
1232
+ var camelCaseValue = depth !== maxDepth
1233
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
1234
+ : query
1235
+ ;
1236
+ if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
1237
+ object = object[camelCaseValue];
1238
+ } else if (object[camelCaseValue] !== undefined) {
1239
+ found = object[camelCaseValue];
1240
+
1241
+ return false;
1242
+ } else if ($.isPlainObject(object[value]) && (depth !== maxDepth)) {
1243
+ object = object[value];
1244
+ } else if (object[value] !== undefined) {
1245
+ found = object[value];
1246
+
1247
+ return false;
1248
+ } else {
1249
+ module.error(error.method, query);
1250
+
1251
+ return false;
1252
+ }
1253
+ });
1254
+ }
1255
+ if (isFunction(found)) {
1256
+ response = found.apply(context, passedArguments);
1257
+ } else if (found !== undefined) {
1258
+ response = found;
1259
+ }
1260
+ if (Array.isArray(returnedValue)) {
1261
+ returnedValue.push(response);
1262
+ } else if (returnedValue !== undefined) {
1263
+ returnedValue = [returnedValue, response];
1264
+ } else if (response !== undefined) {
1265
+ returnedValue = response;
1266
+ }
1267
+
1268
+ return found;
1269
+ },
1270
+ };
1271
+
1272
+ if (methodInvoked) {
1273
+ if (instance === undefined) {
1274
+ if (isFunction(settings.templates[query])) {
1275
+ settings.autoShow = true;
1276
+ settings.className.flyout = settings.className.template;
1277
+ settings = $.extend(true, {}, settings, settings.templates[query].apply(module, queryArguments));
1278
+
1279
+ // reassign shortcuts
1280
+ className = settings.className;
1281
+ namespace = settings.namespace;
1282
+ fields = settings.fields;
1283
+ error = settings.error;
1284
+ }
1285
+ module.initialize();
1286
+ }
1287
+ if (!isFunction(settings.templates[query])) {
1288
+ module.invoke(query);
1289
+ }
1290
+ } else {
1291
+ if (instance !== undefined) {
1292
+ instance.invoke('destroy');
1293
+ }
1294
+ module.initialize();
1295
+ returnedValue = $module;
982
1296
  }
983
- },
984
- bodyMargin: function() {
985
- initialBodyMargin = $context.css((isBody ? 'margin-':'padding-')+(module.can.leftBodyScrollbar() ? 'left':'right'));
986
- var bodyMarginRightPixel = parseInt(initialBodyMargin.replace(/[^\d.]/g, '')),
987
- bodyScrollbarWidth = isBody ? window.innerWidth - document.documentElement.clientWidth : $context[0].offsetWidth - $context[0].clientWidth;
988
- tempBodyMargin = bodyMarginRightPixel + bodyScrollbarWidth;
989
- }
1297
+ });
1298
+
1299
+ return returnedValue !== undefined
1300
+ ? returnedValue
1301
+ : this;
1302
+ };
1303
+ $.flyout = $.fn.flyout;
1304
+
1305
+ $.fn.flyout.settings = {
1306
+
1307
+ name: 'Flyout',
1308
+ namespace: 'flyout',
1309
+
1310
+ silent: false,
1311
+ debug: false,
1312
+ verbose: false,
1313
+ performance: true,
1314
+
1315
+ context: 'body',
1316
+ exclusive: false,
1317
+ closable: true,
1318
+ autofocus: true,
1319
+ restoreFocus: true,
1320
+ dimPage: true,
1321
+ scrollLock: false,
1322
+ returnScroll: false,
1323
+ delaySetup: false,
1324
+ autoShow: false,
1325
+
1326
+ keyboardShortcuts: true,
1327
+
1328
+ // dynamic content
1329
+ title: '',
1330
+ content: '',
1331
+ class: '',
1332
+ classTitle: '',
1333
+ classContent: '',
1334
+ classActions: '',
1335
+ closeIcon: false,
1336
+ actions: false,
1337
+ preserveHTML: true,
1338
+
1339
+ fields: {
1340
+ class: 'class',
1341
+ text: 'text',
1342
+ icon: 'icon',
1343
+ click: 'click',
990
1344
  },
991
1345
 
992
- is: {
993
- safari: function() {
994
- if(module.cache.isSafari === undefined) {
995
- module.cache.isSafari = /constructor/i.test(window.HTMLElement) || !!window.ApplePaySession;
996
- }
997
- return module.cache.isSafari;
998
- },
999
- edge: function(){
1000
- if(module.cache.isEdge === undefined) {
1001
- module.cache.isEdge = !!window.setImmediate && !module.is.ie();
1002
- }
1003
- return module.cache.isEdge;
1004
- },
1005
- firefox: function(){
1006
- if(module.cache.isFirefox === undefined) {
1007
- module.cache.isFirefox = !!window.InstallTrigger;
1008
- }
1009
- return module.cache.isFirefox;
1010
- },
1011
- iframe: function() {
1012
- return !(self === top);
1013
- },
1014
- ie: function() {
1015
- if(module.cache.isIE === undefined) {
1016
- var
1017
- isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),
1018
- isIE = ('ActiveXObject' in window)
1019
- ;
1020
- module.cache.isIE = (isIE11 || isIE);
1021
- }
1022
- return module.cache.isIE;
1023
- },
1024
- ios: function() {
1025
- var
1026
- userAgent = navigator.userAgent,
1027
- isIOS = userAgent.match(regExp.ios),
1028
- isMobileChrome = userAgent.match(regExp.mobileChrome)
1029
- ;
1030
- if(isIOS && !isMobileChrome) {
1031
- module.verbose('Browser was found to be iOS', userAgent);
1032
- return true;
1033
- }
1034
- else {
1035
- return false;
1036
- }
1037
- },
1038
- mobile: function() {
1039
- var
1040
- userAgent = navigator.userAgent,
1041
- isMobile = userAgent.match(regExp.mobile)
1042
- ;
1043
- if(isMobile) {
1044
- module.verbose('Browser was found to be mobile', userAgent);
1045
- return true;
1046
- }
1047
- else {
1048
- module.verbose('Browser is not mobile, using regular transition', userAgent);
1049
- return false;
1050
- }
1051
- },
1052
- hidden: function() {
1053
- return !module.is.visible();
1054
- },
1055
- visible: function() {
1056
- return $module.hasClass(className.visible);
1057
- },
1058
- animating: function() {
1059
- return $context.hasClass(className.animating);
1060
- },
1061
- rtl: function () {
1062
- if(module.cache.isRTL === undefined) {
1063
- module.cache.isRTL = $module.attr('dir') === 'rtl' || $module.css('direction') === 'rtl' || $body.attr('dir') === 'rtl' || $body.css('direction') === 'rtl' || $context.attr('dir') === 'rtl' || $context.css('direction') === 'rtl';
1064
- }
1065
- return module.cache.isRTL;
1066
- }
1346
+ onChange: function () {},
1347
+ onShow: function () {},
1348
+ onHide: function () {
1349
+ return true;
1067
1350
  },
1068
1351
 
1069
- has: {
1070
- configActions: function () {
1071
- return Array.isArray(settings.actions) && settings.actions.length > 0;
1072
- },
1073
- scrollbar: function() {
1074
- return isBody || $context.css('overflow-y') !== 'hidden';
1075
- }
1352
+ onHidden: false,
1353
+ onVisible: function () {},
1354
+
1355
+ onApprove: function () {},
1356
+ onDeny: function () {},
1357
+
1358
+ keys: {
1359
+ space: 32,
1360
+ enter: 13,
1361
+ escape: 27,
1362
+ tab: 9,
1076
1363
  },
1077
1364
 
1078
- restore: {
1079
- focus: function() {
1080
- if($focusedElement && $focusedElement.length > 0 && settings.restoreFocus) {
1081
- $focusedElement.focus();
1082
- }
1083
- },
1084
- bodyMargin: function() {
1085
- var position = module.can.leftBodyScrollbar() ? 'left':'right';
1086
- $context.css((isBody ? 'margin-':'padding-')+position, initialBodyMargin);
1087
- $context.find(selector.bodyFixed.replace('right',position)).each(function(){
1088
- var el = $(this),
1089
- attribute = el.css('position') === 'fixed' ? 'padding-'+position : position
1090
- ;
1091
- el.css(attribute, '');
1092
- });
1093
- }
1365
+ className: {
1366
+ flyout: 'ui flyout',
1367
+ close: 'close icon',
1368
+ header: 'ui header',
1369
+ content: 'content',
1370
+ actions: 'actions',
1371
+ active: 'active',
1372
+ animating: 'animating',
1373
+ blurring: 'blurring',
1374
+ closing: 'closing',
1375
+ dimmed: 'dimmed',
1376
+ ios: 'ios',
1377
+ locked: 'locked',
1378
+ pushable: 'pushable',
1379
+ pushed: 'pushed',
1380
+ right: 'right',
1381
+ top: 'top',
1382
+ left: 'left',
1383
+ bottom: 'bottom',
1384
+ visible: 'visible',
1385
+ overlay: 'overlay',
1386
+ fullscreen: 'fullscreen',
1387
+ template: 'ui flyout',
1388
+ button: 'ui button',
1389
+ ok: 'positive',
1390
+ cancel: 'negative',
1391
+ prompt: 'ui fluid input',
1094
1392
  },
1095
1393
 
1096
- helpers: {
1097
- deQuote: function(string) {
1098
- return String(string).replace(/"/g,"");
1099
- },
1100
- escape: function(string, preserveHTML) {
1101
- if (preserveHTML){
1102
- return string;
1103
- }
1104
- var
1105
- badChars = /[<>"'`]/g,
1106
- shouldEscape = /[&<>"'`]/,
1107
- escape = {
1108
- "<": "&lt;",
1109
- ">": "&gt;",
1110
- '"': "&quot;",
1111
- "'": "&#x27;",
1112
- "`": "&#x60;"
1113
- },
1114
- escapedChar = function(chr) {
1115
- return escape[chr];
1116
- }
1117
- ;
1118
- if(shouldEscape.test(string)) {
1119
- string = string.replace(/&(?![a-z0-9#]{1,12};)/gi, "&amp;");
1120
- return string.replace(badChars, escapedChar);
1121
- }
1122
- return string;
1123
- }
1394
+ selector: {
1395
+ bodyFixed: '> .ui.fixed.menu, > .ui.right.toast-container, > .ui.right.sidebar, > .ui.right.flyout, > .ui.fixed.nag, > .ui.fixed.nag > .close',
1396
+ fixed: '.fixed',
1397
+ omitted: 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',
1398
+ pusher: '.pusher',
1399
+ flyout: '.ui.flyout',
1400
+ header: '.ui.header',
1401
+ content: '.content',
1402
+ actions: '.actions',
1403
+ close: '.close',
1404
+ approve: '.actions .positive, .actions .approve, .actions .ok',
1405
+ deny: '.actions .negative, .actions .deny, .actions .cancel',
1124
1406
  },
1125
1407
 
1126
- setting: function(name, value) {
1127
- module.debug('Changing setting', name, value);
1128
- if( $.isPlainObject(name) ) {
1129
- $.extend(true, settings, name);
1130
- }
1131
- else if(value !== undefined) {
1132
- if($.isPlainObject(settings[name])) {
1133
- $.extend(true, settings[name], value);
1134
- }
1135
- else {
1136
- settings[name] = value;
1137
- }
1138
- }
1139
- else {
1140
- return settings[name];
1141
- }
1408
+ regExp: {
1409
+ ios: /(iPad|iPhone|iPod)/g,
1410
+ mobileChrome: /(CriOS)/g,
1411
+ mobile: /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g,
1142
1412
  },
1143
- internal: function(name, value) {
1144
- if( $.isPlainObject(name) ) {
1145
- $.extend(true, module, name);
1146
- }
1147
- else if(value !== undefined) {
1148
- module[name] = value;
1149
- }
1150
- else {
1151
- return module[name];
1152
- }
1413
+
1414
+ error: {
1415
+ method: 'The method you called is not defined.',
1416
+ pusher: 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',
1417
+ movedFlyout: 'Had to move flyout. For optimal performance make sure flyout and pusher are direct children of your body tag',
1418
+ notFound: 'There were no elements that matched the specified selector',
1153
1419
  },
1154
- debug: function() {
1155
- if(!settings.silent && settings.debug) {
1156
- if(settings.performance) {
1157
- module.performance.log(arguments);
1158
- }
1159
- else {
1160
- module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
1161
- module.debug.apply(console, arguments);
1162
- }
1163
- }
1420
+
1421
+ text: {
1422
+ ok: 'Ok',
1423
+ cancel: 'Cancel',
1424
+ close: 'Close',
1164
1425
  },
1165
- verbose: function() {
1166
- if(!settings.silent && settings.verbose && settings.debug) {
1167
- if(settings.performance) {
1168
- module.performance.log(arguments);
1426
+ };
1427
+
1428
+ $.fn.flyout.settings.templates = {
1429
+ getArguments: function (args) {
1430
+ var queryArguments = [].slice.call(args);
1431
+ if ($.isPlainObject(queryArguments[0])) {
1432
+ return $.extend({
1433
+ handler: function () {},
1434
+ content: '',
1435
+ title: '',
1436
+ }, queryArguments[0]);
1169
1437
  }
1170
- else {
1171
- module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
1172
- module.verbose.apply(console, arguments);
1438
+ if (!isFunction(queryArguments[queryArguments.length - 1])) {
1439
+ queryArguments.push(function () {});
1173
1440
  }
1174
- }
1441
+
1442
+ return {
1443
+ handler: queryArguments.pop(),
1444
+ content: queryArguments.pop() || '',
1445
+ title: queryArguments.pop() || '',
1446
+ };
1175
1447
  },
1176
- error: function() {
1177
- if(!settings.silent) {
1178
- module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
1179
- module.error.apply(console, arguments);
1180
- }
1448
+ alert: function () {
1449
+ var
1450
+ settings = this.get.settings(),
1451
+ args = settings.templates.getArguments(arguments)
1452
+ ;
1453
+
1454
+ return {
1455
+ title: args.title,
1456
+ content: args.content,
1457
+ actions: [{
1458
+ text: settings.text.ok,
1459
+ class: settings.className.ok,
1460
+ click: args.handler,
1461
+ }],
1462
+ };
1181
1463
  },
1182
- performance: {
1183
- log: function(message) {
1464
+ confirm: function () {
1184
1465
  var
1185
- currentTime,
1186
- executionTime,
1187
- previousTime
1466
+ settings = this.get.settings(),
1467
+ args = settings.templates.getArguments(arguments)
1188
1468
  ;
1189
- if(settings.performance) {
1190
- currentTime = new Date().getTime();
1191
- previousTime = time || currentTime;
1192
- executionTime = currentTime - previousTime;
1193
- time = currentTime;
1194
- performance.push({
1195
- 'Name' : message[0],
1196
- 'Arguments' : [].slice.call(message, 1) || '',
1197
- 'Element' : element,
1198
- 'Execution Time' : executionTime
1199
- });
1200
- }
1201
- clearTimeout(module.performance.timer);
1202
- module.performance.timer = setTimeout(module.performance.display, 500);
1203
- },
1204
- display: function() {
1469
+
1470
+ return {
1471
+ title: args.title,
1472
+ content: args.content,
1473
+ actions: [{
1474
+ text: settings.text.ok,
1475
+ class: settings.className.ok,
1476
+ click: function () {
1477
+ args.handler(true);
1478
+ },
1479
+ }, {
1480
+ text: settings.text.cancel,
1481
+ class: settings.className.cancel,
1482
+ click: function () {
1483
+ args.handler(false);
1484
+ },
1485
+ }],
1486
+ };
1487
+ },
1488
+ prompt: function () {
1205
1489
  var
1206
- title = settings.name + ':',
1207
- totalTime = 0
1490
+ $this = this,
1491
+ settings = this.get.settings(),
1492
+ args = settings.templates.getArguments(arguments),
1493
+ input = $($.parseHTML(args.content)).filter('.ui.input')
1208
1494
  ;
1209
- time = false;
1210
- clearTimeout(module.performance.timer);
1211
- $.each(performance, function(index, data) {
1212
- totalTime += data['Execution Time'];
1213
- });
1214
- title += ' ' + totalTime + 'ms';
1215
- if(moduleSelector) {
1216
- title += ' \'' + moduleSelector + '\'';
1217
- }
1218
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
1219
- console.groupCollapsed(title);
1220
- if(console.table) {
1221
- console.table(performance);
1222
- }
1223
- else {
1224
- $.each(performance, function(index, data) {
1225
- console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
1226
- });
1227
- }
1228
- console.groupEnd();
1495
+ if (input.length === 0) {
1496
+ args.content += '<p><div class="' + settings.className.prompt + '"><input placeholder="' + this.helpers.deQuote(args.placeholder || '') + '" type="text" value="' + this.helpers.deQuote(args.defaultValue || '') + '"></div></p>';
1229
1497
  }
1230
- performance = [];
1231
- }
1232
- },
1233
- invoke: function(query, passedArguments, context) {
1234
- var
1235
- object = instance,
1236
- maxDepth,
1237
- found,
1238
- response
1239
- ;
1240
- passedArguments = passedArguments || queryArguments;
1241
- context = element || context;
1242
- if(typeof query == 'string' && object !== undefined) {
1243
- query = query.split(/[\. ]/);
1244
- maxDepth = query.length - 1;
1245
- $.each(query, function(depth, value) {
1246
- var camelCaseValue = (depth != maxDepth)
1247
- ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
1248
- : query
1249
- ;
1250
- if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
1251
- object = object[camelCaseValue];
1252
- }
1253
- else if( object[camelCaseValue] !== undefined ) {
1254
- found = object[camelCaseValue];
1255
- return false;
1256
- }
1257
- else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
1258
- object = object[value];
1259
- }
1260
- else if( object[value] !== undefined ) {
1261
- found = object[value];
1262
- return false;
1263
- }
1264
- else {
1265
- module.error(error.method, query);
1266
- return false;
1267
- }
1268
- });
1269
- }
1270
- if ( $.isFunction( found ) ) {
1271
- response = found.apply(context, passedArguments);
1272
- }
1273
- else if(found !== undefined) {
1274
- response = found;
1275
- }
1276
- if(Array.isArray(returnedValue)) {
1277
- returnedValue.push(response);
1278
- }
1279
- else if(returnedValue !== undefined) {
1280
- returnedValue = [returnedValue, response];
1281
- }
1282
- else if(response !== undefined) {
1283
- returnedValue = response;
1284
- }
1285
- return found;
1286
- }
1287
- }
1288
- ;
1289
-
1290
- if(methodInvoked) {
1291
- if(instance === undefined) {
1292
- if ($.isFunction(settings.templates[query])) {
1293
- settings.autoShow = true;
1294
- settings.className.flyout = settings.className.template;
1295
- settings = $.extend(true, {}, settings, settings.templates[query].apply(module ,queryArguments));
1296
-
1297
- // reassign shortcuts
1298
- className = settings.className;
1299
- namespace = settings.namespace;
1300
- fields = settings.fields;
1301
- error = settings.error;
1302
- }
1303
- module.initialize();
1304
- }
1305
- if (!$.isFunction(settings.templates[query])) {
1306
- module.invoke(query);
1307
- }
1308
- }
1309
- else {
1310
- if(instance !== undefined) {
1311
- instance.invoke('destroy');
1312
- }
1313
- module.initialize();
1314
- returnedValue = $module;
1315
- }
1316
- });
1317
-
1318
- return (returnedValue !== undefined)
1319
- ? returnedValue
1320
- : this
1321
- ;
1322
- };
1323
-
1324
- $.fn.flyout.settings = {
1325
-
1326
- name : 'Flyout',
1327
- namespace : 'flyout',
1328
-
1329
- silent : false,
1330
- debug : false,
1331
- verbose : false,
1332
- performance : true,
1333
-
1334
- context : 'body',
1335
- exclusive : false,
1336
- closable : true,
1337
- autofocus : true,
1338
- restoreFocus : true,
1339
- dimPage : true,
1340
- scrollLock : false,
1341
- returnScroll : false,
1342
- delaySetup : false,
1343
- autoShow : false,
1344
-
1345
- keyboardShortcuts: true,
1346
-
1347
- //dynamic content
1348
- title : '',
1349
- content : '',
1350
- class : '',
1351
- classTitle : '',
1352
- classContent : '',
1353
- classActions : '',
1354
- closeIcon : false,
1355
- actions : false,
1356
- preserveHTML : true,
1357
-
1358
- fields : {
1359
- class : 'class',
1360
- text : 'text',
1361
- icon : 'icon',
1362
- click : 'click'
1363
- },
1364
-
1365
- onChange : function(){},
1366
- onShow : function(){},
1367
- onHide : function(){ return true; },
1368
-
1369
- onHidden : false,
1370
- onVisible : function(){},
1371
-
1372
- onApprove : function(){},
1373
- onDeny : function(){},
1374
-
1375
- keys : {
1376
- space : 32,
1377
- enter : 13,
1378
- escape : 27,
1379
- tab : 9,
1380
- },
1381
-
1382
- className : {
1383
- flyout : 'ui flyout',
1384
- close : 'close icon',
1385
- header : 'ui header',
1386
- content : 'content',
1387
- actions : 'actions',
1388
- active : 'active',
1389
- animating : 'animating',
1390
- blurring : 'blurring',
1391
- closing : 'closing',
1392
- dimmed : 'dimmed',
1393
- ios : 'ios',
1394
- locked : 'locked',
1395
- pushable : 'pushable',
1396
- pushed : 'pushed',
1397
- right : 'right',
1398
- top : 'top',
1399
- left : 'left',
1400
- bottom : 'bottom',
1401
- visible : 'visible',
1402
- overlay : 'overlay',
1403
- fullscreen : 'fullscreen',
1404
- template : 'ui flyout',
1405
- button : 'ui button',
1406
- ok : 'positive',
1407
- cancel : 'negative',
1408
- prompt : 'ui fluid input'
1409
- },
1410
-
1411
- selector: {
1412
- bodyFixed: '> .ui.fixed.menu, > .ui.right.toast-container, > .ui.right.sidebar, > .ui.right.flyout, > .ui.fixed.nag, > .ui.fixed.nag > .close',
1413
- fixed : '.fixed',
1414
- omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',
1415
- pusher : '.pusher',
1416
- flyout : '.ui.flyout',
1417
- header : '.ui.header',
1418
- content : '.content',
1419
- actions : '.actions',
1420
- close : '.close',
1421
- approve : '.actions .positive, .actions .approve, .actions .ok',
1422
- deny : '.actions .negative, .actions .deny, .actions .cancel'
1423
- },
1424
-
1425
- regExp: {
1426
- ios : /(iPad|iPhone|iPod)/g,
1427
- mobileChrome : /(CriOS)/g,
1428
- mobile : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g
1429
- },
1430
-
1431
- error : {
1432
- method : 'The method you called is not defined.',
1433
- pusher : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',
1434
- movedFlyout : 'Had to move flyout. For optimal performance make sure flyout and pusher are direct children of your body tag',
1435
- notFound : 'There were no elements that matched the specified selector'
1436
- },
1437
-
1438
- text: {
1439
- ok : 'Ok',
1440
- cancel : 'Cancel',
1441
- close : 'Close'
1442
- }
1443
- };
1444
-
1445
- $.fn.flyout.settings.templates = {
1446
- getArguments: function(args) {
1447
- var queryArguments = [].slice.call(args);
1448
- if($.isPlainObject(queryArguments[0])){
1449
- return $.extend({
1450
- handler:function(){},
1451
- content:'',
1452
- title: ''
1453
- }, queryArguments[0]);
1454
- } else {
1455
- if(!$.isFunction(queryArguments[queryArguments.length-1])) {
1456
- queryArguments.push(function() {});
1457
- }
1458
- return {
1459
- handler: queryArguments.pop(),
1460
- content: queryArguments.pop() || '',
1461
- title: queryArguments.pop() || ''
1462
- };
1463
- }
1464
- },
1465
- alert: function () {
1466
- var
1467
- settings = this.get.settings(),
1468
- args = settings.templates.getArguments(arguments)
1469
- ;
1470
- return {
1471
- title : args.title,
1472
- content: args.content,
1473
- actions: [{
1474
- text : settings.text.ok,
1475
- class: settings.className.ok,
1476
- click: args.handler
1477
- }]
1478
- }
1479
- },
1480
- confirm: function () {
1481
- var
1482
- settings = this.get.settings(),
1483
- args = settings.templates.getArguments(arguments)
1484
- ;
1485
- return {
1486
- title : args.title,
1487
- content: args.content,
1488
- actions: [{
1489
- text : settings.text.ok,
1490
- class: settings.className.ok,
1491
- click: function(){args.handler(true)}
1492
- },{
1493
- text: settings.text.cancel,
1494
- class: settings.className.cancel,
1495
- click: function(){args.handler(false)}
1496
- }]
1497
- }
1498
- },
1499
- prompt: function () {
1500
- var
1501
- $this = this,
1502
- settings = this.get.settings(),
1503
- args = settings.templates.getArguments(arguments),
1504
- input = $($.parseHTML(args.content)).filter('.ui.input')
1505
- ;
1506
- if (input.length === 0) {
1507
- args.content += '<p><div class="'+settings.className.prompt+'"><input placeholder="'+this.helpers.deQuote(args.placeholder || '')+'" type="text" value="'+this.helpers.deQuote(args.defaultValue || '')+'"></div></p>';
1508
- }
1509
- return {
1510
- title : args.title,
1511
- content: args.content,
1512
- actions: [{
1513
- text: settings.text.ok,
1514
- class: settings.className.ok,
1515
- click: function(){
1516
- var settings = $this.get.settings(),
1517
- inputField = $this.get.element().find(settings.selector.prompt)[0]
1518
- ;
1519
- args.handler($(inputField).val());
1520
- }
1521
- },{
1522
- text: settings.text.cancel,
1523
- class: settings.className.cancel,
1524
- click: function(){args.handler(null)}
1525
- }]
1526
- }
1527
- }
1528
- };
1529
1498
 
1530
- })( jQuery, window, document );
1499
+ return {
1500
+ title: args.title,
1501
+ content: args.content,
1502
+ actions: [{
1503
+ text: settings.text.ok,
1504
+ class: settings.className.ok,
1505
+ click: function () {
1506
+ var
1507
+ settings = $this.get.settings(),
1508
+ inputField = $this.get.element().find(settings.selector.prompt)[0]
1509
+ ;
1510
+ args.handler($(inputField).val());
1511
+ },
1512
+ }, {
1513
+ text: settings.text.cancel,
1514
+ class: settings.className.cancel,
1515
+ click: function () {
1516
+ args.handler(null);
1517
+ },
1518
+ }],
1519
+ };
1520
+ },
1521
+ };
1522
+ })(jQuery, window, document);