This commit is contained in:
Maciej Caderek
2022-03-31 22:38:35 +02:00
parent 276c8d221f
commit a003ab6089
5 changed files with 71 additions and 29 deletions

View File

@@ -1,25 +1,25 @@
import { decompressPGN } from "../game/PGNHelpers";
// import { decompressPGN } from "../game/PGNHelpers";
const HEADER_REGEX = /^#(pgn|fen)\//;
// const HEADER_REGEX = /^#(pgn|fen)\//;
const extractUrlData = () => {
const hash = window.location.hash;
// const extractUrlData = () => {
// const hash = window.location.hash;
if (!HEADER_REGEX.test(hash)) {
return {
pgn: "",
fen: "",
};
}
// if (!HEADER_REGEX.test(hash)) {
// return {
// pgn: "",
// fen: "",
// };
// }
const [format, ...chunks] = hash.slice(1).split("/");
// const [format, ...chunks] = hash.slice(1).split("/");
const data = chunks.join("/");
// const data = chunks.join("/");
return {
pgn: format === "pgn" ? decompressPGN(data) : "",
fen: format === "fen" ? decodeURI(data) : "",
};
};
// return {
// pgn: format === "pgn" ? decompressPGN(data) : "",
// fen: format === "fen" ? decodeURI(data) : "",
// };
// };
export default extractUrlData;
// export default extractUrlData;

View File

@@ -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;
},