From 804529aeeaf1bfcc1d78e5bce0585568d708a502 Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Mon, 31 Aug 2020 18:47:24 -0700 Subject: [PATCH] sidebar support + pageview sidebar work! - pages view now appears as sidebar in table/desktop sizes when clicking show pages button - using webcomponent to support adjustable splitter for sidebar - pages view includes list filter if lists exist - current page is highlighted when selected in sidebar - date appears below url for each when in sidebar/mobile view mode --- package.json | 5 +- src/coll.js | 159 ++++++++++++---- src/pages.js | 498 ++++++++++++++++++++++++++++++++++++-------------- src/replay.js | 10 +- src/sorter.js | 1 + src/story.js | 2 +- yarn.lock | 20 +- 7 files changed, 517 insertions(+), 178 deletions(-) diff --git a/package.json b/package.json index 788ff1a..362b79f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "^5.13.0", "@webrecorder/wabac": "github:webrecorder/wabac.js", - "bulma": "^0.8.2", + "bulma": "^0.9.0", "fetch-ndjson": "^1.1.0", "flexsearch": "^0.6.32", "keyword-mark-element": "^0.1.2", @@ -18,7 +18,8 @@ "marked": "^1.0.0", "mime-types": "^2.1.27", "pretty-bytes": "^5.3.0", - "register-service-worker": "^1.7.1" + "register-service-worker": "^1.7.1", + "split-me": "^1.2.2" }, "devDependencies": { "css-loader": "^3.5.3", diff --git a/src/coll.js b/src/coll.js index 931d78c..e3085cf 100644 --- a/src/coll.js +++ b/src/coll.js @@ -1,4 +1,4 @@ -import { LitElement, html, css } from 'lit-element'; +import { LitElement, html, css, query } from 'lit-element'; import { wrapCss, rwpLogo, IS_APP } from './misc'; import { sourceToId, tsToDate } from './pageutils'; @@ -17,6 +17,8 @@ import fasLeft from '@fortawesome/fontawesome-free/svgs/solid/arrow-left.svg'; import fasRight from '@fortawesome/fontawesome-free/svgs/solid/arrow-right.svg'; import fasMenuV from '@fortawesome/fontawesome-free/svgs/solid/ellipsis-v.svg'; +import { defineCustomElements as defineSplitMe } from 'split-me/loader'; + const RWP_SCHEME = "search://"; @@ -55,6 +57,8 @@ class Coll extends LitElement this.hasStory = false; this.editable = false; + + this.showSidebar = localStorage.getItem(`pages:showSidebar`) === "1"; } static get properties() { @@ -64,6 +68,8 @@ class Coll extends LitElement sourceUrl: { type: String }, loadInfo: { type: Object, attribute: false }, + showSidebar: { type: Boolean }, + collInfo: { type: Object, attribute: false }, coll: { type: String }, @@ -91,6 +97,8 @@ class Coll extends LitElement this.addEventListener("fullscreenchange", (event) => { this.isFullscreen = !!document.fullscreenElement; }); + + defineSplitMe(window); } updated(changedProperties) { @@ -202,6 +210,10 @@ class Coll extends LitElement if (!this.hasStory && this.tabData.view === "story") { this.tabData.view = "pages"; } + + if (this.tabData.view === "replay" && this.tabData.query) { + this.showSidebar = true; + } } onTabClick(event) { @@ -214,12 +226,26 @@ class Coll extends LitElement onCollTabNav(event) { if (event.target.id === this.tabData.view) { - this.updateTabData(event.detail.data, event.detail.replaceLoc); + this.updateTabData(event.detail.data, event.detail.replaceLoc, false); + } else if (this.showSidebar && event.target.id === "pages" && this.tabData.view === "replay") { + if (event.detail.data.showSidebar === false) { + this.showSidebar = false; + return; + } + + this.updateTabData(event.detail.data, event.detail.replaceLoc, true); } } - updateTabData(data, replaceLoc = false) { - this.tabData = {view: this.tabData.view, ...data}; + updateTabData(data, replaceLoc = false, merge = false) { + this.tabData = {...this.tabData, ...data}; + // { + // view: this.tabData.view, + // query: this.tabData.query, + // currList: this.tabData.currList, + // ...data, + // }; + if (this.tabData.url) { this.url = this.tabData.url || ""; } @@ -232,6 +258,12 @@ class Coll extends LitElement static get styles() { return wrapCss(css` + :host { + display: flex; + flex-direction: column; + height: 100%; + } + .icon { vertical-align: text-top; } @@ -282,7 +314,9 @@ class Coll extends LitElement height: 100%; width: 100%; display: flex; - flex-direction: column; + flex-direction: row; + min-height: 0px; + flex: auto; } ${Coll.replayBarStyles} @@ -356,6 +390,25 @@ class Coll extends LitElement form { width: 100%; } + + .sidebar { + transition: transform 0.5s; + opacity: 1.0; + } + + split-me { + --phantom-divider-thickness: 4px; + --divider-thickness: 0.1rem; + --divider-color: rgb(151, 152, 154); + --divider-shadow: 0; + width: 100%; + height: 100%; + display: block; + } + + wr-page-view, wr-coll-replay { + width: 100%; + } `; } @@ -368,9 +421,9 @@ class Coll extends LitElement .coll="${this.coll}" .sourceUrl="${this.sourceUrl}" @coll-loaded=${this.onCollLoaded}>`; } else if (this.collInfo) { return html` + ${this.renderLocationBar()} + ${this.renderTabHeader()} `; } else { @@ -445,7 +498,7 @@ class Coll extends LitElement ` : ``} -