Skip to content

Commit 5470544

Browse files
author
release bot
committed
📦 0.2.0
1 parent bc71c90 commit 5470544

File tree

4 files changed

+99
-55
lines changed

4 files changed

+99
-55
lines changed

‎action.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: "Arthurlobopro"
44

55
runs:
66
using: docker
7-
image: docker://arthurlobo/snk@sha256:a97851fc2662183ffa48db9630cdc10534baaa569e80f75319d0e8ba0dd75218
7+
image: docker://arthurlobo/snk@sha256:9be50abab75828462b1eeca79269e344dbed19883c42cfa2311a301c734d3860
88

99
inputs:
1010
github_user_name:

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "snk",
33
"description": "Generates a snake game from a github user contributions grid",
4-
"version": "0.1.0",
4+
"version": "0.2.0",
55
"private": true,
66
"repository": "github:platane/snk",
77
"devDependencies": {

‎svg-only/dist/142.index.js‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,15 @@ const drawLerpWorld = (ctx, grid, cells, snake0, snake1, stack, k, o) => {
133133
drawGrid_drawGrid(ctx, grid, cells, o);
134134
drawSnakeLerp(ctx, snake0, snake1, k, o);
135135
ctx.translate(0, (grid.height + 2) * o.sizeCell);
136-
const max = grid.data.reduce((sum, x) => sum + +!!x, stack.length);
137-
drawStack(ctx, stack, max, grid.width * o.sizeCell, o);
136+
if (!o.hideStack) {
137+
const max = grid.data.reduce((sum, x) => sum + +!!x, stack.length);
138+
drawStack(ctx, stack, max, grid.width * o.sizeCell, o);
139+
}
138140
ctx.restore();
139141
};
140142
const getCanvasWorldSize = (grid, o) => {
141143
const width = o.sizeCell * (grid.width + 2);
142-
const height = o.sizeCell * (grid.height + 4) + 30;
144+
const height = o.sizeCell * (grid.height + 4) + (o.hideStack ? 0 : 30);
143145
return { width, height };
144146
};
145147

‎svg-only/dist/index.js‎

Lines changed: 92 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2992,34 +2992,80 @@ const DEFAULTS = {
29922992
hideStack: false,
29932993
snakeSize: 4,
29942994
};
2995+
const SPEEDS = {
2996+
slow: 200,
2997+
normal: 150,
2998+
fast: 100,
2999+
};
29953000
const parseOutputsOption = (lines) => lines.map(parseEntry);
29963001
const parseEntry = (entry) => {
29973002
const m = entry.trim().match(/^(.+\.(svg|gif))(\?(.*)|\s*({.*}))?$/);
29983003
if (!m)
29993004
return null;
30003005
const [, filename, format, _, q1, q2] = m;
30013006
const query = q1 ?? q2;
3002-
let sp = new URLSearchParams(query || "");
3007+
const searchParams = parseQuery(query);
3008+
const hideStack = parseHideStack(searchParams);
3009+
const snakeSize = parseSnakeSize(searchParams);
3010+
const colors = parseColors(searchParams);
3011+
const drawOptions = {
3012+
sizeDotBorderRadius: 2,
3013+
sizeCell: 16,
3014+
sizeDot: 12,
3015+
hideStack,
3016+
...colors,
3017+
};
3018+
const animationOptions = {
3019+
step: 1,
3020+
frameDuration: parseSpeed(searchParams),
3021+
};
3022+
return {
3023+
filename,
3024+
format: format,
3025+
drawOptions,
3026+
animationOptions,
3027+
snakeSize,
3028+
};
3029+
};
3030+
function parseSpeed(searchParams) {
3031+
if (searchParams.has("speed")) {
3032+
const speed = searchParams.get("speed");
3033+
if (speed in SPEEDS) {
3034+
return SPEEDS[speed];
3035+
}
3036+
console.warn(`Speed '${speed}' is not a valid speed.`);
3037+
console.warn("Using default speed...");
3038+
}
3039+
return SPEEDS.normal;
3040+
}
3041+
function parseQuery(query) {
3042+
let searchParams = new URLSearchParams(query || "");
30033043
try {
30043044
const o = JSON.parse(query);
3005-
if (Array.isArray(o.color_dots))
3045+
if (Array.isArray(o.color_dots)) {
30063046
o.color_dots = o.color_dots.join(",");
3007-
if (Array.isArray(o.dark_color_dots))
3047+
}
3048+
if (Array.isArray(o.dark_color_dots)) {
30083049
o.dark_color_dots = o.dark_color_dots.join(",");
3009-
sp = new URLSearchParams(o);
3050+
}
3051+
searchParams = new URLSearchParams(o);
30103052
}
30113053
catch (err) {
30123054
if (!(err instanceof SyntaxError))
30133055
throw err;
30143056
}
3015-
let hideStack = DEFAULTS.hideStack;
3016-
if (sp.has("hide_stack")) {
3017-
hideStack = sp.get("hide_stack") === "true";
3057+
return searchParams;
3058+
}
3059+
function parseHideStack(searchParams) {
3060+
if (searchParams.has("hide_stack")) {
3061+
return searchParams.get("hide_stack") === "true";
30183062
}
3019-
let snakeSize = DEFAULTS.snakeSize;
3020-
if (sp.has("snake_size")) {
3063+
return DEFAULTS.hideStack;
3064+
}
3065+
function parseSnakeSize(searchParams) {
3066+
if (searchParams.has("snake_size")) {
30213067
try {
3022-
const paramsSnakeSize = Number(sp.get("snake_size"));
3068+
const paramsSnakeSize = Number(searchParams.get("snake_size"));
30233069
if (Number.isNaN(paramsSnakeSize)) {
30243070
throw new Error("Invalid snake_size provided, snake_size must be a number");
30253071
}
@@ -3029,68 +3075,64 @@ const parseEntry = (entry) => {
30293075
if (paramsSnakeSize <= 0 || paramsSnakeSize > 9) {
30303076
throw new Error("Invalid snake_size provided, snake_size must be between 1 and 9");
30313077
}
3032-
snakeSize = paramsSnakeSize;
3078+
return paramsSnakeSize;
30333079
}
30343080
catch (error) {
30353081
console.warn(error);
30363082
console.warn("Using default snake size...");
30373083
}
30383084
}
3039-
const drawOptions = {
3040-
sizeDotBorderRadius: 2,
3041-
sizeCell: 16,
3042-
sizeDot: 12,
3085+
return DEFAULTS.snakeSize;
3086+
}
3087+
function parseColors(searchParams) {
3088+
const drawColors = {
30433089
...palettes["default"],
30443090
dark: palettes["default"].dark && { ...palettes["default"].dark },
3045-
hideStack,
30463091
};
3047-
const animationOptions = { step: 1, frameDuration: 100 };
30483092
{
3049-
const palette = palettes[sp.get("palette")];
3093+
const palette = palettes[searchParams.get("palette")];
30503094
if (palette) {
3051-
Object.assign(drawOptions, palette);
3052-
drawOptions.dark = palette.dark && { ...palette.dark };
3095+
Object.assign(drawColors, palette);
3096+
drawColors.dark = palette.dark && { ...palette.dark };
30533097
}
30543098
}
30553099
{
3056-
const dark_palette = palettes[sp.get("dark_palette")];
3100+
const dark_palette = palettes[searchParams.get("dark_palette")];
30573101
if (dark_palette) {
30583102
const clone = { ...dark_palette, dark: undefined };
3059-
drawOptions.dark = clone;
3103+
drawColors.dark = clone;
30603104
}
30613105
}
3062-
if (sp.has("color_snake"))
3063-
drawOptions.colorSnake = sp.get("color_snake");
3064-
if (sp.has("color_dots")) {
3065-
const colors = sp.get("color_dots").split(/[,;]/);
3066-
drawOptions.colorDots = colors;
3067-
drawOptions.colorEmpty = colors[0];
3068-
drawOptions.dark = undefined;
3069-
}
3070-
if (sp.has("color_dot_border"))
3071-
drawOptions.colorDotBorder = sp.get("color_dot_border");
3072-
if (sp.has("dark_color_dots")) {
3073-
const colors = sp.get("dark_color_dots").split(/[,;]/);
3074-
drawOptions.dark = {
3075-
colorDotBorder: drawOptions.colorDotBorder,
3076-
colorSnake: drawOptions.colorSnake,
3077-
...drawOptions.dark,
3106+
if (searchParams.has("color_snake")) {
3107+
drawColors.colorSnake = searchParams.get("color_snake");
3108+
}
3109+
if (searchParams.has("color_dots")) {
3110+
const colors = searchParams.get("color_dots").split(/[,;]/);
3111+
drawColors.colorDots = colors;
3112+
drawColors.colorEmpty = colors[0];
3113+
drawColors.dark = undefined;
3114+
}
3115+
if (searchParams.has("color_dot_border")) {
3116+
drawColors.colorDotBorder = searchParams.get("color_dot_border");
3117+
}
3118+
if (searchParams.has("dark_color_dots")) {
3119+
const colors = searchParams.get("dark_color_dots").split(/[,;]/);
3120+
drawColors.dark = {
3121+
colorDotBorder: drawColors.colorDotBorder,
3122+
colorSnake: drawColors.colorSnake,
3123+
...drawColors.dark,
30783124
colorDots: colors,
30793125
colorEmpty: colors[0],
30803126
};
30813127
}
3082-
if (sp.has("dark_color_dot_border") && drawOptions.dark)
3083-
drawOptions.dark.colorDotBorder = sp.get("color_dot_border");
3084-
if (sp.has("dark_color_snake") && drawOptions.dark)
3085-
drawOptions.dark.colorSnake = sp.get("color_snake");
3086-
return {
3087-
filename,
3088-
format: format,
3089-
drawOptions,
3090-
animationOptions,
3091-
snakeSize,
3092-
};
3093-
};
3128+
if (searchParams.has("dark_color_dot_border") && drawColors.dark) {
3129+
drawColors.dark.colorDotBorder = searchParams.get("color_dot_border");
3130+
}
3131+
if (searchParams.has("dark_color_snake") && drawColors.dark) {
3132+
drawColors.dark.colorSnake = searchParams.get("color_snake");
3133+
}
3134+
return drawColors;
3135+
}
30943136

30953137
;// CONCATENATED MODULE: ./index.ts
30963138

0 commit comments

Comments
 (0)