Improve paste handling of formatted data
This commit is contained in:
76
patches/quill+1.3.7.patch
Normal file
76
patches/quill+1.3.7.patch
Normal file
@@ -0,0 +1,76 @@
|
||||
diff --git a/node_modules/quill/dist/quill.js b/node_modules/quill/dist/quill.js
|
||||
index 811b3d0..c8c4892 100644
|
||||
--- a/node_modules/quill/dist/quill.js
|
||||
+++ b/node_modules/quill/dist/quill.js
|
||||
@@ -8917,9 +8917,9 @@ var Clipboard = function (_Module) {
|
||||
var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));
|
||||
|
||||
_this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));
|
||||
- _this.container = _this.quill.addContainer('ql-clipboard');
|
||||
- _this.container.setAttribute('contenteditable', true);
|
||||
- _this.container.setAttribute('tabindex', -1);
|
||||
+ // _this.container = _this.quill.addContainer('ql-clipboard');
|
||||
+ // _this.container.setAttribute('contenteditable', true);
|
||||
+ // _this.container.setAttribute('tabindex', -1);
|
||||
_this.matchers = [];
|
||||
CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {
|
||||
var _ref2 = _slicedToArray(_ref, 2),
|
||||
@@ -8941,15 +8941,18 @@ var Clipboard = function (_Module) {
|
||||
key: 'convert',
|
||||
value: function convert(html) {
|
||||
if (typeof html === 'string') {
|
||||
- this.container.innerHTML = html.replace(/\>\r?\n +\</g, '><'); // Remove spaces between tags
|
||||
+ // this.container.innerHTML = html.replace(/\>\r?\n +\</g, '><'); // Remove spaces between tags
|
||||
+ var parser = new DOMParser();
|
||||
+ var htmlNoSpaces = html.replace(/\>\r?\n +\</g, '><'); // Remove spaces between tags
|
||||
+ this.container = parser.parseFromString(htmlNoSpaces, "text/html").body;
|
||||
return this.convert();
|
||||
}
|
||||
var formats = this.quill.getFormat(this.quill.selection.savedRange.index);
|
||||
- if (formats[_code2.default.blotName]) {
|
||||
- var text = this.container.innerText;
|
||||
- this.container.innerHTML = '';
|
||||
- return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));
|
||||
- }
|
||||
+ // if (formats[_code2.default.blotName]) {
|
||||
+ // var text = this.container.innerText;
|
||||
+ // this.container.innerHTML = '';
|
||||
+ // return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));
|
||||
+ // }
|
||||
|
||||
var _prepareMatching = this.prepareMatching(),
|
||||
_prepareMatching2 = _slicedToArray(_prepareMatching, 2),
|
||||
@@ -8962,7 +8965,8 @@ var Clipboard = function (_Module) {
|
||||
delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));
|
||||
}
|
||||
debug.log('convert', this.container.innerHTML, delta);
|
||||
- this.container.innerHTML = '';
|
||||
+ // this.container.innerHTML = '';
|
||||
+ this.container = null;
|
||||
return delta;
|
||||
}
|
||||
}, {
|
||||
@@ -9056,9 +9060,10 @@ function applyFormat(delta, format, value) {
|
||||
}
|
||||
|
||||
function computeStyle(node) {
|
||||
- if (node.nodeType !== Node.ELEMENT_NODE) return {};
|
||||
- var DOM_KEY = '__ql-computed-style';
|
||||
- return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));
|
||||
+ // if (node.nodeType !== Node.ELEMENT_NODE) return {};
|
||||
+ // var DOM_KEY = '__ql-computed-style';
|
||||
+ // return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));
|
||||
+ return node.style;
|
||||
}
|
||||
|
||||
function deltaEndsWith(delta, text) {
|
||||
@@ -9074,7 +9079,8 @@ function deltaEndsWith(delta, text) {
|
||||
function isLine(node) {
|
||||
if (node.childNodes.length === 0) return false; // Exclude embed blocks
|
||||
var style = computeStyle(node);
|
||||
- return ['block', 'list-item'].indexOf(style.display) > -1;
|
||||
+ // return ['block', 'list-item'].indexOf(style.display) > -1;
|
||||
+ return ['block', 'list-item'].indexOf(style.display) > -1 || node.nodeName === 'DIV' || node.nodeName === 'P';
|
||||
}
|
||||
|
||||
function traverse(node, elementMatchers, textMatchers) {
|
Reference in New Issue
Block a user