-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add contributions to acknowledgement page (#217)
(cherry picked from commit b1b7e26) # Conflicts: # .github/workflows/pr-stats.yml
- Loading branch information
1 parent
4606a83
commit 86b7be5
Showing
10 changed files
with
602 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,7 +24,7 @@ jobs: | |
reviewer-stats | ||
path: ~/reviews | ||
- name: Copy stats | ||
run: ./make_help_scripts/add_review_stats | ||
run: ./make_help_scripts/add_pr_stats | ||
- uses: pre-commit/[email protected] | ||
with: | ||
extra_args: --all-files --hook-stage manual |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
name: "Create PR Stats" | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: # run if the file changed on a PR to master | ||
branches: | ||
- master | ||
paths: | ||
- 'make_help_scripts/create_pr_stats.py' | ||
push: # run if the file changed by pushes to master | ||
branches: | ||
- master | ||
paths: | ||
- 'make_help_scripts/create_pr_stats.py' | ||
schedule: | ||
# Run every morning to ensure component documentation is up to date on deployment | ||
- cron: '23 3 * * *' | ||
|
||
jobs: | ||
create-pr-stats: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: '3.10' | ||
cache: 'pip' | ||
- name: Install Python dependencies | ||
run: | | ||
python -m pip install --upgrade pip | ||
pip install --upgrade --requirement requirements.txt | ||
shell: bash | ||
- name: Get stats | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
python make_help_scripts/create_pr_stats.py | ||
shell: bash | ||
- name: Cache stats | ||
uses: actions/cache/save@v3 | ||
with: | ||
key: reviewer-stats-${{ github.run_id }} | ||
path: ~/reviews | ||
- name: Upload Artifacts | ||
uses: actions/[email protected] | ||
with: | ||
name: pr-stats | ||
path: ~/reviews |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
try { | ||
var session = window.sessionStorage || {}; | ||
} catch (e) { | ||
var session = {}; | ||
} | ||
|
||
window.addEventListener("DOMContentLoaded", () => { | ||
const allTabs = document.querySelectorAll('.sphinx-tabs-tab'); | ||
const tabLists = document.querySelectorAll('[role="tablist"]'); | ||
|
||
allTabs.forEach(tab => { | ||
tab.addEventListener("click", changeTabs); | ||
}); | ||
|
||
tabLists.forEach(tabList => { | ||
tabList.addEventListener("keydown", keyTabs); | ||
}); | ||
|
||
// Restore group tab selection from session | ||
const lastSelected = session.getItem('sphinx-tabs-last-selected'); | ||
if (lastSelected != null) selectNamedTabs(lastSelected); | ||
}); | ||
|
||
/** | ||
* Key focus left and right between sibling elements using arrows | ||
* @param {Node} e the element in focus when key was pressed | ||
*/ | ||
function keyTabs(e) { | ||
const tab = e.target; | ||
let nextTab = null; | ||
if (e.keyCode === 39 || e.keyCode === 37) { | ||
tab.setAttribute("tabindex", -1); | ||
// Move right | ||
if (e.keyCode === 39) { | ||
nextTab = tab.nextElementSibling; | ||
if (nextTab === null) { | ||
nextTab = tab.parentNode.firstElementChild; | ||
} | ||
// Move left | ||
} else if (e.keyCode === 37) { | ||
nextTab = tab.previousElementSibling; | ||
if (nextTab === null) { | ||
nextTab = tab.parentNode.lastElementChild; | ||
} | ||
} | ||
} | ||
|
||
if (nextTab !== null) { | ||
nextTab.setAttribute("tabindex", 0); | ||
nextTab.focus(); | ||
} | ||
} | ||
|
||
/** | ||
* Select or deselect clicked tab. If a group tab | ||
* is selected, also select tab in other tabLists. | ||
* @param {Node} e the element that was clicked | ||
*/ | ||
function changeTabs(e) { | ||
// Use this instead of the element that was clicked, in case it's a child | ||
const notSelected = this.getAttribute("aria-selected") === "false"; | ||
const positionBefore = this.parentNode.getBoundingClientRect().top; | ||
const notClosable = !this.parentNode.classList.contains("closeable"); | ||
|
||
deselectTabList(this); | ||
|
||
if (notSelected || notClosable) { | ||
selectTab(this); | ||
const name = this.getAttribute("name"); | ||
selectNamedTabs(name, this.id); | ||
|
||
if (this.classList.contains("group-tab")) { | ||
// Persist during session | ||
session.setItem('sphinx-tabs-last-selected', name); | ||
} | ||
} | ||
|
||
const positionAfter = this.parentNode.getBoundingClientRect().top; | ||
const positionDelta = positionAfter - positionBefore; | ||
// Scroll to offset content resizing | ||
window.scrollTo(0, window.scrollY + positionDelta); | ||
} | ||
|
||
/** | ||
* Select tab and show associated panel. | ||
* @param {Node} tab tab to select | ||
*/ | ||
function selectTab(tab) { | ||
tab.setAttribute("aria-selected", true); | ||
|
||
// Show the associated panel | ||
document | ||
.getElementById(tab.getAttribute("aria-controls")) | ||
.removeAttribute("hidden"); | ||
} | ||
|
||
/** | ||
* Hide the panels associated with all tabs within the | ||
* tablist containing this tab. | ||
* @param {Node} tab a tab within the tablist to deselect | ||
*/ | ||
function deselectTabList(tab) { | ||
const parent = tab.parentNode; | ||
const grandparent = parent.parentNode; | ||
|
||
Array.from(parent.children) | ||
.forEach(t => t.setAttribute("aria-selected", false)); | ||
|
||
Array.from(grandparent.children) | ||
.slice(1) // Skip tablist | ||
.forEach(panel => panel.setAttribute("hidden", true)); | ||
} | ||
|
||
/** | ||
* Select grouped tabs with the same name, but no the tab | ||
* with the given id. | ||
* @param {Node} name name of grouped tab to be selected | ||
* @param {Node} clickedId id of clicked tab | ||
*/ | ||
function selectNamedTabs(name, clickedId=null) { | ||
const groupedTabs = document.querySelectorAll(`.sphinx-tabs-tab[name="${name}"]`); | ||
const tabLists = Array.from(groupedTabs).map(tab => tab.parentNode); | ||
|
||
tabLists | ||
.forEach(tabList => { | ||
// Don't want to change the tabList containing the clicked tab | ||
const clickedTab = tabList.querySelector(`[id="${clickedId}"]`); | ||
if (clickedTab === null ) { | ||
// Select first tab with matching name | ||
const tab = tabList.querySelector(`.sphinx-tabs-tab[name="${name}"]`); | ||
deselectTabList(tab); | ||
selectTab(tab); | ||
} | ||
}) | ||
} | ||
|
||
// TODO(christophfroehlich) this has to be uncommented for jQuery of our code to work on the same page | ||
|
||
// if (typeof exports === 'undefined') { | ||
// exports = {}; | ||
// } | ||
|
||
// exports.keyTabs = keyTabs; | ||
// exports.changeTabs = changeTabs; | ||
// exports.selectTab = selectTab; | ||
// exports.deselectTabList = deselectTabList; | ||
// exports.selectNamedTabs = selectNamedTabs; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -23,4 +23,4 @@ add_sub_repositories () { | |
} | ||
|
||
add_sub_repositories | ||
add_reviewer_stats_file | ||
add_pr_stats_file |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.