From d6ee98a263c35debf4e6edccc70ce8d1b7c8fca0 Mon Sep 17 00:00:00 2001 From: yohan <783b8c87@scimetis.net> Date: Fri, 6 Sep 2019 20:20:49 +0200 Subject: [PATCH] Added password for scuttle API. Fixed indentation. Added stub menu actions. Started working on bookmarking with scuttle API. --- background.js | 270 ++++++++++++++++++++++++++++++++++---------------- manifest.json | 12 +-- options.html | 4 +- options.js | 2 + 4 files changed, 198 insertions(+), 90 deletions(-) diff --git a/background.js b/background.js index 0c7c03f..ed2fd83 100644 --- a/background.js +++ b/background.js @@ -1,102 +1,206 @@ function onError(error) { - console.log(`Error: ${error}`); + console.log(`Error: ${error}`); +} + +function onRemoved() { + console.log('Removed'); +} + +function onShared_remove(tab) { + console.log('Shared'); + //var removing = tab.remove(); + //removing.then(onRemoved, onError); } function shareURL(selectionContent,currentTab){ - browser.storage.local.get(["instance_url","window_width","window_height","remove_querystrings","exceptUrlList"],function(item){ + browser.storage.local.get(["instance_url","window_width","window_height","remove_querystrings","exceptUrlList"],function(item){ + instance = item["instance_url"]; + windowWidth = item["window_width"]; + windowHeight = item["window_height"]; + noQueryStrings = item["remove_querystrings"]; + exceptUrlList = item["exceptUrlList"]; - instance = item["instance_url"]; - windowWidth = item["window_width"]; - windowHeight = item["window_height"]; - noQueryStrings = item["remove_querystrings"]; - exceptUrlList = item["exceptUrlList"]; - - // manages Mozilla Firefox reader mode - var rawUrl = currentTab.url; - var partToRemove = "about:reader?url="; - if(rawUrl.includes(partToRemove)) { - rawUrl = rawUrl.substring(partToRemove.length); - rawUrl = decodeURIComponent(rawUrl); - } - - // manages URL query strings - if (noQueryStrings == true) { - var flagRemove = true; - var urlList = exceptUrlList.split(/,\s*/); - urlList.forEach(function(baseUrl) { - if (rawUrl.startsWith(baseUrl)) { - flagRemove = false + // manages Mozilla Firefox reader mode + var rawUrl = currentTab.url; + var partToRemove = "about:reader?url="; + if(rawUrl.includes(partToRemove)) { + rawUrl = rawUrl.substring(partToRemove.length); + rawUrl = decodeURIComponent(rawUrl); } - }); - if (flagRemove) {rawUrl = rawUrl.split("?")[0];} - } - var url = instance + "/bookmarks.php?action=add&address=" + encodeURIComponent(rawUrl) + "&title=" + encodeURIComponent(currentTab.title) + "&description=" + encodeURIComponent(selectionContent); - widthInt = Number(windowWidth); - heightInt = Number(windowHeight); + // manages URL query strings + if (noQueryStrings == true) { + var flagRemove = true; + var urlList = exceptUrlList.split(/,\s*/); + urlList.forEach(function(baseUrl) { + if (rawUrl.startsWith(baseUrl)) { + flagRemove = false + } + }); + if (flagRemove) {rawUrl = rawUrl.split("?")[0];} + } - browser.windows.create({ - url: url, - width: widthInt, - height: heightInt, - type: "popup" - },(win)=>{ - browser.tabs.onUpdated.addListener((tabId,changeInfo) =>{ - if(tabId === win.tabs[0].id){ - if(changeInfo.url){ - var new_url - new_url = changeInfo.url - if((new_url.includes("action=add") == false) && (new_url.includes("edit.php") == false)){ - browser.windows.remove(win.id); - } - } - } - }); - }); - }); + var url = instance + "/bookmarks.php?action=add&address=" + encodeURIComponent(rawUrl) + "&title=" + encodeURIComponent(currentTab.title) + "&description=" + encodeURIComponent(selectionContent); + widthInt = Number(windowWidth); + heightInt = Number(windowHeight); + + browser.windows.create({ + url: url, + width: widthInt, + height: heightInt, + type: "popup" + },(win)=>{ + browser.tabs.onUpdated.addListener((tabId,changeInfo) =>{ + if(tabId === win.tabs[0].id){ + if(changeInfo.url){ + var new_url + new_url = changeInfo.url + if((new_url.includes("action=add") == false) && (new_url.includes("edit.php") == false)){ + browser.windows.remove(win.id); + } + } + } + }); + }); + }); +} + +function shareURL_API(selectionContent,currentTab){ + return new Promise((resolve, reject) => { + + browser.storage.local.get(["instance_url","username","password","remove_querystrings","exceptUrlList"],function(item){ + instance = item["instance_url"]; + // Build formData object. + let formData = new FormData(); + formData.append('name', 'John'); + formData.append('password', 'John123'); + fetch(instance+'/api/posts_add.php', { method: 'POST', body: formData }) + .then(function (response) { + if (response.ok) { + return response.json(); + } else { + return Promise.reject({ + status: response.status, + statusText: response.statusText + }); + } + }) + .then(function (data) { + console.log('success', data); + resolve("OK"); + }) + .catch(function (error) { + console.log('error', error); + reject("KO"); + }); + + }); + }) } browser.contextMenus.create({ - id: "semantic-scuttle", - title: "Add to (Semantic)Scuttle", - onclick: function(){ - browser.tabs.query({ currentWindow: true, active: true }, function(tabs) { - tab = tabs[0]; - if((tab.url.includes("about:reader?url=") == true) || (tab.url.includes("https://addons.mozilla.org/") == true)){ - shareURL("",tab); - } - else - { - browser.tabs.sendMessage(tab.id, {method: "getSelection"}).then(response => { - shareURL(response.response,tab); - }).catch(onError); - } - }); - }, - contexts: ["all"] + id: "semantic-scuttle", + title: "Add to (Semantic)Scuttle", + onclick: function(){ + browser.tabs.query({ currentWindow: true, active: true }, function(tabs) { + tab = tabs[0]; + if((tab.url.includes("about:reader?url=") == true) || (tab.url.includes("https://addons.mozilla.org/") == true)){ + shareURL("",tab); + } + else + { + browser.tabs.sendMessage(tab.id, {method: "getSelection"}).then(response => { + shareURL(response.response,tab); + }).catch(onError); + } + }); + }, + contexts: ["all"] }); browser.contextMenus.create({ - id: "my-scuttle", - title: "My (Semantic)Scuttle", - onclick: function(){ - browser.storage.local.get(["instance_url","username"],function(item){ - myurl = item["instance_url"] + "/bookmarks.php/" + item["username"]; - var creating = browser.tabs.create({url: myurl}); - }) - }, - contexts: ["all"] + id: "scuttle-session-save", + title: "Save and close all", + onclick: function(){ + browser.tabs.query({}, function(tabs) { + for (let tab of tabs) { + if((tab.url.includes("about:reader?url=") == true) || (tab.url.includes("https://addons.mozilla.org/") == true)){ + shareURL_API("",tab).then(onShared_remove, onError); + } + else + { + browser.tabs.sendMessage(tab.id, {method: "getSelection"}) + .then(response => shareURL_API(response.response,tab)) + .then(onShared_remove) + .catch(onError); + } + } + }); + }, + contexts: ["all"] +}); + +browser.contextMenus.create({ + id: "scuttle-session-restore", + title: "Select session to restore", + onclick: function(){ + browser.tabs.query({ currentWindow: true, active: true }, function(tabs) { + tab = tabs[0]; + if((tab.url.includes("about:reader?url=") == true) || (tab.url.includes("https://addons.mozilla.org/") == true)){ + shareURL("",tab); + } + else + { + browser.tabs.sendMessage(tab.id, {method: "getSelection"}).then(response => { + shareURL(response.response,tab); + }).catch(onError); + } + }); + }, + contexts: ["all"] +}); + +browser.contextMenus.create({ + id: "scuttle-selector", + title: "Select urls to add", + onclick: function(){ + browser.tabs.query({ currentWindow: true, active: true }, function(tabs) { + tab = tabs[0]; + if((tab.url.includes("about:reader?url=") == true) || (tab.url.includes("https://addons.mozilla.org/") == true)){ + shareURL("",tab); + } + else + { + browser.tabs.sendMessage(tab.id, {method: "getSelection"}).then(response => { + shareURL(response.response,tab); + }).catch(onError); + } + }); + }, + contexts: ["all"] +}); + +browser.contextMenus.create({ + id: "my-scuttle", + title: "My (Semantic)Scuttle", + onclick: function(){ + browser.storage.local.get(["instance_url","username"],function(item){ + myurl = item["instance_url"] + "/bookmarks.php/" + item["username"]; + var creating = browser.tabs.create({url: myurl}); + }) + }, + contexts: ["all"] }); browser.browserAction.onClicked.addListener((tab) => { - if((tab.url.includes("about:reader?url=") == true) || (tab.url.includes("https://addons.mozilla.org/") == true)){ - shareURL("",tab); - } - else - { - browser.tabs.sendMessage(tab.id, {method: "getSelection"}).then(response => { - shareURL(response.response,tab); - }).catch(onError); - } + if((tab.url.includes("about:reader?url=") == true) || (tab.url.includes("https://addons.mozilla.org/") == true)){ + shareURL("",tab); + } + else + { + browser.tabs.sendMessage(tab.id, {method: "getSelection"}).then(response => { + shareURL(response.response,tab); + }).catch(onError); + } }); diff --git a/manifest.json b/manifest.json index b6b1997..4e41145 100644 --- a/manifest.json +++ b/manifest.json @@ -8,14 +8,14 @@ "48" : "data/icon48.png" }, "applications": { - "gecko": { - "id": "add2scuttle@spaceoasis.gotdns.org", - "strict_min_version": "52.0" - } + "gecko": { + "id": "add2scuttle@spaceoasis.gotdns.org", + "strict_min_version": "52.0" + } }, "options_ui" : { - "page": "options.html" - }, + "page": "options.html" + }, "permissions" : [ "storage", "notifications", diff --git a/options.html b/options.html index 64e2d1e..09c1904 100644 --- a/options.html +++ b/options.html @@ -10,9 +10,11 @@


+


-
+
+
diff --git a/options.js b/options.js index b5ca58a..5e9c6b5 100644 --- a/options.js +++ b/options.js @@ -3,6 +3,7 @@ function saveOptions(e) { browser.storage.local.set({ instance_url: document.querySelector("#instance_url").value , username: document.querySelector("#username").value , + password: document.querySelector("#password").value , window_width: document.querySelector("#window_width").value , window_height: document.querySelector("#window_height").value, remove_querystrings: document.querySelector("#remove_querystrings").checked, @@ -15,6 +16,7 @@ function restoreOptions() { function setCurrentChoices(result) { document.querySelector("#instance_url").value = result["instance_url"] || "http://semanticscuttle.sourceforge.net/"; document.querySelector("#username").value = result["username"] || "Me"; + document.querySelector("#password").value = result["password"] || "Password"; document.querySelector("#window_width").value = result["window_width"] || "640"; document.querySelector("#window_height").value = result["window_height"] || "480"; document.querySelector("#remove_querystrings").checked = result["remove_querystrings"] || false;