PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
gutenberg / build / modules / block-library / accordion / view.js

view.js in Gutenberg trunk, at build/modules/block-library/accordion/view.js

107 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 // packages/block-library/build-module/accordion/view.mjs
2 import { store, getContext } from "@wordpress/interactivity";
3 var hashHandled = false;
4 var { actions } = store(
5 "core/accordion",
6 {
7 state: {
8 get isOpen() {
9 const { id, accordionItems } = getContext();
10 const accordionItem = accordionItems.find(
11 (item) => item.id === id
12 );
13 return accordionItem ? accordionItem.isOpen : false;
14 },
15 get isHidden() {
16 const { id, accordionItems } = getContext();
17 const accordionItem = accordionItems.find(
18 (item) => item.id === id
19 );
20 return accordionItem?.isOpen ? null : "until-found";
21 }
22 },
23 actions: {
24 toggle: () => {
25 const context = getContext();
26 const { id, autoclose, accordionItems } = context;
27 const accordionItem = accordionItems.find(
28 (item) => item.id === id
29 );
30 if (autoclose) {
31 accordionItems.forEach((item) => {
32 item.isOpen = item.id === id ? !accordionItem.isOpen : false;
33 });
34 } else {
35 accordionItem.isOpen = !accordionItem.isOpen;
36 }
37 },
38 openPanelByHash: () => {
39 if (hashHandled) {
40 return;
41 }
42 const context = getContext();
43 const { id, accordionItems, autoclose } = context;
44 const targetElement = document.querySelector(":target");
45 if (!targetElement) {
46 return;
47 }
48 const panelElement = window.document.querySelector(
49 '.wp-block-accordion-panel[aria-labelledby="' + id + '"]'
50 );
51 if (!panelElement || !panelElement.contains(targetElement)) {
52 return;
53 }
54 hashHandled = true;
55 if (autoclose) {
56 accordionItems.forEach((item) => {
57 item.isOpen = item.id === id;
58 });
59 } else {
60 const targetItem = accordionItems.find(
61 (item) => item.id === id
62 );
63 if (targetItem) {
64 targetItem.isOpen = true;
65 }
66 }
67 window.setTimeout(() => {
68 targetElement.scrollIntoView();
69 }, 0);
70 },
71 handleBeforeMatch: () => {
72 const context = getContext();
73 const { id, autoclose, accordionItems } = context;
74 const accordionItem = accordionItems.find(
75 (item) => item.id === id
76 );
77 if (accordionItem) {
78 if (autoclose) {
79 accordionItems.forEach((item) => {
80 item.isOpen = item.id === id;
81 });
82 } else {
83 accordionItem.isOpen = true;
84 }
85 }
86 }
87 },
88 callbacks: {
89 initAccordionItems: () => {
90 const context = getContext();
91 const { id, openByDefault, accordionItems } = context;
92 accordionItems.push({
93 id,
94 isOpen: openByDefault
95 });
96 actions.openPanelByHash();
97 },
98 hashChange: () => {
99 hashHandled = false;
100 actions.openPanelByHash();
101 }
102 }
103 },
104 { lock: true }
105 );
106 //# sourceMappingURL=view.js.map
107