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