Skip to content

Commit d4d90a9

Browse files
committed
Hotkeys & more
Added hotkey support for first 9 presets Remove old migration code Reorganized code for better function reuse
1 parent 4d2177d commit d4d90a9

File tree

8 files changed

+165
-42
lines changed

8 files changed

+165
-42
lines changed

background.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function handleCommand(command)
2+
{
3+
console.log("(background) handling command: " + command);
4+
5+
if(command.startsWith(PRESET_PREFIX))
6+
{
7+
browser.storage.local.get("presets").then((obj) => {
8+
if(obj != undefined)
9+
{
10+
let presets = obj.presets;
11+
let presetNum = parseInt(command.substring(PRESET_PREFIX.length));
12+
if(presetNum <= presets.length)
13+
{
14+
let presetId = presets[presetNum - 1].id;
15+
applyPreset(presetId);
16+
}
17+
}
18+
});
19+
}
20+
}
21+
22+
browser.commands.onCommand.addListener(handleCommand);

common.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const PRESET_PREFIX = "preset-";
2+
3+
function applyPreset(presetId)
4+
{
5+
console.log("(common) applying preset: " + presetId);
6+
7+
browser.storage.local.get("presets").then((obj) => {
8+
if(obj != undefined)
9+
{
10+
let presets = obj.presets;
11+
for(let i = 0;i < presets.length;i++)
12+
{
13+
if(presets[i].id == presetId)
14+
{
15+
resizeWindow(presets[i].width,presets[i].height);
16+
break;
17+
}
18+
}
19+
}
20+
});
21+
}
22+
23+
function resizeWindow(newWidth, newHeight)
24+
{
25+
console.log("(common) resizing to: " + newWidth + "x" + newHeight);
26+
27+
let updateInfo = {
28+
"width": parseInt(newWidth),
29+
"height": parseInt(newHeight)
30+
};
31+
32+
browser.windows.getCurrent().then((currentWindow) => {
33+
browser.windows.update(currentWindow.id, updateInfo);
34+
});
35+
}

manifest.json

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"manifest_version": 2,
33
"name": "WindowSizer",
4-
"version": "0.4beta2",
4+
"version": "0.5.1",
55
"author": "Dr. Cheap",
66
"description": "Quickly resize the window to one of your favorite sizes",
77
"homepage_url": "https://addons.mozilla.org/en-US/firefox/addon/windowsizer",
@@ -35,5 +35,66 @@
3535
"16": "icons/ws_icon_16.png",
3636
"32": "icons/ws_icon_32.png"
3737
}
38+
},
39+
40+
"background": {
41+
"scripts": ["common.js", "background.js"]
42+
},
43+
44+
"commands": {
45+
"preset-1": {
46+
"suggested_key": {
47+
"default": "Alt+1"
48+
},
49+
"description": "Activate preset #1"
50+
},
51+
"preset-2": {
52+
"suggested_key": {
53+
"default": "Alt+2"
54+
},
55+
"description": "Activate preset #2"
56+
},
57+
"preset-3": {
58+
"suggested_key": {
59+
"default": "Alt+3"
60+
},
61+
"description": "Activate preset #3"
62+
},
63+
"preset-4": {
64+
"suggested_key": {
65+
"default": "Alt+4"
66+
},
67+
"description": "Activate preset #4"
68+
},
69+
"preset-5": {
70+
"suggested_key": {
71+
"default": "Alt+5"
72+
},
73+
"description": "Activate preset #5"
74+
},
75+
"preset-6": {
76+
"suggested_key": {
77+
"default": "Alt+6"
78+
},
79+
"description": "Activate preset #6"
80+
},
81+
"preset-7": {
82+
"suggested_key": {
83+
"default": "Alt+7"
84+
},
85+
"description": "Activate preset #7"
86+
},
87+
"preset-8": {
88+
"suggested_key": {
89+
"default": "Alt+8"
90+
},
91+
"description": "Activate preset #8"
92+
},
93+
"preset-9": {
94+
"suggested_key": {
95+
"default": "Alt+9"
96+
},
97+
"description": "Activate preset #9"
98+
}
3899
}
39100
}

options.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@
1010
<fieldset>
1111
<legend>Mange Presets</legend>
1212
<form>
13-
<table id="presets">
13+
<table id="presetsList">
1414
<tr>
15+
<th>Hotkey</td>
1516
<th>Width</th>
1617
<th>Height</th>
1718
<th>Name</th>
1819
<th>Aciton</th>
1920
</tr>
2021
<tr id="addPreset">
22+
<td>&nbsp;</td>
2123
<td><input type="text" id="newWidth" name="newWidth" size="4" maxlength="4"></td>
2224
<td><input type="text" id="newHeight" name="newHeight" size="4" maxlength="4"></td>
2325
<td><input type="text" id="newName" name="newName" size="15" maxlength="15"></td>

