react-survey-builder 1.0.17 → 1.0.18
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/README.md +10 -10
- package/dist/186.index.js +1 -1
- package/dist/index.js +1 -1
- package/lib/language-provider/locales/en-us.json +1 -0
- package/lib/sortable-form-elements.js +2 -0
- package/lib/survey-elements/component-label.js +3 -0
- package/lib/survey-elements/index.js +143 -114
- package/lib/survey-elements/myxss.js +68 -1
- package/lib/survey-elements-edit.js +75 -8
- package/lib/toolbar.js +17 -2
- package/package.json +1 -1
- package/types/index.d.ts +3 -0
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
5
5
|
value: true
|
6
6
|
});
|
7
|
-
exports["default"] = void 0;
|
7
|
+
exports.myContentXSS = exports["default"] = void 0;
|
8
8
|
var _xss = _interopRequireDefault(require("xss"));
|
9
9
|
var myxss = new _xss["default"].FilterXSS({
|
10
10
|
whiteList: {
|
@@ -26,4 +26,71 @@ var myxss = new _xss["default"].FilterXSS({
|
|
26
26
|
ins: []
|
27
27
|
}
|
28
28
|
});
|
29
|
+
var myContentXSS = exports.myContentXSS = new _xss["default"].FilterXSS({
|
30
|
+
whiteList: {
|
31
|
+
a: ['href', 'title', 'target', 'style', 'class'],
|
32
|
+
abbr: ["title"],
|
33
|
+
address: [],
|
34
|
+
area: ["shape", "coords", "href", "alt"],
|
35
|
+
article: [],
|
36
|
+
aside: [],
|
37
|
+
b: [],
|
38
|
+
big: [],
|
39
|
+
blockquote: ["cite"],
|
40
|
+
br: [],
|
41
|
+
caption: [],
|
42
|
+
center: [],
|
43
|
+
cite: [],
|
44
|
+
code: [],
|
45
|
+
col: ["align", "valign", "span", "width"],
|
46
|
+
colgroup: ["align", "valign", "span", "width"],
|
47
|
+
dd: [],
|
48
|
+
del: ["datetime"],
|
49
|
+
details: ["open"],
|
50
|
+
div: ['style', 'class'],
|
51
|
+
dl: ['style', 'class'],
|
52
|
+
dt: ['style', 'class'],
|
53
|
+
em: [],
|
54
|
+
figcaption: [],
|
55
|
+
figure: [],
|
56
|
+
font: ["color", "size", "face"],
|
57
|
+
footer: [],
|
58
|
+
h1: ['style', 'class'],
|
59
|
+
h2: ['style', 'class'],
|
60
|
+
h3: ['style', 'class'],
|
61
|
+
h4: ['style', 'class'],
|
62
|
+
h5: ['style', 'class'],
|
63
|
+
h6: ['style', 'class'],
|
64
|
+
header: [],
|
65
|
+
hr: [],
|
66
|
+
i: [],
|
67
|
+
img: ["src", "alt", "title", "width", "height", "loading"],
|
68
|
+
ins: ["datetime"],
|
69
|
+
li: ['style', 'class'],
|
70
|
+
mark: [],
|
71
|
+
nav: [],
|
72
|
+
ol: ['style', 'class'],
|
73
|
+
p: ['style', 'class'],
|
74
|
+
pre: [],
|
75
|
+
s: [],
|
76
|
+
section: [],
|
77
|
+
small: [],
|
78
|
+
span: ['style', 'class'],
|
79
|
+
strike: [],
|
80
|
+
strong: [],
|
81
|
+
sub: [],
|
82
|
+
summary: [],
|
83
|
+
sup: [],
|
84
|
+
table: ["width", "border", "align", "valign"],
|
85
|
+
tbody: ["align", "valign"],
|
86
|
+
td: ["width", "rowspan", "colspan", "align", "valign"],
|
87
|
+
tfoot: ["align", "valign"],
|
88
|
+
th: ["width", "rowspan", "colspan", "align", "valign"],
|
89
|
+
thead: ["align", "valign"],
|
90
|
+
tr: ["rowspan", "align", "valign"],
|
91
|
+
tt: [],
|
92
|
+
u: [],
|
93
|
+
ul: ['style', 'class']
|
94
|
+
}
|
95
|
+
});
|
29
96
|
var _default = exports["default"] = myxss;
|
@@ -23,7 +23,23 @@ var _fa = require("react-icons/fa");
|
|
23
23
|
var _reactBootstrap = require("react-bootstrap");
|
24
24
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
25
25
|
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; } }
|
26
|
-
var
|
26
|
+
var bodyToolbar = {
|
27
|
+
options: ['inline', 'blockType', 'list', 'textAlign', 'fontSize', 'link', 'remove', 'history'],
|
28
|
+
inline: {
|
29
|
+
inDropdown: false,
|
30
|
+
className: undefined,
|
31
|
+
options: ['bold', 'italic', 'underline', 'strikethrough', 'monospace', 'superscript', 'subscript']
|
32
|
+
}
|
33
|
+
};
|
34
|
+
var headerToolbar = {
|
35
|
+
options: ['inline', 'list', 'textAlign', 'fontSize', 'link', 'history'],
|
36
|
+
inline: {
|
37
|
+
inDropdown: false,
|
38
|
+
className: undefined,
|
39
|
+
options: ['bold', 'italic', 'underline', 'superscript', 'subscript']
|
40
|
+
}
|
41
|
+
};
|
42
|
+
var labelToolbar = {
|
27
43
|
options: ['inline', 'list', 'textAlign', 'fontSize', 'link', 'history'],
|
28
44
|
inline: {
|
29
45
|
inDropdown: false,
|
@@ -71,7 +87,8 @@ var SurveyElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Comp
|
|
71
87
|
key: "onEditorStateChange",
|
72
88
|
value: function onEditorStateChange(index, property, editorContent) {
|
73
89
|
// const html = draftToHtml(convertToRaw(editorContent.getCurrentContent())).replace(/<p>/g, '<div>').replace(/<\/p>/g, '</div>');
|
74
|
-
|
90
|
+
// const html = draftToHtml(convertToRaw(editorContent.getCurrentContent())).replace(/<p>/g, '').replace(/<\/p>/g, '').replace(/ /g, ' ').replace(/(?:\r\n|\r|\n)/g, '');
|
91
|
+
var html = (0, _draftjsToHtml["default"])((0, _draftJs.convertToRaw)(editorContent.getCurrentContent())).replace(/ /g, ' ').replace(/(?:\r\n|\r|\n)/g, '');
|
75
92
|
var thisElement = this.state.element;
|
76
93
|
thisElement[property] = html;
|
77
94
|
this.setState({
|
@@ -143,12 +160,15 @@ var SurveyElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Comp
|
|
143
160
|
var thisCheckedCenter = this.props.element.hasOwnProperty('center') ? this.props.element.center : false;
|
144
161
|
var thisCheckedPageBreak = this.props.element.hasOwnProperty('pageBreakBefore') ? this.props.element.pageBreakBefore : false;
|
145
162
|
var thisCheckedAlternateForm = this.props.element.hasOwnProperty('alternateForm') ? this.props.element.alternateForm : false;
|
163
|
+
var thisCheckedHideLabel = this.props.element.hasOwnProperty('hideLabel') ? this.props.element.hideLabel : false;
|
146
164
|
var _this$props$element = this.props.element,
|
147
165
|
canHavePageBreakBefore = _this$props$element.canHavePageBreakBefore,
|
148
166
|
canHaveAlternateForm = _this$props$element.canHaveAlternateForm,
|
149
167
|
canHaveDisplayHorizontal = _this$props$element.canHaveDisplayHorizontal,
|
150
168
|
canHaveOptionCorrect = _this$props$element.canHaveOptionCorrect,
|
151
|
-
canHaveOptionValue = _this$props$element.canHaveOptionValue
|
169
|
+
canHaveOptionValue = _this$props$element.canHaveOptionValue,
|
170
|
+
_this$props$element$c = _this$props$element.canHideLabel,
|
171
|
+
canHideLabel = _this$props$element$c === void 0 ? false : _this$props$element$c;
|
152
172
|
var canHaveImageSize = this.state.element.element === 'Image' || this.state.element.element === 'Camera';
|
153
173
|
var thisFiles = this.props.files.length ? this.props.files : [];
|
154
174
|
if (thisFiles.length < 1 || thisFiles.length > 0 && thisFiles[0].id !== '') {
|
@@ -175,18 +195,54 @@ var SurveyElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Comp
|
|
175
195
|
}, this.props.element.text), /*#__PURE__*/_react["default"].createElement(_fa.FaTimes, {
|
176
196
|
className: "float-end dismiss-edit",
|
177
197
|
onClick: this.props.manualEditModeOff
|
178
|
-
})), this.props.element.hasOwnProperty('content') && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
198
|
+
})), this.props.element.hasOwnProperty('content') && this.state.element.element === 'Header' && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
179
199
|
className: "form-group mb-5"
|
180
200
|
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
181
201
|
className: "fw-bold"
|
182
202
|
}, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
|
183
203
|
id: "text-to-display"
|
184
204
|
}), ":"), /*#__PURE__*/_react["default"].createElement(_reactDraftWysiwyg.Editor, {
|
185
|
-
toolbar:
|
205
|
+
toolbar: headerToolbar,
|
206
|
+
defaultEditorState: editorState,
|
207
|
+
onBlur: this.updateElement.bind(this),
|
208
|
+
onEditorStateChange: this.onEditorStateChange.bind(this, 0, 'content'),
|
209
|
+
stripPastedStyles: true
|
210
|
+
})), this.props.element.hasOwnProperty('content') && this.state.element.element === 'Label' && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
211
|
+
className: "form-group mb-5"
|
212
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
213
|
+
className: "fw-bold"
|
214
|
+
}, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
|
215
|
+
id: "text-to-display"
|
216
|
+
}), ":"), /*#__PURE__*/_react["default"].createElement(_reactDraftWysiwyg.Editor, {
|
217
|
+
toolbar: labelToolbar,
|
186
218
|
defaultEditorState: editorState,
|
187
219
|
onBlur: this.updateElement.bind(this),
|
188
220
|
onEditorStateChange: this.onEditorStateChange.bind(this, 0, 'content'),
|
189
221
|
stripPastedStyles: true
|
222
|
+
})), this.props.element.hasOwnProperty('content') && this.state.element.element === 'Paragraph' && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
223
|
+
className: "form-group mb-5"
|
224
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
225
|
+
className: "fw-bold"
|
226
|
+
}, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
|
227
|
+
id: "text-to-display"
|
228
|
+
}), ":"), /*#__PURE__*/_react["default"].createElement(_reactDraftWysiwyg.Editor, {
|
229
|
+
toolbar: labelToolbar,
|
230
|
+
defaultEditorState: editorState,
|
231
|
+
onBlur: this.updateElement.bind(this),
|
232
|
+
onEditorStateChange: this.onEditorStateChange.bind(this, 0, 'content'),
|
233
|
+
stripPastedStyles: true
|
234
|
+
})), this.props.element.hasOwnProperty('content') && this.state.element.element === 'ContentBody' && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
235
|
+
className: "form-group mb-5"
|
236
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
237
|
+
className: "fw-bold"
|
238
|
+
}, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
|
239
|
+
id: "text-to-display"
|
240
|
+
}), ":"), /*#__PURE__*/_react["default"].createElement(_reactDraftWysiwyg.Editor, {
|
241
|
+
toolbar: bodyToolbar,
|
242
|
+
defaultEditorState: editorState,
|
243
|
+
onBlur: this.updateElement.bind(this),
|
244
|
+
onEditorStateChange: this.onEditorStateChange.bind(this, 0, 'content')
|
245
|
+
//stripPastedStyles={true}
|
190
246
|
})), this.props.element.hasOwnProperty('filePath') && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
191
247
|
className: "form-group mb-5"
|
192
248
|
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
@@ -225,7 +281,7 @@ var SurveyElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Comp
|
|
225
281
|
}, /*#__PURE__*/_react["default"].createElement(_IntlMessages["default"], {
|
226
282
|
id: "display-label"
|
227
283
|
}), ":"), /*#__PURE__*/_react["default"].createElement(_reactDraftWysiwyg.Editor, {
|
228
|
-
toolbar:
|
284
|
+
toolbar: labelToolbar,
|
229
285
|
defaultEditorState: editorState,
|
230
286
|
onBlur: this.updateElement.bind(this),
|
231
287
|
onEditorStateChange: this.onEditorStateChange.bind(this, 0, 'label'),
|
@@ -499,7 +555,7 @@ var SurveyElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Comp
|
|
499
555
|
defaultValue: this.props.element.defaultValue,
|
500
556
|
onBlur: this.updateElement.bind(this),
|
501
557
|
onChange: this.editElementProp.bind(this, 'defaultValue', 'value')
|
502
|
-
}))), this.props.element.hasOwnProperty('static') && this.props.element["static"] && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
558
|
+
}))), this.props.element.hasOwnProperty('static') && this.props.element["static"] && this.props.element.hasOwnProperty('bold') && this.props.element.hasOwnProperty('italic') && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
503
559
|
className: "form-group mb-5"
|
504
560
|
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
505
561
|
className: "fw-bold"
|
@@ -567,7 +623,18 @@ var SurveyElementsEdit = exports["default"] = /*#__PURE__*/function (_React$Comp
|
|
567
623
|
value: "ABOVE"
|
568
624
|
}, "Above Form Field"), /*#__PURE__*/_react["default"].createElement("option", {
|
569
625
|
value: "FLOATING"
|
570
|
-
}, "Floating Inside Form Field"))),
|
626
|
+
}, "Floating Inside Form Field"))), canHideLabel && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
627
|
+
className: "form-group mb-5"
|
628
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
629
|
+
className: "fw-bold"
|
630
|
+
}, "Hide Label:"), /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Check, {
|
631
|
+
id: "hide-label",
|
632
|
+
label: "Hide Label",
|
633
|
+
type: "checkbox",
|
634
|
+
checked: thisCheckedHideLabel,
|
635
|
+
value: true,
|
636
|
+
onChange: this.editElementProp.bind(this, 'hideLabel', 'checked')
|
637
|
+
})), this.props.element.showHelp && /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Group, {
|
571
638
|
className: "form-group mb-5"
|
572
639
|
}, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form.Label, {
|
573
640
|
className: "fw-bold",
|
package/lib/toolbar.js
CHANGED
@@ -20,6 +20,7 @@ var _UUID = _interopRequireDefault(require("./UUID"));
|
|
20
20
|
var _store = _interopRequireDefault(require("./stores/store"));
|
21
21
|
var _functions = require("./functions");
|
22
22
|
var _fa = require("react-icons/fa");
|
23
|
+
var _pi = require("react-icons/pi");
|
23
24
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
24
25
|
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; } }
|
25
26
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
@@ -141,6 +142,16 @@ var Toolbar = /*#__PURE__*/function (_React$Component) {
|
|
141
142
|
content: intl.formatMessage({
|
142
143
|
id: 'place-holder-text'
|
143
144
|
})
|
145
|
+
}, {
|
146
|
+
key: 'ContentBody',
|
147
|
+
name: intl.formatMessage({
|
148
|
+
id: 'content-body'
|
149
|
+
}),
|
150
|
+
"static": true,
|
151
|
+
icon: _pi.PiFileHtml,
|
152
|
+
content: intl.formatMessage({
|
153
|
+
id: 'place-holder-text'
|
154
|
+
})
|
144
155
|
}, {
|
145
156
|
key: 'LineBreak',
|
146
157
|
name: intl.formatMessage({
|
@@ -219,7 +230,9 @@ var Toolbar = /*#__PURE__*/function (_React$Component) {
|
|
219
230
|
showHelp: true,
|
220
231
|
boxLabel: 'Agree To Rules & Regs',
|
221
232
|
hideRequiredAlert: true,
|
222
|
-
answerType: 'BOOLEAN'
|
233
|
+
answerType: 'BOOLEAN',
|
234
|
+
canHideLabel: true,
|
235
|
+
showLabel: false
|
223
236
|
}, {
|
224
237
|
key: 'RadioButtons',
|
225
238
|
canHaveAnswer: true,
|
@@ -577,7 +590,7 @@ var Toolbar = /*#__PURE__*/function (_React$Component) {
|
|
577
590
|
elementOptions.component = item.component || null;
|
578
591
|
elementOptions.customOptions = item.customOptions || [];
|
579
592
|
}
|
580
|
-
if (item["static"]) {
|
593
|
+
if (item["static"] && ['Header', 'Paragraph', 'Label'].indexOf(element) !== -1) {
|
581
594
|
elementOptions.bold = false;
|
582
595
|
elementOptions.italic = false;
|
583
596
|
}
|
@@ -588,6 +601,8 @@ var Toolbar = /*#__PURE__*/function (_React$Component) {
|
|
588
601
|
elementOptions.showHelp = item.showHelp;
|
589
602
|
elementOptions.help = item.help;
|
590
603
|
elementOptions.hideRequiredAlert = item.hideRequiredAlert;
|
604
|
+
elementOptions.canHideLabel = item.canHideLabel;
|
605
|
+
elementOptions.hideLabel = item.hideLabel;
|
591
606
|
if (item.canHaveAnswer) {
|
592
607
|
elementOptions.canHaveAnswer = item.canHaveAnswer;
|
593
608
|
}
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
@@ -7,6 +7,7 @@ type BaseElement = {
|
|
7
7
|
| "Header Text"
|
8
8
|
| "Label"
|
9
9
|
| "Paragraph"
|
10
|
+
| "Static Content"
|
10
11
|
| "Line Break"
|
11
12
|
| "Dropdown"
|
12
13
|
| "Tags"
|
@@ -30,6 +31,8 @@ type BaseElement = {
|
|
30
31
|
showDescription?: boolean;
|
31
32
|
showLabelLocationPicker?: boolean;
|
32
33
|
showHelp?: boolean;
|
34
|
+
hideLabel?: boolean;
|
35
|
+
canHideLabel: boolean;
|
33
36
|
hideRequiredAlert?: boolean;
|
34
37
|
required: boolean;
|
35
38
|
canHaveAlternateForm: boolean;
|