chessground
Version:
lichess.org chess ui
106 lines • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.computeSquareCenter = exports.createEl = exports.isRightButton = exports.eventPosition = exports.setVisible = exports.translateRel = exports.translateAbs = exports.posToTranslateRel = exports.posToTranslateAbs = exports.samePiece = exports.distanceSq = exports.opposite = exports.timer = exports.memo = exports.allPos = exports.key2pos = exports.pos2key = exports.allKeys = exports.invRanks = void 0;
const cg = require("./types");
exports.invRanks = [...cg.ranks].reverse();
exports.allKeys = Array.prototype.concat(...cg.files.map(c => cg.ranks.map(r => c + r)));
const pos2key = (pos) => exports.allKeys[8 * pos[0] + pos[1]];
exports.pos2key = pos2key;
const key2pos = (k) => [k.charCodeAt(0) - 97, k.charCodeAt(1) - 49];
exports.key2pos = key2pos;
exports.allPos = exports.allKeys.map(exports.key2pos);
function memo(f) {
let v;
const ret = () => {
if (v === undefined)
v = f();
return v;
};
ret.clear = () => {
v = undefined;
};
return ret;
}
exports.memo = memo;
const timer = () => {
let startAt;
return {
start() {
startAt = performance.now();
},
cancel() {
startAt = undefined;
},
stop() {
if (!startAt)
return 0;
const time = performance.now() - startAt;
startAt = undefined;
return time;
},
};
};
exports.timer = timer;
const opposite = (c) => (c === 'white' ? 'black' : 'white');
exports.opposite = opposite;
const distanceSq = (pos1, pos2) => {
const dx = pos1[0] - pos2[0], dy = pos1[1] - pos2[1];
return dx * dx + dy * dy;
};
exports.distanceSq = distanceSq;
const samePiece = (p1, p2) => p1.role === p2.role && p1.color === p2.color;
exports.samePiece = samePiece;
const posToTranslateBase = (pos, asWhite, xFactor, yFactor) => [
(asWhite ? pos[0] : 7 - pos[0]) * xFactor,
(asWhite ? 7 - pos[1] : pos[1]) * yFactor,
];
const posToTranslateAbs = (bounds) => {
const xFactor = bounds.width / 8, yFactor = bounds.height / 8;
return (pos, asWhite) => posToTranslateBase(pos, asWhite, xFactor, yFactor);
};
exports.posToTranslateAbs = posToTranslateAbs;
const posToTranslateRel = (pos, asWhite) => posToTranslateBase(pos, asWhite, 100, 100);
exports.posToTranslateRel = posToTranslateRel;
const translateAbs = (el, pos) => {
el.style.transform = `translate(${pos[0]}px,${pos[1]}px)`;
};
exports.translateAbs = translateAbs;
const translateRel = (el, percents) => {
el.style.transform = `translate(${percents[0]}%,${percents[1]}%)`;
};
exports.translateRel = translateRel;
const setVisible = (el, v) => {
el.style.visibility = v ? 'visible' : 'hidden';
};
exports.setVisible = setVisible;
const eventPosition = (e) => {
var _a;
if (e.clientX || e.clientX === 0)
return [e.clientX, e.clientY];
if ((_a = e.targetTouches) === null || _a === void 0 ? void 0 : _a[0])
return [e.targetTouches[0].clientX, e.targetTouches[0].clientY];
return;
};
exports.eventPosition = eventPosition;
const isRightButton = (e) => e.buttons === 2 || e.button === 2;
exports.isRightButton = isRightButton;
const createEl = (tagName, className) => {
const el = document.createElement(tagName);
if (className)
el.className = className;
return el;
};
exports.createEl = createEl;
function computeSquareCenter(key, asWhite, bounds) {
const pos = exports.key2pos(key);
if (!asWhite) {
pos[0] = 7 - pos[0];
pos[1] = 7 - pos[1];
}
return [
bounds.left + (bounds.width * pos[0]) / 8 + bounds.width / 16,
bounds.top + (bounds.height * (7 - pos[1])) / 8 + bounds.height / 16,
];
}
exports.computeSquareCenter = computeSquareCenter;
//# sourceMappingURL=util.js.map