2021-05-27 20:21:49 +02:00
/ *
2021-05-27 20:24:35 +02:00
Cockpit Navigator - A File System Browser for Cockpit .
2021-05-28 18:23:35 +02:00
Copyright ( C ) 2021 Josh Boudreau < jboudreau @ 45 drives . com >
Copyright ( C ) 2021 Sam Silver < ssilver @ 45 drives . com >
Copyright ( C ) 2021 Dawson Della Valle < ddellavalle @ 45 drives . 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-26 15:52:05 +02:00
2021-05-28 19:06:36 +02:00
/ * *
*
* @ param { NavWindow } nav _window
* /
2021-05-28 18:23:35 +02:00
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" ) ;
2021-05-27 22:22:55 +02:00
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" ) ;
2021-05-27 22:22:55 +02:00
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" ) ;
2021-05-27 22:22:55 +02:00
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 ) ;
2021-05-27 22:22:55 +02:00
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" ) ;
2021-05-27 22:22:55 +02:00
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" ) ;
2021-05-27 22:22:55 +02:00
logo . src = "branding/logo-dark.svg" ;
2021-05-26 22:04:29 +02:00
} 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" ) ;
2021-05-27 22:22:55 +02:00
logo . src = "branding/logo-light.svg" ;
2021-05-26 22:04:29 +02:00
}
2021-05-27 17:26:23 +02:00
document . documentElement . setAttribute ( "data-theme" , state ) ;
localStorage . setItem ( "houston-theme-state" , state ) ;
2021-05-26 22:04:29 +02:00
}
2021-05-21 20:00:20 +02:00
let nav _window = new NavWindow ( ) ;
2021-05-21 18:15:42 +02:00
2021-05-21 20:54:25 +02:00
function set _up _buttons ( ) {
2021-05-26 18:25:11 +02:00
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 ) ) ;
2021-05-26 15:10:02 +02:00
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 ) ) ;
2021-06-02 18:54:55 +02:00
document . getElementById ( "nav-ln-btn" ) . addEventListener ( "click" , nav _window . ln . bind ( nav _window , "" ) ) ;
2021-05-26 17:09:25 +02:00
document . getElementById ( "nav-delete-btn" ) . addEventListener ( "click" , nav _window . delete _selected . bind ( nav _window ) ) ;
2021-05-25 22:54:21 +02:00
document . getElementById ( "nav-edit-properties-btn" ) . addEventListener ( "click" , nav _window . show _edit _selected . bind ( nav _window ) ) ;
2021-05-26 15:10:02 +02:00
document . getElementById ( "nav-cancel-edit-btn" ) . addEventListener ( "click" , nav _window . hide _edit _selected . bind ( nav _window ) ) ;
2021-05-26 15:52:05 +02:00
document . getElementById ( "nav-apply-edit-btn" ) . addEventListener ( "click" , nav _window . apply _edit _selected . bind ( nav _window ) ) ;
var mode _checkboxes = document . getElementsByClassName ( "mode-checkbox" ) ;
2021-05-26 22:04:29 +02:00
for ( let checkbox of mode _checkboxes ) {
2021-05-26 15:52:05 +02:00
checkbox . addEventListener ( "change" , nav _window . update _permissions _preview . bind ( nav _window ) ) ;
}
2021-05-26 20:18:35 +02:00
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 ) ;
2021-05-27 21:46:54 +02:00
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 ( ) ;
} ) ;
}
2021-06-08 19:54:58 +02:00
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 ) ;
2021-07-20 15:40:50 +02:00
e . stopPropagation ( ) ;
2021-06-08 19:54:58 +02:00
} ) ;
2021-06-08 21:04:20 +02:00
// 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 (
2021-07-19 18:32:24 +02:00
` 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
}
2021-05-21 18:15:42 +02:00
async function main ( ) {
2021-05-27 17:26:23 +02:00
set _last _theme _state ( ) ;
2021-05-28 18:23:35 +02:00
load _hidden _file _state ( nav _window ) ;
2021-06-07 22:00:42 +02:00
load _item _display _state ( nav _window ) ;
2021-05-28 18:45:58 +02:00
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 ( ) ;
2021-05-21 18:15:42 +02:00
}
main ( ) ;