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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
/* eslint-env browser */
import {cssProp} from '../client-util.js';
import {stitchArrays} from '../../shared-util/sugar.js';
export const info = {
id: 'expandableGallerySectionInfo',
items: null,
toggles: null,
expandCues: null,
collapseCues: null,
};
export function getPageReferences() {
const expandos =
Array.from(document.querySelectorAll('.grid-expando'));
const grids =
expandos
.map(expando => expando.closest('.grid-listing'));
info.items =
grids
.map(grid => grid.querySelectorAll('.grid-item'))
.map(items => Array.from(items));
info.toggles =
expandos
.map(expando => expando.querySelector('.grid-expando-toggle'));
info.expandCues =
info.toggles
.map(toggle => toggle.querySelector('.grid-expand-cue'));
info.collapseCues =
info.toggles
.map(toggle => toggle.querySelector('.grid-collapse-cue'));
}
export function addPageListeners() {
stitchArrays({
items: info.items,
toggle: info.toggles,
expandCue: info.expandCues,
collapseCue: info.collapseCues,
}).forEach(({
items,
toggle,
expandCue,
collapseCue,
}) => {
toggle.addEventListener('click', domEvent => {
domEvent.preventDefault();
const collapsed =
items.some(item =>
item.classList.contains('hidden-by-expandable-cut'));
for (const item of items) {
if (
!item.classList.contains('hidden-by-expandable-cut') &&
!item.classList.contains('shown-by-expandable-cut')
) continue;
if (collapsed) {
item.classList.remove('hidden-by-expandable-cut');
item.classList.add('shown-by-expandable-cut');
} else {
item.classList.add('hidden-by-expandable-cut');
item.classList.remove('shown-by-expandable-cut');
}
}
if (collapsed) {
cssProp(expandCue, 'display', 'none');
cssProp(collapseCue, 'display', null);
} else {
cssProp(expandCue, 'display', null);
cssProp(collapseCue, 'display', 'none');
}
});
});
}
|