From 1fe437c82ccc1d2d4836e23c6ffa8b36475c3401 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Thu, 22 May 2025 14:33:50 -0400 Subject: [PATCH 1/5] Adjust icon & checkbox size & spacing - Closer in line with Chrome's defaults --- src/sidepanel.ts | 6 +++--- static/sidepanel.html | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/sidepanel.ts b/src/sidepanel.ts index 66cecc9..2f8ce36 100644 --- a/src/sidepanel.ts +++ b/src/sidepanel.ts @@ -101,7 +101,7 @@ class ArgoViewer extends LitElement { font-size: 12px; font-weight: 500; color: #6b6b6b; - margin-bottom: 4px; + margin-bottom: 6px; } .status-content { @@ -909,7 +909,7 @@ class ArgoViewer extends LitElement {
-
+
{ @@ -929,7 +929,7 @@ class ArgoViewer extends LitElement { >
-
+
download diff --git a/static/sidepanel.html b/static/sidepanel.html index 26abcea..d704aa8 100644 --- a/static/sidepanel.html +++ b/static/sidepanel.html @@ -20,6 +20,9 @@ --md-sys-color-surface-container: white; --md-elevated-card-container-color: white; --md-icon-size: 20px; + --md-icon-button-icon-size: 20px; + --md-checkbox-container-size: 16px; + --md-checkbox-icon-size: 16px; --md-sys-color-primary: rgb(220, 101, 3); --md-sys-color-surface-tint: rgb(154 70 0); From 76ad15d83d4cf6aea5bbf5afbf1dff0e2624805c Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Fri, 23 May 2025 14:55:48 -0400 Subject: [PATCH 2/5] Name and extension icon updates --- .github/workflows/buildext.yaml | 6 +++--- package.json | 8 ++++---- src/ext/manifest.json | 6 +++--- src/sw/api.ts | 2 +- src/sw/keystore.ts | 2 +- src/ui/app.ts | 4 ++-- src/ui/recordembed.ts | 2 +- src/ui/upload.ts | 2 +- static/icon-dev.png | Bin 2977 -> 1061 bytes static/icon.png | Bin 2986 -> 535 bytes webpack.config.js | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/buildext.yaml b/.github/workflows/buildext.yaml index b3670af..46d9b3f 100644 --- a/.github/workflows/buildext.yaml +++ b/.github/workflows/buildext.yaml @@ -38,12 +38,12 @@ jobs: - name: Create ZIP for Extension run: | cd dist/ext - zip ../../ArchiveWeb.page-${{ steps.package-version.outputs.current-version }}-extension.zip -r ./ + zip ../../Packrat-${{ steps.package-version.outputs.current-version }}-extension.zip -r ./ - name: Upload Extension ZIP to GitHub uses: softprops/action-gh-release@v1 with: - files: ArchiveWeb.page-${{ steps.package-version.outputs.current-version }}-extension.zip + files: Packrat-${{ steps.package-version.outputs.current-version }}-extension.zip tag_name: v${{ steps.package-version.outputs.current-version }} fail_on_unmatched_files: true draft: true @@ -51,7 +51,7 @@ jobs: - name: Upload Extension ZIP to Chrome Web Store uses: mnao305/chrome-extension-upload@3.0.0 with: - file-path: ArchiveWeb.page-${{ steps.package-version.outputs.current-version }}-extension.zip + file-path: Packrat-${{ steps.package-version.outputs.current-version }}-extension.zip extension-id: fpeoodllldobpkbkabpblcfaogecpndd client-id: ${{ secrets.CHROME_WEBSTORE_CLIENT_ID }} client-secret: ${{ secrets.CHROME_WEBSTORE_CLIENT_SECRET }} diff --git a/package.json b/package.json index c80b57a..53380cb 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { - "name": "@webrecorder/archivewebpage", - "productName": "ArchiveWeb.page", + "name": "@opfn/packrat", + "productName": "Packrat", "version": "0.15.0", "main": "index.js", - "description": "Create Web Archives directly in your browser", + "description": "Create an archive of every page you browse", "repository": { "type": "git", "url": "git+https://github.com/webrecorder/archiveweb.page.git" }, - "author": "Webrecorder Software", + "author": "OPFN", "license": "AGPL-3.0-or-later", "dependencies": { "@fortawesome/fontawesome-free": "^5.13.0", diff --git a/src/ext/manifest.json b/src/ext/manifest.json index 35a34ff..9d254f9 100644 --- a/src/ext/manifest.json +++ b/src/ext/manifest.json @@ -1,6 +1,6 @@ { - "name": "Webrecorder ArchiveWeb.page", - "description": "Create high-fidelity web archives directly in your browser", + "name": "Packrat", + "description": "Save a copy of every webpage you browse and share them with others!", "version": "$VERSION", "permissions": [ "debugger", @@ -24,7 +24,7 @@ "default_icon": { "32": "$ICON" }, - "default_title": "Webrecorder ArchiveWeb.page" + "default_title": "Packrat" }, "side_panel": { "default_path": "sidepanel.html" diff --git a/src/sw/api.ts b/src/sw/api.ts index 5745934..9226cf4 100644 --- a/src/sw/api.ts +++ b/src/sw/api.ts @@ -11,7 +11,7 @@ type RouteMatch = Record; declare let self: ServiceWorkerGlobalScope; -const DEFAULT_SOFTWARE_STRING = `Webrecorder ArchiveWeb.page ${__AWP_VERSION__}, using warcio.js ${__WARCIO_VERSION__}`; +const DEFAULT_SOFTWARE_STRING = `Packrat ${__AWP_VERSION__}, using warcio.js ${__WARCIO_VERSION__}`; // =========================================================================== class ExtAPI extends API { diff --git a/src/sw/keystore.ts b/src/sw/keystore.ts index a02206f..7262bb8 100644 --- a/src/sw/keystore.ts +++ b/src/sw/keystore.ts @@ -107,7 +107,7 @@ export class Signer { constructor(softwareString: string, opts: { cacheSig?: boolean } = {}) { this._store = new KeyStore(); - this.softwareString = softwareString || "ArchiveWeb.page"; + this.softwareString = softwareString || "Packrat"; this.cacheSig = opts.cacheSig || false; } diff --git a/src/ui/app.ts b/src/ui/app.ts index 05095a0..d2455a0 100644 --- a/src/ui/app.ts +++ b/src/ui/app.ts @@ -19,8 +19,8 @@ import "./coll-index"; import { BtrixClient } from "./upload"; import wrRec from "../assets/icons/recLogo.svg"; -import awpLogo from "../assets/brand/archivewebpage-icon-color.svg"; -import awpBrandLockupColor from "../assets/brand/archivewebpage-lockup-color.svg"; +// import awpLogo from "../assets/brand/archivewebpage-icon-color.svg"; +// import awpBrandLockupColor from "../assets/brand/archivewebpage-lockup-color.svg"; import prettyBytes from "pretty-bytes"; import { diff --git a/src/ui/recordembed.ts b/src/ui/recordembed.ts index 1b61917..1d26eb0 100644 --- a/src/ui/recordembed.ts +++ b/src/ui/recordembed.ts @@ -33,7 +33,7 @@ export class RecordEmbed extends Embed { this.replaybase = "./replay/"; this.replayfile = "record.html"; this.mainElementName = "archive-web-page-app"; - this.appName = "Embedded ArchiveWeb.page"; + this.appName = "Embedded Packrat"; this.embed = "default"; this.noWebWorker = true; diff --git a/src/ui/upload.ts b/src/ui/upload.ts index 023d15c..d0c47de 100644 --- a/src/ui/upload.ts +++ b/src/ui/upload.ts @@ -394,7 +394,7 @@ class BtrixUploader extends LitElement { const now = new Date().toLocaleString(); urlObj.searchParams.set( "notes", - `Uploaded by ArchiveWeb.page ${VERSION} at ${now}`, + `Uploaded by Packrat ${VERSION} at ${now}`, ); const url = urlObj.href; diff --git a/static/icon-dev.png b/static/icon-dev.png index d701bf3800bdb5edb1eb87c154fa03277771ab9c..80c63ac91cc2cd75417efb57c9488066794832ce 100644 GIT binary patch delta 1051 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 diff --git a/static/icon.png b/static/icon.png index 301ae4c18ca81d1d5479e83a2963e1a0606452d2..118c83c93cee7cccd80db443796da28183ed0db4 100644 GIT binary patch delta 521 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 diff --git a/webpack.config.js b/webpack.config.js index 5c52dad..d88fe8a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -13,7 +13,7 @@ const AWP_PACKAGE = require("./package.json"); const RWP_PACKAGE = require("./node_modules/replaywebpage/package.json"); const WARCIO_PACKAGE = require("./node_modules/warcio/package.json"); -const BANNER = `[name].js is part of the Webrecorder ArchiveWeb.page (https://archiveweb.page) Copyright (C) 2020-${new Date().getFullYear()}, Webrecorder Software. Licensed under the Affero General Public License v3.`; +const BANNER = `[name].js is part of Packrat Copyright (C) 2025-${new Date().getFullYear()}, OPFN. Licensed under the Affero General Public License v3.`; const manifest = require("./src/ext/manifest.json"); From fedbf24967e6ca921ae4b0df4f89e2111c8f6b54 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Sat, 24 May 2025 01:52:14 -0400 Subject: [PATCH 3/5] Update one remaining name --- src/sw/downloader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sw/downloader.ts b/src/sw/downloader.ts index 6fbbb28..8ff7839 100644 --- a/src/sw/downloader.ts +++ b/src/sw/downloader.ts @@ -267,7 +267,7 @@ class Downloader { this.alreadyDecoded = !coll.config["decode"] && !coll.config["loadUrl"]; - this.softwareString = softwareString || "ArchiveWeb.page"; + this.softwareString = softwareString || "Packrat"; this.uuidNamespace = uuidNamespace || DEFAULT_UUID_NAMESPACE; From 763545c4d3d982b93d66e97f281deac30e964e58 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Mon, 26 May 2025 14:00:31 -0400 Subject: [PATCH 4/5] Delete replayIcon.png --- static/replayIcon.png | Bin 31076 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 static/replayIcon.png diff --git a/static/replayIcon.png b/static/replayIcon.png deleted file mode 100644 index cc565c8c9f17bc78b1c87e537b67a47474fd9bad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31076 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 From 6526bac08ce9957ad14191bcf0dabac0beb5e6c9 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Mon, 26 May 2025 16:01:11 -0400 Subject: [PATCH 5/5] Update readme & repo branding --- README.md | 80 +++---------------- .../archivewebpage-lockup-color-dynamic.svg | 1 - .../brand/archivewebpage-lockup-color.svg | 1 - .../brand/packrat-lockup-color-dynamic.svg | 1 + src/assets/brand/packrat-lockup-color.svg | 1 + 5 files changed, 14 insertions(+), 70 deletions(-) delete mode 100644 src/assets/brand/archivewebpage-lockup-color-dynamic.svg delete mode 100644 src/assets/brand/archivewebpage-lockup-color.svg create mode 100644 src/assets/brand/packrat-lockup-color-dynamic.svg create mode 100644 src/assets/brand/packrat-lockup-color.svg diff --git a/README.md b/README.md index 925f512..aeace25 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,19 @@

- ArchiveWebpage + Packrat by OPFN

-ArchiveWeb.page is a JavaScript based application for interactive, high-fidelity web archiving that runs directly in the browser. The system can be used as a Chrome/Chromium based browser extension and also as a standalone Electron app. +Packrat is an browser extension for Chromium-based browsers that lets you create high-fidelity web archives out of your browsing history. -The system creates, stores, and replays high-fidelity web archives stored directly in the browser's storage (via IndexedDB). - -For more detailed info on how to use the extension and standalone app, see the [ArchiveWeb.page User Guide](https://archiveweb.page/guide). - -The browser extension is available on the [Chrome Web Store](https://chrome.google.com/webstore/detail/webrecorder/fpeoodllldobpkbkabpblcfaogecpndd). - -Downloads for the desktop are are available on the [GitHub Releases page](https://github.com/webrecorder/archiveweb.page/releases). +Packrat is available on the Chrome Web Store. ## Architecture -The extension makes use of the Chrome debugging protocol to capture and save network traffic, and extends the [ReplayWeb.page](https://github.com/webrecorder/replayweb.page) UI and the [wabac.js](https://github.com/webrecorder/wabac.js) service worker system for replay and storage. +Packrat is based on Webrecorder's [ArchiveWeb.page](https://webrecorder.net/archivewebpage) which uses the Chrome debugging protocol to capture and save network traffic. Like ArchiveWeb.page, Packrat also uses Webrecorder's [ReplayWeb.page](https://webrecorder.net/replaywebpage) viewer to replay archived content. ## Development -The Chromium extension and Electron app are built from the same source code for ease of development. - ### Prerequisites - Node >=12 @@ -31,26 +23,19 @@ The Chromium extension and Electron app are built from the same source code for To build the extension or Electron app locally for development, do the following: -1. Clone this repo: - ```sh - git clone https://github.com/webrecorder/archiveweb.page.git - ``` -2. Change the working directory: - ```sh - cd archiveweb.page - ``` -3. Install dependencies: +1. Clone this repo and `cd` to the working directory +2. Install dependencies: ```sh yarn install ``` -4. Make development build: +3. Create a development build: ```sh yarn build-dev ``` + OR + Run `yarn start-ext` to update the build automatically as you make changes -The development build can now be used to develop the extension or Electron app. - -### Developing the Chromium extension +### Adding the development extension to Chrome To install the extension locally, load the development build as an unpacked extension: @@ -58,46 +43,5 @@ To install the extension locally, load the development build as an unpacked exte 2. Choose 'Load Unpacked Extension' and point to the `./dist/ext` directory in your local copy of this repo. -3. Click the extension icon to show the extension popup, start archiving, etc... - -#### Update extension on code changes - -To watch source code files and recompile the development build on change, run: - -```sh -yarn run start-ext -``` - -Now, saving changes to source will automatically rebuild the `dist/ext` directory. - -After making changes, the extension still needs to be reloaded in the browser. - -1. From the Chrome extensions page, click the reload button to load the latest version. - -2. Click the extension icon to show the extension popup, start recording, etc... The dev build of the extension will be a different color from the production version. - -### Developing the Electron app - -To start the Electron app using development build: - -```sh -yarn run start-electron -``` - -The Electron app will open recording in a new window. It is is designed to support Flash, better support for IPFS sharing. - -#### Update app on change - -Currently, the dev workflow for the Electron app does not support automatically rebuilding on file changes. - -After making changes, rerun `yarn run build-dev` and `yarn run start-electron` to view your changes in the app. - -## Standalone Build - -To create a platform-specific binary, run: - -```sh -yarn run pack -``` - -The standalone app will then be available in the `./dist/` directory. +> [!NOTE] +> You'll still have to refresh the extension from chrome://extensions as you make changes, even if you're using live reloading. diff --git a/src/assets/brand/archivewebpage-lockup-color-dynamic.svg b/src/assets/brand/archivewebpage-lockup-color-dynamic.svg deleted file mode 100644 index c287f42..0000000 --- a/src/assets/brand/archivewebpage-lockup-color-dynamic.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/assets/brand/archivewebpage-lockup-color.svg b/src/assets/brand/archivewebpage-lockup-color.svg deleted file mode 100644 index 2a2cf74..0000000 --- a/src/assets/brand/archivewebpage-lockup-color.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/brand/packrat-lockup-color-dynamic.svg b/src/assets/brand/packrat-lockup-color-dynamic.svg new file mode 100644 index 0000000..db99ab1 --- /dev/null +++ b/src/assets/brand/packrat-lockup-color-dynamic.svg @@ -0,0 +1 @@ + diff --git a/src/assets/brand/packrat-lockup-color.svg b/src/assets/brand/packrat-lockup-color.svg new file mode 100644 index 0000000..7b120bc --- /dev/null +++ b/src/assets/brand/packrat-lockup-color.svg @@ -0,0 +1 @@ +