| 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
 | 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');
        }
      });
    });
}
 |