diff --git a/.gitignore b/.gitignore index 378eac2..48912d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build +node_modules \ No newline at end of file diff --git a/README.md b/README.md index 70469d4..e9f17c9 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,24 @@ A sample plugin for Zotero 7 - * [src-1.0](src-1.0): Overlay plugin for Zotero 6 - * [src-1.1](src-1.1): Overlay plugin for Zotero 6 and bootstrapped plugin for Zotero 7 - * [src-1.2](src-1.2): Bootstrapped plugin for Zotero 6 and 7 - * [src-2.0](src-2.0): Bootstrapped plugin for Zotero 7 +To test, run -To test, run `./make-zips` and install the XPIs in the Zotero Add-ons window, or see [Setting Up a Plugin Development Environment](https://www.zotero.org/support/dev/client_coding/plugin_development#setting_up_a_plugin_development_environment) to run from source. +```bash +npm install +npm run build +``` -The update manifests are set up to demonstrate upgrading across all versions, but normally a plugin would point to a single update manifest that was updated as new versions were available. The update manifests for versions 1.1 and 1.2 are set up to allow upgrading directly to 2.0 from Zotero 7. \ No newline at end of file + and install the XPIs in the Zotero Plugins window, or see [Setting Up a Plugin Development Environment](https://www.zotero.org/support/dev/client_coding/plugin_development#setting_up_a_plugin_development_environment) to run from source. + +The update manifests are set up to demonstrate upgrading across all versions, but normally a plugin would point to a single update manifest that was updated as new versions were available. The update manifests for versions 1.1 and 1.2 are set up to allow upgrading directly to 2.0 from Zotero 7. + +
+Archived Old Versions + + * [src-1.0](old/src-1.0): Overlay plugin for Zotero 6 + * [src-1.1](old/src-1.1): Overlay plugin for Zotero 6 and bootstrapped plugin for Zotero 7 + * [src-1.2](old/src-1.2): Bootstrapped plugin for Zotero 6 and 7 + + To test, run `./old/make-zips` + +
diff --git a/make-zips b/old/make-zips similarity index 63% rename from make-zips rename to old/make-zips index f804f5f..6798ce0 100755 --- a/make-zips +++ b/old/make-zips @@ -4,23 +4,28 @@ set -euo pipefail rm -rf build mkdir build +cd old + cd src-1.0 -zip -r ../build/make-it-red-1.0.xpi * +zip -r ../../build/make-it-red-1.0.xpi * cd ../src-1.1 -zip -r ../build/make-it-red-1.1.xpi * +zip -r ../../build/make-it-red-1.1.xpi * cd ../src-1.2 -zip -r ../build/make-it-red-1.2.xpi * -cd ../src-2.0 -zip -r ../build/make-it-red-2.0.xpi * -cd ../build +zip -r ../../build/make-it-red-1.2.xpi * + + +cd ../../ +node ./scripts/build.js + +cd build -jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-1.1.xpi | cut -d' ' -f1`\"" ../updates-1.0.json.tmpl > updates-1.0.json +jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-1.1.xpi | cut -d' ' -f1`\"" ../old/updates-1.0.json.tmpl > updates-1.0.json cp updates-1.0.json update.rdf -jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-1.2.xpi | cut -d' ' -f1`\"" ../updates-1.1.json.tmpl | \ +jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-1.2.xpi | cut -d' ' -f1`\"" ../old/updates-1.1.json.tmpl | \ jq ".addons[\"make-it-red@example.com\"].updates[1].update_hash = \"sha256:`shasum -a 256 make-it-red-2.0.xpi | cut -d' ' -f1`\"" > updates-1.1.json -jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-1.2.xpi | cut -d' ' -f1`\"" ../updates-1.2.json.tmpl | \ +jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-1.2.xpi | cut -d' ' -f1`\"" ../old/updates-1.2.json.tmpl | \ jq ".addons[\"make-it-red@example.com\"].updates[1].update_hash = \"sha256:`shasum -a 256 make-it-red-2.0.xpi | cut -d' ' -f1`\"" > updates-1.2.json -jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-2.0.xpi | cut -d' ' -f1`\"" ../updates-2.0.json.tmpl > updates-2.0.json +# jq ".addons[\"make-it-red@example.com\"].updates[0].update_hash = \"sha256:`shasum -a 256 make-it-red-2.0.xpi | cut -d' ' -f1`\"" ../old/updates-2.0.json.tmpl > updates-2.0.json diff --git a/src-1.0/chrome.manifest b/old/src-1.0/chrome.manifest similarity index 100% rename from src-1.0/chrome.manifest rename to old/src-1.0/chrome.manifest diff --git a/src-1.0/chrome/content/make-it-red.js b/old/src-1.0/chrome/content/make-it-red.js similarity index 100% rename from src-1.0/chrome/content/make-it-red.js rename to old/src-1.0/chrome/content/make-it-red.js diff --git a/src-1.0/chrome/content/overlay.js b/old/src-1.0/chrome/content/overlay.js similarity index 100% rename from src-1.0/chrome/content/overlay.js rename to old/src-1.0/chrome/content/overlay.js diff --git a/src-1.0/chrome/content/overlay.xul b/old/src-1.0/chrome/content/overlay.xul similarity index 100% rename from src-1.0/chrome/content/overlay.xul rename to old/src-1.0/chrome/content/overlay.xul diff --git a/src-1.0/chrome/locale/en-US/make-it-red.properties b/old/src-1.0/chrome/locale/en-US/make-it-red.properties similarity index 100% rename from src-1.0/chrome/locale/en-US/make-it-red.properties rename to old/src-1.0/chrome/locale/en-US/make-it-red.properties diff --git a/src-1.0/chrome/skin/overlay.css b/old/src-1.0/chrome/skin/overlay.css similarity index 100% rename from src-1.0/chrome/skin/overlay.css rename to old/src-1.0/chrome/skin/overlay.css diff --git a/src-1.0/defaults/preferences/prefs.js b/old/src-1.0/defaults/preferences/prefs.js similarity index 100% rename from src-1.0/defaults/preferences/prefs.js rename to old/src-1.0/defaults/preferences/prefs.js diff --git a/src-1.0/install.rdf b/old/src-1.0/install.rdf similarity index 100% rename from src-1.0/install.rdf rename to old/src-1.0/install.rdf diff --git a/src-1.1/bootstrap.js b/old/src-1.1/bootstrap.js similarity index 100% rename from src-1.1/bootstrap.js rename to old/src-1.1/bootstrap.js diff --git a/src-1.1/chrome.manifest b/old/src-1.1/chrome.manifest similarity index 100% rename from src-1.1/chrome.manifest rename to old/src-1.1/chrome.manifest diff --git a/src-1.1/chrome/content/make-it-red.js b/old/src-1.1/chrome/content/make-it-red.js similarity index 100% rename from src-1.1/chrome/content/make-it-red.js rename to old/src-1.1/chrome/content/make-it-red.js diff --git a/src-1.1/chrome/content/overlay.js b/old/src-1.1/chrome/content/overlay.js similarity index 100% rename from src-1.1/chrome/content/overlay.js rename to old/src-1.1/chrome/content/overlay.js diff --git a/src-1.1/chrome/content/overlay.xul b/old/src-1.1/chrome/content/overlay.xul similarity index 100% rename from src-1.1/chrome/content/overlay.xul rename to old/src-1.1/chrome/content/overlay.xul diff --git a/src-1.1/chrome/locale/en-US/make-it-red.properties b/old/src-1.1/chrome/locale/en-US/make-it-red.properties similarity index 100% rename from src-1.1/chrome/locale/en-US/make-it-red.properties rename to old/src-1.1/chrome/locale/en-US/make-it-red.properties diff --git a/src-1.1/chrome/skin/overlay.css b/old/src-1.1/chrome/skin/overlay.css similarity index 100% rename from src-1.1/chrome/skin/overlay.css rename to old/src-1.1/chrome/skin/overlay.css diff --git a/src-1.1/defaults/preferences/prefs.js b/old/src-1.1/defaults/preferences/prefs.js similarity index 100% rename from src-1.1/defaults/preferences/prefs.js rename to old/src-1.1/defaults/preferences/prefs.js diff --git a/src-1.1/install.rdf b/old/src-1.1/install.rdf similarity index 100% rename from src-1.1/install.rdf rename to old/src-1.1/install.rdf diff --git a/src-1.1/locale/en-US/make-it-red.ftl b/old/src-1.1/locale/en-US/make-it-red.ftl similarity index 100% rename from src-1.1/locale/en-US/make-it-red.ftl rename to old/src-1.1/locale/en-US/make-it-red.ftl diff --git a/src-1.1/manifest.json b/old/src-1.1/manifest.json similarity index 100% rename from src-1.1/manifest.json rename to old/src-1.1/manifest.json diff --git a/src-1.1/style.css b/old/src-1.1/style.css similarity index 100% rename from src-1.1/style.css rename to old/src-1.1/style.css diff --git a/src-1.2/bootstrap.js b/old/src-1.2/bootstrap.js similarity index 100% rename from src-1.2/bootstrap.js rename to old/src-1.2/bootstrap.js diff --git a/src-1.2/chrome.manifest b/old/src-1.2/chrome.manifest similarity index 100% rename from src-1.2/chrome.manifest rename to old/src-1.2/chrome.manifest diff --git a/src-1.2/chrome/locale/en-US/make-it-red.properties b/old/src-1.2/chrome/locale/en-US/make-it-red.properties similarity index 100% rename from src-1.2/chrome/locale/en-US/make-it-red.properties rename to old/src-1.2/chrome/locale/en-US/make-it-red.properties diff --git a/src-1.2/install.rdf b/old/src-1.2/install.rdf similarity index 100% rename from src-1.2/install.rdf rename to old/src-1.2/install.rdf diff --git a/src-1.2/locale/en-US/make-it-red.ftl b/old/src-1.2/locale/en-US/make-it-red.ftl similarity index 100% rename from src-1.2/locale/en-US/make-it-red.ftl rename to old/src-1.2/locale/en-US/make-it-red.ftl diff --git a/src-1.2/make-it-red.js b/old/src-1.2/make-it-red.js similarity index 100% rename from src-1.2/make-it-red.js rename to old/src-1.2/make-it-red.js diff --git a/src-1.2/manifest.json b/old/src-1.2/manifest.json similarity index 100% rename from src-1.2/manifest.json rename to old/src-1.2/manifest.json diff --git a/src-1.2/prefs.js b/old/src-1.2/prefs.js similarity index 100% rename from src-1.2/prefs.js rename to old/src-1.2/prefs.js diff --git a/src-1.2/style.css b/old/src-1.2/style.css similarity index 100% rename from src-1.2/style.css rename to old/src-1.2/style.css diff --git a/updates-1.0.json.tmpl b/old/updates-1.0.json.tmpl similarity index 100% rename from updates-1.0.json.tmpl rename to old/updates-1.0.json.tmpl diff --git a/updates-1.1.json.tmpl b/old/updates-1.1.json.tmpl similarity index 100% rename from updates-1.1.json.tmpl rename to old/updates-1.1.json.tmpl diff --git a/updates-1.2.json.tmpl b/old/updates-1.2.json.tmpl similarity index 100% rename from updates-1.2.json.tmpl rename to old/updates-1.2.json.tmpl diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..2ba8405 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,139 @@ +{ + "name": "make-it-red", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "make-it-red", + "version": "2.0.0", + "license": "AGPL-3.0-or-later", + "devDependencies": { + "crypto": "^1.0.1", + "zip-dir": "^2.0.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in.", + "dev": true + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/zip-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz", + "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==", + "dev": true, + "dependencies": { + "async": "^3.2.0", + "jszip": "^3.2.2" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..62df5a7 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "make-it-red", + "version": "2.0.0", + "description": "A sample plugin for Zotero 7", + "main": "index.js", + "scripts": { + "build": "node scripts/build.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "devDependencies": { + "crypto": "^1.0.1", + "zip-dir": "^2.0.0" + } +} diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 0000000..b492274 --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,57 @@ +const fs = require('fs').promises; +const path = require('path'); +const crypto = require('crypto'); +const zipDir = require('zip-dir'); + +async function main() { + const sourceDir = 'src'; + const buildDir = 'build'; + const xpiFile = 'make-it-red-2.0.xpi'; + const updateJSONFile = 'updates-2.0.json'; + await build(sourceDir, buildDir, xpiFile); + const hash = await generateHash(path.join(buildDir, xpiFile), "sha256"); + await writeUpdateJSON(path.join(buildDir, updateJSONFile), hash); +} + +async function build(sourceDir, buildDir, filename) { + try { + await fs.access(buildDir); + } catch (e) { + await fs.mkdir(buildDir); + } + + await zipDir(sourceDir, { saveTo: path.join(buildDir, filename) }); +} + +async function generateHash(filePath, algorithm) { + const data = await fs.readFile(filePath); + const hash = crypto.createHash(algorithm).update(data).digest("hex"); + return `${algorithm}:${hash}`; +} + +async function writeUpdateJSON(filePath, hash) { + const updateJSON = { + "addons": { + "make-it-red@example.com": { + "updates": [ + { + "version": "2.0", + "update_link": "https://zotero-download.s3.amazonaws.com/tmp/make-it-red/make-it-red-2.0.xpi", + "update_hash": hash, + "applications": { + "zotero": { + "strict_min_version": "6.999" + } + } + } + ] + } + } + } + await fs.writeFile( + filePath, + JSON.stringify(updateJSON, null, 2) + ); +} + +main(); diff --git a/src-2.0/bootstrap.js b/src/bootstrap.js similarity index 100% rename from src-2.0/bootstrap.js rename to src/bootstrap.js diff --git a/src-2.0/locale/en-US/make-it-red.ftl b/src/locale/en-US/make-it-red.ftl similarity index 100% rename from src-2.0/locale/en-US/make-it-red.ftl rename to src/locale/en-US/make-it-red.ftl diff --git a/src-2.0/make-it-red.js b/src/make-it-red.js similarity index 100% rename from src-2.0/make-it-red.js rename to src/make-it-red.js diff --git a/src-2.0/manifest.json b/src/manifest.json similarity index 100% rename from src-2.0/manifest.json rename to src/manifest.json diff --git a/src-2.0/prefs.js b/src/prefs.js similarity index 100% rename from src-2.0/prefs.js rename to src/prefs.js diff --git a/src-2.0/style.css b/src/style.css similarity index 100% rename from src-2.0/style.css rename to src/style.css diff --git a/updates-2.0.json.tmpl b/updates-2.0.json.tmpl deleted file mode 100644 index cc1ffaf..0000000 --- a/updates-2.0.json.tmpl +++ /dev/null @@ -1,18 +0,0 @@ -{ - "addons": { - "make-it-red@example.com": { - "updates": [ - { - "version": "2.0", - "update_link": "https://zotero-download.s3.amazonaws.com/tmp/make-it-red/make-it-red-2.0.xpi", - "update_hash": "sha256:e5ac442c4a3cffc4ffec8b764673b7036d5984690978faa7df66d78b030761c2", - "applications": { - "zotero": { - "strict_min_version": "6.999" - } - } - } - ] - } - } -}