import { LitElement, html, css } from 'lit-element'; import { wrapCss, rwpLogo, IS_APP } from './misc'; import { registerSW, initDBWorker } from './pageutils'; import prettyBytes from 'pretty-bytes'; import fasHelp from '@fortawesome/fontawesome-free/svgs/solid/question-circle.svg'; import fasArrowLeft from '@fortawesome/fontawesome-free/svgs/solid/arrow-left.svg'; import fasArrowRight from '@fortawesome/fontawesome-free/svgs/solid/arrow-right.svg'; import fasInfoIcon from '@fortawesome/fontawesome-free/svgs/solid/info-circle.svg'; // =========================================================================== class App extends LitElement { constructor() { super(); this.sourceUrl = null; this.collInfo = null; this.showTerms = false; this.pageParams = {}; this.inited = false; registerSW(__SW_NAME__); initDBWorker(); } static get properties() { return { inited: { type: Boolean }, pageParams: { type: Object }, sourceUrl: { type: String }, navMenuShown: { type: Boolean }, showTerms: { type: Boolean }, collInfo: { type: Object }, loadInfo: { type: Object }, embed: { type: String }, } } static get styles() { return wrapCss(css` #wrlogo { max-height: 2.5rem; } .wr-logo-item { padding-right: 8px; } .has-allcaps { font-variant-caps: small-caps; } :host { position: fixed; left: 0px; top: 0px; bottom: 0px; right: 0px; display: flex; min-width: 0px; flex-direction: column; } wr-coll { height: 100%; } .navbar { padding: 0 0.5em; } div.navbar-menu fa-icon { vertical-align: sub; } .tagline { margin-top: 1.0rem; } @media screen and (min-width: 840px) { .menu-only { display: none; } a.arrow-button { padding-left: 4px; padding-right: 4px; } .info-menu { padding: 0 1.0em; } .logo-text { padding-left: 0px; } a.navbar-item.logo-text:hover { background-color: initial; } } @media screen and (max-width: 840px) { .wide-only { display: none; } } `); } render() { if (!this.inited) { return html``; } return html` ${!this.embed || this.embed === "full" ? html` ` : ''} ${this.sourceUrl ? html` ` : html` ${!IS_APP ? html`

Explore and Replay Interactive Archived Webpages Directly in your Browser. (See Examples)

` : ``}
`} ${this.showTerms ? html` ` : ``} ` } firstUpdated() { this.initRoute(); window.addEventListener("popstate", (event) => { this.initRoute(); }); } updated(changedProperties) { if (changedProperties.has("sourceUrl")) { this.collInfo = null; } } onFavIcons(event) { const head = document.querySelector('head'); const oldLinks = document.querySelectorAll("link[rel*='icon']"); for (const link of oldLinks) { head.removeChild(link); } for (const icon of event.detail.icons) { const link = document.createElement('link'); link.rel = icon.rel; link.href = icon.href; head.appendChild(link); } } onNavMenu(event) { event.stopPropagation(); this.navMenuShown = !this.navMenuShown; if (this.navMenuShown) { document.addEventListener("click", () => { this.navMenuShown = false; }, {once: true}); } } initRoute() { this.inited = true; this.pageParams = new URLSearchParams(window.location.search); // Google Drive let state = this.pageParams.get("state"); if (state) { try { state = JSON.parse(state); if ((state.ids instanceof Array) && state.userId && state.action === "open") { this.pageParams.set("source", "googledrive://" + state.ids[0]); this.pageParams.delete("state"); window.location.search = this.pageParams.toString(); return; } } catch (e) { console.log(e); } } this.sourceUrl = this.pageParams.get("source") || ""; this.embed = this.pageParams.get("embed") || ""; if (this.pageParams.has("terms")) { this.showTerms = true; } if (this.pageParams.get("config")) { if (!this.loadInfo) { this.loadInfo = {} } try { this.loadInfo.extraConfig = JSON.parse(this.pageParams.get("config")); } catch (e) { console.log("invalid config: " + e); } } if (this.pageParams.get("basePageUrl")) { if (!this.loadInfo) { this.loadInfo = {extraConfig: {}} } if (!this.loadInfo.extraConfig) { this.loadInfo.extraConfig = {}; } this.loadInfo.extraConfig.baseUrl = this.pageParams.get("basePageUrl"); } if (this.pageParams.get("customColl")) { if (!this.loadInfo) { this.loadInfo = {} } this.loadInfo.customColl = this.pageParams.get("customColl"); } } onStartLoad(event) { // just redirect right away? this.pageParams.set("source", event.detail.sourceUrl); if (!event.detail.isFile) { window.location.search = this.pageParams.toString(); return; } else { const url = new URL(window.location.href); url.search = this.pageParams.toString(); window.history.pushState({}, "", url.toString()); } this.sourceUrl = event.detail.sourceUrl; this.loadInfo = event.detail; } onCollLoaded(event) { this.loadInfo = null; if (event.detail.collInfo) { this.collInfo = event.detail.collInfo; } if (event.detail.alreadyLoaded) { //this.sourceLoaded = true; return; } //this.initRoute(); if (event.detail.sourceUrl !== this.sourceUrl) { this.pageParams.set("source", event.detail.sourceUrl); window.location.search = this.pageParams.toString(); } } } customElements.define("replay-app-main", App); export { App };