@ulu/frontend 0.0.3
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/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/ulu-frontend.min.css +1 -0
- package/dist/ulu-frontend.min.js +1 -0
- package/index.js +2 -0
- package/js/deprecated/doc-ready.js +28 -0
- package/js/deprecated/jquery-prototypes.js +309 -0
- package/js/deprecated/mini-collapsible-popper-positioning.js +126 -0
- package/js/deprecated/mini-collapsible.js +607 -0
- package/js/deprecated/script-loader.js +60 -0
- package/js/events/index.js +42 -0
- package/js/helpers/css-breakpoint.js +247 -0
- package/js/helpers/file-save.js +48 -0
- package/js/helpers/node-data-manager.js +74 -0
- package/js/helpers/pause-youtube-video.js +42 -0
- package/js/helpers/scrollbar-width-property.js +10 -0
- package/js/index.js +15 -0
- package/js/polyfills/element-closest.js +17 -0
- package/js/ui/flipcard.js +202 -0
- package/js/ui/grid.js +67 -0
- package/js/ui/modals.js +219 -0
- package/js/ui/overflow-scroller-pager.js +58 -0
- package/js/ui/overflow-scroller.js +160 -0
- package/js/ui/programmatic-modal.js +91 -0
- package/js/ui/resizer.js +60 -0
- package/js/ui/slider.js +468 -0
- package/js/ui/tabs.js +109 -0
- package/js/ui/tooltip.js +82 -0
- package/js/utils/array.js +28 -0
- package/js/utils/dom.js +122 -0
- package/js/utils/logger.js +69 -0
- package/js/utils/object.js +22 -0
- package/js/utils/performance.js +43 -0
- package/js/utils/regex.js +10 -0
- package/js/utils/string.js +107 -0
- package/js/waypoints/README.md +3 -0
- package/js/waypoints/anchor-menu.js +76 -0
- package/js/waypoints/element-waypoint.js +75 -0
- package/js/waypoints/examples/page-link-menu.md +106 -0
- package/js/waypoints/state-in-attribute.js +32 -0
- package/package.json +38 -0
- package/scss/README.md +58 -0
- package/scss/_breakpoint.scss +190 -0
- package/scss/_button.scss +241 -0
- package/scss/_calculate.scss +64 -0
- package/scss/_color.scss +211 -0
- package/scss/_cssvar.scss +116 -0
- package/scss/_element.scss +276 -0
- package/scss/_grid.scss +699 -0
- package/scss/_index.scss +29 -0
- package/scss/_layout.scss +202 -0
- package/scss/_path.scss +58 -0
- package/scss/_selector.scss +81 -0
- package/scss/_typography.scss +320 -0
- package/scss/_units.scss +47 -0
- package/scss/_utility.scss +12 -0
- package/scss/_utils.scss +209 -0
- package/scss/base/_color.scss +13 -0
- package/scss/base/_elements.scss +188 -0
- package/scss/base/_index.scss +62 -0
- package/scss/base/_keyframes.scss +78 -0
- package/scss/base/_layout.scss +100 -0
- package/scss/base/_normalize.scss +315 -0
- package/scss/base/_typography.scss +41 -0
- package/scss/components/README.md +5 -0
- package/scss/components/README.todos +15 -0
- package/scss/components/_button.scss +95 -0
- package/scss/components/_index.scss +63 -0
- package/scss/components/_links.scss +34 -0
- package/scss/components/_list-lines.scss +73 -0
- package/scss/components/_list-ordered.scss +16 -0
- package/scss/components/_list-unordered.scss +21 -0
- package/scss/components/_rule.scss +93 -0
- package/scss/helpers/_color.scss +14 -0
- package/scss/helpers/_display.scss +73 -0
- package/scss/helpers/_index.scss +67 -0
- package/scss/helpers/_print.scss +58 -0
- package/scss/helpers/_typography.scss +80 -0
- package/scss/helpers/_units.scss +79 -0
- package/scss/helpers/_utilities.scss +102 -0
- package/scss/stylesheets/README.md +3 -0
- package/scss/stylesheets/full.scss +17 -0
- package/trash/js-old/deprecated/doc-ready.js +28 -0
- package/trash/js-old/deprecated/jquery-prototypes.js +309 -0
- package/trash/js-old/deprecated/mini-collapsible-popper-positioning.js +126 -0
- package/trash/js-old/deprecated/mini-collapsible.js +607 -0
- package/trash/js-old/deprecated/script-loader.js +60 -0
- package/trash/js-old/events/index.js +42 -0
- package/trash/js-old/helpers/css-breakpoint.js +247 -0
- package/trash/js-old/helpers/file-save.js +48 -0
- package/trash/js-old/helpers/node-data-manager.js +74 -0
- package/trash/js-old/helpers/pause-youtube-video.js +42 -0
- package/trash/js-old/index.js +15 -0
- package/trash/js-old/polyfills/element-closest.js +17 -0
- package/trash/js-old/ui/flipcard.js +202 -0
- package/trash/js-old/ui/grid.js +67 -0
- package/trash/js-old/ui/modals.js +219 -0
- package/trash/js-old/ui/programmatic-modal.js +91 -0
- package/trash/js-old/ui/resizer.js +60 -0
- package/trash/js-old/ui/slider.js +469 -0
- package/trash/js-old/ui/tabs.js +109 -0
- package/trash/js-old/ui/tooltip.js +82 -0
- package/trash/js-old/utils/array.js +28 -0
- package/trash/js-old/utils/dom.js +122 -0
- package/trash/js-old/utils/logger.js +69 -0
- package/trash/js-old/utils/object.js +22 -0
- package/trash/js-old/utils/performance.js +43 -0
- package/trash/js-old/utils/regex.js +10 -0
- package/trash/js-old/utils/string.js +107 -0
- package/trash/js-old/waypoints/README.md +3 -0
- package/trash/js-old/waypoints/anchor-menu.js +76 -0
- package/trash/js-old/waypoints/element-waypoint.js +75 -0
- package/trash/js-old/waypoints/examples/page-link-menu.md +106 -0
- package/trash/js-old/waypoints/state-in-attribute.js +32 -0
- package/trash/js-old-230729/deprecated/doc-ready.js +28 -0
- package/trash/js-old-230729/deprecated/jquery-prototypes.js +309 -0
- package/trash/js-old-230729/deprecated/mini-collapsible-popper-positioning.js +126 -0
- package/trash/js-old-230729/deprecated/mini-collapsible.js +607 -0
- package/trash/js-old-230729/deprecated/script-loader.js +60 -0
- package/trash/js-old-230729/events/index.js +42 -0
- package/trash/js-old-230729/helpers/css-breakpoint.js +247 -0
- package/trash/js-old-230729/helpers/file-save.js +48 -0
- package/trash/js-old-230729/helpers/node-data-manager.js +74 -0
- package/trash/js-old-230729/helpers/pause-youtube-video.js +42 -0
- package/trash/js-old-230729/helpers/scrollbar-width-property.js +10 -0
- package/trash/js-old-230729/index.js +15 -0
- package/trash/js-old-230729/polyfills/element-closest.js +17 -0
- package/trash/js-old-230729/ui/flipcard.js +202 -0
- package/trash/js-old-230729/ui/grid.js +67 -0
- package/trash/js-old-230729/ui/modals.js +219 -0
- package/trash/js-old-230729/ui/overflow-scroller-pager.js +58 -0
- package/trash/js-old-230729/ui/overflow-scroller.js +160 -0
- package/trash/js-old-230729/ui/programmatic-modal.js +91 -0
- package/trash/js-old-230729/ui/resizer.js +60 -0
- package/trash/js-old-230729/ui/slider.js +468 -0
- package/trash/js-old-230729/ui/tabs.js +109 -0
- package/trash/js-old-230729/ui/tooltip.js +82 -0
- package/trash/js-old-230729/utils/array.js +28 -0
- package/trash/js-old-230729/utils/dom.js +122 -0
- package/trash/js-old-230729/utils/logger.js +69 -0
- package/trash/js-old-230729/utils/object.js +22 -0
- package/trash/js-old-230729/utils/performance.js +43 -0
- package/trash/js-old-230729/utils/regex.js +10 -0
- package/trash/js-old-230729/utils/string.js +107 -0
- package/trash/js-old-230729/waypoints/README.md +3 -0
- package/trash/js-old-230729/waypoints/anchor-menu.js +76 -0
- package/trash/js-old-230729/waypoints/element-waypoint.js +75 -0
- package/trash/js-old-230729/waypoints/examples/page-link-menu.md +106 -0
- package/trash/js-old-230729/waypoints/state-in-attribute.js +32 -0
- package/trash/logo-1.svg +13 -0
- package/trash/logo.svg +16 -0
- package/trash/scss-before-cqc-update/README.md +58 -0
- package/trash/scss-before-cqc-update/_breakpoint.scss +190 -0
- package/trash/scss-before-cqc-update/_button.scss +229 -0
- package/trash/scss-before-cqc-update/_calculate.scss +65 -0
- package/trash/scss-before-cqc-update/_color.scss +211 -0
- package/trash/scss-before-cqc-update/_cssvar.scss +116 -0
- package/trash/scss-before-cqc-update/_element.scss +275 -0
- package/trash/scss-before-cqc-update/_index.scss +29 -0
- package/trash/scss-before-cqc-update/_layout.scss +247 -0
- package/trash/scss-before-cqc-update/_path.scss +59 -0
- package/trash/scss-before-cqc-update/_selector.scss +82 -0
- package/trash/scss-before-cqc-update/_typography.scss +322 -0
- package/trash/scss-before-cqc-update/_units.scss +48 -0
- package/trash/scss-before-cqc-update/_utility.scss +13 -0
- package/trash/scss-before-cqc-update/_utils.scss +211 -0
- package/trash/scss-before-cqc-update/base/_color.scss +14 -0
- package/trash/scss-before-cqc-update/base/_elements.scss +189 -0
- package/trash/scss-before-cqc-update/base/_index.scss +63 -0
- package/trash/scss-before-cqc-update/base/_keyframes.scss +74 -0
- package/trash/scss-before-cqc-update/base/_layout.scss +88 -0
- package/trash/scss-before-cqc-update/base/_normalize.scss +316 -0
- package/trash/scss-before-cqc-update/base/_typography.scss +42 -0
- package/trash/scss-before-cqc-update/components/README.md +5 -0
- package/trash/scss-before-cqc-update/components/README.todos +15 -0
- package/trash/scss-before-cqc-update/components/_button.scss +96 -0
- package/trash/scss-before-cqc-update/components/_grid.scss +671 -0
- package/trash/scss-before-cqc-update/components/_index.scss +70 -0
- package/trash/scss-before-cqc-update/components/_links.scss +35 -0
- package/trash/scss-before-cqc-update/components/_list-lines.scss +74 -0
- package/trash/scss-before-cqc-update/components/_list-ordered.scss +17 -0
- package/trash/scss-before-cqc-update/components/_list-unordered.scss +22 -0
- package/trash/scss-before-cqc-update/components/_rule.scss +94 -0
- package/trash/scss-before-cqc-update/helpers/_color.scss +15 -0
- package/trash/scss-before-cqc-update/helpers/_display.scss +73 -0
- package/trash/scss-before-cqc-update/helpers/_index.scss +68 -0
- package/trash/scss-before-cqc-update/helpers/_print.scss +59 -0
- package/trash/scss-before-cqc-update/helpers/_typography.scss +73 -0
- package/trash/scss-before-cqc-update/helpers/_units.scss +79 -0
- package/trash/scss-before-cqc-update/helpers/_utilities.scss +88 -0
- package/trash/scss-before-cqc-update/stylesheets/README.md +3 -0
- package/trash/scss-before-cqc-update/stylesheets/full.scss +17 -0
- package/trash/scss-old/README.md +58 -0
- package/trash/scss-old/_breakpoint.scss +140 -0
- package/trash/scss-old/_button.scss +223 -0
- package/trash/scss-old/_calculate.scss +64 -0
- package/trash/scss-old/_color.scss +200 -0
- package/trash/scss-old/_element.scss +262 -0
- package/trash/scss-old/_grid.scss +558 -0
- package/trash/scss-old/_index.scss +25 -0
- package/trash/scss-old/_layout.scss +170 -0
- package/trash/scss-old/_path.scss +58 -0
- package/trash/scss-old/_selector.scss +81 -0
- package/trash/scss-old/_typography.scss +320 -0
- package/trash/scss-old/_units.scss +47 -0
- package/trash/scss-old/_utility.scss +12 -0
- package/trash/scss-old/_utils.scss +186 -0
- package/trash/scss-old/base/_color.scss +13 -0
- package/trash/scss-old/base/_elements.scss +183 -0
- package/trash/scss-old/base/_index.scss +62 -0
- package/trash/scss-old/base/_keyframes.scss +74 -0
- package/trash/scss-old/base/_layout.scss +81 -0
- package/trash/scss-old/base/_normalize.scss +316 -0
- package/trash/scss-old/base/_typography.scss +42 -0
- package/trash/scss-old/components/README.md +5 -0
- package/trash/scss-old/components/README.todos +15 -0
- package/trash/scss-old/components/_button.scss +74 -0
- package/trash/scss-old/components/_index.scss +63 -0
- package/trash/scss-old/components/_links.scss +34 -0
- package/trash/scss-old/components/_list-lines.scss +73 -0
- package/trash/scss-old/components/_list-ordered.scss +16 -0
- package/trash/scss-old/components/_list-unordered.scss +21 -0
- package/trash/scss-old/components/_rule.scss +84 -0
- package/trash/scss-old/helpers/_color.scss +14 -0
- package/trash/scss-old/helpers/_display.scss +68 -0
- package/trash/scss-old/helpers/_index.scss +67 -0
- package/trash/scss-old/helpers/_print.scss +59 -0
- package/trash/scss-old/helpers/_typography.scss +73 -0
- package/trash/scss-old/helpers/_units.scss +68 -0
- package/trash/scss-old/helpers/_utilities.scss +82 -0
- package/trash/scss-old/packages/README.md +3 -0
- package/trash/scss-old/packages/everything.scss +17 -0
- package/trash/scss-old-2/README.md +58 -0
- package/trash/scss-old-2/_breakpoint.scss +139 -0
- package/trash/scss-old-2/_button.scss +223 -0
- package/trash/scss-old-2/_calculate.scss +64 -0
- package/trash/scss-old-2/_color.scss +202 -0
- package/trash/scss-old-2/_element.scss +263 -0
- package/trash/scss-old-2/_grid.scss +558 -0
- package/trash/scss-old-2/_index.scss +25 -0
- package/trash/scss-old-2/_layout.scss +170 -0
- package/trash/scss-old-2/_path.scss +58 -0
- package/trash/scss-old-2/_selector.scss +81 -0
- package/trash/scss-old-2/_typography.scss +320 -0
- package/trash/scss-old-2/_units.scss +47 -0
- package/trash/scss-old-2/_utility.scss +12 -0
- package/trash/scss-old-2/_utils.scss +186 -0
- package/trash/scss-old-2/base/_color.scss +13 -0
- package/trash/scss-old-2/base/_elements.scss +182 -0
- package/trash/scss-old-2/base/_index.scss +62 -0
- package/trash/scss-old-2/base/_keyframes.scss +73 -0
- package/trash/scss-old-2/base/_layout.scss +83 -0
- package/trash/scss-old-2/base/_normalize.scss +315 -0
- package/trash/scss-old-2/base/_typography.scss +41 -0
- package/trash/scss-old-2/components/README.md +5 -0
- package/trash/scss-old-2/components/README.todos +15 -0
- package/trash/scss-old-2/components/_button.scss +95 -0
- package/trash/scss-old-2/components/_index.scss +63 -0
- package/trash/scss-old-2/components/_links.scss +33 -0
- package/trash/scss-old-2/components/_list-lines.scss +73 -0
- package/trash/scss-old-2/components/_list-ordered.scss +16 -0
- package/trash/scss-old-2/components/_list-unordered.scss +21 -0
- package/trash/scss-old-2/components/_rule.scss +84 -0
- package/trash/scss-old-2/helpers/_color.scss +14 -0
- package/trash/scss-old-2/helpers/_display.scss +67 -0
- package/trash/scss-old-2/helpers/_index.scss +67 -0
- package/trash/scss-old-2/helpers/_print.scss +58 -0
- package/trash/scss-old-2/helpers/_typography.scss +72 -0
- package/trash/scss-old-2/helpers/_units.scss +68 -0
- package/trash/scss-old-2/helpers/_utilities.scss +81 -0
- package/trash/scss-old-2/packages/README.md +3 -0
- package/trash/scss-old-2/packages/everything.scss +17 -0
- package/trash/scss-old-230729/README.md +58 -0
- package/trash/scss-old-230729/_breakpoint.scss +139 -0
- package/trash/scss-old-230729/_button.scss +223 -0
- package/trash/scss-old-230729/_calculate.scss +64 -0
- package/trash/scss-old-230729/_color.scss +202 -0
- package/trash/scss-old-230729/_element.scss +273 -0
- package/trash/scss-old-230729/_grid.scss +694 -0
- package/trash/scss-old-230729/_index.scss +25 -0
- package/trash/scss-old-230729/_layout.scss +193 -0
- package/trash/scss-old-230729/_path.scss +58 -0
- package/trash/scss-old-230729/_selector.scss +81 -0
- package/trash/scss-old-230729/_typography.scss +320 -0
- package/trash/scss-old-230729/_units.scss +47 -0
- package/trash/scss-old-230729/_utility.scss +12 -0
- package/trash/scss-old-230729/_utils.scss +186 -0
- package/trash/scss-old-230729/base/_color.scss +13 -0
- package/trash/scss-old-230729/base/_elements.scss +188 -0
- package/trash/scss-old-230729/base/_index.scss +62 -0
- package/trash/scss-old-230729/base/_keyframes.scss +73 -0
- package/trash/scss-old-230729/base/_layout.scss +83 -0
- package/trash/scss-old-230729/base/_normalize.scss +315 -0
- package/trash/scss-old-230729/base/_typography.scss +41 -0
- package/trash/scss-old-230729/components/README.md +5 -0
- package/trash/scss-old-230729/components/README.todos +15 -0
- package/trash/scss-old-230729/components/_button.scss +95 -0
- package/trash/scss-old-230729/components/_index.scss +63 -0
- package/trash/scss-old-230729/components/_links.scss +34 -0
- package/trash/scss-old-230729/components/_list-lines.scss +73 -0
- package/trash/scss-old-230729/components/_list-ordered.scss +16 -0
- package/trash/scss-old-230729/components/_list-unordered.scss +21 -0
- package/trash/scss-old-230729/components/_rule.scss +93 -0
- package/trash/scss-old-230729/helpers/_color.scss +14 -0
- package/trash/scss-old-230729/helpers/_display.scss +73 -0
- package/trash/scss-old-230729/helpers/_index.scss +67 -0
- package/trash/scss-old-230729/helpers/_print.scss +58 -0
- package/trash/scss-old-230729/helpers/_typography.scss +72 -0
- package/trash/scss-old-230729/helpers/_units.scss +68 -0
- package/trash/scss-old-230729/helpers/_utilities.scss +87 -0
- package/trash/scss-old-230729/packages/README.md +3 -0
- package/trash/scss-old-230729/packages/everything.scss +17 -0
- package/trash/vue/directives/background-image-url.js +12 -0
- package/trash/vue/helpers/add-required-components.js +14 -0
- package/trash/vue/ui/CollapsibleRegion/CollapsibleRegion.vue +277 -0
- package/trash/vue/ui/CollapsibleRegion/Demo.vue +101 -0
- package/trash/vue/ui/Dropdown/Dropdown.vue +184 -0
- package/trash/vue/ui/Modals/components/Modal.vue +49 -0
- package/trash/vue/ui/Modals/components/Modals.vue +103 -0
- package/trash/vue/ui/Modals/plugin.js +215 -0
- package/trash/vue/ui/Modals/readme.note +10 -0
- package/trash/vue/ui/Modals/reference/example-usage.vue +27 -0
- package/trash/vue/ui/Modals/reference/wcag-example/dialog.js +324 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @todo - Need to have scroll handler check scroll position
|
|
3
|
+
* @todo - Determine if controls should be visible
|
|
4
|
+
* @todo - Make the amount the scroll controls move forward or backward based on amount or function
|
|
5
|
+
* the user can use this to increment by a certain number of items
|
|
6
|
+
* @todo - Provide accessible names to buttons but don't worry about hiding these from screenreaders
|
|
7
|
+
* @todo - Document that user could use something like [https://github.com/LachlanArthur/scroll-snap-api/tree/master/src] to have it go between items
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
import { log, logError, logWarning } from "../utils/logger.js";
|
|
11
|
+
import { hasRequiredProps } from '../utils/object.js';
|
|
12
|
+
const requiredElements = [
|
|
13
|
+
"track",
|
|
14
|
+
"controls"
|
|
15
|
+
];
|
|
16
|
+
export class OverflowScroller {
|
|
17
|
+
static instances = [];
|
|
18
|
+
static defaults = {
|
|
19
|
+
namespace: "OverflowScroller",
|
|
20
|
+
events: {},
|
|
21
|
+
horizontal: true,
|
|
22
|
+
offsetStart: 100,
|
|
23
|
+
offsetEnd: 100,
|
|
24
|
+
amount: "auto",
|
|
25
|
+
}
|
|
26
|
+
constructor(elements, config) {
|
|
27
|
+
this.options = Object.assign({}, OverflowScroller.defaults, config);
|
|
28
|
+
if (!hasRequiredProps(requiredElements)) {
|
|
29
|
+
logError(this, 'Missing a required Element');
|
|
30
|
+
}
|
|
31
|
+
this.elements = {
|
|
32
|
+
...elements,
|
|
33
|
+
...this.createControls(elements.controls)
|
|
34
|
+
};
|
|
35
|
+
this.nextEnabled = true;
|
|
36
|
+
this.previousEnabled = true;
|
|
37
|
+
this.scrollHandler = (e) => this.onScroll(e);
|
|
38
|
+
this.elements.track.addEventListener("scroll", this.scrollHandler, { passive: true });
|
|
39
|
+
this.checkOverflow();
|
|
40
|
+
this.onScroll();
|
|
41
|
+
}
|
|
42
|
+
checkOverflow() {
|
|
43
|
+
const { track } = this.elements;
|
|
44
|
+
this.hasOverflow = track.scrollWidth > track.clientWidth;
|
|
45
|
+
}
|
|
46
|
+
createControls(context) {
|
|
47
|
+
const controls = document.createElement('ul');
|
|
48
|
+
const previousItem = document.createElement("li");
|
|
49
|
+
const nextItem = document.createElement("li");
|
|
50
|
+
const previous = this.createControlButton("previous");
|
|
51
|
+
const next = this.createControlButton("next");
|
|
52
|
+
const itemClass = this.getClass("controls-item");
|
|
53
|
+
nextItem.classList.add(itemClass);
|
|
54
|
+
nextItem.classList.add(itemClass + "--next");
|
|
55
|
+
previousItem.classList.add(itemClass);
|
|
56
|
+
previousItem.classList.add(itemClass + "--previous");
|
|
57
|
+
controls.classList.add(this.getClass("controls"));
|
|
58
|
+
previousItem.appendChild(previous);
|
|
59
|
+
nextItem.appendChild(next);
|
|
60
|
+
controls.appendChild(previousItem);
|
|
61
|
+
controls.appendChild(nextItem);
|
|
62
|
+
previous.addEventListener('click', this.previous.bind(this));
|
|
63
|
+
next.addEventListener('click', this.next.bind(this));
|
|
64
|
+
context.appendChild(controls);
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
controls,
|
|
68
|
+
previousItem,
|
|
69
|
+
nextItem,
|
|
70
|
+
previous,
|
|
71
|
+
next
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
createControlButton(action) {
|
|
75
|
+
const button = document.createElement("button");
|
|
76
|
+
button.classList.add(this.getClass("control-button"));
|
|
77
|
+
button.classList.add(this.getClass(`control-button--${ action }`));
|
|
78
|
+
button.setAttribute("type", "button");
|
|
79
|
+
button.innerHTML = this.getControlContent(action);
|
|
80
|
+
return button;
|
|
81
|
+
}
|
|
82
|
+
getControlContent(action) {
|
|
83
|
+
return `
|
|
84
|
+
<span class="hidden-visually">${ action }</span>
|
|
85
|
+
<span aria-hidden="true">${ action === 'next' ? '→' : '←' }</span>
|
|
86
|
+
`;
|
|
87
|
+
}
|
|
88
|
+
onScroll(event) {
|
|
89
|
+
if (!this.hasOverflow) return;
|
|
90
|
+
this.onScrollHorizontal();
|
|
91
|
+
}
|
|
92
|
+
onScrollHorizontal() {
|
|
93
|
+
const { nextEnabled, previousEnabled } = this;
|
|
94
|
+
const { track } = this.elements;
|
|
95
|
+
const { offsetStart, offsetEnd } = this.options;
|
|
96
|
+
const { scrollWidth, clientWidth, scrollLeft } = track;
|
|
97
|
+
const atStart = scrollLeft <= offsetStart;
|
|
98
|
+
const atEnd = scrollWidth - scrollLeft - offsetEnd <= clientWidth;
|
|
99
|
+
if (atStart && previousEnabled) {
|
|
100
|
+
this.setControlState("previous", false);
|
|
101
|
+
} else if (!atStart && !previousEnabled) {
|
|
102
|
+
this.setControlState("previous", true);
|
|
103
|
+
}
|
|
104
|
+
if (atEnd && nextEnabled) {
|
|
105
|
+
this.setControlState("next", false);
|
|
106
|
+
} else if (!atEnd && !nextEnabled) {
|
|
107
|
+
this.setControlState("next", true);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
setControlState(dir, enabled) {
|
|
111
|
+
const isNext = dir === "next";
|
|
112
|
+
const { next, nextItem, previous, previousItem } = this.elements;
|
|
113
|
+
const item = isNext ? nextItem : previousItem;
|
|
114
|
+
const button = isNext ? next : previous;
|
|
115
|
+
const classlistMethod = enabled ? 'remove' : 'add';
|
|
116
|
+
|
|
117
|
+
item.classList[classlistMethod](this.getClass("controls-item--disabled"));
|
|
118
|
+
button.classList[enabled ? 'remove' : 'add'](this.getClass("control--disabled"));
|
|
119
|
+
if (enabled) {
|
|
120
|
+
button.removeAttribute("disabled");
|
|
121
|
+
} else {
|
|
122
|
+
button.setAttribute("disabled", "");
|
|
123
|
+
}
|
|
124
|
+
this[isNext ? 'nextEnabled' : 'previousEnabled'] = enabled;
|
|
125
|
+
}
|
|
126
|
+
resolveAmount(dir) {
|
|
127
|
+
const isNext = dir === "next";
|
|
128
|
+
const { amount } = this.options;
|
|
129
|
+
const { scrollLeft, offsetWidth } = this.elements.track;
|
|
130
|
+
if (amount === "auto") {
|
|
131
|
+
return isNext ? scrollLeft + offsetWidth : scrollLeft - offsetWidth;
|
|
132
|
+
} else if (typeof amount === "function") {
|
|
133
|
+
return amount(this, dir);
|
|
134
|
+
} else if (typeof amount === "number") {
|
|
135
|
+
return isNext ? scrollLeft + amount : scrollLeft - amount;
|
|
136
|
+
}
|
|
137
|
+
logError("Unable to resolve amount for scroll");
|
|
138
|
+
return 500;
|
|
139
|
+
}
|
|
140
|
+
next() {
|
|
141
|
+
this.elements.track.scrollTo({
|
|
142
|
+
top: 0,
|
|
143
|
+
left: this.resolveAmount("next"),
|
|
144
|
+
behavior: "smooth"
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
previous() {
|
|
148
|
+
this.elements.track.scrollTo({
|
|
149
|
+
top: 0,
|
|
150
|
+
left: this.resolveAmount("previous"),
|
|
151
|
+
behavior: "smooth"
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
getClass(child) {
|
|
155
|
+
const { namespace } = this.options;
|
|
156
|
+
return `${ namespace }__${ child }`;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export default OverflowScroller;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Grabs Breakpoint from CSS
|
|
3
|
+
// =============================================================================
|
|
4
|
+
|
|
5
|
+
// Version: 1.0.3
|
|
6
|
+
// Changes:
|
|
7
|
+
// 1.0.2 | Updates to work with the updated modal script which has
|
|
8
|
+
// to attach it's own trigger handlers
|
|
9
|
+
// Description: Drupal programmatic modal insertion script (interface = jquery prototype)
|
|
10
|
+
// Changes: 1.0.2 - Added ability to pass class to container
|
|
11
|
+
|
|
12
|
+
import { setupModal, show, attachTriggers, triggerAttr } from "./modals.js";
|
|
13
|
+
import { dispatch } from "./events.js";
|
|
14
|
+
|
|
15
|
+
const $ = window.jQuery;
|
|
16
|
+
const containerId = 'programmatic-modal';
|
|
17
|
+
const selectorTrigger = '[data-programmatic-modal-trigger]';
|
|
18
|
+
const defaults = {
|
|
19
|
+
removeOnClose: true,
|
|
20
|
+
settings: {},
|
|
21
|
+
classes: []
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
let count = 0;
|
|
25
|
+
let cachedTrigger;
|
|
26
|
+
|
|
27
|
+
// Drupal calls the jquery 'programaticModal' from InvokeCommand())
|
|
28
|
+
$.fn.programaticModal = newModal;
|
|
29
|
+
|
|
30
|
+
// keep track of trigger clicks to return user on close (Drupal doesn't send trigger clicked, that I know of)
|
|
31
|
+
document.addEventListener('click', cacheTrigger, true);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Sets up a new ajax triggered modal and opens it
|
|
35
|
+
* @param {String} args Arguments provided from Drupal (JSON format)
|
|
36
|
+
*/
|
|
37
|
+
function newModal(args) {
|
|
38
|
+
args = args ? JSON.parse(args) : {};
|
|
39
|
+
const config = Object.assign({}, defaults, args);
|
|
40
|
+
const modal = document.querySelector(`#${ containerId }`);
|
|
41
|
+
const id = setModalId(modal, config.id);
|
|
42
|
+
const classes = ["programmatic-modal-content", ...config.classes ];
|
|
43
|
+
modal.classList.add(...classes);
|
|
44
|
+
// Add a new placeholder container
|
|
45
|
+
newContainer();
|
|
46
|
+
// Intialize and open the new modal
|
|
47
|
+
setupModal(modal, config.settings);
|
|
48
|
+
show(id, {
|
|
49
|
+
onShow(modal) {
|
|
50
|
+
dispatch('pageModified', modal);
|
|
51
|
+
},
|
|
52
|
+
onClose(element) {
|
|
53
|
+
if (config.removeOnClose) {
|
|
54
|
+
element.parentNode.removeChild(element);
|
|
55
|
+
}
|
|
56
|
+
// For accessiblity/usablity (return to last clicked trigger)
|
|
57
|
+
if (cachedTrigger) {
|
|
58
|
+
cachedTrigger.focus();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// Attach handler so that it can reopen that modal
|
|
63
|
+
if (!config.removeOnClose && cachedTrigger) {
|
|
64
|
+
cachedTrigger.setAttribute(triggerAttr, id);
|
|
65
|
+
attachTriggers();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Sets and returns the modal's id
|
|
70
|
+
*/
|
|
71
|
+
function setModalId(element, id) {
|
|
72
|
+
element.id = id || `programmatic-modal--id-${ ++count }`;
|
|
73
|
+
return element.id;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Once we remove the placeholder containers id (above)
|
|
77
|
+
* we create another programmatic placeholder container
|
|
78
|
+
* for the next programmitic container
|
|
79
|
+
*/
|
|
80
|
+
function newContainer() {
|
|
81
|
+
const container = document.createElement('div');
|
|
82
|
+
container.id = 'programmatic-modal';
|
|
83
|
+
document.body.append(container);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Document click handler, will cache the trigger that caused the modal to open
|
|
87
|
+
*/
|
|
88
|
+
function cacheTrigger(event) {
|
|
89
|
+
const trigger = event.target.closest(selectorTrigger);
|
|
90
|
+
if (trigger) cachedTrigger = trigger;
|
|
91
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Element Resizer
|
|
3
|
+
// =============================================================================
|
|
4
|
+
|
|
5
|
+
// Version: 1.0.1
|
|
6
|
+
|
|
7
|
+
// Description: Adds resizing ability to an element (only horizontal currently)
|
|
8
|
+
|
|
9
|
+
// Reference: - http://jsfiddle.net/3jMQD/614/
|
|
10
|
+
|
|
11
|
+
import { logError } from "../utils/logger.js";
|
|
12
|
+
|
|
13
|
+
export default class ElementResizer {
|
|
14
|
+
static defaults = {
|
|
15
|
+
debug: false,
|
|
16
|
+
overrideMaxWidth: false,
|
|
17
|
+
fromLeft: false
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* @param {Node} container Container to be resize
|
|
22
|
+
* @param {Node} control Resize handle element
|
|
23
|
+
* @param {Object} options Defualt can be changed on class
|
|
24
|
+
* @param {Boolean} options.debug Enable non-essential debugging logs
|
|
25
|
+
* @param {Boolean} options.overrideMaxWidth When script is activated by handle remove the elements max-width and allow the width of the resize to exceed the max (default false)
|
|
26
|
+
* @param {Boolean} options.fromLeft The script should assume the handle is on the left side of the element
|
|
27
|
+
*/
|
|
28
|
+
constructor(container, control, options) {
|
|
29
|
+
if (!control || !container) {
|
|
30
|
+
logError(this, "Missing required elements 'control' or 'container'");
|
|
31
|
+
}
|
|
32
|
+
this.options = Object.assign({}, ElementResizer.defaults, options);
|
|
33
|
+
this.container = container;
|
|
34
|
+
this.control = control;
|
|
35
|
+
this.handlerMousedown = this.onMousedown.bind(this);
|
|
36
|
+
this.control.addEventListener('mousedown', this.handlerMousedown);
|
|
37
|
+
}
|
|
38
|
+
destroy() {
|
|
39
|
+
this.control.removeEventListener('mousedown', this.handlerMousedown);
|
|
40
|
+
}
|
|
41
|
+
onMousedown(e) {
|
|
42
|
+
const { overrideMaxWidth, fromLeft } = this.options;
|
|
43
|
+
const doc = document.documentElement;
|
|
44
|
+
const win = document.defaultView;
|
|
45
|
+
const x = e.clientX;
|
|
46
|
+
const width = parseInt(win.getComputedStyle(this.container).width, 10);
|
|
47
|
+
if (overrideMaxWidth) {
|
|
48
|
+
this.container.style.maxWidth = 'none';
|
|
49
|
+
}
|
|
50
|
+
const mousemove = event => {
|
|
51
|
+
const polarity = fromLeft ? -1 : 1;
|
|
52
|
+
this.container.style.width = `${ width + ((event.clientX - x) * polarity) }px`;
|
|
53
|
+
};
|
|
54
|
+
const cleanup = () => {
|
|
55
|
+
doc.removeEventListener('mousemove', mousemove, false);
|
|
56
|
+
};
|
|
57
|
+
doc.addEventListener('mousemove', mousemove, false);
|
|
58
|
+
doc.addEventListener('mouseup', cleanup, { capture: true, once: true });
|
|
59
|
+
}
|
|
60
|
+
}
|