-
Notifications
You must be signed in to change notification settings - Fork 0
/
popup.js
144 lines (128 loc) · 5.06 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
document.addEventListener('DOMContentLoaded', function() {
const status = document.getElementById('status');
const warning = document.getElementById('warning');
const topicSelect = document.getElementById('topic-select');
// Load saved configuration
chrome.storage.sync.get(['topics', 'apiUrl', 'accessToken'], function(items) {
if (chrome.runtime.lastError) {
console.error('Error retrieving settings:', chrome.runtime.lastError);
} else {
const topics = items.topics ? items.topics.split(',') : [];
document.getElementById('url').value = items.apiUrl || '';
document.getElementById('token').value = items.accessToken || '';
document.getElementById('topics').value = topics.join(',');
// Populate the topic dropdown
topicSelect.innerHTML = '';
topics.forEach(topic => {
const option = document.createElement('option');
option.value = topic.trim();
option.textContent = topic.trim();
topicSelect.appendChild(option);
});
}
});
// Toggle settings visibility
document.querySelector('.settings').addEventListener('click', function() {
const settingsDiv = document.getElementById('settings');
settingsDiv.classList.toggle('hidden');
});
// Save configuration
document.getElementById('save').addEventListener('click', function() {
const topics = document.getElementById('topics').value;
const apiUrl = document.getElementById('url').value;
const accessToken = document.getElementById('token').value;
chrome.storage.sync.set({ topics, apiUrl, accessToken }, function() {
if (chrome.runtime.lastError) {
console.error('Error saving settings:', chrome.runtime.lastError);
status.textContent = 'Error saving configuration.';
status.style.color = 'red';
} else {
console.log('Configuration saved.');
status.textContent = 'Configuration saved.';
status.style.color = 'green';
setTimeout(() => { status.textContent = ''; }, 3000);
// Update the topic dropdown
const topicsArray = topics ? topics.split(',') : [];
topicSelect.innerHTML = '';
topicsArray.forEach(topic => {
const option = document.createElement('option');
option.value = topic.trim();
option.textContent = topic.trim();
topicSelect.appendChild(option);
});
}
});
});
// Open ntfy URL in new tab
document.querySelector('.open-url').addEventListener('click', function() {
chrome.storage.sync.get('apiUrl', function(items) {
const apiUrl = items.apiUrl;
if (apiUrl) {
chrome.tabs.create({ url: apiUrl });
} else {
warning.textContent = 'Please configure ntfy URL first.';
warning.style.color = 'red';
warning.classList.remove('hidden');
setTimeout(() => { warning.classList.add('hidden'); }, 3000);
}
});
});
// Prefill the message textarea with the current tab's URL
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
const url = tabs[0].url;
document.getElementById('message').value = url;
});
// Send current URL or edited message to ntfy
document.getElementById('send').addEventListener('click', function() {
chrome.storage.sync.get(['topics', 'apiUrl', 'accessToken'], function(items) {
if (chrome.runtime.lastError) {
console.error('Error retrieving settings:', chrome.runtime.lastError);
return;
}
const topic = topicSelect.value;
const apiUrl = items.apiUrl;
const accessToken = items.accessToken;
const message = document.getElementById('message').value;
if (!topic || !apiUrl) {
warning.classList.remove('hidden');
warning.style.color = 'red';
setTimeout(() => { warning.classList.add('hidden'); }, 3000);
return;
}
const urlObj = new URL(apiUrl);
const username = urlObj.username;
const password = urlObj.password;
// Remove username and password from url
urlObj.username = '';
urlObj.password = '';
const fullUrl = urlObj.toString() + topic;
const headers = new Headers();
if(username && password) {
const credentials = btoa(`${username}:${password}`);
headers.set('Authorization', `Basic ${credentials}`);
}
if (accessToken) {
headers.set('Authorization', `Bearer ${accessToken}`);
}
fetch(fullUrl, {
method: "POST",
headers: headers,
body: message
}).then(response => {
if (!response.ok) {
console.error(`Failed to send message: ${response.status}`);
status.textContent = "Failed to send message.";
status.style.color = 'red';
} else {
status.textContent = "Message sent successfully.";
status.style.color = 'green';
setTimeout(() => { status.textContent = ''; }, 3000);
}
}).catch(error => {
console.error("Error:", error);
status.textContent = "Error: " + error;
status.style.color = 'red';
});
});
});
});