diff options
| author | Darius Jahandarie <djahandarie@gmail.com> | 2023-08-20 20:31:58 +0900 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-20 20:31:58 +0900 | 
| commit | e0710eaf3399bc699a68afc1e0ad2a512da79953 (patch) | |
| tree | 38acb6298bd4b2227e451960c116a7f46268d249 | |
| parent | 5c65ce5871b50f7bd1e5f52264e0f5bbc8a3749e (diff) | |
| parent | 5e7758459675289283899010fb96dc776e7465be (diff) | |
Merge branch 'master' into create-codeowners
| -rw-r--r-- | .github/workflows/auto-approve-run.yml | 29 | ||||
| -rw-r--r-- | .github/workflows/auto-approve.yml | 16 | ||||
| -rw-r--r-- | ext/js/pages/settings/recommended-permissions-controller.js | 74 | ||||
| -rw-r--r-- | ext/js/pages/welcome-main.js | 4 | ||||
| -rw-r--r-- | ext/welcome.html | 15 | 
5 files changed, 138 insertions, 0 deletions
| 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 new file mode 100644 index 00000000..5dd3831d --- /dev/null +++ b/.github/workflows/auto-approve.yml @@ -0,0 +1,16 @@ +name: Auto-Approve Safe PRs +on: pull_request +jobs: +  auto-approve: +    runs-on: ubuntu-latest +    steps: +      - 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: +          name: pr_num +          path: ./pr_num.txt
\ No newline at end of file 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 <https://www.gnu.org/licenses/>. + */ + +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 @@          </div>      </div> +    <h2>Recommended Permissions (Important)</h2> +    <div class="settings-group"> +        <div class="settings-item"><div class="settings-item-inner"> +            <div class="settings-item-left"> +                <div class="settings-item-label">Enable recommended permissions</div> +                <div class="settings-item-description">This will allow Yomitan to scan text from most sites. Further configuration is available on the <a href="/permissions.html" rel="noopener">Permissions page</a>.</div> +            </div> +            <div class="settings-item-right"> +                <label class="toggle"><input type="checkbox" class="recommended-permissions-toggle" data-origin="<all_urls>"><span class="toggle-body"><span class="toggle-track"></span><span class="toggle-knob"></span></span></label> +            </div> +            <div id="recommended-permissions-error" class="margin-above danger-text" hidden></div> +        </div></div> +    </div> +      <h2>Basic customization</h2>      <div class="settings-group">          <div class="settings-item"><div class="settings-item-inner"> @@ -424,6 +438,7 @@  <script src="/js/pages/settings/generic-setting-controller.js"></script>  <script src="/js/pages/settings/modal.js"></script>  <script src="/js/pages/settings/modal-controller.js"></script> +<script src="/js/pages/settings/recommended-permissions-controller.js"></script>  <script src="/js/pages/settings/scan-inputs-simple-controller.js"></script>  <script src="/js/pages/settings/settings-controller.js"></script>  <script src="/js/pages/settings/settings-display-controller.js"></script> |