189 lines
4 KiB
JavaScript
189 lines
4 KiB
JavaScript
// General
|
|
function connect_event(name, signal, callback) {
|
|
const element = document.getElementById(name);
|
|
element.addEventListener(signal, callback);
|
|
}
|
|
|
|
|
|
function delete_item(base_url, id) {
|
|
request(`${base_url}/${id}`, (response, body) => {
|
|
if (response.status != 200) {return;}
|
|
|
|
const element = document.getElementById(id);
|
|
element.parentElement.removeChild(element);
|
|
});
|
|
}
|
|
|
|
|
|
function request(url, callback) {
|
|
fetch(url).then((response) => {
|
|
if (callback != null) {
|
|
response.text().then((body) => {
|
|
callback(response, body)
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
function toggle_all_details(class_name, state) {
|
|
const elements = document.getElementsByClassName(class_name);
|
|
|
|
for (let element of elements) {
|
|
if (state && !element.hasAttribute('open')) {
|
|
element.setAttribute('open', null);
|
|
} else if (!state && element.hasAttribute('open')) {
|
|
element.removeAttribute('open');
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function toggle_menu() {
|
|
const menu = document.getElementById('main-menu');
|
|
const show_text = menu.hasAttribute('show');
|
|
|
|
if (show_text) {
|
|
menu.removeAttribute('show');
|
|
} else {
|
|
menu.setAttribute('show', null);
|
|
}
|
|
|
|
for (let item of document.getElementsByClassName('menu-item-text')) {
|
|
if (show_text) {
|
|
item.style.display = 'none'
|
|
} else {
|
|
item.style.display = 'inline'
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function handle_key_enter(event) {
|
|
if (event.code.toString().toUpperCase() == 'ENTER') {
|
|
handle_save_config(event);
|
|
}
|
|
}
|
|
|
|
|
|
function handle_save_config(event) {
|
|
const input = event.target;
|
|
let value = '';
|
|
|
|
if (input.type.toUpperCase() == 'CHECKBOX') {
|
|
if (input.checked) {
|
|
value = 'true';
|
|
} else {
|
|
value = 'false';
|
|
}
|
|
} else {
|
|
value = input.value;
|
|
}
|
|
|
|
const url = new URL(input.form.action);
|
|
url.searchParams.set(input.id, value)
|
|
|
|
request(url, (response, body) => {
|
|
if (response.status == 200) {
|
|
console.log(`Set config: ${input.id}=${value}`);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
// Fediverse
|
|
function create_account_nodes(ids) {
|
|
for (let id of ids) {
|
|
request(`/fediverse/acct_info/${id}`, (response, body) => {
|
|
if (response.status != 200) {
|
|
console.log(`Error ${response.status} when trying to fetch account: ${body}`);
|
|
return;
|
|
}
|
|
|
|
const accts = document.getElementById('accounts');
|
|
const container = document.createElement('div');
|
|
container.innerHTML = body;
|
|
|
|
accts.appendChild(container.children[0]);
|
|
})}
|
|
}
|
|
|
|
|
|
function set_active(acctid) {
|
|
request(`/fediverse/set_active/${acctid}`, (response, body) => {
|
|
if (response.status != 200) {
|
|
console.log(`Failed to set account active: ID ${acctid}`);
|
|
return;
|
|
}
|
|
|
|
for (let acct of document.getElementsByClassName('account')) {
|
|
var active = acct.getElementsByClassName('active')[0];
|
|
|
|
if (acct.id == acctid) {
|
|
active.style.display = 'none';
|
|
} else {
|
|
active.style.display = 'inline-block';
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
// History
|
|
function delete_history(histid) {
|
|
request(`/history/delete/${histid}`, (response, body) => {
|
|
if (response.status != 200) {return;}
|
|
|
|
const element = document.getElementById(histid);
|
|
const details = element.parentElement;
|
|
|
|
details.removeChild(element);
|
|
|
|
if (details.children.length <= 1) {
|
|
details.parentElement.removeChild(details);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
// Search
|
|
function set_default_search(id) {
|
|
request(`/search/default/${id}`, (response, body) => {
|
|
if (response.status != 200) {
|
|
console.log(`Failed to set search engine active: ID ${id}`);
|
|
return;
|
|
}
|
|
|
|
for (let acct of document.getElementsByClassName('search-item')) {
|
|
const active = acct.getElementsByClassName('default')[0];
|
|
|
|
if (acct.id == `SEARCH${id}`) {
|
|
active.style.display = 'none';
|
|
} else {
|
|
active.style.display = 'inline-block';
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
// Passwords
|
|
function copy_password(id) {
|
|
request(`/passwords/copy/${id}`, (response, body) => {
|
|
if (response.status != 200) {
|
|
console.log(`Error code when trying to copy password: ${xhr.status} ${xhr.statusText}`);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
function setup_password_handlers() {
|
|
connect_event("password", "focus", (event) => {
|
|
event.currentTarget.type = "text";
|
|
});
|
|
|
|
connect_event("password", "blur", (event) => {
|
|
event.currentTarget.type = "password";
|
|
});
|
|
}
|