]> git.lizzy.rs Git - rust.git/blob - src/librustdoc/html/static/settings.js
Auto merge of #81215 - cjgillot:defkey-mir, r=oli-obk
[rust.git] / src / librustdoc / html / static / settings.js
1 // Local js definitions:
2 /* global getSettingValue, getVirtualKey, onEachLazy, updateLocalStorage, updateSystemTheme */
3
4 (function () {
5     function changeSetting(settingName, value) {
6         updateLocalStorage("rustdoc-" + settingName, value);
7
8         switch (settingName) {
9             case "preferred-dark-theme":
10             case "preferred-light-theme":
11             case "use-system-theme":
12                 updateSystemTheme();
13                 break;
14         }
15     }
16
17     function handleKey(ev) {
18         // Don't interfere with browser shortcuts
19         if (ev.ctrlKey || ev.altKey || ev.metaKey) {
20             return;
21         }
22         switch (getVirtualKey(ev)) {
23             case "Enter":
24             case "Return":
25             case "Space":
26                 ev.target.checked = !ev.target.checked;
27                 ev.preventDefault();
28                 break;
29         }
30     }
31
32     function setEvents() {
33         onEachLazy(document.getElementsByClassName("slider"), function(elem) {
34             var toggle = elem.previousElementSibling;
35             var settingId = toggle.id;
36             var settingValue = getSettingValue(settingId);
37             if (settingValue !== null) {
38                 toggle.checked = settingValue === "true";
39             }
40             toggle.onchange = function() {
41                 changeSetting(this.id, this.checked);
42             };
43             toggle.onkeyup = handleKey;
44             toggle.onkeyrelease = handleKey;
45         });
46         onEachLazy(document.getElementsByClassName("select-wrapper"), function(elem) {
47             var select = elem.getElementsByTagName("select")[0];
48             var settingId = select.id;
49             var settingValue = getSettingValue(settingId);
50             if (settingValue !== null) {
51                 select.value = settingValue;
52             }
53             select.onchange = function() {
54                 changeSetting(this.id, this.value);
55             };
56         });
57     }
58
59     window.addEventListener("DOMContentLoaded", setEvents);
60 })();