Compare commits

...
Author SHA1 Message Date
rickstaa a640b871c5 ci: fix theme docs generate bug 2023-03-09 09:44:09 +00:00
Etanarvazac RevorixandZohan Subhash c5063b92b6 Added "Shadow" set (Red, Green, Blue, transparent BG) (#2529)
* Added "Shadow" set (Red, Green, Blue, transparent BG)

3 additional themes sticking primarily to flat colors, which the exception of icons and border being slightly darker. All 3 themes also have transparent backgrounds that will show differently per-user via GiHub's own light and dark themes. Transparency should also still provide easy readability for both.

* Test

Just want to see if we can make the themes have a transparent background.

* Shadows moved under Transparent

---------

Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
2023-03-08 06:36:04 +05:30
Rick Staa b93aee34d0 ci: improve theme preview action (#2572) 2023-03-06 09:33:06 +05:30
Rick Staa ed18914fa4 ci: fixes theme preview action (#2566) 2023-03-05 15:52:08 +05:30
Rick Staa 1e61f9f3fe fix theme preview (#2564)
* ci: fix theme preview action

* fix: fix some bugs in the 'theme-preveiw' action
2023-03-03 20:27:11 +05:30
Rick Staa 976771080f ci: fix theme preview action (#2563) 2023-03-03 13:37:02 +05:30
Zohan SubhashandRick Staa 7bc8f19a7f Preview action fix (#2561)
* Fix error

* refactor: remove unused code

---------

Co-authored-by: Rick Staa <rick.staa@outlook.com>
2023-03-02 18:21:39 +01:00
Rick Staa 9ec2c8367a refactor: fix code comments and change 'up' rate limit (#2560) 2023-03-02 07:44:43 +05:30
Zohan Subhashandrickstaa a1c3c6accc ci: preview theme workflow fix (#2559)
* Fix octokit error

* ci: make octokit instance global

* Fix preview theme (move declarations to global)

* refactor: make constants uppercase

---------

Co-authored-by: rickstaa <rick.staa@outlook.com>
2023-03-01 16:51:25 +01:00
Zohan Subhashandrickstaa 8849b5f5fc Preview theme workflow fix (#2557)
* Fix octokit error

* ci: make octokit instance global

---------

Co-authored-by: rickstaa <rick.staa@outlook.com>
2023-03-01 15:03:49 +05:30
github-actions[bot]andrickstaa d60d53cdb4 refactor: update languages JSON (#2554)
Co-authored-by: rickstaa <rickstaa@users.noreply.github.com>
2023-03-01 06:47:56 +05:30
Rick Staa 252c2b419d refactor: format code (#2550) 2023-02-26 08:14:42 +05:30
Rick Staa d5fbfb4345 ci: fix a bug in the theme preview action (#2549) 2023-02-25 19:44:47 +05:30
Rick Staa 82224fa68a ci: update e2e tests (#2548) 2023-02-25 19:42:11 +05:30
Zohan Subhash 1d528da1dc Add option to deploy using other services (#2525)
* Create express.js

* Update readme.md

* Update readme.md
2023-02-25 19:34:00 +05:30
Rehman 2ab8b85ae3 fix: for issue #2534 (#2536) 2023-02-25 14:31:49 +01:00
Rick Staa a3c6f874af test: update snapshots (#2519) 2023-02-25 13:32:08 +01:00
Raphael Gonçalves 8898d013b6 Update readme.md (#2414)
fix: missing "&" in show_icons=true in Showing icons section
2023-02-25 17:32:42 +05:30
Rick Staa 91345ed55f ci: fix unsafe directory bug (#2518)
This commit fixes a bug that was introduced due to a upstream change in
the git package. See https://stackoverflow.com/questions/71849415/i-cannot-add-the-parent-directory-to-safe-directory-in-git/71904131#71904131
for more information.
2023-02-25 17:21:54 +05:30
Zohan Subhash 55a303b4a6 Add auto-labelling for documentation updates (#2526) 2023-02-25 17:20:14 +05:30
Cateline Mnemosyne f3f7a4837d fix: fix JSON themes bug. (#2544)
This fixes a JSON bug that was introduced in https://github.com/anuraghazra/github-readme-stats/pull/2507.
2023-02-25 14:25:12 +05:30
Oleksandr PerlovandZohan Subhash a6ff0fa521 Add one_dark_pro (#2507)
This colors were taken from One Dark Pro theme in VSCode extention. Please add it and I will use it in my profile

Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
2023-02-25 12:20:00 +05:30
Mohamed Hassan 5f20e6c97a add holi_theme (#2539)
* add holi_theme

* add holi_theme
2023-02-25 12:19:30 +05:30
16 changed files with 300 additions and 78 deletions
+1
View File
@@ -1,3 +1,4 @@
themes: themes/index.js themes: themes/index.js
doc-translation: docs/* doc-translation: docs/*
card-i18n: src/translations.js card-i18n: src/translations.js
documentation: readme.md
+4
View File
@@ -23,6 +23,10 @@ jobs:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: npm cache: npm
# Fix the unsafe repo error which was introduced by the CVE-2022-24765 git patches.
- name: Fix unsafe repo error
run: git config --global --add safe.directory ${{ github.workspace }}
- name: npm install, generate readme - name: npm install, generate readme
run: | run: |
npm ci npm ci
+2
View File
@@ -10,3 +10,5 @@ vercel_token
# IDE # IDE
.vscode .vscode
*.code-workspace *.code-workspace
.vercel
+2 -2
View File
@@ -2,11 +2,11 @@
* @file Contains a simple cloud function that can be used to check which PATs are no * @file Contains a simple cloud function that can be used to check which PATs are no
* longer working. It returns a list of valid PATs, expired PATs and PATs with errors. * longer working. It returns a list of valid PATs, expired PATs and PATs with errors.
* *
* @description This function is currently rate limited to 1 request per 10 minutes. * @description This function is currently rate limited to 1 request per 5 minutes.
*/ */
import { logger, request, dateDiff } from "../../src/common/utils.js"; import { logger, request, dateDiff } from "../../src/common/utils.js";
export const RATE_LIMIT_SECONDS = 60 * 5; // 1 request per 10 minutes export const RATE_LIMIT_SECONDS = 60 * 5; // 1 request per 5 minutes
/** /**
* Simple uptime check fetcher for the PATs. * Simple uptime check fetcher for the PATs.
+2 -2
View File
@@ -2,13 +2,13 @@
* @file Contains a simple cloud function that can be used to check if the PATs are still * @file Contains a simple cloud function that can be used to check if the PATs are still
* functional. * functional.
* *
* @description This function is currently rate limited to 1 request per 10 minutes. * @description This function is currently rate limited to 1 request per 5 minutes.
*/ */
import retryer from "../../src/common/retryer.js"; import retryer from "../../src/common/retryer.js";
import { logger, request } from "../../src/common/utils.js"; import { logger, request } from "../../src/common/utils.js";
export const RATE_LIMIT_SECONDS = 60 * 10; // 1 request per 10 minutes export const RATE_LIMIT_SECONDS = 60 * 5; // 1 request per 5 minutes
/** /**
* Simple uptime check fetcher for the PATs. * Simple uptime check fetcher for the PATs.
+15
View File
@@ -0,0 +1,15 @@
import statsCard from "./api/index.js";
import repoCard from "./api/pin.js";
import langCard from "./api/top-langs.js";
import wakatimeCard from "./api/wakatime.js";
import express from "express";
import dotenv from "dotenv";
dotenv.config();
const app = express();
app.listen(process.env.port || 9000);
app.get("/", statsCard);
app.get("/pin", repoCard);
app.get("/top-langs", langCard);
app.get("/wakatime", wakatimeCard);
+24 -3
View File
@@ -92,7 +92,9 @@ Visit <https://indiafightscorona.giveindia.org> and make a small donation to hel
- [Repo Card Exclusive Options](#repo-card-exclusive-options) - [Repo Card Exclusive Options](#repo-card-exclusive-options)
- [Language Card Exclusive Options](#language-card-exclusive-options) - [Language Card Exclusive Options](#language-card-exclusive-options)
- [Wakatime Card Exclusive Option](#wakatime-card-exclusive-options) - [Wakatime Card Exclusive Option](#wakatime-card-exclusive-options)
- [Deploy Yourself](#deploy-on-your-own-vercel-instance) - [Deploy Yourself](#deploy-on-your-own)
- [On Vercel](#on-vercel)
- [On other platforms](#on-other-platforms)
- [Keep your fork up to date](#keep-your-fork-up-to-date) - [Keep your fork up to date](#keep-your-fork-up-to-date)
# GitHub Stats Card # GitHub Stats Card
@@ -133,7 +135,7 @@ You can add the count of all your private contributions to the total commits cou
### Showing icons ### Showing icons
To enable icons, you can pass `show_icons=true` in the query param, like so: To enable icons, you can pass `&show_icons=true` in the query param, like so:
```md ```md
![Anurag's GitHub stats](https://github-readme-stats.vercel.app/api?username=anuraghazra&show_icons=true) ![Anurag's GitHub stats](https://github-readme-stats.vercel.app/api?username=anuraghazra&show_icons=true)
@@ -509,7 +511,9 @@ By default, GitHub does not lay out the cards side by side. To do that, you can
</a> </a>
``` ```
## Deploy on your own Vercel instance ## Deploy on your own
### On Vercel
#### :film_projector: [Check Out Step By Step Video Tutorial By @codeSTACKr](https://youtu.be/n6d4KHSKqGk?t=107) #### :film_projector: [Check Out Step By Step Video Tutorial By @codeSTACKr](https://youtu.be/n6d4KHSKqGk?t=107)
@@ -546,6 +550,23 @@ Since the GitHub API only allows 5k requests per hour, my `https://github-readme
</details> </details>
### On other platforms
> **Warning**
> This way of using GRS is not officially supported and was added to cater to some particular use cases where Vercel could not be used (e.g. #2341). The support for this method, therefore, is limited.
<details>
<summary><b>:hammer_and_wrench: Step-by-step guide for deploying on other platforms</b></summary>
1. Fork or clone this repo as per your needs
2. Add `express` to the dependencies section of `package.json`
https://github.com/anuraghazra/github-readme-stats/blob/ba7c2f8b55eac8452e479c8bd38b044d204d0424/package.json#L54-L61
3. Run `npm i` if needed (initial setup)
4. Run `node express.js` to start the server, or set the entry point to `express.js` in `package.json` if you're deploying on a managed service
https://github.com/anuraghazra/github-readme-stats/blob/ba7c2f8b55eac8452e479c8bd38b044d204d0424/package.json#L11
5. You're done 🎉
</details>
### Keep your fork up to date ### Keep your fork up to date
You can keep your fork, and thus your private Vercel instance up to date with the upstream using GitHubs' [Sync Fork button](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork). You can also use the [pull](https://github.com/wei/pull) package created by [@wei](https://github.com/wei) to automate this process. You can keep your fork, and thus your private Vercel instance up to date with the upstream using GitHubs' [Sync Fork button](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork). You can also use the [pull](https://github.com/wei/pull) package created by [@wei](https://github.com/wei) to automate this process.
+128 -60
View File
@@ -43,6 +43,23 @@ const ACCEPTED_COLOR_PROPS = Object.keys(COLOR_PROPS);
const REQUIRED_COLOR_PROPS = ACCEPTED_COLOR_PROPS.slice(0, 4); const REQUIRED_COLOR_PROPS = ACCEPTED_COLOR_PROPS.slice(0, 4);
const INVALID_REVIEW_COMMENT = (commentUrl) => const INVALID_REVIEW_COMMENT = (commentUrl) =>
`Some themes are invalid. See the [Automated Theme Preview](${commentUrl}) comment above for more information.`; `Some themes are invalid. See the [Automated Theme Preview](${commentUrl}) comment above for more information.`;
var OCTOKIT;
var OWNER;
var REPO;
var PULL_REQUEST_ID;
/**
* Incorrect JSON format error.
* @extends Error
* @param {string} message Error message.
* @returns {Error} IncorrectJsonFormatError.
*/
class IncorrectJsonFormatError extends Error {
constructor(message) {
super(message);
this.name = "IncorrectJsonFormatError";
}
}
/** /**
* Retrieve PR number from the event payload. * Retrieve PR number from the event payload.
@@ -126,15 +143,36 @@ const findComment = async (octokit, issueNumber, owner, repo, commenter) => {
* Create or update the preview comment. * Create or update the preview comment.
* *
* @param {Object} octokit Octokit instance. * @param {Object} octokit Octokit instance.
* @param {Object} props Comment properties. * @param {number} issueNumber Issue number.
* @param {Object} repo Repository name.
* @param {Object} owner Owner of the repository.
* @param {number} commentId Comment ID.
* @param {string} body Comment body.
* @return {string} The comment URL. * @return {string} The comment URL.
*/ */
const upsertComment = async (octokit, props) => { const upsertComment = async (
octokit,
issueNumber,
repo,
owner,
commentId,
body,
) => {
let resp; let resp;
if (props.comment_id !== undefined) { if (commentId !== undefined) {
resp = await octokit.issues.updateComment(props); resp = await octokit.issues.updateComment({
owner,
repo,
comment_id: commentId,
body,
});
} else { } else {
resp = await octokit.issues.createComment(props); resp = await octokit.issues.createComment({
owner,
repo,
issue_number: issueNumber,
body,
});
} }
return resp.data.html_url; return resp.data.html_url;
}; };
@@ -269,22 +307,38 @@ const parseJSON = (json) => {
if (typeof parsedJson === "object") { if (typeof parsedJson === "object") {
return parsedJson; return parsedJson;
} else { } else {
throw new Error("PR diff is not a valid theme JSON object."); throw new IncorrectJsonFormatError(
"PR diff is not a valid theme JSON object.",
);
} }
} catch (error) { } catch (error) {
let parsedJson = json // Remove trailing commas (if any).
let parsedJson = json.replace(/(,\s*})/g, "}");
// Remove JS comments (if any).
parsedJson = parsedJson.replace(/\/\/[A-z\s]*\s/g, "");
// Fix incorrect open bracket (if any).
const splitJson = parsedJson
.split(/([\s\r\s]*}[\s\r\s]*,[\s\r\s]*)(?=[\w"-]+:)/) .split(/([\s\r\s]*}[\s\r\s]*,[\s\r\s]*)(?=[\w"-]+:)/)
.filter((x) => typeof x !== "string" || !!x.trim()); .filter((x) => typeof x !== "string" || !!x.trim()); // Split json into array of strings and objects.
if (parsedJson[0].replace(/\s+/g, "") === "},") { if (splitJson[0].replace(/\s+/g, "") === "},") {
parsedJson[0] = "},"; splitJson[0] = "},";
if (!/\s*}\s*,?\s*$/.test(parsedJson[1])) { if (!/\s*}\s*,?\s*$/.test(splitJson[1])) {
parsedJson.push(parsedJson.shift()); splitJson.push(splitJson.shift());
} else { } else {
parsedJson.shift(); splitJson.shift();
} }
return Hjson.parse(parsedJson.join("")); parsedJson = splitJson.join("");
} else { }
throw error;
// Try to parse the fixed json.
try {
return Hjson.parse(parsedJson);
} catch (error) {
throw new IncorrectJsonFormatError(
`Theme JSON file could not be parsed: ${error.message}`,
);
} }
} }
}; };
@@ -298,12 +352,13 @@ const themeNameAlreadyExists = (name) => {
return themes[name] !== undefined; return themes[name] !== undefined;
}; };
const DRY_RUN = process.env.DRY_RUN === "true" || false;
/** /**
* Main function. * Main function.
*/ */
export const run = async (prNumber) => { export const run = async () => {
try { try {
const dryRun = process.env.DRY_RUN === "true" || false;
debug("Retrieve action information from context..."); debug("Retrieve action information from context...");
debug(`Context: ${inspect(github.context)}`); debug(`Context: ${inspect(github.context)}`);
let commentBody = ` let commentBody = `
@@ -311,40 +366,50 @@ export const run = async (prNumber) => {
\r${THEME_CONTRIB_GUIDELINESS} \r${THEME_CONTRIB_GUIDELINESS}
`; `;
const ccc = new ColorContrastChecker(); const ccc = new ColorContrastChecker();
const octokit = github.getOctokit(getGithubToken()); OCTOKIT = github.getOctokit(getGithubToken());
const pullRequestId = prNumber ? prNumber : getPrNumber(); PULL_REQUEST_ID = getPrNumber();
const commenter = getCommenter();
const { owner, repo } = getRepoInfo(github.context); const { owner, repo } = getRepoInfo(github.context);
debug(`Owner: ${owner}`); OWNER = owner;
debug(`Repo: ${repo}`); REPO = repo;
const commenter = getCommenter();
PULL_REQUEST_ID = getPrNumber();
debug(`Owner: ${OWNER}`);
debug(`Repo: ${REPO}`);
debug(`Commenter: ${commenter}`); debug(`Commenter: ${commenter}`);
// Retrieve the PR diff and preview-theme comment. // Retrieve the PR diff and preview-theme comment.
debug("Retrieve PR diff..."); debug("Retrieve PR diff...");
const res = await octokit.pulls.get({ const res = await OCTOKIT.pulls.get({
owner, owner: OWNER,
repo, repo: REPO,
pull_number: pullRequestId, pull_number: PULL_REQUEST_ID,
mediaType: { mediaType: {
format: "diff", format: "diff",
}, },
}); });
debug("Retrieve preview-theme comment..."); debug("Retrieve preview-theme comment...");
const comment = await findComment( const comment = await findComment(
octokit, OCTOKIT,
pullRequestId, PULL_REQUEST_ID,
owner, OWNER,
repo, REPO,
commenter, commenter,
); );
// Retrieve theme changes from the PR diff. // Retrieve theme changes from the PR diff.
debug("Retrieve themes..."); debug("Retrieve themes...");
const diff = parse(res.data); const diff = parse(res.data);
// Retrieve all theme changes from the PR diff and convert to JSON.
debug("Retrieve theme changes...");
const content = diff const content = diff
.find((file) => file.to === "themes/index.js") .find((file) => file.to === "themes/index.js")
.chunks[0].changes.filter((c) => c.type === "add") .chunks.map((chunk) =>
.map((c) => c.content.replace("+", "")) chunk.changes
.filter((c) => c.type === "add")
.map((c) => c.content.replace("+", ""))
.join(""),
)
.join(""); .join("");
const themeObject = parseJSON(content); const themeObject = parseJSON(content);
if ( if (
@@ -513,14 +578,15 @@ export const run = async (prNumber) => {
// Create or update theme-preview comment. // Create or update theme-preview comment.
debug("Create or update theme-preview comment..."); debug("Create or update theme-preview comment...");
let comment_url; let comment_url;
if (!dryRun) { if (!DRY_RUN) {
comment_url = await upsertComment(octokit, { comment_url = await upsertComment(
comment_id: comment?.id, OCTOKIT,
issue_number: pullRequestId, PULL_REQUEST_ID,
owner, REPO,
repo, OWNER,
body: commentBody, comment?.id,
}); commentBody,
);
} else { } else {
info(`DRY_RUN: Comment body: ${commentBody}`); info(`DRY_RUN: Comment body: ${commentBody}`);
comment_url = ""; comment_url = "";
@@ -535,20 +601,20 @@ export const run = async (prNumber) => {
const reviewReason = themesValid const reviewReason = themesValid
? undefined ? undefined
: INVALID_REVIEW_COMMENT(comment_url); : INVALID_REVIEW_COMMENT(comment_url);
if (!dryRun) { if (!DRY_RUN) {
await addReview( await addReview(
octokit, OCTOKIT,
pullRequestId, PULL_REQUEST_ID,
owner, OWNER,
repo, REPO,
reviewState, reviewState,
reviewReason, reviewReason,
); );
await addRemoveLabel( await addRemoveLabel(
octokit, OCTOKIT,
pullRequestId, PULL_REQUEST_ID,
owner, OWNER,
repo, REPO,
"invalid", "invalid",
!themesValid, !themesValid,
); );
@@ -558,20 +624,22 @@ export const run = async (prNumber) => {
} }
} catch (error) { } catch (error) {
debug("Set review state to `REQUEST_CHANGES` and add `invalid` label..."); debug("Set review state to `REQUEST_CHANGES` and add `invalid` label...");
if (!dryRun) { if (!DRY_RUN) {
await addReview( await addReview(
octokit, OCTOKIT,
pullRequestId, PULL_REQUEST_ID,
owner, OWNER,
repo, REPO,
"REQUEST_CHANGES", "REQUEST_CHANGES",
error.message, "**Something went wrong in the theme preview action:** `" +
error.message +
"`",
); );
await addRemoveLabel( await addRemoveLabel(
octokit, OCTOKIT,
pullRequestId, PULL_REQUEST_ID,
owner, OWNER,
repo, REPO,
"invalid", "invalid",
true, true,
); );
+1
View File
@@ -6,6 +6,7 @@ export BRANCH_NAME=updated-theme-readme
git --version git --version
git config --global user.email "no-reply@githubreadmestats.com" git config --global user.email "no-reply@githubreadmestats.com"
git config --global user.name "GitHub Readme Stats Bot" git config --global user.name "GitHub Readme Stats Bot"
git config --global --add safe.directory ${GITHUB_WORKSPACE}
git branch -d $BRANCH_NAME || true git branch -d $BRANCH_NAME || true
git checkout -b $BRANCH_NAME git checkout -b $BRANCH_NAME
git add --all git add --all
+1 -2
View File
@@ -13,7 +13,7 @@ import {
import { langCardLocales } from "../translations.js"; import { langCardLocales } from "../translations.js";
const DEFAULT_CARD_WIDTH = 300; const DEFAULT_CARD_WIDTH = 300;
const MIN_CARD_WIDTH = 230; const MIN_CARD_WIDTH = 280;
const DEFAULT_LANGS_COUNT = 5; const DEFAULT_LANGS_COUNT = 5;
const DEFAULT_LANG_COLOR = "#858585"; const DEFAULT_LANG_COLOR = "#858585";
const CARD_PADDING = 25; const CARD_PADDING = 25;
@@ -317,7 +317,6 @@ const renderTopLanguages = (topLangs, options = {}) => {
let finalLayout = ""; let finalLayout = "";
if (layout === "compact" || hide_progress == true) { if (layout === "compact" || hide_progress == true) {
width = width + 50; // padding
height = height =
calculateCompactLayoutHeight(langs.length) + (hide_progress ? -25 : 0); calculateCompactLayoutHeight(langs.length) + (hide_progress ? -25 : 0);
+25 -1
View File
@@ -118,6 +118,7 @@ const createTextNode = ({
// @ts-ignore // @ts-ignore
name: label, name: label,
progressBarBackgroundColor, progressBarBackgroundColor,
delay: staggerDelay + 300,
}); });
return ` return `
@@ -276,11 +277,12 @@ const renderWakatimeCard = (stats = {}, options = { hide: [] }) => {
} else { } else {
finalLayout = flexLayout({ finalLayout = flexLayout({
items: filteredLanguages.length items: filteredLanguages.length
? filteredLanguages.map((language) => { ? filteredLanguages.map((language, index) => {
return createTextNode({ return createTextNode({
id: language.name, id: language.name,
label: language.name, label: language.name,
value: language.text, value: language.text,
index: index,
percent: language.percent, percent: language.percent,
// @ts-ignore // @ts-ignore
progressBarColor: titleColor, progressBarColor: titleColor,
@@ -321,7 +323,29 @@ const renderWakatimeCard = (stats = {}, options = { hide: [] }) => {
card.setCSS( card.setCSS(
` `
${cssStyles} ${cssStyles}
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${textColor} } .lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${textColor} }
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
`, `,
); );
+10 -2
View File
@@ -79,6 +79,7 @@
"Ceylon": "#dfa535", "Ceylon": "#dfa535",
"Chapel": "#8dc63f", "Chapel": "#8dc63f",
"ChucK": "#3f8000", "ChucK": "#3f8000",
"Circom": "#707575",
"Cirru": "#ccccff", "Cirru": "#ccccff",
"Clarion": "#db901e", "Clarion": "#db901e",
"Clarity": "#5546ff", "Clarity": "#5546ff",
@@ -116,6 +117,7 @@
"DirectX 3D File": "#aace60", "DirectX 3D File": "#aace60",
"Dockerfile": "#384d54", "Dockerfile": "#384d54",
"Dogescript": "#cca760", "Dogescript": "#cca760",
"Dotenv": "#e5d559",
"Dylan": "#6c616e", "Dylan": "#6c616e",
"E": "#ccce35", "E": "#ccce35",
"ECL": "#8a1267", "ECL": "#8a1267",
@@ -149,7 +151,7 @@
"Forth": "#341708", "Forth": "#341708",
"Fortran": "#4d41b1", "Fortran": "#4d41b1",
"Fortran Free Form": "#4d41b1", "Fortran Free Form": "#4d41b1",
"FreeBasic": "#867db1", "FreeBasic": "#141AC9",
"FreeMarker": "#0050b2", "FreeMarker": "#0050b2",
"Frege": "#00cafe", "Frege": "#00cafe",
"Futhark": "#5f021f", "Futhark": "#5f021f",
@@ -182,6 +184,7 @@
"Go": "#00ADD8", "Go": "#00ADD8",
"Go Checksums": "#00ADD8", "Go Checksums": "#00ADD8",
"Go Module": "#00ADD8", "Go Module": "#00ADD8",
"Godot Resource": "#355570",
"Golo": "#88562A", "Golo": "#88562A",
"Gosu": "#82937f", "Gosu": "#82937f",
"Grace": "#615f8b", "Grace": "#615f8b",
@@ -192,6 +195,7 @@
"Groovy": "#4298b8", "Groovy": "#4298b8",
"Groovy Server Pages": "#4298b8", "Groovy Server Pages": "#4298b8",
"HAProxy": "#106da9", "HAProxy": "#106da9",
"HCL": "#844FBA",
"HLSL": "#aace60", "HLSL": "#aace60",
"HOCON": "#9ff8ee", "HOCON": "#9ff8ee",
"HTML": "#e34c26", "HTML": "#e34c26",
@@ -225,6 +229,7 @@
"Isabelle ROOT": "#FEFE00", "Isabelle ROOT": "#FEFE00",
"J": "#9EEDFF", "J": "#9EEDFF",
"JAR Manifest": "#b07219", "JAR Manifest": "#b07219",
"JCL": "#d90e09",
"JFlex": "#DBCA00", "JFlex": "#DBCA00",
"JSON": "#292929", "JSON": "#292929",
"JSON with Comments": "#292929", "JSON with Comments": "#292929",
@@ -247,9 +252,11 @@
"Jsonnet": "#0064bd", "Jsonnet": "#0064bd",
"Julia": "#a270ba", "Julia": "#a270ba",
"Jupyter Notebook": "#DA5B0B", "Jupyter Notebook": "#DA5B0B",
"Just": "#384d54",
"KRL": "#28430A", "KRL": "#28430A",
"Kaitai Struct": "#773b37", "Kaitai Struct": "#773b37",
"KakouneScript": "#6f8042", "KakouneScript": "#6f8042",
"KerboScript": "#41adf0",
"KiCad Layout": "#2f4aab", "KiCad Layout": "#2f4aab",
"KiCad Legacy Layout": "#2f4aab", "KiCad Legacy Layout": "#2f4aab",
"KiCad Schematic": "#2f4aab", "KiCad Schematic": "#2f4aab",
@@ -362,6 +369,7 @@
"PicoLisp": "#6067af", "PicoLisp": "#6067af",
"PigLatin": "#fcd7de", "PigLatin": "#fcd7de",
"Pike": "#005390", "Pike": "#005390",
"PlantUML": "#fbbd16",
"PogoScript": "#d80074", "PogoScript": "#d80074",
"Polar": "#ae81ff", "Polar": "#ae81ff",
"Portugol": "#f8bd00", "Portugol": "#f8bd00",
@@ -379,6 +387,7 @@
"Puppet": "#302B6D", "Puppet": "#302B6D",
"PureBasic": "#5a6986", "PureBasic": "#5a6986",
"PureScript": "#1D222D", "PureScript": "#1D222D",
"Pyret": "#ee1e10",
"Python": "#3572A5", "Python": "#3572A5",
"Python console": "#3572A5", "Python console": "#3572A5",
"Python traceback": "#3572A5", "Python traceback": "#3572A5",
@@ -531,7 +540,6 @@
"fish": "#4aae47", "fish": "#4aae47",
"hoon": "#00b171", "hoon": "#00b171",
"jq": "#c7254e", "jq": "#c7254e",
"just": "#384d54",
"kvlang": "#1da6e0", "kvlang": "#1da6e0",
"mIRC Script": "#3d57c3", "mIRC Script": "#3d57c3",
"mcfunction": "#E22837", "mcfunction": "#E22837",
@@ -69,7 +69,29 @@ exports[`Test Render Wakatime Card should render correctly with compact layout 1
} }
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 } .lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
@@ -227,7 +249,29 @@ exports[`Test Render Wakatime Card should render correctly with compact layout w
} }
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 } .lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
+3 -3
View File
@@ -15,14 +15,14 @@ const REPO = "curly-fiesta";
const USER = "catelinemnemosyne"; const USER = "catelinemnemosyne";
const STATS_DATA = { const STATS_DATA = {
name: "Cateline Mnemosyne", name: "Cateline Mnemosyne",
totalPRs: 1, totalPRs: 2,
totalCommits: 7, totalCommits: 8,
totalIssues: 1, totalIssues: 1,
totalStars: 1, totalStars: 1,
contributedTo: 1, contributedTo: 1,
rank: { rank: {
level: "A+", level: "A+",
score: 50.893750297869225, score: 50.88831151384285,
}, },
}; };
+3 -3
View File
@@ -216,7 +216,7 @@ describe("Test renderTopLanguages", () => {
); );
expect(queryAllByTestId(document.body, "lang-progress")[0]).toHaveAttribute( expect(queryAllByTestId(document.body, "lang-progress")[0]).toHaveAttribute(
"width", "width",
"120", "100",
); );
expect(queryAllByTestId(document.body, "lang-name")[1]).toHaveTextContent( expect(queryAllByTestId(document.body, "lang-name")[1]).toHaveTextContent(
@@ -224,7 +224,7 @@ describe("Test renderTopLanguages", () => {
); );
expect(queryAllByTestId(document.body, "lang-progress")[1]).toHaveAttribute( expect(queryAllByTestId(document.body, "lang-progress")[1]).toHaveAttribute(
"width", "width",
"120", "100",
); );
expect(queryAllByTestId(document.body, "lang-name")[2]).toHaveTextContent( expect(queryAllByTestId(document.body, "lang-name")[2]).toHaveTextContent(
@@ -232,7 +232,7 @@ describe("Test renderTopLanguages", () => {
); );
expect(queryAllByTestId(document.body, "lang-progress")[2]).toHaveAttribute( expect(queryAllByTestId(document.body, "lang-progress")[2]).toHaveAttribute(
"width", "width",
"60", "50",
); );
}); });
+35
View File
@@ -18,6 +18,27 @@ export const themes = {
text_color: "417E87", text_color: "417E87",
bg_color: "ffffff00", bg_color: "ffffff00",
}, },
shadow_red: {
title_color: "9A0000",
text_color: "444",
icon_color: "4F0000",
border_color: "4F0000",
bg_color: "ffffff00",
},
shadow_green: {
title_color: "007A00",
text_color: "444",
icon_color: "003D00",
border_color: "003D00",
bg_color: "ffffff00",
},
shadow_blue: {
title_color: "00779A",
text_color: "444",
icon_color: "004450",
border_color: "004490",
bg_color: "ffffff00",
},
dark: { dark: {
title_color: "fff", title_color: "fff",
icon_color: "79ff97", icon_color: "79ff97",
@@ -374,6 +395,13 @@ export const themes = {
border_color: "170F0C", border_color: "170F0C",
bg_color: "170F0C", bg_color: "170F0C",
}, },
one_dark_pro: {
title_color: "61AFEF",
text_color: "E5C06E",
icon_color: "C678DD",
border_color: "3B4048",
bg_color: "23272E",
},
rose: { rose: {
title_color: "8d192b", title_color: "8d192b",
text_color: "862931", text_color: "862931",
@@ -381,6 +409,13 @@ export const themes = {
border_color: "e9d8d4", border_color: "e9d8d4",
bg_color: "e9d8d4", bg_color: "e9d8d4",
}, },
holi_theme: {
title_color: "5FABEE",
text_color: "D6E7FF",
icon_color: "5FABEE",
border_color: "85A4C0",
bg_color: "030314",
},
}; };
export default themes; export default themes;