92 lines
2.2 KiB
JavaScript
92 lines
2.2 KiB
JavaScript
import ext from "./utils/ext";
|
|
|
|
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;
|
|
}
|
|
|
|
let data = {
|
|
title: "",
|
|
description: "",
|
|
image: "",
|
|
url: url
|
|
};
|
|
|
|
let ogTitle = document.querySelector("meta[property='og:title']");
|
|
if (ogTitle) {
|
|
data.title = ogTitle.getAttribute("content");
|
|
} else {
|
|
data.title = document.title;
|
|
}
|
|
|
|
let descriptionTag =
|
|
document.querySelector("meta[property='og:description']") ||
|
|
document.querySelector("meta[name='description']");
|
|
if (descriptionTag) {
|
|
data.description = descriptionTag.getAttribute("content");
|
|
}
|
|
|
|
let imgTag =
|
|
document.querySelector("meta[property='og:image']") ||
|
|
document.querySelector("meta[property='twitter-image']");
|
|
if (imgTag) {
|
|
data.image = imgTag.getAttribute("content");
|
|
} else {
|
|
imgTag =
|
|
document.querySelector("link[rel=icon]") ||
|
|
document.querySelector("link[rel=apple-touch-icon]");
|
|
if (imgTag) {
|
|
data.image = imgTag.getAttribute("href");
|
|
}
|
|
}
|
|
|
|
return data;
|
|
};
|
|
|
|
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);
|