-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathmarquee.js
56 lines (52 loc) · 1.97 KB
/
marquee.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
56
/*
* Copyright 2022 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
/*
* Marquee - v0.0.1
*/
function decorateButtons(el) {
const buttons = el.querySelectorAll('em a, strong a');
buttons.forEach((button) => {
const parent = button.parentElement;
const buttonType = parent.nodeName === 'STRONG' ? 'blue' : 'outline';
button.classList.add('con-button', buttonType);
parent.insertAdjacentElement('afterend', button);
parent.remove();
});
if (buttons.length > 0) {
buttons[0].closest('p').classList.add('action-area');
}
}
function decorateText(el) {
const headings = el.querySelectorAll('h1, h2, h3, h4, h5, h6');
const heading = headings[headings.length - 1];
heading.classList.add('heading-XL');
heading.nextElementSibling.classList.add('body-M');
if (heading.previousElementSibling) {
heading.previousElementSibling.classList.add('detail-M');
}
}
export default function init(el) {
const children = el.querySelectorAll(':scope > div');
const foreground = children[children.length - 1];
if (children.length > 1) {
children[0].classList.add('background');
}
foreground.classList.add('foreground', 'container');
const text = foreground.querySelector('h1, h2, h3, h4, h5, h6').closest('div');
text.classList.add('text');
const image = foreground.querySelector(':scope > div:not([class])');
if (image) {
image.classList.add('image');
}
decorateButtons(text);
decorateText(text);
}