SecureNotes/src/index.tsx

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"));
})();