@pie-lib/text-select 1.18.0 → 1.20.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.
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.Text = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
24
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
+
26
+ var _react = _interopRequireDefault(require("react"));
27
+
28
+ var _propTypes = _interopRequireDefault(require("prop-types"));
29
+
30
+ var _styles = require("@material-ui/core/styles");
31
+
32
+ var _builder = require("./builder");
33
+
34
+ var _yellow = _interopRequireDefault(require("@material-ui/core/colors/yellow"));
35
+
36
+ var _green = _interopRequireDefault(require("@material-ui/core/colors/green"));
37
+
38
+ var _debug = _interopRequireDefault(require("debug"));
39
+
40
+ var _classnames = _interopRequireDefault(require("classnames"));
41
+
42
+ var _selectionUtils = require("./selection-utils");
43
+
44
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
45
+
46
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
+
48
+ var log = (0, _debug["default"])('@pie-lib:text-select:token-text');
49
+ var Text = (0, _styles.withStyles)(function () {
50
+ return {
51
+ predefined: {
52
+ cursor: 'pointer',
53
+ backgroundColor: _yellow["default"][100],
54
+ border: "dashed 0px ".concat(_yellow["default"][700]),
55
+ // we need this for nested tokenized elements like paragraphs, where p is inside span
56
+ '& *': {
57
+ cursor: 'pointer',
58
+ backgroundColor: _yellow["default"][100],
59
+ border: "dashed 0px ".concat(_yellow["default"][700])
60
+ }
61
+ },
62
+ correct: {
63
+ backgroundColor: _green["default"][500],
64
+ '& *': {
65
+ backgroundColor: _green["default"][500]
66
+ }
67
+ }
68
+ };
69
+ })(function (_ref) {
70
+ var text = _ref.text,
71
+ predefined = _ref.predefined,
72
+ classes = _ref.classes,
73
+ onClick = _ref.onClick,
74
+ correct = _ref.correct;
75
+ var formattedText = (text || '').replace(/\n/g, '<br>');
76
+
77
+ if (predefined) {
78
+ var className = (0, _classnames["default"])(classes.predefined, correct && classes.correct);
79
+ return /*#__PURE__*/_react["default"].createElement("span", {
80
+ onClick: onClick,
81
+ className: className,
82
+ dangerouslySetInnerHTML: {
83
+ __html: formattedText
84
+ }
85
+ });
86
+ } else {
87
+ return /*#__PURE__*/_react["default"].createElement("span", {
88
+ dangerouslySetInnerHTML: {
89
+ __html: formattedText
90
+ }
91
+ });
92
+ }
93
+ });
94
+ exports.Text = Text;
95
+ var notAllowedCharacters = ['\n', ' ', '\t'];
96
+
97
+ var TokenText = /*#__PURE__*/function (_React$Component) {
98
+ (0, _inherits2["default"])(TokenText, _React$Component);
99
+
100
+ var _super = _createSuper(TokenText);
101
+
102
+ function TokenText() {
103
+ var _this;
104
+
105
+ (0, _classCallCheck2["default"])(this, TokenText);
106
+
107
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
108
+ args[_key] = arguments[_key];
109
+ }
110
+
111
+ _this = _super.call.apply(_super, [this].concat(args));
112
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onClick", function (event) {
113
+ var _this$props = _this.props,
114
+ onSelectToken = _this$props.onSelectToken,
115
+ text = _this$props.text,
116
+ tokens = _this$props.tokens;
117
+ event.preventDefault();
118
+
119
+ if (typeof window === 'undefined') {
120
+ return;
121
+ }
122
+
123
+ var selection = window.getSelection();
124
+ var textSelected = selection.toString();
125
+
126
+ if (textSelected.length > 0 && notAllowedCharacters.indexOf(textSelected) < 0) {
127
+ if (_this.root) {
128
+ var offset = (0, _selectionUtils.getCaretCharacterOffsetWithin)(_this.root);
129
+ /*
130
+ Since we implemented new line functionality (\n) using <br /> dom elements
131
+ and window.getSelection is not taking that into consideration, the offset might
132
+ be off by a few characters.
133
+ To combat that, we check if the selected text is right at the beginning of the offset.
134
+ If it's not, we add the additional offset in order for that to be accurate
135
+ */
136
+
137
+ var newLineOffset = text.slice(offset).indexOf(textSelected);
138
+ offset += newLineOffset;
139
+
140
+ if (offset !== undefined) {
141
+ var endIndex = offset + textSelected.length;
142
+
143
+ if (endIndex <= text.length) {
144
+ var i = (0, _builder.intersection)({
145
+ start: offset,
146
+ end: endIndex
147
+ }, tokens);
148
+
149
+ if (i.hasOverlap) {
150
+ log('hasOverlap - do nothing');
151
+ (0, _selectionUtils.clearSelection)();
152
+ } else {
153
+ var tokensToRemove = i.surroundedTokens;
154
+ var token = {
155
+ text: textSelected,
156
+ start: offset,
157
+ end: endIndex
158
+ };
159
+ onSelectToken(token, tokensToRemove);
160
+ (0, _selectionUtils.clearSelection)();
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ });
167
+ return _this;
168
+ }
169
+
170
+ (0, _createClass2["default"])(TokenText, [{
171
+ key: "render",
172
+ value: function render() {
173
+ var _this2 = this;
174
+
175
+ var _this$props2 = this.props,
176
+ text = _this$props2.text,
177
+ tokens = _this$props2.tokens,
178
+ className = _this$props2.className,
179
+ onTokenClick = _this$props2.onTokenClick;
180
+ var normalized = (0, _builder.normalize)(text, tokens);
181
+ return /*#__PURE__*/_react["default"].createElement("div", {
182
+ className: className,
183
+ ref: function ref(r) {
184
+ return _this2.root = r;
185
+ },
186
+ onClick: this.onClick
187
+ }, normalized.map(function (t, index) {
188
+ return /*#__PURE__*/_react["default"].createElement(Text, (0, _extends2["default"])({
189
+ key: index
190
+ }, t, {
191
+ onClick: function onClick() {
192
+ return onTokenClick(t);
193
+ }
194
+ }));
195
+ }));
196
+ }
197
+ }]);
198
+ return TokenText;
199
+ }(_react["default"].Component);
200
+
201
+ exports["default"] = TokenText;
202
+ (0, _defineProperty2["default"])(TokenText, "propTypes", {
203
+ text: _propTypes["default"].string.isRequired,
204
+ tokens: _propTypes["default"].array.isRequired,
205
+ onTokenClick: _propTypes["default"].func.isRequired,
206
+ onSelectToken: _propTypes["default"].func.isRequired,
207
+ className: _propTypes["default"].string
208
+ });
209
+ //# sourceMappingURL=token-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tokenizer/token-text.jsx"],"names":["log","Text","predefined","cursor","backgroundColor","yellow","border","correct","green","text","classes","onClick","formattedText","replace","className","__html","notAllowedCharacters","TokenText","event","props","onSelectToken","tokens","preventDefault","window","selection","getSelection","textSelected","toString","length","indexOf","root","offset","newLineOffset","slice","undefined","endIndex","i","start","end","hasOverlap","tokensToRemove","surroundedTokens","token","onTokenClick","normalized","r","map","t","index","React","Component","PropTypes","string","isRequired","array","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { normalize, intersection } from './builder';\nimport yellow from '@material-ui/core/colors/yellow';\nimport green from '@material-ui/core/colors/green';\nimport debug from 'debug';\nimport classNames from 'classnames';\n\nimport { clearSelection, getCaretCharacterOffsetWithin } from './selection-utils';\n\nconst log = debug('@pie-lib:text-select:token-text');\n\nexport const Text = withStyles(() => ({\n predefined: {\n cursor: 'pointer',\n backgroundColor: yellow[100],\n border: `dashed 0px ${yellow[700]}`,\n // we need this for nested tokenized elements like paragraphs, where p is inside span\n '& *': {\n cursor: 'pointer',\n backgroundColor: yellow[100],\n border: `dashed 0px ${yellow[700]}`,\n },\n },\n correct: {\n backgroundColor: green[500],\n '& *': {\n backgroundColor: green[500],\n },\n },\n}))(({ text, predefined, classes, onClick, correct }) => {\n const formattedText = (text || '').replace(/\\n/g, '<br>');\n\n if (predefined) {\n const className = classNames(classes.predefined, correct && classes.correct);\n\n return <span onClick={onClick} className={className} dangerouslySetInnerHTML={{ __html: formattedText }} />;\n } else {\n return <span dangerouslySetInnerHTML={{ __html: formattedText }} />;\n }\n});\n\nconst notAllowedCharacters = ['\\n', ' ', '\\t'];\n\nexport default class TokenText extends React.Component {\n static propTypes = {\n text: PropTypes.string.isRequired,\n tokens: PropTypes.array.isRequired,\n onTokenClick: PropTypes.func.isRequired,\n onSelectToken: PropTypes.func.isRequired,\n className: PropTypes.string,\n };\n\n /*\n Change this to onClick instead of mouseUp because previously, in some cases\n the onClick event from the <Text /> component was called right after the user\n selected token and that token was then removed because the setCorrectMode was not true.\n\n const { setCorrectMode } = this.state;\n\n if (setCorrectMode) {\n this.setCorrect(token);\n } else {\n this.removeToken(token);\n }\n */\n onClick = (event) => {\n const { onSelectToken, text, tokens } = this.props;\n\n event.preventDefault();\n\n if (typeof window === 'undefined') {\n return;\n }\n\n const selection = window.getSelection();\n const textSelected = selection.toString();\n\n if (textSelected.length > 0 && notAllowedCharacters.indexOf(textSelected) < 0) {\n if (this.root) {\n let offset = getCaretCharacterOffsetWithin(this.root);\n /*\n Since we implemented new line functionality (\\n) using <br /> dom elements\n and window.getSelection is not taking that into consideration, the offset might\n be off by a few characters.\n\n To combat that, we check if the selected text is right at the beginning of the offset.\n\n If it's not, we add the additional offset in order for that to be accurate\n */\n const newLineOffset = text.slice(offset).indexOf(textSelected);\n\n offset += newLineOffset;\n\n if (offset !== undefined) {\n const endIndex = offset + textSelected.length;\n\n if (endIndex <= text.length) {\n const i = intersection({ start: offset, end: endIndex }, tokens);\n if (i.hasOverlap) {\n log('hasOverlap - do nothing');\n clearSelection();\n } else {\n const tokensToRemove = i.surroundedTokens;\n const token = {\n text: textSelected,\n start: offset,\n end: endIndex,\n };\n\n onSelectToken(token, tokensToRemove);\n clearSelection();\n }\n }\n }\n }\n }\n };\n\n render() {\n const { text, tokens, className, onTokenClick } = this.props;\n const normalized = normalize(text, tokens);\n\n return (\n <div className={className} ref={(r) => (this.root = r)} onClick={this.onClick}>\n {normalized.map((t, index) => {\n return <Text key={index} {...t} onClick={() => onTokenClick(t)} />;\n })}\n </div>\n );\n }\n}\n"],"file":"token-text.js"}
package/lib/utils.js ADDED
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.prepareText = exports.parseParagraphs = exports.parseParagraph = exports.parseBrs = void 0;
7
+
8
+ var createElementFromHTML = function createElementFromHTML() {
9
+ var htmlString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
10
+ var div = document.createElement('div');
11
+ div.innerHTML = htmlString.trim();
12
+ return div;
13
+ };
14
+
15
+ var parseBrs = function parseBrs(dom) {
16
+ var brs = dom.querySelectorAll('br');
17
+ brs.forEach(function (br) {
18
+ return br.replaceWith('\n');
19
+ });
20
+ dom.innerHTML = dom.innerHTML.replace(/\n\n/g, '\n');
21
+ };
22
+
23
+ exports.parseBrs = parseBrs;
24
+
25
+ var parseParagraph = function parseParagraph(paragraph, end) {
26
+ if (end) {
27
+ return paragraph.innerHTML;
28
+ }
29
+
30
+ return "".concat(paragraph.innerHTML, "\n\n");
31
+ };
32
+
33
+ exports.parseParagraph = parseParagraph;
34
+
35
+ var parseParagraphs = function parseParagraphs(dom) {
36
+ var paragraphs = dom.querySelectorAll('p'); // separate variable for easily debugging, if needed
37
+
38
+ var str = '';
39
+ paragraphs.forEach(function (par, index) {
40
+ str += parseParagraph(par, index === paragraphs.length - 1);
41
+ });
42
+ return str || null;
43
+ };
44
+
45
+ exports.parseParagraphs = parseParagraphs;
46
+
47
+ var prepareText = function prepareText(text) {
48
+ var txtDom = createElementFromHTML(text);
49
+ var allDomElements = Array.from(txtDom.querySelectorAll('*'));
50
+
51
+ if (txtDom.querySelectorAll('p').length === 0) {
52
+ var div = document.createElement('div');
53
+ div.innerHTML = "<p>".concat(txtDom.innerHTML, "</p>");
54
+ txtDom = div;
55
+ } // if no dom elements, we just return the text
56
+
57
+
58
+ if (allDomElements.length === 0) {
59
+ return text;
60
+ }
61
+
62
+ parseBrs(txtDom);
63
+ return parseParagraphs(txtDom);
64
+ };
65
+
66
+ exports.prepareText = prepareText;
67
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.js"],"names":["createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","parseBrs","dom","brs","querySelectorAll","forEach","br","replaceWith","replace","parseParagraph","paragraph","end","parseParagraphs","paragraphs","str","par","index","length","prepareText","text","txtDom","allDomElements","Array","from"],"mappings":";;;;;;;AAAA,IAAMA,qBAAqB,GAAG,SAAxBA,qBAAwB,GAAqB;AAAA,MAApBC,UAAoB,uEAAP,EAAO;AACjD,MAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAZ;AAEAF,EAAAA,GAAG,CAACG,SAAJ,GAAgBJ,UAAU,CAACK,IAAX,EAAhB;AAEA,SAAOJ,GAAP;AACD,CAND;;AAQO,IAAMK,QAAQ,GAAG,SAAXA,QAAW,CAACC,GAAD,EAAS;AAC/B,MAAMC,GAAG,GAAGD,GAAG,CAACE,gBAAJ,CAAqB,IAArB,CAAZ;AAEAD,EAAAA,GAAG,CAACE,OAAJ,CAAY,UAACC,EAAD;AAAA,WAAQA,EAAE,CAACC,WAAH,CAAe,IAAf,CAAR;AAAA,GAAZ;AAEAL,EAAAA,GAAG,CAACH,SAAJ,GAAgBG,GAAG,CAACH,SAAJ,CAAcS,OAAd,CAAsB,OAAtB,EAA+B,IAA/B,CAAhB;AACD,CANM;;;;AAQA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,SAAD,EAAYC,GAAZ,EAAoB;AAChD,MAAIA,GAAJ,EAAS;AACP,WAAOD,SAAS,CAACX,SAAjB;AACD;;AAED,mBAAUW,SAAS,CAACX,SAApB;AACD,CANM;;;;AAQA,IAAMa,eAAe,GAAG,SAAlBA,eAAkB,CAACV,GAAD,EAAS;AACtC,MAAMW,UAAU,GAAGX,GAAG,CAACE,gBAAJ,CAAqB,GAArB,CAAnB,CADsC,CAEtC;;AACA,MAAIU,GAAG,GAAG,EAAV;AAEAD,EAAAA,UAAU,CAACR,OAAX,CAAmB,UAACU,GAAD,EAAMC,KAAN,EAAgB;AACjCF,IAAAA,GAAG,IAAIL,cAAc,CAACM,GAAD,EAAMC,KAAK,KAAKH,UAAU,CAACI,MAAX,GAAoB,CAApC,CAArB;AACD,GAFD;AAIA,SAAOH,GAAG,IAAI,IAAd;AACD,CAVM;;;;AAYA,IAAMI,WAAW,GAAG,SAAdA,WAAc,CAACC,IAAD,EAAU;AACnC,MAAIC,MAAM,GAAG1B,qBAAqB,CAACyB,IAAD,CAAlC;AACA,MAAME,cAAc,GAAGC,KAAK,CAACC,IAAN,CAAWH,MAAM,CAAChB,gBAAP,CAAwB,GAAxB,CAAX,CAAvB;;AAEA,MAAIgB,MAAM,CAAChB,gBAAP,CAAwB,GAAxB,EAA6Ba,MAA7B,KAAwC,CAA5C,EAA+C;AAC7C,QAAMrB,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAZ;AAEAF,IAAAA,GAAG,CAACG,SAAJ,gBAAsBqB,MAAM,CAACrB,SAA7B;AACAqB,IAAAA,MAAM,GAAGxB,GAAT;AACD,GATkC,CAWnC;;;AACA,MAAIyB,cAAc,CAACJ,MAAf,KAA0B,CAA9B,EAAiC;AAC/B,WAAOE,IAAP;AACD;;AAEDlB,EAAAA,QAAQ,CAACmB,MAAD,CAAR;AAEA,SAAOR,eAAe,CAACQ,MAAD,CAAtB;AACD,CAnBM","sourcesContent":["const createElementFromHTML = (htmlString = '') => {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nexport const parseBrs = (dom) => {\n const brs = dom.querySelectorAll('br');\n\n brs.forEach((br) => br.replaceWith('\\n'));\n\n dom.innerHTML = dom.innerHTML.replace(/\\n\\n/g, '\\n');\n};\n\nexport const parseParagraph = (paragraph, end) => {\n if (end) {\n return paragraph.innerHTML;\n }\n\n return `${paragraph.innerHTML}\\n\\n`;\n};\n\nexport const parseParagraphs = (dom) => {\n const paragraphs = dom.querySelectorAll('p');\n // separate variable for easily debugging, if needed\n let str = '';\n\n paragraphs.forEach((par, index) => {\n str += parseParagraph(par, index === paragraphs.length - 1);\n });\n\n return str || null;\n};\n\nexport const prepareText = (text) => {\n let txtDom = createElementFromHTML(text);\n const allDomElements = Array.from(txtDom.querySelectorAll('*'));\n\n if (txtDom.querySelectorAll('p').length === 0) {\n const div = document.createElement('div');\n\n div.innerHTML = `<p>${txtDom.innerHTML}</p>`;\n txtDom = div;\n }\n\n // if no dom elements, we just return the text\n if (allDomElements.length === 0) {\n return text;\n }\n\n parseBrs(txtDom);\n\n return parseParagraphs(txtDom);\n};\n"],"file":"utils.js"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.18.0",
6
+ "version": "1.20.0",
7
7
  "description": "Some react components for text selection",
8
8
  "keywords": [
9
9
  "react",
@@ -19,9 +19,9 @@
19
19
  "dependencies": {
20
20
  "@material-ui/icons": "^3.0.2",
21
21
  "@pie-framework/parse-english": "^1.0.0",
22
- "@pie-lib/render-ui": "^4.21.0",
23
- "@pie-lib/style-utils": "^0.7.0",
24
- "@pie-lib/translator": "^2.9.0",
22
+ "@pie-lib/render-ui": "^4.23.0",
23
+ "@pie-lib/style-utils": "^0.9.0",
24
+ "@pie-lib/translator": "^2.11.0",
25
25
  "classnames": "^2.2.6",
26
26
  "debug": "^4.1.1",
27
27
  "invariant": "^2.2.4",
@@ -32,7 +32,7 @@
32
32
  "devDependencies": {
33
33
  "@material-ui/core": "^3.8.3",
34
34
  "@pie-framework/parse-english": "^1.0.0",
35
- "@pie-lib/test-utils": "^0.8.0",
35
+ "@pie-lib/test-utils": "^0.10.0",
36
36
  "natural": "^0.6.3",
37
37
  "react": "^16.8.1",
38
38
  "react-dom": "^16.9.0"
@@ -41,6 +41,6 @@
41
41
  "@material-ui/core": "^3.8.3",
42
42
  "react": "^16.8.1"
43
43
  },
44
- "gitHead": "889a13bfea2c768b8a3a6eabfc6fe7b7725aa832",
44
+ "gitHead": "7ca3b0a214af57d742b4a9de6d8b424d31da1469",
45
45
  "scripts": {}
46
46
  }