@ulu/frontend 0.1.0-beta.9 → 0.1.0-beta.90
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.
- package/CHANGELOG.md +606 -0
- package/README.dev.md +3 -3
- package/README.md +14 -4
- package/dist/ulu-frontend.min.css +1 -1
- package/dist/ulu-frontend.min.js +36 -29
- package/docs-dev/.nojekyll +1 -0
- package/docs-dev/assets/main.js +8290 -635
- package/docs-dev/assets/placeholder/icon-calendar.svg +1 -0
- package/docs-dev/assets/placeholder/icon-check.svg +1 -0
- package/docs-dev/assets/style.css +789 -338
- package/docs-dev/changelog/index.html +6985 -0
- package/docs-dev/demos/accordion/index.html +1126 -334
- package/docs-dev/demos/badge/index.html +5535 -0
- package/docs-dev/demos/basic-hero/index.html +111 -0
- package/docs-dev/demos/breakpoints-manager/index.html +5546 -0
- package/docs-dev/demos/button/index.html +1172 -338
- package/docs-dev/demos/button-group/index.html +5532 -0
- package/docs-dev/demos/button-verbose/index.html +5538 -0
- package/docs-dev/demos/callout/index.html +1177 -344
- package/docs-dev/demos/captioned-figure/index.html +1120 -327
- package/docs-dev/demos/card/index.html +1186 -754
- package/docs-dev/demos/card-grid/index.html +5657 -0
- package/docs-dev/demos/counter-list/index.html +5540 -0
- package/docs-dev/demos/css-icons/index.html +1148 -332
- package/docs-dev/demos/data-grid/index.html +1120 -327
- package/docs-dev/demos/data-table/index.html +1298 -372
- package/docs-dev/demos/details-group/index.html +5567 -0
- package/docs-dev/demos/file-save/index.html +1120 -327
- package/docs-dev/demos/flipcard/index.html +1120 -327
- package/docs-dev/demos/form-theme/index.html +1144 -364
- package/docs-dev/demos/headline-label/index.html +5502 -0
- package/docs-dev/demos/hero/index.html +12 -4
- package/docs-dev/demos/image-grid/index.html +12 -4
- package/docs-dev/demos/index.html +1121 -328
- package/docs-dev/demos/list-inline/index.html +1120 -327
- package/docs-dev/demos/list-lines/index.html +1120 -327
- package/docs-dev/demos/menu-stack/index.html +1159 -351
- package/docs-dev/demos/modals/index.html +1259 -343
- package/docs-dev/demos/nav-strip/index.html +1120 -327
- package/docs-dev/demos/overlay-section/index.html +1205 -342
- package/docs-dev/demos/panel/index.html +5562 -0
- package/docs-dev/demos/popovers/index.html +1368 -333
- package/docs-dev/demos/print/index.html +1120 -327
- package/docs-dev/demos/pull-quote/index.html +1120 -327
- package/docs-dev/demos/rail/index.html +5598 -0
- package/docs-dev/demos/rule/index.html +1137 -332
- package/docs-dev/demos/scroll-slider/index.html +72 -106
- package/docs-dev/demos/scrollpoints/index.html +1121 -328
- package/docs-dev/demos/slider/index.html +12 -4
- package/docs-dev/demos/spoke-spinner/index.html +1120 -327
- package/docs-dev/demos/{list-inline.1 → sticky-list}/index.html +1159 -363
- package/docs-dev/demos/tabs/index.html +1156 -327
- package/docs-dev/demos/tag/index.html +1120 -327
- package/docs-dev/demos/theme-toggle/index.html +5579 -0
- package/docs-dev/demos/tile-grid-overlay/index.html +12 -4
- package/docs-dev/demos/tiles/index.html +1120 -327
- package/docs-dev/demos/tooltip/index.html +1120 -327
- package/docs-dev/demos/wysiwyg/index.html +5552 -0
- package/docs-dev/guide/building-stylesheet/index.html +1120 -327
- package/docs-dev/guide/developing-ulu-scss-module/index.html +1120 -327
- package/docs-dev/guide/index.html +1120 -327
- package/docs-dev/index.html +1120 -327
- package/docs-dev/javascript/events/index.html +1158 -327
- package/docs-dev/javascript/index.html +1120 -327
- package/docs-dev/javascript/settings/index.html +5705 -0
- package/docs-dev/javascript/ui-breakpoints/index.html +1134 -343
- package/docs-dev/javascript/ui-collapsible/index.html +1119 -328
- package/docs-dev/javascript/ui-details-group/index.html +5622 -0
- package/docs-dev/javascript/ui-dialog/index.html +1151 -345
- package/docs-dev/javascript/ui-flipcard/index.html +1180 -333
- package/docs-dev/javascript/ui-grid/index.html +1130 -365
- package/docs-dev/javascript/ui-modal-builder/index.html +1303 -372
- package/docs-dev/javascript/ui-overflow-scroller/index.html +1119 -328
- package/docs-dev/javascript/ui-overflow-scroller-pager/index.html +1119 -328
- package/docs-dev/javascript/ui-page/index.html +1119 -328
- package/docs-dev/javascript/ui-popover/index.html +1129 -342
- package/docs-dev/javascript/ui-print/index.html +1117 -334
- package/docs-dev/javascript/ui-print-details/index.html +1119 -328
- package/docs-dev/javascript/ui-programmatic-modal/index.html +1119 -328
- package/docs-dev/javascript/ui-proxy-click/index.html +1208 -332
- package/docs-dev/javascript/ui-resizer/index.html +1400 -344
- package/docs-dev/javascript/ui-scroll-slider/index.html +1159 -336
- package/docs-dev/javascript/ui-scrollpoint/index.html +1129 -345
- package/docs-dev/javascript/ui-slider/index.html +1317 -335
- package/docs-dev/javascript/ui-tabs/index.html +1138 -384
- package/docs-dev/javascript/ui-theme-toggle/index.html +5710 -0
- package/docs-dev/javascript/ui-tooltip/index.html +1136 -349
- package/docs-dev/javascript/utils-class-logger/index.html +1120 -329
- package/docs-dev/javascript/utils-css/index.html +5524 -0
- package/docs-dev/javascript/utils-dom/index.html +1153 -442
- package/docs-dev/javascript/utils-file-save/index.html +1119 -328
- package/docs-dev/javascript/utils-floating-ui/index.html +1119 -328
- package/docs-dev/javascript/utils-id/index.html +1119 -328
- package/docs-dev/javascript/utils-pause-youtube-video/index.html +1119 -328
- package/docs-dev/javascript/utils-system/index.html +5827 -0
- package/docs-dev/sass/base/color/index.html +1119 -328
- package/docs-dev/sass/base/elements/index.html +1127 -336
- package/docs-dev/sass/base/index/index.html +1119 -328
- package/docs-dev/sass/base/index.html +1120 -327
- package/docs-dev/sass/base/keyframes/index.html +1120 -329
- package/docs-dev/sass/base/layout/index.html +1119 -328
- package/docs-dev/sass/base/normalize/index.html +1119 -328
- package/docs-dev/sass/base/print/index.html +1119 -328
- package/docs-dev/sass/base/root/index.html +1119 -328
- package/docs-dev/sass/base/typography/index.html +1119 -328
- package/docs-dev/sass/components/accordion/index.html +1142 -344
- package/docs-dev/sass/components/adaptive-spacing/index.html +1119 -328
- package/docs-dev/sass/components/badge/index.html +1145 -343
- package/docs-dev/sass/components/basic-hero/index.html +5685 -0
- package/docs-dev/sass/components/button/index.html +1119 -328
- package/docs-dev/sass/components/button-group/index.html +5683 -0
- package/docs-dev/sass/components/button-verbose/index.html +1205 -339
- package/docs-dev/sass/components/callout/index.html +1224 -414
- package/docs-dev/sass/components/captioned-figure/index.html +1243 -337
- package/docs-dev/sass/components/card/index.html +1215 -352
- package/docs-dev/sass/components/card-grid/index.html +1119 -328
- package/docs-dev/sass/components/counter-list/index.html +5767 -0
- package/docs-dev/sass/components/css-icon/index.html +1140 -342
- package/docs-dev/sass/components/data-grid/index.html +1139 -341
- package/docs-dev/sass/components/data-table/index.html +1327 -346
- package/docs-dev/sass/components/fill-context/index.html +1119 -328
- package/docs-dev/sass/components/flipcard/index.html +1161 -339
- package/docs-dev/sass/components/flipcard-grid/index.html +1119 -328
- package/docs-dev/sass/components/form-theme/index.html +1334 -447
- package/docs-dev/sass/components/headline-label/index.html +5713 -0
- package/docs-dev/sass/components/hero/index.html +1179 -340
- package/docs-dev/sass/components/horizontal-rule/index.html +1119 -328
- package/docs-dev/sass/components/image-grid/index.html +1119 -328
- package/docs-dev/sass/components/index/index.html +1136 -338
- package/docs-dev/sass/components/index.html +1120 -327
- package/docs-dev/sass/components/links/index.html +1119 -328
- package/docs-dev/sass/components/list-inline/index.html +1119 -328
- package/docs-dev/sass/components/list-lines/index.html +1119 -328
- package/docs-dev/sass/components/list-ordered/index.html +1119 -328
- package/docs-dev/sass/components/list-unordered/index.html +1119 -328
- package/docs-dev/sass/components/menu-stack/index.html +1156 -352
- package/docs-dev/sass/components/modal/index.html +1173 -347
- package/docs-dev/sass/components/nav-strip/index.html +1127 -336
- package/docs-dev/sass/components/overlay-section/index.html +1127 -336
- package/docs-dev/sass/components/pager/index.html +1119 -328
- package/docs-dev/sass/components/panel/index.html +5913 -0
- package/docs-dev/sass/components/placeholder-block/index.html +1119 -328
- package/docs-dev/sass/components/popover/index.html +1179 -352
- package/docs-dev/sass/components/pull-quote/index.html +1131 -340
- package/docs-dev/sass/components/rail/index.html +5700 -0
- package/docs-dev/sass/components/ratio-box/index.html +1127 -336
- package/docs-dev/sass/components/rule/index.html +1120 -329
- package/docs-dev/sass/components/scroll-slider/index.html +1129 -350
- package/docs-dev/sass/components/skip-link/index.html +1119 -328
- package/docs-dev/sass/components/slider/index.html +1173 -394
- package/docs-dev/sass/components/spoke-spinner/index.html +1121 -330
- package/docs-dev/sass/components/sticky-list/index.html +5903 -0
- package/docs-dev/sass/components/table-sticky/index.html +5677 -0
- package/docs-dev/sass/components/tabs/index.html +1154 -348
- package/docs-dev/sass/components/tag/index.html +1121 -330
- package/docs-dev/sass/components/tile-button/index.html +1119 -328
- package/docs-dev/sass/components/tile-grid/index.html +1119 -328
- package/docs-dev/sass/components/tile-grid-overlay/index.html +1119 -328
- package/docs-dev/sass/components/vignette/index.html +1131 -334
- package/docs-dev/sass/components/wysiwyg/index.html +1159 -350
- package/docs-dev/sass/core/breakpoint/index.html +1212 -369
- package/docs-dev/sass/core/button/index.html +1151 -358
- package/docs-dev/sass/core/color/index.html +1291 -368
- package/docs-dev/sass/core/cssvar/index.html +1119 -328
- package/docs-dev/sass/core/element/index.html +1440 -367
- package/docs-dev/sass/core/index.html +1119 -328
- package/docs-dev/sass/core/layout/index.html +1173 -363
- package/docs-dev/sass/core/path/index.html +1119 -328
- package/docs-dev/sass/core/selector/index.html +1119 -328
- package/docs-dev/sass/core/typography/index.html +1119 -328
- package/docs-dev/sass/core/units/index.html +1127 -330
- package/docs-dev/sass/core/utils/index.html +2389 -449
- package/docs-dev/sass/helpers/color/index.html +1119 -328
- package/docs-dev/sass/helpers/display/index.html +1120 -329
- package/docs-dev/sass/helpers/index/index.html +1119 -328
- package/docs-dev/sass/helpers/index.html +1120 -327
- package/docs-dev/sass/helpers/print/index.html +759 -298
- package/docs-dev/sass/helpers/typography/index.html +1119 -328
- package/docs-dev/sass/helpers/units/index.html +1119 -328
- package/docs-dev/sass/helpers/utilities/index.html +1121 -330
- package/docs-dev/sass/index.html +1120 -327
- package/js/events/index.js +17 -5
- package/js/index.js +1 -0
- package/js/settings.js +97 -0
- package/js/ui/breakpoints.js +19 -16
- package/js/ui/collapsible.js +8 -1
- package/js/ui/details-group.js +112 -0
- package/js/ui/dialog.js +103 -44
- package/js/ui/dialog.todo +2 -36
- package/js/ui/flipcard.js +37 -57
- package/js/ui/grid.js +15 -13
- package/js/ui/index.js +1 -0
- package/js/ui/modal-builder.js +127 -70
- package/js/ui/overflow-scroller.js +6 -4
- package/js/ui/page.js +2 -2
- package/js/ui/popover.js +38 -38
- package/js/ui/print.js +16 -25
- package/js/ui/programmatic-modal.js +9 -3
- package/js/ui/proxy-click.js +50 -36
- package/js/ui/resizer.js +408 -39
- package/js/ui/scroll-slider.js +24 -30
- package/js/ui/scrollpoint.js +29 -64
- package/js/ui/slider.js +108 -63
- package/js/ui/tabs.js +23 -36
- package/js/ui/theme-toggle.js +332 -94
- package/js/ui/tooltip.js +27 -32
- package/js/utils/class-logger.js +3 -3
- package/js/utils/css.js +13 -0
- package/js/utils/dom.js +23 -64
- package/js/utils/font-awesome.js +19 -0
- package/js/utils/index.js +2 -1
- package/js/utils/system.js +155 -0
- package/package.json +23 -8
- package/scss/README.md +4 -0
- package/scss/_breakpoint.scss +39 -5
- package/scss/_button.scss +7 -5
- package/scss/_color.scss +40 -9
- package/scss/_element.scss +124 -2
- package/scss/_layout.scss +7 -8
- package/scss/_units.scss +3 -2
- package/scss/_utils.scss +387 -16
- package/scss/base/_elements.scss +0 -1
- package/scss/base/_keyframes.scss +10 -0
- package/scss/base/_layout.scss +1 -0
- package/scss/base/_print.scss +2 -0
- package/scss/base/_root.scss +2 -0
- package/scss/components/README.todos +14 -0
- package/scss/components/_accordion.scss +33 -19
- package/scss/components/_badge.scss +23 -4
- package/scss/components/_basic-hero.scss +112 -0
- package/scss/components/_button-group.scss +90 -0
- package/scss/components/_button-verbose.scss +100 -18
- package/scss/components/_callout.scss +125 -78
- package/scss/components/_captioned-figure.scss +17 -0
- package/scss/components/_card-grid.scss +1 -1
- package/scss/components/_card.scss +228 -66
- package/scss/components/_counter-list.scss +151 -0
- package/scss/components/_css-icon.scss +35 -21
- package/scss/components/_data-grid.scss +55 -12
- package/scss/components/_data-table.scss +39 -3
- package/scss/components/_flipcard.scss +8 -3
- package/scss/components/_form-theme.scss +119 -108
- package/scss/components/_headline-label.scss +83 -0
- package/scss/components/_hero.scss +12 -10
- package/scss/components/_index.scss +42 -0
- package/scss/components/_menu-stack.scss +42 -26
- package/scss/components/_modal.scss +58 -29
- package/scss/components/_nav-strip.scss +2 -0
- package/scss/components/_overlay-section.scss +2 -5
- package/scss/components/_panel.scss +246 -0
- package/scss/components/_popover.scss +165 -64
- package/scss/components/_pull-quote.scss +13 -13
- package/scss/components/_rail.scss +120 -0
- package/scss/components/_ratio-box.scss +2 -5
- package/scss/components/_rule.scss +1 -0
- package/scss/components/_scroll-slider.scss +1 -5
- package/scss/components/_slider.scss +49 -72
- package/scss/components/_spoke-spinner.scss +2 -2
- package/scss/components/_sticky-list.scss +206 -0
- package/scss/components/_tabs.scss +22 -4
- package/scss/components/_vignette.scss +3 -5
- package/scss/components/_wysiwyg.scss +21 -13
- package/scss/helpers/_display.scss +15 -18
- package/scss/helpers/_print.scss +12 -7
- package/scss/helpers/_utilities.scss +42 -32
- package/types/events/index.d.ts +10 -1
- package/types/events/index.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/settings.d.ts +70 -0
- package/types/settings.d.ts.map +1 -0
- package/types/ui/breakpoints.d.ts +14 -14
- package/types/ui/breakpoints.d.ts.map +1 -1
- package/types/ui/collapsible.d.ts.map +1 -1
- package/types/ui/details-group.d.ts +38 -0
- package/types/ui/details-group.d.ts.map +1 -0
- package/types/ui/dialog.d.ts +20 -14
- package/types/ui/dialog.d.ts.map +1 -1
- package/types/ui/flipcard.d.ts +16 -10
- package/types/ui/flipcard.d.ts.map +1 -1
- package/types/ui/grid.d.ts +4 -6
- package/types/ui/grid.d.ts.map +1 -1
- package/types/ui/index.d.ts +2 -1
- package/types/ui/modal-builder.d.ts +116 -11
- package/types/ui/modal-builder.d.ts.map +1 -1
- package/types/ui/overflow-scroller.d.ts +2 -2
- package/types/ui/overflow-scroller.d.ts.map +1 -1
- package/types/ui/popover.d.ts +6 -7
- package/types/ui/popover.d.ts.map +1 -1
- package/types/ui/print.d.ts +0 -4
- package/types/ui/print.d.ts.map +1 -1
- package/types/ui/programmatic-modal.d.ts.map +1 -1
- package/types/ui/proxy-click.d.ts +19 -3
- package/types/ui/proxy-click.d.ts.map +1 -1
- package/types/ui/resizer.d.ts +116 -16
- package/types/ui/resizer.d.ts.map +1 -1
- package/types/ui/scroll-slider.d.ts +5 -7
- package/types/ui/scroll-slider.d.ts.map +1 -1
- package/types/ui/scrollpoint.d.ts +3 -8
- package/types/ui/scrollpoint.d.ts.map +1 -1
- package/types/ui/slider.d.ts +33 -14
- package/types/ui/slider.d.ts.map +1 -1
- package/types/ui/tabs.d.ts +6 -8
- package/types/ui/tabs.d.ts.map +1 -1
- package/types/ui/theme-toggle.d.ts +51 -7
- package/types/ui/theme-toggle.d.ts.map +1 -1
- package/types/ui/tooltip.d.ts +3 -5
- package/types/ui/tooltip.d.ts.map +1 -1
- package/types/utils/css.d.ts +11 -0
- package/types/utils/css.d.ts.map +1 -0
- package/types/utils/dom.d.ts +12 -32
- package/types/utils/dom.d.ts.map +1 -1
- package/types/utils/font-awesome.d.ts +5 -0
- package/types/utils/font-awesome.d.ts.map +1 -0
- package/types/utils/index.d.ts +2 -1
- package/types/utils/system.d.ts +113 -0
- package/types/utils/system.d.ts.map +1 -0
package/js/events/index.js
CHANGED
|
@@ -21,30 +21,31 @@ const events = {
|
|
|
21
21
|
* - Is triggered by modules that were responsible for modifying the page
|
|
22
22
|
*/
|
|
23
23
|
pageModified(context) {
|
|
24
|
-
context.dispatchEvent(
|
|
24
|
+
context.dispatchEvent(createEvent("pageModified"));
|
|
25
25
|
},
|
|
26
26
|
/**
|
|
27
27
|
* Event called when page is resized
|
|
28
28
|
*/
|
|
29
29
|
pageResized(context) {
|
|
30
|
-
context.dispatchEvent(
|
|
30
|
+
context.dispatchEvent(createEvent("pageResized"));
|
|
31
31
|
},
|
|
32
32
|
/**
|
|
33
33
|
* Event dispatched before page print begins (teardown/restructure/hide things)
|
|
34
34
|
*/
|
|
35
35
|
beforePrint(context) {
|
|
36
|
-
context.dispatchEvent(
|
|
36
|
+
context.dispatchEvent(createEvent("beforePrint"));
|
|
37
37
|
},
|
|
38
38
|
/**
|
|
39
39
|
* Event dispatched after page print (cleanup)
|
|
40
40
|
*/
|
|
41
41
|
afterPrint(context) {
|
|
42
|
-
context.dispatchEvent(
|
|
42
|
+
context.dispatchEvent(createEvent("afterPrint"));
|
|
43
43
|
}
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
* Triggers one of our custom events
|
|
47
|
+
* Triggers one of our custom events (page/document level events)
|
|
48
|
+
* - UI components may dispatch their own events, this is just used for system wide events
|
|
48
49
|
* @param {String} type Type of event to dispatch
|
|
49
50
|
* @param {Node} context Element to trigger the event from
|
|
50
51
|
* @example
|
|
@@ -62,6 +63,7 @@ export function dispatch(type, context) {
|
|
|
62
63
|
|
|
63
64
|
/**
|
|
64
65
|
* Namespaced event
|
|
66
|
+
* - Should be used for all ulu script/component events
|
|
65
67
|
* @param {String} type Type of event to get the actual event name for
|
|
66
68
|
* @returns {String}
|
|
67
69
|
*/
|
|
@@ -69,6 +71,16 @@ export function getName(type) {
|
|
|
69
71
|
return "ulu:" + type;
|
|
70
72
|
}
|
|
71
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Create ulu namespaced custom event
|
|
76
|
+
* @param {String} type Event base name (not prefixed)
|
|
77
|
+
* @param {any} data Custom data to pass with the event (will be available as `event.detail`)
|
|
78
|
+
* @param {Object} options CustomEvent options default `{ bubbles: true }`. If `detail` is also provided, it will be merged with this options object and will override the 'data' argument for this function
|
|
79
|
+
*/
|
|
80
|
+
export function createEvent(type, data = null, options = { bubbles: true }) {
|
|
81
|
+
return new CustomEvent(getName(type), { detail: data, ...options });
|
|
82
|
+
}
|
|
83
|
+
|
|
72
84
|
/**
|
|
73
85
|
* Setup resize handler/dispatch
|
|
74
86
|
*/
|
package/js/index.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// - Will not include things that aren't used in every site (those would need to
|
|
6
6
|
// imported manually
|
|
7
7
|
|
|
8
|
+
export * as settings from "./settings.js";
|
|
8
9
|
export * as events from "./events/index.js";
|
|
9
10
|
export * as ui from "./ui/index.js";
|
|
10
11
|
export * as utils from "./utils/index.js";
|
package/js/settings.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module settings
|
|
3
|
+
* @description Manages shared configuration for the library.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Default settings
|
|
8
|
+
* @typedef {object} Defaults
|
|
9
|
+
* @property {string} iconClassClose - The CSS class string for the close icon
|
|
10
|
+
* @property {string} iconClassDragX - The CSS class string for the drag X icon
|
|
11
|
+
* @property {string} iconClassDragBoth - The CSS class string for the dragging in both directions
|
|
12
|
+
* @property {string} iconClassPrevious - The CSS class string for the previous icon
|
|
13
|
+
* @property {string} iconClassNext - The CSS class string for the next icon
|
|
14
|
+
* @property {string} cssvarPrefix - The prefix to use for CSS custom properties
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @type {Defaults}
|
|
19
|
+
*/
|
|
20
|
+
const defaults = {
|
|
21
|
+
iconClassClose: "css-icon css-icon--close",
|
|
22
|
+
iconClassDragX: "css-icon css-icon--drag-x",
|
|
23
|
+
iconClassDragBoth: "css-icon css-icon--drag-both",
|
|
24
|
+
iconClassPrevious: "css-icon css-icon--angle-left",
|
|
25
|
+
iconClassNext: "css-icon css-icon--angle-right",
|
|
26
|
+
cssvarPrefix: "",
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// Current configuration, initialized with defaults
|
|
30
|
+
let currentSettings = { ...defaults };
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Retrieves a copy of the default settings.
|
|
34
|
+
* @returns {object} A copy of the default settings object.
|
|
35
|
+
*/
|
|
36
|
+
export function getDefaultSettings() {
|
|
37
|
+
return { ...defaults };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Updates multiple configuration settings.
|
|
42
|
+
* @param {object} changes An object containing the settings to update.
|
|
43
|
+
*/
|
|
44
|
+
export function updateSettings(changes) {
|
|
45
|
+
Object.assign(currentSettings, changes);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Retrieves a copy of the current configuration settings.
|
|
50
|
+
* @returns {object} A copy of the current settings object.
|
|
51
|
+
*/
|
|
52
|
+
export function getSettings() {
|
|
53
|
+
return { ...currentSettings };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Retrieves a specific configuration setting by key.
|
|
58
|
+
* @param {string} key The key of the setting to retrieve.
|
|
59
|
+
* @returns {*} The value of the setting, or undefined if not found.
|
|
60
|
+
*/
|
|
61
|
+
export function getSetting(key) {
|
|
62
|
+
if (!currentSettings.hasOwnProperty(key)) {
|
|
63
|
+
console.warn(`Attempted to access non-existent setting: ${key}`);
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
return currentSettings[key];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Updates a specific configuration setting.
|
|
71
|
+
* @param {string} key The key of the setting to update.
|
|
72
|
+
* @param {*} value The new value for the setting.
|
|
73
|
+
*/
|
|
74
|
+
export function updateSetting(key, value) {
|
|
75
|
+
currentSettings[key] = value;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Creates a wrapped string representation of a configuration setting.
|
|
80
|
+
* This function returns an object with a `toString()` method that, when called,
|
|
81
|
+
* retrieves the current value of the specified setting. This allows the setting
|
|
82
|
+
* to be used as a string literal, dynamically retrieving its value.
|
|
83
|
+
*
|
|
84
|
+
* @param {String} key The key of the setting to wrap.
|
|
85
|
+
* @param {Function} transform Optional function to transform the setting's
|
|
86
|
+
* value when its string representation is requested.
|
|
87
|
+
* @returns {Object} An object with a `toString()` method that returns the
|
|
88
|
+
* (optionally transformed) setting value as a string.
|
|
89
|
+
*/
|
|
90
|
+
export function wrapSettingString(key, transform) {
|
|
91
|
+
return {
|
|
92
|
+
toString() {
|
|
93
|
+
const value = getSetting(key);
|
|
94
|
+
return transform ? transform(value) : value;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
package/js/ui/breakpoints.js
CHANGED
|
@@ -5,8 +5,11 @@
|
|
|
5
5
|
// Pass breakpoints from CSS to stylesheet, use this to attach behaviors on breakpoints
|
|
6
6
|
import { removeArrayElement } from "@ulu/utils/array.js";
|
|
7
7
|
import { getName } from "../events/index.js";
|
|
8
|
+
import { wrapSettingString } from "../settings.js";
|
|
9
|
+
import { getCustomProperty } from "../utils/css.js";
|
|
8
10
|
import { log, logError } from "../utils/class-logger.js";
|
|
9
11
|
|
|
12
|
+
const getDefaultCustomProperty = prefix => getCustomProperty(prefix, "breakpoint");
|
|
10
13
|
|
|
11
14
|
// Resize Handler to update breakpoints for all instances (Called after resize finished)
|
|
12
15
|
window.addEventListener(getName("pageResized"), () => {
|
|
@@ -16,25 +19,26 @@ window.addEventListener(getName("pageResized"), () => {
|
|
|
16
19
|
/**
|
|
17
20
|
* @class
|
|
18
21
|
* Class that provides method for retrieving and acting on breakpoints passed
|
|
19
|
-
* from CSS (using element
|
|
22
|
+
* from CSS (using element pseudo content prop)
|
|
20
23
|
*/
|
|
21
24
|
export class BreakpointManager {
|
|
22
25
|
static instances = [];
|
|
23
26
|
static defaults = {
|
|
24
27
|
element: document?.documentElement,
|
|
25
|
-
|
|
28
|
+
valueFromPseudo: false,
|
|
26
29
|
customProperty: "--breakpoint",
|
|
27
|
-
|
|
30
|
+
customProperty: wrapSettingString("cssvarPrefix", getDefaultCustomProperty),
|
|
31
|
+
pseudoSelector: ':before',
|
|
28
32
|
order: ["none", "small", "medium", "large"],
|
|
29
33
|
debug: false
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
|
-
* @param {Object} config
|
|
36
|
+
* @param {Object} config Configuration object
|
|
33
37
|
* @param {Array} config.order Array of strings that correspond to the breakpoints setup in the styles, Breakpoints from smallest to largest, defaults to [small, medium, large]
|
|
34
38
|
* @param {Array} config.customProperty Property to grab breakpoint from (default is --breakpoint)
|
|
35
|
-
* @param {Array} config.
|
|
36
|
-
* @param {Node} config.element The element to retrieve active breakpoint from stylesheet. (default is html) For using the old
|
|
37
|
-
* @param {String} config.
|
|
39
|
+
* @param {Array} config.valueFromPseudo Use the legacy method of grabbing breakpoint from pseudo element, default uses custom property
|
|
40
|
+
* @param {Node} config.element The element to retrieve active breakpoint from stylesheet. (default is html) For using the old pseudo method, adjust this to document.body
|
|
41
|
+
* @param {String} config.pseudoSelector Change pseudo selector used to get the breakpoint from the pseudo's content property
|
|
38
42
|
*/
|
|
39
43
|
constructor(config) {
|
|
40
44
|
Object.assign(this, BreakpointManager.defaults, config);
|
|
@@ -51,9 +55,9 @@ export class BreakpointManager {
|
|
|
51
55
|
BreakpointManager.instances.push(this);
|
|
52
56
|
}
|
|
53
57
|
/**
|
|
54
|
-
* Add a callback for
|
|
58
|
+
* Add a callback for every time a breakpoint changes
|
|
55
59
|
* - Not recommended, possibly use to watch for changes, etc
|
|
56
|
-
* - For more control use
|
|
60
|
+
* - For more control use instance.at(name) with breakpoint methods
|
|
57
61
|
* @param {Function} callback Function to call, passed one argument current instance which can be used to get information about breakpoints
|
|
58
62
|
*/
|
|
59
63
|
onChange(callback) {
|
|
@@ -67,10 +71,10 @@ export class BreakpointManager {
|
|
|
67
71
|
removeArrayElement(this.onChangeCallbacks, callback);
|
|
68
72
|
}
|
|
69
73
|
/**
|
|
70
|
-
* Get breakpoint from a
|
|
74
|
+
* Get breakpoint from a pseudo element
|
|
71
75
|
*/
|
|
72
|
-
|
|
73
|
-
return window.getComputedStyle(this.element, this.
|
|
76
|
+
getBreakpointInPseudo() {
|
|
77
|
+
return window.getComputedStyle(this.element, this.pseudoSelector).content.replace(/^"|"$/g, '');
|
|
74
78
|
}
|
|
75
79
|
/**
|
|
76
80
|
* Get breakpoint from a custom property
|
|
@@ -82,8 +86,8 @@ export class BreakpointManager {
|
|
|
82
86
|
* Get breakpoint from element (design note: user could override prototype)
|
|
83
87
|
*/
|
|
84
88
|
getBreakpoint() {
|
|
85
|
-
if (this.
|
|
86
|
-
return this.
|
|
89
|
+
if (this.valueFromPseudo) {
|
|
90
|
+
return this.getBreakpointInPseudo();
|
|
87
91
|
} else {
|
|
88
92
|
return this.getBreakpointInProperty();
|
|
89
93
|
}
|
|
@@ -97,9 +101,8 @@ export class BreakpointManager {
|
|
|
97
101
|
logError(this, 'Unable to get current breakpoint, maybe order is incorrect? Breakpoint check skipped!');
|
|
98
102
|
return;
|
|
99
103
|
}
|
|
100
|
-
// console.log('name:\n', name);
|
|
101
104
|
if (name === this.active) return;
|
|
102
|
-
|
|
105
|
+
|
|
103
106
|
// Update active and cache last
|
|
104
107
|
this.previous = this.active;
|
|
105
108
|
this.previousIndex = this.activeIndex;
|
package/js/ui/collapsible.js
CHANGED
|
@@ -71,7 +71,14 @@ export class Collapsible {
|
|
|
71
71
|
}
|
|
72
72
|
this.focusoutHandler = (event) => {
|
|
73
73
|
if (focusoutCloses) {
|
|
74
|
-
|
|
74
|
+
// If closing on focus out we attach one-time event to
|
|
75
|
+
// see which element is focused next (in between focusout and focusin
|
|
76
|
+
// it's the body) so doing the logic in focusout won't work
|
|
77
|
+
document.addEventListener('focusin', () => {
|
|
78
|
+
if (!content.contains(document.activeElement)) {
|
|
79
|
+
this.close(event);
|
|
80
|
+
}
|
|
81
|
+
}, { once: true });
|
|
75
82
|
}
|
|
76
83
|
};
|
|
77
84
|
trigger.addEventListener("click", this.clickHandler);
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ui/details-group
|
|
3
|
+
* @description Manages groups of details (ie. onlyOneOpen at a time)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { ComponentInitializer } from "../utils/system.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Dialog Component Initializer
|
|
10
|
+
*/
|
|
11
|
+
export const initializer = new ComponentInitializer({
|
|
12
|
+
type: "details-group",
|
|
13
|
+
baseAttribute: "data-ulu-details-group"
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const childInitAttr = initializer.getAttribute("child-init");
|
|
17
|
+
const defaults = {
|
|
18
|
+
onlyOneOpen: true,
|
|
19
|
+
childSelector: ":scope > details"
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Initialize everything in document
|
|
24
|
+
* - This will only initialize elements once, it is safe to call on page changes
|
|
25
|
+
*/
|
|
26
|
+
export function init() {
|
|
27
|
+
initializer.init({
|
|
28
|
+
withData: true,
|
|
29
|
+
events: ["pageModified"],
|
|
30
|
+
setup({ element, data, initialize }) {
|
|
31
|
+
setupGroup(element, data);
|
|
32
|
+
initialize();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @typedef {Object} DetailsGroupInstance
|
|
39
|
+
* @property {Function} destroy A function to remove event listeners and attributes.
|
|
40
|
+
* @property {HTMLElement} element The parent element.
|
|
41
|
+
* @property {Function} setupChildren A function to initialize the child details elements.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Sets up a single group of details elements to manage their behavior.
|
|
46
|
+
* @param {HTMLElement} element - The parent element containing the details elements.
|
|
47
|
+
* @param {Object} options - The options for this group
|
|
48
|
+
* @returns {DetailsGroupInstance}
|
|
49
|
+
*/
|
|
50
|
+
export function setupGroup(element, userOptions) {
|
|
51
|
+
const options = Object.assign({}, defaults, userOptions);
|
|
52
|
+
|
|
53
|
+
// Added try because we are using querySelectorAll with :scope by default
|
|
54
|
+
// which will not work in Internet Explorer or early edge (some alt. browsers too)
|
|
55
|
+
try {
|
|
56
|
+
setupChildren();
|
|
57
|
+
} catch(error) {
|
|
58
|
+
console.error(error);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Queries all current children in element
|
|
63
|
+
* @ignore
|
|
64
|
+
*/
|
|
65
|
+
function queryChildren() {
|
|
66
|
+
return element.querySelectorAll(options.childSelector);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Sets up any children not already setup in group
|
|
71
|
+
*/
|
|
72
|
+
function setupChildren() {
|
|
73
|
+
queryChildren().forEach(child => {
|
|
74
|
+
if (child.hasAttribute(childInitAttr)) {
|
|
75
|
+
return;
|
|
76
|
+
} else {
|
|
77
|
+
child.setAttribute(childInitAttr, "");
|
|
78
|
+
}
|
|
79
|
+
child.addEventListener("toggle", toggleHandler);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Toggle handler for child details element
|
|
85
|
+
* - For things like one open at a time
|
|
86
|
+
* @ignore
|
|
87
|
+
*/
|
|
88
|
+
function toggleHandler({ target }) {
|
|
89
|
+
if (options.onlyOneOpen) {
|
|
90
|
+
if (target.open) {
|
|
91
|
+
queryChildren().forEach(child => {
|
|
92
|
+
if (child !== target && child.open) {
|
|
93
|
+
child.open = false;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Function removes all handlers and init attributes
|
|
102
|
+
*/
|
|
103
|
+
function destroy() {
|
|
104
|
+
queryChildren().forEach(child => {
|
|
105
|
+
child.removeEventListener("toggle", toggleHandler);
|
|
106
|
+
child.removeAttribute(childInitAttr);
|
|
107
|
+
});
|
|
108
|
+
element.removeAttribute(initializer.getAttribute("init"));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return { destroy, element, setupChildren };
|
|
112
|
+
}
|
package/js/ui/dialog.js
CHANGED
|
@@ -3,22 +3,24 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { getName } from "../events/index.js";
|
|
6
|
-
import {
|
|
6
|
+
import { ComponentInitializer } from "../utils/system.js";
|
|
7
|
+
import { wasClickOutside, preventScroll as setupPreventScroll } from "@ulu/utils/browser/dom.js";
|
|
7
8
|
import { pauseVideos as pauseYoutubeVideos, prepVideos as prepYoutubeVideos } from "../utils/pause-youtube-video.js";
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
|
-
*
|
|
11
|
+
* Base attribute for a dialog
|
|
10
12
|
*/
|
|
11
|
-
export const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
13
|
+
export const baseAttribute = "data-ulu-dialog"; // Exposed for modal builder
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Dialog Component Initializer
|
|
17
|
+
*/
|
|
18
|
+
export const initializer = new ComponentInitializer({ type: "dialog", baseAttribute });
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
20
|
+
/**
|
|
21
|
+
* Attribute for close buttons within a dialog
|
|
22
|
+
*/
|
|
23
|
+
export const closeAttribute = initializer.getAttribute("close"); // Exposed for modal builder
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* Dialog Defaults
|
|
@@ -42,6 +44,15 @@ export const defaults = {
|
|
|
42
44
|
* Whether or not to pause videos when dialog closes (currently just youtube and native)
|
|
43
45
|
*/
|
|
44
46
|
pauseVideos: true,
|
|
47
|
+
/**
|
|
48
|
+
* When open and not non-modal, the body is prevented from scrolling (defaults to true).
|
|
49
|
+
*/
|
|
50
|
+
preventScroll: true,
|
|
51
|
+
/**
|
|
52
|
+
* Compensate for layout shift when preventing scroll. Which adds padding equal to scrollbars
|
|
53
|
+
* width while dialog is open
|
|
54
|
+
*/
|
|
55
|
+
preventScrollShift: true,
|
|
45
56
|
};
|
|
46
57
|
|
|
47
58
|
|
|
@@ -49,7 +60,7 @@ export const defaults = {
|
|
|
49
60
|
let currentDefaults = { ...defaults };
|
|
50
61
|
|
|
51
62
|
/**
|
|
52
|
-
* @param {Object} options Change options used as default for dialogs, can then be
|
|
63
|
+
* @param {Object} options Change options used as default for dialogs, can then be overridden by data attribute settings on element
|
|
53
64
|
*/
|
|
54
65
|
export function setDefaults(options) {
|
|
55
66
|
currentDefaults = Object.assign({}, currentDefaults, options);
|
|
@@ -60,35 +71,48 @@ export function setDefaults(options) {
|
|
|
60
71
|
* - This will only initialize elements once, it is safe to call on page changes
|
|
61
72
|
*/
|
|
62
73
|
export function init() {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
// Initialize all the dialogs
|
|
75
|
+
initializer.init({
|
|
76
|
+
events: ["pageModified"],
|
|
77
|
+
withData: true,
|
|
78
|
+
setup({ element, initialize, data }) {
|
|
79
|
+
setupDialog(element, data);
|
|
80
|
+
initialize();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Initialize all triggers (things that trigger opening a dialog)
|
|
85
|
+
initializer.init({
|
|
86
|
+
key: "trigger",
|
|
87
|
+
events: ["pageModified"],
|
|
88
|
+
withData: true,
|
|
89
|
+
setup({ element, initialize, data: dialogId }) {
|
|
90
|
+
setupTrigger(element, dialogId);
|
|
91
|
+
initialize();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
77
94
|
}
|
|
78
95
|
|
|
79
96
|
/**
|
|
80
97
|
* Setup click handlers on a trigger
|
|
81
|
-
* @param {Node} trigger
|
|
98
|
+
* @param {Node} trigger Trigger button element
|
|
99
|
+
* @param {String} dialogId The dialog's id to open
|
|
82
100
|
*/
|
|
83
|
-
export function setupTrigger(trigger) {
|
|
101
|
+
export function setupTrigger(trigger, dialogId) {
|
|
84
102
|
trigger.addEventListener("click", handleTrigger);
|
|
85
|
-
trigger.setAttribute(attrs.init, "");
|
|
86
103
|
|
|
87
|
-
function handleTrigger() {
|
|
88
|
-
|
|
89
|
-
|
|
104
|
+
function handleTrigger(event) {
|
|
105
|
+
|
|
106
|
+
// If a link is used (not recommended) we need to prevent
|
|
107
|
+
// the page from scrolling
|
|
108
|
+
const closestLink = event.target.closest("a");
|
|
109
|
+
if (closestLink) {
|
|
110
|
+
event.preventDefault();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const dialog = document.getElementById(dialogId);
|
|
90
114
|
if (!dialog) {
|
|
91
|
-
console.error("Could not locate dialog (id)",
|
|
115
|
+
console.error("Could not locate dialog (id)", dialogId);
|
|
92
116
|
return;
|
|
93
117
|
}
|
|
94
118
|
if (dialog?.tagName?.toLowerCase() !== "dialog") {
|
|
@@ -104,23 +128,49 @@ export function setupTrigger(trigger) {
|
|
|
104
128
|
* Setup click handlers for a dialog
|
|
105
129
|
* @param {Node} dialog
|
|
106
130
|
*/
|
|
107
|
-
export function setupDialog(dialog) {
|
|
108
|
-
const options =
|
|
131
|
+
export function setupDialog(dialog, userOptions) {
|
|
132
|
+
const options = Object.assign({}, currentDefaults, userOptions);
|
|
133
|
+
const body = document.body;
|
|
134
|
+
const { preventScrollShift: preventShift } = options;
|
|
135
|
+
|
|
136
|
+
// Stores active pointerId for resizer until after the whole pointer event series
|
|
137
|
+
// is finished which is after the click is complete
|
|
138
|
+
let activeResizePointer;
|
|
139
|
+
|
|
140
|
+
dialog.addEventListener(getName("resizer:start"), handleResizeStart);
|
|
141
|
+
dialog.addEventListener(getName("resizer:end"), handleResizeEnd);
|
|
109
142
|
dialog.addEventListener("click", handleClicks);
|
|
110
|
-
|
|
143
|
+
|
|
111
144
|
if (options.documentEnd) {
|
|
112
|
-
|
|
145
|
+
body.appendChild(dialog);
|
|
113
146
|
}
|
|
114
147
|
if (options.pauseVideos) {
|
|
115
148
|
prepVideos(dialog);
|
|
116
149
|
}
|
|
117
150
|
|
|
151
|
+
// Allow preventScroll if it is a modal dialog
|
|
152
|
+
// Caching value of overflow before setting so we don't assume what it's initial value is
|
|
153
|
+
if (!options.nonModal && options.preventScroll) {
|
|
154
|
+
// Cache restore function
|
|
155
|
+
let restoreScroll;
|
|
156
|
+
|
|
157
|
+
// Toggle prevent scroll
|
|
158
|
+
dialog.addEventListener("toggle", (event) => {
|
|
159
|
+
const isOpen = event.newState === "open";
|
|
160
|
+
if (isOpen) {
|
|
161
|
+
restoreScroll = setupPreventScroll({ preventShift });
|
|
162
|
+
} else if (restoreScroll) {
|
|
163
|
+
restoreScroll();
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
118
168
|
function handleClicks(event) {
|
|
119
169
|
const { target } = event;
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
170
|
+
const targetIsDialog = target === dialog;
|
|
171
|
+
const closeFromButton = target.closest(initializer.attributeSelector("close"));
|
|
172
|
+
const allowCloseOutside = !activeResizePointer && options.clickOutsideCloses;
|
|
173
|
+
const closeFromOutside = allowCloseOutside && targetIsDialog && wasClickOutside(dialog, event);
|
|
124
174
|
if (closeFromOutside || closeFromButton) {
|
|
125
175
|
if (options.pauseVideos) {
|
|
126
176
|
pauseVideos(dialog);
|
|
@@ -128,6 +178,15 @@ export function setupDialog(dialog) {
|
|
|
128
178
|
dialog.close();
|
|
129
179
|
}
|
|
130
180
|
}
|
|
181
|
+
function handleResizeStart(event) {
|
|
182
|
+
activeResizePointer = event.pointerId;
|
|
183
|
+
}
|
|
184
|
+
function handleResizeEnd(event) {
|
|
185
|
+
if (activeResizePointer === event.pointerId) {
|
|
186
|
+
// next event cycle (after click/pointer events finish in current)
|
|
187
|
+
setTimeout(() => { activeResizePointer = null;}, 0);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
131
190
|
}
|
|
132
191
|
|
|
133
192
|
/**
|
|
@@ -136,8 +195,7 @@ export function setupDialog(dialog) {
|
|
|
136
195
|
* @returns {Object}
|
|
137
196
|
*/
|
|
138
197
|
export function getDialogOptions(dialog) {
|
|
139
|
-
|
|
140
|
-
return Object.assign({}, currentDefaults, options);
|
|
198
|
+
return Object.assign({}, currentDefaults, initializer.getData(dialog));
|
|
141
199
|
}
|
|
142
200
|
|
|
143
201
|
/**
|
|
@@ -146,6 +204,7 @@ export function getDialogOptions(dialog) {
|
|
|
146
204
|
function prepVideos(dialog) {
|
|
147
205
|
prepYoutubeVideos(dialog);
|
|
148
206
|
}
|
|
207
|
+
|
|
149
208
|
/**
|
|
150
209
|
* Prep videos to be paused for a given dialog
|
|
151
210
|
*/
|
package/js/ui/dialog.todo
CHANGED
|
@@ -1,37 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
✔ Animations? @done
|
|
3
|
-
☐ Check styling on left right
|
|
1
|
+
Dialog Todos:
|
|
4
2
|
☐ Setup fullscreen option / modifier
|
|
5
|
-
☐
|
|
6
|
-
☐ Resizing
|
|
7
|
-
✔ Work out how this can work with native and click outside @done
|
|
8
|
-
✔ Figure out how to setup icon for the resizer for all sites @done
|
|
9
|
-
* Fontawesome, or should this just be CSS so we don't need any icons for it
|
|
10
|
-
* Same for close button should we just use CSS and omit any FA requirements
|
|
11
|
-
* Or make it super easy to implement the icon only in the template (like default icon classses)
|
|
12
|
-
* Then user can choose to implement their own (via class) or use the styles that come with it
|
|
13
|
-
☐ Prevent Browser Scroll
|
|
14
|
-
✔ How should height work? Should a centered modal expand to it's content's height (up to the viewport height) or always be cropped and scroll (static height)? @done
|
|
15
|
-
Todos:
|
|
16
|
-
✔ How should the relationship between a dialog and it's trigger work @done
|
|
17
|
-
* Think there should be no relationship? Just triggers are triggers just attach a handler to open DOM centric way (add errors when the dialog doesn't exist)
|
|
18
|
-
* For the dialogs they should just have handlers attached for close
|
|
19
|
-
* Init should find all one's that need to be built and build them, then it should initialize them the same way as non-built dialogs
|
|
20
|
-
✔ Support both modal and non-modal dialogs (rename)? @done
|
|
21
|
-
✘ Divide into 4 modules @cancelled
|
|
22
|
-
1. Initializer (data-attributes)
|
|
23
|
-
2. Templater (for Drupal projects and standard modals)
|
|
24
|
-
3. Open/Close Behaviors
|
|
25
|
-
4. Programmatic Modal
|
|
26
|
-
* This is tough because its opionated towards our system in Drupal (jQuery)
|
|
27
|
-
✔ How should this all be structured @done
|
|
28
|
-
* JS template dialogs?
|
|
29
|
-
* Pros
|
|
30
|
-
* Many users create the modals in content in CMS we don't want to make that difficult or get stuck with structure
|
|
31
|
-
* Cons
|
|
32
|
-
* Templating is in JS so dialogs don't make much sense on their own
|
|
33
|
-
* Could continue the div to dialog conversion (so modal content is inline unless JS running). Don't want to optimize too much for no js anymore anyways
|
|
34
|
-
* writing the dialog by hand makes sense for non defualt modal styles or users that have another structure but need the scripting part
|
|
35
|
-
* Solution
|
|
36
|
-
* Breakup module into two parts the underlying modal scripting (open close trigger) and (conversion modal templating [w. resizer] and as <div>)
|
|
37
|
-
* Then we can have both without any extra code and seperation
|
|
3
|
+
☐ Prevent Browser Scroll
|