- commit
- 1d37de722d976209ae63e681473701ed5c5262d6
- parent
- df96876306ff1a944f5f13d0989a065c146730c9
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2025-04-23 18:44
use promises
Diffstat
| M | bg.js | 9 | ++++----- |
| M | shared.js | 110 | +++++++++++++++++++++++++++---------------------------------- |
| M | stack.js | 8 | ++++---- |
3 files changed, 57 insertions, 70 deletions
diff --git a/bg.js b/bg.js
@@ -10,16 +10,15 @@ chrome.contextMenus.create({
10 10 contexts: ['link'],
11 11 });
12 12
13 -1 chrome.contextMenus.onClicked.addListener(function(info, tab) {
-1 13 chrome.contextMenus.onClicked.addListener(async function(info, tab) {
14 14 if (info.menuItemId === 'read-later-link') {
15 -1 pushBookmark({
-1 15 await pushBookmark({
16 16 url: info.linkUrl,
17 17 title: info.linkText,
18 18 });
19 19 } else {
20 -1 pushBookmark(tab, function() {
21 -1 chrome.tabs.remove(tab.id);
22 -1 });
-1 20 await pushBookmark(tab);
-1 21 await chrome.tabs.remove(tab.id);
23 22 }
24 23 });
25 24
diff --git a/shared.js b/shared.js
@@ -1,77 +1,65 @@ 1 1 const FOLDER_TITLE = 'stack'; 2 23 -1 var getRootFolder = function(callback) {-1 3 var getRootFolder = async function() { 4 4 // try firefox5 -1 chrome.bookmarks.get('unfiled_____', function(folder) {6 -1 if (!chrome.runtime.lastError) {7 -1 callback(folder[0]);8 -1 } else {9 -1 // In chrome, it the folders are indexed depth-first.10 -1 // So root is 0, "bookmark bar" is 1, "other bookmarks" is 2.11 -1 // However, if you already had bookmarks when ids were introduced,12 -1 // "other bookmarks" may have a higher id.13 -1 //14 -1 // See https://bugs.chromium.org/p/chromium/issues/detail?id=2133015 -1 chrome.bookmarks.getChildren('0', function(children) {16 -1 callback(children[1]);17 -1 });18 -1 }19 -1 });-1 5 var folder = await chrome.bookmarks.get('unfiled_____'); -1 6 if (!chrome.runtime.lastError) { -1 7 return folder[0]; -1 8 } else { -1 9 // In chrome, it the folders are indexed depth-first. -1 10 // So root is 0, "bookmark bar" is 1, "other bookmarks" is 2. -1 11 // However, if you already had bookmarks when ids were introduced, -1 12 // "other bookmarks" may have a higher id. -1 13 // -1 14 // See https://bugs.chromium.org/p/chromium/issues/detail?id=21330 -1 15 var children = await chrome.bookmarks.getChildren('0'); -1 16 return children[1]; -1 17 } 20 18 }; 21 1922 -1 var ensureFolder = function(callback) {23 -1 getRootFolder(function(root) {24 -1 chrome.bookmarks.getChildren(root.id, function(children) {25 -1 var folder = children.find(child => child.title === FOLDER_TITLE);26 -1 if (!folder) {27 -1 chrome.bookmarks.create({28 -1 parentId: root.id,29 -1 title: FOLDER_TITLE,30 -1 }, callback);31 -1 } else {32 -1 callback(folder);33 -1 }-1 20 var ensureFolder = async function() { -1 21 var root = await getRootFolder(); -1 22 var children = await chrome.bookmarks.getChildren(root.id); -1 23 var folder = children.find(child => child.title === FOLDER_TITLE); -1 24 if (!folder) { -1 25 return await chrome.bookmarks.create({ -1 26 parentId: root.id, -1 27 title: FOLDER_TITLE, 34 28 });35 -1 });-1 29 } else { -1 30 return folder; -1 31 } 36 32 }; 37 3338 -1 var getBookmarks = function(callback) {39 -1 ensureFolder(function(folder) {40 -1 chrome.bookmarks.getChildren(folder.id, callback);41 -1 });-1 34 var getBookmarks = async function() { -1 35 var folder = await ensureFolder(); -1 36 return await chrome.bookmarks.getChildren(folder.id); 42 37 }; 43 3844 -1 var updateCount = function(callback) {45 -1 getBookmarks(function(bookmarks) {46 -1 chrome.action.setBadgeText({text: '' + bookmarks.length});47 -1 if (callback) callback();48 -1 });-1 39 var updateCount = async function() { -1 40 var bookmarks = await getBookmarks(); -1 41 chrome.action.setBadgeText({text: '' + bookmarks.length}); 49 42 }; 50 4351 -1 var popBookmark = function(id, callback) {52 -1 chrome.bookmarks.get(id, function(items) {53 -1 chrome.bookmarks.remove(id, function() {54 -1 updateCount(function() {55 -1 callback(items[0]);56 -1 });57 -1 });58 -1 });-1 44 var popBookmark = async function(id) { -1 45 var items = await chrome.bookmarks.get(id); -1 46 await chrome.bookmarks.remove(id); -1 47 await updateCount(); -1 48 return items[0]; 59 49 }; 60 5061 -1 var pushBookmark = function(tab, callback) {62 -1 ensureFolder(function(folder) {63 -1 var url = tab.url;64 -1 if (tab.isInReaderMode) {65 -1 var _url = new URL(url);66 -1 var _search = new URLSearchParams(_url.search);67 -1 url = _search.get('url');68 -1 }69 -1 chrome.bookmarks.create({70 -1 parentId: folder.id,71 -1 title: tab.title,72 -1 url: url,73 -1 }, function() {74 -1 updateCount(callback);75 -1 });-1 51 var pushBookmark = async function(tab) { -1 52 var folder = await ensureFolder(); -1 53 var url = tab.url; -1 54 if (tab.isInReaderMode) { -1 55 var _url = new URL(url); -1 56 var _search = new URLSearchParams(_url.search); -1 57 url = _search.get('url'); -1 58 } -1 59 await chrome.bookmarks.create({ -1 60 parentId: folder.id, -1 61 title: tab.title, -1 62 url: url, 76 63 }); -1 64 await updateCount(); 77 65 };
diff --git a/stack.js b/stack.js
@@ -3,7 +3,7 @@ var render = function(element, items) {
3 3 element.outerHTML = '<p>No links stored yet.</p>'
4 4 } else {
5 5 element.innerHTML = '';
6 -1 items.forEach(function(item) {
-1 6 items.forEach(item => {
7 7 var icon = document.createElement('img');
8 8 icon.className = 'icon';
9 9
@@ -31,14 +31,14 @@ var render = function(element, items) {
31 31 }
32 32 };
33 33
34 -1 getBookmarks(function(bookmarks) {
-1 34 getBookmarks().then(bookmarks => {
35 35 render(document.querySelector('#bookmarks'), bookmarks);
36 36 });
37 37
38 -1 document.addEventListener('click', function(event) {
-1 38 document.addEventListener('click', event => {
39 39 if (event.target.tagName === 'A') {
40 40 event.preventDefault();
41 -1 popBookmark(event.target.id, function(bookmark) {
-1 41 popBookmark(event.target.id).then(bookmark => {
42 42 chrome.tabs.create({url: bookmark.url});
43 43 });
44 44 }