From 0ef8f955db2c12377f16f4fcfe4266e617c1c00e Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Sun, 25 Apr 2021 16:45:40 -0700 Subject: [PATCH] 1.4.0 Release (#45) * customizations for chooser, coll-index and appmain to support usage in archiveweb.page - chooser: support panel/message view - move apiPrefix to misc - make coll-index extensible, overridable styles, filtering * api changes: make configurable in coll-index, now using '/w/' instead of '/wabac/', '/c/' prefix for coll apis * lint pass! * bulma: update to 0.9.2, fix delete spinner with latest bulma * ui fixes: - show 'Loading Archives...' on initial load until first api response succeeds - fix typo in oncontrollerchange not actually resolving the promise! * embed sandbox: add other allow options, except top-nav - first api load: keep loading message until first successful api load - don't reset hash on purge to keep current page - sw config: fix typo with latest wabac.js - embed: add 'noSandbox' option to avoid adding sandbox to iframe, needed to show PDFs, add more allow rules (all except top-navigation) * ui improvements: - refresh: ensure location refresh from hitting enter in location bar always resets url - pageentry doubleclick: ensure double-clicking on page in sidebar always triggers reload, even if current page - pageentry typo fix: fix missing var causing selection error (fixes webrecorder/archivewebpage#25) - lint: don't include 'event' as global - use latest wabac.js 2.7.0-beta.1 * add CHANGES for 1.4.0, add 'noSandbox' to embedding options - electron app: fix path to 'w/' - bump electron to 11.4.3 * docs: autoload current version from package.json - chooser: support .json files for multiwacz (experimental) - update CHANGES.md - add missing .eslintrc.js file * bump version to 1.4.0 --- .eslintrc.js | 33 +++++++ CHANGES.md | 17 ++++ _config.yml | 4 - docs/embedding.md | 11 +-- package.json | 11 +-- src/appmain.js | 64 ++++++------- src/chooser.js | 61 ++++++++----- src/coll-index.js | 113 ++++++++++++++--------- src/coll.js | 178 +++++++++++++++++++----------------- src/electron-main.js | 6 +- src/electron-preload.js | 10 +-- src/electron-replay-app.js | 91 ++++++++++--------- src/embed.js | 26 ++++-- src/gdrive.js | 38 ++++---- src/loader.js | 163 ++++++++++++++++----------------- src/misc.js | 25 +++--- src/pageentry.js | 50 ++++++----- src/pages.js | 89 +++++++++--------- src/pageutils.js | 21 ++--- src/replay.js | 31 ++++--- src/sorter.js | 14 +-- src/story.js | 34 +++---- src/sw.js | 6 +- src/ui.js | 30 +++---- src/url-resources.js | 28 +++--- sw.js | 12 ++- ui.js | 179 +++++++++++++++++++++---------------- webpack.config.js | 93 +++++++++---------- yarn.lock | 57 +++++------- 29 files changed, 832 insertions(+), 663 deletions(-) create mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..53152e6 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,33 @@ +module.exports = { + "env": { + "browser": true, + "es6": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "no-restricted-globals": [ + 2, + "event", "error" + ], + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "double" + ], + "semi": [ + "error", + "always" + ] + } +}; diff --git a/CHANGES.md b/CHANGES.md index 3bf9458..d18647d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,22 @@ ## CHANGES +v1.4.0 +- Embed: add 'noSandbox' option to not add sandbox to embed iframe +- UI: Double-clicking on page entry causes reload. +- UI: Fix location bar enter not always reloading specified URL +- UI: Fix 'Purge and Reload' to reload current page +- UI: Fix initial load not properly waiting for service worker +- UI: Show 'Loading Archives...' on initial load, until first API response succeeds, instead of 'No Archives' +- Fidelity: Improved fuzzy matching for dynamic sites +- Fidelity: Fix for multipart/form-data replay dropping certain query params +- Fidelity: don't remove spaces in css urls +- Fidelity: Better detection of JSON responses served in response to 'Accept: application/json' but with wrong content-type +- Docs: copy package.json to 'data' to allow access to version in UI, use latest fixed version in Collec +- API: Switch from /wabac/ -> /w/ for replay paths, make path configurable +- Extensibility: Make file chooser, collection list more extensible/stylable (for use with archiveweb.page) +- Lint pass on code base +- Dependencies: wabac 2.7.0, bulma 0.9.2, electron 11.4.3 + v1.3.15 - Fidelity: fix encoding issues with UTF-8 encoded JS/CSS introduced in 1.3.13 (fixed via wabac 2.6.9) - Dependencies: wabac 2.6.9 diff --git a/_config.yml b/_config.yml index 8596dd0..c60f861 100644 --- a/_config.yml +++ b/_config.yml @@ -22,10 +22,6 @@ logo: "/assets/logo.svg" plugins: - jekyll-remote-theme - -version: - - 1.3.12 - #baseUrl: '/' exclude: diff --git a/docs/embedding.md b/docs/embedding.md index 790f400..0d3e00f 100644 --- a/docs/embedding.md +++ b/docs/embedding.md @@ -23,7 +23,7 @@ the following snippet to your HTML page: my-web-archive-embed.html ```html - + ``` @@ -39,7 +39,7 @@ one-line script ./replay/sw.js ```javascript -importScripts("https://cdn.jsdelivr.net/npm/replaywebpage@{{ site.version }}/sw.js"); +importScripts("https://cdn.jsdelivr.net/npm/replaywebpage@{{ site.data.package.version }}/sw.js"); ``` Thus, if the HTML snippet was added to `https://my-site.example.com/path/my-web-archive-embed.html` @@ -71,16 +71,17 @@ The `` tag is a web component and supports a number of addition | `replayBase` | Location of the `sw.js` file, defaults to `./replay/` as mentioned above, but can be overridden. | | `coll` | Internal id for this collection, usually generated automatically. | `config` | Extra per collection config options (such as custom fuzzy matching rules, TODO add more info!) | +| `noSandbox` | (`true` / `false`) if set to true, don't wrap iframe in `sandbox`. Used as extra precaution to avoid escaping iframe, but prevents PDFs from loading in embed archive. Set for archives of known/trusted sites. | ### Versioning Note that the above example uses the paths as, which is a CDN for Javascript packages at a specific version: -- `https://cdn.jsdelivr.net/npm/replaywebpage@{{ site.version }}/ui.js` -- `https://cdn.jsdelivr.net/npm/replaywebpage@{{ site.version }}/sw.js` +- `https://cdn.jsdelivr.net/npm/replaywebpage@{{ site.data.package.version }}/ui.js` +- `https://cdn.jsdelivr.net/npm/replaywebpage@{{ site.data.package.version }}/sw.js` -These URLs point to a specific version of ReplayWeb.page software released on NPM, eg. `{{ site.version }}`, meaning that your replay should stay stable, even if ReplayWeb.page is updated. +These URLs point to a specific version of ReplayWeb.page software released on NPM, eg. `{{ site.data.package.version }}`, meaning that your replay should stay stable, even if ReplayWeb.page is updated. Although ReplayWeb.page strives to remain backwards compatible, this addresses any potential issue of older embeds breaking when the replay system is updated. diff --git a/package.json b/package.json index 2a603e0..ca0aaca 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "replaywebpage", "productName": "ReplayWeb.page", - "version": "1.3.15", + "version": "1.4.0", "description": "Serverless Web Archive Replay", "repository": "https://github.com/webrecorder/replayweb.page", "homepage": "https://replayweb.page/", @@ -9,8 +9,8 @@ "license": "AGPL-3.0-or-later", "dependencies": { "@fortawesome/fontawesome-free": "^5.13.0", - "@webrecorder/wabac": "^2.6.9", - "bulma": "^0.9.0", + "@webrecorder/wabac": "^2.7.0", + "bulma": "^0.9.2", "electron-log": "^4.3.0", "electron-updater": "^4.3.5", "fetch-ndjson": "^1.1.0", @@ -28,7 +28,7 @@ "devDependencies": { "copy-webpack-plugin": "^6.3.0", "css-loader": "^3.5.3", - "electron": "^11.3.0", + "electron": "^11.4.3", "electron-builder": "^22.7.0", "electron-notarize": "^1.0.0", "http-server": "^0.12.3", @@ -62,7 +62,8 @@ "start-jekyll": "yarn run build-docs && bundle exec jekyll serve", "dist": "yarn run build && yarn run pack", "dist-dev": "yarn run build-dev && yarn run pack", - "release": "yarn run build && electron-builder" + "release": "yarn run build && electron-builder", + "lint": "eslint ./src/ webpack.config.js" }, "build": { "afterSign": "build/notarize.js", diff --git a/src/appmain.js b/src/appmain.js index 524497e..06e7c6a 100644 --- a/src/appmain.js +++ b/src/appmain.js @@ -1,11 +1,11 @@ -import { LitElement, html, css } from 'lit-element'; -import { wrapCss, rwpLogo, IS_APP, clickOnSpacebarPress } from './misc'; +import { LitElement, html, css } from "lit-element"; +import { wrapCss, rwpLogo, IS_APP, VERSION, clickOnSpacebarPress } from "./misc"; -import { registerSW } from './pageutils'; +import { registerSW } from "./pageutils"; -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 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"; // =========================================================================== @@ -16,7 +16,7 @@ class ReplayWebApp extends LitElement this.sourceUrl = null; this.collTitle = null; this.showAbout = false; - this.pageParams = {}; + this.pageParams = new URLSearchParams(); this.inited = false; this.navMenuShown = false; @@ -25,6 +25,9 @@ class ReplayWebApp extends LitElement this.pageTitle = ""; this.pageReplay = false; + this.loadInfo = null; + + // eslint-disable-next-line no-undef registerSW(__SW_NAME__); this.safariKeyframes(); @@ -52,7 +55,7 @@ class ReplayWebApp extends LitElement pageTitle: { type: String }, pageReplay: { type: Boolean }, source: { type: String } - } + }; } static get styles() { @@ -168,30 +171,30 @@ class ReplayWebApp extends LitElement   /  ${this.pageReplay ? html`${this.pageTitle}` : this.pageTitle} - ` : ``} + ` : ""} `: html` `} + class="navbar-burger burger ${this.navMenuShown ? "is-active" : ""}" aria-label="main menu" aria-haspopup="true" aria-expanded="${this.navMenuShown}"> ${!this.sourceUrl ? html` -