@pie-lib/editable-html 7.17.3 → 7.17.4-next.114
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/CHANGELOG.json +45 -0
- package/CHANGELOG.md +24 -135
- package/lib/editor.js +35 -12
- package/lib/editor.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +1 -1
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +36 -7
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/index.js +1 -1
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/table/index.js +51 -5
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +4 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +6 -2
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/serialization.js +2 -1
- package/lib/serialization.js.map +1 -1
- package/package.json +2 -2
- package/src/editor.jsx +37 -11
- package/src/plugins/media/media-dialog.js +1 -1
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +28 -1
- package/src/plugins/respArea/index.jsx +1 -1
- package/src/plugins/table/index.jsx +47 -5
- package/src/plugins/toolbar/editor-and-toolbar.jsx +4 -1
- package/src/plugins/toolbar/toolbar.jsx +5 -2
- package/src/serialization.jsx +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/media/media-dialog.js"],"names":["log","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","MediaDialog","props","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","push","length","join","callback","setState","updating","newState","formatUrl","e","target","value","type","handleStateChange","invalid","regExp","id","replace","val","handleClose","height","width","urlChange","classes","open","disablePortal","edit","paper","handleDone","root","properties","changeHandler","React","Component","PropTypes","object","isRequired","bool","func","string","number","styles","minWidth","padding"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = url => {\n if (!url) {\n return false;\n }\n\n const p = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = url =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url\n );\n\nconst matchSoundCloudUrl = url => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = url => {\n return new Promise(resolve => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then(response => response.json())\n .then(json => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch(err => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio'\n};\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number\n };\n\n constructor(props) {\n super(props);\n\n const { src, starts, ends, height, url, urlToUse, width } = props;\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url\n }\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = newState => this.setState(newState, this.formatUrl);\n\n urlChange = e => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then(urlToUse => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value\n });\n })\n .catch(log);\n\n return;\n }\n } else if (type && type === 'video') {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false\n });\n\n return;\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false\n });\n\n return;\n }\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true\n });\n };\n\n changeHandler = type => e => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = val => {\n const { handleClose } = this.props;\n\n if (!val) {\n handleClose(val);\n } else {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl\n });\n }\n };\n\n render() {\n const { classes, open, disablePortal, type, edit } = this.props;\n const { ends, height, invalid, starts, width, url, formattedUrl, updating } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n\n return (\n <Dialog\n classes={{\n paper: classes.paper\n }}\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {type === 'video' ? 'Insert YouTube or Vimeo URL' : 'Insert SoundCloud URL'}\n </DialogContentText>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </DialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </DialogContent>\n </React.Fragment>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button\n disabled={invalid || url === null}\n onClick={() => this.handleDone(true)}\n color=\"primary\"\n >\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nconst styles = () => ({\n paper: {\n minWidth: '500px'\n },\n properties: {\n padding: 0\n }\n});\n\nexport default withStyles(styles)(MediaDialog);\n"],"file":"media-dialog.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/media/media-dialog.js"],"names":["log","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","MediaDialog","props","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","push","length","join","callback","setState","updating","newState","formatUrl","e","target","value","type","handleStateChange","invalid","regExp","id","replace","val","handleClose","height","width","urlChange","classes","open","disablePortal","edit","paper","handleDone","root","properties","changeHandler","undefined","React","Component","PropTypes","object","isRequired","bool","func","string","number","styles","minWidth","padding"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = url => {\n if (!url) {\n return false;\n }\n\n const p = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = url =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url\n );\n\nconst matchSoundCloudUrl = url => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = url => {\n return new Promise(resolve => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then(response => response.json())\n .then(json => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch(err => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio'\n};\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number\n };\n\n constructor(props) {\n super(props);\n\n const { src, starts, ends, height, url, urlToUse, width } = props;\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url\n }\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = newState => this.setState(newState, this.formatUrl);\n\n urlChange = e => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then(urlToUse => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value\n });\n })\n .catch(log);\n\n return;\n }\n } else if (type && type === 'video') {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false\n });\n\n return;\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false\n });\n\n return;\n }\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true\n });\n };\n\n changeHandler = type => e => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = val => {\n const { handleClose } = this.props;\n\n if (!val) {\n handleClose(val);\n } else {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl\n });\n }\n };\n\n render() {\n const { classes, open, disablePortal, type, edit } = this.props;\n const { ends, height, invalid, starts, width, url, formattedUrl, updating } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n\n return (\n <Dialog\n classes={{\n paper: classes.paper\n }}\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {type === 'video' ? 'Insert YouTube or Vimeo URL' : 'Insert SoundCloud URL'}\n </DialogContentText>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </DialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </DialogContent>\n </React.Fragment>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button\n disabled={invalid || url === null || url === undefined}\n onClick={() => this.handleDone(true)}\n color=\"primary\"\n >\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nconst styles = () => ({\n paper: {\n minWidth: '500px'\n },\n properties: {\n padding: 0\n }\n});\n\nexport default withStyles(styles)(MediaDialog);\n"],"file":"media-dialog.js"}
|
|
@@ -13,6 +13,8 @@ var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
|
|
|
13
13
|
|
|
14
14
|
var _drag = require("@pie-lib/drag");
|
|
15
15
|
|
|
16
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
17
|
+
|
|
16
18
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
17
19
|
|
|
18
20
|
var _styles = require("@material-ui/core/styles");
|
|
@@ -37,10 +39,10 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
37
39
|
|
|
38
40
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
39
41
|
|
|
40
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
41
|
-
|
|
42
42
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
43
43
|
|
|
44
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
45
|
+
|
|
44
46
|
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); }
|
|
45
47
|
|
|
46
48
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
@@ -60,6 +62,9 @@ var useStyles = (0, _styles.withStyles)(function (theme) {
|
|
|
60
62
|
},
|
|
61
63
|
incorrect: {
|
|
62
64
|
border: 'solid 1px red'
|
|
65
|
+
},
|
|
66
|
+
selected: {
|
|
67
|
+
border: "2px solid ".concat(_renderUi.color.primaryDark(), " !important")
|
|
63
68
|
}
|
|
64
69
|
};
|
|
65
70
|
});
|
|
@@ -69,13 +74,36 @@ var BlankContent =
|
|
|
69
74
|
function (_React$Component) {
|
|
70
75
|
_inherits(BlankContent, _React$Component);
|
|
71
76
|
|
|
72
|
-
function BlankContent() {
|
|
77
|
+
function BlankContent(props) {
|
|
78
|
+
var _this;
|
|
79
|
+
|
|
73
80
|
_classCallCheck(this, BlankContent);
|
|
74
81
|
|
|
75
|
-
|
|
82
|
+
_this = _possibleConstructorReturn(this, _getPrototypeOf(BlankContent).call(this, props));
|
|
83
|
+
_this.handleClick = _this.handleClick.bind(_assertThisInitialized(_this));
|
|
84
|
+
return _this;
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
_createClass(BlankContent, [{
|
|
88
|
+
key: "componentDidMount",
|
|
89
|
+
value: function componentDidMount() {
|
|
90
|
+
document.addEventListener('click', this.handleClick);
|
|
91
|
+
}
|
|
92
|
+
}, {
|
|
93
|
+
key: "componentWillUnmount",
|
|
94
|
+
value: function componentWillUnmount() {
|
|
95
|
+
document.removeEventListener('click', this.handleClick);
|
|
96
|
+
}
|
|
97
|
+
}, {
|
|
98
|
+
key: "handleClick",
|
|
99
|
+
value: function handleClick(event) {
|
|
100
|
+
var classes = this.props.classes;
|
|
101
|
+
|
|
102
|
+
if (this.elementRef) {
|
|
103
|
+
this.elementRef.className = this.elementRef.contains(event.target) ? classes.selected : '';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}, {
|
|
79
107
|
key: "componentDidUpdate",
|
|
80
108
|
value: function componentDidUpdate() {
|
|
81
109
|
if (this.elementRef) {
|
|
@@ -85,7 +113,7 @@ function (_React$Component) {
|
|
|
85
113
|
}, {
|
|
86
114
|
key: "render",
|
|
87
115
|
value: function render() {
|
|
88
|
-
var
|
|
116
|
+
var _this2 = this;
|
|
89
117
|
|
|
90
118
|
var _this$props = this.props,
|
|
91
119
|
n = _this$props.n,
|
|
@@ -99,7 +127,7 @@ function (_React$Component) {
|
|
|
99
127
|
var hasGrip = finalLabel !== "\xA0";
|
|
100
128
|
return _react["default"].createElement("div", {
|
|
101
129
|
ref: function ref(_ref) {
|
|
102
|
-
return
|
|
130
|
+
return _this2.elementRef = _ref;
|
|
103
131
|
},
|
|
104
132
|
style: {
|
|
105
133
|
display: 'inline-flex',
|
|
@@ -142,7 +170,8 @@ _defineProperty(BlankContent, "propTypes", {
|
|
|
142
170
|
isDragging: _propTypes["default"].bool,
|
|
143
171
|
isOver: _propTypes["default"].bool,
|
|
144
172
|
dragItem: _propTypes["default"].object,
|
|
145
|
-
value: _propTypes["default"].object
|
|
173
|
+
value: _propTypes["default"].object,
|
|
174
|
+
classes: _propTypes["default"].object
|
|
146
175
|
});
|
|
147
176
|
|
|
148
177
|
var StyledBlankContent = useStyles(BlankContent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/plugins/respArea/drag-in-the-blank/choice.jsx"],"names":["useStyles","theme","content","border","palette","primary","main","chip","minWidth","correct","incorrect","BlankContent","elementRef","props","n","children","isDragging","dragItem","isOver","value","label","finalLabel","hasGrip","ref","display","minHeight","background","boxSizing","borderRadius","overflow","position","padding","key","top","left","color","__html","React","Component","PropTypes","object","func","bool","StyledBlankContent","connectedBlankContent","connectDropTarget","connectDragSource","classes","dragContent","dragEl","over","tileTarget","drop","monitor","draggedItem","getItem","shouldDrop","index","onChange","dropped","canDrop","instanceId","DropTile","connect","dropTarget","tileSource","canDrag","disabled","beginDrag","id","targetId","fromChoice","endDrag","dropResult","getDropResult","duplicates","removeResponse","dragSource"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport isUndefined from 'lodash/isUndefined';\nimport { DragSource, DropTarget } from '@pie-lib/drag';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { GripIcon } from '../icons';\n\nconst useStyles = withStyles(theme => ({\n content: {\n border: `solid 0px ${theme.palette.primary.main}`\n },\n chip: {\n minWidth: '90px'\n },\n correct: {\n border: 'solid 1px green'\n },\n incorrect: {\n border: 'solid 1px red'\n }\n}));\n\nexport class BlankContent extends React.Component {\n static propTypes = {\n n: PropTypes.object,\n children: PropTypes.func,\n isDragging: PropTypes.bool,\n isOver: PropTypes.bool,\n dragItem: PropTypes.object,\n value: PropTypes.object\n };\n\n componentDidUpdate() {\n if (this.elementRef) {\n renderMath(this.elementRef);\n }\n }\n\n render() {\n const { n, children, isDragging, dragItem, isOver, value } = this.props;\n\n const label = dragItem && isOver ? dragItem.value.value : value.value || '\\u00A0';\n const finalLabel = isDragging ? '\\u00A0' : label;\n const hasGrip = finalLabel !== '\\u00A0';\n\n return (\n <div\n ref={ref => (this.elementRef = ref)}\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n minHeight: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n overflow: 'hidden',\n position: 'relative',\n padding: '8px 8px 8px 35px'\n }}\n data-key={n.key}\n contentEditable={false}\n >\n {hasGrip && (\n <GripIcon\n style={{\n position: 'absolute',\n top: '6px',\n left: '15px',\n color: '#9B9B9B'\n }}\n contentEditable={false}\n />\n )}\n <span\n dangerouslySetInnerHTML={{\n __html: finalLabel\n }}\n />\n {children}\n </div>\n );\n }\n}\n\nconst StyledBlankContent = useStyles(BlankContent);\n\nconst connectedBlankContent = useStyles(({ connectDropTarget, connectDragSource, ...props }) => {\n const { classes, isOver, value } = props;\n const dragContent = <StyledBlankContent {...props} />;\n const dragEl = !value ? dragContent : connectDragSource(<span>{dragContent}</span>);\n const content = (\n <span className={classnames(classes.content, isOver && classes.over)}>{dragEl}</span>\n );\n\n return connectDropTarget ? connectDropTarget(content) : content;\n});\n\nexport const tileTarget = {\n drop(props, monitor) {\n const draggedItem = monitor.getItem();\n const shouldDrop =\n isUndefined(draggedItem.value.index) ||\n isUndefined(props.value.index) ||\n draggedItem.value.index !== props.value.index;\n\n if (shouldDrop) {\n props.onChange(draggedItem.value);\n }\n\n return {\n dropped: shouldDrop\n };\n },\n canDrop(props, monitor) {\n const draggedItem = monitor.getItem();\n\n return draggedItem.instanceId === props.instanceId;\n }\n};\n\nconst DropTile = DropTarget('drag-in-the-blank-choice', tileTarget, (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n dragItem: monitor.getItem()\n}))(connectedBlankContent);\n\nexport const tileSource = {\n canDrag(props) {\n return !props.disabled && !!props.value;\n },\n beginDrag(props) {\n return {\n id: props.targetId,\n value: props.value,\n instanceId: props.instanceId,\n fromChoice: true\n };\n },\n endDrag(props, monitor) {\n // this will be null if it did not drop\n const dropResult = monitor.getDropResult();\n\n if (!dropResult || (dropResult.dropped && !props.duplicates)) {\n const draggedItem = monitor.getItem();\n\n if (draggedItem.fromChoice) {\n props.removeResponse(draggedItem.value);\n }\n }\n }\n};\n\nexport default DragSource('drag-in-the-blank-choice', tileSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n}))(DropTile);\n"],"file":"choice.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/plugins/respArea/drag-in-the-blank/choice.jsx"],"names":["useStyles","theme","content","border","palette","primary","main","chip","minWidth","correct","incorrect","selected","color","primaryDark","BlankContent","props","handleClick","bind","document","addEventListener","removeEventListener","event","classes","elementRef","className","contains","target","n","children","isDragging","dragItem","isOver","value","label","finalLabel","hasGrip","ref","display","minHeight","background","boxSizing","borderRadius","overflow","position","padding","key","top","left","__html","React","Component","PropTypes","object","func","bool","StyledBlankContent","connectedBlankContent","connectDropTarget","connectDragSource","dragContent","dragEl","over","tileTarget","drop","monitor","draggedItem","getItem","shouldDrop","index","onChange","dropped","canDrop","instanceId","DropTile","connect","dropTarget","tileSource","canDrag","disabled","beginDrag","id","targetId","fromChoice","endDrag","dropResult","getDropResult","duplicates","removeResponse","dragSource"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport isUndefined from 'lodash/isUndefined';\nimport { DragSource, DropTarget } from '@pie-lib/drag';\nimport { color } from '@pie-lib/render-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { GripIcon } from '../icons';\n\nconst useStyles = withStyles(theme => ({\n content: {\n border: `solid 0px ${theme.palette.primary.main}`\n },\n chip: {\n minWidth: '90px'\n },\n correct: {\n border: 'solid 1px green'\n },\n incorrect: {\n border: 'solid 1px red'\n },\n selected: {\n border: `2px solid ${color.primaryDark()} !important`\n }\n}));\n\nexport class BlankContent extends React.Component {\n static propTypes = {\n n: PropTypes.object,\n children: PropTypes.func,\n isDragging: PropTypes.bool,\n isOver: PropTypes.bool,\n dragItem: PropTypes.object,\n value: PropTypes.object,\n classes: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleClick);\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleClick);\n }\n\n handleClick(event) {\n const { classes } = this.props;\n\n if (this.elementRef) {\n this.elementRef.className = this.elementRef.contains(event.target) ? classes.selected : '';\n }\n }\n\n componentDidUpdate() {\n if (this.elementRef) {\n renderMath(this.elementRef);\n }\n }\n\n render() {\n const { n, children, isDragging, dragItem, isOver, value } = this.props;\n\n const label = dragItem && isOver ? dragItem.value.value : value.value || '\\u00A0';\n const finalLabel = isDragging ? '\\u00A0' : label;\n const hasGrip = finalLabel !== '\\u00A0';\n\n return (\n <div\n ref={ref => (this.elementRef = ref)}\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n minHeight: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n overflow: 'hidden',\n position: 'relative',\n padding: '8px 8px 8px 35px'\n }}\n data-key={n.key}\n contentEditable={false}\n >\n {hasGrip && (\n <GripIcon\n style={{\n position: 'absolute',\n top: '6px',\n left: '15px',\n color: '#9B9B9B'\n }}\n contentEditable={false}\n />\n )}\n <span\n dangerouslySetInnerHTML={{\n __html: finalLabel\n }}\n />\n {children}\n </div>\n );\n }\n}\n\nconst StyledBlankContent = useStyles(BlankContent);\n\nconst connectedBlankContent = useStyles(({ connectDropTarget, connectDragSource, ...props }) => {\n const { classes, isOver, value } = props;\n const dragContent = <StyledBlankContent {...props} />;\n const dragEl = !value ? dragContent : connectDragSource(<span>{dragContent}</span>);\n const content = (\n <span className={classnames(classes.content, isOver && classes.over)}>{dragEl}</span>\n );\n\n return connectDropTarget ? connectDropTarget(content) : content;\n});\n\nexport const tileTarget = {\n drop(props, monitor) {\n const draggedItem = monitor.getItem();\n const shouldDrop =\n isUndefined(draggedItem.value.index) ||\n isUndefined(props.value.index) ||\n draggedItem.value.index !== props.value.index;\n\n if (shouldDrop) {\n props.onChange(draggedItem.value);\n }\n\n return {\n dropped: shouldDrop\n };\n },\n canDrop(props, monitor) {\n const draggedItem = monitor.getItem();\n\n return draggedItem.instanceId === props.instanceId;\n }\n};\n\nconst DropTile = DropTarget('drag-in-the-blank-choice', tileTarget, (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n dragItem: monitor.getItem()\n}))(connectedBlankContent);\n\nexport const tileSource = {\n canDrag(props) {\n return !props.disabled && !!props.value;\n },\n beginDrag(props) {\n return {\n id: props.targetId,\n value: props.value,\n instanceId: props.instanceId,\n fromChoice: true\n };\n },\n endDrag(props, monitor) {\n // this will be null if it did not drop\n const dropResult = monitor.getDropResult();\n\n if (!dropResult || (dropResult.dropped && !props.duplicates)) {\n const draggedItem = monitor.getItem();\n\n if (draggedItem.fromChoice) {\n props.removeResponse(draggedItem.value);\n }\n }\n }\n};\n\nexport default DragSource('drag-in-the-blank-choice', tileSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n}))(DropTile);\n"],"file":"choice.js"}
|
|
@@ -79,7 +79,7 @@ function ResponseAreaPlugin(opts) {
|
|
|
79
79
|
name: 'response_area',
|
|
80
80
|
toolbar: toolbar,
|
|
81
81
|
filterPlugins: function filterPlugins(node, plugins) {
|
|
82
|
-
if (node.type === 'explicit_constructed_response') {
|
|
82
|
+
if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {
|
|
83
83
|
return [];
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/respArea/index.jsx"],"names":["log","lastIndexMap","elTypesArray","ResponseAreaPlugin","opts","toolbar","icon","buttonStyles","margin","onClick","value","onChange","change","type","replace","prevIndex","newIndex","newInline","selection","startKey","endKey","insertInline","lastText","document","getLastText","parentNode","getParent","key","index","nodes","indexOf","isVoid","insertNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","customToolbar","respAreaToolbar","supports","node","object","showDone","name","filterPlugins","plugins","filter","p","deleteNode","e","preventDefault","removeNodeByKey","renderNode","props","attributes","n","data","toJSON","forEachDescendant","d","parseInt","get","normalizeNode","addSpacesArray","allElements","filterDescendants","forEach","el","prevText","getPreviousText","lastCharIsNewLine","text","length","push","nr","withoutNormalization","getNode","insertTextByKey","repeat","onDrop","event","editor","closestEl","target","closest","inline","findDescendant","dataset","serialization","deserialize","id","inTable","serialize"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,yCAAN,CAAZ;AAEA,IAAMC,YAAY,GAAG,EAArB;AACA,IAAMC,YAAY,GAAG,CAAC,iBAAD,EAAoB,+BAApB,EAAqD,mBAArD,CAArB;;AAEe,SAASC,kBAAT,CAA4BC,IAA5B,EAAkC;AAC/C,MAAMC,OAAO,GAAG;AACdC,IAAAA,IAAI,EAAE,gCAAC,kBAAD,OADQ;AAEdC,IAAAA,YAAY,EAAE;AACZC,MAAAA,MAAM,EAAE;AADI,KAFA;AAKdC,IAAAA,OAAO,EAAE,iBAACC,KAAD,EAAQC,QAAR,EAAqB;AAC5BX,MAAAA,GAAG,CAAC,mBAAD,CAAH;AACA,UAAMY,MAAM,GAAGF,KAAK,CAACE,MAAN,EAAf;AACA,UAAMC,IAAI,GAAGT,IAAI,CAACS,IAAL,CAAUC,OAAV,CAAkB,IAAlB,EAAwB,GAAxB,CAAb;AACA,UAAMC,SAAS,GAAGd,YAAY,CAACY,IAAD,CAA9B;AACA,UAAMG,QAAQ,GAAGD,SAAS,KAAK,CAAd,GAAkBA,SAAlB,GAA8BA,SAAS,GAAG,CAA3D;AACA,UAAME,SAAS,GAAG,8BAAkBb,IAAlB,EAAwBY,QAAxB,CAAlB;AAEAf,MAAAA,YAAY,CAACY,IAAD,CAAZ,IAAsB,CAAtB;;AAEA,UAAII,SAAJ,EAAe;AACb,YAAIL,MAAM,CAACF,KAAP,CAAaQ,SAAb,CAAuBC,QAAvB,IAAmCP,MAAM,CAACF,KAAP,CAAaQ,SAAb,CAAuBE,MAA9D,EAAsE;AACpER,UAAAA,MAAM,CAACS,YAAP,CAAoBJ,SAApB;AACD,SAFD,MAEO;AACL;AACA,cAAMK,QAAQ,GAAGZ,KAAK,CAACa,QAAN,CAAeC,WAAf,EAAjB;AACA,cAAMC,UAAU,GAAGf,KAAK,CAACa,QAAN,CAAeG,SAAf,CAAyBJ,QAAQ,CAACK,GAAlC,CAAnB;;AAEA,cAAIF,UAAJ,EAAgB;AACd,gBAAMG,KAAK,GAAGH,UAAU,CAACI,KAAX,CAAiBC,OAAjB,CAAyBR,QAAQ,CAACK,GAAlC,CAAd;AAEA,gBAAIF,UAAU,CAACM,MAAf,EAAuB;AAEvBnB,YAAAA,MAAM,CAACoB,eAAP,CAAuBP,UAAU,CAACE,GAAlC,EAAuCC,KAAK,GAAG,CAA/C,EAAkDX,SAAlD;AACD;AACF;;AAED,YAAIA,SAAS,CAACJ,IAAV,KAAmB,mBAAvB,EAA4C;AAC1C,cAAMoB,QAAQ,GAAGrB,MAAM,CAACF,KAAP,CAAaa,QAAb,CAAsBW,WAAtB,CAAkCjB,SAAS,CAACU,GAA5C,CAAjB;;AAEA,cAAIM,QAAJ,EAAc;AACZrB,YAAAA,MAAM,CAACuB,WAAP,CAAmBF,QAAQ,CAACN,GAA5B,EAAiC,CAAjC,EAAoCS,YAApC,CAAiDH,QAAQ,CAACN,GAA1D,EAA+D,CAA/D;AACD;AACF;;AAEDhB,QAAAA,QAAQ,CAACC,MAAD,CAAR;AACD;AACF,KA1Ca;AA2CdyB,IAAAA,aAAa,EAAEjC,IAAI,CAACkC,eA3CN;AA4CdC,IAAAA,QAAQ,EAAE,kBAAAC,IAAI;AAAA,aAAIA,IAAI,CAACC,MAAL,KAAgB,QAAhB,IAA4BvC,YAAY,CAAC4B,OAAb,CAAqBU,IAAI,CAAC3B,IAA1B,KAAmC,CAAnE;AAAA,KA5CA;AA6Cd6B,IAAAA,QAAQ,EAAE;AA7CI,GAAhB;AAgDA,SAAO;AACLC,IAAAA,IAAI,EAAE,eADD;AAELtC,IAAAA,OAAO,EAAPA,OAFK;AAGLuC,IAAAA,aAAa,EAAE,uBAACJ,IAAD,EAAOK,OAAP,EAAmB;AAChC,UAAIL,IAAI,CAAC3B,IAAL,KAAc,+BAAlB,EAAmD;AACjD,eAAO,EAAP;AACD;;AAED,aAAOgC,OAAO,CAACC,MAAR,CAAe,UAAAC,CAAC;AAAA,eAAIA,CAAC,CAACJ,IAAF,KAAW,eAAf;AAAA,OAAhB,CAAP;AACD,KATI;AAULK,IAAAA,UAAU,EAAE,oBAACC,CAAD,EAAIT,IAAJ,EAAU9B,KAAV,EAAiBC,QAAjB,EAA8B;AACxCsC,MAAAA,CAAC,CAACC,cAAF;AAEA,UAAMtC,MAAM,GAAGF,KAAK,CAACE,MAAN,GAAeuC,eAAf,CAA+BX,IAAI,CAACb,GAApC,CAAf;AAEAhB,MAAAA,QAAQ,CAACC,MAAD,CAAR;AACD,KAhBI;AAiBLwC,IAAAA,UAjBK,sBAiBMC,KAjBN,EAiBa;AAAA,UACRC,UADQ,GACgBD,KADhB,CACRC,UADQ;AAAA,UACUC,CADV,GACgBF,KADhB,CACIb,IADJ;;AAGhB,UAAIe,CAAC,CAAC1C,IAAF,KAAW,+BAAf,EAAgD;AAC9C,YAAM2C,IAAI,GAAGD,CAAC,CAACC,IAAF,CAAOC,MAAP,EAAb;AAEA,eAAO,gCAAC,uCAAD;AAA6B,UAAA,UAAU,EAAEH,UAAzC;AAAqD,UAAA,KAAK,EAAEE,IAAI,CAAC9C;AAAjE,UAAP;AACD;;AAED,UAAI6C,CAAC,CAAC1C,IAAF,KAAW,mBAAf,EAAoC;AAClC,YAAM2C,KAAI,GAAGD,CAAC,CAACC,IAAF,CAAOC,MAAP,EAAb;;AAEA,eACE,gCAAC,0BAAD;AAAgB,UAAA,UAAU,EAAEH,UAA5B;AAAwC,UAAA,IAAI,EAAEE,KAA9C;AAAoD,UAAA,CAAC,EAAED,CAAvD;AAA0D,UAAA,SAAS,EAAEF,KAArE;AAA4E,UAAA,IAAI,EAAEjD;AAAlF,UADF;AAGD;;AAED,UAAImD,CAAC,CAAC1C,IAAF,KAAW,iBAAf,EAAkC;AAChC,YAAM2C,MAAI,GAAGD,CAAC,CAACC,IAAF,CAAOC,MAAP,EAAb;;AAEA,eAAO,gCAAC,0BAAD;AAAgB,UAAA,UAAU,EAAEH,UAA5B;AAAwC,UAAA,YAAY,EAAEE,MAAI,CAAC9C;AAA3D,UAAP;AACD;AACF,KAvCI;AAwCLC,IAAAA,QAxCK,oBAwCIC,MAxCJ,EAwCY;AACf,UAAMC,IAAI,GAAGT,IAAI,CAACS,IAAL,CAAUC,OAAV,CAAkB,IAAlB,EAAwB,GAAxB,CAAb;;AAEA,UAAI,6BAAYb,YAAY,CAACY,IAAD,CAAxB,CAAJ,EAAqC;AACnCZ,QAAAA,YAAY,CAACY,IAAD,CAAZ,GAAqB,CAArB;AAEAD,QAAAA,MAAM,CAACF,KAAP,CAAaa,QAAb,CAAsBmC,iBAAtB,CAAwC,UAAAC,CAAC,EAAI;AAC3C,cAAIA,CAAC,CAAC9C,IAAF,KAAWA,IAAf,EAAqB;AACnB,gBAAMG,QAAQ,GAAG4C,QAAQ,CAACD,CAAC,CAACH,IAAF,CAAOK,GAAP,CAAW,OAAX,CAAD,EAAsB,EAAtB,CAAzB;;AAEA,gBAAI7C,QAAQ,GAAGf,YAAY,CAACY,IAAD,CAA3B,EAAmC;AACjCZ,cAAAA,YAAY,CAACY,IAAD,CAAZ,GAAqBG,QAArB;AACD;AACF;AACF,SARD;AASD;AACF,KAxDI;AAyDL8C,IAAAA,aAAa,EAAE,uBAAAtB,IAAI,EAAI;AACrB,UAAIA,IAAI,CAACC,MAAL,KAAgB,UAApB,EAAgC;AAC9B;AACD;;AAED,UAAMsB,cAAc,GAAG,EAAvB;AAEA,UAAMC,WAAW,GAAGxB,IAAI,CAACyB,iBAAL,CAAuB,UAAAN,CAAC;AAAA,eAAIzD,YAAY,CAAC4B,OAAb,CAAqB6B,CAAC,CAAC9C,IAAvB,KAAgC,CAApC;AAAA,OAAxB,CAApB;AAEAmD,MAAAA,WAAW,CAACE,OAAZ,CAAoB,UAAAC,EAAE,EAAI;AACxB,YAAMC,QAAQ,GAAG5B,IAAI,CAAC6B,eAAL,CAAqBF,EAAE,CAACxC,GAAxB,CAAjB;AACA,YAAM2C,iBAAiB,GAAGF,QAAQ,CAACG,IAAT,CAAcH,QAAQ,CAACG,IAAT,CAAcC,MAAd,GAAuB,CAArC,MAA4C,IAAtE;;AAEA,YAAIJ,QAAQ,CAACG,IAAT,CAAcC,MAAd,KAAyB,CAAzB,IAA8BF,iBAAlC,EAAqD;AACnDP,UAAAA,cAAc,CAACU,IAAf,CAAoB;AAClBC,YAAAA,EAAE,EAAEJ,iBAAiB,GAAG,CAAH,GAAO,CADV;AAElB3C,YAAAA,GAAG,EAAEyC,QAAQ,CAACzC;AAFI,WAApB;AAID;AACF,OAVD;;AAYA,UAAI,CAACoC,cAAc,CAACS,MAApB,EAA4B;AAC1B;AACD;;AAED,aAAO,UAAA5D,MAAM,EAAI;AACfA,QAAAA,MAAM,CAAC+D,oBAAP,CAA4B,YAAM;AAChCZ,UAAAA,cAAc,CAACG,OAAf,CAAuB,gBAAiB;AAAA,gBAAdvC,GAAc,QAAdA,GAAc;AAAA,gBAAT+C,EAAS,QAATA,EAAS;AACtC,gBAAMlC,IAAI,GAAG5B,MAAM,CAACF,KAAP,CAAaa,QAAb,CAAsBqD,OAAtB,CAA8BjD,GAA9B,CAAb;AAEAf,YAAAA,MAAM,CAACiE,eAAP,CAAuBlD,GAAvB,EAA4Ba,IAAI,CAAC+B,IAAL,CAAUC,MAAtC,EAA8C,OAASM,MAAT,CAAgBJ,EAAhB,CAA9C;AACD,WAJD;AAKD,SAND;AAOD,OARD;AASD,KA3FI;AA4FLK,IAAAA,MA5FK,kBA4FEC,KA5FF,EA4FSpE,MA5FT,EA4FiBqE,MA5FjB,EA4FyB;AAC5B,UAAMC,SAAS,GAAGF,KAAK,CAACG,MAAN,CAAaC,OAAb,CAAqB,YAArB,CAAlB;AACA,UAAMC,MAAM,GAAGJ,MAAM,CAACvE,KAAP,CAAaa,QAAb,CAAsB+D,cAAtB,CAAqC,UAAA3B,CAAC;AAAA,eAAIA,CAAC,CAAChC,GAAF,KAAUuD,SAAS,CAACK,OAAV,CAAkB5D,GAAhC;AAAA,OAAtC,CAAf;;AAEA,UAAI0D,MAAM,CAACxE,IAAP,KAAgB,mBAApB,EAAyC;AACvC,eAAO,KAAP;AACD;AACF;AAnGI,GAAP;AAqGD;;AAEM,IAAM2E,aAAa,GAAG;AAC3BC,EAAAA,WAD2B,uBACftB,EADe,EACX;AACd,QAAMtD,IAAI,GAAGsD,EAAE,CAACoB,OAAH,IAAcpB,EAAE,CAACoB,OAAH,CAAW1E,IAAtC;;AAEA,YAAQA,IAAR;AACE,WAAK,iBAAL;AACE,eAAO;AACL4B,UAAAA,MAAM,EAAE,QADH;AAEL5B,UAAAA,IAAI,EAAE,iBAFD;AAGLkB,UAAAA,MAAM,EAAE,IAHH;AAILyB,UAAAA,IAAI,EAAE;AACJ5B,YAAAA,KAAK,EAAEuC,EAAE,CAACoB,OAAH,CAAW3D,KADd;AAEJlB,YAAAA,KAAK,EAAEyD,EAAE,CAACoB,OAAH,CAAW7E;AAFd;AAJD,SAAP;;AASF,WAAK,+BAAL;AACE,eAAO;AACL+B,UAAAA,MAAM,EAAE,QADH;AAEL5B,UAAAA,IAAI,EAAE,+BAFD;AAGLkB,UAAAA,MAAM,EAAE,IAHH;AAILyB,UAAAA,IAAI,EAAE;AACJ5B,YAAAA,KAAK,EAAEuC,EAAE,CAACoB,OAAH,CAAW3D,KADd;AAEJlB,YAAAA,KAAK,EAAEyD,EAAE,CAACoB,OAAH,CAAW7E;AAFd;AAJD,SAAP;;AASF,WAAK,mBAAL;AACE,eAAO;AACL+B,UAAAA,MAAM,EAAE,QADH;AAEL5B,UAAAA,IAAI,EAAE,mBAFD;AAGLkB,UAAAA,MAAM,EAAE,IAHH;AAILyB,UAAAA,IAAI,EAAE;AACJ5B,YAAAA,KAAK,EAAEuC,EAAE,CAACoB,OAAH,CAAW3D,KADd;AAEJ8D,YAAAA,EAAE,EAAEvB,EAAE,CAACoB,OAAH,CAAWG,EAFX;AAGJhF,YAAAA,KAAK,EAAEyD,EAAE,CAACoB,OAAH,CAAW7E,KAHd;AAIJiF,YAAAA,OAAO,EAAExB,EAAE,CAACoB,OAAH,CAAWI;AAJhB;AAJD,SAAP;AAtBJ;AAkCD,GAtC0B;AAuC3BC,EAAAA,SAvC2B,qBAuCjBnD,MAvCiB,EAuCT;AAChB,QAAIA,MAAM,CAACA,MAAP,KAAkB,QAAtB,EAAgC;AAC9B;AACD;;AAED,YAAQA,MAAM,CAAC5B,IAAf;AACE,WAAK,iBAAL;AAAwB;AACtB,cAAM2C,IAAI,GAAGf,MAAM,CAACe,IAAP,CAAYC,MAAZ,EAAb;AAEA,iBAAO;AAAM,yBAAU,iBAAhB;AAAkC,0BAAYD,IAAI,CAAC5B,KAAnD;AAA0D,0BAAY4B,IAAI,CAAC9C;AAA3E,YAAP;AACD;;AACD,WAAK,+BAAL;AAAsC;AACpC,cAAM8C,MAAI,GAAGf,MAAM,CAACe,IAAP,CAAYC,MAAZ,EAAb;;AAEA,iBACE;AACE,yBAAU,+BADZ;AAEE,0BAAYD,MAAI,CAAC5B,KAFnB;AAGE,0BAAY4B,MAAI,CAAC9C;AAHnB,YADF;AAOD;;AACD,WAAK,mBAAL;AAA0B;AACxB,cAAM8C,MAAI,GAAGf,MAAM,CAACe,IAAP,CAAYC,MAAZ,EAAb;;AAEA,iBACE;AACE,yBAAU,mBADZ;AAEE,0BAAYD,MAAI,CAAC5B,KAFnB;AAGE,uBAAS4B,MAAI,CAACkC,EAHhB;AAIE,0BAAYlC,MAAI,CAAC9C,KAJnB;AAKE,6BAAe8C,MAAI,CAACmC;AALtB,YADF;AASD;AA7BH;AA+BD;AA3E0B,CAAtB","sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport isUndefined from 'lodash/isUndefined';\n\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesArray = ['inline_dropdown', 'explicit_constructed_response', 'drag_in_the_blank'];\n\nexport default function ResponseAreaPlugin(opts) {\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto'\n },\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const change = value.change();\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }\n\n onChange(change);\n }\n },\n customToolbar: opts.respAreaToolbar,\n supports: node => node.object === 'inline' && elTypesArray.indexOf(node.type) >= 0,\n showDone: false\n };\n\n return {\n name: 'response_area',\n toolbar,\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response') {\n return [];\n }\n\n return plugins.filter(p => p.name !== 'response_area');\n },\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n const { attributes, node: n } = props;\n\n if (n.type === 'explicit_constructed_response') {\n const data = n.data.toJSON();\n\n return <ExplicitConstructedResponse attributes={attributes} value={data.value} />;\n }\n\n if (n.type === 'drag_in_the_blank') {\n const data = n.data.toJSON();\n\n return (\n <DragInTheBlank attributes={attributes} data={data} n={n} nodeProps={props} opts={opts} />\n );\n }\n\n if (n.type === 'inline_dropdown') {\n const data = n.data.toJSON();\n\n return <InlineDropdown attributes={attributes} selectedItem={data.value} />;\n }\n },\n onChange(change) {\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n change.value.document.forEachDescendant(d => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.get('index'), 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n },\n normalizeNode: node => {\n if (node.object !== 'document') {\n return;\n }\n\n const addSpacesArray = [];\n\n const allElements = node.filterDescendants(d => elTypesArray.indexOf(d.type) >= 0);\n\n allElements.forEach(el => {\n const prevText = node.getPreviousText(el.key);\n const lastCharIsNewLine = prevText.text[prevText.text.length - 1] === '\\n';\n\n if (prevText.text.length === 0 || lastCharIsNewLine) {\n addSpacesArray.push({\n nr: lastCharIsNewLine ? 1 : 2,\n key: prevText.key\n });\n }\n });\n\n if (!addSpacesArray.length) {\n return;\n }\n\n return change => {\n change.withoutNormalization(() => {\n addSpacesArray.forEach(({ key, nr }) => {\n const node = change.value.document.getNode(key);\n\n change.insertTextByKey(key, node.text.length, '\\u00A0'.repeat(nr));\n });\n });\n };\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant(d => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n }\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return {\n object: 'inline',\n type: 'inline_dropdown',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'explicit_constructed_response':\n return {\n object: 'inline',\n type: 'explicit_constructed_response',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'drag_in_the_blank':\n return {\n object: 'inline',\n type: 'drag_in_the_blank',\n isVoid: true,\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable\n }\n };\n }\n },\n serialize(object) {\n if (object.object !== 'inline') {\n return;\n }\n\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data.toJSON();\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"explicit_constructed_response\"\n data-index={data.index}\n data-value={data.value}\n />\n );\n }\n case 'drag_in_the_blank': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n }\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/respArea/index.jsx"],"names":["log","lastIndexMap","elTypesArray","ResponseAreaPlugin","opts","toolbar","icon","buttonStyles","margin","onClick","value","onChange","change","type","replace","prevIndex","newIndex","newInline","selection","startKey","endKey","insertInline","lastText","document","getLastText","parentNode","getParent","key","index","nodes","indexOf","isVoid","insertNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","customToolbar","respAreaToolbar","supports","node","object","showDone","name","filterPlugins","plugins","filter","p","deleteNode","e","preventDefault","removeNodeByKey","renderNode","props","attributes","n","data","toJSON","forEachDescendant","d","parseInt","get","normalizeNode","addSpacesArray","allElements","filterDescendants","forEach","el","prevText","getPreviousText","lastCharIsNewLine","text","length","push","nr","withoutNormalization","getNode","insertTextByKey","repeat","onDrop","event","editor","closestEl","target","closest","inline","findDescendant","dataset","serialization","deserialize","id","inTable","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport isUndefined from 'lodash/isUndefined';\n\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesArray = ['inline_dropdown', 'explicit_constructed_response', 'drag_in_the_blank'];\n\nexport default function ResponseAreaPlugin(opts) {\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto'\n },\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const change = value.change();\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }\n\n onChange(change);\n }\n },\n customToolbar: opts.respAreaToolbar,\n supports: node => node.object === 'inline' && elTypesArray.indexOf(node.type) >= 0,\n showDone: false\n };\n\n return {\n name: 'response_area',\n toolbar,\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {\n return [];\n }\n\n return plugins.filter(p => p.name !== 'response_area');\n },\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n const { attributes, node: n } = props;\n\n if (n.type === 'explicit_constructed_response') {\n const data = n.data.toJSON();\n\n return <ExplicitConstructedResponse attributes={attributes} value={data.value} />;\n }\n\n if (n.type === 'drag_in_the_blank') {\n const data = n.data.toJSON();\n\n return (\n <DragInTheBlank attributes={attributes} data={data} n={n} nodeProps={props} opts={opts} />\n );\n }\n\n if (n.type === 'inline_dropdown') {\n const data = n.data.toJSON();\n\n return <InlineDropdown attributes={attributes} selectedItem={data.value} />;\n }\n },\n onChange(change) {\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n change.value.document.forEachDescendant(d => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.get('index'), 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n },\n normalizeNode: node => {\n if (node.object !== 'document') {\n return;\n }\n\n const addSpacesArray = [];\n\n const allElements = node.filterDescendants(d => elTypesArray.indexOf(d.type) >= 0);\n\n allElements.forEach(el => {\n const prevText = node.getPreviousText(el.key);\n const lastCharIsNewLine = prevText.text[prevText.text.length - 1] === '\\n';\n\n if (prevText.text.length === 0 || lastCharIsNewLine) {\n addSpacesArray.push({\n nr: lastCharIsNewLine ? 1 : 2,\n key: prevText.key\n });\n }\n });\n\n if (!addSpacesArray.length) {\n return;\n }\n\n return change => {\n change.withoutNormalization(() => {\n addSpacesArray.forEach(({ key, nr }) => {\n const node = change.value.document.getNode(key);\n\n change.insertTextByKey(key, node.text.length, '\\u00A0'.repeat(nr));\n });\n });\n };\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant(d => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n }\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return {\n object: 'inline',\n type: 'inline_dropdown',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'explicit_constructed_response':\n return {\n object: 'inline',\n type: 'explicit_constructed_response',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'drag_in_the_blank':\n return {\n object: 'inline',\n type: 'drag_in_the_blank',\n isVoid: true,\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable\n }\n };\n }\n },\n serialize(object) {\n if (object.object !== 'inline') {\n return;\n }\n\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data.toJSON();\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"explicit_constructed_response\"\n data-index={data.index}\n data-value={data.value}\n />\n );\n }\n case 'drag_in_the_blank': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n }\n};\n"],"file":"index.js"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.serialization = exports.reactAttributes = exports.parseStyleString = exports["default"] = void 0;
|
|
6
|
+
exports.serialization = exports.reactAttributes = exports.parseStyleString = exports["default"] = exports.moveFocusToBeginningOfTable = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
|
|
@@ -29,6 +29,12 @@ var _toStyle = require("to-style");
|
|
|
29
29
|
|
|
30
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
31
31
|
|
|
32
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
33
|
+
|
|
34
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
35
|
+
|
|
36
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
37
|
+
|
|
32
38
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
33
39
|
|
|
34
40
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:table');
|
|
@@ -87,6 +93,24 @@ TableCell.propTypes = {
|
|
|
87
93
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
88
94
|
};
|
|
89
95
|
|
|
96
|
+
var moveFocusToBeginningOfTable = function moveFocusToBeginningOfTable(change) {
|
|
97
|
+
var addedTable = change.value.document.findDescendant(function (d) {
|
|
98
|
+
return !!d.data && !!d.data.get('newTable');
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
if (!addedTable) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
change.collapseToStartOf(addedTable);
|
|
106
|
+
var update = addedTable.data.remove('newTable');
|
|
107
|
+
change.setNodeByKey(addedTable.key, {
|
|
108
|
+
data: update
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
exports.moveFocusToBeginningOfTable = moveFocusToBeginningOfTable;
|
|
113
|
+
|
|
90
114
|
var _default = function _default(opts, toolbarPlugins
|
|
91
115
|
/* : {toolbar: {}}[] */
|
|
92
116
|
) {
|
|
@@ -130,12 +154,28 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
130
154
|
});
|
|
131
155
|
};
|
|
132
156
|
|
|
157
|
+
core.utils.createTableWithOptions = function (row, columns, extra) {
|
|
158
|
+
var createdTable = core.utils.createTable(row, columns);
|
|
159
|
+
|
|
160
|
+
var newTable = _slate.Block.create(_objectSpread({}, createdTable.toJSON(), {}, extra));
|
|
161
|
+
|
|
162
|
+
return newTable;
|
|
163
|
+
};
|
|
164
|
+
|
|
133
165
|
core.toolbar = {
|
|
134
166
|
icon: _react["default"].createElement(_GridOn["default"], null),
|
|
135
167
|
onClick: function onClick(value, onChange) {
|
|
136
168
|
log('insert table');
|
|
137
|
-
var
|
|
138
|
-
|
|
169
|
+
var change = value.change();
|
|
170
|
+
var newTable = core.utils.createTableWithOptions(2, 2, {
|
|
171
|
+
data: {
|
|
172
|
+
border: '1',
|
|
173
|
+
newTable: true
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
change.insertBlock(newTable);
|
|
177
|
+
moveFocusToBeginningOfTable(change);
|
|
178
|
+
onChange(change);
|
|
139
179
|
},
|
|
140
180
|
supports: function supports(node, value) {
|
|
141
181
|
return node && node.object === 'block' && core.utils.isSelectionInTable(value);
|
|
@@ -287,7 +327,12 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
287
327
|
} // we insert the table block between the first block with text and the last block with text
|
|
288
328
|
|
|
289
329
|
|
|
290
|
-
change.insertBlock(tableJSON
|
|
330
|
+
change.insertBlock(_objectSpread({}, tableJSON, {
|
|
331
|
+
data: _objectSpread({}, tableJSON.data, {
|
|
332
|
+
newTable: true
|
|
333
|
+
})
|
|
334
|
+
}));
|
|
335
|
+
moveFocusToBeginningOfTable(change);
|
|
291
336
|
});
|
|
292
337
|
}
|
|
293
338
|
};
|
|
@@ -315,7 +360,8 @@ exports.parseStyleString = parseStyleString;
|
|
|
315
360
|
|
|
316
361
|
var reactAttributes = function reactAttributes(o) {
|
|
317
362
|
return (0, _toStyle.object)(o, {
|
|
318
|
-
camelize: true
|
|
363
|
+
camelize: true,
|
|
364
|
+
addUnits: false
|
|
319
365
|
});
|
|
320
366
|
};
|
|
321
367
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/table/index.jsx"],"names":["log","Table","table","props","nodeAttributes","dataToAttributes","node","data","classes","attributes","onFocus","onBlur","children","propTypes","PropTypes","object","func","SlatePropTypes","oneOfType","arrayOf","isRequired","TableRow","TableCell","td","minWidth","Tag","get","header","opts","toolbarPlugins","core","typeContent","schema","blocks","Object","keys","forEach","key","block","parent","nodes","types","type","objects","utils","getTableBlock","containerNode","getDescendant","ancestors","getAncestors","push","findLast","p","toolbar","icon","onClick","value","onChange","c","changes","insertTable","change","supports","isSelectionInTable","customToolbar","onToolbarDone","tableBlock","document","hasBorder","addRow","insertRow","addColumn","insertColumn","removeRow","removeColumn","removeTable","toggleBorder","update","set","setNodeByKey","onDone","Tb","Node","normalizeNode","shouldAddTextAfterNode","indexToNotHaveTableOn","size","indexOfLastTable","findLastIndex","d","tableNode","tableJSON","toJSON","removeNodeByKey","newBlock","Block","create","insertBlock","withoutNormalization","prevText","getPreviousText","moveFocusTo","text","length","moveAnchorTo","renderNode","parseStyleString","s","regex","match","result","exec","trim","reactAttributes","o","camelize","attributesToMap","el","acc","attribute","getAttribute","styleString","reactStyleObject","reduce","v","name","cellAttributes","serialization","deserialize","next","tag","tagName","toLowerCase","Array","from","childNodes","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EditTable from 'slate-edit-table';\nimport { Block, Inline } from 'slate';\nimport debug from 'debug';\nimport GridOn from '@material-ui/icons/GridOn';\nimport TableToolbar from './table-toolbar';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport convert from 'react-attr-converter';\nimport { object as toStyleObject } from 'to-style';\n\nconst log = debug('@pie-lib:editable-html:plugins:table');\n\nconst Table = withStyles(() => ({\n table: {}\n}))(props => {\n const nodeAttributes = dataToAttributes(props.node.data);\n\n return (\n <table\n className={props.classes.table}\n {...props.attributes}\n {...nodeAttributes}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n <tbody>{props.children}</tbody>\n </table>\n );\n});\n\nTable.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n node: SlatePropTypes.node,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nconst TableRow = props => <tr {...props.attributes}>{props.children}</tr>;\n\nTableRow.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nconst TableCell = withStyles(() => ({\n td: {\n minWidth: '25px'\n }\n}))(props => {\n const Tag = props.node.data.get('header') ? 'th' : 'td';\n\n const nodeAttributes = dataToAttributes(props.node.data);\n delete nodeAttributes.header;\n\n return (\n <Tag\n {...props.attributes}\n {...nodeAttributes}\n colSpan={props.node.data.get('colspan')}\n className={props.classes[Tag]}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n {props.children}\n </Tag>\n );\n});\n\nTableCell.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nexport default (opts, toolbarPlugins /* : {toolbar: {}}[] */) => {\n const core = EditTable({\n typeContent: 'div'\n });\n\n // fix outdated schema\n\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach(key => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n if (block.nodes[0].types) {\n block.nodes[0] = {\n type: block.nodes[0].types[0]\n };\n }\n\n if (block.nodes[0].objects) {\n block.nodes[0] = {\n object: block.nodes[0].objects[0]\n };\n }\n\n block.parent = {\n type: block.parent.types[0]\n };\n } else {\n block.nodes[0] = { type: block.nodes[0].types[0] };\n }\n });\n }\n\n core.utils.getTableBlock = (containerNode, key) => {\n const node = containerNode.getDescendant(key);\n const ancestors = containerNode.getAncestors(key).push(node);\n return ancestors.findLast(p => p.type === 'table');\n };\n\n core.toolbar = {\n icon: <GridOn />,\n onClick: (value, onChange) => {\n log('insert table');\n const c = core.changes.insertTable(value.change(), 2, 2);\n onChange(c);\n },\n supports: (node, value) =>\n node && node.object === 'block' && core.utils.isSelectionInTable(value),\n /**\n * Note - the node may not be a table node - it may be a node inside a table.\n */\n customToolbar: (node, value, onToolbarDone) => {\n log('[customToolbar] node.data: ', node.data);\n\n const tableBlock = core.utils.getTableBlock(value.document, node.key);\n log('[customToolbar] tableBlock: ', tableBlock);\n\n const hasBorder = () =>\n tableBlock.data.get('border') && tableBlock.data.get('border') !== '0';\n const addRow = () => {\n const change = core.changes.insertRow(value.change());\n onToolbarDone(change, false);\n };\n\n const addColumn = () => {\n const change = core.changes.insertColumn(value.change());\n onToolbarDone(change, false);\n };\n\n const removeRow = () => {\n const change = core.changes.removeRow(value.change());\n onToolbarDone(change, false);\n };\n\n const removeColumn = () => {\n const change = core.changes.removeColumn(value.change());\n onToolbarDone(change, false);\n };\n\n const removeTable = () => {\n const change = core.changes.removeTable(value.change());\n onToolbarDone(change, false);\n };\n\n const toggleBorder = () => {\n const { data } = tableBlock;\n const update = data.set('border', hasBorder() ? '0' : '1');\n log('[toggleBorder] update: ', update);\n const change = value.change().setNodeByKey(tableBlock.key, { data: update });\n onToolbarDone(change, false);\n };\n\n const onDone = () => {\n log('[onDone] call onToolbarDone...');\n onToolbarDone(null, true);\n };\n\n const Tb = () => (\n <TableToolbar\n plugins={toolbarPlugins}\n onChange={c => onToolbarDone(c, false)}\n value={value}\n onAddRow={addRow}\n onRemoveRow={removeRow}\n onAddColumn={addColumn}\n onRemoveColumn={removeColumn}\n onRemoveTable={removeTable}\n hasBorder={hasBorder()}\n onToggleBorder={toggleBorder}\n onDone={onDone}\n />\n );\n return Tb;\n }\n };\n\n const Node = props => {\n switch (props.node.type) {\n case 'table':\n return <Table {...props} onFocus={opts.onFocus} onBlur={opts.onBlur} />;\n case 'table_row':\n return <TableRow {...props} />;\n case 'table_cell':\n return <TableCell {...props} onFocus={opts.onFocus} onBlur={opts.onBlur} />;\n default:\n return null;\n }\n };\n Node.propTypes = {\n node: PropTypes.object\n };\n\n core.normalizeNode = node => {\n if (node.object !== 'document') {\n return;\n }\n\n let shouldAddTextAfterNode = false;\n const indexToNotHaveTableOn = node.nodes.size - 1;\n const indexOfLastTable = node.nodes.findLastIndex(d => d.type === 'table');\n\n // if the last table in the document is of type table, we need to do the change\n if (indexOfLastTable === indexToNotHaveTableOn) {\n shouldAddTextAfterNode = true;\n }\n\n if (!shouldAddTextAfterNode) {\n return;\n }\n\n const tableNode = node.nodes.get(indexOfLastTable);\n\n return change => {\n if (shouldAddTextAfterNode) {\n const tableJSON = tableNode.toJSON();\n\n // we remove the table node because otherwise we can't add the empty block after it\n // we need a block that contains text in order to do it\n change.removeNodeByKey(tableNode.key);\n\n const newBlock = Block.create({\n object: 'block',\n type: 'div'\n });\n\n // we add an empty block but that it's going to be normalized\n // because it will add the empty text to it like it should\n change.insertBlock(newBlock);\n\n change.withoutNormalization(() => {\n // we do these changes without normalization\n\n // we get the text previous to the new block added\n const prevText = change.value.document.getPreviousText(newBlock.key);\n\n if (prevText) {\n // we move focus to the previous text\n change\n .moveFocusTo(prevText.key, prevText.text.length)\n .moveAnchorTo(prevText.key, prevText.text.length);\n }\n\n // we insert the table block between the first block with text and the last block with text\n change.insertBlock(tableJSON);\n });\n }\n };\n };\n\n core.renderNode = Node;\n\n return core;\n};\n\nexport const parseStyleString = s => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const reactAttributes = o => toStyleObject(o, { camelize: true });\n\nconst attributesToMap = el => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst dataToAttributes = data => {\n if (!data || !data.get) {\n return {};\n }\n\n return data.reduce((acc, v, name) => {\n if (v) {\n acc[convert(name)] = v;\n }\n return acc;\n }, {});\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];\n\nconst cellAttributes = ['colspan', 'rowspan', 'class', 'style'];\n\nexport const serialization = {\n deserialize(el, next) {\n const tag = el.tagName.toLowerCase();\n\n switch (tag) {\n case 'table': {\n const children =\n el.children.length === 1 && el.children[0].tagName.toLowerCase() === 'tbody'\n ? el.children[0].children\n : el.children;\n const c = Array.from(children);\n\n return {\n object: 'block',\n type: 'table',\n nodes: next(c),\n data: attributes.reduce(attributesToMap(el), {})\n };\n }\n case 'th': {\n return {\n object: 'block',\n type: 'table_cell',\n nodes: next(el.childNodes),\n data: cellAttributes.reduce(attributesToMap(el), { header: true })\n };\n }\n case 'tr': {\n return {\n object: 'block',\n type: 'table_row',\n nodes: next(Array.from(el.children))\n };\n }\n case 'td': {\n return {\n object: 'block',\n type: 'table_cell',\n nodes: next(Array.from(el.childNodes)),\n data: cellAttributes.reduce(attributesToMap(el), { header: false })\n };\n }\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') {\n return;\n }\n\n switch (object.type) {\n case 'table': {\n const attributes = dataToAttributes(object.data);\n return (\n <table {...attributes}>\n <tbody>{children}</tbody>\n </table>\n );\n }\n case 'table_row': {\n return <tr>{children}</tr>;\n }\n case 'table_cell': {\n const attributes = dataToAttributes(object.data);\n delete attributes.header;\n if (object.data.get('header')) {\n return <th {...attributes}>{children}</th>;\n } else {\n return <td {...attributes}>{children}</td>;\n }\n }\n }\n }\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/table/index.jsx"],"names":["log","Table","table","props","nodeAttributes","dataToAttributes","node","data","classes","attributes","onFocus","onBlur","children","propTypes","PropTypes","object","func","SlatePropTypes","oneOfType","arrayOf","isRequired","TableRow","TableCell","td","minWidth","Tag","get","header","moveFocusToBeginningOfTable","change","addedTable","value","document","findDescendant","d","collapseToStartOf","update","remove","setNodeByKey","key","opts","toolbarPlugins","core","typeContent","schema","blocks","Object","keys","forEach","block","parent","nodes","types","type","objects","utils","getTableBlock","containerNode","getDescendant","ancestors","getAncestors","push","findLast","p","createTableWithOptions","row","columns","extra","createdTable","createTable","newTable","Block","create","toJSON","toolbar","icon","onClick","onChange","border","insertBlock","supports","isSelectionInTable","customToolbar","onToolbarDone","tableBlock","hasBorder","addRow","changes","insertRow","addColumn","insertColumn","removeRow","removeColumn","removeTable","toggleBorder","set","onDone","Tb","c","Node","normalizeNode","shouldAddTextAfterNode","indexToNotHaveTableOn","size","indexOfLastTable","findLastIndex","tableNode","tableJSON","removeNodeByKey","newBlock","withoutNormalization","prevText","getPreviousText","moveFocusTo","text","length","moveAnchorTo","renderNode","parseStyleString","s","regex","match","result","exec","trim","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","getAttribute","styleString","reactStyleObject","reduce","v","name","cellAttributes","serialization","deserialize","next","tag","tagName","toLowerCase","Array","from","childNodes","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EditTable from 'slate-edit-table';\nimport { Block } from 'slate';\nimport debug from 'debug';\nimport GridOn from '@material-ui/icons/GridOn';\nimport TableToolbar from './table-toolbar';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport convert from 'react-attr-converter';\nimport { object as toStyleObject } from 'to-style';\n\nconst log = debug('@pie-lib:editable-html:plugins:table');\n\nconst Table = withStyles(() => ({\n table: {}\n}))(props => {\n const nodeAttributes = dataToAttributes(props.node.data);\n\n return (\n <table\n className={props.classes.table}\n {...props.attributes}\n {...nodeAttributes}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n <tbody>{props.children}</tbody>\n </table>\n );\n});\n\nTable.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n node: SlatePropTypes.node,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nconst TableRow = props => <tr {...props.attributes}>{props.children}</tr>;\n\nTableRow.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nconst TableCell = withStyles(() => ({\n td: {\n minWidth: '25px'\n }\n}))(props => {\n const Tag = props.node.data.get('header') ? 'th' : 'td';\n\n const nodeAttributes = dataToAttributes(props.node.data);\n delete nodeAttributes.header;\n\n return (\n <Tag\n {...props.attributes}\n {...nodeAttributes}\n colSpan={props.node.data.get('colspan')}\n className={props.classes[Tag]}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n >\n {props.children}\n </Tag>\n );\n});\n\nTableCell.propTypes = {\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nexport const moveFocusToBeginningOfTable = change => {\n const addedTable = change.value.document.findDescendant(d => !!d.data && !!d.data.get('newTable'));\n\n if (!addedTable) {\n return;\n }\n\n change.collapseToStartOf(addedTable);\n\n const update = addedTable.data.remove('newTable');\n\n change.setNodeByKey(addedTable.key, { data: update });\n};\n\nexport default (opts, toolbarPlugins /* : {toolbar: {}}[] */) => {\n const core = EditTable({\n typeContent: 'div'\n });\n\n // fix outdated schema\n\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach(key => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n if (block.nodes[0].types) {\n block.nodes[0] = {\n type: block.nodes[0].types[0]\n };\n }\n\n if (block.nodes[0].objects) {\n block.nodes[0] = {\n object: block.nodes[0].objects[0]\n };\n }\n\n block.parent = {\n type: block.parent.types[0]\n };\n } else {\n block.nodes[0] = { type: block.nodes[0].types[0] };\n }\n });\n }\n\n core.utils.getTableBlock = (containerNode, key) => {\n const node = containerNode.getDescendant(key);\n const ancestors = containerNode.getAncestors(key).push(node);\n return ancestors.findLast(p => p.type === 'table');\n };\n\n core.utils.createTableWithOptions = (row, columns, extra) => {\n const createdTable = core.utils.createTable(row, columns);\n const newTable = Block.create({\n ...createdTable.toJSON(),\n ...extra\n });\n\n return newTable;\n };\n\n core.toolbar = {\n icon: <GridOn />,\n onClick: (value, onChange) => {\n log('insert table');\n const change = value.change();\n const newTable = core.utils.createTableWithOptions(2, 2, {\n data: {\n border: '1',\n newTable: true\n }\n });\n\n change.insertBlock(newTable);\n\n moveFocusToBeginningOfTable(change);\n onChange(change);\n },\n supports: (node, value) =>\n node && node.object === 'block' && core.utils.isSelectionInTable(value),\n /**\n * Note - the node may not be a table node - it may be a node inside a table.\n */\n customToolbar: (node, value, onToolbarDone) => {\n log('[customToolbar] node.data: ', node.data);\n\n const tableBlock = core.utils.getTableBlock(value.document, node.key);\n log('[customToolbar] tableBlock: ', tableBlock);\n\n const hasBorder = () =>\n tableBlock.data.get('border') && tableBlock.data.get('border') !== '0';\n const addRow = () => {\n const change = core.changes.insertRow(value.change());\n onToolbarDone(change, false);\n };\n\n const addColumn = () => {\n const change = core.changes.insertColumn(value.change());\n onToolbarDone(change, false);\n };\n\n const removeRow = () => {\n const change = core.changes.removeRow(value.change());\n onToolbarDone(change, false);\n };\n\n const removeColumn = () => {\n const change = core.changes.removeColumn(value.change());\n onToolbarDone(change, false);\n };\n\n const removeTable = () => {\n const change = core.changes.removeTable(value.change());\n onToolbarDone(change, false);\n };\n\n const toggleBorder = () => {\n const { data } = tableBlock;\n const update = data.set('border', hasBorder() ? '0' : '1');\n log('[toggleBorder] update: ', update);\n const change = value.change().setNodeByKey(tableBlock.key, { data: update });\n onToolbarDone(change, false);\n };\n\n const onDone = () => {\n log('[onDone] call onToolbarDone...');\n onToolbarDone(null, true);\n };\n\n const Tb = () => (\n <TableToolbar\n plugins={toolbarPlugins}\n onChange={c => onToolbarDone(c, false)}\n value={value}\n onAddRow={addRow}\n onRemoveRow={removeRow}\n onAddColumn={addColumn}\n onRemoveColumn={removeColumn}\n onRemoveTable={removeTable}\n hasBorder={hasBorder()}\n onToggleBorder={toggleBorder}\n onDone={onDone}\n />\n );\n return Tb;\n }\n };\n\n const Node = props => {\n switch (props.node.type) {\n case 'table':\n return <Table {...props} onFocus={opts.onFocus} onBlur={opts.onBlur} />;\n case 'table_row':\n return <TableRow {...props} />;\n case 'table_cell':\n return <TableCell {...props} onFocus={opts.onFocus} onBlur={opts.onBlur} />;\n default:\n return null;\n }\n };\n Node.propTypes = {\n node: PropTypes.object\n };\n\n core.normalizeNode = node => {\n if (node.object !== 'document') {\n return;\n }\n\n let shouldAddTextAfterNode = false;\n const indexToNotHaveTableOn = node.nodes.size - 1;\n const indexOfLastTable = node.nodes.findLastIndex(d => d.type === 'table');\n\n // if the last table in the document is of type table, we need to do the change\n if (indexOfLastTable === indexToNotHaveTableOn) {\n shouldAddTextAfterNode = true;\n }\n\n if (!shouldAddTextAfterNode) {\n return;\n }\n\n const tableNode = node.nodes.get(indexOfLastTable);\n\n return change => {\n if (shouldAddTextAfterNode) {\n const tableJSON = tableNode.toJSON();\n\n // we remove the table node because otherwise we can't add the empty block after it\n // we need a block that contains text in order to do it\n change.removeNodeByKey(tableNode.key);\n\n const newBlock = Block.create({\n object: 'block',\n type: 'div'\n });\n\n // we add an empty block but that it's going to be normalized\n // because it will add the empty text to it like it should\n change.insertBlock(newBlock);\n\n change.withoutNormalization(() => {\n // we do these changes without normalization\n\n // we get the text previous to the new block added\n const prevText = change.value.document.getPreviousText(newBlock.key);\n\n if (prevText) {\n // we move focus to the previous text\n change\n .moveFocusTo(prevText.key, prevText.text.length)\n .moveAnchorTo(prevText.key, prevText.text.length);\n }\n\n // we insert the table block between the first block with text and the last block with text\n change.insertBlock({\n ...tableJSON,\n data: {\n ...tableJSON.data,\n newTable: true\n }\n });\n\n moveFocusToBeginningOfTable(change);\n });\n }\n };\n };\n\n core.renderNode = Node;\n\n return core;\n};\n\nexport const parseStyleString = s => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const reactAttributes = o => toStyleObject(o, { camelize: true, addUnits: false });\n\nconst attributesToMap = el => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst dataToAttributes = data => {\n if (!data || !data.get) {\n return {};\n }\n\n return data.reduce((acc, v, name) => {\n if (v) {\n acc[convert(name)] = v;\n }\n return acc;\n }, {});\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];\n\nconst cellAttributes = ['colspan', 'rowspan', 'class', 'style'];\n\nexport const serialization = {\n deserialize(el, next) {\n const tag = el.tagName.toLowerCase();\n\n switch (tag) {\n case 'table': {\n const children =\n el.children.length === 1 && el.children[0].tagName.toLowerCase() === 'tbody'\n ? el.children[0].children\n : el.children;\n const c = Array.from(children);\n\n return {\n object: 'block',\n type: 'table',\n nodes: next(c),\n data: attributes.reduce(attributesToMap(el), {})\n };\n }\n case 'th': {\n return {\n object: 'block',\n type: 'table_cell',\n nodes: next(el.childNodes),\n data: cellAttributes.reduce(attributesToMap(el), { header: true })\n };\n }\n case 'tr': {\n return {\n object: 'block',\n type: 'table_row',\n nodes: next(Array.from(el.children))\n };\n }\n case 'td': {\n return {\n object: 'block',\n type: 'table_cell',\n nodes: next(Array.from(el.childNodes)),\n data: cellAttributes.reduce(attributesToMap(el), { header: false })\n };\n }\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') {\n return;\n }\n\n switch (object.type) {\n case 'table': {\n const attributes = dataToAttributes(object.data);\n return (\n <table {...attributes}>\n <tbody>{children}</tbody>\n </table>\n );\n }\n case 'table_row': {\n return <tr>{children}</tr>;\n }\n case 'table_cell': {\n const attributes = dataToAttributes(object.data);\n delete attributes.header;\n if (object.data.get('header')) {\n return <th {...attributes}>{children}</th>;\n } else {\n return <td {...attributes}>{children}</td>;\n }\n }\n }\n }\n};\n"],"file":"index.js"}
|
|
@@ -89,7 +89,8 @@ function (_React$Component) {
|
|
|
89
89
|
disableUnderline = _this$props.disableUnderline,
|
|
90
90
|
pluginProps = _this$props.pluginProps,
|
|
91
91
|
toolbarOpts = _this$props.toolbarOpts,
|
|
92
|
-
onDataChange = _this$props.onDataChange
|
|
92
|
+
onDataChange = _this$props.onDataChange,
|
|
93
|
+
toolbarRef = _this$props.toolbarRef;
|
|
93
94
|
var inFocus = value.isFocused || focusedNode !== null && focusedNode !== undefined;
|
|
94
95
|
var holderNames = (0, _classnames["default"])(classes.editorHolder, inFocus && classes.editorInFocus, readOnly && classes.readOnly, disableUnderline && classes.disabledUnderline);
|
|
95
96
|
var clonedChildren = children;
|
|
@@ -118,6 +119,7 @@ function (_React$Component) {
|
|
|
118
119
|
onChange: onChange,
|
|
119
120
|
onDone: onDone,
|
|
120
121
|
onDataChange: onDataChange,
|
|
122
|
+
toolbarRef: toolbarRef,
|
|
121
123
|
pluginProps: pluginProps,
|
|
122
124
|
toolbarOpts: toolbarOpts
|
|
123
125
|
}));
|
|
@@ -136,6 +138,7 @@ _defineProperty(EditorAndToolbar, "propTypes", {
|
|
|
136
138
|
onChange: _propTypes["default"].func.isRequired,
|
|
137
139
|
onDone: _propTypes["default"].func.isRequired,
|
|
138
140
|
onDataChange: _propTypes["default"].func,
|
|
141
|
+
toolbarRef: _propTypes["default"].func,
|
|
139
142
|
focusedNode: _slatePropTypes["default"].node,
|
|
140
143
|
readOnly: _propTypes["default"].bool,
|
|
141
144
|
disableUnderline: _propTypes["default"].bool,
|