WIP
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
import { compressPGN } from "../game/PGNHelpers";
|
||||
import { compressPGN, decompressPGN } from "../game/PGNHelpers";
|
||||
|
||||
type LinkData = {
|
||||
pgn: string;
|
||||
fen: string;
|
||||
side: "b" | "w";
|
||||
ply: number;
|
||||
};
|
||||
|
||||
type LinkConfig = {
|
||||
pgn?: string;
|
||||
fen?: string;
|
||||
side?: "b" | "w";
|
||||
@@ -17,7 +24,7 @@ const defaultLinkData = {
|
||||
let linkData: LinkData = { ...defaultLinkData } as LinkData;
|
||||
|
||||
const link = {
|
||||
set(data: LinkData) {
|
||||
set(data: LinkConfig) {
|
||||
if (data.fen) {
|
||||
linkData = { ...defaultLinkData } as LinkData;
|
||||
linkData.fen = data.fen;
|
||||
@@ -46,6 +53,28 @@ const link = {
|
||||
return location.href;
|
||||
},
|
||||
|
||||
read() {
|
||||
const [type, ...rest] = location.hash.split("/");
|
||||
|
||||
if (/fen/.test(type)) {
|
||||
linkData = { ...defaultLinkData } as LinkData;
|
||||
linkData.fen = decodeURI(rest.join("/"));
|
||||
} else if (/pgn/.test(type)) {
|
||||
const [side, ply, ...pgn] = rest;
|
||||
linkData.side = side as "w" | "b";
|
||||
linkData.ply = Number(ply);
|
||||
linkData.pgn = pgn.join("/");
|
||||
linkData.fen = "";
|
||||
}
|
||||
|
||||
return {
|
||||
pgn: linkData.pgn ? decompressPGN(linkData.pgn) : "",
|
||||
fen: linkData.fen,
|
||||
side: linkData.side,
|
||||
ply: linkData.ply,
|
||||
};
|
||||
},
|
||||
|
||||
entries() {
|
||||
return { ...linkData } as LinkData;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user