${list.title}
${list.desc}
-
${this.curatedPageMap[list.id] ? this.curatedPageMap[list.id].map((p) => this.renderCPage(p)) : html``}
import { LitElement, html, css, unsafeCSS } from 'lit-element'; import { wrapCss } from './misc'; import { unsafeHTML } from 'lit-html/directives/unsafe-html'; import marked from 'marked'; import { getTS, getReplayLink } from './pageutils'; import Split from 'split.js' // =========================================================================== class Story extends LitElement { constructor() { super(); this.collInfo = null; this.curatedPageMap = {}; this.currList = 0; this.active = false; this.lastST = 0; this.clickTime = 0; this.isSidebar = false; this.splitDirection = false; } static get properties() { return { collInfo: { type: Object }, active: { type: Boolean }, curatedPageMap: { type: Object }, currList: { type: Number }, isSidebar: { type: Boolean }, splitDirection: { type: Boolean } } } recalcSplitter(width) { this.splitDirection = this.isSidebar || width < 769 ? "vertical" : "horizontal"; } firstUpdated() { this.recalcSplitter(document.documentElement.clientWidth); this.obs = new ResizeObserver((entries, observer) => { this.recalcSplitter(entries[0].contentRect.width); }); this.obs.observe(this) } updated(changedProperties) { if (changedProperties.has("collInfo")) { this.doLoadCurated(); } if (changedProperties.has("collInfo") || changedProperties.has("isSidebar")) { this.recalcSplitter(document.documentElement.clientWidth); } if (changedProperties.has("splitDirection")) { this.configureSplitter(); } if (changedProperties.has("currList") && this.active) { this.sendChangeEvent({ currList: this.currList, }); } } configureSplitter() { const sidebar = this.renderRoot.querySelector(".sidebar"); const content = this.renderRoot.querySelector(".main-content"); if (this.splitter) { try { this.splitter.destroy(); } catch (e) {} this.splitter = null; } if (sidebar && content && !this.splitter) { const opts = { sizes: [20, 80], gutterSize: 4, direction: this.splitDirection } this.splitter = Split([sidebar, content], opts); } } async doLoadCurated() { this.curatedPageMap = {}; const pageMap = {}; for (const page of this.collInfo.pages) { pageMap[page.id] = page; } for (const curated of this.collInfo.curatedPages) { if (!this.curatedPageMap[curated.list]) { this.curatedPageMap[curated.list] = []; } const page = pageMap[curated.page]; if (!page) { console.log("No Page with id: " + page); continue; } const url = page.url; const ts = page.ts; const title = page.title || page.url; const desc = curated.desc; this.curatedPageMap[curated.list].push({url, ts, title, desc}); } this.scrollToList(); } static get styles() { return wrapCss(css` :host { width: 100%; height: 100%; display: flex; flex-direction: column; min-width: 0px; justify-content: flex-start; align-items: center; } :host(.sidebar) .columns { display: flex !important; flex-direction: column; } :host(.sidebar) .column.sidebar.is-one-fifth { width: 100% !important; } ${Story.sidebarStyles(unsafeCSS(`:host(.sidebar)`))} .desc p { margin-bottom: 1.0em; } .columns { width: 100%; height: 100%; justify-self: stretch; margin: 1.0em 0 0 0 !important; min-height: 0; } .column.main-content { min-height: 0; display: flex; flex-direction: column; padding: 0px; margin-left: 0.75em; } .column.main-content.main-scroll { padding-right: 0.75em; word-break: break-all; } ul.menu-list a.is-active { background-color: #55be6f; } ol { margin-left: 30px; } @media screen and (min-width: 769px) { .columns { margin-top: 0.75em; } .column.sidebar { max-height: 100%; overflow-y: auto; } } @media screen and (max-width: 768px) { ${Story.sidebarStyles()} } .gutter.gutter-vertical:hover { cursor: row-resize; } .gutter.gutter-horizontal:hover { cursor: col-resize; } `); } static sidebarStyles(prefix = css``) { return css` ${prefix} .columns { position: relative; } ${prefix} .column.sidebar { overflow-y: auto; margin-top: 0.75em; } ${prefix} .column.main-content { position: relative; overflow-y: auto; border-top: 1px solid black; height: 100%; } ${prefix} .menu { font-size: 0.80rem; }`; } render() { const currListNum = this.currList; return html`
${list.desc}