Skip to content

Commit 95c74bc

Browse files
committed
Preset re-ordering
Fixes #4
1 parent d7be397 commit 95c74bc

File tree

6 files changed

+94
-11
lines changed

6 files changed

+94
-11
lines changed

images/arrow_down.png

3.06 KB
Loading

images/arrow_none.png

2.74 KB
Loading

images/arrow_up.png

3.06 KB
Loading

options.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ th {
55
th, td {
66
padding-left: 10px;
77
padding-top: 2px;
8+
white-space: nowrap;
89
}
910

1011
.invalid {

options.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<form>
1313
<table id="presetsList">
1414
<tr>
15+
<th></th>
1516
<th>Hotkey</td>
1617
<th>Width</th>
1718
<th>Height</th>
@@ -20,6 +21,7 @@
2021
<th></th>
2122
</tr>
2223
<tr id="addPreset">
24+
<td>&nbsp;</td>
2325
<td>&nbsp;</td>
2426
<td><input type="text" id="newWidth" size="4" maxlength="4"></td>
2527
<td><input type="text" id="newHeight" size="4" maxlength="4"></td>

options.js

Lines changed: 91 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ const PREFIX_EDIT = "edit-";
22
const PREFIX_REMOVE = "remove-";
33
const PREFIX_SAVE = "save-";
44
const PREFIX_CANCEL = "cancel-";
5+
const PREFIX_DOWN = "down-"
6+
const PREFIX_UP = "up-"
57
const MODE_NEW = "new";
68
const MODE_EDIT = "edit";
79

@@ -28,6 +30,13 @@ function removeClass(ele,cls)
2830
}
2931
}
3032

33+
Array.prototype.move = function(from, to) {
34+
if(from >=0 && from < this.length && to >= 0 && to < this.length)
35+
{
36+
this.splice(to, 0, this.splice(from, 1)[0]);
37+
}
38+
};
39+
3140
function getId(fullString,prefixToRemove)
3241
{
3342
return parseInt(fullString.substring(prefixToRemove.length));
@@ -109,17 +118,60 @@ async function displayPresets()
109118
row.remove();
110119
};
111120

