forked from mirrored/github-readme-stats
Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ab959d119 | ||
|
|
0caa4c5fd8 | ||
|
|
0c2fe4e07b | ||
|
|
a340900e8a | ||
|
|
2619c12638 | ||
|
|
d306bec73e | ||
|
|
c656f3df6b | ||
|
|
c6dab8b0f2 | ||
|
|
311204f4f9 | ||
|
|
0dc3531666 | ||
|
|
a4d6fe104f | ||
|
|
cb99414d3d | ||
|
|
2f4279e738 | ||
|
|
3bd6519d39 |
@@ -0,0 +1,33 @@
|
||||
name: prs cache clean
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
|
||||
jobs:
|
||||
cleanup:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Cleanup
|
||||
run: |
|
||||
gh extension install actions/gh-actions-cache
|
||||
|
||||
REPO=${{ github.repository }}
|
||||
BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
|
||||
|
||||
echo "Fetching list of cache key"
|
||||
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )
|
||||
|
||||
## Setting this to not fail the workflow while deleting cache keys.
|
||||
set +e
|
||||
echo "Deleting caches..."
|
||||
for cacheKey in $cacheKeysForPR
|
||||
do
|
||||
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
|
||||
done
|
||||
echo "Done"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -34,4 +34,4 @@ jobs:
|
||||
npm run format:check
|
||||
|
||||
- name: Code Coverage
|
||||
uses: codecov/codecov-action@v1
|
||||
uses: codecov/codecov-action@v3
|
||||
|
||||
Generated
+6
-6
@@ -5581,9 +5581,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
|
||||
"integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
|
||||
"integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
@@ -9855,9 +9855,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"yaml": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
|
||||
"integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
|
||||
"integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
|
||||
"dev": true
|
||||
},
|
||||
"yargs": {
|
||||
|
||||
@@ -448,7 +448,7 @@ You can use the `&hide_progress=true` option to hide the percentages and the pro
|
||||
Change the `?username=` value to your [Wakatime](https://wakatime.com) username.
|
||||
|
||||
```md
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
```
|
||||
|
||||
> **Note**:
|
||||
@@ -456,13 +456,13 @@ Change the `?username=` value to your [Wakatime](https://wakatime.com) username.
|
||||
|
||||
### Demo
|
||||
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
|
||||
- Compact layout
|
||||
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
|
||||
* * *
|
||||
|
||||
@@ -520,7 +520,7 @@ Choose from any of the [default themes](#themes)
|
||||
|
||||
- WakaTime card
|
||||
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
[](https://github.com/anuraghazra/github-readme-stats)
|
||||
|
||||
* * *
|
||||
|
||||
|
||||
@@ -20,14 +20,16 @@ const RANK_CARD_DEFAULT_WIDTH = 450;
|
||||
/**
|
||||
* Create a stats card text item.
|
||||
*
|
||||
* @param {object[]} createTextNodeParams Object that contains the createTextNode parameters.
|
||||
* @param {object} createTextNodeParams Object that contains the createTextNode parameters.
|
||||
* @param {string} createTextNodeParams.icon The icon to display.
|
||||
* @param {string} createTextNodeParams.label The label to display.
|
||||
* @param {string} createTextNodeParams.value The value to display.
|
||||
* @param {number} createTextNodeParams.value The value to display.
|
||||
* @param {string} createTextNodeParams.id The id of the stat.
|
||||
* @param {number} createTextNodeParams.index The index of the stat.
|
||||
* @param {boolean} createTextNodeParams.showIcons Whether to show icons.
|
||||
* @param {number} createTextNodeParams.shiftValuePos Number of pixels the value has to be shifted to the right.
|
||||
* @param {boolean} createTextNodeParams.bold Whether to bold the label.
|
||||
* @param {string} createTextNodeParams.number_format The format of numbers on card.
|
||||
* @returns
|
||||
*/
|
||||
const createTextNode = ({
|
||||
|
||||
+33
-24
@@ -36,11 +36,11 @@ const noCodingActivityNode = ({ color, text }) => {
|
||||
/**
|
||||
* Create compact WakaTime layout.
|
||||
*
|
||||
* @param {Object[]} args The function arguments.
|
||||
* @param {import("../fetchers/types").WakaTimeLang[]} languages The languages array.
|
||||
* @param {number} totalSize The total size of the languages.
|
||||
* @param {number} x The x position of the language node.
|
||||
* @param {number} y The y position of the language node.
|
||||
* @param {Object} args The function arguments.
|
||||
* @param {import("../fetchers/types").WakaTimeLang} args.lang The languages array.
|
||||
* @param {number} args.totalSize The total size of the languages.
|
||||
* @param {number} args.x The x position of the language node.
|
||||
* @param {number} args.y The y position of the language node.
|
||||
*/
|
||||
const createCompactLangNode = ({ lang, totalSize, x, y }) => {
|
||||
const color = languageColors[lang.name] || "#858585";
|
||||
@@ -58,11 +58,11 @@ const createCompactLangNode = ({ lang, totalSize, x, y }) => {
|
||||
/**
|
||||
* Create WakaTime language text node item.
|
||||
*
|
||||
* @param {Object[]} args The function arguments.
|
||||
* @param {import("../fetchers/types").WakaTimeLang} lang The language object.
|
||||
* @param {number} totalSize The total size of the languages.
|
||||
* @param {number} x The x position of the language node.
|
||||
* @param {number} y The y position of the language node.
|
||||
* @param {Object} args The function arguments.
|
||||
* @param {import("../fetchers/types").WakaTimeLang[]} args.langs The language objects.
|
||||
* @param {number} args.totalSize The total size of the languages.
|
||||
* @param {number} args.x The x position of the language node.
|
||||
* @param {number} args.y The y position of the language node.
|
||||
*/
|
||||
const createLanguageTextNode = ({ langs, totalSize, x, y }) => {
|
||||
return langs.map((lang, index) => {
|
||||
@@ -86,14 +86,15 @@ const createLanguageTextNode = ({ langs, totalSize, x, y }) => {
|
||||
/**
|
||||
* Create WakaTime text item.
|
||||
*
|
||||
* @param {Object[]} args The function arguments.
|
||||
* @param {string} id The id of the text node item.
|
||||
* @param {string} label The label of the text node item.
|
||||
* @param {string} value The value of the text node item.
|
||||
* @param {number} index The index of the text node item.
|
||||
* @param {percent} percent Percentage of the text node item.
|
||||
* @param {boolean} hideProgress Whether to hide the progress bar.
|
||||
* @param {string} progressBarBackgroundColor The color of the progress bar background.
|
||||
* @param {Object} args The function arguments.
|
||||
* @param {string} args.id The id of the text node item.
|
||||
* @param {string} args.label The label of the text node item.
|
||||
* @param {string} args.value The value of the text node item.
|
||||
* @param {number} args.index The index of the text node item.
|
||||
* @param {string} args.percent Percentage of the text node item.
|
||||
* @param {boolean} args.hideProgress Whether to hide the progress bar.
|
||||
* @param {string} args.progressBarColor The color of the progress bar.
|
||||
* @param {string} args.progressBarBackgroundColor The color of the progress bar background.
|
||||
*/
|
||||
const createTextNode = ({
|
||||
id,
|
||||
@@ -267,12 +268,20 @@ const renderWakatimeCard = (stats = {}, options = { hide: [] }) => {
|
||||
<rect x="25" y="0" width="${width - 50}" height="8" fill="white" rx="5" />
|
||||
</mask>
|
||||
${compactProgressBar}
|
||||
${createLanguageTextNode({
|
||||
x: 0,
|
||||
y: 25,
|
||||
langs: filteredLanguages,
|
||||
totalSize: 100,
|
||||
}).join("")}
|
||||
${
|
||||
filteredLanguages.length
|
||||
? createLanguageTextNode({
|
||||
x: 0,
|
||||
y: 25,
|
||||
langs: filteredLanguages,
|
||||
totalSize: 100,
|
||||
}).join("")
|
||||
: noCodingActivityNode({
|
||||
// @ts-ignore
|
||||
color: textColor,
|
||||
text: i18n.t("wakatimecard.nocodingactivity"),
|
||||
})
|
||||
}
|
||||
`;
|
||||
} else {
|
||||
finalLayout = flexLayout({
|
||||
|
||||
@@ -12,6 +12,12 @@ class Card {
|
||||
* @param {string?=} args.customTitle Card custom title.
|
||||
* @param {string?=} args.defaultTitle Card default title.
|
||||
* @param {string?=} args.titlePrefixIcon Card title prefix icon.
|
||||
* @param {object?=} args.colors Card colors arguments.
|
||||
* @param {string} args.colors.titleColor Card title color.
|
||||
* @param {string} args.colors.textColor Card text color.
|
||||
* @param {string} args.colors.iconColor Card icon color.
|
||||
* @param {string|Array} args.colors.bgColor Card background color.
|
||||
* @param {string} args.colors.borderColor Card border color.
|
||||
* @returns {Card} Card instance.
|
||||
*/
|
||||
constructor({
|
||||
|
||||
+2
-2
@@ -194,15 +194,15 @@ const flexLayout = ({ items, gap, direction, sizes = [] }) => {
|
||||
/**
|
||||
* Returns theme based colors with proper overrides and defaults.
|
||||
*
|
||||
* @param {Object[]} args Function arguments.
|
||||
* @param {Object} args Function arguments.
|
||||
* @param {string} args.title_color Card title color.
|
||||
* @param {string} args.text_color Card text color.
|
||||
* @param {string} args.icon_color Card icon color.
|
||||
* @param {string} args.bg_color Card background color.
|
||||
* @param {string} args.border_color Card border color.
|
||||
* @param {string} args.ring_color Card ring color.
|
||||
* @param {string} args.theme Card theme.
|
||||
* @param {string} args.fallbackTheme Fallback theme.
|
||||
*
|
||||
*/
|
||||
const getCardColors = ({
|
||||
title_color,
|
||||
|
||||
@@ -14,7 +14,9 @@ const fetchWakatimeStats = async ({ username, api_domain, range }) => {
|
||||
const { data } = await axios.get(
|
||||
`https://${
|
||||
api_domain ? api_domain.replace(/\/$/gi, "") : "wakatime.com"
|
||||
}/api/v1/users/${username}/stats/${range || ""}?is_including_today=true`,
|
||||
}/api/v1/users/${username}/stats/${
|
||||
range || "all_time"
|
||||
}?is_including_today=true`,
|
||||
);
|
||||
|
||||
return data.data;
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ const data_stats = {
|
||||
nodes: [{ stargazers: { totalCount: 100 } }],
|
||||
pageInfo: {
|
||||
hasNextPage: false,
|
||||
cursor: "cursor",
|
||||
endCursor: "cursor",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -27,7 +27,7 @@ const data_stats = {
|
||||
],
|
||||
pageInfo: {
|
||||
hasNextPage: true,
|
||||
cursor: "cursor",
|
||||
endCursor: "cursor",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -44,7 +44,7 @@ const data_repo = {
|
||||
],
|
||||
pageInfo: {
|
||||
hasNextPage: false,
|
||||
cursor: "cursor",
|
||||
endCursor: "cursor",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -64,7 +64,7 @@ const data_repo_zero_stars = {
|
||||
],
|
||||
pageInfo: {
|
||||
hasNextPage: true,
|
||||
cursor: "cursor",
|
||||
endCursor: "cursor",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -86,11 +86,12 @@ const mock = new MockAdapter(axios);
|
||||
|
||||
beforeEach(() => {
|
||||
process.env.FETCH_MULTI_PAGE_STARS = "false"; // Set to `false` to fetch only one page of stars.
|
||||
mock
|
||||
.onPost("https://api.github.com/graphql")
|
||||
.replyOnce(200, data_stats)
|
||||
.onPost("https://api.github.com/graphql")
|
||||
.replyOnce(200, data_repo);
|
||||
mock.onPost("https://api.github.com/graphql").reply((cfg) => {
|
||||
return [
|
||||
200,
|
||||
cfg.data.includes("contributionsCollection") ? data_stats : data_repo,
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -105,7 +105,7 @@ describe("Wakatime fetcher", () => {
|
||||
const username = "anuraghazra";
|
||||
mock
|
||||
.onGet(
|
||||
`https://wakatime.com/api/v1/users/${username}/stats/?is_including_today=true`,
|
||||
`https://wakatime.com/api/v1/users/${username}/stats/all_time?is_including_today=true`,
|
||||
)
|
||||
.reply(200, wakaTimeData);
|
||||
|
||||
|
||||
@@ -67,4 +67,19 @@ describe("Test Render Wakatime Card", () => {
|
||||
"No coding activity this week",
|
||||
);
|
||||
});
|
||||
|
||||
it('should show "no coding activity this week" message when using compact layout and there has not been activity', () => {
|
||||
document.body.innerHTML = renderWakatimeCard(
|
||||
{
|
||||
...wakaTimeData.data,
|
||||
languages: undefined,
|
||||
},
|
||||
{
|
||||
layout: "compact",
|
||||
},
|
||||
);
|
||||
expect(document.querySelector(".stat").textContent).toBe(
|
||||
"No coding activity this week",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user