140 lines
4.2 KiB
TypeScript
Executable File
140 lines
4.2 KiB
TypeScript
Executable File
declare global {
|
|
interface Window {
|
|
requestIdleCallback: (
|
|
callback: (deadline: {
|
|
didTimeout: boolean;
|
|
timeRemaining: () => number;
|
|
}) => void,
|
|
options?: { timeout: number }
|
|
) => number | NodeJS.Timeout;
|
|
cancelIdleCallback: (id: number | NodeJS.Timeout) => void;
|
|
debug: any;
|
|
}
|
|
|
|
// namespace JSX {
|
|
// interface IntrinsicElements {
|
|
// "wired-button": HTMLAttributes;
|
|
// "wired-card": HTMLAttributes;
|
|
// "wired-checkbox": HTMLAttributes;
|
|
// "wired-combo": HTMLAttributes;
|
|
// "wired-fab": HTMLAttributes;
|
|
// "wired-icon-button": HTMLAttributes;
|
|
// "wired-input": HTMLAttributes;
|
|
// "wired-item": HTMLAttributes;
|
|
// "wired-lib": HTMLAttributes;
|
|
// "wired-listbox": HTMLAttributes;
|
|
// "wired-progress": HTMLAttributes;
|
|
// "wired-radio-group": HTMLAttributes;
|
|
// "wired-radio": HTMLAttributes;
|
|
// "wired-slider": HTMLAttributes;
|
|
// "wired-spinner": HTMLAttributes;
|
|
// "wired-tabs": HTMLAttributes;
|
|
// "wired-textarea": HTMLAttributes;
|
|
// "wired-toggle": HTMLAttributes;
|
|
// "wired-tooltip": HTMLAttributes;
|
|
|
|
// }
|
|
// }
|
|
}
|
|
declare const window: Window;
|
|
|
|
window.requestIdleCallback =
|
|
window.requestIdleCallback ||
|
|
function (cb) {
|
|
var start = Date.now();
|
|
return setTimeout(function () {
|
|
console.log("Idle Timeout reached!");
|
|
cb({
|
|
didTimeout: false,
|
|
timeRemaining: function () {
|
|
return Math.max(0, 50 - (Date.now() - start));
|
|
},
|
|
});
|
|
}, 1);
|
|
};
|
|
|
|
window.cancelIdleCallback =
|
|
window.cancelIdleCallback ||
|
|
function (id) {
|
|
clearTimeout(id as any);
|
|
};
|
|
|
|
console.log(window.requestIdleCallback);
|
|
|
|
window.debug = {};
|
|
|
|
import { h, render } from "preact";
|
|
import App from "./components/App";
|
|
import "@hibas123/theme/out/base.css";
|
|
import "./index.scss";
|
|
import Navigation from "./navigation";
|
|
import VaultsPage from "./components/routes/vaults/Vaults";
|
|
import { Page } from "./page";
|
|
|
|
import Notes from "./notes";
|
|
import DemoPage from "./components/demo";
|
|
import VaultPage from "./components/routes/vault/Vault";
|
|
import SharePage from "./components/routes/share/Share";
|
|
import Notifications from "./notifications";
|
|
import Error404Page from "./components/routes/404";
|
|
import SettingsPage from "./components/routes/settings/Settings";
|
|
window.debug.notes = Notes;
|
|
|
|
import Theme from "./theme";
|
|
|
|
console.log("Dark mode:", Theme.active);
|
|
|
|
(async () => {
|
|
// Initialize notes provider
|
|
if (Notes.loginRequired()) {
|
|
let url = new URL(location.href);
|
|
let code = url.searchParams.get("code");
|
|
|
|
if (code) {
|
|
let err = await Notes.getToken(code);
|
|
if (err) {
|
|
Notifications.sendError("Login failed: " + err);
|
|
return Notes.login();
|
|
} else {
|
|
window.history.replaceState(
|
|
null,
|
|
document.title,
|
|
"/" + window.location.hash
|
|
);
|
|
}
|
|
} else {
|
|
return Notes.login();
|
|
}
|
|
}
|
|
|
|
await Notes.start();
|
|
|
|
if (window.navigator.storage && navigator.storage.persist) {
|
|
navigator.storage
|
|
.persisted()
|
|
.then((has) => (has ? true : navigator.storage.persist()))
|
|
.then((is) => {
|
|
console.log("Persistant Storage:", is);
|
|
});
|
|
}
|
|
|
|
Navigation.default = VaultsPage as typeof Page;
|
|
Navigation.addPage("/vault", VaultPage as typeof Page);
|
|
Navigation.addPage("/demo", DemoPage as typeof Page);
|
|
Navigation.addPage("/share", SharePage as typeof Page);
|
|
Navigation.addPage("/settings", SettingsPage as typeof Page);
|
|
Navigation.addPage("/404", Error404Page);
|
|
const trad = window.location.pathname;
|
|
if (trad && trad !== "/" && trad !== "") {
|
|
let p: any = {};
|
|
new URL(window.location.href).searchParams.forEach(
|
|
(val, key) => (p[key] = val)
|
|
);
|
|
Navigation.setPage(trad, p, undefined, true);
|
|
// window.location.href = "/#/" + trad;
|
|
}
|
|
Navigation.start();
|
|
|
|
render(<App />, document.body, document.getElementById("app"));
|
|
})();
|