WIP script to generate PNG images from board configs
2
.gitignore
vendored
@@ -4,3 +4,5 @@ dist
|
|||||||
dist-ssr
|
dist-ssr
|
||||||
*.local
|
*.local
|
||||||
_release_assets
|
_release_assets
|
||||||
|
*/**/*.temp.*
|
||||||
|
*.temp.*
|
||||||
1144
package-lock.json
generated
@@ -14,9 +14,10 @@
|
|||||||
"@types/gif.js": "^0.2.2",
|
"@types/gif.js": "^0.2.2",
|
||||||
"@types/hammerjs": "^2.0.41",
|
"@types/hammerjs": "^2.0.41",
|
||||||
"@types/howler": "^2.2.6",
|
"@types/howler": "^2.2.6",
|
||||||
"@types/node": "^17.0.8",
|
"@types/node": "^17.0.30",
|
||||||
"@types/ua-parser-js": "^0.7.36",
|
"@types/ua-parser-js": "^0.7.36",
|
||||||
"@vitejs/plugin-legacy": "^1.8.1",
|
"@vitejs/plugin-legacy": "^1.8.1",
|
||||||
|
"canvas": "^2.9.1",
|
||||||
"mime": "^3.0.0",
|
"mime": "^3.0.0",
|
||||||
"npm": "^8.8.0",
|
"npm": "^8.8.0",
|
||||||
"typescript": "^4.4.4",
|
"typescript": "^4.4.4",
|
||||||
|
|||||||
BIN
public/boards/avocado.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/azure.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/botez.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/clay.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/contrast_a.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
public/boards/contrast_b.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/boards/contrast_c.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/boards/contrast_d.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/boards/danny.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danny_blue.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danny_cyan.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danny_green.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danny_pink.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danny_purple.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danny_red.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danny_yellow.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/danya.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/leko.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/lichess.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/lila.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/lines_alabaster.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
public/boards/lines_cardboard.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
public/boards/lines_paper.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
public/boards/lines_parchment.png
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
public/boards/mono_blue.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_chico.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/mono_contessa.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_coper.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_coral.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_cornflower.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_dodger.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_flamingo.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_goblin.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/mono_harvest.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_heliotrope.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_mahogany.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_mantis.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_meadow.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/mono_mojo.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/mono_mulberry.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/mono_rose.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mono_sycamore.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/mono_teal.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/mono_terracotta.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/mud.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/patina.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/peach.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/rock.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/rose.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/smooth_forest.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
public/boards/smooth_laguna.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
public/boards/smooth_mono.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/boards/smooth_sea.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/boards/smooth_spring.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/boards/smooth_summer.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/boards/smooth_sunset.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/boards/smooth_violet.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/boards/spring.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/standard.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
public/boards/violet.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/boards/wood1.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
public/boards/wood2.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
public/boards/wood3.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/boards/wood4.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/boards/wood5.png
Normal file
|
After Width: | Height: | Size: 979 KiB |
BIN
public/boards/wood6.png
Normal file
|
After Width: | Height: | Size: 961 KiB |
BIN
public/boards/wood7.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
public/boards/wood8.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
5
public/pieces/checkers/bb.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#111111"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#666666"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#333333"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/bw.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#555555"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#EEEEEE"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#BBBBBB"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/kb.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#111111"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#666666"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#333333"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/kw.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#555555"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#EEEEEE"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#BBBBBB"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/nb.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#111111"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#666666"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#333333"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/nw.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#555555"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#EEEEEE"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#BBBBBB"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/pb.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#111111"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#666666"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#333333"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/pw.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#555555"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#EEEEEE"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#BBBBBB"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/qb.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#111111"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#666666"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#333333"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/qw.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#555555"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#EEEEEE"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#BBBBBB"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/rb.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#111111"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#666666"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#333333"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
5
public/pieces/checkers/rw.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M256 439C311.942 439 363.119 423.555 400.647 397.959C438.115 372.404 463 335.86 463 294V218C463 176.14 438.115 139.596 400.647 114.041C363.119 88.4448 311.942 73 256 73C200.058 73 148.881 88.4448 111.353 114.041C73.8848 139.596 49 176.14 49 218V294C49 335.86 73.8848 372.404 111.353 397.959C148.881 423.555 200.058 439 256 439Z" fill="#555555"/>
|
||||||
|
<path d="M256 351C363.696 351 451 291.454 451 218C451 144.546 363.696 85 256 85C148.304 85 61 144.546 61 218C61 291.454 148.304 351 256 351Z" fill="#EEEEEE"/>
|
||||||
|
<path d="M256 427C363.696 427 451 367.454 451 294V218C451 291.454 363.696 351 256 351C148.304 351 61 291.454 61 218V294C61 367.454 148.304 427 256 427Z" fill="#BBBBBB"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 831 B |
24
public/stylus/chesscom/checkers.user.css
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
/* ==UserStyle==
|
||||||
|
@name Checkers chess set
|
||||||
|
@namespace chess.com
|
||||||
|
@version 1.0.0
|
||||||
|
@description Chess set for chess.com
|
||||||
|
@author sharechess.github.io
|
||||||
|
==/UserStyle== */
|
||||||
|
|
||||||
|
@-moz-document domain("chess.com") {
|
||||||
|
.piece.bb, .promotion-piece.bb {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.wb, .promotion-piece.wb {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.bk, .promotion-piece.bk {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.wk, .promotion-piece.wk {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.bn, .promotion-piece.bn {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.wn, .promotion-piece.wn {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.bp, .promotion-piece.bp {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.wp, .promotion-piece.wp {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.bq, .promotion-piece.bq {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.wq, .promotion-piece.wq {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.br, .promotion-piece.br {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.piece.wr, .promotion-piece.wr {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
}
|
||||||
|
|
||||||
24
public/stylus/lichess/checkers.user.css
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
/* ==UserStyle==
|
||||||
|
@name Checkers chess set
|
||||||
|
@namespace lichess.org
|
||||||
|
@version 1.0.0
|
||||||
|
@description Chess set for lichess.org
|
||||||
|
@author sharechess.github.io
|
||||||
|
==/UserStyle== */
|
||||||
|
|
||||||
|
@-moz-document domain("lichess.org") {
|
||||||
|
.is2d .bishop.black {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .bishop.white {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .king.black {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .king.white {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .knight.black {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .knight.white {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .pawn.black {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .pawn.white {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .queen.black {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .queen.white {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .rook.black {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiMxMTExMTEiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiM2NjY2NjYiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iIzMzMzMzMyIvPgo8L3N2Zz4K') !important}
|
||||||
|
.is2d .rook.white {background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjU2IDQzOUMzMTEuOTQyIDQzOSAzNjMuMTE5IDQyMy41NTUgNDAwLjY0NyAzOTcuOTU5QzQzOC4xMTUgMzcyLjQwNCA0NjMgMzM1Ljg2IDQ2MyAyOTRWMjE4QzQ2MyAxNzYuMTQgNDM4LjExNSAxMzkuNTk2IDQwMC42NDcgMTE0LjA0MUMzNjMuMTE5IDg4LjQ0NDggMzExLjk0MiA3MyAyNTYgNzNDMjAwLjA1OCA3MyAxNDguODgxIDg4LjQ0NDggMTExLjM1MyAxMTQuMDQxQzczLjg4NDggMTM5LjU5NiA0OSAxNzYuMTQgNDkgMjE4VjI5NEM0OSAzMzUuODYgNzMuODg0OCAzNzIuNDA0IDExMS4zNTMgMzk3Ljk1OUMxNDguODgxIDQyMy41NTUgMjAwLjA1OCA0MzkgMjU2IDQzOVoiIGZpbGw9IiM1NTU1NTUiLz4KPHBhdGggZD0iTTI1NiAzNTFDMzYzLjY5NiAzNTEgNDUxIDI5MS40NTQgNDUxIDIxOEM0NTEgMTQ0LjU0NiAzNjMuNjk2IDg1IDI1NiA4NUMxNDguMzA0IDg1IDYxIDE0NC41NDYgNjEgMjE4QzYxIDI5MS40NTQgMTQ4LjMwNCAzNTEgMjU2IDM1MVoiIGZpbGw9IiNFRUVFRUUiLz4KPHBhdGggZD0iTTI1NiA0MjdDMzYzLjY5NiA0MjcgNDUxIDM2Ny40NTQgNDUxIDI5NFYyMThDNDUxIDI5MS40NTQgMzYzLjY5NiAzNTEgMjU2IDM1MUMxNDguMzA0IDM1MSA2MSAyOTEuNDU0IDYxIDIxOFYyOTRDNjEgMzY3LjQ1NCAxNDguMzA0IDQyNyAyNTYgNDI3WiIgZmlsbD0iI0JCQkJCQiIvPgo8L3N2Zz4K') !important}
|
||||||
|
}
|
||||||
|
|
||||||
42
scripts/createBoardsStylesheets.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import { BoardStyle } from "./../src/types";
|
||||||
|
import { loadImage, createCanvas } from "canvas";
|
||||||
|
import Board from "../src/board/Board";
|
||||||
|
import { CreateCanvas, LoadImage } from "../src/types";
|
||||||
|
import boardStyles from "../src/board/styles-board/boardStyles";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
|
const size = 1024;
|
||||||
|
const OUT_DIR = "public/boards";
|
||||||
|
|
||||||
|
const main = async () => {
|
||||||
|
const create = () => createCanvas(size, size);
|
||||||
|
const load = (src: string) => loadImage(`public${src}`);
|
||||||
|
|
||||||
|
for (const boardStyle of Object.keys(boardStyles)) {
|
||||||
|
console.log(`Generating image for board ${boardStyle}...`);
|
||||||
|
|
||||||
|
const board = new Board(
|
||||||
|
{
|
||||||
|
size,
|
||||||
|
tiles: 8,
|
||||||
|
showBorder: false,
|
||||||
|
showExtraInfo: false,
|
||||||
|
boardStyle: boardStyle as BoardStyle,
|
||||||
|
},
|
||||||
|
load as unknown as LoadImage,
|
||||||
|
create as unknown as CreateCanvas
|
||||||
|
);
|
||||||
|
|
||||||
|
await board.renderStatic();
|
||||||
|
// @ts-ignore
|
||||||
|
const image = board.canvas.toBuffer();
|
||||||
|
|
||||||
|
if (!fs.existsSync(OUT_DIR)) {
|
||||||
|
fs.mkdirSync(OUT_DIR, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(`${OUT_DIR}/${boardStyle}.png`, image);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
main();
|
||||||
@@ -1,5 +1,13 @@
|
|||||||
import { BoardConfig, Header, Position } from "./../types";
|
import {
|
||||||
import { Style, BoardStyle } from "../types";
|
BoardConfig,
|
||||||
|
CreateCanvas,
|
||||||
|
Header,
|
||||||
|
LoadImage,
|
||||||
|
Position,
|
||||||
|
Style,
|
||||||
|
BoardStyle,
|
||||||
|
} from "./../types";
|
||||||
|
// @ts-ignore
|
||||||
import drawRectangle from "./layers/drawRectangle";
|
import drawRectangle from "./layers/drawRectangle";
|
||||||
import drawCoords from "./layers/drawCoords";
|
import drawCoords from "./layers/drawCoords";
|
||||||
import drawMoveIndicators from "./layers/drawMoveIndicators";
|
import drawMoveIndicators from "./layers/drawMoveIndicators";
|
||||||
@@ -9,6 +17,7 @@ import drawExtraInfo from "./layers/drawExtraInfo";
|
|||||||
import boards from "./styles-board/boardStyles";
|
import boards from "./styles-board/boardStyles";
|
||||||
import isLink from "../utils/isLink";
|
import isLink from "../utils/isLink";
|
||||||
import { PiecesStyle } from "./styles-pieces/piecesStyles";
|
import { PiecesStyle } from "./styles-pieces/piecesStyles";
|
||||||
|
import loadImageBrowser from "./loaders/loadImage";
|
||||||
|
|
||||||
const defaultConfig: BoardConfig = {
|
const defaultConfig: BoardConfig = {
|
||||||
size: 720,
|
size: 720,
|
||||||
@@ -62,13 +71,19 @@ class Board {
|
|||||||
private ctx: CanvasRenderingContext2D;
|
private ctx: CanvasRenderingContext2D;
|
||||||
private tempCtx: CanvasRenderingContext2D;
|
private tempCtx: CanvasRenderingContext2D;
|
||||||
|
|
||||||
private tempCanvas: HTMLCanvasElement = document.createElement("canvas");
|
private tempCanvas: HTMLCanvasElement;
|
||||||
public canvas: HTMLCanvasElement = document.createElement("canvas");
|
public canvas: HTMLCanvasElement;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
config: Partial<BoardConfig> = {},
|
||||||
|
private loadImage: LoadImage = loadImageBrowser,
|
||||||
|
private createCanvas: CreateCanvas = () => document.createElement("canvas")
|
||||||
|
) {
|
||||||
|
this.canvas = this.createCanvas();
|
||||||
|
this.tempCanvas = this.createCanvas();
|
||||||
|
|
||||||
constructor(config: Partial<BoardConfig> = {}) {
|
|
||||||
const ctx = this.canvas.getContext("2d");
|
const ctx = this.canvas.getContext("2d");
|
||||||
const tempCtx = this.tempCanvas.getContext("2d");
|
const tempCtx = this.tempCanvas.getContext("2d");
|
||||||
this.canvas.classList.add("board");
|
|
||||||
|
|
||||||
if (ctx === null || tempCtx === null) {
|
if (ctx === null || tempCtx === null) {
|
||||||
throw new Error("Cannot create canvas 2D context");
|
throw new Error("Cannot create canvas 2D context");
|
||||||
@@ -94,7 +109,7 @@ class Board {
|
|||||||
this.cfg = cfg;
|
this.cfg = cfg;
|
||||||
|
|
||||||
this.setSize(cfg.size);
|
this.setSize(cfg.size);
|
||||||
this.setStyle(cfg.boardStyle);
|
this.setStyle(cfg.boardStyle, refresh);
|
||||||
|
|
||||||
if (refresh) {
|
if (refresh) {
|
||||||
await this.refresh();
|
await this.refresh();
|
||||||
@@ -151,10 +166,12 @@ class Board {
|
|||||||
this.borderScale = scale;
|
this.borderScale = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
setStyle(style: BoardStyle) {
|
setStyle(style: BoardStyle, refresh: boolean = true) {
|
||||||
this.style = boards[style];
|
this.style = boards[style];
|
||||||
this.cfg.boardStyle = style;
|
this.cfg.boardStyle = style;
|
||||||
|
if (refresh) {
|
||||||
this.refresh();
|
this.refresh();
|
||||||
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,12 +269,13 @@ class Board {
|
|||||||
this.scale,
|
this.scale,
|
||||||
this.margin,
|
this.margin,
|
||||||
this.style,
|
this.style,
|
||||||
this.getFinalHeader()
|
this.getFinalHeader(),
|
||||||
|
this.loadImage
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async renderBackground() {
|
async renderBackground() {
|
||||||
const canvas = document.createElement("canvas");
|
const canvas = this.createCanvas();
|
||||||
const ctx = canvas.getContext("2d") as CanvasRenderingContext2D;
|
const ctx = canvas.getContext("2d") as CanvasRenderingContext2D;
|
||||||
|
|
||||||
canvas.width = this.size;
|
canvas.width = this.size;
|
||||||
@@ -265,7 +283,19 @@ class Board {
|
|||||||
|
|
||||||
const { background, dark, light, border, coords } = this.style;
|
const { background, dark, light, border, coords } = this.style;
|
||||||
|
|
||||||
await drawRectangle(ctx, this.width, this.height, 0, 0, border);
|
ctx.clearRect(0, 0, this.size, this.size);
|
||||||
|
ctx.fillStyle = "#FF0000";
|
||||||
|
ctx.fillRect(0, 0, this.size, this.size);
|
||||||
|
|
||||||
|
await drawRectangle(
|
||||||
|
ctx,
|
||||||
|
this.width,
|
||||||
|
this.height,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
border,
|
||||||
|
this.loadImage
|
||||||
|
);
|
||||||
|
|
||||||
await drawRectangle(
|
await drawRectangle(
|
||||||
ctx,
|
ctx,
|
||||||
@@ -274,6 +304,7 @@ class Board {
|
|||||||
this.cfg.showBorder ? this.borderWidth : 0,
|
this.cfg.showBorder ? this.borderWidth : 0,
|
||||||
(this.cfg.showBorder ? this.borderWidth : 0) + this.margin,
|
(this.cfg.showBorder ? this.borderWidth : 0) + this.margin,
|
||||||
background,
|
background,
|
||||||
|
this.loadImage,
|
||||||
this.cfg.tiles
|
this.cfg.tiles
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -288,7 +319,15 @@ class Board {
|
|||||||
const x = file * this.squareSize + this.borderWidth;
|
const x = file * this.squareSize + this.borderWidth;
|
||||||
const y = rank * this.squareSize + this.borderWidth + this.margin;
|
const y = rank * this.squareSize + this.borderWidth + this.margin;
|
||||||
|
|
||||||
await drawRectangle(ctx, this.squareSize, this.squareSize, x, y, style);
|
await drawRectangle(
|
||||||
|
ctx,
|
||||||
|
this.squareSize,
|
||||||
|
this.squareSize,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
style,
|
||||||
|
this.loadImage
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,6 +345,7 @@ class Board {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("Background rendered!");
|
||||||
this.background = canvas;
|
this.background = canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,7 +371,8 @@ class Board {
|
|||||||
this.borderWidth,
|
this.borderWidth,
|
||||||
this.cfg.tiles,
|
this.cfg.tiles,
|
||||||
this.cfg.flipped,
|
this.cfg.flipped,
|
||||||
this.margin
|
this.margin,
|
||||||
|
this.loadImage
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +402,8 @@ class Board {
|
|||||||
this.cfg.flipped,
|
this.cfg.flipped,
|
||||||
this.margin,
|
this.margin,
|
||||||
this.cfg.piecesStyle,
|
this.cfg.piecesStyle,
|
||||||
this.cfg.showShadows
|
this.cfg.showShadows,
|
||||||
|
this.loadImage
|
||||||
);
|
);
|
||||||
|
|
||||||
if (this.cfg.showExtraInfo && header) {
|
if (this.cfg.showExtraInfo && header) {
|
||||||
@@ -384,6 +426,55 @@ class Board {
|
|||||||
this.ctx.drawImage(this.tempCanvas, 0, 0);
|
this.ctx.drawImage(this.tempCanvas, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async renderStatic() {
|
||||||
|
this.ctx.clearRect(0, 0, this.size, this.size);
|
||||||
|
const { background, dark, light, border } = this.style;
|
||||||
|
|
||||||
|
drawRectangle(
|
||||||
|
this.ctx,
|
||||||
|
this.width,
|
||||||
|
this.height,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
border,
|
||||||
|
this.loadImage
|
||||||
|
);
|
||||||
|
|
||||||
|
drawRectangle(
|
||||||
|
this.ctx,
|
||||||
|
this.innerSize,
|
||||||
|
this.innerSize,
|
||||||
|
this.cfg.showBorder ? this.borderWidth : 0,
|
||||||
|
(this.cfg.showBorder ? this.borderWidth : 0) + this.margin,
|
||||||
|
background,
|
||||||
|
this.loadImage,
|
||||||
|
this.cfg.tiles
|
||||||
|
);
|
||||||
|
|
||||||
|
for (let rank = 0; rank < this.cfg.tiles; rank++) {
|
||||||
|
for (let file = 0; file < this.cfg.tiles; file++) {
|
||||||
|
const style =
|
||||||
|
(file % 2 === 0 && rank % 2 === 0) ||
|
||||||
|
(file % 2 !== 0 && rank % 2 !== 0)
|
||||||
|
? light
|
||||||
|
: dark;
|
||||||
|
|
||||||
|
const x = file * this.squareSize + this.borderWidth;
|
||||||
|
const y = rank * this.squareSize + this.borderWidth + this.margin;
|
||||||
|
|
||||||
|
drawRectangle(
|
||||||
|
this.ctx,
|
||||||
|
this.squareSize,
|
||||||
|
this.squareSize,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
style,
|
||||||
|
this.loadImage
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
toImgUrl() {
|
toImgUrl() {
|
||||||
return this.canvas.toDataURL();
|
return this.canvas.toDataURL();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { Header, Style } from "../../types";
|
import { Header, LoadImage, Style } from "../../types";
|
||||||
import drawRectangle from "./drawRectangle";
|
import drawRectangle from "./drawRectangle";
|
||||||
import drawText from "./drawText";
|
import drawText from "./drawText";
|
||||||
import loadImage from "../loaders/loadImage";
|
|
||||||
|
|
||||||
const drawHeader = async (
|
const drawHeader = async (
|
||||||
ctx: CanvasRenderingContext2D,
|
ctx: CanvasRenderingContext2D,
|
||||||
@@ -9,10 +8,19 @@ const drawHeader = async (
|
|||||||
scale: number,
|
scale: number,
|
||||||
margin: number,
|
margin: number,
|
||||||
style: Style,
|
style: Style,
|
||||||
data: Header
|
data: Header,
|
||||||
|
loadImage: LoadImage
|
||||||
) => {
|
) => {
|
||||||
ctx.clearRect(0, 0, size, size);
|
ctx.clearRect(0, 0, size, size);
|
||||||
await drawRectangle(ctx, size, size + margin * 2, 0, 0, style.border);
|
await drawRectangle(
|
||||||
|
ctx,
|
||||||
|
size,
|
||||||
|
size + margin * 2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
style.border,
|
||||||
|
loadImage
|
||||||
|
);
|
||||||
|
|
||||||
const font = "Ubuntu";
|
const font = "Ubuntu";
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Solid } from "./../../types";
|
import { Solid, LoadImage } from "./../../types";
|
||||||
import { Move } from "chess.js";
|
import { Move } from "chess.js";
|
||||||
import { Style, SquareStyle } from "../../types";
|
import { Style, SquareStyle } from "../../types";
|
||||||
import drawRectangle from "./drawRectangle";
|
import drawRectangle from "./drawRectangle";
|
||||||
@@ -21,7 +21,8 @@ const drawMoveIndicators = async (
|
|||||||
borderWidth: number,
|
borderWidth: number,
|
||||||
tiles: number,
|
tiles: number,
|
||||||
flipped: boolean,
|
flipped: boolean,
|
||||||
margin: number
|
margin: number,
|
||||||
|
loadImage: LoadImage
|
||||||
) => {
|
) => {
|
||||||
const [x0, y0] = notationToXY(move.from, flipped, tiles);
|
const [x0, y0] = notationToXY(move.from, flipped, tiles);
|
||||||
const [x1, y1] = notationToXY(move.to, flipped, tiles);
|
const [x1, y1] = notationToXY(move.to, flipped, tiles);
|
||||||
@@ -62,8 +63,24 @@ const drawMoveIndicators = async (
|
|||||||
toStyle = fromStyle;
|
toStyle = fromStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
drawRectangle(ctx, squareSize, squareSize, fromX, fromY + margin, fromStyle);
|
drawRectangle(
|
||||||
drawRectangle(ctx, squareSize, squareSize, toX, toY + margin, toStyle);
|
ctx,
|
||||||
|
squareSize,
|
||||||
|
squareSize,
|
||||||
|
fromX,
|
||||||
|
fromY + margin,
|
||||||
|
fromStyle,
|
||||||
|
loadImage
|
||||||
|
);
|
||||||
|
drawRectangle(
|
||||||
|
ctx,
|
||||||
|
squareSize,
|
||||||
|
squareSize,
|
||||||
|
toX,
|
||||||
|
toY + margin,
|
||||||
|
toStyle,
|
||||||
|
loadImage
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default drawMoveIndicators;
|
export default drawMoveIndicators;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { state } from "../../state";
|
import { LoadImage, Position } from "../../types";
|
||||||
import { Position } from "../../types";
|
import PiecesCache from "../loaders/PiecesCache";
|
||||||
import ImagesCache from "../loaders/PiecesCache";
|
|
||||||
import { PiecesStyle } from "../styles-pieces/piecesStyles";
|
import { PiecesStyle } from "../styles-pieces/piecesStyles";
|
||||||
|
|
||||||
const drawPieces = async (
|
const drawPieces = async (
|
||||||
@@ -11,7 +10,8 @@ const drawPieces = async (
|
|||||||
flipped: boolean,
|
flipped: boolean,
|
||||||
margin: number,
|
margin: number,
|
||||||
piecesStyle: PiecesStyle,
|
piecesStyle: PiecesStyle,
|
||||||
shadow: boolean = true
|
shadow: boolean = true,
|
||||||
|
loadImage: LoadImage
|
||||||
) => {
|
) => {
|
||||||
const { placement, check, mate, turn } = position;
|
const { placement, check, mate, turn } = position;
|
||||||
ctx.shadowColor = "rgba(0, 0, 0, 0)";
|
ctx.shadowColor = "rgba(0, 0, 0, 0)";
|
||||||
@@ -20,7 +20,7 @@ const drawPieces = async (
|
|||||||
ctx.shadowOffsetY = 0;
|
ctx.shadowOffsetY = 0;
|
||||||
|
|
||||||
for (const { x, y, type, color } of placement) {
|
for (const { x, y, type, color } of placement) {
|
||||||
const img = await ImagesCache.get(piecesStyle, type, color);
|
const img = await PiecesCache.get(piecesStyle, type, color, loadImage);
|
||||||
const rank = flipped ? 8 - 1 - y : y;
|
const rank = flipped ? 8 - 1 - y : y;
|
||||||
const file = flipped ? 8 - 1 - x : x;
|
const file = flipped ? 8 - 1 - x : x;
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ const drawPieces = async (
|
|||||||
const hex = mate ? "#ff002f" : "#ffa600";
|
const hex = mate ? "#ff002f" : "#ffa600";
|
||||||
|
|
||||||
ctx.shadowColor = hex;
|
ctx.shadowColor = hex;
|
||||||
ctx.shadowBlur = squareSize * (state.mobile ? 0.15 : 0.15);
|
ctx.shadowBlur = squareSize * 0.15;
|
||||||
ctx.shadowOffsetX = 0;
|
ctx.shadowOffsetX = 0;
|
||||||
ctx.shadowOffsetY = 0;
|
ctx.shadowOffsetY = 0;
|
||||||
ctx.drawImage(
|
ctx.drawImage(
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { SquareStyle } from "../../types";
|
import { LoadImage, SquareStyle } from "../../types";
|
||||||
import createGradient from "../fill/createGradient";
|
import createGradient from "../fill/createGradient";
|
||||||
import loadImage from "../loaders/loadImage";
|
|
||||||
|
|
||||||
const drawRectangle = async (
|
const drawRectangle = async (
|
||||||
ctx: CanvasRenderingContext2D,
|
ctx: CanvasRenderingContext2D,
|
||||||
@@ -9,6 +8,7 @@ const drawRectangle = async (
|
|||||||
x: number,
|
x: number,
|
||||||
y: number,
|
y: number,
|
||||||
squareStyle: SquareStyle,
|
squareStyle: SquareStyle,
|
||||||
|
loadImage: LoadImage,
|
||||||
tiles: number = 8
|
tiles: number = 8
|
||||||
) => {
|
) => {
|
||||||
if (squareStyle.type === "image") {
|
if (squareStyle.type === "image") {
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
import { PieceType, PieceColor } from "../../types";
|
import { PieceType, PieceColor, LoadImage } from "../../types";
|
||||||
import {
|
import {
|
||||||
PiecesStyle,
|
PiecesStyle,
|
||||||
pieceNames,
|
pieceNames,
|
||||||
PieceName,
|
PieceName,
|
||||||
} from "../styles-pieces/piecesStyles";
|
} from "../styles-pieces/piecesStyles";
|
||||||
import loadImage from "./loadImage";
|
|
||||||
|
|
||||||
let style: PiecesStyle | null = null;
|
let style: PiecesStyle | null = null;
|
||||||
let piecesImages: Map<string, HTMLImageElement> = new Map();
|
let piecesImages: Map<string, HTMLImageElement> = new Map();
|
||||||
|
|
||||||
const PiecesCache = {
|
const PiecesCache = {
|
||||||
async load(piecesSetName: PiecesStyle) {
|
async load(piecesSetName: PiecesStyle, loadImage: LoadImage) {
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
pieceNames.map((key) => {
|
pieceNames.map((key) => {
|
||||||
const src = `/pieces/${piecesSetName}/${key}.svg`;
|
const src = `/pieces/${piecesSetName}/${key}.svg`;
|
||||||
@@ -24,10 +23,11 @@ const PiecesCache = {
|
|||||||
async get(
|
async get(
|
||||||
piecesSetName: PiecesStyle,
|
piecesSetName: PiecesStyle,
|
||||||
pieceName: PieceType,
|
pieceName: PieceType,
|
||||||
pieceColor: PieceColor
|
pieceColor: PieceColor,
|
||||||
|
loadImage: LoadImage
|
||||||
) {
|
) {
|
||||||
if (style !== piecesSetName) {
|
if (style !== piecesSetName) {
|
||||||
await this.load(piecesSetName);
|
await this.load(piecesSetName, loadImage);
|
||||||
style = piecesSetName;
|
style = piecesSetName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,23 +35,6 @@ const PiecesCache = {
|
|||||||
|
|
||||||
return piecesImages.get(piece) as HTMLImageElement;
|
return piecesImages.get(piece) as HTMLImageElement;
|
||||||
},
|
},
|
||||||
|
|
||||||
async getDataURLs() {
|
|
||||||
return Promise.all(
|
|
||||||
[...piecesImages.entries()].map(
|
|
||||||
async ([key, img]: [string, HTMLImageElement]) => {
|
|
||||||
let blob = await fetch(img.src).then((r) => r.blob());
|
|
||||||
let dataUrl = await new Promise((resolve) => {
|
|
||||||
let reader = new FileReader();
|
|
||||||
reader.onload = () => resolve(reader.result);
|
|
||||||
reader.readAsDataURL(blob);
|
|
||||||
});
|
|
||||||
|
|
||||||
return [key, dataUrl];
|
|
||||||
}
|
|
||||||
)
|
|
||||||
);
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default PiecesCache;
|
export default PiecesCache;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ const piecesStyles = [
|
|||||||
"cardinal",
|
"cardinal",
|
||||||
"cases",
|
"cases",
|
||||||
"cburnett",
|
"cburnett",
|
||||||
|
"checkers",
|
||||||
"chess7",
|
"chess7",
|
||||||
"chessnut",
|
"chessnut",
|
||||||
"companion",
|
"companion",
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ class Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.ply > 0 && state.siteConfig.sounds) {
|
if (this.ply > 0 && state.siteConfig.sounds) {
|
||||||
state.boardConfig.piecesStyle.includes("anarc")
|
state.boardConfig.piecesStyle.includes("anarchy")
|
||||||
? this.playAnarchySFX(position)
|
? this.playAnarchySFX(position)
|
||||||
: this.playSFX(position);
|
: this.playSFX(position);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,3 +205,7 @@ export type Header = {
|
|||||||
Site: string | null;
|
Site: string | null;
|
||||||
Result: string | null;
|
Result: string | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type LoadImage = (src: string) => Promise<HTMLImageElement>;
|
||||||
|
|
||||||
|
export type CreateCanvas = () => HTMLCanvasElement;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
"noImplicitReturns": true,
|
"noImplicitReturns": true,
|
||||||
"jsx": "preserve",
|
"jsx": "preserve",
|
||||||
"jsxImportSource": "solid-js",
|
"jsxImportSource": "solid-js",
|
||||||
"types": ["vite/client"]
|
"types": ["vite/client", "node"]
|
||||||
},
|
},
|
||||||
"include": ["./src", "public/gif.worker.js", "public/gif.worker.js"]
|
"include": ["./src", "public/gif.worker.js", "public/gif.worker.js"]
|
||||||
}
|
}
|
||||||
|
|||||||
21
tsconfig.scripts.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ESNext",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"module": "CommonJS",
|
||||||
|
"lib": ["ESNext", "DOM"],
|
||||||
|
"moduleResolution": "Node",
|
||||||
|
"strict": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"jsx": "preserve",
|
||||||
|
"jsxImportSource": "solid-js",
|
||||||
|
"types": ["vite/client", "node"]
|
||||||
|
},
|
||||||
|
"include": ["./src", "public/gif.worker.js", "public/gif.worker.js"]
|
||||||
|
}
|
||||||