cockpit-navigator/navigator/main.js

171 lines
7.0 KiB
JavaScript
Raw Normal View History

2021-05-27 20:21:49 +02:00
/*
2021-05-27 20:24:35 +02:00
Cockpit Navigator - A File System Browser for Cockpit.
Copyright (C) 2021 Josh Boudreau <jboudreau@45drives.com>
Copyright (C) 2021 Sam Silver <ssilver@45drives.com>
Copyright (C) 2021 Dawson Della Valle <ddellavalle@45drives.com>
2021-05-27 20:21:49 +02:00
This file is part of Cockpit Navigator.
Cockpit Navigator is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Cockpit Navigator is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Cockpit Navigator. If not, see <https://www.gnu.org/licenses/>.
*/
2021-07-22 22:02:46 +02:00
import { ModalPrompt } from "./components/ModalPrompt.js";
import { NavWindow } from "./components/NavWindow.js";
import { NAVIGATOR_VERSION } from "./version.js";
2021-05-28 19:06:36 +02:00
/**
*
* @param {NavWindow} nav_window
*/
function load_hidden_file_state(nav_window) {
const state = localStorage.getItem('show-hidden-files') === 'true';
const element = document.querySelector('#nav-show-hidden');
if (state) {
element.checked = true;
nav_window.toggle_show_hidden({ target: element });
}
}
2021-06-07 22:00:42 +02:00
/**
*
* @param {NavWindow} nav_window
*/
function load_item_display_state(nav_window) {
const state = localStorage.getItem('item-display');
if (state === 'list') {
nav_window.switch_item_display();
}
}
2021-05-27 17:26:23 +02:00
function set_last_theme_state() {
var toggle_switch = document.getElementById("toggle-theme");
var state = localStorage.getItem("houston-theme-state");
2021-05-27 18:32:53 +02:00
var icon = document.getElementById("houston-theme-icon");
var logo = document.getElementById("logo-45d");
2021-05-27 17:26:23 +02:00
if (state === "light") {
toggle_switch.checked = false;
document.documentElement.setAttribute("data-theme", "light");
2021-05-27 18:32:53 +02:00
icon.classList.remove("fa-moon");
icon.classList.add("fa-sun");
logo.src = "branding/logo-light.svg";
2021-05-27 17:26:23 +02:00
} else if (state === "dark") {
toggle_switch.checked = true;
2021-05-26 23:44:38 +02:00
document.documentElement.setAttribute("data-theme", "dark");
2021-05-27 18:32:53 +02:00
icon.classList.remove("fa-sun");
icon.classList.add("fa-moon");
logo.src = "branding/logo-dark.svg";
2021-05-26 23:44:38 +02:00
} else {
2021-05-27 17:26:23 +02:00
toggle_switch.checked = false;
state = "light";
localStorage.setItem("houston-theme-state", state);
logo.src = "branding/logo-light.svg";
2021-05-26 23:44:38 +02:00
}
}
2021-05-28 19:06:36 +02:00
/**
*
* @param {Event} e
*/
function switch_theme(e) {
2021-05-27 18:32:53 +02:00
var icon = document.getElementById("houston-theme-icon");
var logo = document.getElementById("logo-45d");
2021-05-27 17:26:23 +02:00
var state = "";
if (e.target.checked) {
state = "dark";
2021-05-27 18:32:53 +02:00
icon.classList.remove("fa-sun");
icon.classList.add("fa-moon");
logo.src = "branding/logo-dark.svg";
} else {
2021-05-27 17:26:23 +02:00
state = "light";
2021-05-27 18:32:53 +02:00
icon.classList.remove("fa-moon");
icon.classList.add("fa-sun");
logo.src = "branding/logo-light.svg";
}
2021-05-27 17:26:23 +02:00
document.documentElement.setAttribute("data-theme", state);
localStorage.setItem("houston-theme-state", state);
}
2021-05-21 20:00:20 +02:00
let nav_window = new NavWindow();
2021-05-21 20:54:25 +02:00
function set_up_buttons() {
document.getElementById("nav-back-btn").addEventListener("click", nav_window.back.bind(nav_window));
document.getElementById("nav-forward-btn").addEventListener("click", nav_window.forward.bind(nav_window));
2021-05-21 20:54:25 +02:00
document.getElementById("nav-up-dir-btn").addEventListener("click", nav_window.up.bind(nav_window));
document.getElementById("nav-refresh-btn").addEventListener("click", nav_window.refresh.bind(nav_window));
2021-05-26 17:52:45 +02:00
document.getElementById("nav-mkdir-btn").addEventListener("click", nav_window.mkdir.bind(nav_window));
document.getElementById("nav-touch-btn").addEventListener("click", nav_window.touch.bind(nav_window));
document.getElementById("nav-ln-btn").addEventListener("click", nav_window.ln.bind(nav_window, ""));
document.getElementById("nav-delete-btn").addEventListener("click", nav_window.delete_selected.bind(nav_window));
document.getElementById("nav-edit-properties-btn").addEventListener("click", nav_window.show_edit_selected.bind(nav_window));
document.getElementById("nav-cancel-edit-btn").addEventListener("click", nav_window.hide_edit_selected.bind(nav_window));
document.getElementById("nav-apply-edit-btn").addEventListener("click", nav_window.apply_edit_selected.bind(nav_window));
var mode_checkboxes = document.getElementsByClassName("mode-checkbox");
for (let checkbox of mode_checkboxes) {
checkbox.addEventListener("change", nav_window.update_permissions_preview.bind(nav_window));
}
document.getElementById("pwd").addEventListener("input", nav_window.nav_bar_update_choices.bind(nav_window), false);
document.getElementById("pwd").addEventListener("focus", nav_window.nav_bar_update_choices.bind(nav_window), false);
document.getElementById("pwd").addEventListener("keydown", nav_window.nav_bar_event_handler.bind(nav_window));
2021-05-27 17:26:23 +02:00
document.getElementById("toggle-theme").addEventListener("change", switch_theme, false);
document.getElementById("nav-show-hidden").addEventListener("change", nav_window.toggle_show_hidden.bind(nav_window));
2021-06-07 22:00:42 +02:00
document.getElementById("nav-item-display-btn").addEventListener("click", nav_window.switch_item_display.bind(nav_window));
2021-06-08 19:00:44 +02:00
for (let option of ["name", "owner", "group", "size"]) {
var elem = document.getElementById("sort-" + option + "-btn");
elem.addEventListener("click", (event) => {
nav_window.sort_function.set_func(option);
nav_window.refresh();
});
}
document.getElementById("search-bar").addEventListener("input", nav_window.search_filter.bind(nav_window));
document.getElementById("search-bar").addEventListener("keydown", (e) => {
if (e.keyCode === 13)
nav_window.search_filter(e);
e.stopPropagation();
});
// fix tab in editor input
document.getElementById('nav-edit-contents-textarea').addEventListener('keydown', (e) => {
if (e.key == 'Tab') {
e.preventDefault();
var start = e.target.selectionStart;
var end = e.target.selectionEnd;
e.target.value = `${e.target.value.substring(0, start)}\t${e.target.value.substring(end)}`;
e.target.selectionStart = e.target.selectionEnd = start + 1;
}
});
2021-07-19 18:22:42 +02:00
document.getElementById("nav-info-btn").addEventListener("click", () => {
new ModalPrompt().alert(
`Cockpit Navigator ${NAVIGATOR_VERSION}`,
2021-07-19 18:22:42 +02:00
`<p>` +
`Created by <a target="_blank" href=https://www.45drives.com/?utm_source=Houston&utm_medium=UI&utm_campaign=OS-Link>45Drives</a> for Houston UI (Cockpit).<br>` +
`<a target="_blank" href=https://github.com/45Drives/cockpit-navigator/issues>Issue Tracker</a><br>` +
`<a target="_blank" href=https://github.com/45Drives/cockpit-navigator/discussions>Feedback</a><br>` +
`</p>`
);
});
2021-05-21 20:54:25 +02:00
}
async function main() {
2021-05-27 17:26:23 +02:00
set_last_theme_state();
load_hidden_file_state(nav_window);
2021-06-07 22:00:42 +02:00
load_item_display_state(nav_window);
var get_users = nav_window.get_system_users();
var get_groups = nav_window.get_system_groups();
var refresh = nav_window.refresh();
await get_users;
await get_groups;
await refresh;
2021-05-21 20:54:25 +02:00
set_up_buttons();
}
main();