Skip to content
This repository was archived by the owner on Nov 11, 2025. It is now read-only.

Commit e4f46f0

Browse files
author
WendelinPraktikum
authored
Merge pull request #7 from aboutsource/feature/5259
chrome compat
2 parents 126cedc + af28d73 commit e4f46f0

6 files changed

Lines changed: 90 additions & 38 deletions

File tree

background.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
trektor.runtime.onMessage((msg) => {
2+
switch (msg.action) {
3+
case 'fetchJSON':
4+
return fetchJSON(...msg.args);
5+
default:
6+
return Promise.reject('unknown action');
7+
}
8+
});
9+
10+
function fetchJSON(url, options = {}) {
11+
return fetch(url, options).then((response) => response.json());
12+
}

content_script.js

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
1-
let engine;
2-
3-
if (window.browser !== undefined) {
4-
engine = browser;
5-
} else {
6-
engine = chrome;
7-
}
8-
91
function addButton() {
102
const sidebar = document.querySelector(".window-sidebar")
113
const button = document.createElement('span');
@@ -37,7 +29,7 @@ const mappings = {
3729

3830
function onClick() {
3931
let trelloApiKey = "afadffe77f745496f80ebb4bf460c615"
40-
engine.storage.local.get().then(result => {
32+
trektor.storage.get(['trello', 'toggl']).then(result => {
4133
const trelloToken = result.trello
4234
const togglToken = result.toggl
4335

@@ -94,12 +86,12 @@ function onClick() {
9486

9587
url = new URL("https://api.track.toggl.com/api/v8/workspaces")
9688
const togglAuth = btoa(`${togglToken}:api_token`)
97-
fetch(url.toString(), {
89+
trektor.fetchJSON(url.toString(), {
9890
headers: {
9991
'Authorization': `Basic ${togglAuth}`,
10092
'Content-Type': 'application/json'
10193
}
102-
}).then(response => response.json()).then(response => {
94+
}).then(response => {
10395
for (var i in response) {
10496
if (response[i]["name"] == "aboutsource") {
10597
var wid = response[i]["id"]
@@ -111,12 +103,12 @@ function onClick() {
111103
}
112104

113105
url = new URL(`https://api.track.toggl.com/api/v8/workspaces/${wid}/projects`)
114-
fetch(url.toString(), {
106+
trektor.fetchJSON(url.toString(), {
115107
headers: {
116108
'Authorization': `Basic ${togglAuth}`,
117109
'Content-Type': 'application/json'
118110
}
119-
}).then(response => response.json()).then(response => {
111+
}).then(response => {
120112
for (var i in response) {
121113
if (response[i]["name"].endsWith(`(${labelShort})`)) {
122114
var pid = response[i]["id"]
@@ -128,7 +120,7 @@ function onClick() {
128120
"pid": pid
129121
}
130122
}
131-
fetch(url.toString(), {
123+
trektor.fetchJSON(url.toString(), {
132124
method: 'POST',
133125
headers: {
134126
'Authorization': `Basic ${togglAuth}`,

manifest.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,17 @@
1313
"*://trello.com/*"
1414
],
1515
"js": [
16+
"trektor.js",
1617
"content_script.js"
1718
]
1819
}
1920
],
20-
21+
"background": {
22+
"scripts": [
23+
"trektor.js",
24+
"background.js"
25+
]
26+
},
2127
"permissions": [
2228
"*://api.trello.com/*",
2329
"*://*.toggl.com/*",

options/index.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ <h2>Trektor settings</h2>
1111

1212
<a href="https://trello.com/1/authorize?expiration=never&scope=read,write,account&response_type=token&name=Trektor&key=afadffe77f745496f80ebb4bf460c615">
1313
Trello Token generieren</a><br>
14-
<input type="text" id='trello_token' class="browser-style" aria-label="Trello Token"/><br><a href="https://track.toggl.com/profile">Toggl Token (ziemlich weit runter scrollen)</a> <br>
15-
<input type="text" id="toggl_token"/><br><br><br>
16-
<script src="script.js"></script>
14+
<input type="text" id='trello_token' name="trello" class="chrome-style browser-style" aria-label="Trello Token"/><br><a href="https://track.toggl.com/profile">Toggl Token (ziemlich weit runter scrollen)</a> <br>
15+
<input type="text" id="toggl_token" name="toggl" /><br><br><br>
16+
<script src="../trektor.js"></script>
17+
<script src="./script.js"></script>
1718
</body>
1819
</html>

options/script.js

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
1-
let engine;
2-
3-
if (window.browser !== undefined) {
4-
engine = browser;
5-
} else {
6-
engine = chrome;
7-
}
8-
9-
const trelloTextField = document.querySelector("#trello_token")
10-
const togglTextField = document.querySelector("#toggl_token")
1+
let trelloTextField = document.querySelector("#trello_token")
2+
let togglTextField = document.querySelector("#toggl_token")
113

124
trelloTextField.addEventListener("input", onChange)
135
togglTextField.addEventListener("input", onChange)
146

15-
function onChange() {
16-
engine.storage.local.set({
17-
"trello": trelloTextField.value,
18-
"toggl": togglTextField.value
19-
})
20-
console.log(`set trello token to ${togglTextField.value}`)
21-
console.log(`set toggl token to ${togglTextField.value}`)
7+
function onChange(e) {
8+
trektor.storage.set({[e.target.name]: e.target.value});
229
}
2310

24-
engine.storage.local.get().then(result => {
25-
trelloTextField.value = result["trello"]
26-
togglTextField.value = result["toggl"]
11+
trektor.storage.get(['trello', 'toggl']).then(result => {
12+
trelloTextField.value = result.trello;
13+
togglTextField.value = result.toggl;
2714
})

trektor.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class ChromeStorage {
2+
constructor() {
3+
this.storage = chrome.storage.local;
4+
}
5+
get(keys) {
6+
return new Promise((resolve) => {
7+
this.storage.get(keys, resolve);
8+
})
9+
}
10+
set(values) {
11+
return new Promise((resolve) => {
12+
this.storage.set(values, resolve);
13+
})
14+
}
15+
}
16+
17+
class ChromeRuntime {
18+
constructor() {
19+
this.runtime = chrome.runtime;
20+
}
21+
22+
sendMessage(msg) {
23+
return new Promise((resolve) => {
24+
this.runtime.sendMessage(msg, resolve);
25+
});
26+
}
27+
28+
onMessage(callback) {
29+
this.runtime.onMessage.addListener((msg, sender, respond) => {
30+
callback(msg).then((response) => { respond(response) });
31+
return true;
32+
});
33+
}
34+
}
35+
36+
window.trektor = {
37+
storage: null,
38+
runtime: null,
39+
40+
fetchJSON(url, options = {}) {
41+
return this.runtime.sendMessage({
42+
action: 'fetchJSON',
43+
args: [url, options],
44+
});
45+
},
46+
};
47+
48+
if (window.chrome !== undefined) {
49+
window.trektor.storage = new ChromeStorage();
50+
window.trektor.runtime = new ChromeRuntime();
51+
} else {
52+
window.trektor.storage = browser.storage.local;
53+
window.trektor.runtime = browser.runtime;
54+
}

0 commit comments

Comments
 (0)