initial commit
This commit is contained in:
134
startpage/index.js
Normal file
134
startpage/index.js
Normal file
@@ -0,0 +1,134 @@
|
||||
let clock = document.getElementById("clock");
|
||||
let date = document.getElementById("date");
|
||||
let input = document.getElementById("search-bar");
|
||||
let result = document.getElementById("search-results");
|
||||
|
||||
/* Allow toggling between military and 12 hr time */
|
||||
let military_time = false
|
||||
clock.onclick = function() {
|
||||
military_time = !military_time;
|
||||
time();
|
||||
}
|
||||
|
||||
function time(timeout) {
|
||||
let d = new Date();
|
||||
let m = d.getMinutes();
|
||||
let h = d.getHours();
|
||||
|
||||
/* if it hasn't been set then set it here */
|
||||
if (military_time) {
|
||||
clock.textContent = `${("0" + h).substr(-2)}:${("0" + m).substr(-2)}`;
|
||||
} else {
|
||||
let hours = h % 12;
|
||||
let minutes = ("0" + m).substr(-2);
|
||||
hours = hours ? hours : 12;
|
||||
|
||||
clock.textContent = `${hours}:${minutes} ${(h >= 12 ? "PM" : "AM")}`;
|
||||
}
|
||||
|
||||
/* set the time every second */
|
||||
timeout && setTimeout(() => time(true), (60 - d.getSeconds()) * 1000);
|
||||
}
|
||||
|
||||
let last_date;
|
||||
/* Sun 31st, May */
|
||||
function cal(force) {
|
||||
const days = [ "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" ];
|
||||
const months = [ "January", "Febuary", "March", "April", "May", "June",
|
||||
"July", "August", "September", "November", "December", ];
|
||||
|
||||
let d = new Date();
|
||||
let day = days[d.getDay()];
|
||||
let day_of_month = d.getDate();
|
||||
let month = months[d.getMonth()];
|
||||
let day_suffix
|
||||
|
||||
/* get a suffix for the day of the month */
|
||||
if (day_of_month > 3 && day_of_month < 21) {
|
||||
day_suffix = "th";
|
||||
} else if ((day_of_month / 1) % 10 == 1) {
|
||||
day_suffix = "st";
|
||||
} else if ((day_of_month / 1) % 10 == 2) {
|
||||
day_suffix = "nd";
|
||||
} else if ((day_of_month / 1) % 10 == 3) {
|
||||
day_suffix = "rd";
|
||||
} else {
|
||||
day_suffix = "th";
|
||||
}
|
||||
|
||||
/* check if this date has already been set before */
|
||||
if (!force && last_date == `${d.getDay()}${d.getMonth()}`) {
|
||||
return;
|
||||
}
|
||||
|
||||
date.textContent = `${day} ${day_of_month}${day_suffix}, ${month}`;
|
||||
|
||||
/* store the last date that was set */
|
||||
last_date = `${d.getDay()}${d.getMonth()}`;
|
||||
}
|
||||
|
||||
/* show the time on the page */
|
||||
time(true);
|
||||
|
||||
/* just incase something dumb happens the time should update when the user
|
||||
* focus's the page */
|
||||
window.addEventListener('focus', time);
|
||||
|
||||
cal();
|
||||
setInterval(cal, 1000);
|
||||
|
||||
function shell(event) {
|
||||
var env = {
|
||||
path: "/startpage/root/bin/",
|
||||
};
|
||||
|
||||
/* convert a directory such as /startpage/root/bin/ to /startpage/root/.bin
|
||||
* to read static fs data.
|
||||
*/
|
||||
function convertPath(path) {
|
||||
if (path.endsWith('/')) {
|
||||
path = path.slice(0, -1);
|
||||
}
|
||||
const parts = path.split('/');
|
||||
const hidden = '.' + parts.pop();
|
||||
return parts.concat(hidden).join('/');
|
||||
}
|
||||
|
||||
async function run(path) {
|
||||
try {
|
||||
const response = await fetch(convertPath(env.path));
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to load file: ${response.status}`);
|
||||
}
|
||||
|
||||
const text = await response.text();
|
||||
const lines = text.split(/\r?\n/);
|
||||
const matchedLine = lines.find(line => line.split(".")[0] == path);
|
||||
if (!matchedLine) {
|
||||
throw new Error(`${path} cannot be found in path.`);
|
||||
}
|
||||
|
||||
const file = env.path + matchedLine;
|
||||
const { cmd } = await import(file);
|
||||
return await cmd(input.value, event.key);
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
if (input.value == "") {
|
||||
input.style.color = "white";
|
||||
} else {
|
||||
run(input.value.substring(0, input.value.indexOf(" ")) || input.value)
|
||||
.then(res => {
|
||||
result.innerHTML = res;
|
||||
input.style.color = "var(--blue)";
|
||||
})
|
||||
.catch(err => {
|
||||
input.style.color = "white";
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
input.addEventListener('keyup', shell);
|
||||
shell({ key: "" });
|
Reference in New Issue
Block a user