Rewild Your Web
web
browser
dweb
1<!doctype html>
2<html>
3 <head>
4 <title>servo:preferences</title>
5 <style>
6 ul {
7 list-style: none;
8 }
9 li {
10 padding-bottom: 1em;
11 }
12 select {
13 font-size: 10pt;
14 }
15 .hidden {
16 display: none;
17 }
18 </style>
19 </head>
20 <body>
21 <h2>Preferences</h2>
22 <div id="content" class="hidden">
23 <ul>
24 <li>
25 <input type="checkbox" class="bool-preference" id="experimental">
26 <label for="experimental">Experimental web platform features</label>
27 </li>
28 <li>
29 <input type="checkbox" class="bool-preference" id="more-experimental">
30 <label for="more-experimental">Even more experimental web platform features</label>
31 </li>
32 <li>
33 <input type="checkbox" class="bool-preference" id="http-cache">
34 <label for="http-cache">Disable HTTP cache</label>
35 </li>
36 <li>
37 <div>
38 <label style="vertical-align: baseline" for="user-agent">User agent:</label>
39 </div>
40 <div>
41 <input class="string-preference" id="user-agent" size=110>
42 <select onchange="updateUserAgent(event)">
43 <option value="servo" selected>Servo</option>
44 <option value="firefox">Firefox</option>
45 <option value="chrome">Chrome</option>
46 </select>
47 </div>
48 </ul>
49 </div>
50 <div id="loading">Loading...</div>
51 <script>
52 const prefs = {
53 "experimental": [],
54 "http-cache": ["network_http_cache_disabled"],
55 "more-experimental": ["dom_abort_controller_enabled", "dom_indexeddb_enabled"],
56 "user-agent": ["user_agent"],
57 };
58
59 const userAgents = {
60 "firefox": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:137.0) Gecko/20100101 Firefox/137.0",
61 "chrome": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
62 "servo": "",
63 };
64
65 function initialize() {
66 document.getElementById("loading").classList.toggle("hidden");
67 document.getElementById("content").classList.toggle("hidden");
68
69 const boolPrefInputs = document.getElementsByClassName("bool-preference");
70 for (const pref of boolPrefInputs) {
71 const relatedPrefs = prefs[pref.id];
72 let prefValue = true;
73 for (const boolPref of relatedPrefs) {
74 prefValue &= navigator.servo.getBoolPreference(boolPref);
75 }
76 pref.checked = prefValue;
77 pref.onchange = (ev) => {
78 const relatedPrefs = prefs[ev.target.id];
79 for (const boolPref of relatedPrefs) {
80 navigator.servo.setBoolPreference(boolPref, ev.target.checked);
81 }
82 };
83 }
84
85 const stringPrefInputs = document.getElementsByClassName("string-preference");
86 for (const pref of stringPrefInputs) {
87 const prefValue = navigator.servo.getStringPreference(prefs[pref.id][0]);
88 pref.value = prefValue;
89 pref.oninput = (ev) => updateStringPreference(ev.target);
90 }
91 }
92
93 function updateStringPreference(input) {
94 const relatedPref = prefs[input.id][0];
95 navigator.servo.setStringPreference(relatedPref, input.value);
96 }
97
98 function updateUserAgent(event) {
99 const input = document.getElementById("user-agent");
100 const selection = event.target.value
101 input.value = userAgents[selection];
102 updateStringPreference(input);
103 }
104
105 function initExperimentalPrefs() {
106 return fetch("servo:experimental-preferences")
107 .then(response => response.json())
108 .then(prefList => prefs["experimental"] = prefList)
109 }
110
111 function initDefaultUserAgent() {
112 return fetch("servo:default-user-agent")
113 .then(response => response.json())
114 .then(userAgent => userAgents["servo"] = userAgent);
115 }
116
117 Promise.all([
118 initExperimentalPrefs(),
119 initDefaultUserAgent(),
120 ]).then(initialize);
121 </script>
122 </body>
123</html>