Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions scripts/renderers/calcPercentages.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { calcPercentages as calcPercentagesPie } from './renderLangPie';
import { calcPercentages as calcPercentagesBar } from './renderLangPercent';
import { calcPercentagesPie, calcPercentagesBar } from './calcPercentages';
import { LanguageData } from '../../types';

const mockLanguages: LanguageData[] = [
Expand Down
47 changes: 47 additions & 0 deletions scripts/renderers/calcPercentages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { LanguageData } from "../../types";
import { LanguageDataWithAccum } from "./types";

export const calcPercentagesPie = (languages: LanguageData[]): LanguageDataWithAccum[] => {
// Deep copy of an array of objects
const langStats: LanguageDataWithAccum[] = JSON.parse(JSON.stringify(languages))
.slice(0, 5);

const totalCount = langStats
.reduce((accumulator: number, language: LanguageDataWithAccum) => {
return accumulator + language.count;
}, 0);

for (let i = 0; i < langStats.length - 1; i++) {
langStats[i].count = Math.round((100 * langStats[i].count) / totalCount);
}
const sumOfOthers = langStats.slice(0, -1).reduce((acc: number, lang: LanguageDataWithAccum) => acc + lang.count, 0);
langStats[langStats.length - 1].count = 100 - sumOfOthers;

langStats
.sort((a: LanguageDataWithAccum, b: LanguageDataWithAccum) => {
return a.count - b.count;
})
.reduce((accumulator: number, language: LanguageDataWithAccum) => {
language.accum = accumulator;
return accumulator + language.count
}, 0);

return langStats;
}

export const calcPercentagesBar = (languages: LanguageData[]): LanguageData[] => {
// Deep copy of an array of objects
const langStats: LanguageData[] = JSON.parse(JSON.stringify(languages))
.slice(0, 5);

const totalCount = langStats
.reduce((accumulator: number, language: LanguageData) => {
return accumulator + language.count;
}, 0);

for (let i = 0; i < langStats.length; i++) {
langStats[i].count = Math.round((100 * langStats[i].count) / totalCount);
}

return langStats;
}
51 changes: 10 additions & 41 deletions scripts/renderers/renderLangPercent.ts
Original file line number Diff line number Diff line change
@@ -1,47 +1,15 @@
import * as svgs from "../utils/svgs";
import { CARD_WIDTH, CARD_HEIGHT, LANG_ITEM_COUNT, DIVIDER_Y } from "../utils/constants";
import { CARD_WIDTH, CARD_HEIGHT, LANG_ITEM_COUNT, DIVIDER_Y, COLOR_SUBTLE, COLOR_LIGHT, COLOR_DARK } from "../utils/constants";
import { LanguageData, UserLanguageStats } from "../../types";

interface TextAttr {
weight: number;
index: number;
color: string;
fontSize: number;
dir: string;
title: boolean;
}

interface CardAttr {
width: number;
height: number;
background: string;
style: string;
children: string[];
}

const calcPercentages = (languages: LanguageData[]): LanguageData[] => {
// Deep copy of an array of objects
const langStats: LanguageData[] = JSON.parse(JSON.stringify(languages))
.slice(0, 5);

const totalCount = langStats
.reduce((accumulator: number, language: LanguageData) => {
return accumulator + language.count;
}, 0);

for (let i = 0; i < langStats.length; i++) {
langStats[i].count = Math.round((100 * langStats[i].count) / totalCount);
}

return langStats;
}
import { TextAttr, CardAttr } from "./types";
import { calcPercentagesBar as calcPercentages } from "./calcPercentages";

const renderLanguageCard = (userData: UserLanguageStats, color: string): string => {
let lightFontColor = "#A4A5A6";
let normalFontColor = "#FFFFFF";
let lightFontColor = COLOR_SUBTLE;
let normalFontColor = COLOR_LIGHT;
if (color === "white") {
lightFontColor = "#161B22";
normalFontColor = "#161B22";
lightFontColor = COLOR_DARK;
normalFontColor = COLOR_DARK;
}

const createText = (text: string, textAttr: TextAttr): string => {
Expand Down Expand Up @@ -81,7 +49,7 @@ const renderLanguageCard = (userData: UserLanguageStats, color: string): string
const cardAttr: CardAttr = {
width: CARD_WIDTH,
height: CARD_HEIGHT,
background: `${ (color === "white") ? "white" : "#161B22"}`,
background: `${ (color === "white") ? "white" : COLOR_DARK}`,
style: "border-radius: 10px;",
children: languageStats.reduce((acc: string[], item) => [...acc, item.name], ["Most used languages"])
}
Expand Down Expand Up @@ -128,4 +96,5 @@ const renderLanguageCard = (userData: UserLanguageStats, color: string): string
</svg>`;
}

export { renderLanguageCard, calcPercentages };
export { renderLanguageCard };
export { calcPercentagesBar as calcPercentages } from "./calcPercentages";
69 changes: 11 additions & 58 deletions scripts/renderers/renderLangPie.ts
Original file line number Diff line number Diff line change
@@ -1,63 +1,15 @@
import * as svgs from "../utils/svgs";
import { CARD_WIDTH, CARD_HEIGHT, LANG_ITEM_COUNT, DIVIDER_Y } from "../utils/constants";
import { LanguageData, UserLanguageStats } from "../../types";

/** Extended LanguageData with an accumulated percentage offset used for pie chart arc drawing. */
interface LanguageDataWithAccum extends LanguageData {
accum: number;
}

interface TextAttr {
weight: number;
index: number;
color: string;
fontSize: number;
dir: string;
title: boolean;
}

interface CardAttr {
width: number;
height: number;
background: string;
style: string;
children: string[];
}

const calcPercentages = (languages: LanguageData[]): LanguageDataWithAccum[] => {
// Deep copy of an array of objects
const langStats: LanguageDataWithAccum[] = JSON.parse(JSON.stringify(languages))
.slice(0, 5);

const totalCount = langStats
.reduce((accumulator: number, language: LanguageDataWithAccum) => {
return accumulator + language.count;
}, 0);

for (let i = 0; i < langStats.length - 1; i++) {
langStats[i].count = Math.round((100 * langStats[i].count) / totalCount);
}
const sumOfOthers = langStats.slice(0, -1).reduce((acc: number, lang: LanguageDataWithAccum) => acc + lang.count, 0);
langStats[langStats.length - 1].count = 100 - sumOfOthers;

langStats
.sort((a: LanguageDataWithAccum, b: LanguageDataWithAccum) => {
return a.count - b.count;
})
.reduce((accumulator: number, language: LanguageDataWithAccum) => {
language.accum = accumulator;
return accumulator + language.count
}, 0);

return langStats;
}
import { CARD_WIDTH, CARD_HEIGHT, LANG_ITEM_COUNT, DIVIDER_Y, COLOR_SUBTLE, COLOR_LIGHT, COLOR_DARK } from "../utils/constants";
import { UserLanguageStats } from "../../types";
import { TextAttr, CardAttr, LanguageDataWithAccum } from "./types";
import { calcPercentagesPie as calcPercentages } from "./calcPercentages";

const renderLanguageCard = (userData: UserLanguageStats, color: string): string => {
let lightFontColor = "#A4A5A6";
let normalFontColor = "#FFFFFF";
let lightFontColor = COLOR_SUBTLE;
let normalFontColor = COLOR_LIGHT;
if (color === "white") {
lightFontColor = "#161B22";
normalFontColor = "#161B22";
lightFontColor = COLOR_DARK;
normalFontColor = COLOR_DARK;
}

const createText = (text: string, textAttr: TextAttr): string => {
Expand Down Expand Up @@ -108,7 +60,7 @@ const renderLanguageCard = (userData: UserLanguageStats, color: string): string
const cardAttr: CardAttr = {
width: CARD_WIDTH,
height: CARD_HEIGHT,
background: `${ (color === "white") ? "white" : "#161B22"}`,
background: `${ (color === "white") ? "white" : COLOR_DARK}`,
style: "border-radius: 10px;",
children: languageStatsDesc.reduce((acc: string[], item) => [...acc, item.name], ["Most used languages"])
}
Expand Down Expand Up @@ -159,4 +111,5 @@ const renderLanguageCard = (userData: UserLanguageStats, color: string): string

}

export { renderLanguageCard, calcPercentages };
export { renderLanguageCard };
export { calcPercentagesPie as calcPercentages } from "./calcPercentages";
30 changes: 7 additions & 23 deletions scripts/renderers/renderStatCard.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,16 @@
import * as svgs from "../utils/svgs";
import { CARD_WIDTH, CARD_HEIGHT, DIVIDER_Y } from "../utils/constants";
import { CARD_WIDTH, CARD_HEIGHT, DIVIDER_Y, COLOR_SUBTLE, COLOR_LIGHT, COLOR_DARK } from "../utils/constants";
import { UserStats } from "../../types";

interface TextAttr {
weight: number;
index: number;
color: string;
fontSize: number;
dir: string;
title: boolean;
}

interface CardAttr {
width: number;
height: number;
background: string;
style: string;
children: string[];
}
import { TextAttr, CardAttr } from "./types";

const renderStatCard = (userData: UserStats, color: string, peng: boolean): string => {
let lightFontColor = "#A4A5A6";
let normalFontColor = "#FFFFFF";
let lightFontColor = COLOR_SUBTLE;
let normalFontColor = COLOR_LIGHT;
const icons = [...svgs.icons];

if (color === "white") {
lightFontColor = "#161B22";
normalFontColor = "#161B22";
lightFontColor = COLOR_DARK;
normalFontColor = COLOR_DARK;
}

const createText = (text: string, textAttr: TextAttr): string => {
Expand Down Expand Up @@ -65,7 +49,7 @@ const renderStatCard = (userData: UserStats, color: string, peng: boolean): stri
const cardAttr: CardAttr = {
width: CARD_WIDTH,
height: CARD_HEIGHT,
background: `${ (color === "white") ? "white" : "#161B22"}`,
background: `${ (color === "white") ? "white" : COLOR_DARK}`,
style: "border-radius: 10px;",
children: [
`@${ userData.user }'s GitHub`,
Expand Down
23 changes: 23 additions & 0 deletions scripts/renderers/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { LanguageData } from "../../types";

/** Extended LanguageData with an accumulated percentage offset used for pie chart arc drawing. */
export interface LanguageDataWithAccum extends LanguageData {
accum: number;
}

export interface TextAttr {
weight: number;
index: number;
color: string;
fontSize: number;
dir: string;
title: boolean;
}

export interface CardAttr {
width: number;
height: number;
background: string;
style: string;
children: string[];
}
3 changes: 3 additions & 0 deletions scripts/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ export const CACHE_DURATION_SECONDS: number = 72000;
export const LANG_ITEM_COUNT: number = 6;
export const DIVIDER_Y: number = 44;
export const ERROR_DIVIDER_Y: number = 84;
export const COLOR_SUBTLE: string = "#A4A5A6";
export const COLOR_LIGHT: string = "#FFFFFF";
export const COLOR_DARK: string = "#161B22";
Loading