]> git.proxmox.com Git - pve-eslint.git/blob - eslint/docs/src/assets/js/main.js
import 8.23.1 source
[pve-eslint.git] / eslint / docs / src / assets / js / main.js
1 (function() {
2 var toc_trigger = document.getElementById("js-toc-label"),
3 toc = document.getElementById("js-toc-panel"),
4 body = document.getElementsByTagName("body")[0],
5 open = false;
6
7 if (toc && matchMedia) {
8 const mq = window.matchMedia("(max-width: 1023px)");
9 mq.addEventListener('change', WidthChange);
10 WidthChange(mq);
11 }
12
13 // media query change
14 function WidthChange(mq) {
15 if (mq.matches && toc_trigger) {
16 let text = toc_trigger.innerText;
17 let headingButton = document.createElement("button");
18 headingButton.setAttribute("aria-expanded", "false");
19 headingButton.innerText = text;
20 toc_trigger.innerHTML = "";
21
22 toc_trigger.appendChild(headingButton);
23 headingButton.innerHTML += `<svg class="toc-trigger-icon" width="12" height="8" aria-hidden="true" focusable="false" viewBox="0 0 12 8"><g fill="none"><path fill="currentColor" d="M1.41.59l4.59 4.58 4.59-4.58 1.41 1.41-6 6-6-6z"/><path d="M-6-8h24v24h-24z"/></g></svg>`;
24
25 toc.setAttribute("data-open", "false");
26 toc_trigger.setAttribute("aria-expanded", "false");
27 headingButton.addEventListener("click", toggleTOC, true);
28 } else {
29 toc_trigger.innerHTML = 'Table of Contents';
30 toc.setAttribute("data-open", "true");
31 }
32
33 }
34
35 function toggleTOC(e) {
36 if (!open) {
37 this.setAttribute("aria-expanded", "true");
38 toc.setAttribute("data-open", "true");
39 open = true;
40 } else {
41 this.setAttribute("aria-expanded", "false");
42 toc.setAttribute("data-open", "false");
43 open = false;
44 }
45 }
46 })();
47
48 (function() {
49 var nav_trigger = document.getElementById("nav-toggle"),
50 nav = document.getElementById("nav-panel"),
51 body = document.getElementsByTagName("body")[0],
52 open = false;
53
54 if (matchMedia) {
55 const mq = window.matchMedia("(max-width: 1023px)");
56 mq.addEventListener('change', WidthChange);
57 WidthChange(mq);
58 }
59
60 // media query change
61 function WidthChange(mq) {
62 if (mq.matches) {
63 nav.setAttribute("data-open", "false");
64 nav_trigger.removeAttribute("hidden");
65 nav_trigger.setAttribute("aria-expanded", "false");
66 nav_trigger.addEventListener("click", togglenav, false);
67 } else {
68 nav.setAttribute("data-open", "true");
69 nav_trigger.setAttribute("hidden", "");
70 nav_trigger.setAttribute("aria-expanded", "true");
71 }
72
73 }
74
75 function togglenav(e) {
76 if (!open) {
77 this.setAttribute("aria-expanded", "true");
78 nav.setAttribute("data-open", "true");
79 open = true;
80 } else {
81 this.setAttribute("aria-expanded", "false");
82 nav.setAttribute("data-open", "false");
83 open = false;
84 }
85 }
86 })();
87
88 (function() {
89 var index_trigger = document.getElementById("js-docs-index-toggle"),
90 index = document.getElementById("js-docs-index-panel"),
91 body = document.getElementsByTagName("body")[0],
92 open = false;
93
94 if (matchMedia) {
95 const mq = window.matchMedia("(max-width: 1023px)");
96 mq.addEventListener('change', WidthChange);
97 WidthChange(mq);
98 }
99
100 function WidthChange(mq) {
101 initIndex();
102 }
103
104 function toggleindex(e) {
105 if (!open) {
106 this.setAttribute("aria-expanded", "true");
107 index.setAttribute("data-open", "true");
108 open = true;
109 } else {
110 this.setAttribute("aria-expanded", "false");
111 index.setAttribute("data-open", "false");
112 open = false;
113 }
114 }
115
116 function initIndex() {
117 if(index_trigger) {
118
119 index_trigger.removeAttribute("hidden");
120 index_trigger.setAttribute("aria-expanded", "false");
121 index.setAttribute("data-open", "false");
122
123 index.setAttribute("data-open", "false");
124 index_trigger.addEventListener("click", toggleindex, false);
125 }
126 }
127 })();
128
129
130
131 (function() {
132 var switchers = document.querySelectorAll('.switcher'),
133 fallbacks = document.querySelectorAll('.switcher-fallback');
134
135 if (fallbacks != null) {
136 fallbacks.forEach(el => {
137 el.setAttribute('hidden', '');
138 });
139 }
140
141 if (switchers != null) {
142 switchers.forEach(element => {
143 element.removeAttribute('hidden');
144 const select = element.querySelector('select');
145
146 select.addEventListener('change', function() {
147 var selected = this.options[this.selectedIndex];
148 url = selected.getAttribute('data-url');
149
150 window.location.href = url;
151 })
152 });
153 }
154 })();
155
156 // add "Open in Playground" button to code blocks
157 // (function() {
158 // let blocks = document.querySelectorAll('pre[class*="language-"]');
159 // if (blocks) {
160 // blocks.forEach(function(block) {
161 // let button = document.createElement("a");
162 // button.classList.add('c-btn--playground');
163 // button.classList.add('c-btn');
164 // button.classList.add('c-btn--secondary');
165 // button.setAttribute("href", "#");
166 // button.innerText = "Open in Playground";
167 // block.appendChild(button);
168 // });
169 // }
170 // })();
171
172
173
174 // add utilities
175 var util = {
176 keyCodes: {
177 UP: 38,
178 DOWN: 40,
179 LEFT: 37,
180 RIGHT: 39,
181 HOME: 36,
182 END: 35,
183 ENTER: 13,
184 SPACE: 32,
185 DELETE: 46,
186 TAB: 9,
187 },
188
189 generateID: function(base) {
190 return base + Math.floor(Math.random() * 999);
191 },
192
193 getDirectChildren: function(elm, selector) {
194 return Array.prototype.filter.call(elm.children, function(child) {
195 return child.matches(selector);
196 });
197 },
198 };
199
200 (function(w, doc, undefined) {
201 var CollapsibleIndexOptions = {
202 allCollapsed: false,
203 icon: '<svg class="index-icon" width="12" height="8" aria-hidden="true" focusable="false" viewBox="0 0 12 8"><g fill="none"><path fill="currentColor" d="M1.41.59l4.59 4.58 4.59-4.58 1.41 1.41-6 6-6-6z"/><path d="M-6-8h24v24h-24z"/></g></svg>',
204 };
205 var CollapsibleIndex = function(inst, options) {
206 var _options = Object.assign(CollapsibleIndexOptions, options);
207 var el = inst;
208 var indexToggles = el.querySelectorAll(".docs-index .docs__index__panel > ul > .docs-index__item[data-has-children] > a"); // only top-most level
209 var indexPanels = el.querySelectorAll(".docs-index .docs__index__panel > ul > .docs-index__item>[data-child-list]"); // the list
210 var accID = util.generateID("c-index-");
211
212 var init = function() {
213 el.classList.add("index-js");
214
215 setupindexToggles(indexToggles);
216 setupindexPanels(indexPanels);
217 };
218
219
220 var setupindexToggles = function(indexToggles) {
221 Array.from(indexToggles).forEach(function(item, index) {
222 var $this = item;
223
224 $this.setAttribute('role', 'button');
225 $this.setAttribute("id", accID + "__item-" + index);
226 $this.innerHTML += _options.icon;
227
228 if (_options.allCollapsed) $this.setAttribute("aria-expanded", "false");
229 else $this.setAttribute("aria-expanded", "true");
230
231 $this.addEventListener("click", function(e) {
232 e.preventDefault();
233 togglePanel($this);
234 });
235 });
236 };
237
238 var setupindexPanels = function(indexPanels) {
239 Array.from(indexPanels).forEach(function(item, index) {
240 let $this = item;
241
242 $this.setAttribute("id", accID + "__list-" + index);
243 $this.setAttribute(
244 "aria-labelledby",
245 accID + "__item-" + index
246 );
247 if (_options.allCollapsed) $this.setAttribute("aria-hidden", "true");
248 else $this.setAttribute("aria-hidden", "false");
249 });
250 };
251
252 var togglePanel = function(toggleButton) {
253 var thepanel = toggleButton.nextElementSibling;
254
255 if (toggleButton.getAttribute("aria-expanded") == "true") {
256 toggleButton.setAttribute("aria-expanded", "false");
257 thepanel.setAttribute("aria-hidden", "true");
258 } else {
259 toggleButton.setAttribute("aria-expanded", "true");
260 thepanel.setAttribute("aria-hidden", "false");
261 }
262 };
263
264
265 init.call(this);
266 return this;
267 }; // CollapsibleIndex()
268
269 w.CollapsibleIndex = CollapsibleIndex;
270 })(window, document);
271
272 // init
273 var index = document.getElementById('docs-index');
274 if (index) {
275 index = new CollapsibleIndex(index, {
276 allCollapsed: false
277 });
278 }
279
280 document.addEventListener("DOMContentLoaded", () => {
281 anchors.add(".docs-content h2:not(.c-toc__label), .docs-content h3, .docs-content h4");
282 });