UNPKG

chessground

Version:
200 lines (196 loc) 7.28 kB
import * as fen from './fen.js'; import { AnimCurrent } from './anim.js'; import { DragCurrent } from './drag.js'; import { Drawable } from './draw.js'; import { timer } from './util.js'; import * as cg from './types.js'; export interface HeadlessState { pieces: cg.Pieces; orientation: cg.Color; // board orientation. white | black turnColor: cg.Color; // turn to play. white | black check?: cg.Key; // square currently in check "a2" lastMove?: cg.Key[]; // squares part of the last move ["c3"; "c4"] selected?: cg.Key; // square currently selected "a1" coordinates: boolean; // include coords attributes coordinatesOnSquares: boolean; // include coords attributes on every square ranksPosition: cg.RanksPosition; // position ranks on either side. left | right autoCastle: boolean; // immediately complete the castle by moving the rook after king move viewOnly: boolean; // don't bind events: the user will never be able to move pieces around disableContextMenu: boolean; // because who needs a context menu on a chessboard addPieceZIndex: boolean; // adds z-index values to pieces (for 3D) addDimensionsCssVarsTo?: HTMLElement; // add ---cg-width and ---cg-height CSS vars containing the board's dimensions to this element blockTouchScroll: boolean; // block scrolling via touch dragging on the board, e.g. for coordinate training pieceKey: boolean; // add a data-key attribute to piece elements trustAllEvents?: boolean; // disable checking for human only input (e.isTrusted) highlight: { lastMove: boolean; // add last-move class to squares check: boolean; // add check class to squares custom?: cg.SquareClasses; // add custom classes to custom squares }; animation: { enabled: boolean; duration: number; current?: AnimCurrent; }; movable: { free: boolean; // all moves are valid - board editor color?: cg.Color | 'both'; // color that can move. white | black | both dests?: cg.Dests; // valid moves. {"a2" ["a3" "a4"] "b1" ["a3" "c3"]} showDests: boolean; // whether to add the move-dest class on squares events: { after?: (orig: cg.Key, dest: cg.Key, metadata: cg.MoveMetadata) => void; // called after the move has been played afterNewPiece?: (role: cg.Role, key: cg.Key, metadata: cg.MoveMetadata) => void; // called after a new piece is dropped on the board }; rookCastle: boolean; // castle by moving the king to the rook }; premovable: { enabled: boolean; // allow premoves for color that can not move showDests: boolean; // whether to add the premove-dest class on squares castle: boolean; // whether to allow king castle premoves dests?: cg.Key[]; // premove destinations for the current selection customDests?: cg.Dests; // use custom valid premoves. {"a2" ["a3" "a4"] "b1" ["a3" "c3"]} current?: cg.KeyPair; // keys of the current saved premove ["e2" "e4"] events: { set?: (orig: cg.Key, dest: cg.Key, metadata?: cg.SetPremoveMetadata) => void; // called after the premove has been set unset?: () => void; // called after the premove has been unset }; }; predroppable: { enabled: boolean; // allow predrops for color that can not move current?: { // current saved predrop {role: 'knight'; key: 'e4'} role: cg.Role; key: cg.Key; }; events: { set?: (role: cg.Role, key: cg.Key) => void; // called after the predrop has been set unset?: () => void; // called after the predrop has been unset }; }; draggable: { enabled: boolean; // allow moves & premoves to use drag'n drop distance: number; // minimum distance to initiate a drag; in pixels autoDistance: boolean; // lets chessground set distance to zero when user drags pieces showGhost: boolean; // show ghost of piece being dragged deleteOnDropOff: boolean; // delete a piece when it is dropped off the board current?: DragCurrent; }; dropmode: { active: boolean; piece?: cg.Piece; }; selectable: { // disable to enforce dragging over click-click move enabled: boolean; }; stats: { // was last piece dragged or clicked? // needs default to false for touch dragged: boolean; ctrlKey?: boolean; }; events: { change?: () => void; // called after the situation changes on the board // called after a piece has been moved. // capturedPiece is undefined or like {color: 'white'; 'role': 'queen'} move?: (orig: cg.Key, dest: cg.Key, capturedPiece?: cg.Piece) => void; dropNewPiece?: (piece: cg.Piece, key: cg.Key) => void; select?: (key: cg.Key) => void; // called when a square is selected insert?: (elements: cg.Elements) => void; // when the board DOM has been (re)inserted }; drawable: Drawable; exploding?: cg.Exploding; hold: cg.Timer; } export interface State extends HeadlessState { dom: cg.Dom; } export function defaults(): HeadlessState { return { pieces: fen.read(fen.initial), orientation: 'white', turnColor: 'white', coordinates: true, coordinatesOnSquares: false, ranksPosition: 'right', autoCastle: true, viewOnly: false, disableContextMenu: false, addPieceZIndex: false, blockTouchScroll: false, pieceKey: false, trustAllEvents: false, highlight: { lastMove: true, check: true, }, animation: { enabled: true, duration: 200, }, movable: { free: true, color: 'both', showDests: true, events: {}, rookCastle: true, }, premovable: { enabled: true, showDests: true, castle: true, events: {}, }, predroppable: { enabled: false, events: {}, }, draggable: { enabled: true, distance: 3, autoDistance: true, showGhost: true, deleteOnDropOff: false, }, dropmode: { active: false, }, selectable: { enabled: true, }, stats: { // on touchscreen, default to "tap-tap" moves // instead of drag dragged: !('ontouchstart' in window), }, events: {}, drawable: { enabled: true, // can draw visible: true, // can view defaultSnapToValidMove: true, eraseOnClick: true, shapes: [], autoShapes: [], brushes: { green: { key: 'g', color: '#15781B', opacity: 1, lineWidth: 10 }, red: { key: 'r', color: '#882020', opacity: 1, lineWidth: 10 }, blue: { key: 'b', color: '#003088', opacity: 1, lineWidth: 10 }, yellow: { key: 'y', color: '#e68f00', opacity: 1, lineWidth: 10 }, paleBlue: { key: 'pb', color: '#003088', opacity: 0.4, lineWidth: 15 }, paleGreen: { key: 'pg', color: '#15781B', opacity: 0.4, lineWidth: 15 }, paleRed: { key: 'pr', color: '#882020', opacity: 0.4, lineWidth: 15 }, paleGrey: { key: 'pgr', color: '#4a4a4a', opacity: 0.35, lineWidth: 15, }, purple: { key: 'purple', color: '#68217a', opacity: 0.65, lineWidth: 10 }, pink: { key: 'pink', color: '#ee2080', opacity: 0.5, lineWidth: 10 }, white: { key: 'white', color: 'white', opacity: 1, lineWidth: 10 }, }, prevSvgHash: '', }, hold: timer(), }; }