From fad8af07a7a1f7c74d1c9ce558f860a8023c9b1c Mon Sep 17 00:00:00 2001 From: Clement Date: Tue, 7 Jul 2020 11:28:51 +0200 Subject: [PATCH] :construction: Try to make user chosen extract For #1 --- manifest.json | 4 +-- src/_locales/en/messages.json | 4 +++ src/_locales/fr/messages.json | 4 +++ src/scripts/background.js | 40 ++++++++++++++++++++++++++++ src/scripts/contentscript.js | 50 ++++++++++++++++++++++++++++++----- src/scripts/popup.js | 3 +-- src/styles/contentstyle.css | 9 +++++++ 7 files changed, 103 insertions(+), 11 deletions(-) create mode 100644 src/styles/contentstyle.css diff --git a/manifest.json b/manifest.json index 9127e4e..15050a4 100644 --- a/manifest.json +++ b/manifest.json @@ -11,7 +11,7 @@ "background": { "scripts": ["scripts/background.js"] }, - "permissions": ["activeTab", "storage"], + "permissions": ["activeTab", "storage", "contextMenus"], "options_ui": { "page": "options.html" }, @@ -20,7 +20,7 @@ "matches": ["http://*/*", "https://*/*"], "js": ["scripts/contentscript.js"], "run_at": "document_end", - "all_frames": false + "all_frames": true } ], "browser_action": { diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 5894032..7a78f8d 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -58,5 +58,9 @@ "excerpt": { "message": "Add content", "description": "Option to add the webpage content into the email" + }, + "selectDomToSend": { + "message": "Select DOM To Send", + "description": "Select DOM To Send" } } diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json index c7da3f1..08dc5f2 100644 --- a/src/_locales/fr/messages.json +++ b/src/_locales/fr/messages.json @@ -58,5 +58,9 @@ "excerpt": { "message": "Ajouter le contenu", "description": "Option to add the webpage content into the email" + }, + "selectDomToSend": { + "message": "Partie à envoyer par email", + "description": "Select DOM To Send" } } diff --git a/src/scripts/background.js b/src/scripts/background.js index aa960d9..39d8785 100644 --- a/src/scripts/background.js +++ b/src/scripts/background.js @@ -1,6 +1,46 @@ import ext from "./utils/ext"; import storage from "./utils/storage"; +let onMenuAdded = function() { + if (ext.browser.runtime.lastError) { + console.log(`Error: ${ext.browser.runtime.lastError}`); + } else { + console.log("Readlater menu created successfully"); + } +}; + +ext.contextMenus.create( + { + id: "dom-selection", + title: ext.i18n.getMessage("selectDomToSend"), + contexts: ["all"] + }, + onMenuAdded +); + +ext.contextMenus.onClicked.addListener(function(info, tab) { + if ("dom-selection" === info.menuItemId) { + var page_data = { + title: "", + description: "", + image: "", + comment: "", + url: document.location.href + }; + ext.tabs.sendMessage(tab.id, { action: "process-page" }, function(data) { + ext.tabs.sendMessage(tab.id, { action: "DOM", data: data }, function( + response + ) { + if (response && response.action === "saved") { + console.log(ext.i18n.getMessage("savedSuccessfully")); + } else { + console.log(response.error + " (" + response.status + ")"); + } + }); + }); + } +}); + ext.runtime.onMessage.addListener(function(request, sender, sendResponse) { if (request.action === "perform-save") { var data = request.data; diff --git a/src/scripts/contentscript.js b/src/scripts/contentscript.js index 9404299..a3a77fd 100644 --- a/src/scripts/contentscript.js +++ b/src/scripts/contentscript.js @@ -1,35 +1,67 @@ import ext from "./utils/ext"; -import storage from "./utils/storage"; -var extractTags = () => { - var url = document.location.href; +let extractDOM = () => { + let indexInParent = node => { + let children = node.parentNode.childNodes; + let num = 0; + for (let i = 0; i < children.length; i++) { + if (children[i] === node) return num; + if (children[i].nodeType === 1) num++; + } + return -1; + }; + + let gx = el => { + let xp = ""; + for (; el && el.nodeType === 1; el = el.parentNode) { + let id = indexInParent(el) + 1; // jQuery(el.parentNode).children(el.tagName).index(el)+1; + id = id > 1 ? "[" + id + "]" : ""; + xp = "/" + el.tagName.toLowerCase() + id + xp; + } + + return xp; + }; + + document.addEventListener("click", function(evt) { + let tar = evt.target; + while (tar && tar !== this) { + if (tar.matches(".shikihover")) { + let data = extractTags(); + data.xpath = gx(tar); + } + } + }); +}; + +let extractTags = () => { + let url = document.location.href; if (!url || !url.match(/^http/)) { console.error("Invalid URL : " + url); return; } - var data = { + let data = { title: "", description: "", image: "", url: url }; - var ogTitle = document.querySelector("meta[property='og:title']"); + let ogTitle = document.querySelector("meta[property='og:title']"); if (ogTitle) { data.title = ogTitle.getAttribute("content"); } else { data.title = document.title; } - var descriptionTag = + let descriptionTag = document.querySelector("meta[property='og:description']") || document.querySelector("meta[name='description']"); if (descriptionTag) { data.description = descriptionTag.getAttribute("content"); } - var imgTag = + let imgTag = document.querySelector("meta[property='og:image']") || document.querySelector("meta[property='twitter-image']"); if (imgTag) { @@ -50,6 +82,10 @@ function onRequest(request, sender, sendResponse) { if (request.action === "process-page") { sendResponse(extractTags()); } + if (request.action === "DOM") { + console.log("DOM"); + sendResponse(extractDOM()); + } } ext.runtime.onMessage.addListener(onRequest); diff --git a/src/scripts/popup.js b/src/scripts/popup.js index 91fba09..f5d3949 100644 --- a/src/scripts/popup.js +++ b/src/scripts/popup.js @@ -20,8 +20,7 @@ storage.get("extract", function(resp) { }); var renderMessage = message => { - var displayContainer = document.getElementById("display-container"); - displayContainer.textContent = message; + document.getElementById("display-container").textContent = message; }; var renderBookmark = data => { diff --git a/src/styles/contentstyle.css b/src/styles/contentstyle.css new file mode 100644 index 0000000..1442676 --- /dev/null +++ b/src/styles/contentstyle.css @@ -0,0 +1,9 @@ +div:hover, +section:hover { + border: 3px solid yellow; +} + +div, +section { + border: none; +}