Skip to content

Commit 9b2f9a0

Browse files
miczkewisch
authored andcommitted
feat: Add visibility controls to operation menu items
1 parent 768816b commit 9b2f9a0

6 files changed

Lines changed: 95 additions & 0 deletions

File tree

src/_locales/en/messages.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,14 @@
157157
},
158158
"notificationActive": {
159159
"message": "Show a notification for each operation"
160+
},
161+
"operationMenuItemsTitle": {
162+
"message": "Operation Menu Items"
163+
},
164+
"menuItemActionInfo": {
165+
"message": "Choose which actions should be available in the popup menu."
166+
},
167+
"menuItemActionWarning": {
168+
"message": "At least one item must be selected."
160169
}
161170
}

src/common/util.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ export const DEFAULT_PREFERENCES = {
1414
searchAccountName: false,
1515
notificationActive: false,
1616
operationCounters: { move: 0, copy: 0, tag: 0 },
17+
operationMenuItemsMove: true,
18+
operationMenuItemsCopy: true,
19+
operationMenuItemsGoto: true,
20+
operationMenuItemsTag: true,
1721
};
1822

1923
export async function getValidatedFolders(rootNode, prefName) {

src/options/options.css

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,27 @@ fieldset {
8686
min-height: 25em;
8787
grid-column: span 2;
8888
padding: 10px;
89+
border-color: light-dark(#fff, #5f5f5f);
90+
}
91+
92+
.menuItemActionDiv {
93+
display: inline-block;
94+
margin-left: 35px;
95+
}
96+
97+
.menuItemActionDivGroup {
98+
display: block;
99+
margin-top: 20px;
100+
text-align: center;
101+
}
102+
103+
.menuItemActionDivText {
104+
display: block;
105+
margin-bottom: 10px;
106+
}
107+
108+
.operationMenuItemsFieldset {
109+
min-height: fit-content;
89110
}
90111

91112
.overflow {

src/options/options.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,31 @@
5656
<button id="translate" data-l10n-id="translate"></button>
5757
</div>
5858
</div>
59+
<fieldset class="operationMenuItemsFieldset">
60+
<legend data-l10n-id="operationMenuItemsTitle"></legend>
61+
<div>
62+
<div class="menuItemActionDivText" data-l10n-id="menuItemActionInfo"></div>
63+
<div class="menuItemActionDivText" data-l10n-id="menuItemActionWarning"></div>
64+
<div class="menuItemActionDivGroup">
65+
<div class="preference menuItemActionDiv">
66+
<input type="checkbox" id="operationMenuItemsMove" class="menuItemAction">
67+
<label for="operationMenuItemsMove" data-l10n-id="actionMove"></label>
68+
</div>
69+
<div class="preference menuItemActionDiv">
70+
<input type="checkbox" id="operationMenuItemsCopy" class="menuItemAction">
71+
<label for="operationMenuItemsCopy" data-l10n-id="actionCopy"></label>
72+
</div>
73+
<div class="preference menuItemActionDiv">
74+
<input type="checkbox" id="operationMenuItemsGoto" class="menuItemAction">
75+
<label for="operationMenuItemsGoto" data-l10n-id="actionGoto"></label>
76+
</div>
77+
<div class="preference menuItemActionDiv">
78+
<input type="checkbox" id="operationMenuItemsTag" class="menuItemAction">
79+
<label for="operationMenuItemsTag" data-l10n-id="actionTag"></label>
80+
</div>
81+
</div>
82+
</div>
83+
</fieldset>
5984
<fieldset>
6085
<legend data-l10n-id="defaultFoldersTitle"></legend>
6186
<div id="defaultFolderSetting" data-type="radio">
@@ -91,5 +116,6 @@
91116
<folder-list id="excluded-folder-picker" search="true" data-l10n-attr-placeholder="excludedFoldersSearchPlaceholder" popup="true"></folder-list>
92117
</div>
93118
<folder-list id="excluded-folders" readonly="true" delete="true"></folder-list>
119+
</fieldset>
94120
</body>
95121
</html>

src/options/options.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ function changeOptions(event) {
4444
browser.storage.local.set({ [node.name]: node.value });
4545
}
4646

47+
if (node.className === "menuItemAction") {
48+
if (!checkMenuItemVisibility()) {
49+
node.checked = true;
50+
}
51+
}
52+
4753
if (node.id == "useLegacyShortcuts") {
4854
browser.runtime.sendMessage({ action: "setupShortcuts", enable: node.checked });
4955
}
@@ -114,6 +120,10 @@ async function setupListeners() {
114120
});
115121
}
116122

123+
function checkMenuItemVisibility() {
124+
return ["operationMenuItemsMove", "operationMenuItemsCopy", "operationMenuItemsGoto", "operationMenuItemsTag"].some(id => document.getElementById(id).checked);
125+
}
126+
117127
function setupLocalization() {
118128
for (let node of document.querySelectorAll("[data-l10n-id]")) {
119129
let l10nId = node.getAttribute("data-l10n-id");

src/popup/popup.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,31 @@ async function load() {
5252

5353
setup_localization();
5454

55+
// hide action buttons
56+
let { operationMenuItemsMove, operationMenuItemsCopy, operationMenuItemsGoto, operationMenuItemsTag } = await browser.storage.local.get({
57+
operationMenuItemsMove: DEFAULT_PREFERENCES.operationMenuItemsMove,
58+
operationMenuItemsCopy: DEFAULT_PREFERENCES.operationMenuItemsCopy,
59+
operationMenuItemsGoto: DEFAULT_PREFERENCES.operationMenuItemsGoto,
60+
operationMenuItemsTag: DEFAULT_PREFERENCES.operationMenuItemsTag
61+
});
62+
63+
if (!operationMenuItemsMove) {
64+
document.querySelector("label[for='action-move']").style.display = "none";
65+
document.querySelector("#action-move").style.display = "none";
66+
}
67+
if (!operationMenuItemsCopy) {
68+
document.querySelector("label[for='action-copy']").style.display = "none";
69+
document.querySelector("#action-copy").style.display = "none";
70+
}
71+
if (!operationMenuItemsGoto) {
72+
document.querySelector("label[for='action-goto']").style.display = "none";
73+
document.querySelector("#action-goto").style.display = "none";
74+
}
75+
if (!operationMenuItemsTag) {
76+
document.querySelector("label[for='action-tag']").style.display = "none";
77+
document.querySelector("#action-tag").style.display = "none";
78+
}
79+
5580
let params = new URLSearchParams(window.location.search);
5681

5782
let action = params.get("action") || "move";

0 commit comments

Comments
 (0)