112-
for(let i = 0;i < presets.length;i++)
121+
let presetCount = presets.length;
122+
for(let i = 0;i < presetCount;i++)
113123
{
114-
let presetIndex = i + 1;
115-
console.log("(display) Add item " + presetIndex + ": " + presets[i].name);
124+
let presetNum = i + 1;
125+
let isFirst = (i == 0);
126+
let isLast = (i == presetCount - 1);
127+
console.log("(display) Add item " + presetNum + ": " + presets[i].name);
128+
129+
let myId = presets[i].id;
116130

117131
// Make the row, the annoying but safe way
118132
let tr = document.createElement("tr");
119133
tr.className = "presetItem";
120134

135+
let tdP = document.createElement("td");
136+
137+
let imgDown = document.createElement("img");
138+
imgDown.width = 12;
139+
imgDown.height = 12;
140+
if(isLast)
141+
{
142+
imgDown.src = "images/arrow_none.png";
143+
}
144+
else
145+
{
146+
imgDown.src = "images/arrow_down.png";
147+
imgDown.title = "Move Down";
148+
imgDown.id = PREFIX_DOWN + i;
149+
imgDown.addEventListener('click', moveDown);
150+
}
151+
tdP.appendChild(imgDown);
152+
153+
tdP.appendChild(document.createTextNode(" "));
154+
155+
let imgUp = document.createElement("img");
156+
imgUp.width = 12;
157+
imgUp.height = 12;
158+
if(isFirst)
159+
{
160+
imgUp.src = "images/arrow_none.png";
161+
}
162+
else
163+
{
164+
imgUp.src = "images/arrow_up.png";
165+
imgUp.title = "Move Up";
166+
imgUp.id = PREFIX_UP + i;
167+
imgUp.addEventListener('click', moveUp);
168+
}
169+
tdP.appendChild(imgUp);
170+
171+
tr.appendChild(tdP);
172+
121173
let tdK = document.createElement("td");
122-
tdK.textContent = "Alt+" + presetIndex;
174+
tdK.textContent = "Alt+" + presetNum;
123175
tr.appendChild(tdK);
124176

125177
let tdW = document.createElement("td");
@@ -138,14 +190,14 @@ async function displayPresets()
138190

139191
let btnE = document.createElement("button");
140192
btnE.type = "button";
141-
btnE.id = PREFIX_EDIT + presets[i].id;
193+
btnE.id = PREFIX_EDIT + myId;
142194
btnE.textContent = "Edit";
143195
btnE.addEventListener('click', editPreset);
144196
tdA.appendChild(btnE);
145197

146198
let btnR = document.createElement("button");
147199
btnR.type = "button";
148-
btnR.id = PREFIX_REMOVE + presets[i].id;
200+
btnR.id = PREFIX_REMOVE + myId;
149201
btnR.textContent = "Remove";
150202
btnR.addEventListener('click', removePreset);
151203
tdA.appendChild(btnR);
@@ -215,7 +267,7 @@ async function editPreset(e)
215267
let tr = e.target.parentElement.parentElement;
216268

217269
// Replace values with editable versions
218-
let tdW = tr.children[1]
270+
let tdW = tr.children[2]
219271
let inW = document.createElement("input");
220272
inW.type = "text";
221273
inW.id = "editWidth";
@@ -225,7 +277,7 @@ async function editPreset(e)
225277
tdW.textContent = "";
226278
tdW.appendChild(inW);
227279

228-
let tdH = tr.children[2]
280+
let tdH = tr.children[3]
229281
let inH = document.createElement("input");
230282
inH.type = "text";
231283
inH.id = "editHeight";
@@ -235,7 +287,7 @@ async function editPreset(e)
235287
tdH.textContent = "";
236288
tdH.appendChild(inH);
237289

238-
let tdN = tr.children[3]
290+
let tdN = tr.children[4]
239291
let inN = document.createElement("input");
240292
inN.type = "text";
241293
inN.id = "editName";
@@ -246,7 +298,7 @@ async function editPreset(e)
246298
tdN.appendChild(inN);
247299

248300
// Offer a different set of actions
249-
let tdA = tr.children[4];
301+
let tdA = tr.children[5];
250302
tdA.textContent = "";
251303

252304
let btnS = document.createElement("button");
@@ -263,7 +315,7 @@ async function editPreset(e)
263315
btnC.addEventListener('click', cancelEdits);
264316
tdA.appendChild(btnC);
265317

266-
let tdS = tr.children[5];
318+
let tdS = tr.children[6];
267319
tdS.id = "editStatus";
268320

269321
e.preventDefault();
@@ -329,6 +381,34 @@ async function removePreset(e)
329381
e.preventDefault();
330382
}
331383

384+
async function moveDown(e)
385+
{
386+
let myPos = getId(e.target.id,PREFIX_DOWN);
387+
console.log("(move) Moving down from " + myPos);
388+
389+
let storage = await browser.storage.local.get("presets");
390+
let presets = storage.presets;
391+
presets.move(myPos,myPos + 1);
392+
await browser.storage.local.set({"presets": presets});
393+
displayPresets();
394+
395+
e.preventDefault();
396+
}
397+
398+
async function moveUp(e)
399+
{
400+
let myPos = getId(e.target.id,PREFIX_UP);
401+
console.log("(move) Moving up from " + myPos);
402+
403+
let storage = await browser.storage.local.get("presets");
404+
let presets = storage.presets;
405+
presets.move(myPos,myPos - 1);
406+
await browser.storage.local.set({"presets": presets});
407+
displayPresets();
408+
409+
e.preventDefault();
410+
}
411+
332412
window.addEventListener("resize", showCurrentSize);
333413
document.addEventListener("DOMContentLoaded", displayPresets);
334414
document.querySelector("#addNew").addEventListener("click", addPreset);

0 commit comments

Comments
 (0)