kokopu-react 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.yml +1 -1
- package/CHANGELOG.md +6 -0
- package/dist/lib/chessboard/BoardProperties.js.map +1 -1
- package/dist/lib/chessboard/Chessboard.css +13 -13
- package/dist/lib/chessboard/Chessboard.js.map +1 -1
- package/dist/lib/chessboard/ChessboardImpl.js.map +1 -1
- package/dist/lib/chessboard/Draggable.js.map +1 -1
- package/dist/lib/chessboard/Motion.js.map +1 -1
- package/dist/lib/chessboard/colorsets.js.map +1 -1
- package/dist/lib/chessboard/piecesets.js.map +1 -1
- package/dist/lib/errorbox/ErrorBox.css +18 -18
- package/dist/lib/errorbox/ErrorBox.js.map +1 -1
- package/dist/lib/errorbox/parsing.js.map +1 -1
- package/dist/lib/exception.js.map +1 -1
- package/dist/lib/i18n.d.ts +1 -0
- package/dist/lib/i18n.js +1 -0
- package/dist/lib/i18n.js.map +1 -1
- package/dist/lib/icons/AnnotationSymbolShape.css +6 -6
- package/dist/lib/icons/AnnotationSymbolShape.js.map +1 -1
- package/dist/lib/icons/ArrowMarkerIcon.js.map +1 -1
- package/dist/lib/icons/ArrowTip.js.map +1 -1
- package/dist/lib/icons/ChessPieceIcon.js.map +1 -1
- package/dist/lib/icons/SquareMarkerIcon.js.map +1 -1
- package/dist/lib/icons/TextMarkerIcon.js.map +1 -1
- package/dist/lib/icons/arrow.css +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/movetext/Movetext.css +27 -27
- package/dist/lib/movetext/Movetext.js.map +1 -1
- package/dist/lib/movetext/MovetextImpl.js.map +1 -1
- package/dist/lib/movetext/fonts.css +7 -7
- package/dist/lib/movetext/htmlFilter.js.map +1 -1
- package/dist/lib/movetext/moveFormatter.js.map +1 -1
- package/dist/lib/navigationboard/NavigationBoard.d.ts +39 -1
- package/dist/lib/navigationboard/NavigationBoard.js +94 -11
- package/dist/lib/navigationboard/NavigationBoard.js.map +1 -1
- package/dist/lib/navigationboard/NavigationButton.d.ts +54 -0
- package/dist/lib/navigationboard/NavigationButton.js +35 -0
- package/dist/lib/navigationboard/NavigationButton.js.map +1 -0
- package/dist/lib/navigationboard/NavigationField.css +7 -7
- package/dist/lib/navigationboard/NavigationField.js.map +1 -1
- package/dist/lib/navigationboard/NavigationToolbar.css +16 -13
- package/dist/lib/navigationboard/NavigationToolbar.d.ts +3 -10
- package/dist/lib/navigationboard/NavigationToolbar.js +31 -82
- package/dist/lib/navigationboard/NavigationToolbar.js.map +1 -1
- package/dist/lib/navigationboard/iconPaths.d.ts +29 -0
- package/dist/lib/navigationboard/iconPaths.js +91 -0
- package/dist/lib/navigationboard/iconPaths.js.map +1 -0
- package/dist/lib/sanitization.js.map +1 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/util.js.map +1 -1
- package/doc_src/demo/PageChessboardBase.tsx +115 -115
- package/doc_src/demo/PageChessboardInteraction.tsx +303 -303
- package/doc_src/demo/PageChessboardMove.tsx +173 -173
- package/doc_src/demo/PageChessboardSmallScreens.tsx +94 -94
- package/doc_src/demo/PageMovetextBase.tsx +180 -180
- package/doc_src/demo/PageMovetextInteraction.tsx +123 -123
- package/doc_src/demo/PageNavigationBoardBase.tsx +144 -137
- package/doc_src/demo/PageNavigationBoardUncontrolledVsControlled.tsx +69 -69
- package/doc_src/demo/decs.d.ts +4 -4
- package/doc_src/demo/demo.css +12 -12
- package/doc_src/demo/util.ts +1 -1
- package/doc_src/examples/NavigationBoard.md +1 -1
- package/doc_src/theming/LogoRenderer.js +13 -13
- package/doc_src/theming/theming.css +5 -5
- package/package.json +95 -95
- package/scripts/doc.styleguide.config.js +131 -131
- package/scripts/doc.tsconfig.json +5 -5
- package/scripts/docker-compose.yml +1 -1
- package/scripts/test-graphic.tsconfig.json +5 -5
- package/scripts/test-graphic.webpack.config.js +57 -57
- package/scripts/test-headless.webpack.config.js +29 -29
- package/src/chessboard/BoardProperties.ts +68 -68
- package/src/chessboard/Chessboard.css +13 -13
- package/src/chessboard/Chessboard.tsx +380 -380
- package/src/chessboard/ChessboardImpl.tsx +557 -557
- package/src/chessboard/Draggable.tsx +185 -185
- package/src/chessboard/Motion.tsx +67 -67
- package/src/chessboard/colorsets.ts +66 -66
- package/src/chessboard/piecesets.ts +84 -84
- package/src/decs.d.ts +2 -2
- package/src/errorbox/ErrorBox.css +18 -18
- package/src/errorbox/ErrorBox.tsx +75 -75
- package/src/errorbox/parsing.tsx +95 -95
- package/src/exception.ts +17 -17
- package/src/i18n.ts +1 -0
- package/src/icons/AnnotationSymbolShape.css +6 -6
- package/src/icons/AnnotationSymbolShape.tsx +31 -31
- package/src/icons/ArrowMarkerIcon.tsx +34 -34
- package/src/icons/ArrowTip.tsx +14 -14
- package/src/icons/ChessPieceIcon.tsx +45 -45
- package/src/icons/SquareMarkerIcon.tsx +20 -20
- package/src/icons/TextMarkerIcon.tsx +29 -29
- package/src/icons/arrow.css +1 -1
- package/src/index.ts +3 -2
- package/src/movetext/Movetext.css +27 -27
- package/src/movetext/Movetext.tsx +158 -158
- package/src/movetext/MovetextImpl.tsx +345 -345
- package/src/movetext/fonts.css +7 -7
- package/src/movetext/htmlFilter.tsx +129 -129
- package/src/movetext/moveFormatter.tsx +37 -37
- package/src/navigationboard/NavigationBoard.tsx +297 -178
- package/src/navigationboard/NavigationButton.ts +72 -0
- package/src/navigationboard/NavigationField.css +7 -7
- package/src/navigationboard/NavigationField.tsx +90 -90
- package/src/navigationboard/NavigationToolbar.css +16 -13
- package/src/navigationboard/NavigationToolbar.tsx +60 -117
- package/src/navigationboard/iconPaths.ts +98 -0
- package/src/sanitization.ts +17 -17
- package/src/types.ts +116 -116
- package/src/util.ts +11 -11
- package/test/01_types.js +167 -167
- package/test/02_chessboard_util.js +114 -114
- package/test/03_error_box_graphic.js +16 -16
- package/test/04_icons_graphic.js +32 -32
- package/test/05_chessboard_graphic.js +60 -60
- package/test/06_chessboard_animation.js +36 -36
- package/test/07_chessboard_interaction.js +101 -101
- package/test/08_chessboard_play_moves.js +62 -62
- package/test/09_chessboard_small_screens.js +32 -32
- package/test/10_movetext_graphic.js +32 -32
- package/test/11_movetext_interaction.js +100 -100
- package/test/12_navigation_board_base.js +151 -0
- package/test/13_navigation_board_graphic.js +68 -0
- package/test/14_navigation_board_autoplay.js +100 -0
- package/test/common/graphic.js +106 -97
- package/test/graphic_references/12_navigation_board_base/controlled/default.png +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/forbidden_navigation_1.png → 12_navigation_board_base/controlled/forbidden_navigation_0.png} +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/invalid_node_id.png → 12_navigation_board_base/controlled/forbidden_navigation_1.png} +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/forbidden_navigation_0.png → 12_navigation_board_base/controlled/invalid_node_id.png} +0 -0
- package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_0.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/controlled/no_callback_defined_1.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/controlled/overriding_initial_node_id.png +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_1.png → 12_navigation_board_base/controlled/regular_navigation_0.png} +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/initial_state_at_specific_id.png → 12_navigation_board_base/controlled/regular_navigation_1.png} +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_3.png → 12_navigation_board_base/controlled/regular_navigation_2.png} +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/regular_navigation_0.png → 12_navigation_board_base/controlled/regular_navigation_3.png} +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_beginning_2.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_0.png} +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_beginning_0.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_1.png} +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_beginning_1.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_2.png} +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/no_callback_defined_0.png → 12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_0.png} +0 -0
- package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_1.png +0 -0
- package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_2.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_at_end.png +0 -0
- package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_specific_id.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_default.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_default_with_game_index.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/initial_state_on_null-move.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_0.png +0 -0
- package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_1.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_2.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_3.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/navigation_with_keys_4.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_flipping_0.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_flipping_1.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_0.png +0 -0
- package/test/graphic_references/{12_navigation_board/controlled/default.png → 12_navigation_board_base/uncontrolled/regular_navigation_1.png} +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_2.png +0 -0
- package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_3.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_4.png +0 -0
- package/test/graphic_references/{12_navigation_board → 12_navigation_board_base}/uncontrolled/regular_navigation_5.png +0 -0
- package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_1.png +0 -0
- package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_2.png +0 -0
- package/test/graphic_references/13_navigation_board_graphic/additional_buttons/multiple_buttons.png +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/regular_navigation_3.png → 13_navigation_board_graphic/additional_buttons/single_button.png} +0 -0
- package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/custom_1.png +0 -0
- package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/custom_2.png +0 -0
- package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/theme/large.png +0 -0
- package/test/graphic_references/13_navigation_board_graphic/theme/small.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_acknowledging_is-playing_changes.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_not_acknowledging_is-playing_changes.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_acknowledging_node_changes.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_not_acknowledging_node_changes.png +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_end_1.png → 14_navigation_board_autoplay/controlled/after_reaching_the_end.png} +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_end_2.png → 14_navigation_board_autoplay/controlled/already_at_the_end.png} +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_is-playing_changes.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_node_changes.png +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/forbidden_navigation_at_end_0.png → 14_navigation_board_autoplay/controlled/initial_state_at_the_end.png} +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_close_to_end.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_is-playing_changes.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_node_changes.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_after_stop.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_before_stop.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_after_stop.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_before_stop.png +0 -0
- package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_close_to_end.png +0 -0
- package/test/graphic_references/{12_navigation_board/uncontrolled/navigation_with_keys_1.png → 14_navigation_board_autoplay/uncontrolled/initial_state_default.png} +0 -0
- package/test/graphic_test_app/03_error_box_graphic/base.tsx +14 -14
- package/test/graphic_test_app/03_error_box_graphic/localization.tsx +1 -1
- package/test/graphic_test_app/04_icons_graphic/chess_piece.tsx +7 -7
- package/test/graphic_test_app/04_icons_graphic/marker.tsx +15 -15
- package/test/graphic_test_app/05_chessboard_graphic/annotations.tsx +7 -7
- package/test/graphic_test_app/05_chessboard_graphic/base.tsx +6 -6
- package/test/graphic_test_app/05_chessboard_graphic/chess_variants.tsx +7 -7
- package/test/graphic_test_app/05_chessboard_graphic/flipped.tsx +5 -5
- package/test/graphic_test_app/05_chessboard_graphic/move.tsx +12 -12
- package/test/graphic_test_app/05_chessboard_graphic/theme.tsx +12 -12
- package/test/graphic_test_app/06_chessboard_animation/base_1.tsx +6 -6
- package/test/graphic_test_app/06_chessboard_animation/base_2.tsx +6 -6
- package/test/graphic_test_app/06_chessboard_animation/base_3.tsx +6 -6
- package/test/graphic_test_app/06_chessboard_animation/on_redraw.tsx +16 -16
- package/test/graphic_test_app/07_chessboard_interaction/click_squares.tsx +5 -5
- package/test/graphic_test_app/07_chessboard_interaction/edit_arrows.tsx +4 -4
- package/test/graphic_test_app/07_chessboard_interaction/error.tsx +2 -2
- package/test/graphic_test_app/07_chessboard_interaction/move_pieces.tsx +5 -5
- package/test/graphic_test_app/08_chessboard_play_moves/base.tsx +8 -8
- package/test/graphic_test_app/08_chessboard_play_moves/promotions.tsx +4 -4
- package/test/graphic_test_app/09_chessboard_small_screens/base.tsx +9 -9
- package/test/graphic_test_app/09_chessboard_small_screens/top_bottom_components.tsx +9 -9
- package/test/graphic_test_app/10_movetext_graphic/base.tsx +4 -4
- package/test/graphic_test_app/10_movetext_graphic/error.tsx +6 -6
- package/test/graphic_test_app/10_movetext_graphic/format_move.tsx +1 -1
- package/test/graphic_test_app/10_movetext_graphic/html.tsx +5 -5
- package/test/graphic_test_app/10_movetext_graphic/options.tsx +10 -10
- package/test/graphic_test_app/11_movetext_interaction/error.tsx +1 -1
- package/test/graphic_test_app/11_movetext_interaction/select_moves.tsx +11 -11
- package/test/graphic_test_app/{12_navigation_board → 12_navigation_board_base}/controlled.tsx +5 -5
- package/test/graphic_test_app/{12_navigation_board → 12_navigation_board_base}/uncontrolled.tsx +7 -7
- package/test/graphic_test_app/13_navigation_board_graphic/additional_buttons.tsx +49 -0
- package/test/graphic_test_app/{12_navigation_board → 13_navigation_board_graphic}/error.tsx +2 -2
- package/test/graphic_test_app/{12_navigation_board → 13_navigation_board_graphic}/theme.tsx +4 -4
- package/test/graphic_test_app/14_navigation_board_autoplay/controlled.tsx +73 -0
- package/test/graphic_test_app/14_navigation_board_autoplay/uncontrolled.tsx +34 -0
- package/test/graphic_test_app/common/decs.d.ts +2 -2
- package/test/graphic_test_app/common/test_app.css +15 -15
- package/test/graphic_test_app/common/test_app.tsx +48 -48
- package/tsconfig.json +13 -13
- package/test/12_navigation_board.js +0 -168
- package/test/graphic_references/12_navigation_board/controlled/regular_navigation_2.png +0 -0
- package/test/graphic_references/12_navigation_board/theme/small.png +0 -0
- package/test/graphic_references/12_navigation_board/uncontrolled/regular_navigation_1.png +0 -0
- /package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/error/pgn_parsing_error.png +0 -0
- /package/test/graphic_references/{12_navigation_board → 13_navigation_board_graphic}/error/wrong_game_type.png +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* -------------------------------------------------------------------------- *
|
|
3
|
+
* *
|
|
4
|
+
* Kokopu-React - A React-based library of chess-related components. *
|
|
5
|
+
* <https://www.npmjs.com/package/kokopu-react> *
|
|
6
|
+
* Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
|
|
7
|
+
* *
|
|
8
|
+
* Kokopu-React is free software: you can redistribute it and/or *
|
|
9
|
+
* modify it under the terms of the GNU Lesser General Public License *
|
|
10
|
+
* as published by the Free Software Foundation, either version 3 of *
|
|
11
|
+
* the License, or (at your option) any later version. *
|
|
12
|
+
* *
|
|
13
|
+
* Kokopu-React is distributed in the hope that it will be useful, *
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
16
|
+
* GNU Lesser General Public License for more details. *
|
|
17
|
+
* *
|
|
18
|
+
* You should have received a copy of the GNU Lesser General *
|
|
19
|
+
* Public License along with this program. If not, see *
|
|
20
|
+
* <http://www.gnu.org/licenses/>. *
|
|
21
|
+
* *
|
|
22
|
+
* -------------------------------------------------------------------------- */
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
import * as React from 'react';
|
|
26
|
+
import { setSandbox, testApp } from '../common/test_app';
|
|
27
|
+
import { NavigationBoard } from '../../../dist/lib/index';
|
|
28
|
+
|
|
29
|
+
import pgn from '../common/games.pgn';
|
|
30
|
+
|
|
31
|
+
testApp([ /* eslint-disable react/jsx-key */
|
|
32
|
+
<NavigationBoard game={pgn} additionalButtons={{ iconPath: 'M 11 11 H 21 V 21 H 11 Z' }} />,
|
|
33
|
+
<NavigationBoard game={pgn} additionalButtons={[
|
|
34
|
+
{ iconPath: 'M 11 11 H 21 V 21 H 11 Z', tooltip: 'Button 0', enabled: true },
|
|
35
|
+
{ iconPath: 'M 9 16 L 16 9 L 23 16 L 16 23 Z', tooltip: 'Button A', onClick: () => setSandbox('Button A clicked') },
|
|
36
|
+
'spacer',
|
|
37
|
+
{ iconPath: 'M 16 22 L 10 11 H 22 Z', tooltip: 'Button B', onClick: () => setSandbox('Button B clicked') },
|
|
38
|
+
'spacer',
|
|
39
|
+
'spacer',
|
|
40
|
+
{ iconPath: 'M 16 10 L 22 21 H 10 Z', tooltip: 'Button C', enabled: false, onClick: () => setSandbox('Button C clicked') },
|
|
41
|
+
]} />,
|
|
42
|
+
<NavigationBoard game={pgn} additionalButtons={
|
|
43
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */ 'not a button nor a spacer' as any /* eslint-enable @typescript-eslint/no-explicit-any */
|
|
44
|
+
} />,
|
|
45
|
+
<NavigationBoard game={pgn} additionalButtons={[
|
|
46
|
+
{ iconPath: 'M 11 11 H 21 V 21 H 11 Z' },
|
|
47
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */ 'not a button nor a spacer' as any /* eslint-enable @typescript-eslint/no-explicit-any */,
|
|
48
|
+
]} />,
|
|
49
|
+
]); /* eslint-enable react/jsx-key */
|
|
@@ -29,6 +29,6 @@ import { NavigationBoard } from '../../../dist/lib/index';
|
|
|
29
29
|
import dummyPgn from '../common/dummy.pgn';
|
|
30
30
|
|
|
31
31
|
testApp([ /* eslint-disable react/jsx-key */
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
<NavigationBoard game={dummyPgn} />,
|
|
33
|
+
<NavigationBoard game={ /* eslint-disable @typescript-eslint/no-explicit-any */ 42 as any /* eslint-enable @typescript-eslint/no-explicit-any */ } />,
|
|
34
34
|
], 'width-600'); /* eslint-enable react/jsx-key */
|
|
@@ -31,8 +31,8 @@ const game = new Game();
|
|
|
31
31
|
game.mainVariation().play('e4');
|
|
32
32
|
|
|
33
33
|
testApp([ /* eslint-disable react/jsx-key */
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
<NavigationBoard game={game} initialNodeId="end" squareSize={20} coordinateVisible={false} />,
|
|
35
|
+
<NavigationBoard game={game} initialNodeId="end" squareSize={53} colorset="scid" pieceset="celtic" flipButtonVisible={false} />,
|
|
36
|
+
<NavigationBoard game={game} initialNodeId="end" turnVisible={false} moveArrowColor="g" />,
|
|
37
|
+
<div style={{ color: 'red' }}><NavigationBoard game={game} initialNodeId="end" squareSize={48} moveArrowVisible={false} /></div>,
|
|
38
38
|
]); /* eslint-enable react/jsx-key */
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* -------------------------------------------------------------------------- *
|
|
3
|
+
* *
|
|
4
|
+
* Kokopu-React - A React-based library of chess-related components. *
|
|
5
|
+
* <https://www.npmjs.com/package/kokopu-react> *
|
|
6
|
+
* Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
|
|
7
|
+
* *
|
|
8
|
+
* Kokopu-React is free software: you can redistribute it and/or *
|
|
9
|
+
* modify it under the terms of the GNU Lesser General Public License *
|
|
10
|
+
* as published by the Free Software Foundation, either version 3 of *
|
|
11
|
+
* the License, or (at your option) any later version. *
|
|
12
|
+
* *
|
|
13
|
+
* Kokopu-React is distributed in the hope that it will be useful, *
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
16
|
+
* GNU Lesser General Public License for more details. *
|
|
17
|
+
* *
|
|
18
|
+
* You should have received a copy of the GNU Lesser General *
|
|
19
|
+
* Public License along with this program. If not, see *
|
|
20
|
+
* <http://www.gnu.org/licenses/>. *
|
|
21
|
+
* *
|
|
22
|
+
* -------------------------------------------------------------------------- */
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
import * as React from 'react';
|
|
26
|
+
import { setSandbox, testApp } from '../common/test_app';
|
|
27
|
+
import { NavigationBoard } from '../../../dist/lib/index';
|
|
28
|
+
|
|
29
|
+
import pgn from '../common/games.pgn';
|
|
30
|
+
|
|
31
|
+
const HISTORY_0: string[] = [];
|
|
32
|
+
const HISTORY_1: string[] = [];
|
|
33
|
+
const HISTORY_2: string[] = [];
|
|
34
|
+
|
|
35
|
+
interface NavigationBoardWithNodeIdControllerProps {
|
|
36
|
+
initialNodeId: string;
|
|
37
|
+
sandboxHistory: string[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function NavigationBoardWithNodeIdController({ initialNodeId, sandboxHistory }: NavigationBoardWithNodeIdControllerProps) {
|
|
41
|
+
|
|
42
|
+
const [ nodeId, setNodeId ] = React.useState(initialNodeId);
|
|
43
|
+
|
|
44
|
+
return <NavigationBoard game={pgn} playButtonVisible nodeId={nodeId} onNodeIdChanged={newNodeId => {
|
|
45
|
+
sandboxHistory.push(`Node ID changed: ${newNodeId}`);
|
|
46
|
+
setSandbox(sandboxHistory.join('\n'));
|
|
47
|
+
setNodeId(newNodeId);
|
|
48
|
+
}} />;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function NavigationBoardWithIsPlayingController() {
|
|
52
|
+
|
|
53
|
+
const [ isPlaying, setIsPlaying ] = React.useState(false);
|
|
54
|
+
|
|
55
|
+
return <NavigationBoard game={pgn} playButtonVisible initialNodeId="5b" isPlaying={isPlaying} onIsPlayingChanged={newIsPlaying => {
|
|
56
|
+
setSandbox(`is-playing flag changed: ${newIsPlaying}`);
|
|
57
|
+
setIsPlaying(newIsPlaying);
|
|
58
|
+
}} />;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
testApp([ /* eslint-disable react/jsx-key */
|
|
62
|
+
<NavigationBoard game={pgn} playButtonVisible nodeId="3w" onNodeIdChanged={nodeId => {
|
|
63
|
+
HISTORY_0.push(`Node ID changed: ${nodeId}`);
|
|
64
|
+
setSandbox(HISTORY_0.join('\n'));
|
|
65
|
+
}} />,
|
|
66
|
+
<NavigationBoardWithNodeIdController initialNodeId="3w" sandboxHistory={HISTORY_1} />,
|
|
67
|
+
<NavigationBoardWithNodeIdController initialNodeId="20w" sandboxHistory={HISTORY_2} />,
|
|
68
|
+
<NavigationBoard game={pgn} playButtonVisible initialNodeId="5b" isPlaying={false} onIsPlayingChanged={isPlaying => {
|
|
69
|
+
setSandbox(`is-playing flag changed: ${isPlaying}`);
|
|
70
|
+
}} />,
|
|
71
|
+
<NavigationBoardWithIsPlayingController />,
|
|
72
|
+
<NavigationBoard game={pgn} playButtonVisible initialNodeId="20b" isPlaying={true} />,
|
|
73
|
+
]); /* eslint-enable react/jsx-key */
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* -------------------------------------------------------------------------- *
|
|
3
|
+
* *
|
|
4
|
+
* Kokopu-React - A React-based library of chess-related components. *
|
|
5
|
+
* <https://www.npmjs.com/package/kokopu-react> *
|
|
6
|
+
* Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
|
|
7
|
+
* *
|
|
8
|
+
* Kokopu-React is free software: you can redistribute it and/or *
|
|
9
|
+
* modify it under the terms of the GNU Lesser General Public License *
|
|
10
|
+
* as published by the Free Software Foundation, either version 3 of *
|
|
11
|
+
* the License, or (at your option) any later version. *
|
|
12
|
+
* *
|
|
13
|
+
* Kokopu-React is distributed in the hope that it will be useful, *
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
16
|
+
* GNU Lesser General Public License for more details. *
|
|
17
|
+
* *
|
|
18
|
+
* You should have received a copy of the GNU Lesser General *
|
|
19
|
+
* Public License along with this program. If not, see *
|
|
20
|
+
* <http://www.gnu.org/licenses/>. *
|
|
21
|
+
* *
|
|
22
|
+
* -------------------------------------------------------------------------- */
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
import * as React from 'react';
|
|
26
|
+
import { testApp } from '../common/test_app';
|
|
27
|
+
import { NavigationBoard } from '../../../dist/lib/index';
|
|
28
|
+
|
|
29
|
+
import pgn from '../common/games.pgn';
|
|
30
|
+
|
|
31
|
+
testApp([ /* eslint-disable react/jsx-key */
|
|
32
|
+
<NavigationBoard game={pgn} playButtonVisible />,
|
|
33
|
+
<NavigationBoard game={pgn} playButtonVisible initialNodeId="20w" />,
|
|
34
|
+
]); /* eslint-enable react/jsx-key */
|
|
@@ -25,34 +25,34 @@
|
|
|
25
25
|
.test-item,
|
|
26
26
|
.test-item-container,
|
|
27
27
|
#test-app {
|
|
28
|
-
|
|
28
|
+
display: inline-block;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
body {
|
|
32
|
-
|
|
32
|
+
background-color: lightgray;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
.test-item-container {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
margin: 2px;
|
|
37
|
+
padding: 3px;
|
|
38
|
+
background-color: white;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.test-item-error {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
display: inline-block;
|
|
43
|
+
border: solid 1px #999;
|
|
44
|
+
background-color: #eee;
|
|
45
|
+
font-family: sans-serif;
|
|
46
|
+
font-size: 12px;
|
|
47
|
+
padding: 0.5em;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
#sandbox {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
padding: 3px;
|
|
52
|
+
background-color: lightgoldenrodyellow;
|
|
53
|
+
height: 100px;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
.width-600 .test-item {
|
|
57
|
-
|
|
57
|
+
width: 600px;
|
|
58
58
|
}
|
|
@@ -30,54 +30,54 @@ import './test_app.css';
|
|
|
30
30
|
|
|
31
31
|
// This global variable allows to freeze animations in an intermediate stage.
|
|
32
32
|
declare global {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
interface Window {
|
|
34
|
+
'__kokopu_debug_freeze_motion': number;
|
|
35
|
+
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
interface TestItemContainerProps {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
index: number;
|
|
41
|
+
children: React.ReactNode;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
interface TestItemContainerState {
|
|
46
|
-
|
|
46
|
+
hasError: boolean;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
class TestItemContainer extends React.Component<TestItemContainerProps, TestItemContainerState> {
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
52
|
+
constructor(props: TestItemContainerProps) {
|
|
53
|
+
super(props);
|
|
54
|
+
this.state = { hasError: false };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static getDerivedStateFromError() {
|
|
58
|
+
return { hasError: true };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
render() {
|
|
62
|
+
return (
|
|
63
|
+
<div className="test-item-container">
|
|
64
|
+
<div className="test-item" id={'test-item-' + this.props.index}>{this.renderContent()}</div>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
private renderContent() {
|
|
70
|
+
return this.state.hasError ? <span className="test-item-error">Exception thrown</span> : this.props.children;
|
|
71
|
+
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
function flattenMultiElements(elements: React.ReactNode[], containerClassName: string[]) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
76
|
+
const items = [];
|
|
77
|
+
for (let i = 0; i < elements.length; ++i) {
|
|
78
|
+
items.push(<TestItemContainer key={i} index={i}>{elements[i]}</TestItemContainer>);
|
|
79
|
+
}
|
|
80
|
+
return <div className={containerClassName.join(' ')}>{items}</div>;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
|
|
@@ -86,20 +86,20 @@ function flattenMultiElements(elements: React.ReactNode[], containerClassName: s
|
|
|
86
86
|
*/
|
|
87
87
|
export function testApp(elements: React.ReactNode[], ...containerClassName: string[]) {
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
// Create the main anchor.
|
|
90
|
+
const anchor = document.createElement('div');
|
|
91
|
+
anchor.id = 'test-app';
|
|
92
|
+
document.body.appendChild(anchor);
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
// Render the content.
|
|
95
|
+
const root = createRoot(anchor);
|
|
96
|
+
const content = flattenMultiElements(elements, containerClassName);
|
|
97
|
+
root.render(content);
|
|
98
98
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
// Append a text area
|
|
100
|
+
const sandbox = document.createElement('pre');
|
|
101
|
+
sandbox.id = 'sandbox';
|
|
102
|
+
document.body.appendChild(sandbox);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
|
|
@@ -107,9 +107,9 @@ export function testApp(elements: React.ReactNode[], ...containerClassName: stri
|
|
|
107
107
|
* Set the content of the sandbox.
|
|
108
108
|
*/
|
|
109
109
|
export function setSandbox(text: string) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
110
|
+
const sandbox = document.getElementById('sandbox');
|
|
111
|
+
if (sandbox === null) {
|
|
112
|
+
throw new Error('Cannot locate the sandbox...');
|
|
113
|
+
}
|
|
114
|
+
sandbox.innerText = text;
|
|
115
115
|
}
|
package/tsconfig.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
"include": [ "./src/**/*" ],
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"sourceMap": true,
|
|
5
|
+
"declaration": true,
|
|
6
|
+
"module": "es2020",
|
|
7
|
+
"target": "es2020",
|
|
8
|
+
"jsx": "react",
|
|
9
|
+
"types": [],
|
|
10
|
+
"allowJs": false,
|
|
11
|
+
"strict": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"moduleResolution": "node"
|
|
14
|
+
}
|
|
15
15
|
}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* -------------------------------------------------------------------------- *
|
|
3
|
-
* *
|
|
4
|
-
* Kokopu-React - A React-based library of chess-related components. *
|
|
5
|
-
* <https://www.npmjs.com/package/kokopu-react> *
|
|
6
|
-
* Copyright (C) 2021-2024 Yoann Le Montagner <yo35 -at- melix.net> *
|
|
7
|
-
* *
|
|
8
|
-
* Kokopu-React is free software: you can redistribute it and/or *
|
|
9
|
-
* modify it under the terms of the GNU Lesser General Public License *
|
|
10
|
-
* as published by the Free Software Foundation, either version 3 of *
|
|
11
|
-
* the License, or (at your option) any later version. *
|
|
12
|
-
* *
|
|
13
|
-
* Kokopu-React is distributed in the hope that it will be useful, *
|
|
14
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
15
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
16
|
-
* GNU Lesser General Public License for more details. *
|
|
17
|
-
* *
|
|
18
|
-
* You should have received a copy of the GNU Lesser General *
|
|
19
|
-
* Public License along with this program. If not, see *
|
|
20
|
-
* <http://www.gnu.org/licenses/>. *
|
|
21
|
-
* *
|
|
22
|
-
* -------------------------------------------------------------------------- */
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const { describeWithBrowser, itCustom, setSandbox, compareSandbox, takeScreenshot, compareScreenshot, itChecksScreenshots } = require('./common/graphic');
|
|
26
|
-
const { By, Key } = require('selenium-webdriver');
|
|
27
|
-
const test = require('unit.js');
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
describeWithBrowser('Navigation board - Uncontrolled behavior', browserContext => {
|
|
31
|
-
|
|
32
|
-
itChecksScreenshots(browserContext, '12_navigation_board/uncontrolled', [
|
|
33
|
-
'initial state default',
|
|
34
|
-
'initial state at end',
|
|
35
|
-
'initial state at specific ID',
|
|
36
|
-
'initial state default with game index',
|
|
37
|
-
'initial state on null-move',
|
|
38
|
-
]);
|
|
39
|
-
|
|
40
|
-
function itCheckClickButton(itemIndex, label, buttons) {
|
|
41
|
-
itCustom(browserContext, '12_navigation_board/uncontrolled', itemIndex, label, async element => {
|
|
42
|
-
await setSandbox(browserContext, '');
|
|
43
|
-
for (let i = 0; i < buttons.length; ++i) {
|
|
44
|
-
const buttonElement = await element.findElement(By.xpath(`.//div[@title='${buttons[i].title}']`));
|
|
45
|
-
await buttonElement.click();
|
|
46
|
-
await compareSandbox(browserContext, buttons[i].expectedSandbox ?? '');
|
|
47
|
-
await takeScreenshot(browserContext, `${label} ${i}`, element);
|
|
48
|
-
}
|
|
49
|
-
for (let i = 0; i < buttons.length; ++i) {
|
|
50
|
-
await compareScreenshot(browserContext, `${label} ${i}`);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
itCheckClickButton(0, 'regular flipping', [
|
|
56
|
-
{ title: 'Flip the board' },
|
|
57
|
-
{ title: 'Flip the board' },
|
|
58
|
-
]);
|
|
59
|
-
|
|
60
|
-
itCheckClickButton(2, 'regular navigation', [
|
|
61
|
-
{ title: 'Go to the next move' },
|
|
62
|
-
{ title: 'Go to the previous move' },
|
|
63
|
-
{ title: 'Go to the previous move' },
|
|
64
|
-
{ title: 'Go to the beginning of the game' },
|
|
65
|
-
{ title: 'Go to the end of the game' },
|
|
66
|
-
{ title: 'Flip the board' },
|
|
67
|
-
]);
|
|
68
|
-
|
|
69
|
-
itCheckClickButton(3, 'forbidden navigation at beginning', [
|
|
70
|
-
{ title: 'Go to the previous move' },
|
|
71
|
-
{ title: 'Go to the beginning of the game' },
|
|
72
|
-
{ title: 'Flip the board', expectedSandbox: 'Flip state changed: false' },
|
|
73
|
-
]);
|
|
74
|
-
|
|
75
|
-
itCheckClickButton(1, 'forbidden navigation at end', [
|
|
76
|
-
{ title: 'Go to the next move' },
|
|
77
|
-
{ title: 'Go to the end of the game' },
|
|
78
|
-
{ title: 'Flip the board' },
|
|
79
|
-
]);
|
|
80
|
-
|
|
81
|
-
function itCheckPressKey(itemIndex, label, keys) {
|
|
82
|
-
itCustom(browserContext, '12_navigation_board/uncontrolled', itemIndex, label, async element => {
|
|
83
|
-
await setSandbox(browserContext, '');
|
|
84
|
-
const focusFieldElements = await element.findElements(By.className('kokopu-focusField'));
|
|
85
|
-
|
|
86
|
-
test.value(focusFieldElements.length).is(1);
|
|
87
|
-
const focusFieldElement = focusFieldElements[0];
|
|
88
|
-
|
|
89
|
-
for (let i = 0; i < keys.length; ++i) {
|
|
90
|
-
await focusFieldElement.sendKeys(keys[i].code);
|
|
91
|
-
await compareSandbox(browserContext, keys[i].expectedSandbox ?? '');
|
|
92
|
-
await takeScreenshot(browserContext, `${label} ${i}`, element);
|
|
93
|
-
}
|
|
94
|
-
for (let i = 0; i < keys.length; ++i) {
|
|
95
|
-
await compareScreenshot(browserContext, `${label} ${i}`);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
itCheckPressKey(4, 'navigation with keys', [
|
|
101
|
-
{ code: Key.ARROW_LEFT },
|
|
102
|
-
{ code: Key.HOME },
|
|
103
|
-
{ code: Key.ARROW_RIGHT },
|
|
104
|
-
{ code: Key.ESCAPE },
|
|
105
|
-
{ code: Key.END },
|
|
106
|
-
]);
|
|
107
|
-
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
describeWithBrowser('Navigation board - Controlled behavior', browserContext => {
|
|
112
|
-
|
|
113
|
-
itChecksScreenshots(browserContext, '12_navigation_board/controlled', [
|
|
114
|
-
'default',
|
|
115
|
-
'overriding initial node ID',
|
|
116
|
-
'invalid node ID',
|
|
117
|
-
]);
|
|
118
|
-
|
|
119
|
-
function itCheckClickButton(itemIndex, label, buttons) {
|
|
120
|
-
itCustom(browserContext, '12_navigation_board/controlled', itemIndex, label, async element => {
|
|
121
|
-
await setSandbox(browserContext, '');
|
|
122
|
-
for (let i = 0; i < buttons.length; ++i) {
|
|
123
|
-
const buttonElement = await element.findElement(By.xpath(`.//div[@title='${buttons[i].title}']`));
|
|
124
|
-
await buttonElement.click();
|
|
125
|
-
await compareSandbox(browserContext, buttons[i].expectedSandbox ?? '');
|
|
126
|
-
await takeScreenshot(browserContext, `${label} ${i}`, element);
|
|
127
|
-
}
|
|
128
|
-
for (let i = 0; i < buttons.length; ++i) {
|
|
129
|
-
await compareScreenshot(browserContext, `${label} ${i}`);
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
itCheckClickButton(0, 'regular navigation', [
|
|
135
|
-
{ title: 'Go to the beginning of the game', expectedSandbox: 'Node ID changed: start' },
|
|
136
|
-
{ title: 'Go to the previous move', expectedSandbox: 'Node ID changed: 16b' },
|
|
137
|
-
{ title: 'Go to the next move', expectedSandbox: 'Node ID changed: 17b' },
|
|
138
|
-
{ title: 'Go to the end of the game', expectedSandbox: 'Node ID changed: 28b' },
|
|
139
|
-
]);
|
|
140
|
-
|
|
141
|
-
itCheckClickButton(1, 'no callback defined', [
|
|
142
|
-
{ title: 'Go to the beginning of the game' },
|
|
143
|
-
{ title: 'Flip the board' },
|
|
144
|
-
]);
|
|
145
|
-
|
|
146
|
-
itCheckClickButton(2, 'forbidden navigation', [
|
|
147
|
-
{ title: 'Go to the previous move' },
|
|
148
|
-
{ title: 'Flip the board', expectedSandbox: 'Flip state changed: true' },
|
|
149
|
-
]);
|
|
150
|
-
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
describeWithBrowser('Navigation board graphic', browserContext => {
|
|
155
|
-
|
|
156
|
-
itChecksScreenshots(browserContext, '12_navigation_board/error', [
|
|
157
|
-
'pgn parsing error',
|
|
158
|
-
'wrong game type',
|
|
159
|
-
]);
|
|
160
|
-
|
|
161
|
-
itChecksScreenshots(browserContext, '12_navigation_board/theme', [
|
|
162
|
-
'small',
|
|
163
|
-
'large',
|
|
164
|
-
'custom 1',
|
|
165
|
-
'custom 2',
|
|
166
|
-
]);
|
|
167
|
-
|
|
168
|
-
});
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|