-
Notifications
You must be signed in to change notification settings - Fork 0
/
popup.js
149 lines (126 loc) · 6.93 KB
/
popup.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
function sendToDebug(response) {
fetch('http://localhost:8080/debug', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(response),
})
.then(res => res.json())
.then(data => console.log('Success:', data))
.catch((error) => console.error('Error:', error));
}
chrome.runtime.sendMessage({ message: 'getTabUrl' }, response => {
let url = response.url;
let resultsDiv = document.getElementById('results');
chrome.storage.sync.get(['resultsCount', 'pagesCount', 'debug'], function(data) {
let resultsCount = data.resultsCount || 1;
let pagesCount = data.pagesCount || 3;
let debug = data.debug || false;
let count = 0;
let page = 0;
function formatDate(dateString) {
let date = new Date(dateString);
let day = ('0' + date.getDate()).slice(-2);
let month = ('0' + (date.getMonth() + 1)).slice(-2);
let year = date.getFullYear().toString().slice(-2);
let hours = ('0' + date.getHours()).slice(-2);
let minutes = ('0' + date.getMinutes()).slice(-2);
let seconds = ('0' + date.getSeconds()).slice(-2);
return `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`;
}
function fetchPage() {
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
let currentTab = tabs[0];
let pageTitle = currentTab.title;
function showAdditionalSharingOptions() {
// Check if the sharePanel already exists
let sharePanel = document.getElementById('sharePanel');
if (!sharePanel) {
sharePanel = document.createElement('div');
sharePanel.id = 'sharePanel';
sharePanel.style.border = '1px solid black';
sharePanel.style.padding = '10px';
sharePanel.style.marginTop = '10px';
let twitterLink = document.createElement('a');
twitterLink.href = `https://twitter.com/intent/tweet?url=${encodeURIComponent(url)}&text=${encodeURIComponent(pageTitle)}`;
twitterLink.innerText = 'Share on Twitter';
twitterLink.target = '_blank';
let redditLink = document.createElement('a');
redditLink.href = `https://reddit.com/submit?url=${encodeURIComponent(url)}&title=${encodeURIComponent(pageTitle)}`;
redditLink.innerText = 'Share on Reddit';
redditLink.target = '_blank';
sharePanel.appendChild(twitterLink);
sharePanel.appendChild(document.createElement('br'));
sharePanel.appendChild(redditLink);
resultsDiv.appendChild(sharePanel);
}
}
if (page >= pagesCount) {
if (count === 0) {
resultsDiv.innerText = 'All pages have been searched but no results found on the same URL.';
let submitLink = document.createElement('a');
submitLink.href = `https://news.ycombinator.com/submitlink?u=${encodeURIComponent(url)}&t=${encodeURIComponent(pageTitle)}`;
submitLink.innerText = 'Submit this URL to Hacker News';
submitLink.target = '_blank';
resultsDiv.appendChild(document.createElement('br'));
resultsDiv.appendChild(submitLink);
showAdditionalSharingOptions();
}
return;
}
let requestUrl = `https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(url)}&page=${page}`;
fetch(requestUrl)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
return response.json();
})
.then(response => {
if (debug) {
sendToDebug(response);
}
if (response.nbHits > 0) {
for (let i = 0; i < response.hits.length && count < resultsCount; i++) {
let result = response.hits[i];
if (result.title && result.objectID && url.includes(result.url)) {
let link = document.createElement('a');
link.href = 'https://news.ycombinator.com/item?id=' + result.objectID;
link.innerText = result.title;
link.target = '_blank';
let details = document.createElement('span');
details.innerText = ` -(${result.num_comments || 'N/A'}) - ${formatDate(result.created_at)}`;
let container = document.createElement('div');
container.appendChild(link);
container.appendChild(details);
resultsDiv.appendChild(container);
count++;
}
}
page++;
if (count < resultsCount) {
fetchPage();
} else {
showAdditionalSharingOptions();
}
} else {
resultsDiv.innerText = 'This URL was never submitted.';
let submitLink = document.createElement('a');
submitLink.href = `https://news.ycombinator.com/submitlink?u=${encodeURIComponent(url)}&t=${encodeURIComponent(pageTitle)}`;
submitLink.innerText = 'Submit this URL to Hacker News';
submitLink.target = '_blank';
resultsDiv.appendChild(document.createElement('br'));
resultsDiv.appendChild(submitLink);
showAdditionalSharingOptions();
}
})
.catch(e => {
console.error(`Fetch failed: ${e}`);
resultsDiv.innerText = 'An error occurred while fetching data. Please try again.';
});
});
}
fetchPage();
});
});