From c81b6da0a9872b26a3fa058673d16abe47b30136 Mon Sep 17 00:00:00 2001 From: Florian Bouillon Date: Tue, 8 Sep 2020 14:16:28 +0200 Subject: [PATCH] Added Language_count parameter Signed-off-by: Florian Bouillon --- api/top-langs.js | 6 +- package.json | 5 -- src/cards/top-languages-card.js | 31 ++++++---- src/fetchers/top-languages-fetcher.js | 22 +++---- tests/fetchTopLanguages.test.js | 84 --------------------------- themes/language-bar.js | 4 ++ 6 files changed, 35 insertions(+), 117 deletions(-) delete mode 100644 tests/fetchTopLanguages.test.js diff --git a/api/top-langs.js b/api/top-langs.js index 9810c52..fecf057 100644 --- a/api/top-langs.js +++ b/api/top-langs.js @@ -19,7 +19,8 @@ module.exports = async (req, res) => { card_width, title_color, text_color, - bg_color, + bg_color, + language_count, theme, cache_seconds, layout, @@ -48,7 +49,8 @@ module.exports = async (req, res) => { hide_title: parseBoolean(hide_title), hide_border: parseBoolean(hide_border), card_width: parseInt(card_width, 10), - hide: parseArray(hide), + hide: parseArray(hide), + language_count: parseInt(language_count), title_color, text_color, bg_color, diff --git a/package.json b/package.json index 1dfd721..dc0ab2f 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,5 @@ "emoji-name-map": "^1.2.8", "github-username-regex": "^1.0.0", "word-wrap": "^1.2.3" - }, - "husky": { - "hooks": { - "pre-commit": "npm test" - } } } diff --git a/src/cards/top-languages-card.js b/src/cards/top-languages-card.js index 5b43261..096d5ef 100644 --- a/src/cards/top-languages-card.js +++ b/src/cards/top-languages-card.js @@ -1,25 +1,29 @@ const { getCardColors, FlexLayout, clampValue } = require("../common/utils"); const Card = require("../common/Card"); -const createProgressNode = ({ width, color, name, progress }) => { - const paddingRight = 95; - const progressTextX = width - paddingRight + 10; +const createProgressNode = ({ width, color, name, progress, progress2 }) => { + const paddingRight = 60; const progressWidth = width - paddingRight; const progressPercentage = clampValue(progress, 2, 100); + const progress2Percentage = clampValue(progress2, 2, 100); return ` - ${name} - ${progress}% + ${name} ${progress}%${progress2 > progress ? ` + ${progress2 - progress}%` : ''} + - + > `; }; @@ -70,6 +74,7 @@ const renderTopLanguages = (topLangs, options = {}) => { text_color, bg_color, hide, + language_count, theme, layout, } = options; @@ -90,7 +95,8 @@ const renderTopLanguages = (topLangs, options = {}) => { .sort((a, b) => b.size - a.size) .filter((lang) => { return !langsToHide[lowercaseTrim(lang.name)]; - }); + }) + .slice(0, language_count || 5); const totalLanguageSize = langs.reduce((acc, curr) => { return acc + curr.size; @@ -129,11 +135,11 @@ const renderTopLanguages = (topLangs, options = {}) => { const output = ` @@ -164,7 +170,8 @@ const renderTopLanguages = (topLangs, options = {}) => { width: width, name: lang.name, color: lang.color || "#858585", - progress: ((lang.size / totalLanguageSize) * 100).toFixed(2), + progress: ((lang.size / totalLanguageSize) * 100).toFixed(2), + progress2: ((lang.recentSize / totalLanguageSize) * 100).toFixed(2), }); }), gap: 40, diff --git a/src/fetchers/top-languages-fetcher.js b/src/fetchers/top-languages-fetcher.js index 6ab87fc..ce83858 100644 --- a/src/fetchers/top-languages-fetcher.js +++ b/src/fetchers/top-languages-fetcher.js @@ -26,8 +26,10 @@ async function fetchTopLanguages(username) { for (const key in repoNodes) { const item = repoNodes[key] list.push({ - name: key, - xp: item.xps + name: key, + color: languageColor[key] ? languageColor[key].color : '#000000', + xp: item.xps, + recentXp: item.new_xps + item.xps }) } @@ -37,27 +39,19 @@ async function fetchTopLanguages(username) { }) .sort((a, b) => b.xp - a.xp) .reduce((acc, prev) => { - // get the size of the language (bytes) - let langSize = prev.xp; - - // if we already have the language in the accumulator - // & the current language name is same as previous name - // add the size to the language size. - if (acc[prev.name] && prev.name === acc[prev.name].name) { - langSize = prev.size + acc[prev.name].size; - } return { ...acc, [prev.name]: { name: prev.name, - color: languageColor[prev.name] ? languageColor[prev.name].color : '#000000', - size: langSize, + color: prev.color, + size: prev.xp, + recentSize: prev.recentXp }, }; }, {}); const topLangs = Object.keys(repoNodes) - .slice(0, 5) + // .slice(0, 5) .reduce((result, key) => { result[key] = repoNodes[key]; return result; diff --git a/tests/fetchTopLanguages.test.js b/tests/fetchTopLanguages.test.js deleted file mode 100644 index 852a0b0..0000000 --- a/tests/fetchTopLanguages.test.js +++ /dev/null @@ -1,84 +0,0 @@ -require("@testing-library/jest-dom"); -const axios = require("axios"); -const MockAdapter = require("axios-mock-adapter"); -const fetchTopLanguages = require("../src/fetchers/top-languages-fetcher"); - -const mock = new MockAdapter(axios); - -afterEach(() => { - mock.reset(); -}); - -const data_langs = { - data: { - user: { - repositories: { - nodes: [ - { - languages: { - edges: [{ size: 100, node: { color: "#0f0", name: "HTML" } }], - }, - }, - { - languages: { - edges: [{ size: 100, node: { color: "#0f0", name: "HTML" } }], - }, - }, - { - languages: { - edges: [ - { size: 100, node: { color: "#0ff", name: "javascript" } }, - ], - }, - }, - { - languages: { - edges: [ - { size: 100, node: { color: "#0ff", name: "javascript" } }, - ], - }, - }, - ], - }, - }, - }, -}; - -const error = { - errors: [ - { - type: "NOT_FOUND", - path: ["user"], - locations: [], - message: "Could not resolve to a User with the login of 'noname'.", - }, - ], -}; - -describe("FetchTopLanguages", () => { - it("should fetch correct language data", async () => { - mock.onPost("https://api.github.com/graphql").reply(200, data_langs); - - let repo = await fetchTopLanguages("anuraghazra"); - expect(repo).toStrictEqual({ - HTML: { - color: "#0f0", - name: "HTML", - size: 200, - }, - javascript: { - color: "#0ff", - name: "javascript", - size: 200, - }, - }); - }); - - it("should throw error", async () => { - mock.onPost("https://api.github.com/graphql").reply(200, error); - - await expect(fetchTopLanguages("anuraghazra")).rejects.toThrow( - "Could not resolve to a User with the login of 'noname'." - ); - }); -}); diff --git a/themes/language-bar.js b/themes/language-bar.js index 8552148..c159728 100644 --- a/themes/language-bar.js +++ b/themes/language-bar.js @@ -1538,6 +1538,10 @@ module.exports = { // https://github.com/ozh/github-colors "TypeScript": { "color": "#2b7489", "url": "https://github.com/trending?l=TypeScript" + }, + "TypeScript (JSX)": { + "color": "#2b7489", + "url": "https://github.com/trending?l=TypeScript" }, "Unified Parallel C": { "color": null,