From d8a5d19576597ac6c3135cb0127e7c717b860eb1 Mon Sep 17 00:00:00 2001 From: Nymbo <129332110+Nymbo@users.noreply.github.com> Date: Tue, 12 May 2026 17:19:18 -0400 Subject: [PATCH] Address submission release checks --- .github/workflows/release.yml | 52 +++++++++++++++++++++++++++++++++++ eslint.config.mts | 2 ++ manifest.json | 4 +-- package-lock.json | 4 +-- package.json | 2 +- src/main.ts | 32 +++++++++++---------- versions.json | 3 +- 7 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0c83f14 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,52 @@ +name: Release + +on: + push: + tags: + - "*.*.*" + +permissions: + contents: write + id-token: write + attestations: write + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci --force + + - name: Build + run: npm run build + + - name: Lint + run: npm run lint + + - name: Generate artifact attestations + uses: actions/attest@v4 + with: + subject-path: | + main.js + manifest.json + styles.css + + - name: Create GitHub release + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create "${GITHUB_REF_NAME}" main.js manifest.json styles.css \ + --repo "${GITHUB_REPOSITORY}" \ + --title "${GITHUB_REF_NAME}" \ + --notes "Release ${GITHUB_REF_NAME}" \ + --verify-tag diff --git a/eslint.config.mts b/eslint.config.mts index c340ece..6379e73 100644 --- a/eslint.config.mts +++ b/eslint.config.mts @@ -8,6 +8,8 @@ export default tseslint.config( languageOptions: { globals: { ...globals.browser, + activeDocument: "readonly", + activeWindow: "readonly", }, parserOptions: { projectService: { diff --git a/manifest.json b/manifest.json index 2bc0864..543284f 100644 --- a/manifest.json +++ b/manifest.json @@ -1,8 +1,8 @@ { "id": "copy-highlighter", "name": "Copy Highlighter", - "version": "0.2.1", - "minAppVersion": "0.16.0", + "version": "0.2.2", + "minAppVersion": "1.0.0", "description": "Highlights copied text.", "author": "Nymbo", "authorUrl": "https://github.com/Nymbo", diff --git a/package-lock.json b/package-lock.json index 1e5a3ce..cc890ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "copy-highlighter", - "version": "0.2.1", + "version": "0.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "copy-highlighter", - "version": "0.2.1", + "version": "0.2.2", "license": "MIT", "dependencies": { "@codemirror/state": "^6.6.0", diff --git a/package.json b/package.json index b3a95f2..d3cd869 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "copy-highlighter", - "version": "0.2.1", + "version": "0.2.2", "description": "Highlights copied text.", "main": "main.js", "type": "module", diff --git a/src/main.ts b/src/main.ts index f66216b..e6c2562 100644 --- a/src/main.ts +++ b/src/main.ts @@ -224,35 +224,35 @@ export default class CopyHighlighterPlugin extends Plugin { this.registerEditorExtension(copyFlashExtension(this.highlightSession)); - this.registerDomEvent(document, "keydown", (event) => { + this.registerDomEvent(activeDocument, "keydown", (event) => { this.highlightSession.handleKeyDown(event); }, true); - this.registerDomEvent(document, "keyup", (event) => { + this.registerDomEvent(activeDocument, "keyup", (event) => { this.highlightSession.handleKeyUp(event); }, true); - this.registerDomEvent(window, "blur", () => { + this.registerDomEvent(activeWindow, "blur", () => { this.highlightSession.resetKeys(); }); - this.registerDomEvent(document, "visibilitychange", () => { - if (document.visibilityState === "hidden") { + this.registerDomEvent(activeDocument, "visibilitychange", () => { + if (activeDocument.visibilityState === "hidden") { this.highlightSession.resetKeys(); } }); // CodeMirror handles editor selections. This fallback covers copied text in // rendered Markdown or other Obsidian-owned DOM content. - this.registerDomEvent(document, "copy", (event) => { + this.registerDomEvent(activeDocument, "copy", (event) => { this.flashDomSelection(event); }, true); } onunload() { this.clearDomHighlights(); - document.body.style.removeProperty("--copy-highlighter-editor-background"); - document.body.style.removeProperty("--copy-highlighter-border-radius"); + activeDocument.body.style.removeProperty("--copy-highlighter-editor-background"); + activeDocument.body.style.removeProperty("--copy-highlighter-border-radius"); } private flashDomSelection(event: ClipboardEvent) { @@ -270,7 +270,7 @@ export default class CopyHighlighterPlugin extends Plugin { return; } - const selection = window.getSelection(); + const selection = target.ownerDocument.getSelection(); if (selection === null || selection.isCollapsed || selection.rangeCount === 0) { return; @@ -299,11 +299,13 @@ export default class CopyHighlighterPlugin extends Plugin { .slice(0, MAX_DOM_FLASH_RECTS); for (const rect of rects) { - const overlay = document.createElement("div"); + const ownerDocument = range.commonAncestorContainer.ownerDocument ?? activeDocument; + const ownerWindow = ownerDocument.defaultView ?? activeWindow; + const overlay = ownerDocument.createElement("div"); overlay.className = "copy-highlighter-dom-highlight"; - overlay.style.left = `${rect.left + window.scrollX}px`; - overlay.style.top = `${rect.top + window.scrollY}px`; + overlay.style.left = `${rect.left + ownerWindow.scrollX}px`; + overlay.style.top = `${rect.top + ownerWindow.scrollY}px`; overlay.style.width = `${rect.width}px`; overlay.style.height = `${rect.height}px`; overlay.style.backgroundColor = hexToRgba( @@ -312,7 +314,7 @@ export default class CopyHighlighterPlugin extends Plugin { ); overlay.style.borderRadius = `${this.settings.borderRadius}px`; - document.body.appendChild(overlay); + ownerDocument.body.appendChild(overlay); this.domHighlights.add(overlay); } } @@ -340,11 +342,11 @@ export default class CopyHighlighterPlugin extends Plugin { } private applyCssVariables() { - document.body.style.setProperty( + activeDocument.body.style.setProperty( "--copy-highlighter-editor-background", hexToRgba(this.settings.highlightColor, this.settings.editorOpacity) ); - document.body.style.setProperty( + activeDocument.body.style.setProperty( "--copy-highlighter-border-radius", `${this.settings.borderRadius}px` ); diff --git a/versions.json b/versions.json index ec1673c..236b865 100644 --- a/versions.json +++ b/versions.json @@ -4,5 +4,6 @@ "0.1.2": "0.16.0", "0.1.3": "0.16.0", "0.2.0": "0.16.0", - "0.2.1": "0.16.0" + "0.2.1": "1.0.0", + "0.2.2": "1.0.0" }