This repository has been archived on 2023-02-02. You can view files and clone it, but cannot push or open issues or pull requests.
barkshark-web/barkshark_web/localweb/js/functions.js

199 lines
4.2 KiB
JavaScript

// General
function connect_event(name, signal, callback) {
var element = document.getElementById(name);
element.addEventListener(signal, callback);
}
function trigger_event(name, type) {
var element = document.getElementById(name);
var event = new Event(type);
element.dispatchEvent(event);
}
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}`);
} else {
console.log(`Failed to set config: ${input.id}`)
}
});
}
// 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";
});
}