Rewild Your Web
web browser dweb
at main 123 lines 4.3 kB view raw
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>