kokopu-react 1.4.0 → 1.5.1

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.
Files changed (195) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +1 -1
  3. package/dist/lib/ArrowMarkerIcon.js +3 -3
  4. package/dist/lib/Chessboard.js +6 -8
  5. package/dist/lib/ErrorBox.js +85 -5
  6. package/dist/lib/Movetext.js +851 -0
  7. package/dist/lib/SquareMarkerIcon.js +1 -1
  8. package/dist/lib/TextMarkerIcon.js +1 -1
  9. package/dist/lib/css/arrow.css +1 -1
  10. package/dist/lib/css/chessboard.css +6 -1
  11. package/dist/lib/css/error_box.css +13 -2
  12. package/dist/lib/css/{label.css → fonts.css} +11 -6
  13. package/dist/lib/css/movetext.css +117 -0
  14. package/dist/lib/css/symbol.css +9 -1
  15. package/dist/lib/fonts/chessalpha.woff +0 -0
  16. package/dist/lib/fonts/chessalpha.woff2 +0 -0
  17. package/dist/lib/i18n.js +17 -2
  18. package/dist/lib/impl/ArrowTip.js +1 -1
  19. package/dist/lib/impl/HtmlSanitizer.js +171 -0
  20. package/dist/lib/impl/TextSymbol.js +2 -4
  21. package/dist/lib/impl/colorsets.js +1 -1
  22. package/dist/lib/impl/piecesets.js +1 -1
  23. package/dist/lib/impl/util.js +1 -1
  24. package/dist/lib/index.js +8 -0
  25. package/doc_src/demo/PageChessboardBase.js +1 -1
  26. package/doc_src/demo/{PageChessboardEdition.js → PageChessboardInteraction.js} +2 -4
  27. package/doc_src/demo/PageChessboardMove.js +1 -1
  28. package/doc_src/demo/PageChessboardSmallScreens.js +1 -1
  29. package/doc_src/demo/PageMovetextBase.js +214 -0
  30. package/doc_src/demo/PageMovetextInteraction.js +159 -0
  31. package/doc_src/demo/demo.css +8 -1
  32. package/doc_src/demo/game-1.pgn +23 -0
  33. package/doc_src/demo/game-2.pgn +22 -0
  34. package/doc_src/demo/game-invalid.pgn +10 -0
  35. package/doc_src/demo/util.js +1 -1
  36. package/doc_src/examples/Movetext.md +15 -0
  37. package/doc_src/home.md +2 -0
  38. package/doc_src/theming/LogoRenderer.js +1 -1
  39. package/doc_src/theming/theming.css +1 -1
  40. package/graphic_test_app/01_marker_icons.js +1 -1
  41. package/graphic_test_app/02_chessboard_simple.js +1 -1
  42. package/graphic_test_app/03_chessboard_flipped.js +1 -1
  43. package/graphic_test_app/04_chessboard_annotations.js +1 -1
  44. package/graphic_test_app/05_chessboard_move.js +1 -1
  45. package/graphic_test_app/06_chessboard_theme.js +1 -1
  46. package/graphic_test_app/07_chessboard_click_squares.js +1 -1
  47. package/graphic_test_app/08_chessboard_move_pieces.js +1 -1
  48. package/graphic_test_app/09_chessboard_edit_arrows.js +1 -1
  49. package/graphic_test_app/10_chessboard_play_moves.js +1 -1
  50. package/graphic_test_app/11_chessboard_play_promotions.js +1 -1
  51. package/graphic_test_app/12_movetext_simple.js +41 -0
  52. package/graphic_test_app/13_movetext_error.js +38 -0
  53. package/graphic_test_app/14_movetext_html.js +40 -0
  54. package/graphic_test_app/15_movetext_options.js +42 -0
  55. package/graphic_test_app/16_movetext_interaction.js +42 -0
  56. package/graphic_test_app/common/dummy.pgn +8 -0
  57. package/graphic_test_app/common/games.pgn +167 -0
  58. package/graphic_test_app/common/heartbeat.txt +1 -0
  59. package/graphic_test_app/common/test_app.css +20 -4
  60. package/graphic_test_app/common/test_app.js +6 -6
  61. package/package.json +26 -25
  62. package/scripts/test_graphic/clean-graphic-output.js +1 -1
  63. package/scripts/test_graphic/docker-compose.yml +1 -1
  64. package/scripts/test_graphic/webpack-config.js +7 -3
  65. package/scripts/test_headless.webpack-config.js +2 -2
  66. package/src/ArrowMarkerIcon.js +1 -1
  67. package/src/Chessboard.js +6 -7
  68. package/src/ErrorBox.js +80 -1
  69. package/src/Movetext.js +627 -0
  70. package/src/SquareMarkerIcon.js +1 -1
  71. package/src/TextMarkerIcon.js +1 -1
  72. package/src/css/arrow.css +1 -1
  73. package/src/css/chessboard.css +6 -1
  74. package/src/css/error_box.css +13 -2
  75. package/src/css/{label.css → fonts.css} +11 -6
  76. package/src/css/movetext.css +117 -0
  77. package/src/css/symbol.css +9 -1
  78. package/src/fonts/chessalpha.woff +0 -0
  79. package/src/fonts/chessalpha.woff2 +0 -0
  80. package/src/i18n.js +12 -1
  81. package/src/impl/ArrowTip.js +1 -1
  82. package/src/impl/HtmlSanitizer.js +120 -0
  83. package/src/impl/TextSymbol.js +2 -3
  84. package/src/impl/colorsets.js +1 -1
  85. package/src/impl/piecesets.js +1 -1
  86. package/src/impl/util.js +1 -1
  87. package/src/index.js +2 -1
  88. package/src/markers.js +1 -1
  89. package/test/1_markers.js +1 -1
  90. package/test/2_chessboard_util.js +1 -1
  91. package/test/3_marker_icons_graphic.js +1 -1
  92. package/test/4_chessboard_graphic.js +1 -1
  93. package/test/5_chessboard_interaction.js +1 -1
  94. package/test/6_chessboard_play_moves.js +1 -1
  95. package/test/7_movetext_graphic.js +43 -0
  96. package/test/8_movetext_interaction.js +103 -0
  97. package/test/common/graphic.js +2 -2
  98. package/test/references/01_marker_icons/0.png +0 -0
  99. package/test/references/01_marker_icons/1.png +0 -0
  100. package/test/references/01_marker_icons/10.png +0 -0
  101. package/test/references/01_marker_icons/2.png +0 -0
  102. package/test/references/01_marker_icons/3.png +0 -0
  103. package/test/references/01_marker_icons/4.png +0 -0
  104. package/test/references/01_marker_icons/5.png +0 -0
  105. package/test/references/01_marker_icons/6.png +0 -0
  106. package/test/references/01_marker_icons/7.png +0 -0
  107. package/test/references/01_marker_icons/8.png +0 -0
  108. package/test/references/01_marker_icons/9.png +0 -0
  109. package/test/references/02_chessboard_simple/0.png +0 -0
  110. package/test/references/02_chessboard_simple/1.png +0 -0
  111. package/test/references/02_chessboard_simple/2.png +0 -0
  112. package/test/references/02_chessboard_simple/3.png +0 -0
  113. package/test/references/02_chessboard_simple/4.png +0 -0
  114. package/test/references/02_chessboard_simple/5.png +0 -0
  115. package/test/references/03_chessboard_flipped/0.png +0 -0
  116. package/test/references/03_chessboard_flipped/1.png +0 -0
  117. package/test/references/03_chessboard_flipped/2.png +0 -0
  118. package/test/references/03_chessboard_flipped/3.png +0 -0
  119. package/test/references/03_chessboard_flipped/4.png +0 -0
  120. package/test/references/04_chessboard_annotations/0.png +0 -0
  121. package/test/references/04_chessboard_annotations/1.png +0 -0
  122. package/test/references/04_chessboard_annotations/2.png +0 -0
  123. package/test/references/04_chessboard_annotations/3.png +0 -0
  124. package/test/references/04_chessboard_annotations/4.png +0 -0
  125. package/test/references/04_chessboard_annotations/5.png +0 -0
  126. package/test/references/05_chessboard_move/0.png +0 -0
  127. package/test/references/05_chessboard_move/1.png +0 -0
  128. package/test/references/05_chessboard_move/2.png +0 -0
  129. package/test/references/05_chessboard_move/3.png +0 -0
  130. package/test/references/05_chessboard_move/4.png +0 -0
  131. package/test/references/05_chessboard_move/5.png +0 -0
  132. package/test/references/05_chessboard_move/6.png +0 -0
  133. package/test/references/05_chessboard_move/7.png +0 -0
  134. package/test/references/05_chessboard_move/8.png +0 -0
  135. package/test/references/06_chessboard_theme/0.png +0 -0
  136. package/test/references/06_chessboard_theme/1.png +0 -0
  137. package/test/references/06_chessboard_theme/2.png +0 -0
  138. package/test/references/06_chessboard_theme/3.png +0 -0
  139. package/test/references/06_chessboard_theme/4.png +0 -0
  140. package/test/references/06_chessboard_theme/5.png +0 -0
  141. package/test/references/06_chessboard_theme/6.png +0 -0
  142. package/test/references/06_chessboard_theme/7.png +0 -0
  143. package/test/references/06_chessboard_theme/8.png +0 -0
  144. package/test/references/08_chessboard_move_pieces/after_move.png +0 -0
  145. package/test/references/08_chessboard_move_pieces/empty_square.png +0 -0
  146. package/test/references/08_chessboard_move_pieces/null_vector.png +0 -0
  147. package/test/references/08_chessboard_move_pieces/out_of_board.png +0 -0
  148. package/test/references/08_chessboard_move_pieces/over_arrow_marker.png +0 -0
  149. package/test/references/08_chessboard_move_pieces/over_empty.png +0 -0
  150. package/test/references/08_chessboard_move_pieces/over_non_empty_1.png +0 -0
  151. package/test/references/08_chessboard_move_pieces/over_non_empty_2.png +0 -0
  152. package/test/references/08_chessboard_move_pieces/over_square_marker.png +0 -0
  153. package/test/references/08_chessboard_move_pieces/over_text_marker.png +0 -0
  154. package/test/references/09_chessboard_edit_arrows/base_1.png +0 -0
  155. package/test/references/09_chessboard_edit_arrows/base_2.png +0 -0
  156. package/test/references/09_chessboard_edit_arrows/edit_color_not_set.png +0 -0
  157. package/test/references/09_chessboard_edit_arrows/null_vector.png +0 -0
  158. package/test/references/09_chessboard_edit_arrows/out_of_board.png +0 -0
  159. package/test/references/09_chessboard_edit_arrows/over_arrow_marker.png +0 -0
  160. package/test/references/09_chessboard_edit_arrows/over_square_marker.png +0 -0
  161. package/test/references/10_chessboard_play_moves/castling_move.png +0 -0
  162. package/test/references/10_chessboard_play_moves/chess960_ambiguous_king_move.png +0 -0
  163. package/test/references/10_chessboard_play_moves/chess960_castling_move_1.png +0 -0
  164. package/test/references/10_chessboard_play_moves/chess960_castling_move_2.png +0 -0
  165. package/test/references/10_chessboard_play_moves/chess960_non_kxr_castling.png +0 -0
  166. package/test/references/10_chessboard_play_moves/illegal_move.png +0 -0
  167. package/test/references/10_chessboard_play_moves/illegal_position.png +0 -0
  168. package/test/references/10_chessboard_play_moves/null_vector.png +0 -0
  169. package/test/references/10_chessboard_play_moves/out_of_board.png +0 -0
  170. package/test/references/10_chessboard_play_moves/regular_move_1.png +0 -0
  171. package/test/references/10_chessboard_play_moves/regular_move_2.png +0 -0
  172. package/test/references/10_chessboard_play_moves/wrong_color.png +0 -0
  173. package/test/references/11_chessboard_play_promotions/antichess_promotion.png +0 -0
  174. package/test/references/11_chessboard_play_promotions/cancel_promotion.png +0 -0
  175. package/test/references/11_chessboard_play_promotions/regular_promotion_1.png +0 -0
  176. package/test/references/11_chessboard_play_promotions/regular_promotion_2.png +0 -0
  177. package/test/references/12_movetext_simple/0.png +0 -0
  178. package/test/references/12_movetext_simple/1.png +0 -0
  179. package/test/references/12_movetext_simple/2.png +0 -0
  180. package/test/references/12_movetext_simple/3.png +0 -0
  181. package/test/references/13_movetext_error/0.png +0 -0
  182. package/test/references/13_movetext_error/1.png +0 -0
  183. package/test/references/13_movetext_error/2.png +0 -0
  184. package/test/references/13_movetext_error/3.png +0 -0
  185. package/test/references/14_movetext_html/0.png +0 -0
  186. package/test/references/14_movetext_html/1.png +0 -0
  187. package/test/references/14_movetext_html/2.png +0 -0
  188. package/test/references/15_movetext_options/0.png +0 -0
  189. package/test/references/15_movetext_options/1.png +0 -0
  190. package/test/references/15_movetext_options/2.png +0 -0
  191. package/test/references/15_movetext_options/3.png +0 -0
  192. package/test/references/16_movetext_interaction/0.png +0 -0
  193. package/test/references/16_movetext_interaction/1.png +0 -0
  194. package/test/references/16_movetext_interaction/2.png +0 -0
  195. package/graphic_test_app/common/healthcheck.txt +0 -1