options.js

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ function addPreset(e) {
3838
console.log("(add) Adding preset: " + newWidth + "x" + newHeight + " " + newName);
3939
let item = {
4040
"id": new Date().valueOf(), // This is not *perfect* but works as long as two presets aren't created in the same millisecond (o).(O)
41-
"width": newWidth,
42-
"height": newHeight,
41+
"width": parseInt(newWidth),
42+
"height": parseInt(newHeight),
4343
"name": newName
4444
};
4545

@@ -66,11 +66,16 @@ function displayPresets() {
6666

6767
for(let i = 0;i < presets.length;i++)
6868
{
69-
console.log("(display) Add item row " + (i+1) + ": " + presets[i].name);
69+
let presetIndex = i + 1;
70+
console.log("(display) Add item " + presetIndex + ": " + presets[i].name);
7071

7172
let tr = document.createElement("tr");
7273
tr.className = "presetItem";
7374

75+
let tdK = document.createElement("td");
76+
tdK.appendChild(document.createTextNode("Alt+" + presetIndex));
77+
tr.appendChild(tdK);
78+
7479
let tdW = document.createElement("td");
7580
tdW.appendChild(document.createTextNode(presets[i].width));
7681
tr.appendChild(tdW);
@@ -129,20 +134,8 @@ function removePreset(e)
129134
browser.storage.local.get("presets").then((obj) => {
130135
if(!Array.isArray(obj.presets))
131136
{
132-
// Possible v0.3beta to v0.4beta settings migration
133-
browser.storage.sync.get("presets").then((obj) => {
134-
if(Array.isArray(obj.presets))
135-
{
136-
console.log("(init) Migrating settings to local storage...");
137-
browser.storage.local.set({"presets": obj.presets}).then(displayPresets);
138-
browser.storage.sync.remove("presets");
139-
}
140-
else
141-
{
142-
console.log("(init) No presets found, initializing...");
143-
browser.storage.local.set({"presets": []});
144-
}
145-
});
137+
console.log("(init) No presets found, initializing...");
138+
browser.storage.local.set({"presets": []});
146139
}
147140
});
148141

toolbar_menu.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,7 @@ a:hover {
1414
.panel {
1515
margin: 5px;
1616
}
17+
18+
.presetIndex {
19+
text-align: right
20+
}

toolbar_menu.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@
1212
<div class="text-section-header">WindowSizer</div>
1313
</div>
1414

15-
<div id="presets">
16-
</div>
15+
<table id="presetsList">
16+
</table>
1717

1818
<div class="panel-section-separator"></div>
1919

2020
<a href="#" id="customize">Customize...</a><br>
2121

2222
</div>
2323

24+
<script src="common.js"></script>
2425
<script src="toolbar_menu.js"></script>
2526
</body>
2627

toolbar_menu.js

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,42 @@
1-
const RESIZE_PREFIX = "resize-";
2-
31
function updateMenuWithPresets()
42
{
53
let getPresets = browser.storage.local.get("presets");
64
getPresets.then((obj) => {
75
if(obj != undefined)
86
{
9-
let menu = document.querySelector("#presets");
7+
let list = document.querySelector("#presetsList");
108

119
let presets = obj.presets;
1210
for(let i = 0;i < presets.length;i++)
1311
{
12+
let linkText = presets[i].width + "x" + presets[i].height + " " + presets[i].name;
13+
let numberText = "&nbsp;";
14+
if(i < 9)
15+
{
16+
numberText = (i + 1) + ": ";
17+
}
18+
19+
let tr = document.createElement("tr");
20+
21+
let tdN = document.createElement("td");
22+
tr.className = "presetIndex";
23+
tdN.appendChild(document.createTextNode(numberText));
24+
tr.appendChild(tdN);
25+
26+
let tdL = document.createElement("td");
27+
1428
let a = document.createElement("a");
1529
a.href = "#";
16-
a.id = RESIZE_PREFIX + presets[i].width + "x" + presets[i].height;
17-
a.appendChild(document.createTextNode(presets[i].width + "x" + presets[i].height + " " + presets[i].name));
18-
menu.appendChild(a);
30+
a.id = PRESET_PREFIX + presets[i].id;
31+
a.appendChild(document.createTextNode(linkText));
32+
tdL.appendChild(a);
33+
34+
tr.appendChild(tdL);
1935

20-
let br = document.createElement("br");
21-
menu.appendChild(br);
36+
list.appendChild(tr);
2237
}
2338
}
2439
});
25-
2640
}
2741

2842
function doMenuClick(e)
@@ -33,19 +47,10 @@ function doMenuClick(e)
3347
{
3448
browser.runtime.openOptionsPage();
3549
}
36-
else if(myId.startsWith(RESIZE_PREFIX))
50+
else if(myId.startsWith(PRESET_PREFIX))
3751
{
38-
let xPos = myId.indexOf("x",RESIZE_PREFIX.length);
39-
let newWidth = parseInt(myId.substring(RESIZE_PREFIX.length,xPos));
40-
let newHeight = parseInt(myId.substring(xPos + 1));
41-
let updateInfo = {
42-
"width": newWidth,
43-
"height": newHeight
44-
};
45-
46-
browser.windows.getCurrent().then((currentWindow) => {
47-
browser.windows.update(currentWindow.id, updateInfo);
48-
});
52+
let presetId = myId.substring(PRESET_PREFIX.length);
53+
applyPreset(presetId);
4954
}
5055

5156
e.preventDefault();

0 commit comments

Comments
 (0)