@pie-lib/text-select 1.9.29 → 1.9.30-next.32
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/lib/text-select.js +3 -1
- package/lib/text-select.js.map +1 -1
- package/lib/token-select/index.js +1 -1
- package/lib/token-select/index.js.map +1 -1
- package/lib/token-select/token.js +67 -6
- package/lib/token-select/token.js.map +1 -1
- package/lib/tokenizer/builder.js +4 -2
- package/lib/tokenizer/builder.js.map +1 -1
- package/package.json +3 -3
- package/src/text-select.jsx +2 -0
- package/src/token-select/index.jsx +1 -0
- package/src/token-select/token.jsx +65 -14
- package/src/tokenizer/builder.js +2 -0
package/lib/text-select.js
CHANGED
|
@@ -101,10 +101,12 @@ var TextSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
101
101
|
});
|
|
102
102
|
var selected = selectedIndex !== -1;
|
|
103
103
|
var correct = selected ? t.correct : undefined;
|
|
104
|
+
var isMissing = t.isMissing;
|
|
104
105
|
return _objectSpread(_objectSpread({}, t), {}, {
|
|
105
106
|
selectable: !disabled && t.predefined,
|
|
106
107
|
selected: selected,
|
|
107
|
-
correct: correct
|
|
108
|
+
correct: correct,
|
|
109
|
+
isMissing: isMissing
|
|
108
110
|
});
|
|
109
111
|
});
|
|
110
112
|
return /*#__PURE__*/_react["default"].createElement(_tokenSelect["default"], {
|
package/lib/text-select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/text-select.jsx"],"names":["log","TextSelect","tokens","onChange","props","out","filter","t","selected","map","start","end","text","disabled","selectedTokens","className","highlightChoices","maxNoOfSelections","animationsDisabled","normalized","prepped","selectedIndex","findIndex","s","correct","undefined","selectable","predefined","change","React","Component","PropTypes","func","bool","arrayOf","shape","TokenTypes","isRequired","string","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,sBAAN,CAAZ;AACA;AACA;AACA;;IACqBC,U;;;;;;;;;;;;;;;+FAaV,UAACC,MAAD,EAAY;AACnB,UAAQC,QAAR,GAAqB,MAAKC,KAA1B,CAAQD,QAAR;;AAEA,UAAI,CAACA,QAAL,EAAe;AACb;AACD;;AACD,UAAME,GAAG,GAAGH,MAAM,CAACI,MAAP,CAAc,UAACC,CAAD;AAAA,eAAOA,CAAC,CAACC,QAAT;AAAA,OAAd,EAAiCC,GAAjC,CAAqC,UAACF,CAAD;AAAA,eAAQ;AAAEG,UAAAA,KAAK,EAAEH,CAAC,CAACG,KAAX;AAAkBC,UAAAA,GAAG,EAAEJ,CAAC,CAACI;AAAzB,SAAR;AAAA,OAArC,CAAZ;AAEAR,MAAAA,QAAQ,CAACE,GAAD,CAAR;AACD,K;;;;;;WAED,kBAAS;AACP,wBASI,KAAKD,KATT;AAAA,UACEQ,IADF,eACEA,IADF;AAAA,UAEEC,QAFF,eAEEA,QAFF;AAAA,UAGEX,MAHF,eAGEA,MAHF;AAAA,UAIEY,cAJF,eAIEA,cAJF;AAAA,UAKEC,SALF,eAKEA,SALF;AAAA,UAMEC,gBANF,eAMEA,gBANF;AAAA,UAOEC,iBAPF,eAOEA,iBAPF;AAAA,UAQEC,kBARF,eAQEA,kBARF;AAWA,UAAMC,UAAU,GAAG,wBAAUP,IAAV,EAAgBV,MAAhB,CAAnB;AACAF,MAAAA,GAAG,CAAC,cAAD,EAAiBmB,UAAjB,CAAH;AACA,UAAMC,OAAO,GAAGD,UAAU,CAACV,GAAX,CAAe,UAACF,CAAD,EAAO;AACpC,YAAMc,aAAa,GAAGP,cAAc,CAACQ,SAAf,CAAyB,UAACC,CAAD,EAAO;AACpD,iBAAOA,CAAC,CAACb,KAAF,KAAYH,CAAC,CAACG,KAAd,IAAuBa,CAAC,CAACZ,GAAF,KAAUJ,CAAC,CAACI,GAA1C;AACD,SAFqB,CAAtB;AAGA,YAAMH,QAAQ,GAAGa,aAAa,KAAK,CAAC,CAApC;AACA,YAAMG,OAAO,GAAGhB,QAAQ,GAAGD,CAAC,CAACiB,OAAL,GAAeC,SAAvC;AACA,+
|
|
1
|
+
{"version":3,"sources":["../src/text-select.jsx"],"names":["log","TextSelect","tokens","onChange","props","out","filter","t","selected","map","start","end","text","disabled","selectedTokens","className","highlightChoices","maxNoOfSelections","animationsDisabled","normalized","prepped","selectedIndex","findIndex","s","correct","undefined","isMissing","selectable","predefined","change","React","Component","PropTypes","func","bool","arrayOf","shape","TokenTypes","isRequired","string","number"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport TokenSelect from './token-select';\nimport { normalize } from './tokenizer/builder';\nimport { TokenTypes } from './token-select/token';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:text-select');\n/**\n * Built on TokenSelect uses build.normalize to build the token set.\n */\nexport default class TextSelect extends React.Component {\n static propTypes = {\n onChange: PropTypes.func,\n disabled: PropTypes.bool,\n tokens: PropTypes.arrayOf(PropTypes.shape(TokenTypes)).isRequired,\n selectedTokens: PropTypes.arrayOf(PropTypes.shape(TokenTypes)).isRequired,\n text: PropTypes.string.isRequired,\n className: PropTypes.string,\n highlightChoices: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n maxNoOfSelections: PropTypes.number,\n };\n\n change = (tokens) => {\n const { onChange } = this.props;\n\n if (!onChange) {\n return;\n }\n const out = tokens.filter((t) => t.selected).map((t) => ({ start: t.start, end: t.end }));\n\n onChange(out);\n };\n\n render() {\n const {\n text,\n disabled,\n tokens,\n selectedTokens,\n className,\n highlightChoices,\n maxNoOfSelections,\n animationsDisabled,\n } = this.props;\n\n const normalized = normalize(text, tokens);\n log('normalized: ', normalized);\n const prepped = normalized.map((t) => {\n const selectedIndex = selectedTokens.findIndex((s) => {\n return s.start === t.start && s.end === t.end;\n });\n const selected = selectedIndex !== -1;\n const correct = selected ? t.correct : undefined;\n const isMissing = t.isMissing;\n return {\n ...t,\n selectable: !disabled && t.predefined,\n selected,\n correct,\n isMissing,\n };\n });\n\n return (\n <TokenSelect\n highlightChoices={!disabled && highlightChoices}\n className={className}\n tokens={prepped}\n disabled={disabled}\n onChange={this.change}\n maxNoOfSelections={maxNoOfSelections}\n animationsDisabled={animationsDisabled}\n />\n );\n }\n}\n"],"file":"text-select.js"}
|
|
@@ -173,7 +173,7 @@ var TokenSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
173
173
|
return finalAcc + '<br>';
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
if (selectable && !disabled || showCorrectAnswer || t.selected || animationsDisabled && t.predefined // if we are in print mode
|
|
176
|
+
if (selectable && !disabled || showCorrectAnswer || t.selected || t.isMissing || animationsDisabled && t.predefined // if we are in print mode
|
|
177
177
|
) {
|
|
178
178
|
return finalAcc + (0, _server.renderToString)( /*#__PURE__*/_react["default"].createElement(_token["default"], (0, _extends2["default"])({
|
|
179
179
|
key: index,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/token-select/index.jsx"],"names":["log","TokenSelect","props","tokens","filter","t","selected","length","selectedCount","maxNoOfSelections","isFinite","event","target","animationsDisabled","tokensCloned","targetSpanWrapper","closest","Token","rootClassName","targetedTokenIndex","dataset","indexkey","correct","undefined","onChange","selectedToken","updatedTokens","map","token","selectable","update","splice","disabled","highlightChoices","isLineBreak","text","isNewParagraph","reducer","accumulator","index","canSelectMore","showCorrectAnswer","finalAcc","predefined","reduceResult","reduce","classes","classNameProp","className","tokenSelect","html","generateTokensInHtml","__html","toggleToken","React","Component","PropTypes","arrayOf","shape","TokenTypes","isRequired","string","object","func","bool","number","backgroundColor","whiteSpace"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Token, { TokenTypes } from './token';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport clone from 'lodash/clone';\nimport debug from 'debug';\nimport { noSelect } from '@pie-lib/style-utils';\nimport { renderToString } from 'react-dom/server';\nimport isEqual from 'lodash/isEqual';\n\nconst log = debug('@pie-lib:text-select:token-select');\n\nexport class TokenSelect extends React.Component {\n static propTypes = {\n tokens: PropTypes.arrayOf(PropTypes.shape(TokenTypes)).isRequired,\n className: PropTypes.string,\n classes: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n highlightChoices: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n maxNoOfSelections: PropTypes.number,\n };\n\n static defaultProps = {\n highlightChoices: false,\n maxNoOfSelections: 0,\n tokens: [],\n };\n\n selectedCount = () => this.props.tokens.filter((t) => t.selected).length;\n\n canSelectMore = (selectedCount) => {\n const { maxNoOfSelections } = this.props;\n\n if (maxNoOfSelections === 1) {\n return true;\n }\n\n log('[canSelectMore] maxNoOfSelections: ', maxNoOfSelections, 'selectedCount: ', selectedCount);\n return maxNoOfSelections <= 0 || (isFinite(maxNoOfSelections) && selectedCount < maxNoOfSelections);\n };\n\n /**\n @function\n @param { object } event\n\n @description\n each token is wrapped into a span that has Token.rootClassName class and indexkey attribute (represents the index of the token)\n tokens are updated with the targeted token having the correct value set for 'selected' property\n */\n toggleToken = (event) => {\n const { target } = event;\n const { tokens, animationsDisabled } = this.props;\n const tokensCloned = clone(tokens);\n const targetSpanWrapper = target.closest(`.${Token.rootClassName}`);\n const targetedTokenIndex = targetSpanWrapper && targetSpanWrapper.dataset && targetSpanWrapper.dataset.indexkey;\n const t = targetedTokenIndex && tokensCloned[targetedTokenIndex];\n\n if (t && t.correct === undefined && !animationsDisabled) {\n const { onChange, maxNoOfSelections } = this.props;\n const selected = !t.selected;\n\n if (maxNoOfSelections === 1 && this.selectedCount() === 1) {\n const selectedToken = (tokens || []).filter((t) => t.selected);\n\n const updatedTokens = tokensCloned.map((token) => {\n if (isEqual(token, selectedToken[0])) {\n return { ...token, selected: false };\n }\n\n return { ...token, selectable: true };\n });\n\n const update = { ...t, selected: !t.selected };\n\n updatedTokens.splice(targetedTokenIndex, 1, update);\n onChange(updatedTokens);\n } else {\n if (selected && maxNoOfSelections > 0 && this.selectedCount() >= maxNoOfSelections) {\n log('skip toggle max reached');\n return;\n }\n\n const update = { ...t, selected: !t.selected };\n\n tokensCloned.splice(targetedTokenIndex, 1, update);\n onChange(tokensCloned);\n }\n }\n };\n\n generateTokensInHtml = () => {\n const { tokens, disabled, highlightChoices, animationsDisabled } = this.props;\n const selectedCount = this.selectedCount();\n const isLineBreak = (text) => text === '\\n';\n const isNewParagraph = (text) => text === '\\n\\n';\n\n const reducer = (accumulator, t, index) => {\n const selectable = t.selected || (t.selectable && this.canSelectMore(selectedCount));\n const showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);\n let finalAcc = accumulator;\n\n if (isNewParagraph(t.text)) {\n return finalAcc + '</p><p>';\n }\n\n if (isLineBreak(t.text)) {\n return finalAcc + '<br>';\n }\n\n if (\n (selectable && !disabled) ||\n showCorrectAnswer ||\n t.selected ||\n (animationsDisabled && t.predefined) // if we are in print mode\n ) {\n return (\n finalAcc +\n renderToString(\n <Token\n key={index}\n disabled={disabled}\n index={index}\n {...t}\n selectable={selectable}\n highlight={highlightChoices}\n animationsDisabled={animationsDisabled}\n />,\n )\n );\n } else {\n return accumulator + t.text;\n }\n };\n\n const reduceResult = (tokens || []).reduce(reducer, '<p>');\n\n return reduceResult + '</p>';\n };\n\n render() {\n const { classes, className: classNameProp } = this.props;\n const className = classNames(classes.tokenSelect, classNameProp);\n const html = this.generateTokensInHtml();\n\n return <div className={className} dangerouslySetInnerHTML={{ __html: html }} onClick={this.toggleToken} />;\n }\n}\n\nexport default withStyles(() => ({\n tokenSelect: {\n backgroundColor: 'none',\n whiteSpace: 'pre',\n ...noSelect(),\n '& p': {\n whiteSpace: 'break-spaces',\n },\n },\n}))(TokenSelect);\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/token-select/index.jsx"],"names":["log","TokenSelect","props","tokens","filter","t","selected","length","selectedCount","maxNoOfSelections","isFinite","event","target","animationsDisabled","tokensCloned","targetSpanWrapper","closest","Token","rootClassName","targetedTokenIndex","dataset","indexkey","correct","undefined","onChange","selectedToken","updatedTokens","map","token","selectable","update","splice","disabled","highlightChoices","isLineBreak","text","isNewParagraph","reducer","accumulator","index","canSelectMore","showCorrectAnswer","finalAcc","isMissing","predefined","reduceResult","reduce","classes","classNameProp","className","tokenSelect","html","generateTokensInHtml","__html","toggleToken","React","Component","PropTypes","arrayOf","shape","TokenTypes","isRequired","string","object","func","bool","number","backgroundColor","whiteSpace"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,mCAAN,CAAZ;;IAEaC,W;;;;;;;;;;;;;;;sGAkBK;AAAA,aAAM,MAAKC,KAAL,CAAWC,MAAX,CAAkBC,MAAlB,CAAyB,UAACC,CAAD;AAAA,eAAOA,CAAC,CAACC,QAAT;AAAA,OAAzB,EAA4CC,MAAlD;AAAA,K;sGAEA,UAACC,aAAD,EAAmB;AACjC,UAAQC,iBAAR,GAA8B,MAAKP,KAAnC,CAAQO,iBAAR;;AAEA,UAAIA,iBAAiB,KAAK,CAA1B,EAA6B;AAC3B,eAAO,IAAP;AACD;;AAEDT,MAAAA,GAAG,CAAC,qCAAD,EAAwCS,iBAAxC,EAA2D,iBAA3D,EAA8ED,aAA9E,CAAH;AACA,aAAOC,iBAAiB,IAAI,CAArB,IAA2BC,QAAQ,CAACD,iBAAD,CAAR,IAA+BD,aAAa,GAAGC,iBAAjF;AACD,K;oGAUa,UAACE,KAAD,EAAW;AACvB,UAAQC,MAAR,GAAmBD,KAAnB,CAAQC,MAAR;AACA,wBAAuC,MAAKV,KAA5C;AAAA,UAAQC,MAAR,eAAQA,MAAR;AAAA,UAAgBU,kBAAhB,eAAgBA,kBAAhB;AACA,UAAMC,YAAY,GAAG,uBAAMX,MAAN,CAArB;AACA,UAAMY,iBAAiB,GAAGH,MAAM,CAACI,OAAP,YAAmBC,kBAAMC,aAAzB,EAA1B;AACA,UAAMC,kBAAkB,GAAGJ,iBAAiB,IAAIA,iBAAiB,CAACK,OAAvC,IAAkDL,iBAAiB,CAACK,OAAlB,CAA0BC,QAAvG;AACA,UAAMhB,CAAC,GAAGc,kBAAkB,IAAIL,YAAY,CAACK,kBAAD,CAA5C;;AAEA,UAAId,CAAC,IAAIA,CAAC,CAACiB,OAAF,KAAcC,SAAnB,IAAgC,CAACV,kBAArC,EAAyD;AACvD,2BAAwC,MAAKX,KAA7C;AAAA,YAAQsB,QAAR,gBAAQA,QAAR;AAAA,YAAkBf,iBAAlB,gBAAkBA,iBAAlB;AACA,YAAMH,QAAQ,GAAG,CAACD,CAAC,CAACC,QAApB;;AAEA,YAAIG,iBAAiB,KAAK,CAAtB,IAA2B,MAAKD,aAAL,OAAyB,CAAxD,EAA2D;AACzD,cAAMiB,aAAa,GAAG,CAACtB,MAAM,IAAI,EAAX,EAAeC,MAAf,CAAsB,UAACC,CAAD;AAAA,mBAAOA,CAAC,CAACC,QAAT;AAAA,WAAtB,CAAtB;AAEA,cAAMoB,aAAa,GAAGZ,YAAY,CAACa,GAAb,CAAiB,UAACC,KAAD,EAAW;AAChD,gBAAI,yBAAQA,KAAR,EAAeH,aAAa,CAAC,CAAD,CAA5B,CAAJ,EAAsC;AACpC,qDAAYG,KAAZ;AAAmBtB,gBAAAA,QAAQ,EAAE;AAA7B;AACD;;AAED,mDAAYsB,KAAZ;AAAmBC,cAAAA,UAAU,EAAE;AAA/B;AACD,WANqB,CAAtB;;AAQA,cAAMC,MAAM,mCAAQzB,CAAR;AAAWC,YAAAA,QAAQ,EAAE,CAACD,CAAC,CAACC;AAAxB,YAAZ;;AAEAoB,UAAAA,aAAa,CAACK,MAAd,CAAqBZ,kBAArB,EAAyC,CAAzC,EAA4CW,MAA5C;AACAN,UAAAA,QAAQ,CAACE,aAAD,CAAR;AACD,SAfD,MAeO;AACL,cAAIpB,QAAQ,IAAIG,iBAAiB,GAAG,CAAhC,IAAqC,MAAKD,aAAL,MAAwBC,iBAAjE,EAAoF;AAClFT,YAAAA,GAAG,CAAC,yBAAD,CAAH;AACA;AACD;;AAED,cAAM8B,OAAM,mCAAQzB,CAAR;AAAWC,YAAAA,QAAQ,EAAE,CAACD,CAAC,CAACC;AAAxB,YAAZ;;AAEAQ,UAAAA,YAAY,CAACiB,MAAb,CAAoBZ,kBAApB,EAAwC,CAAxC,EAA2CW,OAA3C;AACAN,UAAAA,QAAQ,CAACV,YAAD,CAAR;AACD;AACF;AACF,K;6GAEsB,YAAM;AAC3B,yBAAmE,MAAKZ,KAAxE;AAAA,UAAQC,MAAR,gBAAQA,MAAR;AAAA,UAAgB6B,QAAhB,gBAAgBA,QAAhB;AAAA,UAA0BC,gBAA1B,gBAA0BA,gBAA1B;AAAA,UAA4CpB,kBAA5C,gBAA4CA,kBAA5C;;AACA,UAAML,aAAa,GAAG,MAAKA,aAAL,EAAtB;;AACA,UAAM0B,WAAW,GAAG,SAAdA,WAAc,CAACC,IAAD;AAAA,eAAUA,IAAI,KAAK,IAAnB;AAAA,OAApB;;AACA,UAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACD,IAAD;AAAA,eAAUA,IAAI,KAAK,MAAnB;AAAA,OAAvB;;AAEA,UAAME,OAAO,GAAG,SAAVA,OAAU,CAACC,WAAD,EAAcjC,CAAd,EAAiBkC,KAAjB,EAA2B;AACzC,YAAMV,UAAU,GAAGxB,CAAC,CAACC,QAAF,IAAeD,CAAC,CAACwB,UAAF,IAAgB,MAAKW,aAAL,CAAmBhC,aAAnB,CAAlD;;AACA,YAAMiC,iBAAiB,GAAGpC,CAAC,CAACiB,OAAF,KAAcC,SAAd,KAA4BlB,CAAC,CAACwB,UAAF,IAAgBxB,CAAC,CAACC,QAA9C,CAA1B;AACA,YAAIoC,QAAQ,GAAGJ,WAAf;;AAEA,YAAIF,cAAc,CAAC/B,CAAC,CAAC8B,IAAH,CAAlB,EAA4B;AAC1B,iBAAOO,QAAQ,GAAG,SAAlB;AACD;;AAED,YAAIR,WAAW,CAAC7B,CAAC,CAAC8B,IAAH,CAAf,EAAyB;AACvB,iBAAOO,QAAQ,GAAG,MAAlB;AACD;;AAED,YACGb,UAAU,IAAI,CAACG,QAAhB,IACAS,iBADA,IAEApC,CAAC,CAACC,QAFF,IAGAD,CAAC,CAACsC,SAHF,IAIC9B,kBAAkB,IAAIR,CAAC,CAACuC,UAL3B,CAKuC;AALvC,UAME;AACA,iBACEF,QAAQ,GACR,0CACE,gCAAC,iBAAD;AACE,YAAA,GAAG,EAAEH,KADP;AAEE,YAAA,QAAQ,EAAEP,QAFZ;AAGE,YAAA,KAAK,EAAEO;AAHT,aAIMlC,CAJN;AAKE,YAAA,UAAU,EAAEwB,UALd;AAME,YAAA,SAAS,EAAEI,gBANb;AAOE,YAAA,kBAAkB,EAAEpB;AAPtB,aADF,CAFF;AAcD,SArBD,MAqBO;AACL,iBAAOyB,WAAW,GAAGjC,CAAC,CAAC8B,IAAvB;AACD;AACF,OArCD;;AAuCA,UAAMU,YAAY,GAAG,CAAC1C,MAAM,IAAI,EAAX,EAAe2C,MAAf,CAAsBT,OAAtB,EAA+B,KAA/B,CAArB;AAEA,aAAOQ,YAAY,GAAG,MAAtB;AACD,K;;;;;;WAED,kBAAS;AACP,yBAA8C,KAAK3C,KAAnD;AAAA,UAAQ6C,OAAR,gBAAQA,OAAR;AAAA,UAA4BC,aAA5B,gBAAiBC,SAAjB;AACA,UAAMA,SAAS,GAAG,4BAAWF,OAAO,CAACG,WAAnB,EAAgCF,aAAhC,CAAlB;AACA,UAAMG,IAAI,GAAG,KAAKC,oBAAL,EAAb;AAEA,0BAAO;AAAK,QAAA,SAAS,EAAEH,SAAhB;AAA2B,QAAA,uBAAuB,EAAE;AAAEI,UAAAA,MAAM,EAAEF;AAAV,SAApD;AAAsE,QAAA,OAAO,EAAE,KAAKG;AAApF,QAAP;AACD;;;EAxI8BC,kBAAMC,S;;;iCAA1BvD,W,eACQ;AACjBE,EAAAA,MAAM,EAAEsD,sBAAUC,OAAV,CAAkBD,sBAAUE,KAAV,CAAgBC,iBAAhB,CAAlB,EAA+CC,UADtC;AAEjBZ,EAAAA,SAAS,EAAEQ,sBAAUK,MAFJ;AAGjBf,EAAAA,OAAO,EAAEU,sBAAUM,MAAV,CAAiBF,UAHT;AAIjBrC,EAAAA,QAAQ,EAAEiC,sBAAUO,IAAV,CAAeH,UAJR;AAKjB7B,EAAAA,QAAQ,EAAEyB,sBAAUQ,IALH;AAMjBhC,EAAAA,gBAAgB,EAAEwB,sBAAUQ,IANX;AAOjBpD,EAAAA,kBAAkB,EAAE4C,sBAAUQ,IAPb;AAQjBxD,EAAAA,iBAAiB,EAAEgD,sBAAUS;AARZ,C;iCADRjE,W,kBAYW;AACpBgC,EAAAA,gBAAgB,EAAE,KADE;AAEpBxB,EAAAA,iBAAiB,EAAE,CAFC;AAGpBN,EAAAA,MAAM,EAAE;AAHY,C;;eA+HT,wBAAW;AAAA,SAAO;AAC/B+C,IAAAA,WAAW;AACTiB,MAAAA,eAAe,EAAE,MADR;AAETC,MAAAA,UAAU,EAAE;AAFH,OAGN,2BAHM;AAIT,aAAO;AACLA,QAAAA,UAAU,EAAE;AADP;AAJE;AADoB,GAAP;AAAA,CAAX,EASXnE,WATW,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Token, { TokenTypes } from './token';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport clone from 'lodash/clone';\nimport debug from 'debug';\nimport { noSelect } from '@pie-lib/style-utils';\nimport { renderToString } from 'react-dom/server';\nimport isEqual from 'lodash/isEqual';\n\nconst log = debug('@pie-lib:text-select:token-select');\n\nexport class TokenSelect extends React.Component {\n static propTypes = {\n tokens: PropTypes.arrayOf(PropTypes.shape(TokenTypes)).isRequired,\n className: PropTypes.string,\n classes: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n highlightChoices: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n maxNoOfSelections: PropTypes.number,\n };\n\n static defaultProps = {\n highlightChoices: false,\n maxNoOfSelections: 0,\n tokens: [],\n };\n\n selectedCount = () => this.props.tokens.filter((t) => t.selected).length;\n\n canSelectMore = (selectedCount) => {\n const { maxNoOfSelections } = this.props;\n\n if (maxNoOfSelections === 1) {\n return true;\n }\n\n log('[canSelectMore] maxNoOfSelections: ', maxNoOfSelections, 'selectedCount: ', selectedCount);\n return maxNoOfSelections <= 0 || (isFinite(maxNoOfSelections) && selectedCount < maxNoOfSelections);\n };\n\n /**\n @function\n @param { object } event\n\n @description\n each token is wrapped into a span that has Token.rootClassName class and indexkey attribute (represents the index of the token)\n tokens are updated with the targeted token having the correct value set for 'selected' property\n */\n toggleToken = (event) => {\n const { target } = event;\n const { tokens, animationsDisabled } = this.props;\n const tokensCloned = clone(tokens);\n const targetSpanWrapper = target.closest(`.${Token.rootClassName}`);\n const targetedTokenIndex = targetSpanWrapper && targetSpanWrapper.dataset && targetSpanWrapper.dataset.indexkey;\n const t = targetedTokenIndex && tokensCloned[targetedTokenIndex];\n\n if (t && t.correct === undefined && !animationsDisabled) {\n const { onChange, maxNoOfSelections } = this.props;\n const selected = !t.selected;\n\n if (maxNoOfSelections === 1 && this.selectedCount() === 1) {\n const selectedToken = (tokens || []).filter((t) => t.selected);\n\n const updatedTokens = tokensCloned.map((token) => {\n if (isEqual(token, selectedToken[0])) {\n return { ...token, selected: false };\n }\n\n return { ...token, selectable: true };\n });\n\n const update = { ...t, selected: !t.selected };\n\n updatedTokens.splice(targetedTokenIndex, 1, update);\n onChange(updatedTokens);\n } else {\n if (selected && maxNoOfSelections > 0 && this.selectedCount() >= maxNoOfSelections) {\n log('skip toggle max reached');\n return;\n }\n\n const update = { ...t, selected: !t.selected };\n\n tokensCloned.splice(targetedTokenIndex, 1, update);\n onChange(tokensCloned);\n }\n }\n };\n\n generateTokensInHtml = () => {\n const { tokens, disabled, highlightChoices, animationsDisabled } = this.props;\n const selectedCount = this.selectedCount();\n const isLineBreak = (text) => text === '\\n';\n const isNewParagraph = (text) => text === '\\n\\n';\n\n const reducer = (accumulator, t, index) => {\n const selectable = t.selected || (t.selectable && this.canSelectMore(selectedCount));\n const showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);\n let finalAcc = accumulator;\n\n if (isNewParagraph(t.text)) {\n return finalAcc + '</p><p>';\n }\n\n if (isLineBreak(t.text)) {\n return finalAcc + '<br>';\n }\n\n if (\n (selectable && !disabled) ||\n showCorrectAnswer ||\n t.selected ||\n t.isMissing ||\n (animationsDisabled && t.predefined) // if we are in print mode\n ) {\n return (\n finalAcc +\n renderToString(\n <Token\n key={index}\n disabled={disabled}\n index={index}\n {...t}\n selectable={selectable}\n highlight={highlightChoices}\n animationsDisabled={animationsDisabled}\n />,\n )\n );\n } else {\n return accumulator + t.text;\n }\n };\n\n const reduceResult = (tokens || []).reduce(reducer, '<p>');\n\n return reduceResult + '</p>';\n };\n\n render() {\n const { classes, className: classNameProp } = this.props;\n const className = classNames(classes.tokenSelect, classNameProp);\n const html = this.generateTokensInHtml();\n\n return <div className={className} dangerouslySetInnerHTML={{ __html: html }} onClick={this.toggleToken} />;\n }\n}\n\nexport default withStyles(() => ({\n tokenSelect: {\n backgroundColor: 'none',\n whiteSpace: 'pre',\n ...noSelect(),\n '& p': {\n whiteSpace: 'break-spaces',\n },\n },\n}))(TokenSelect);\n"],"file":"index.js"}
|
|
@@ -29,6 +29,10 @@ var _classnames = _interopRequireDefault(require("classnames"));
|
|
|
29
29
|
|
|
30
30
|
var _renderUi = require("@pie-lib/render-ui");
|
|
31
31
|
|
|
32
|
+
var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
|
|
33
|
+
|
|
34
|
+
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
35
|
+
|
|
32
36
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
33
37
|
|
|
34
38
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -37,6 +41,32 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
37
41
|
|
|
38
42
|
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; } }
|
|
39
43
|
|
|
44
|
+
var Wrapper = function Wrapper(_ref) {
|
|
45
|
+
var useWrapper = _ref.useWrapper,
|
|
46
|
+
children = _ref.children,
|
|
47
|
+
classNameContainer = _ref.classNameContainer,
|
|
48
|
+
iconClass = _ref.iconClass,
|
|
49
|
+
Icon = _ref.Icon;
|
|
50
|
+
|
|
51
|
+
if (useWrapper) {
|
|
52
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
53
|
+
className: classNameContainer
|
|
54
|
+
}, children, /*#__PURE__*/_react["default"].createElement(Icon, {
|
|
55
|
+
className: iconClass,
|
|
56
|
+
viewBox: '0 1 24 24'
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return children;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
Wrapper.propTypes = {
|
|
64
|
+
useWrapper: _propTypes["default"].bool,
|
|
65
|
+
classNameContainer: _propTypes["default"].string,
|
|
66
|
+
iconClass: _propTypes["default"].string,
|
|
67
|
+
Icon: _propTypes["default"].func,
|
|
68
|
+
children: _propTypes["default"].element
|
|
69
|
+
};
|
|
40
70
|
var TokenTypes = {
|
|
41
71
|
text: _propTypes["default"].string,
|
|
42
72
|
selectable: _propTypes["default"].bool
|
|
@@ -66,25 +96,39 @@ var Token = /*#__PURE__*/function (_React$Component) {
|
|
|
66
96
|
index = _this$props.index,
|
|
67
97
|
highlight = _this$props.highlight,
|
|
68
98
|
correct = _this$props.correct,
|
|
69
|
-
animationsDisabled = _this$props.animationsDisabled
|
|
99
|
+
animationsDisabled = _this$props.animationsDisabled,
|
|
100
|
+
isMissing = _this$props.isMissing;
|
|
70
101
|
var isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
|
|
71
102
|
var className;
|
|
103
|
+
var classNameContainer;
|
|
104
|
+
var Icon;
|
|
105
|
+
var iconClass;
|
|
72
106
|
|
|
73
107
|
if (correct === undefined && selected && disabled) {
|
|
74
108
|
className = (0, _classnames["default"])(classes.token, classes.selected, classes.disabledBlack);
|
|
75
109
|
} else if (correct !== undefined) {
|
|
76
|
-
className = (0, _classnames["default"])(Token.rootClassName, classes.custom
|
|
110
|
+
className = (0, _classnames["default"])(Token.rootClassName, classes.custom);
|
|
111
|
+
Icon = correct ? _Check["default"] : _Close["default"];
|
|
112
|
+
classNameContainer = correct === true ? classes.correct : classes.incorrect;
|
|
113
|
+
iconClass = correct === true ? classes.correctIcon : classes.incorrectIcon;
|
|
114
|
+
} else if (isMissing) {
|
|
115
|
+
className = (0, _classnames["default"])(Token.rootClassName, classes.custom, isMissing === true && classes.missing);
|
|
77
116
|
} else {
|
|
78
117
|
className = (0, _classnames["default"])(Token.rootClassName, classes.token, disabled && classes.disabled, selectable && !disabled && !isTouchEnabled && classes.selectable, selected && !disabled && classes.selected, selected && disabled && classes.disabledAndSelected, highlight && selectable && !disabled && !selected && classes.highlight, animationsDisabled && classes.print, classNameProp);
|
|
79
118
|
}
|
|
80
119
|
|
|
81
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
120
|
+
return /*#__PURE__*/_react["default"].createElement(Wrapper, {
|
|
121
|
+
useWrapper: correct !== undefined,
|
|
122
|
+
classNameContainer: classNameContainer,
|
|
123
|
+
iconClass: iconClass,
|
|
124
|
+
Icon: Icon
|
|
125
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
82
126
|
className: className,
|
|
83
127
|
dangerouslySetInnerHTML: {
|
|
84
128
|
__html: (text || '').replace(/\n/g, '<br>')
|
|
85
129
|
},
|
|
86
130
|
"data-indexkey": index
|
|
87
|
-
});
|
|
131
|
+
}));
|
|
88
132
|
}
|
|
89
133
|
}]);
|
|
90
134
|
return Token;
|
|
@@ -162,10 +206,27 @@ var _default = (0, _styles.withStyles)(function (theme) {
|
|
|
162
206
|
display: 'initial'
|
|
163
207
|
},
|
|
164
208
|
correct: {
|
|
165
|
-
backgroundColor: _renderUi.color.
|
|
209
|
+
backgroundColor: _renderUi.color.correctSecondary(),
|
|
210
|
+
border: "".concat(_renderUi.color.correct(), " solid 2px")
|
|
166
211
|
},
|
|
167
212
|
incorrect: {
|
|
168
|
-
backgroundColor: _renderUi.color.
|
|
213
|
+
backgroundColor: _renderUi.color.incorrectSecondary(),
|
|
214
|
+
border: "".concat(_renderUi.color.missing(), " solid 2px")
|
|
215
|
+
},
|
|
216
|
+
missing: {
|
|
217
|
+
backgroundColor: _renderUi.color.incorrectSecondary(),
|
|
218
|
+
border: "".concat(_renderUi.color.missing(), " dashed 2px"),
|
|
219
|
+
textDecoration: "line-through ".concat(_renderUi.color.missing())
|
|
220
|
+
},
|
|
221
|
+
incorrectIcon: {
|
|
222
|
+
verticalAlign: 'middle',
|
|
223
|
+
fontSize: 'larger',
|
|
224
|
+
color: _renderUi.color.missing()
|
|
225
|
+
},
|
|
226
|
+
correctIcon: {
|
|
227
|
+
verticalAlign: 'middle',
|
|
228
|
+
fontSize: 'larger',
|
|
229
|
+
color: _renderUi.color.correct()
|
|
169
230
|
}
|
|
170
231
|
};
|
|
171
232
|
})(Token);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/token-select/token.jsx"],"names":["TokenTypes","text","PropTypes","string","selectable","bool","Token","props","selected","classes","classNameProp","className","disabled","index","highlight","correct","animationsDisabled","isTouchEnabled","window","navigator","maxTouchPoints","msMaxTouchPoints","undefined","token","disabledBlack","rootClassName","custom","incorrect","disabledAndSelected","print","__html","replace","React","Component","object","isRequired","theme","cursor","textIndent","padding","spacing","unit","paddingRight","paddingLeft","transition","color","backgroundColor","secondaryLight","breakpoints","up","primaryLight","lineHeight","marginTop","border","boxSizing","display"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\n\nexport const TokenTypes = {\n text: PropTypes.string,\n selectable: PropTypes.bool,\n};\n\nexport class Token extends React.Component {\n static rootClassName = 'tokenRootClass';\n\n static propTypes = {\n ...TokenTypes,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n highlight: PropTypes.bool,\n correct: PropTypes.bool,\n text: PropTypes.string.isRequired,\n };\n\n static defaultProps = {\n selectable: false,\n text: '',\n };\n\n render() {\n const {\n text,\n selectable,\n selected,\n classes,\n className: classNameProp,\n disabled,\n index,\n highlight,\n correct,\n animationsDisabled,\n } = this.props;\n const isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n\n let className;\n\n if (correct === undefined && selected && disabled) {\n className = classNames(classes.token, classes.selected, classes.disabledBlack);\n } else if (correct !== undefined) {\n className = classNames(\n Token.rootClassName,\n classes.custom,\n correct === true && classes.correct,\n correct === false && classes.incorrect,\n );\n } else {\n className = classNames(\n Token.rootClassName,\n classes.token,\n disabled && classes.disabled,\n selectable && !disabled && !isTouchEnabled && classes.selectable,\n selected && !disabled && classes.selected,\n selected && disabled && classes.disabledAndSelected,\n highlight && selectable && !disabled && !selected && classes.highlight,\n animationsDisabled && classes.print,\n classNameProp,\n );\n }\n\n return (\n <span\n className={className}\n dangerouslySetInnerHTML={{ __html: (text || '').replace(/\\n/g, '<br>') }}\n data-indexkey={index}\n />\n );\n }\n}\n\nexport default withStyles((theme) => {\n return {\n token: {\n cursor: 'pointer',\n textIndent: 0,\n padding: theme.spacing.unit / 2,\n paddingRight: 0,\n paddingLeft: 0,\n transition: 'background-color 100ms ease-in',\n },\n disabled: {\n cursor: 'inherit',\n color: color.disabled(),\n },\n disabledBlack: {\n cursor: 'inherit',\n },\n disabledAndSelected: {\n backgroundColor: color.secondaryLight(),\n },\n selectable: {\n [theme.breakpoints.up(769)]: {\n '&:hover': {\n backgroundColor: color.primaryLight(),\n '& > *': {\n backgroundColor: color.primaryLight(),\n },\n },\n },\n },\n selected: {\n lineHeight: 2,\n marginTop: theme.spacing.unit / 2,\n backgroundColor: color.primaryLight(),\n '& > *': {\n backgroundColor: color.primaryLight(),\n },\n },\n highlight: {\n border: `dashed 2px ${color.disabled()}`,\n lineHeight: 2,\n boxSizing: 'border-box',\n marginTop: theme.spacing.unit / 2,\n display: 'inline-block',\n padding: theme.spacing.unit,\n },\n print: {\n border: `dashed 2px ${color.disabled()}`,\n lineHeight: 2,\n boxSizing: 'border-box',\n marginTop: theme.spacing.unit / 2,\n display: 'inline-block',\n padding: theme.spacing.unit,\n color: color.text(),\n },\n\n custom: {\n display: 'initial',\n },\n correct: {\n backgroundColor: color.correct(),\n },\n incorrect: {\n backgroundColor: color.incorrect(),\n },\n };\n})(Token);\n"],"file":"token.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/token-select/token.jsx"],"names":["Wrapper","useWrapper","children","classNameContainer","iconClass","Icon","propTypes","PropTypes","bool","string","func","element","TokenTypes","text","selectable","Token","props","selected","classes","classNameProp","className","disabled","index","highlight","correct","animationsDisabled","isMissing","isTouchEnabled","window","navigator","maxTouchPoints","msMaxTouchPoints","undefined","token","disabledBlack","rootClassName","custom","Check","Close","incorrect","correctIcon","incorrectIcon","missing","disabledAndSelected","print","__html","replace","React","Component","object","isRequired","theme","cursor","textIndent","padding","spacing","unit","paddingRight","paddingLeft","transition","color","backgroundColor","secondaryLight","breakpoints","up","primaryLight","lineHeight","marginTop","border","boxSizing","display","correctSecondary","incorrectSecondary","textDecoration","verticalAlign","fontSize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Check from '@material-ui/icons/Check';\nimport Close from '@material-ui/icons/Close';\n\nconst Wrapper = ({ useWrapper, children, classNameContainer, iconClass, Icon }) => {\n if (useWrapper) {\n return (\n <span className={classNameContainer}>\n {children}\n <Icon className={iconClass} viewBox={'0 1 24 24'} />\n </span>\n );\n }\n\n return children;\n};\n\nWrapper.propTypes = {\n useWrapper: PropTypes.bool,\n classNameContainer: PropTypes.string,\n iconClass: PropTypes.string,\n Icon: PropTypes.func,\n children: PropTypes.element,\n};\n\nexport const TokenTypes = {\n text: PropTypes.string,\n selectable: PropTypes.bool,\n};\n\nexport class Token extends React.Component {\n static rootClassName = 'tokenRootClass';\n\n static propTypes = {\n ...TokenTypes,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n highlight: PropTypes.bool,\n correct: PropTypes.bool,\n text: PropTypes.string.isRequired,\n };\n\n static defaultProps = {\n selectable: false,\n text: '',\n };\n\n render() {\n const {\n text,\n selectable,\n selected,\n classes,\n className: classNameProp,\n disabled,\n index,\n highlight,\n correct,\n animationsDisabled,\n isMissing,\n } = this.props;\n const isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n\n let className;\n let classNameContainer;\n let Icon;\n let iconClass;\n\n if (correct === undefined && selected && disabled) {\n className = classNames(classes.token, classes.selected, classes.disabledBlack);\n } else if (correct !== undefined) {\n className = classNames(Token.rootClassName, classes.custom);\n Icon = correct ? Check : Close;\n classNameContainer = correct === true ? classes.correct : classes.incorrect;\n iconClass = correct === true ? classes.correctIcon : classes.incorrectIcon;\n } else if (isMissing) {\n className = classNames(Token.rootClassName, classes.custom, isMissing === true && classes.missing);\n } else {\n className = classNames(\n Token.rootClassName,\n classes.token,\n disabled && classes.disabled,\n selectable && !disabled && !isTouchEnabled && classes.selectable,\n selected && !disabled && classes.selected,\n selected && disabled && classes.disabledAndSelected,\n highlight && selectable && !disabled && !selected && classes.highlight,\n animationsDisabled && classes.print,\n classNameProp,\n );\n }\n return (\n <Wrapper\n useWrapper={correct !== undefined}\n classNameContainer={classNameContainer}\n iconClass={iconClass}\n Icon={Icon}\n >\n <span\n className={className}\n dangerouslySetInnerHTML={{ __html: (text || '').replace(/\\n/g, '<br>') }}\n data-indexkey={index}\n />\n </Wrapper>\n );\n }\n}\n\nexport default withStyles((theme) => {\n return {\n token: {\n cursor: 'pointer',\n textIndent: 0,\n padding: theme.spacing.unit / 2,\n paddingRight: 0,\n paddingLeft: 0,\n transition: 'background-color 100ms ease-in',\n },\n disabled: {\n cursor: 'inherit',\n color: color.disabled(),\n },\n disabledBlack: {\n cursor: 'inherit',\n },\n disabledAndSelected: {\n backgroundColor: color.secondaryLight(),\n },\n selectable: {\n [theme.breakpoints.up(769)]: {\n '&:hover': {\n backgroundColor: color.primaryLight(),\n '& > *': {\n backgroundColor: color.primaryLight(),\n },\n },\n },\n },\n selected: {\n lineHeight: 2,\n marginTop: theme.spacing.unit / 2,\n backgroundColor: color.primaryLight(),\n '& > *': {\n backgroundColor: color.primaryLight(),\n },\n },\n highlight: {\n border: `dashed 2px ${color.disabled()}`,\n lineHeight: 2,\n boxSizing: 'border-box',\n marginTop: theme.spacing.unit / 2,\n display: 'inline-block',\n padding: theme.spacing.unit,\n },\n print: {\n border: `dashed 2px ${color.disabled()}`,\n lineHeight: 2,\n boxSizing: 'border-box',\n marginTop: theme.spacing.unit / 2,\n display: 'inline-block',\n padding: theme.spacing.unit,\n color: color.text(),\n },\n\n custom: {\n display: 'initial',\n },\n correct: {\n backgroundColor: color.correctSecondary(),\n border: `${color.correct()} solid 2px`,\n },\n incorrect: {\n backgroundColor: color.incorrectSecondary(),\n border: `${color.missing()} solid 2px`,\n },\n missing: {\n backgroundColor: color.incorrectSecondary(),\n border: `${color.missing()} dashed 2px`,\n textDecoration: `line-through ${color.missing()}`,\n },\n incorrectIcon: {\n verticalAlign: 'middle',\n fontSize: 'larger',\n color: color.missing(),\n },\n\n correctIcon: {\n verticalAlign: 'middle',\n fontSize: 'larger',\n color: color.correct(),\n },\n };\n})(Token);\n"],"file":"token.js"}
|
package/lib/tokenizer/builder.js
CHANGED
|
@@ -269,7 +269,8 @@ var normalize = function normalize(textToNormalize, tokens) {
|
|
|
269
269
|
start: lastIndex,
|
|
270
270
|
end: t.end,
|
|
271
271
|
predefined: true,
|
|
272
|
-
correct: t.correct
|
|
272
|
+
correct: t.correct,
|
|
273
|
+
isMissing: t.isMissing
|
|
273
274
|
}];
|
|
274
275
|
} else if (lastIndex < t.start) {
|
|
275
276
|
tokens = [{
|
|
@@ -281,7 +282,8 @@ var normalize = function normalize(textToNormalize, tokens) {
|
|
|
281
282
|
start: t.start,
|
|
282
283
|
end: t.end,
|
|
283
284
|
predefined: true,
|
|
284
|
-
correct: t.correct
|
|
285
|
+
correct: t.correct,
|
|
286
|
+
isMissing: t.isMissing
|
|
285
287
|
}];
|
|
286
288
|
}
|
|
287
289
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tokenizer/builder.js"],"names":["g","str","node","children","reduce","value","getParagraph","p","getSentence","s","getWord","w","paragraphs","text","tree","English","parse","out","acc","child","type","paragraph","start","position","offset","end","concat","handleSentence","sentenceChilds","newAcc","length","firstWord","sentence","map","d","join","splice","push","lastWord","sentences","words","Intersection","results","filter","r","t","token","intersection","selection","tokens","startsWithin","endsWithin","mapped","sort","Array","isArray","a","b","e","Error","normalize","textToNormalize","index","outer","lastIndex","substring","predefined","correct","last","result"],"mappings":"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","sourcesContent":["import compact from 'lodash/compact';\nimport English from '@pie-framework/parse-english';\nimport clone from 'lodash/clone';\n\nconst g = (str, node) => {\n if (node.children) {\n return node.children.reduce(g, str);\n } else if (node.value) {\n return str + node.value;\n } else {\n return str;\n }\n};\n\nconst getParagraph = (p) => g('', p);\n\nconst getSentence = (s) => g('', s);\n\nconst getWord = (w) => g('', w);\n\nexport const paragraphs = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n const paragraph = {\n text: getParagraph(child),\n start: child.position.start.offset,\n end: child.position.end.offset,\n };\n\n return acc.concat([paragraph]);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\n\nexport const handleSentence = (child, acc) => {\n const sentenceChilds = [];\n // we parse the children of the sentence\n let newAcc = child.children.reduce(function(acc, child) {\n // if we find a whitespace node that's \\n, we end the sentence\n if (child.type === 'WhiteSpaceNode' && child.value === '\\n') {\n if (sentenceChilds.length) {\n const firstWord = sentenceChilds[0];\n // we create a sentence starting from the first word until the new line\n const sentence = {\n text: sentenceChilds.map((d) => getSentence(d)).join(''),\n start: firstWord.position.start.offset,\n end: child.position.start.offset,\n };\n\n // we remove all the elements from the array\n sentenceChilds.splice(0, sentenceChilds.length);\n return acc.concat([sentence]);\n }\n } else {\n // otherwise we add it to the array that contains the child forming a sentence\n sentenceChilds.push(child);\n }\n\n return acc;\n }, acc);\n\n // we treat the case when no \\n character is found at the end\n // so we create a sentence from the last words or white spaces found\n if (sentenceChilds.length) {\n const firstWord = sentenceChilds[0];\n const lastWord = sentenceChilds[sentenceChilds.length - 1];\n const sentence = {\n text: sentenceChilds.map((d) => getSentence(d)).join(''),\n start: firstWord.position.start.offset,\n end: lastWord.position.end.offset,\n };\n\n newAcc = newAcc.concat([sentence]);\n\n sentenceChilds.splice(0, sentenceChilds.length);\n }\n\n return newAcc;\n};\n\nexport const sentences = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'SentenceNode') {\n const newAcc = handleSentence(child, acc);\n\n return newAcc || acc;\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\nexport const words = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'SentenceNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'WordNode') {\n const node = {\n text: getWord(child),\n start: child.position.start.offset,\n end: child.position.end.offset,\n };\n return acc.concat([node]);\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\n\nclass Intersection {\n constructor(results) {\n this.results = results;\n }\n\n get hasOverlap() {\n return this.results.filter((r) => r.type === 'overlap').length > 0;\n }\n\n get surroundedTokens() {\n return this.results.filter((r) => r.type === 'within-selection').map((t) => t.token);\n }\n}\n/**\n * get intersection info for the selection in relation to tokens.\n * @param {{start: number, end: number}} selection\n * @param {{start: number, end: number}[]} tokens\n * @return {tokens: [], type: 'overlap|no-overlap|contains'}\n */\nexport const intersection = (selection, tokens) => {\n const { start, end } = selection;\n\n const startsWithin = (t) => start >= t.start && start < t.end;\n const endsWithin = (t) => end > t.start && end <= t.end;\n\n const mapped = tokens.map((t) => {\n if (start === t.start && end === t.end) {\n return { token: t, type: 'exact-fit' };\n } else if (start <= t.start && end >= t.end) {\n return { token: t, type: 'within-selection' };\n } else if (startsWithin(t) || endsWithin(t)) {\n return { token: t, type: 'overlap' };\n }\n });\n return new Intersection(compact(mapped));\n};\n\nexport const sort = (tokens) => {\n if (!Array.isArray(tokens)) {\n return tokens;\n } else {\n const out = clone(tokens);\n out.sort((a, b) => {\n const s = a.start < b.start ? -1 : a.start > b.start ? 1 : 0;\n const e = a.end < b.end ? -1 : a.end > b.end ? 1 : 0;\n if (s === -1 && e !== -1) {\n throw new Error(`sort does not support intersecting tokens. a: ${a.start}-${a.end}, b: ${b.start}-${b.end}`);\n }\n return s;\n });\n return out;\n }\n};\n\nexport const normalize = (textToNormalize, tokens) => {\n // making sure text provided is a string\n const text = textToNormalize || '';\n\n if (!Array.isArray(tokens) || tokens.length === 0) {\n return [\n {\n text,\n start: 0,\n end: text.length,\n },\n ];\n }\n\n const out = sort(tokens).reduce(\n (acc, t, index, outer) => {\n let tokens = [];\n const lastIndex = acc.lastIndex;\n\n if (t.start === lastIndex) {\n tokens = [\n {\n text: text.substring(lastIndex, t.end),\n start: lastIndex,\n end: t.end,\n predefined: true,\n correct: t.correct,\n },\n ];\n } else if (lastIndex < t.start) {\n tokens = [\n {\n text: text.substring(lastIndex, t.start),\n start: lastIndex,\n end: t.start,\n },\n {\n text: text.substring(t.start, t.end),\n start: t.start,\n end: t.end,\n predefined: true,\n correct: t.correct,\n },\n ];\n }\n\n if (index === outer.length - 1 && t.end < text.length) {\n const last = {\n text: text.substring(t.end),\n start: t.end,\n end: text.length,\n };\n tokens.push(last);\n }\n\n return {\n lastIndex: tokens.length ? tokens[tokens.length - 1].end : lastIndex,\n result: acc.result.concat(tokens),\n };\n },\n { result: [], lastIndex: 0 },\n );\n\n return out.result;\n};\n"],"file":"builder.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/tokenizer/builder.js"],"names":["g","str","node","children","reduce","value","getParagraph","p","getSentence","s","getWord","w","paragraphs","text","tree","English","parse","out","acc","child","type","paragraph","start","position","offset","end","concat","handleSentence","sentenceChilds","newAcc","length","firstWord","sentence","map","d","join","splice","push","lastWord","sentences","words","Intersection","results","filter","r","t","token","intersection","selection","tokens","startsWithin","endsWithin","mapped","sort","Array","isArray","a","b","e","Error","normalize","textToNormalize","index","outer","lastIndex","substring","predefined","correct","isMissing","last","result"],"mappings":"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","sourcesContent":["import compact from 'lodash/compact';\nimport English from '@pie-framework/parse-english';\nimport clone from 'lodash/clone';\n\nconst g = (str, node) => {\n if (node.children) {\n return node.children.reduce(g, str);\n } else if (node.value) {\n return str + node.value;\n } else {\n return str;\n }\n};\n\nconst getParagraph = (p) => g('', p);\n\nconst getSentence = (s) => g('', s);\n\nconst getWord = (w) => g('', w);\n\nexport const paragraphs = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n const paragraph = {\n text: getParagraph(child),\n start: child.position.start.offset,\n end: child.position.end.offset,\n };\n\n return acc.concat([paragraph]);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\n\nexport const handleSentence = (child, acc) => {\n const sentenceChilds = [];\n // we parse the children of the sentence\n let newAcc = child.children.reduce(function(acc, child) {\n // if we find a whitespace node that's \\n, we end the sentence\n if (child.type === 'WhiteSpaceNode' && child.value === '\\n') {\n if (sentenceChilds.length) {\n const firstWord = sentenceChilds[0];\n // we create a sentence starting from the first word until the new line\n const sentence = {\n text: sentenceChilds.map((d) => getSentence(d)).join(''),\n start: firstWord.position.start.offset,\n end: child.position.start.offset,\n };\n\n // we remove all the elements from the array\n sentenceChilds.splice(0, sentenceChilds.length);\n return acc.concat([sentence]);\n }\n } else {\n // otherwise we add it to the array that contains the child forming a sentence\n sentenceChilds.push(child);\n }\n\n return acc;\n }, acc);\n\n // we treat the case when no \\n character is found at the end\n // so we create a sentence from the last words or white spaces found\n if (sentenceChilds.length) {\n const firstWord = sentenceChilds[0];\n const lastWord = sentenceChilds[sentenceChilds.length - 1];\n const sentence = {\n text: sentenceChilds.map((d) => getSentence(d)).join(''),\n start: firstWord.position.start.offset,\n end: lastWord.position.end.offset,\n };\n\n newAcc = newAcc.concat([sentence]);\n\n sentenceChilds.splice(0, sentenceChilds.length);\n }\n\n return newAcc;\n};\n\nexport const sentences = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'SentenceNode') {\n const newAcc = handleSentence(child, acc);\n\n return newAcc || acc;\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\nexport const words = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'SentenceNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'WordNode') {\n const node = {\n text: getWord(child),\n start: child.position.start.offset,\n end: child.position.end.offset,\n };\n return acc.concat([node]);\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\n\nclass Intersection {\n constructor(results) {\n this.results = results;\n }\n\n get hasOverlap() {\n return this.results.filter((r) => r.type === 'overlap').length > 0;\n }\n\n get surroundedTokens() {\n return this.results.filter((r) => r.type === 'within-selection').map((t) => t.token);\n }\n}\n/**\n * get intersection info for the selection in relation to tokens.\n * @param {{start: number, end: number}} selection\n * @param {{start: number, end: number}[]} tokens\n * @return {tokens: [], type: 'overlap|no-overlap|contains'}\n */\nexport const intersection = (selection, tokens) => {\n const { start, end } = selection;\n\n const startsWithin = (t) => start >= t.start && start < t.end;\n const endsWithin = (t) => end > t.start && end <= t.end;\n\n const mapped = tokens.map((t) => {\n if (start === t.start && end === t.end) {\n return { token: t, type: 'exact-fit' };\n } else if (start <= t.start && end >= t.end) {\n return { token: t, type: 'within-selection' };\n } else if (startsWithin(t) || endsWithin(t)) {\n return { token: t, type: 'overlap' };\n }\n });\n return new Intersection(compact(mapped));\n};\n\nexport const sort = (tokens) => {\n if (!Array.isArray(tokens)) {\n return tokens;\n } else {\n const out = clone(tokens);\n out.sort((a, b) => {\n const s = a.start < b.start ? -1 : a.start > b.start ? 1 : 0;\n const e = a.end < b.end ? -1 : a.end > b.end ? 1 : 0;\n if (s === -1 && e !== -1) {\n throw new Error(`sort does not support intersecting tokens. a: ${a.start}-${a.end}, b: ${b.start}-${b.end}`);\n }\n return s;\n });\n return out;\n }\n};\n\nexport const normalize = (textToNormalize, tokens) => {\n // making sure text provided is a string\n const text = textToNormalize || '';\n\n if (!Array.isArray(tokens) || tokens.length === 0) {\n return [\n {\n text,\n start: 0,\n end: text.length,\n },\n ];\n }\n\n const out = sort(tokens).reduce(\n (acc, t, index, outer) => {\n let tokens = [];\n const lastIndex = acc.lastIndex;\n\n if (t.start === lastIndex) {\n tokens = [\n {\n text: text.substring(lastIndex, t.end),\n start: lastIndex,\n end: t.end,\n predefined: true,\n correct: t.correct,\n isMissing: t.isMissing,\n },\n ];\n } else if (lastIndex < t.start) {\n tokens = [\n {\n text: text.substring(lastIndex, t.start),\n start: lastIndex,\n end: t.start,\n },\n {\n text: text.substring(t.start, t.end),\n start: t.start,\n end: t.end,\n predefined: true,\n correct: t.correct,\n isMissing: t.isMissing,\n },\n ];\n }\n\n if (index === outer.length - 1 && t.end < text.length) {\n const last = {\n text: text.substring(t.end),\n start: t.end,\n end: text.length,\n };\n tokens.push(last);\n }\n\n return {\n lastIndex: tokens.length ? tokens[tokens.length - 1].end : lastIndex,\n result: acc.result.concat(tokens),\n };\n },\n { result: [], lastIndex: 0 },\n );\n\n return out.result;\n};\n"],"file":"builder.js"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.9.
|
|
6
|
+
"version": "1.9.30-next.32+37f49c39",
|
|
7
7
|
"description": "Some react components for text selection",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"react",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@pie-framework/parse-english": "^1.0.0",
|
|
21
|
-
"@pie-lib/render-ui": "^4.14.
|
|
21
|
+
"@pie-lib/render-ui": "^4.14.30-next.32+37f49c39",
|
|
22
22
|
"@pie-lib/style-utils": "^0.1.43",
|
|
23
23
|
"classnames": "^2.2.6",
|
|
24
24
|
"debug": "^4.1.1",
|
|
@@ -38,6 +38,6 @@
|
|
|
38
38
|
"@material-ui/core": "^3.8.3",
|
|
39
39
|
"react": "^16.8.1"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "37f49c3934caf5e8ac68d763e60fe74a197c0ba7",
|
|
42
42
|
"scripts": {}
|
|
43
43
|
}
|
package/src/text-select.jsx
CHANGED
|
@@ -54,11 +54,13 @@ export default class TextSelect extends React.Component {
|
|
|
54
54
|
});
|
|
55
55
|
const selected = selectedIndex !== -1;
|
|
56
56
|
const correct = selected ? t.correct : undefined;
|
|
57
|
+
const isMissing = t.isMissing;
|
|
57
58
|
return {
|
|
58
59
|
...t,
|
|
59
60
|
selectable: !disabled && t.predefined,
|
|
60
61
|
selected,
|
|
61
62
|
correct,
|
|
63
|
+
isMissing,
|
|
62
64
|
};
|
|
63
65
|
});
|
|
64
66
|
|
|
@@ -3,6 +3,29 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import { withStyles } from '@material-ui/core/styles';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
5
|
import { color } from '@pie-lib/render-ui';
|
|
6
|
+
import Check from '@material-ui/icons/Check';
|
|
7
|
+
import Close from '@material-ui/icons/Close';
|
|
8
|
+
|
|
9
|
+
const Wrapper = ({ useWrapper, children, classNameContainer, iconClass, Icon }) => {
|
|
10
|
+
if (useWrapper) {
|
|
11
|
+
return (
|
|
12
|
+
<span className={classNameContainer}>
|
|
13
|
+
{children}
|
|
14
|
+
<Icon className={iconClass} viewBox={'0 1 24 24'} />
|
|
15
|
+
</span>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return children;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
Wrapper.propTypes = {
|
|
23
|
+
useWrapper: PropTypes.bool,
|
|
24
|
+
classNameContainer: PropTypes.string,
|
|
25
|
+
iconClass: PropTypes.string,
|
|
26
|
+
Icon: PropTypes.func,
|
|
27
|
+
children: PropTypes.element,
|
|
28
|
+
};
|
|
6
29
|
|
|
7
30
|
export const TokenTypes = {
|
|
8
31
|
text: PropTypes.string,
|
|
@@ -39,20 +62,24 @@ export class Token extends React.Component {
|
|
|
39
62
|
highlight,
|
|
40
63
|
correct,
|
|
41
64
|
animationsDisabled,
|
|
65
|
+
isMissing,
|
|
42
66
|
} = this.props;
|
|
43
67
|
const isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
|
|
44
68
|
|
|
45
69
|
let className;
|
|
70
|
+
let classNameContainer;
|
|
71
|
+
let Icon;
|
|
72
|
+
let iconClass;
|
|
46
73
|
|
|
47
74
|
if (correct === undefined && selected && disabled) {
|
|
48
75
|
className = classNames(classes.token, classes.selected, classes.disabledBlack);
|
|
49
76
|
} else if (correct !== undefined) {
|
|
50
|
-
className = classNames(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
);
|
|
77
|
+
className = classNames(Token.rootClassName, classes.custom);
|
|
78
|
+
Icon = correct ? Check : Close;
|
|
79
|
+
classNameContainer = correct === true ? classes.correct : classes.incorrect;
|
|
80
|
+
iconClass = correct === true ? classes.correctIcon : classes.incorrectIcon;
|
|
81
|
+
} else if (isMissing) {
|
|
82
|
+
className = classNames(Token.rootClassName, classes.custom, isMissing === true && classes.missing);
|
|
56
83
|
} else {
|
|
57
84
|
className = classNames(
|
|
58
85
|
Token.rootClassName,
|
|
@@ -66,13 +93,19 @@ export class Token extends React.Component {
|
|
|
66
93
|
classNameProp,
|
|
67
94
|
);
|
|
68
95
|
}
|
|
69
|
-
|
|
70
96
|
return (
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
97
|
+
<Wrapper
|
|
98
|
+
useWrapper={correct !== undefined}
|
|
99
|
+
classNameContainer={classNameContainer}
|
|
100
|
+
iconClass={iconClass}
|
|
101
|
+
Icon={Icon}
|
|
102
|
+
>
|
|
103
|
+
<span
|
|
104
|
+
className={className}
|
|
105
|
+
dangerouslySetInnerHTML={{ __html: (text || '').replace(/\n/g, '<br>') }}
|
|
106
|
+
data-indexkey={index}
|
|
107
|
+
/>
|
|
108
|
+
</Wrapper>
|
|
76
109
|
);
|
|
77
110
|
}
|
|
78
111
|
}
|
|
@@ -137,10 +170,28 @@ export default withStyles((theme) => {
|
|
|
137
170
|
display: 'initial',
|
|
138
171
|
},
|
|
139
172
|
correct: {
|
|
140
|
-
backgroundColor: color.
|
|
173
|
+
backgroundColor: color.correctSecondary(),
|
|
174
|
+
border: `${color.correct()} solid 2px`,
|
|
141
175
|
},
|
|
142
176
|
incorrect: {
|
|
143
|
-
backgroundColor: color.
|
|
177
|
+
backgroundColor: color.incorrectSecondary(),
|
|
178
|
+
border: `${color.missing()} solid 2px`,
|
|
179
|
+
},
|
|
180
|
+
missing: {
|
|
181
|
+
backgroundColor: color.incorrectSecondary(),
|
|
182
|
+
border: `${color.missing()} dashed 2px`,
|
|
183
|
+
textDecoration: `line-through ${color.missing()}`,
|
|
184
|
+
},
|
|
185
|
+
incorrectIcon: {
|
|
186
|
+
verticalAlign: 'middle',
|
|
187
|
+
fontSize: 'larger',
|
|
188
|
+
color: color.missing(),
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
correctIcon: {
|
|
192
|
+
verticalAlign: 'middle',
|
|
193
|
+
fontSize: 'larger',
|
|
194
|
+
color: color.correct(),
|
|
144
195
|
},
|
|
145
196
|
};
|
|
146
197
|
})(Token);
|
package/src/tokenizer/builder.js
CHANGED
|
@@ -217,6 +217,7 @@ export const normalize = (textToNormalize, tokens) => {
|
|
|
217
217
|
end: t.end,
|
|
218
218
|
predefined: true,
|
|
219
219
|
correct: t.correct,
|
|
220
|
+
isMissing: t.isMissing,
|
|
220
221
|
},
|
|
221
222
|
];
|
|
222
223
|
} else if (lastIndex < t.start) {
|
|
@@ -232,6 +233,7 @@ export const normalize = (textToNormalize, tokens) => {
|
|
|
232
233
|
end: t.end,
|
|
233
234
|
predefined: true,
|
|
234
235
|
correct: t.correct,
|
|
236
|
+
isMissing: t.isMissing,
|
|
235
237
|
},
|
|
236
238
|
];
|
|
237
239
|
}
|