@elliemae/ds-wysiwygeditor 3.0.0-next.76 → 3.0.0-next.79
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/dist/cjs/components/DSWYSIWYGEditorImpl.js +4 -1
- package/dist/cjs/components/DSWYSIWYGEditorImpl.js.map +2 -2
- package/dist/cjs/components/customFields.js +16 -16
- package/dist/cjs/components/customFields.js.map +1 -1
- package/dist/cjs/quillOverrides/Image.js +66 -0
- package/dist/cjs/quillOverrides/Image.js.map +7 -0
- package/dist/esm/components/DSWYSIWYGEditorImpl.js +4 -1
- package/dist/esm/components/DSWYSIWYGEditorImpl.js.map +2 -2
- package/dist/esm/components/customFields.js +16 -16
- package/dist/esm/components/customFields.js.map +1 -1
- package/dist/esm/quillOverrides/Image.js +44 -0
- package/dist/esm/quillOverrides/Image.js.map +7 -0
- package/package.json +1 -1
|
@@ -61,6 +61,7 @@ var import_InsertFieldModal = __toESM(require("./InsertFieldModal"));
|
|
|
61
61
|
var import_CustomToolbar = require("./CustomToolbar");
|
|
62
62
|
var import_IndentStyle = __toESM(require("../quillOverrides/IndentStyle"));
|
|
63
63
|
var import_LinkFormat = __toESM(require("../quillOverrides/LinkFormat"));
|
|
64
|
+
var import_Image = __toESM(require("../quillOverrides/Image"));
|
|
64
65
|
var import_utils = require("../utils");
|
|
65
66
|
var import_clipboardLinkWithTagMatcher = require("../quillMatchers/clipboardLinkWithTagMatcher");
|
|
66
67
|
import_react_quill.Quill.register("modules/blotFormatter", import_quill_blot_formatter.default);
|
|
@@ -89,6 +90,7 @@ import_react_quill.Quill.register(AlignStyle, true);
|
|
|
89
90
|
import_react_quill.Quill.register(import_IndentStyle.default, true);
|
|
90
91
|
import_react_quill.Quill.register(FontStyle, true);
|
|
91
92
|
import_react_quill.Quill.register(SizeStyle, true);
|
|
93
|
+
import_react_quill.Quill.register(import_Image.default, true);
|
|
92
94
|
class DSWYSIWYGEditorImpl extends import_react.default.PureComponent {
|
|
93
95
|
constructor(props) {
|
|
94
96
|
super(props);
|
|
@@ -104,6 +106,7 @@ class DSWYSIWYGEditorImpl extends import_react.default.PureComponent {
|
|
|
104
106
|
}, this.props.quillModules);
|
|
105
107
|
this.getEditor = () => this.quill?.getEditor();
|
|
106
108
|
this.onChangeQuill = (html, delta, source, editor) => {
|
|
109
|
+
console.log("quill detected a change");
|
|
107
110
|
const { showRawHTML, onChange } = this.props;
|
|
108
111
|
if (!showRawHTML)
|
|
109
112
|
onChange(html, delta, source, editor);
|
|
@@ -229,7 +232,7 @@ class DSWYSIWYGEditorImpl extends import_react.default.PureComponent {
|
|
|
229
232
|
minHeight: "200px"
|
|
230
233
|
},
|
|
231
234
|
onChange: this.onChangeTextArea,
|
|
232
|
-
value: (0, import_utils.formatHTML)(
|
|
235
|
+
value: (0, import_utils.formatHTML)(value)
|
|
233
236
|
}), imagesData && imagesData.length && /* @__PURE__ */ import_react.default.createElement(import_ImageLibraryModal.default, {
|
|
234
237
|
imagesData,
|
|
235
238
|
isOpen: isImageModalOpen,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/DSWYSIWYGEditorImpl.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable react/prop-types */\n/* eslint-disable max-lines */\nimport React from 'react';\nimport ReactQuill, { Quill } from 'react-quill';\nimport BlotFormatter from 'quill-blot-formatter';\n\nimport ImageLibraryModal from './ImageLibraryModal';\nimport InsertFieldModal from './InsertFieldModal';\nimport { CustomToolbar } from './CustomToolbar';\nimport IndentStyle from '../quillOverrides/IndentStyle';\nimport LinkFormat from '../quillOverrides/LinkFormat';\nimport { formatHTML } from '../utils';\nimport { clipboardLinkWithTagMatcher } from '../quillMatchers/clipboardLinkWithTagMatcher';\n\nQuill.register('modules/blotFormatter', BlotFormatter);\n\n// Fix block styled formats ----------------\nconst AlignStyle = Quill.import('attributors/style/align');\nconst FontStyle = Quill.import('attributors/style/font');\nFontStyle.whitelist = [\n // allow ONLY these fonts and the default\n 'serif',\n 'monospace',\n 'arial',\n 'comic-sans',\n 'courier-new',\n 'georgia',\n 'helvetica',\n 'lucida',\n];\nconst SizeStyle = Quill.import('attributors/style/size');\nSizeStyle.whitelist = [\n // allow ONLY these sizes and the default\n 'x-small',\n 'large',\n 'x-large',\n];\n\n// Fix Doc Viewer p tags extra margin issue ---------\nconst Block = Quill.import('blots/block');\nBlock.tagName = 'p';\nQuill.register(Block);\n\nQuill.register(AlignStyle, true);\nQuill.register(IndentStyle, true);\nQuill.register(FontStyle, true);\nQuill.register(SizeStyle, true);\n// -----------------------------------------\n\nexport default class DSWYSIWYGEditorImpl extends React.PureComponent {\n quillModules = {\n toolbar: {\n container: this.props.toolbarContainer ? `#${this.props.toolbarContainer}` : '#toolbar',\n handlers: {\n ...this.props.toolbarHandlers,\n },\n },\n clipboard: {\n // toggle to add extra line breaks when pasting HTML:\n matchVisual: false,\n },\n blotFormatter: {\n // options... https://github.com/Fandom-OSS/quill-blot-formatter\n },\n ...this.props.quillModules,\n };\n\n constructor(props) {\n super(props);\n Quill.register(LinkFormat, true);\n if (props.quillOverrides.length) {\n props.quillOverrides.map((override) => Quill.register(override, true));\n }\n this.state = {\n isImageModalOpen: false,\n isFieldModalOpen: false,\n };\n const { toolbar } = this.quillModules;\n if (props.imagesData) {\n toolbar.handlers.image = (value) => {\n const { imagesData, handleImageClick } = this.props;\n if (!imagesData.length) {\n return;\n }\n this.setState({ isImageModalOpen: !!value });\n handleImageClick(value);\n };\n }\n if (props.customFields) {\n toolbar.handlers.customFields = (value) => {\n const { customFields, handleCustomFieldClick } = this.props;\n if (!customFields.length) {\n return;\n }\n this.setState({ isFieldModalOpen: !!value });\n handleCustomFieldClick(value);\n };\n }\n }\n\n componentDidMount() {\n // this.quill doesn't exist untill the full call-stack execute\n // we need to \"setTimeout\" so this componentDidMount work as expected\n setTimeout(() => {\n const quillDomRef = this.quill;\n this.props.getQuillRef(quillDomRef);\n\n const editor = quillDomRef?.getEditor();\n // https://github.com/quilljs/quill/issues/2677\n editor?.clipboard.addMatcher('a', clipboardLinkWithTagMatcher);\n });\n }\n\n getEditor = () => this.quill?.getEditor();\n\n // eslint-disable-next-line max-params\n onChangeQuill = (html, delta, source, editor) => {\n const { showRawHTML, onChange } = this.props;\n if (!showRawHTML) onChange(html, delta, source, editor);\n };\n\n onChangeTextArea = (e) => {\n const { showRawHTML, onChange } = this.props;\n if (showRawHTML) onChange(e.target.value);\n };\n\n onInserFieldConfirm = (fieldCode) => {\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertText(range.index, fieldCode);\n };\n\n onImageConfirm = (image) => {\n if (!image) {\n return;\n }\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertEmbed(range.index, 'image', image.url);\n };\n\n onFieldModalClose = () => {\n this.setState({ isFieldModalOpen: false });\n };\n\n onImageModalClose = () => {\n this.setState({ isImageModalOpen: false });\n };\n\n quillRef = (ref) => {\n this.quill = ref;\n };\n\n render() {\n const { isFieldModalOpen, isImageModalOpen } = this.state;\n const {\n containerProps = {},\n customFields,\n imagesData,\n customToolbar,\n handleImageClick,\n handleCustomFieldClick,\n height,\n value,\n showRawHTML,\n onShowHTML,\n onChange,\n hideItems,\n ...editorProps\n } = this.props;\n\n return (\n <div\n // data-testid=\"wysiwyg-text-container\"\n {...containerProps}\n className={`quill-wysiwyg-editor ${showRawHTML ? 'show-raw' : ''}`}\n >\n {customToolbar || (\n <CustomToolbar\n customFields={customFields}\n onShowHTML={onShowHTML}\n hideItems={hideItems}\n userProps={this.props}\n />\n )}\n <ReactQuill\n ref={this.quillRef}\n modules={this.quillModules}\n onChange={this.onChangeQuill}\n value={value}\n style={{\n height,\n borderBottom: '1px solid #ccc',\n }}\n {...editorProps}\n id=\"wysiwyg-text-container\"\n />\n <textarea\n className=\"raw-editor ql-container ql-snow ql-editor\"\n style={{\n width: '100%',\n resize: 'none',\n height,\n minHeight: '200px',\n }}\n onChange={this.onChangeTextArea}\n value={formatHTML(
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEvB,mBAAkB;AAClB,yBAAkC;AAClC,kCAA0B;AAE1B,+BAA8B;AAC9B,8BAA6B;AAC7B,2BAA8B;AAC9B,yBAAwB;AACxB,wBAAuB;AACvB,mBAA2B;AAC3B,yCAA4C;AAE5C,yBAAM,SAAS,yBAAyB,mCAAa;AAGrD,MAAM,aAAa,yBAAM,OAAO,yBAAyB;AACzD,MAAM,YAAY,yBAAM,OAAO,wBAAwB;AACvD,UAAU,YAAY;AAAA,EAEpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,MAAM,YAAY,yBAAM,OAAO,wBAAwB;AACvD,UAAU,YAAY;AAAA,EAEpB;AAAA,EACA;AAAA,EACA;AACF;AAGA,MAAM,QAAQ,yBAAM,OAAO,aAAa;AACxC,MAAM,UAAU;AAChB,yBAAM,SAAS,KAAK;AAEpB,yBAAM,SAAS,YAAY,IAAI;AAC/B,yBAAM,SAAS,4BAAa,IAAI;AAChC,yBAAM,SAAS,WAAW,IAAI;AAC9B,yBAAM,SAAS,WAAW,IAAI;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable react/prop-types */\n/* eslint-disable max-lines */\nimport React from 'react';\nimport ReactQuill, { Quill } from 'react-quill';\nimport BlotFormatter from 'quill-blot-formatter';\n\nimport ImageLibraryModal from './ImageLibraryModal';\nimport InsertFieldModal from './InsertFieldModal';\nimport { CustomToolbar } from './CustomToolbar';\nimport IndentStyle from '../quillOverrides/IndentStyle';\nimport LinkFormat from '../quillOverrides/LinkFormat';\nimport Image from '../quillOverrides/Image';\nimport { formatHTML } from '../utils';\nimport { clipboardLinkWithTagMatcher } from '../quillMatchers/clipboardLinkWithTagMatcher';\n\nQuill.register('modules/blotFormatter', BlotFormatter);\n\n// Fix block styled formats ----------------\nconst AlignStyle = Quill.import('attributors/style/align');\nconst FontStyle = Quill.import('attributors/style/font');\nFontStyle.whitelist = [\n // allow ONLY these fonts and the default\n 'serif',\n 'monospace',\n 'arial',\n 'comic-sans',\n 'courier-new',\n 'georgia',\n 'helvetica',\n 'lucida',\n];\nconst SizeStyle = Quill.import('attributors/style/size');\nSizeStyle.whitelist = [\n // allow ONLY these sizes and the default\n 'x-small',\n 'large',\n 'x-large',\n];\n\n// Fix Doc Viewer p tags extra margin issue ---------\nconst Block = Quill.import('blots/block');\nBlock.tagName = 'p';\nQuill.register(Block);\n\nQuill.register(AlignStyle, true);\nQuill.register(IndentStyle, true);\nQuill.register(FontStyle, true);\nQuill.register(SizeStyle, true);\n// -----------------------------------------\nQuill.register(Image, true);\n\nexport default class DSWYSIWYGEditorImpl extends React.PureComponent {\n quillModules = {\n toolbar: {\n container: this.props.toolbarContainer ? `#${this.props.toolbarContainer}` : '#toolbar',\n handlers: {\n ...this.props.toolbarHandlers,\n },\n },\n clipboard: {\n // toggle to add extra line breaks when pasting HTML:\n matchVisual: false,\n },\n blotFormatter: {\n // options... https://github.com/Fandom-OSS/quill-blot-formatter\n },\n ...this.props.quillModules,\n };\n\n constructor(props) {\n super(props);\n Quill.register(LinkFormat, true);\n if (props.quillOverrides.length) {\n props.quillOverrides.map((override) => Quill.register(override, true));\n }\n this.state = {\n isImageModalOpen: false,\n isFieldModalOpen: false,\n };\n const { toolbar } = this.quillModules;\n if (props.imagesData) {\n toolbar.handlers.image = (value) => {\n const { imagesData, handleImageClick } = this.props;\n if (!imagesData.length) {\n return;\n }\n this.setState({ isImageModalOpen: !!value });\n handleImageClick(value);\n };\n }\n if (props.customFields) {\n toolbar.handlers.customFields = (value) => {\n const { customFields, handleCustomFieldClick } = this.props;\n if (!customFields.length) {\n return;\n }\n this.setState({ isFieldModalOpen: !!value });\n handleCustomFieldClick(value);\n };\n }\n }\n\n componentDidMount() {\n // this.quill doesn't exist untill the full call-stack execute\n // we need to \"setTimeout\" so this componentDidMount work as expected\n setTimeout(() => {\n const quillDomRef = this.quill;\n this.props.getQuillRef(quillDomRef);\n\n const editor = quillDomRef?.getEditor();\n // https://github.com/quilljs/quill/issues/2677\n editor?.clipboard.addMatcher('a', clipboardLinkWithTagMatcher);\n });\n }\n\n getEditor = () => this.quill?.getEditor();\n\n // eslint-disable-next-line max-params\n onChangeQuill = (html, delta, source, editor) => {\n console.log('quill detected a change')\n const { showRawHTML, onChange } = this.props;\n if (!showRawHTML) onChange(html, delta, source, editor);\n };\n\n onChangeTextArea = (e) => {\n const { showRawHTML, onChange } = this.props;\n if (showRawHTML) onChange(e.target.value);\n };\n\n onInserFieldConfirm = (fieldCode) => {\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertText(range.index, fieldCode);\n };\n\n onImageConfirm = (image) => {\n if (!image) {\n return;\n }\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertEmbed(range.index, 'image', image.url);\n };\n\n onFieldModalClose = () => {\n this.setState({ isFieldModalOpen: false });\n };\n\n onImageModalClose = () => {\n this.setState({ isImageModalOpen: false });\n };\n\n quillRef = (ref) => {\n this.quill = ref;\n };\n\n render() {\n const { isFieldModalOpen, isImageModalOpen } = this.state;\n const {\n containerProps = {},\n customFields,\n imagesData,\n customToolbar,\n handleImageClick,\n handleCustomFieldClick,\n height,\n value,\n showRawHTML,\n onShowHTML,\n onChange,\n hideItems,\n ...editorProps\n } = this.props;\n\n return (\n <div\n // data-testid=\"wysiwyg-text-container\"\n {...containerProps}\n className={`quill-wysiwyg-editor ${showRawHTML ? 'show-raw' : ''}`}\n >\n {customToolbar || (\n <CustomToolbar\n customFields={customFields}\n onShowHTML={onShowHTML}\n hideItems={hideItems}\n userProps={this.props}\n />\n )}\n <ReactQuill\n ref={this.quillRef}\n modules={this.quillModules}\n onChange={this.onChangeQuill}\n value={value}\n style={{\n height,\n borderBottom: '1px solid #ccc',\n }}\n {...editorProps}\n id=\"wysiwyg-text-container\"\n />\n <textarea\n className=\"raw-editor ql-container ql-snow ql-editor\"\n style={{\n width: '100%',\n resize: 'none',\n height,\n minHeight: '200px',\n }}\n onChange={this.onChangeTextArea}\n value={formatHTML(value)}\n />\n {imagesData && imagesData.length && (\n <ImageLibraryModal\n imagesData={imagesData}\n isOpen={isImageModalOpen}\n onClose={this.onImageModalClose}\n onConfirm={this.onImageConfirm}\n />\n )}\n {customFields && customFields.length && (\n <InsertFieldModal\n customFields={customFields}\n isOpen={isFieldModalOpen}\n onClose={this.onFieldModalClose}\n onConfirm={this.onInserFieldConfirm}\n />\n )}\n </div>\n );\n }\n}\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -29,22 +29,22 @@ __export(customFields_exports, {
|
|
|
29
29
|
module.exports = __toCommonJS(customFields_exports);
|
|
30
30
|
var React = __toESM(require("react"));
|
|
31
31
|
const fields = [
|
|
32
|
-
"Lender Name \
|
|
33
|
-
"Lender Address \
|
|
34
|
-
"Lender City \
|
|
35
|
-
"Lender State \
|
|
36
|
-
"Lender Zip \
|
|
37
|
-
"Borrower First Name \
|
|
38
|
-
"Borrower Last Name \
|
|
39
|
-
"Total Loan Amount \
|
|
40
|
-
"Loan Term \
|
|
41
|
-
"Loan to Value \
|
|
42
|
-
"Monthly Payment \
|
|
43
|
-
"Interest Rate \
|
|
44
|
-
"Loan Originator Name \
|
|
45
|
-
"Loan Originator Email \
|
|
46
|
-
"Loan Originator Phone \
|
|
47
|
-
"NMLS Loan Originator ID \
|
|
32
|
+
"Lender Name \xAB315\xBB",
|
|
33
|
+
"Lender Address \xAB319\xBB",
|
|
34
|
+
"Lender City \xAB313\xBB",
|
|
35
|
+
"Lender State \xAB321\xBB",
|
|
36
|
+
"Lender Zip \xAB323\xBB",
|
|
37
|
+
"Borrower First Name \xAB4000\xBB",
|
|
38
|
+
"Borrower Last Name \xAB4002\xBB",
|
|
39
|
+
"Total Loan Amount \xAB2\xBB",
|
|
40
|
+
"Loan Term \xAB4\xBB",
|
|
41
|
+
"Loan to Value \xAB976\xBB",
|
|
42
|
+
"Monthly Payment \xAB912\xBB",
|
|
43
|
+
"Interest Rate \xAB3\xBB",
|
|
44
|
+
"Loan Originator Name \xAB1612\xBB",
|
|
45
|
+
"Loan Originator Email \xAB3968\xBB",
|
|
46
|
+
"Loan Originator Phone \xAB1823\xBB",
|
|
47
|
+
"NMLS Loan Originator ID \xAB3238\xBB"
|
|
48
48
|
];
|
|
49
49
|
const getFields = (customFields = fields) => customFields.map((opt, index) => ({
|
|
50
50
|
id: `${opt}_${index}`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/customFields.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["export const fields = [\n 'Lender Name \
|
|
4
|
+
"sourcesContent": ["export const fields = [\n 'Lender Name \u00AB315\u00BB',\n 'Lender Address \u00AB319\u00BB',\n 'Lender City \u00AB313\u00BB',\n 'Lender State \u00AB321\u00BB',\n 'Lender Zip \u00AB323\u00BB',\n 'Borrower First Name \u00AB4000\u00BB',\n 'Borrower Last Name \u00AB4002\u00BB',\n 'Total Loan Amount \u00AB2\u00BB',\n 'Loan Term \u00AB4\u00BB',\n 'Loan to Value \u00AB976\u00BB',\n 'Monthly Payment \u00AB912\u00BB',\n 'Interest Rate \u00AB3\u00BB',\n 'Loan Originator Name \u00AB1612\u00BB',\n 'Loan Originator Email \u00AB3968\u00BB',\n 'Loan Originator Phone \u00AB1823\u00BB',\n 'NMLS Loan Originator ID \u00AB3238\u00BB',\n];\n/**\n * Returns the fields names\n *\n * @param customFields\n */\nexport const getFields = (customFields = fields) =>\n customFields.map((opt, index) => ({\n id: `${opt}_${index}`,\n // icon: 'ADD',\n label: `${opt}`,\n onClick: opt.indexOf('\u00AB') !== -1 ? () => this.onOptionClick(this.getFieldCode(opt)) : null,\n type: opt === '' ? 'separator' : null,\n }));\n/**\n * Returns a field's name\n *\n * @param field\n */\nexport const getFieldName = (field) => {\n const codeIndex = field.indexOf('\u00AB');\n return field.substring(0, codeIndex);\n};\n/**\n * Returns a field's id. E.g: \u00AB456\u00BB\n *\n * @param field\n */\nexport const getFieldCode = (field) => {\n const codeIndex = field.indexOf('\u00AB');\n return field.substring(codeIndex);\n};\n\nexport default {\n fields,\n getFields,\n getFieldName,\n getFieldCode,\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,SAAS;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,MAAM,YAAY,CAAC,eAAe,WACvC,aAAa,IAAI,CAAC,KAAK,UAAW;AAAA,EAChC,IAAI,GAAG,OAAO;AAAA,EAEd,OAAO,GAAG;AAAA,EACV,SAAS,IAAI,QAAQ,MAAG,MAAM,KAAK,MAAM,SAAK,cAAc,SAAK,aAAa,GAAG,CAAC,IAAI;AAAA,EACtF,MAAM,QAAQ,KAAK,cAAc;AACnC,EAAE;AAMG,MAAM,eAAe,CAAC,UAAU;AACrC,QAAM,YAAY,MAAM,QAAQ,MAAG;AACnC,SAAO,MAAM,UAAU,GAAG,SAAS;AACrC;AAMO,MAAM,eAAe,CAAC,UAAU;AACrC,QAAM,YAAY,MAAM,QAAQ,MAAG;AACnC,SAAO,MAAM,UAAU,SAAS;AAClC;AAEA,IAAO,uBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var Image_exports = {};
|
|
22
|
+
__export(Image_exports, {
|
|
23
|
+
default: () => Image_default
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(Image_exports);
|
|
26
|
+
var React = __toESM(require("react"));
|
|
27
|
+
var import_react_quill = require("react-quill");
|
|
28
|
+
const BaseImage = import_react_quill.Quill.import("formats/image");
|
|
29
|
+
const ATTRIBUTES = ["alt", "height", "width", "style"];
|
|
30
|
+
const WHITE_STYLE = ["margin", "display", "float"];
|
|
31
|
+
class Image extends BaseImage {
|
|
32
|
+
static formats(domNode) {
|
|
33
|
+
return ATTRIBUTES.reduce(function(formats, attribute) {
|
|
34
|
+
if (domNode.hasAttribute(attribute)) {
|
|
35
|
+
formats[attribute] = domNode.getAttribute(attribute);
|
|
36
|
+
}
|
|
37
|
+
return formats;
|
|
38
|
+
}, {});
|
|
39
|
+
}
|
|
40
|
+
format(name, value) {
|
|
41
|
+
if (ATTRIBUTES.indexOf(name) > -1) {
|
|
42
|
+
if (value) {
|
|
43
|
+
if (name === "style") {
|
|
44
|
+
value = this.sanitize_style(value);
|
|
45
|
+
}
|
|
46
|
+
this.domNode.setAttribute(name, value);
|
|
47
|
+
} else {
|
|
48
|
+
this.domNode.removeAttribute(name);
|
|
49
|
+
}
|
|
50
|
+
} else {
|
|
51
|
+
super.format(name, value);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
sanitize_style(style) {
|
|
55
|
+
let style_arr = style.split(";");
|
|
56
|
+
let allow_style = "";
|
|
57
|
+
style_arr.forEach((v, i) => {
|
|
58
|
+
if (WHITE_STYLE.indexOf(v.trim().split(":")[0]) !== -1) {
|
|
59
|
+
allow_style += v + ";";
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return allow_style;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
var Image_default = Image;
|
|
66
|
+
//# sourceMappingURL=Image.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/quillOverrides/Image.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
+
"sourcesContent": ["import { Quill } from 'react-quill';\nconst BaseImage = Quill.import('formats/image');\n\nconst ATTRIBUTES = ['alt', 'height', 'width', 'style'];\n\nconst WHITE_STYLE = ['margin', 'display', 'float'];\n\nclass Image extends BaseImage {\n static formats(domNode) {\n return ATTRIBUTES.reduce(function (formats, attribute) {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n if (name === 'style') {\n value = this.sanitize_style(value);\n }\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n\n sanitize_style(style) {\n let style_arr = style.split(';');\n let allow_style = '';\n style_arr.forEach((v, i) => {\n if (WHITE_STYLE.indexOf(v.trim().split(':')[0]) !== -1) {\n allow_style += v + ';';\n }\n });\n return allow_style;\n }\n}\n\nexport default Image;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,yBAAsB;AACtB,MAAM,YAAY,yBAAM,OAAO,eAAe;AAE9C,MAAM,aAAa,CAAC,OAAO,UAAU,SAAS,OAAO;AAErD,MAAM,cAAc,CAAC,UAAU,WAAW,OAAO;AAEjD,MAAM,cAAc,UAAU;AAAA,SACrB,QAAQ,SAAS;AACtB,WAAO,WAAW,OAAO,SAAU,SAAS,WAAW;AACrD,UAAI,QAAQ,aAAa,SAAS,GAAG;AACnC,gBAAQ,aAAa,QAAQ,aAAa,SAAS;AAAA,MACrD;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AAAA,EAEA,OAAO,MAAM,OAAO;AAClB,QAAI,WAAW,QAAQ,IAAI,IAAI,IAAI;AACjC,UAAI,OAAO;AACT,YAAI,SAAS,SAAS;AACpB,kBAAQ,KAAK,eAAe,KAAK;AAAA,QACnC;AACA,aAAK,QAAQ,aAAa,MAAM,KAAK;AAAA,MACvC,OAAO;AACL,aAAK,QAAQ,gBAAgB,IAAI;AAAA,MACnC;AAAA,IACF,OAAO;AACL,YAAM,OAAO,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,eAAe,OAAO;AACpB,QAAI,YAAY,MAAM,MAAM,GAAG;AAC/B,QAAI,cAAc;AAClB,cAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,UAAI,YAAY,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,IAAI;AACtD,uBAAe,IAAI;AAAA,MACrB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -38,6 +38,7 @@ import InsertFieldModal from "./InsertFieldModal";
|
|
|
38
38
|
import { CustomToolbar } from "./CustomToolbar";
|
|
39
39
|
import IndentStyle from "../quillOverrides/IndentStyle";
|
|
40
40
|
import LinkFormat from "../quillOverrides/LinkFormat";
|
|
41
|
+
import Image from "../quillOverrides/Image";
|
|
41
42
|
import { formatHTML } from "../utils";
|
|
42
43
|
import { clipboardLinkWithTagMatcher } from "../quillMatchers/clipboardLinkWithTagMatcher";
|
|
43
44
|
Quill.register("modules/blotFormatter", BlotFormatter);
|
|
@@ -66,6 +67,7 @@ Quill.register(AlignStyle, true);
|
|
|
66
67
|
Quill.register(IndentStyle, true);
|
|
67
68
|
Quill.register(FontStyle, true);
|
|
68
69
|
Quill.register(SizeStyle, true);
|
|
70
|
+
Quill.register(Image, true);
|
|
69
71
|
class DSWYSIWYGEditorImpl extends React2.PureComponent {
|
|
70
72
|
constructor(props) {
|
|
71
73
|
super(props);
|
|
@@ -81,6 +83,7 @@ class DSWYSIWYGEditorImpl extends React2.PureComponent {
|
|
|
81
83
|
}, this.props.quillModules);
|
|
82
84
|
this.getEditor = () => this.quill?.getEditor();
|
|
83
85
|
this.onChangeQuill = (html, delta, source, editor) => {
|
|
86
|
+
console.log("quill detected a change");
|
|
84
87
|
const { showRawHTML, onChange } = this.props;
|
|
85
88
|
if (!showRawHTML)
|
|
86
89
|
onChange(html, delta, source, editor);
|
|
@@ -206,7 +209,7 @@ class DSWYSIWYGEditorImpl extends React2.PureComponent {
|
|
|
206
209
|
minHeight: "200px"
|
|
207
210
|
},
|
|
208
211
|
onChange: this.onChangeTextArea,
|
|
209
|
-
value: formatHTML(
|
|
212
|
+
value: formatHTML(value)
|
|
210
213
|
}), imagesData && imagesData.length && /* @__PURE__ */ React2.createElement(ImageLibraryModal, {
|
|
211
214
|
imagesData,
|
|
212
215
|
isOpen: isImageModalOpen,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/components/DSWYSIWYGEditorImpl.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable react/prop-types */\n/* eslint-disable max-lines */\nimport React from 'react';\nimport ReactQuill, { Quill } from 'react-quill';\nimport BlotFormatter from 'quill-blot-formatter';\n\nimport ImageLibraryModal from './ImageLibraryModal';\nimport InsertFieldModal from './InsertFieldModal';\nimport { CustomToolbar } from './CustomToolbar';\nimport IndentStyle from '../quillOverrides/IndentStyle';\nimport LinkFormat from '../quillOverrides/LinkFormat';\nimport { formatHTML } from '../utils';\nimport { clipboardLinkWithTagMatcher } from '../quillMatchers/clipboardLinkWithTagMatcher';\n\nQuill.register('modules/blotFormatter', BlotFormatter);\n\n// Fix block styled formats ----------------\nconst AlignStyle = Quill.import('attributors/style/align');\nconst FontStyle = Quill.import('attributors/style/font');\nFontStyle.whitelist = [\n // allow ONLY these fonts and the default\n 'serif',\n 'monospace',\n 'arial',\n 'comic-sans',\n 'courier-new',\n 'georgia',\n 'helvetica',\n 'lucida',\n];\nconst SizeStyle = Quill.import('attributors/style/size');\nSizeStyle.whitelist = [\n // allow ONLY these sizes and the default\n 'x-small',\n 'large',\n 'x-large',\n];\n\n// Fix Doc Viewer p tags extra margin issue ---------\nconst Block = Quill.import('blots/block');\nBlock.tagName = 'p';\nQuill.register(Block);\n\nQuill.register(AlignStyle, true);\nQuill.register(IndentStyle, true);\nQuill.register(FontStyle, true);\nQuill.register(SizeStyle, true);\n// -----------------------------------------\n\nexport default class DSWYSIWYGEditorImpl extends React.PureComponent {\n quillModules = {\n toolbar: {\n container: this.props.toolbarContainer ? `#${this.props.toolbarContainer}` : '#toolbar',\n handlers: {\n ...this.props.toolbarHandlers,\n },\n },\n clipboard: {\n // toggle to add extra line breaks when pasting HTML:\n matchVisual: false,\n },\n blotFormatter: {\n // options... https://github.com/Fandom-OSS/quill-blot-formatter\n },\n ...this.props.quillModules,\n };\n\n constructor(props) {\n super(props);\n Quill.register(LinkFormat, true);\n if (props.quillOverrides.length) {\n props.quillOverrides.map((override) => Quill.register(override, true));\n }\n this.state = {\n isImageModalOpen: false,\n isFieldModalOpen: false,\n };\n const { toolbar } = this.quillModules;\n if (props.imagesData) {\n toolbar.handlers.image = (value) => {\n const { imagesData, handleImageClick } = this.props;\n if (!imagesData.length) {\n return;\n }\n this.setState({ isImageModalOpen: !!value });\n handleImageClick(value);\n };\n }\n if (props.customFields) {\n toolbar.handlers.customFields = (value) => {\n const { customFields, handleCustomFieldClick } = this.props;\n if (!customFields.length) {\n return;\n }\n this.setState({ isFieldModalOpen: !!value });\n handleCustomFieldClick(value);\n };\n }\n }\n\n componentDidMount() {\n // this.quill doesn't exist untill the full call-stack execute\n // we need to \"setTimeout\" so this componentDidMount work as expected\n setTimeout(() => {\n const quillDomRef = this.quill;\n this.props.getQuillRef(quillDomRef);\n\n const editor = quillDomRef?.getEditor();\n // https://github.com/quilljs/quill/issues/2677\n editor?.clipboard.addMatcher('a', clipboardLinkWithTagMatcher);\n });\n }\n\n getEditor = () => this.quill?.getEditor();\n\n // eslint-disable-next-line max-params\n onChangeQuill = (html, delta, source, editor) => {\n const { showRawHTML, onChange } = this.props;\n if (!showRawHTML) onChange(html, delta, source, editor);\n };\n\n onChangeTextArea = (e) => {\n const { showRawHTML, onChange } = this.props;\n if (showRawHTML) onChange(e.target.value);\n };\n\n onInserFieldConfirm = (fieldCode) => {\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertText(range.index, fieldCode);\n };\n\n onImageConfirm = (image) => {\n if (!image) {\n return;\n }\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertEmbed(range.index, 'image', image.url);\n };\n\n onFieldModalClose = () => {\n this.setState({ isFieldModalOpen: false });\n };\n\n onImageModalClose = () => {\n this.setState({ isImageModalOpen: false });\n };\n\n quillRef = (ref) => {\n this.quill = ref;\n };\n\n render() {\n const { isFieldModalOpen, isImageModalOpen } = this.state;\n const {\n containerProps = {},\n customFields,\n imagesData,\n customToolbar,\n handleImageClick,\n handleCustomFieldClick,\n height,\n value,\n showRawHTML,\n onShowHTML,\n onChange,\n hideItems,\n ...editorProps\n } = this.props;\n\n return (\n <div\n // data-testid=\"wysiwyg-text-container\"\n {...containerProps}\n className={`quill-wysiwyg-editor ${showRawHTML ? 'show-raw' : ''}`}\n >\n {customToolbar || (\n <CustomToolbar\n customFields={customFields}\n onShowHTML={onShowHTML}\n hideItems={hideItems}\n userProps={this.props}\n />\n )}\n <ReactQuill\n ref={this.quillRef}\n modules={this.quillModules}\n onChange={this.onChangeQuill}\n value={value}\n style={{\n height,\n borderBottom: '1px solid #ccc',\n }}\n {...editorProps}\n id=\"wysiwyg-text-container\"\n />\n <textarea\n className=\"raw-editor ql-container ql-snow ql-editor\"\n style={{\n width: '100%',\n resize: 'none',\n height,\n minHeight: '200px',\n }}\n onChange={this.onChangeTextArea}\n value={formatHTML(
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;ACEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,SAAS,yBAAyB,aAAa;AAGrD,MAAM,aAAa,MAAM,OAAO,yBAAyB;AACzD,MAAM,YAAY,MAAM,OAAO,wBAAwB;AACvD,UAAU,YAAY;AAAA,EAEpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,MAAM,YAAY,MAAM,OAAO,wBAAwB;AACvD,UAAU,YAAY;AAAA,EAEpB;AAAA,EACA;AAAA,EACA;AACF;AAGA,MAAM,QAAQ,MAAM,OAAO,aAAa;AACxC,MAAM,UAAU;AAChB,MAAM,SAAS,KAAK;AAEpB,MAAM,SAAS,YAAY,IAAI;AAC/B,MAAM,SAAS,aAAa,IAAI;AAChC,MAAM,SAAS,WAAW,IAAI;AAC9B,MAAM,SAAS,WAAW,IAAI;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable react/prop-types */\n/* eslint-disable max-lines */\nimport React from 'react';\nimport ReactQuill, { Quill } from 'react-quill';\nimport BlotFormatter from 'quill-blot-formatter';\n\nimport ImageLibraryModal from './ImageLibraryModal';\nimport InsertFieldModal from './InsertFieldModal';\nimport { CustomToolbar } from './CustomToolbar';\nimport IndentStyle from '../quillOverrides/IndentStyle';\nimport LinkFormat from '../quillOverrides/LinkFormat';\nimport Image from '../quillOverrides/Image';\nimport { formatHTML } from '../utils';\nimport { clipboardLinkWithTagMatcher } from '../quillMatchers/clipboardLinkWithTagMatcher';\n\nQuill.register('modules/blotFormatter', BlotFormatter);\n\n// Fix block styled formats ----------------\nconst AlignStyle = Quill.import('attributors/style/align');\nconst FontStyle = Quill.import('attributors/style/font');\nFontStyle.whitelist = [\n // allow ONLY these fonts and the default\n 'serif',\n 'monospace',\n 'arial',\n 'comic-sans',\n 'courier-new',\n 'georgia',\n 'helvetica',\n 'lucida',\n];\nconst SizeStyle = Quill.import('attributors/style/size');\nSizeStyle.whitelist = [\n // allow ONLY these sizes and the default\n 'x-small',\n 'large',\n 'x-large',\n];\n\n// Fix Doc Viewer p tags extra margin issue ---------\nconst Block = Quill.import('blots/block');\nBlock.tagName = 'p';\nQuill.register(Block);\n\nQuill.register(AlignStyle, true);\nQuill.register(IndentStyle, true);\nQuill.register(FontStyle, true);\nQuill.register(SizeStyle, true);\n// -----------------------------------------\nQuill.register(Image, true);\n\nexport default class DSWYSIWYGEditorImpl extends React.PureComponent {\n quillModules = {\n toolbar: {\n container: this.props.toolbarContainer ? `#${this.props.toolbarContainer}` : '#toolbar',\n handlers: {\n ...this.props.toolbarHandlers,\n },\n },\n clipboard: {\n // toggle to add extra line breaks when pasting HTML:\n matchVisual: false,\n },\n blotFormatter: {\n // options... https://github.com/Fandom-OSS/quill-blot-formatter\n },\n ...this.props.quillModules,\n };\n\n constructor(props) {\n super(props);\n Quill.register(LinkFormat, true);\n if (props.quillOverrides.length) {\n props.quillOverrides.map((override) => Quill.register(override, true));\n }\n this.state = {\n isImageModalOpen: false,\n isFieldModalOpen: false,\n };\n const { toolbar } = this.quillModules;\n if (props.imagesData) {\n toolbar.handlers.image = (value) => {\n const { imagesData, handleImageClick } = this.props;\n if (!imagesData.length) {\n return;\n }\n this.setState({ isImageModalOpen: !!value });\n handleImageClick(value);\n };\n }\n if (props.customFields) {\n toolbar.handlers.customFields = (value) => {\n const { customFields, handleCustomFieldClick } = this.props;\n if (!customFields.length) {\n return;\n }\n this.setState({ isFieldModalOpen: !!value });\n handleCustomFieldClick(value);\n };\n }\n }\n\n componentDidMount() {\n // this.quill doesn't exist untill the full call-stack execute\n // we need to \"setTimeout\" so this componentDidMount work as expected\n setTimeout(() => {\n const quillDomRef = this.quill;\n this.props.getQuillRef(quillDomRef);\n\n const editor = quillDomRef?.getEditor();\n // https://github.com/quilljs/quill/issues/2677\n editor?.clipboard.addMatcher('a', clipboardLinkWithTagMatcher);\n });\n }\n\n getEditor = () => this.quill?.getEditor();\n\n // eslint-disable-next-line max-params\n onChangeQuill = (html, delta, source, editor) => {\n console.log('quill detected a change')\n const { showRawHTML, onChange } = this.props;\n if (!showRawHTML) onChange(html, delta, source, editor);\n };\n\n onChangeTextArea = (e) => {\n const { showRawHTML, onChange } = this.props;\n if (showRawHTML) onChange(e.target.value);\n };\n\n onInserFieldConfirm = (fieldCode) => {\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertText(range.index, fieldCode);\n };\n\n onImageConfirm = (image) => {\n if (!image) {\n return;\n }\n const editor = this.getEditor();\n const range = editor.getSelection(true);\n editor.insertEmbed(range.index, 'image', image.url);\n };\n\n onFieldModalClose = () => {\n this.setState({ isFieldModalOpen: false });\n };\n\n onImageModalClose = () => {\n this.setState({ isImageModalOpen: false });\n };\n\n quillRef = (ref) => {\n this.quill = ref;\n };\n\n render() {\n const { isFieldModalOpen, isImageModalOpen } = this.state;\n const {\n containerProps = {},\n customFields,\n imagesData,\n customToolbar,\n handleImageClick,\n handleCustomFieldClick,\n height,\n value,\n showRawHTML,\n onShowHTML,\n onChange,\n hideItems,\n ...editorProps\n } = this.props;\n\n return (\n <div\n // data-testid=\"wysiwyg-text-container\"\n {...containerProps}\n className={`quill-wysiwyg-editor ${showRawHTML ? 'show-raw' : ''}`}\n >\n {customToolbar || (\n <CustomToolbar\n customFields={customFields}\n onShowHTML={onShowHTML}\n hideItems={hideItems}\n userProps={this.props}\n />\n )}\n <ReactQuill\n ref={this.quillRef}\n modules={this.quillModules}\n onChange={this.onChangeQuill}\n value={value}\n style={{\n height,\n borderBottom: '1px solid #ccc',\n }}\n {...editorProps}\n id=\"wysiwyg-text-container\"\n />\n <textarea\n className=\"raw-editor ql-container ql-snow ql-editor\"\n style={{\n width: '100%',\n resize: 'none',\n height,\n minHeight: '200px',\n }}\n onChange={this.onChangeTextArea}\n value={formatHTML(value)}\n />\n {imagesData && imagesData.length && (\n <ImageLibraryModal\n imagesData={imagesData}\n isOpen={isImageModalOpen}\n onClose={this.onImageModalClose}\n onConfirm={this.onImageConfirm}\n />\n )}\n {customFields && customFields.length && (\n <InsertFieldModal\n customFields={customFields}\n isOpen={isFieldModalOpen}\n onClose={this.onFieldModalClose}\n onConfirm={this.onInserFieldConfirm}\n />\n )}\n </div>\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
const fields = [
|
|
3
|
-
"Lender Name \
|
|
4
|
-
"Lender Address \
|
|
5
|
-
"Lender City \
|
|
6
|
-
"Lender State \
|
|
7
|
-
"Lender Zip \
|
|
8
|
-
"Borrower First Name \
|
|
9
|
-
"Borrower Last Name \
|
|
10
|
-
"Total Loan Amount \
|
|
11
|
-
"Loan Term \
|
|
12
|
-
"Loan to Value \
|
|
13
|
-
"Monthly Payment \
|
|
14
|
-
"Interest Rate \
|
|
15
|
-
"Loan Originator Name \
|
|
16
|
-
"Loan Originator Email \
|
|
17
|
-
"Loan Originator Phone \
|
|
18
|
-
"NMLS Loan Originator ID \
|
|
3
|
+
"Lender Name \xAB315\xBB",
|
|
4
|
+
"Lender Address \xAB319\xBB",
|
|
5
|
+
"Lender City \xAB313\xBB",
|
|
6
|
+
"Lender State \xAB321\xBB",
|
|
7
|
+
"Lender Zip \xAB323\xBB",
|
|
8
|
+
"Borrower First Name \xAB4000\xBB",
|
|
9
|
+
"Borrower Last Name \xAB4002\xBB",
|
|
10
|
+
"Total Loan Amount \xAB2\xBB",
|
|
11
|
+
"Loan Term \xAB4\xBB",
|
|
12
|
+
"Loan to Value \xAB976\xBB",
|
|
13
|
+
"Monthly Payment \xAB912\xBB",
|
|
14
|
+
"Interest Rate \xAB3\xBB",
|
|
15
|
+
"Loan Originator Name \xAB1612\xBB",
|
|
16
|
+
"Loan Originator Email \xAB3968\xBB",
|
|
17
|
+
"Loan Originator Phone \xAB1823\xBB",
|
|
18
|
+
"NMLS Loan Originator ID \xAB3238\xBB"
|
|
19
19
|
];
|
|
20
20
|
const getFields = (customFields = fields) => customFields.map((opt, index) => ({
|
|
21
21
|
id: `${opt}_${index}`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/components/customFields.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const fields = [\n 'Lender Name \
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const fields = [\n 'Lender Name \u00AB315\u00BB',\n 'Lender Address \u00AB319\u00BB',\n 'Lender City \u00AB313\u00BB',\n 'Lender State \u00AB321\u00BB',\n 'Lender Zip \u00AB323\u00BB',\n 'Borrower First Name \u00AB4000\u00BB',\n 'Borrower Last Name \u00AB4002\u00BB',\n 'Total Loan Amount \u00AB2\u00BB',\n 'Loan Term \u00AB4\u00BB',\n 'Loan to Value \u00AB976\u00BB',\n 'Monthly Payment \u00AB912\u00BB',\n 'Interest Rate \u00AB3\u00BB',\n 'Loan Originator Name \u00AB1612\u00BB',\n 'Loan Originator Email \u00AB3968\u00BB',\n 'Loan Originator Phone \u00AB1823\u00BB',\n 'NMLS Loan Originator ID \u00AB3238\u00BB',\n];\n/**\n * Returns the fields names\n *\n * @param customFields\n */\nexport const getFields = (customFields = fields) =>\n customFields.map((opt, index) => ({\n id: `${opt}_${index}`,\n // icon: 'ADD',\n label: `${opt}`,\n onClick: opt.indexOf('\u00AB') !== -1 ? () => this.onOptionClick(this.getFieldCode(opt)) : null,\n type: opt === '' ? 'separator' : null,\n }));\n/**\n * Returns a field's name\n *\n * @param field\n */\nexport const getFieldName = (field) => {\n const codeIndex = field.indexOf('\u00AB');\n return field.substring(0, codeIndex);\n};\n/**\n * Returns a field's id. E.g: \u00AB456\u00BB\n *\n * @param field\n */\nexport const getFieldCode = (field) => {\n const codeIndex = field.indexOf('\u00AB');\n return field.substring(codeIndex);\n};\n\nexport default {\n fields,\n getFields,\n getFieldName,\n getFieldCode,\n};\n"],
|
|
5
5
|
"mappings": "AAAA;ACAO,MAAM,SAAS;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,MAAM,YAAY,CAAC,eAAe,WACvC,aAAa,IAAI,CAAC,KAAK,UAAW;AAAA,EAChC,IAAI,GAAG,OAAO;AAAA,EAEd,OAAO,GAAG;AAAA,EACV,SAAS,IAAI,QAAQ,MAAG,MAAM,KAAK,MAAM,SAAK,cAAc,SAAK,aAAa,GAAG,CAAC,IAAI;AAAA,EACtF,MAAM,QAAQ,KAAK,cAAc;AACnC,EAAE;AAMG,MAAM,eAAe,CAAC,UAAU;AACrC,QAAM,YAAY,MAAM,QAAQ,MAAG;AACnC,SAAO,MAAM,UAAU,GAAG,SAAS;AACrC;AAMO,MAAM,eAAe,CAAC,UAAU;AACrC,QAAM,YAAY,MAAM,QAAQ,MAAG;AACnC,SAAO,MAAM,UAAU,SAAS;AAClC;AAEA,IAAO,uBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Quill } from "react-quill";
|
|
3
|
+
const BaseImage = Quill.import("formats/image");
|
|
4
|
+
const ATTRIBUTES = ["alt", "height", "width", "style"];
|
|
5
|
+
const WHITE_STYLE = ["margin", "display", "float"];
|
|
6
|
+
class Image extends BaseImage {
|
|
7
|
+
static formats(domNode) {
|
|
8
|
+
return ATTRIBUTES.reduce(function(formats, attribute) {
|
|
9
|
+
if (domNode.hasAttribute(attribute)) {
|
|
10
|
+
formats[attribute] = domNode.getAttribute(attribute);
|
|
11
|
+
}
|
|
12
|
+
return formats;
|
|
13
|
+
}, {});
|
|
14
|
+
}
|
|
15
|
+
format(name, value) {
|
|
16
|
+
if (ATTRIBUTES.indexOf(name) > -1) {
|
|
17
|
+
if (value) {
|
|
18
|
+
if (name === "style") {
|
|
19
|
+
value = this.sanitize_style(value);
|
|
20
|
+
}
|
|
21
|
+
this.domNode.setAttribute(name, value);
|
|
22
|
+
} else {
|
|
23
|
+
this.domNode.removeAttribute(name);
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
super.format(name, value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
sanitize_style(style) {
|
|
30
|
+
let style_arr = style.split(";");
|
|
31
|
+
let allow_style = "";
|
|
32
|
+
style_arr.forEach((v, i) => {
|
|
33
|
+
if (WHITE_STYLE.indexOf(v.trim().split(":")[0]) !== -1) {
|
|
34
|
+
allow_style += v + ";";
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return allow_style;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
var Image_default = Image;
|
|
41
|
+
export {
|
|
42
|
+
Image_default as default
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=Image.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/quillOverrides/Image.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { Quill } from 'react-quill';\nconst BaseImage = Quill.import('formats/image');\n\nconst ATTRIBUTES = ['alt', 'height', 'width', 'style'];\n\nconst WHITE_STYLE = ['margin', 'display', 'float'];\n\nclass Image extends BaseImage {\n static formats(domNode) {\n return ATTRIBUTES.reduce(function (formats, attribute) {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n if (name === 'style') {\n value = this.sanitize_style(value);\n }\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n\n sanitize_style(style) {\n let style_arr = style.split(';');\n let allow_style = '';\n style_arr.forEach((v, i) => {\n if (WHITE_STYLE.indexOf(v.trim().split(':')[0]) !== -1) {\n allow_style += v + ';';\n }\n });\n return allow_style;\n }\n}\n\nexport default Image;\n"],
|
|
5
|
+
"mappings": "AAAA;ACAA;AACA,MAAM,YAAY,MAAM,OAAO,eAAe;AAE9C,MAAM,aAAa,CAAC,OAAO,UAAU,SAAS,OAAO;AAErD,MAAM,cAAc,CAAC,UAAU,WAAW,OAAO;AAEjD,MAAM,cAAc,UAAU;AAAA,SACrB,QAAQ,SAAS;AACtB,WAAO,WAAW,OAAO,SAAU,SAAS,WAAW;AACrD,UAAI,QAAQ,aAAa,SAAS,GAAG;AACnC,gBAAQ,aAAa,QAAQ,aAAa,SAAS;AAAA,MACrD;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AAAA,EAEA,OAAO,MAAM,OAAO;AAClB,QAAI,WAAW,QAAQ,IAAI,IAAI,IAAI;AACjC,UAAI,OAAO;AACT,YAAI,SAAS,SAAS;AACpB,kBAAQ,KAAK,eAAe,KAAK;AAAA,QACnC;AACA,aAAK,QAAQ,aAAa,MAAM,KAAK;AAAA,MACvC,OAAO;AACL,aAAK,QAAQ,gBAAgB,IAAI;AAAA,MACnC;AAAA,IACF,OAAO;AACL,YAAM,OAAO,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,eAAe,OAAO;AACpB,QAAI,YAAY,MAAM,MAAM,GAAG;AAC/B,QAAI,cAAc;AAClB,cAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,UAAI,YAAY,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,IAAI;AACtD,uBAAe,IAAI;AAAA,MACrB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|