@internetstiftelsen/styleguide 5.0.18 → 5.1.0
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/dist/app.js +71 -0
- package/dist/assets/js/Events.js +43 -77
- package/dist/assets/js/RequestError.js +16 -31
- package/dist/assets/js/anchorScroll.js +22 -15
- package/dist/assets/js/charCounter.js +100 -142
- package/dist/assets/js/className.js +19 -20
- package/dist/assets/js/conditional.js +96 -152
- package/dist/assets/js/debounce.js +15 -22
- package/dist/assets/js/el.js +108 -159
- package/dist/assets/js/getCookieByName.js +13 -11
- package/dist/assets/js/hasCookieConsent.js +30 -40
- package/dist/assets/js/htmlTextLength.js +12 -10
- package/dist/assets/js/iconToggle.js +16 -20
- package/dist/assets/js/nodeAdded.js +40 -53
- package/dist/assets/js/objToQuery.js +25 -41
- package/dist/assets/js/offset.js +29 -25
- package/dist/assets/js/ot.js +10 -13
- package/dist/assets/js/parallax.js +23 -23
- package/dist/assets/js/queryToObj.js +16 -22
- package/dist/assets/js/readSpeakerHandling.js +26 -28
- package/dist/assets/js/request.js +43 -52
- package/dist/assets/js/responsivePosition.js +46 -74
- package/dist/assets/js/stringToNode.js +11 -10
- package/dist/assets/js/template.js +15 -21
- package/dist/assets/js/textToggle.js +19 -24
- package/dist/assets/js/track.js +14 -12
- package/dist/assets/js/uid.js +10 -6
- package/dist/assets/js/utmGenerator.js +27 -33
- package/dist/assets/js/validationMessage.js +18 -25
- package/dist/assets/js/youtube.js +134 -170
- package/dist/atoms/button/Button.js +42 -55
- package/dist/atoms/file/file.js +25 -29
- package/dist/atoms/file/filePreview.js +27 -31
- package/dist/atoms/grid-toggle/grid-toggle.js +6 -9
- package/dist/atoms/height-limiter/height-limiter.js +37 -50
- package/dist/atoms/password-toggle/password-toggle.js +9 -11
- package/dist/atoms/range/range.js +32 -39
- package/dist/atoms/textarea/rich-text.js +223 -205
- package/dist/atoms/tooltip/tooltip.js +13 -17
- package/dist/components.js +42 -77
- package/dist/focusTrap.js +66 -77
- package/dist/molecules/alert/alert.js +15 -20
- package/dist/molecules/context-menu/context-menu.js +11 -16
- package/dist/molecules/continue-video-guide/continue-video-guide.js +90 -101
- package/dist/molecules/cookie-disclaimer/cookie-disclaimer.js +24 -33
- package/dist/molecules/form/Form.js +242 -352
- package/dist/molecules/form/index.js +15 -14
- package/dist/molecules/glider/glider-course.js +62 -75
- package/dist/molecules/glider/glider-hero.js +88 -101
- package/dist/molecules/glider/glider.js +49 -45
- package/dist/molecules/modal/modal.js +256 -325
- package/dist/molecules/multi-select/multi-select.js +198 -304
- package/dist/molecules/natural-language-form/natural-language-form.js +32 -46
- package/dist/molecules/overview-navigation/overview-navigation.js +90 -141
- package/dist/molecules/share/share.js +15 -20
- package/dist/molecules/system-error/system-error.js +6 -9
- package/dist/organisms/accordion/accordion.js +44 -50
- package/dist/organisms/footer/footer.js +1 -1
- package/dist/organisms/haveibeenpwned/haveibeenpwned.js +17 -16
- package/dist/organisms/mailchimp/mailchimp.js +72 -89
- package/dist/organisms/map-box/map-box.js +3 -4
- package/dist/organisms/mega-menu/mega-menu.js +177 -212
- package/dist/organisms/podcast/podcast.js +192 -215
- package/dist/organisms/schedule/schedule-filter.js +9 -15
- package/dist/organisms/tabs/tabs.js +194 -253
- package/dist/organisms/timeline/openTimelineItem.js +38 -51
- package/dist/organisms/timeline/timeline.js +111 -128
- package/dist/organisms/video-guide/VideoGuidePlayback.js +210 -286
- package/dist/organisms/video-guide/VideoGuideSubtitles.js +57 -80
- package/dist/organisms/video-guide/VideoGuideTimeline.js +74 -108
- package/dist/organisms/video-guide/getCurrentCueIndex.js +11 -9
- package/dist/organisms/video-guide/video-guide.js +66 -103
- package/dist/utilities/tab-highlighting/tab-highlighting.js +14 -22
- package/dist/vendor/toggle/a11y.toggle-switcher.js +10 -16
- package/package.json +78 -99
- package/src/app.js +5 -5
- package/src/assets/js/anchorScroll.js +1 -1
- package/src/assets/js/offset.js +1 -1
- package/src/atoms/button/Button.js +1 -1
- package/src/atoms/icon/richtext-ordered-list.svg +1 -1
- package/src/atoms/icon/sprite.svg +6 -5
- package/src/molecules/glider/glider-course.js +0 -2
- package/src/molecules/glider/glider.js +2 -2
- package/src/organisms/accordion/accordion.js +1 -2
- package/src/organisms/timeline/timeline.js +2 -3
- package/dist/atoms/timeline/anchorScroll.js +0 -13
- package/dist/atoms/toggle-high-contrast/toggle-high-contrast.js +0 -12
- package/dist/molecules/glider/glider-single.js +0 -68
- package/dist/molecules/modal/modal-graph.js +0 -40
- package/dist/molecules/timeline-navigation/timeline-navigation.js +0 -34
- /package/src/atoms/icon/{heading-3.svg → richtext-heading-3.svg} +0 -0
- /package/src/molecules/alert/{_alert.scss → alert.scss} +0 -0
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var toolTipText = document.querySelector('[data-tooltip]');
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
const toolTip = document.querySelector('[role="tooltip"]');
|
|
3
|
+
const toolTipText = document.querySelector('[data-tooltip]');
|
|
6
4
|
function isInViewport(elem) {
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
const distance = elem.getBoundingClientRect();
|
|
6
|
+
return distance.top >= 30 && distance.left >= 30 && distance.bottom <= (window.innerHeight || document.documentElement.clientHeight) && distance.right <= (window.innerWidth || document.documentElement.clientWidth);
|
|
9
7
|
}
|
|
10
|
-
|
|
11
8
|
function positionToolTip() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
if (isInViewport(toolTip)) {
|
|
10
|
+
toolTipText.classList.remove('down');
|
|
11
|
+
} else {
|
|
12
|
+
toolTipText.classList.add('down');
|
|
13
|
+
}
|
|
17
14
|
}
|
|
18
|
-
|
|
19
15
|
if (toolTip) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
16
|
+
positionToolTip();
|
|
17
|
+
window.addEventListener('scroll', positionToolTip);
|
|
18
|
+
}
|
package/dist/components.js
CHANGED
|
@@ -1,77 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require(
|
|
6
|
-
|
|
7
|
-
require(
|
|
8
|
-
|
|
9
|
-
require(
|
|
10
|
-
|
|
11
|
-
require(
|
|
12
|
-
|
|
13
|
-
require(
|
|
14
|
-
|
|
15
|
-
require(
|
|
16
|
-
|
|
17
|
-
require(
|
|
18
|
-
|
|
19
|
-
require(
|
|
20
|
-
|
|
21
|
-
require(
|
|
22
|
-
|
|
23
|
-
require(
|
|
24
|
-
|
|
25
|
-
require(
|
|
26
|
-
|
|
27
|
-
require(
|
|
28
|
-
|
|
29
|
-
require(
|
|
30
|
-
|
|
31
|
-
require(
|
|
32
|
-
|
|
33
|
-
require(
|
|
34
|
-
|
|
35
|
-
require(
|
|
36
|
-
|
|
37
|
-
require(
|
|
38
|
-
|
|
39
|
-
require(
|
|
40
|
-
|
|
41
|
-
require(
|
|
42
|
-
|
|
43
|
-
require('./molecules/glider/glider');
|
|
44
|
-
|
|
45
|
-
require('./molecules/glider/glider-course');
|
|
46
|
-
|
|
47
|
-
require('./molecules/glider/glider-hero');
|
|
48
|
-
|
|
49
|
-
require('./molecules/context-menu/context-menu');
|
|
50
|
-
|
|
51
|
-
require('./molecules/alert/alert');
|
|
52
|
-
|
|
53
|
-
require('./molecules/continue-video-guide/continue-video-guide');
|
|
54
|
-
|
|
55
|
-
require('./organisms/video-guide/video-guide');
|
|
56
|
-
|
|
57
|
-
require('./organisms/timeline/timeline');
|
|
58
|
-
|
|
59
|
-
require('./molecules/overview-navigation/overview-navigation');
|
|
60
|
-
|
|
61
|
-
require('./organisms/schedule/schedule-filter');
|
|
62
|
-
|
|
63
|
-
require('./assets/js/ot');
|
|
64
|
-
|
|
65
|
-
require('./assets/js/charCounter');
|
|
66
|
-
|
|
67
|
-
require('./atoms/range/range');
|
|
68
|
-
|
|
69
|
-
require('./assets/js/utmGenerator');
|
|
70
|
-
|
|
71
|
-
require('./assets/js/textToggle');
|
|
72
|
-
|
|
73
|
-
require('./assets/js/iconToggle');
|
|
74
|
-
|
|
75
|
-
require('./molecules/multi-select/multi-select');
|
|
76
|
-
|
|
77
|
-
require('./organisms/haveibeenpwned/haveibeenpwned');
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
require("./assets/js/readSpeakerHandling");
|
|
6
|
+
require("./molecules/form");
|
|
7
|
+
require("./atoms/textarea/rich-text");
|
|
8
|
+
require("./atoms/password-toggle/password-toggle");
|
|
9
|
+
require("./utilities/tab-highlighting/tab-highlighting");
|
|
10
|
+
require("./molecules/system-error/system-error");
|
|
11
|
+
require("./molecules/cookie-disclaimer/cookie-disclaimer");
|
|
12
|
+
require("./organisms/accordion/accordion");
|
|
13
|
+
require("./organisms/tabs/tabs");
|
|
14
|
+
require("./organisms/mailchimp/mailchimp");
|
|
15
|
+
require("./organisms/mega-menu/mega-menu");
|
|
16
|
+
require("./molecules/share/share");
|
|
17
|
+
require("./molecules/natural-language-form/natural-language-form");
|
|
18
|
+
require("./atoms/tooltip/tooltip");
|
|
19
|
+
require("./atoms/height-limiter/height-limiter");
|
|
20
|
+
require("./atoms/file/file");
|
|
21
|
+
require("./atoms/file/filePreview");
|
|
22
|
+
require("./organisms/podcast/podcast");
|
|
23
|
+
require("./assets/js/responsivePosition");
|
|
24
|
+
require("./assets/js/youtube");
|
|
25
|
+
require("./molecules/glider/glider");
|
|
26
|
+
require("./molecules/glider/glider-course");
|
|
27
|
+
require("./molecules/glider/glider-hero");
|
|
28
|
+
require("./molecules/context-menu/context-menu");
|
|
29
|
+
require("./molecules/alert/alert");
|
|
30
|
+
require("./molecules/continue-video-guide/continue-video-guide");
|
|
31
|
+
require("./organisms/video-guide/video-guide");
|
|
32
|
+
require("./organisms/timeline/timeline");
|
|
33
|
+
require("./molecules/overview-navigation/overview-navigation");
|
|
34
|
+
require("./organisms/schedule/schedule-filter");
|
|
35
|
+
require("./assets/js/ot");
|
|
36
|
+
require("./assets/js/charCounter");
|
|
37
|
+
require("./atoms/range/range");
|
|
38
|
+
require("./assets/js/utmGenerator");
|
|
39
|
+
require("./assets/js/textToggle");
|
|
40
|
+
require("./assets/js/iconToggle");
|
|
41
|
+
require("./molecules/multi-select/multi-select");
|
|
42
|
+
require("./organisms/haveibeenpwned/haveibeenpwned");
|
package/dist/focusTrap.js
CHANGED
|
@@ -1,91 +1,80 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return focusTrap;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _focustrap = require("focus-trap");
|
|
10
12
|
function getContainer(element) {
|
|
11
|
-
|
|
13
|
+
return document.getElementById(element.getAttribute('data-a11y-toggle'));
|
|
12
14
|
}
|
|
13
|
-
|
|
14
15
|
function focusTrap(container) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
if (container && container.getAttribute('data-focus-trap') !== 'false' && !container.focusTrap) {
|
|
17
|
+
container.focusTrap = (0, _focustrap.createFocusTrap)(`#${container.id}`, {
|
|
18
|
+
clickOutsideDeactivates: true
|
|
19
|
+
});
|
|
20
|
+
container.setAttribute('data-focus-trap', 'true');
|
|
21
|
+
}
|
|
19
22
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
container.setAttribute('data-container', 'true');
|
|
31
|
-
|
|
32
|
-
if (!container.focusTrap) {
|
|
33
|
-
focusTrap(container);
|
|
34
|
-
}
|
|
23
|
+
const buttons = document.querySelectorAll('[data-a11y-toggle]');
|
|
24
|
+
[].forEach.call(buttons, (button)=>{
|
|
25
|
+
const container = getContainer(button);
|
|
26
|
+
if (!container) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
container.setAttribute('data-container', 'true');
|
|
30
|
+
if (!container.focusTrap) {
|
|
31
|
+
focusTrap(container);
|
|
32
|
+
}
|
|
35
33
|
});
|
|
36
|
-
|
|
37
34
|
function delegate(handler, e) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
handler(e, target);
|
|
35
|
+
const target = e.target.closest('[data-a11y-toggle]');
|
|
36
|
+
if (!target) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
handler(e, target);
|
|
45
40
|
}
|
|
46
|
-
|
|
47
41
|
function handleKeyDown(e, element) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
}
|
|
42
|
+
if (element.getAttribute('aria-expanded') === 'true') {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (e.keyCode === 9) {
|
|
46
|
+
const container = getContainer(element);
|
|
47
|
+
if (container) {
|
|
48
|
+
container.tabIndex = -1;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
59
51
|
}
|
|
60
|
-
|
|
61
52
|
function handleFocusTrap(e, element) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}, { once: true });
|
|
86
|
-
}
|
|
87
|
-
}, 0);
|
|
53
|
+
const container = getContainer(element);
|
|
54
|
+
if (!container) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
focusTrap(container);
|
|
58
|
+
// Run on next tick
|
|
59
|
+
setTimeout(()=>{
|
|
60
|
+
if (container.getAttribute('aria-hidden') === 'false') {
|
|
61
|
+
container.tabIndex = 0;
|
|
62
|
+
if (container.focusTrap) {
|
|
63
|
+
container.focusTrap.activate();
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
if (container.focusTrap) {
|
|
67
|
+
container.focusTrap.deactivate();
|
|
68
|
+
}
|
|
69
|
+
container.addEventListener('transitionend', ()=>{
|
|
70
|
+
container.tabIndex = -1;
|
|
71
|
+
}, {
|
|
72
|
+
once: true
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}, 0);
|
|
88
76
|
}
|
|
89
|
-
|
|
90
77
|
document.addEventListener('click', delegate.bind(null, handleFocusTrap));
|
|
91
|
-
document.addEventListener('keydown', delegate.bind(null, handleKeyDown), {
|
|
78
|
+
document.addEventListener('keydown', delegate.bind(null, handleKeyDown), {
|
|
79
|
+
once: true
|
|
80
|
+
});
|
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var alerts = document.querySelectorAll('.js-dismiss-alert');
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
const alerts = document.querySelectorAll('.js-dismiss-alert');
|
|
5
3
|
function dismiss(alert) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
});
|
|
18
|
-
}
|
|
4
|
+
const target = alert.querySelector('[data-a11y-toggle]');
|
|
5
|
+
const id = target.closest('[role]').getAttribute('id');
|
|
6
|
+
const idElement = document.getElementById(id);
|
|
7
|
+
if (sessionStorage.getItem(id) !== 'is-dismissed') {
|
|
8
|
+
window.addEventListener('DOMContentLoaded', ()=>{
|
|
9
|
+
idElement.setAttribute('aria-hidden', 'false');
|
|
10
|
+
});
|
|
11
|
+
target.addEventListener('click', ()=>{
|
|
12
|
+
sessionStorage.setItem(id, 'is-dismissed');
|
|
13
|
+
});
|
|
14
|
+
}
|
|
19
15
|
}
|
|
20
|
-
|
|
21
16
|
if (alerts) {
|
|
22
|
-
|
|
23
|
-
}
|
|
17
|
+
[].forEach.call(alerts, dismiss);
|
|
18
|
+
}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var elements = document.querySelectorAll('[data-close-on-outside-click]');
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
const elements = document.querySelectorAll('[data-close-on-outside-click]');
|
|
5
3
|
function closeElement(element) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
});
|
|
4
|
+
document.addEventListener('mouseup', (e)=>{
|
|
5
|
+
const childElement = element.nextElementSibling;
|
|
6
|
+
/* Close menu on all clicks except the trigger button,
|
|
7
|
+
the menu and it's child elements and if the menu is actually open. */ if (!element.contains(e.target) && !childElement.contains(e.target) && element.getAttribute('aria-expanded') === 'true') {
|
|
8
|
+
element.click();
|
|
9
|
+
}
|
|
10
|
+
});
|
|
15
11
|
}
|
|
16
|
-
|
|
17
12
|
if (elements) {
|
|
18
|
-
|
|
19
|
-
}
|
|
13
|
+
[].forEach.call(elements, closeElement);
|
|
14
|
+
}
|
|
@@ -1,109 +1,98 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
12
|
-
|
|
13
|
-
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
14
|
-
|
|
15
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
16
|
-
|
|
17
|
-
function _CustomElement() {
|
|
18
|
-
return Reflect.construct(HTMLElement, [], this.__proto__.constructor);
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _className = /*#__PURE__*/ _interop_require_default(require("../../assets/js/className"));
|
|
6
|
+
function _interop_require_default(obj) {
|
|
7
|
+
return obj && obj.__esModule ? obj : {
|
|
8
|
+
default: obj
|
|
9
|
+
};
|
|
19
10
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
11
|
+
class ProgressRing extends HTMLElement {
|
|
12
|
+
setProgress(percent) {
|
|
13
|
+
const offset = this.circumference - percent / 100 * this.circumference;
|
|
14
|
+
const circle = this.root.querySelector('circle');
|
|
15
|
+
circle.style.strokeDashoffset = offset;
|
|
16
|
+
}
|
|
17
|
+
static get observedAttributes() {
|
|
18
|
+
return [
|
|
19
|
+
'progress'
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
23
|
+
if (name === 'progress') {
|
|
24
|
+
this.setProgress(newValue);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
constructor(){
|
|
28
|
+
super();
|
|
29
|
+
const stroke = this.getAttribute('stroke');
|
|
30
|
+
const radius = this.getAttribute('radius');
|
|
31
|
+
const normalizedRadius = radius - stroke * 2;
|
|
32
|
+
this.circumference = normalizedRadius * 2 * Math.PI;
|
|
33
|
+
this.root = this.attachShadow({
|
|
34
|
+
mode: 'open'
|
|
35
|
+
});
|
|
36
|
+
this.root.innerHTML = `
|
|
37
|
+
<svg
|
|
38
|
+
height="${radius * 2}"
|
|
39
|
+
width="${radius * 2}"
|
|
40
|
+
>
|
|
41
|
+
<circle
|
|
42
|
+
stroke="white"
|
|
43
|
+
stroke-dasharray="${this.circumference} ${this.circumference}"
|
|
44
|
+
style="stroke-dashoffset:${this.circumference}"
|
|
45
|
+
stroke-width="${stroke}"
|
|
46
|
+
fill="transparent"
|
|
47
|
+
r="${normalizedRadius}"
|
|
48
|
+
cx="${radius}"
|
|
49
|
+
cy="${radius}"
|
|
50
|
+
/>
|
|
51
|
+
</svg>
|
|
52
|
+
|
|
53
|
+
<style>
|
|
54
|
+
circle {
|
|
55
|
+
transition: stroke-dashoffset 0.35s;
|
|
56
|
+
transform: rotate(-90deg);
|
|
57
|
+
transform-origin: 50% 50%;
|
|
56
58
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
}]);
|
|
63
|
-
|
|
64
|
-
return ProgressRing;
|
|
65
|
-
}(_CustomElement);
|
|
66
|
-
|
|
59
|
+
</style>
|
|
60
|
+
`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
67
63
|
window.customElements.define('progress-ring', ProgressRing);
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
const continueElement = document.querySelector('.js-guide-continue');
|
|
70
65
|
// Get value from sessionStorage if present
|
|
71
66
|
if (sessionStorage.getItem('InmsCurrentTime')) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
progressRing.setAttribute('progress', Math.floor(currentProgress * 100));
|
|
90
|
-
}
|
|
67
|
+
const videoCurrentTime = sessionStorage.getItem('InmsCurrentTime');
|
|
68
|
+
const videoDuration = sessionStorage.getItem('InmsDuration');
|
|
69
|
+
const progressRing = document.querySelector('progress-ring');
|
|
70
|
+
const continueLink = document.querySelector('.js-guide-continue-link');
|
|
71
|
+
const guideURL = sessionStorage.getItem('InmsCurrentGuideURL');
|
|
72
|
+
const guideImage = sessionStorage.getItem('InmsCurrentGuideImage');
|
|
73
|
+
if (videoCurrentTime > 0 && progressRing && continueElement && guideImage && continueLink) {
|
|
74
|
+
const alternativeText = continueLink.dataset.altText;
|
|
75
|
+
const currentProgress = videoCurrentTime / videoDuration;
|
|
76
|
+
const currentGuideImage = document.querySelector('.js-guide-continue-image');
|
|
77
|
+
continueElement.classList.add((0, _className.default)('m-continue-video-guide--has-progress'));
|
|
78
|
+
continueLink.setAttribute('href', guideURL);
|
|
79
|
+
currentGuideImage.src = guideImage;
|
|
80
|
+
continueLink.querySelector('span').innerText = alternativeText;
|
|
81
|
+
// Calculate percentage played
|
|
82
|
+
progressRing.setAttribute('progress', Math.floor(currentProgress * 100));
|
|
83
|
+
}
|
|
91
84
|
}
|
|
92
|
-
|
|
93
85
|
// Close Continue Component
|
|
94
|
-
|
|
95
|
-
|
|
86
|
+
const closeButton = document.querySelector('.js-guide-close');
|
|
96
87
|
if (closeButton) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
}
|
|
88
|
+
closeButton.addEventListener('click', ()=>{
|
|
89
|
+
sessionStorage.setItem('InmsGuideClosed', true);
|
|
90
|
+
continueElement.classList.remove('is-visible');
|
|
91
|
+
});
|
|
92
|
+
if (!sessionStorage.getItem('InmsGuideClosed')) {
|
|
93
|
+
continueElement.classList.add('is-visible');
|
|
94
|
+
}
|
|
95
|
+
if (document.querySelector('.js-video-guide')) {
|
|
96
|
+
continueElement.classList.remove('is-visible');
|
|
97
|
+
}
|
|
98
|
+
}
|