-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
77 lines (62 loc) · 2.15 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function saveTCoLinkNodesAndUrls(rootNode,
tCoLinkNodes,
urls) {
let linkNodes = rootNode.getElementsByTagName("a");
for (let linkNode of linkNodes) {
if (linkNode.href.startsWith("http://t.co/")
|| linkNode.href.startsWith("https://t.co/")) {
tCoLinkNodes.push(linkNode);
if (linkNode.title && !urls[linkNode.href]) {
urls[linkNode.href] = linkNode.title;
}
}
}
}
let urls = {};
function resolveTCoLinkNodes(tCoLinkNodes) {
for (let tCoLinkNode of tCoLinkNodes) {
if (urls[tCoLinkNode.href]) {
tCoLinkNode.href = urls[tCoLinkNode.href];
}
}
}
function resolveLinkNodes(rootNode) {
let tCoLinkNodes = [];
let iFrameNodes = rootNode.getElementsByTagName("iframe");
// maybe just saveUrls(); ?
saveTCoLinkNodesAndUrls(rootNode, tCoLinkNodes, urls);
for (let iFrameNode of iFrameNodes) {
saveTCoLinkNodesAndUrls(iFrameNode.contentDocument,
tCoLinkNodes,
urls);
}
resolveTCoLinkNodes(tCoLinkNodes);
}
function resolveIFrameNode(iFrameNode) {
iFrameNode.contentWindow.onload = function (event) {
resolveLinkNodes(iFrameNode.contentDocument);
};
}
function mutationObserverCallback(mutationRecords,
mutationObserver) {
for (let mutationRecord of mutationRecords) {
for (let addedNode of mutationRecord.addedNodes) {
if (addedNode.tagName) {
if (addedNode.tagName === "IFRAME") {
resolveIFrameNode(addedNode);
} else {
resolveLinkNodes(addedNode);
}
}
}
}
}
let mutationObserver = new MutationObserver(mutationObserverCallback);
let iFrameNodes = document.getElementsByTagName("iframe");
mutationObserver.observe(document,
{childList: true,
subtree: true});
for (let iFrameNode of iFrameNodes) {
resolveIFrameNode(iFrameNode);
}
resolveLinkNodes(document);