chessground
Version:
lichess.org chess ui
59 lines • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Chessground = void 0;
const api_1 = require("./api");
const config_1 = require("./config");
const state_1 = require("./state");
const wrap_1 = require("./wrap");
const events = require("./events");
const render_1 = require("./render");
const svg = require("./svg");
const util = require("./util");
function Chessground(element, config) {
const maybeState = state_1.defaults();
config_1.configure(maybeState, config || {});
function redrawAll() {
const prevUnbind = 'dom' in maybeState ? maybeState.dom.unbind : undefined;
const relative = maybeState.viewOnly && !maybeState.drawable.visible, elements = wrap_1.renderWrap(element, maybeState, relative), bounds = util.memo(() => elements.board.getBoundingClientRect()), redrawNow = (skipSvg) => {
render_1.render(state);
if (!skipSvg && elements.svg)
svg.renderSvg(state, elements.svg, elements.customSvg);
}, boundsUpdated = () => {
bounds.clear();
render_1.updateBounds(state);
if (elements.svg)
svg.renderSvg(state, elements.svg, elements.customSvg);
};
const state = maybeState;
state.dom = {
elements,
bounds,
redraw: debounceRedraw(redrawNow),
redrawNow,
unbind: prevUnbind,
relative,
};
state.drawable.prevSvgHash = '';
redrawNow(false);
events.bindBoard(state, boundsUpdated);
if (!prevUnbind)
state.dom.unbind = events.bindDocument(state, boundsUpdated);
state.events.insert && state.events.insert(elements);
return state;
}
return api_1.start(redrawAll(), redrawAll);
}
exports.Chessground = Chessground;
function debounceRedraw(redrawNow) {
let redrawing = false;
return () => {
if (redrawing)
return;
redrawing = true;
requestAnimationFrame(() => {
redrawNow();
redrawing = false;
});
};
}
//# sourceMappingURL=chessground.js.map