From b5752a451e93cc58b281552fc64125f807e32e15 Mon Sep 17 00:00:00 2001 From: Ewan Fox Date: Sun, 20 Aug 2023 05:02:48 +0100 Subject: Add Intuitive Permission Toggle to Welcome Page (#214) --- .../settings/recommended-permissions-controller.js | 74 ++++++++++++++++++++++ ext/js/pages/welcome-main.js | 4 ++ ext/welcome.html | 15 +++++ 3 files changed, 93 insertions(+) create mode 100644 ext/js/pages/settings/recommended-permissions-controller.js diff --git a/ext/js/pages/settings/recommended-permissions-controller.js b/ext/js/pages/settings/recommended-permissions-controller.js new file mode 100644 index 00000000..3d25d5eb --- /dev/null +++ b/ext/js/pages/settings/recommended-permissions-controller.js @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2023 Yomitan Authors + * Copyright (C) 2021-2022 Yomichan Authors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +class RecommendedPermissionsController { + constructor(settingsController) { + this._settingsController = settingsController; + this._originToggleNodes = null; + this._eventListeners = new EventListenerCollection(); + this._errorContainer = null; + } + + async prepare() { + this._originToggleNodes = document.querySelectorAll('.recommended-permissions-toggle'); + this._errorContainer = document.querySelector('#recommended-permissions-error'); + for (const node of this._originToggleNodes) { + node.addEventListener('change', this._onOriginToggleChange.bind(this), false); + } + + this._settingsController.on('permissionsChanged', this._onPermissionsChanged.bind(this)); + await this._updatePermissions(); + } + + // Private + + _onPermissionsChanged({permissions}) { + this._eventListeners.removeAllEventListeners(); + const originsSet = new Set(permissions.origins); + for (const node of this._originToggleNodes) { + node.checked = originsSet.has(node.dataset.origin); + } + } + + _onOriginToggleChange(e) { + const node = e.currentTarget; + const value = node.checked; + node.checked = !value; + + const {origin} = node.dataset; + this._setOriginPermissionEnabled(origin, value); + } + + async _updatePermissions() { + const permissions = await this._settingsController.permissionsUtil.getAllPermissions(); + this._onPermissionsChanged({permissions}); + } + + async _setOriginPermissionEnabled(origin, enabled) { + let added = false; + try { + added = await this._settingsController.permissionsUtil.setPermissionsGranted({origins: [origin]}, enabled); + } catch (e) { + this._errorContainer.hidden = false; + this._errorContainer.textContent = e.message; + } + if (!added) { return false; } + await this._updatePermissions(); + return true; + } +} diff --git a/ext/js/pages/welcome-main.js b/ext/js/pages/welcome-main.js index eb8bd675..521ce2c2 100644 --- a/ext/js/pages/welcome-main.js +++ b/ext/js/pages/welcome-main.js @@ -23,6 +23,7 @@ * ExtensionContentController * GenericSettingController * ModalController + * RecommendedPermissionsController * ScanInputsSimpleController * SettingsController * SettingsDisplayController @@ -77,6 +78,9 @@ async function setupGenericSettingsController(genericSettingController) { const simpleScanningInputController = new ScanInputsSimpleController(settingsController); simpleScanningInputController.prepare(); + const recommendedPermissionsController = new RecommendedPermissionsController(settingsController); + recommendedPermissionsController.prepare(); + await Promise.all(preparePromises); document.documentElement.dataset.loaded = 'true'; diff --git a/ext/welcome.html b/ext/welcome.html index bfa3cefd..8a01d06f 100644 --- a/ext/welcome.html +++ b/ext/welcome.html @@ -98,6 +98,20 @@ +

Recommended Permissions (Important)

+
+
+
+
Enable recommended permissions
+
This will allow Yomitan to scan text from most sites. Further configuration is available on the Permissions page.
+
+
+ +
+ +
+
+

Basic customization

@@ -424,6 +438,7 @@ + -- cgit v1.2.3 From 0a5c9c3cf01b623db650140c761adcd6c7c4e26b Mon Sep 17 00:00:00 2001 From: Darius Jahandarie Date: Sun, 20 Aug 2023 19:19:02 +0900 Subject: Auto-approve safe PRs --- .github/workflows/auto-approve.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/workflows/auto-approve.yml diff --git a/.github/workflows/auto-approve.yml b/.github/workflows/auto-approve.yml new file mode 100644 index 00000000..05523ae3 --- /dev/null +++ b/.github/workflows/auto-approve.yml @@ -0,0 +1,15 @@ +name: Auto-Approve Safe PRs + +on: pull_request_target + +jobs: + auto-approve: + runs-on: ubuntu-latest + environment: themoeway-bot + permissions: + pull-requests: write + if: github.actor == 'djahandarie' + steps: + - uses: hmarr/auto-approve-action@44888193675f29a83e04faf4002fa8c0b537b1e4 # v3.2.1 + with: + github-token: ${{ secrets.THEMOEWAY_BOT_PAT }} -- cgit v1.2.3 From 032599f8c1c344c5592c5562029d98c6ed869c4d Mon Sep 17 00:00:00 2001 From: Darius Jahandarie Date: Sun, 20 Aug 2023 20:27:43 +0900 Subject: Fix auto-approval CI workflow --- .github/workflows/auto-approve-run.yml | 29 +++++++++++++++++++++++++++++ .github/workflows/auto-approve.yml | 19 ++++++++++--------- 2 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/auto-approve-run.yml diff --git a/.github/workflows/auto-approve-run.yml b/.github/workflows/auto-approve-run.yml new file mode 100644 index 00000000..e0605a42 --- /dev/null +++ b/.github/workflows/auto-approve-run.yml @@ -0,0 +1,29 @@ +name: Auto-Approve Safe PRs (workflow-run) +on: + workflow_run: + workflows: [Auto-Approve Safe PRs] + types: + - completed +jobs: + auto-approve-run: + runs-on: ubuntu-latest + environment: themoeway-bot + permissions: + pull-requests: write + if: github.actor == 'djahandarie' + steps: + - name: Download workflow artifact + uses: dawidd6/action-download-artifact@246dbf436b23d7c49e21a7ab8204ca9ecd1fe615 # v2.27.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + workflow: auto-approve.yml + run_id: ${{ github.event.workflow_run.id }} + - name: Read the pr_num file + id: pr_num_reader + uses: juliangruber/read-file-action@02bbba9876a8f870efd4ad64e3b9088d3fb94d4b # v1.1.6 + with: + path: ./pr_num/pr_num.txt + - uses: hmarr/auto-approve-action@44888193675f29a83e04faf4002fa8c0b537b1e4 # v3.2.1 + with: + pull-request-number: ${{ steps.pr_num_reader.outputs.content }} + github-token: ${{ secrets.THEMOEWAY_BOT_PAT }} diff --git a/.github/workflows/auto-approve.yml b/.github/workflows/auto-approve.yml index 05523ae3..5dd3831d 100644 --- a/.github/workflows/auto-approve.yml +++ b/.github/workflows/auto-approve.yml @@ -1,15 +1,16 @@ name: Auto-Approve Safe PRs - -on: pull_request_target - +on: pull_request jobs: auto-approve: runs-on: ubuntu-latest - environment: themoeway-bot - permissions: - pull-requests: write - if: github.actor == 'djahandarie' steps: - - uses: hmarr/auto-approve-action@44888193675f29a83e04faf4002fa8c0b537b1e4 # v3.2.1 + - name: Save the PR number in an artifact + shell: bash + env: + PR_NUM: ${{ github.event.number }} + run: echo $PR_NUM > pr_num.txt + - name: Upload the PR number + uses: actions/upload-artifact@v2 with: - github-token: ${{ secrets.THEMOEWAY_BOT_PAT }} + name: pr_num + path: ./pr_num.txt \ No newline at end of file -- cgit v1.2.3