package/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  ChangeLog
2
2
  =========
3
3
 
4
+ 1.5.0 (April 27, 2022)
5
+ ----------------------
6
+ * Add component `Movetext` to display chess games.
7
+
8
+ 1.4.1 (January 1, 2022)
9
+ -----------------------
10
+ * Upgrade dependencies.
11
+
4
12
  1.4.0 (October 21, 2021)
5
13
  ------------------------
6
14
  * Add support for plus/times/dot/circle in text markers.
package/README.md CHANGED
@@ -10,7 +10,7 @@ and [PGN](https://en.wikipedia.org/wiki/Portable_Game_Notation) formats...).
10
10
 
11
11
  https://www.npmjs.com/package/kokopu-react
12
12
 
13
- [![Build Status](https://travis-ci.com/yo35/kokopu-react.svg?branch=master)](https://travis-ci.com/yo35/kokopu-react)
13
+ [![Build Status](https://app.travis-ci.com/yo35/kokopu-react.svg?branch=master)](https://app.travis-ci.com/yo35/kokopu-react)
14
14
  [![Coverage Status](https://coveralls.io/repos/github/yo35/kokopu-react/badge.svg?branch=master)](https://coveralls.io/github/yo35/kokopu-react?branch=master)
15
15
 
16
16
 
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
@@ -23,9 +23,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
23
23
 
24
24
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
25
25
 
26
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
26
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
27
27
 
28
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
28
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
29
29
 
30
30
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
31
31
 
@@ -35,11 +35,9 @@ require("./css/chessboard.css");
35
35
 
36
36
  require("./css/arrow.css");
37
37
 
38
- require("./css/label.css");
39
-
40
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
41
39
 
42
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
40
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
43
41
 
44
42
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
45
43
 
@@ -57,9 +55,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
57
55
 
58
56
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
59
57
 
60
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
58
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
61
59
 
62
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
60
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
63
61
 
64
62
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
65
63
 
@@ -695,7 +693,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
695
693
  var label = RANK_LABELS[rank];
696
694
  return /*#__PURE__*/_react["default"].createElement("text", {
697
695
  key: 'rank-' + label,
698
- className: "kokopu-coordinate kokopu-label",
696
+ className: "kokopu-coordinate",
699
697
  x: x,
700
698
  y: y,
701
699
  fontSize: fontSize
@@ -709,7 +707,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
709
707
  var label = FILE_LABELS[file];
710
708
  return /*#__PURE__*/_react["default"].createElement("text", {
711
709
  key: 'file-' + label,
712
- className: "kokopu-coordinate kokopu-label",
710
+ className: "kokopu-coordinate",
713
711
  x: x,
714
712
  y: y,
715
713
  fontSize: fontSize
@@ -917,7 +915,7 @@ var Chessboard = /*#__PURE__*/function (_React$Component) {
917
915
  };
918
916
  }
919
917
  /**
920
- * Return information regarding the current displayed position and move, or parsing error message if something went wrong.
918
+ * Return information regarding the currently displayed position and move, or parsing error message if something went wrong.
921
919
  */
922
920
 
923
921
  }, {
@@ -9,6 +9,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
 
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
 
12
+ var _i18n = _interopRequireDefault(require("./i18n"));
13
+
12
14
  require("./css/error_box.css");
13
15
 
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -16,7 +18,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
16
18
  /******************************************************************************
17
19
  * *
18
20
  * This file is part of Kokopu-React, a JavaScript chess library. *
19
- * Copyright (C) 2021 Yoann Le Montagner <yo35 -at- melix.net> *
21
+ * Copyright (C) 2021-2022 Yoann Le Montagner <yo35 -at- melix.net> *
20
22
  * *
21
23
  * This program is free software: you can redistribute it and/or *
22
24
  * modify it under the terms of the GNU Lesser General Public License *
@@ -33,18 +35,23 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
33
35
  * <http://www.gnu.org/licenses/>. *
34
36
  * *
35
37
  ******************************************************************************/
36
-
38
+ var BACKWARD_CHARACTERS = 5;
39
+ var FORWARD_CHARACTERS = 36;
37
40
  /**
38
41
  * Display an error message.
39
42
  */
43
+
40
44
  function ErrorBox(props) {
45
+ var excerpt = typeof props.text === 'string' && props.errorIndex >= 0 && props.errorIndex < props.text.length ? /*#__PURE__*/_react["default"].createElement("div", {
46
+ className: "kokopu-errorExcerpt"
47
+ }, ellipsisAt(props.text, props.errorIndex, BACKWARD_CHARACTERS, FORWARD_CHARACTERS, props.lineNumber)) : undefined;
41
48
  return /*#__PURE__*/_react["default"].createElement("div", {
42
49
  className: "kokopu-errorBox"
43
50
  }, /*#__PURE__*/_react["default"].createElement("div", {
44
51
  className: "kokopu-errorTitle"
45
52
  }, props.title), /*#__PURE__*/_react["default"].createElement("div", {
46
53
  className: "kokopu-errorMessage"
47
- }, props.message));
54
+ }, props.message), excerpt);
48
55
  }
49
56
 
50
57
  ErrorBox.propTypes = {
@@ -56,5 +63,78 @@ ErrorBox.propTypes = {
56
63
  /**
57
64
  * Additional message providing details about the error.
58
65
  */
59
- message: _propTypes["default"].string.isRequired
60
- };
66
+ message: _propTypes["default"].string.isRequired,
67
+
68
+ /**
69
+ * Raw text whose processing results in the error.
70
+ */
71
+ text: _propTypes["default"].string,
72
+
73
+ /**
74
+ * Index of the character within `text` that results in the error.
75
+ */
76
+ errorIndex: _propTypes["default"].number,
77
+
78
+ /**
79
+ * Index (1-based) of the line in which is the character that results in the error.
80
+ */
81
+ lineNumber: _propTypes["default"].number
82
+ };
83
+ /**
84
+ * Ellipsis function.
85
+ *
86
+ * Example: if `text` is `0123456789`, then `ellipsis(text, 5, 1, 3)` returns
87
+ * the following string:
88
+ *
89
+ * ```
90
+ * ...45678...
91
+ * ^
92
+ * ```
93
+ *
94
+ * @param {string} text Text from a substring must be extracted.
95
+ * @param {number} pos Index of the character in `text` around which the substring must be extracted.
96
+ * @param {number} backwardCharacters Number of characters to keep before `pos`.
97
+ * @param {number} forwardCharacters Number of characters to keep after `pos`.
98
+ * @returns {string}
99
+ */
100
+
101
+ function ellipsisAt(text, pos, backwardCharacters, forwardCharacters, lineNumber) {
102
+ // p1 => begin of the extracted sub-string
103
+ var p1 = pos;
104
+ var e1 = '... ';
105
+
106
+ while (p1 > pos - backwardCharacters) {
107
+ --p1;
108
+
109
+ if (p1 < 0 || text.charAt(p1) === '\n' || text.charAt(p1) === '\r') {
110
+ ++p1;
111
+ e1 = '';
112
+ break;
113
+ }
114
+ } // p2 => one character after the end of the extracted sub-string
115
+
116
+
117
+ var p2 = pos;
118
+ var e2 = ' ...';
119
+
120
+ while (p2 < pos + forwardCharacters) {
121
+ ++p2;
122
+
123
+ if (p2 >= text.length || text.charAt(p2) === '\n' || text.charAt(p2) === '\r') {
124
+ --p2;
125
+ e2 = '';
126
+ break;
127
+ }
128
+ } // Extract the sub-string around the requested position.
129
+
130
+
131
+ var excerpt = e1 + text.substring(p1, p2 + 1) + e2;
132
+ excerpt = excerpt.replace(/\n|\r|\t/g, ' ');
133
+ var secondLine = Array(1 + e1.length + pos - p1).join(' ') + '^';
134
+
135
+ if (lineNumber) {
136
+ secondLine += ' (' + _i18n["default"].LINE.replace(/\{0\}/g, lineNumber) + ')';
137
+ }
138
+
139
+ return excerpt + '\n' + secondLine;
140
+ }