letterboxing.js (4497B)
1 /* import-globals-from preferences.js */ 2 /* import-globals-from findInPage.js */ 3 4 Preferences.addAll([ 5 { 6 id: "privacy.resistFingerprinting.letterboxing", 7 type: "bool", 8 }, 9 { 10 id: "privacy.resistFingerprinting.letterboxing.rememberSize", 11 type: "bool", 12 }, 13 { 14 id: "privacy.resistFingerprinting.letterboxing.vcenter", 15 type: "bool", 16 }, 17 ]); 18 19 Preferences.addSetting({ 20 id: "letterboxingEnabled", 21 pref: "privacy.resistFingerprinting.letterboxing", 22 }); 23 24 Preferences.addSetting({ 25 id: "letterboxingRememberSize", 26 pref: "privacy.resistFingerprinting.letterboxing.rememberSize", 27 deps: ["letterboxingEnabled", "resistFingerprinting"], 28 visible: ({ letterboxingEnabled, resistFingerprinting }) => { 29 return letterboxingEnabled.value && resistFingerprinting.value; 30 }, 31 }); 32 33 Preferences.addSetting({ 34 id: "letterboxingContentAlignment", 35 pref: "privacy.resistFingerprinting.letterboxing.vcenter", 36 deps: ["letterboxingEnabled", "resistFingerprinting"], 37 visible: ({ letterboxingEnabled, resistFingerprinting }) => { 38 return letterboxingEnabled.value && resistFingerprinting.value; 39 }, 40 get: val => { 41 return val ? "middle" : "top"; 42 }, 43 set: val => { 44 return val == "middle"; 45 }, 46 }); 47 48 Preferences.addSetting({ 49 id: "letterboxingShouldEnable", 50 deps: ["letterboxingEnabled", "resistFingerprinting"], 51 visible: ({ letterboxingEnabled, resistFingerprinting }) => { 52 return !letterboxingEnabled.value && resistFingerprinting.value; 53 }, 54 onUserClick: (e, { letterboxingEnabled }) => { 55 const buttonEl = document.getElementById("enableLetterboxingButton"); 56 if (!buttonEl?.contains(e.target)) { 57 return; 58 } 59 letterboxingEnabled.value = true; 60 setTimeout(() => { 61 // Need to re-search to remove the "hidden" attribute on the groupbox 62 // elements (after the data-hidden-from-search attributes are changed by 63 // the "visible" callback). 64 // TODO: Is this an upstream issue that "hidden" is not removed? 65 if (!gSearchResultsPane.query) { 66 search(gLastCategory.category, "data-category"); 67 } 68 // Button should have focus when activated but will be hidden now, 69 // so re-assign focus to the newly revealed options. 70 Services.focus.moveFocus( 71 window, 72 buttonEl, 73 Services.focus.MOVEFOCUS_FORWARD, 74 0 75 ); 76 }); 77 }, 78 }); 79 80 SettingGroupManager.registerGroups({ 81 letterboxingDisabled: { 82 items: [ 83 { 84 id: "letterboxingShouldEnable", 85 l10nId: "letterboxing-disabled-message", 86 control: "moz-promo", 87 options: [ 88 { 89 control: "moz-button", 90 l10nId: "letterboxing-enable-button", 91 id: "enableLetterboxingButton", 92 slot: "actions", 93 }, 94 ], 95 }, 96 ], 97 }, 98 letterboxingSize: { 99 l10nId: "letterboxing-window-size-group", 100 headingLevel: 2, 101 items: [ 102 { 103 id: "letterboxingRememberSize", 104 l10nId: "letterboxing-remember-size", 105 control: "moz-checkbox", 106 }, 107 ], 108 }, 109 letterboxingAlignment: { 110 l10nId: "letterboxing-alignment-group", 111 headingLevel: 2, 112 items: [ 113 { 114 id: "letterboxingContentAlignment", 115 control: "moz-visual-picker", 116 options: [ 117 { 118 value: "top", 119 l10nId: "letterboxing-alignment-top-option", 120 controlAttrs: { 121 class: "appearance-chooser-item letterboxing-chooser-item", 122 imagesrc: 123 "chrome://browser/content/preferences/letterboxing-top.svg", 124 }, 125 }, 126 { 127 value: "middle", 128 l10nId: "letterboxing-alignment-middle-option", 129 controlAttrs: { 130 class: "appearance-chooser-item letterboxing-chooser-item", 131 imagesrc: 132 "chrome://browser/content/preferences/letterboxing-middle.svg", 133 }, 134 }, 135 ], 136 }, 137 ], 138 }, 139 }); 140 141 var gLetterboxingPrefs = { 142 init() { 143 const rfpSetting = Preferences.getSetting("resistFingerprinting"); 144 const updateCategoryVisibility = () => { 145 document 146 .getElementById("letterboxingCategory") 147 .classList.toggle("hide-all-letterboxing", !rfpSetting.value); 148 }; 149 rfpSetting.on("change", updateCategoryVisibility); 150 updateCategoryVisibility(); 151 initSettingGroup("letterboxingDisabled"); 152 initSettingGroup("letterboxingSize"); 153 initSettingGroup("letterboxingAlignment"); 154 }, 155 };