From 783ca9758512459bb98058a3c6f632c4b73f4bb4 Mon Sep 17 00:00:00 2001 From: farthinker Date: Thu, 18 Apr 2019 11:59:41 +0200 Subject: [PATCH] CHG: fix paste bin position calculation --- lib/simditor.js | 22 +++++++++++++--------- site/assets/scripts/simditor.js | 22 +++++++++++++--------- src/clipboard.coffee | 15 +++++++++++---- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/lib/simditor.js b/lib/simditor.js index 12733fa4..bb0198ce 100644 --- a/lib/simditor.js +++ b/lib/simditor.js @@ -2267,7 +2267,7 @@ Clipboard = (function(superClass) { } return this.editor.body.on('paste', (function(_this) { return function(e) { - var range; + var pasteBinAnchor, range; if (_this.pasting || _this._pasteBin) { return; } @@ -2282,11 +2282,17 @@ Clipboard = (function(superClass) { } else { _this.editor.formatter.format(); _this.editor.selection.setRangeAtStartOf(_this.editor.body.find('p:first')); + range = _this.editor.selection._range; } if (_this._processPasteByClipboardApi(e)) { return false; } - _this._createPasteBin($(range.commonAncestorContainer)); + pasteBinAnchor = $(''); + range.insertNode(pasteBinAnchor[0]); + _this._createPasteBin(pasteBinAnchor); + pasteBinAnchor.remove(); + range.collapse(true); + _this.editor.selection.range(range); _this.editor.inputManager.throttledValueChanged.clear(); _this.editor.inputManager.throttledSelectionChanged.clear(); _this.editor.undoManager.throttledPushState.clear(); @@ -2332,14 +2338,12 @@ Clipboard = (function(superClass) { }; Clipboard.prototype._createPasteBin = function(anchorNode) { - var containerOffset; - containerOffset = (anchorNode != null ? anchorNode.position() : void 0) || { - top: 0, - left: 0 - }; + var anchorOffset, editorOffset; + anchorOffset = anchorNode.offset(); + editorOffset = this.editor.el.offset(); return this._pasteBin = $('
').addClass('simditor-paste-bin').attr('tabIndex', '-1').css({ - top: containerOffset.top, - left: containerOffset.left + top: anchorOffset.top - editorOffset.top, + left: anchorOffset.left - editorOffset.left }).appendTo(this.editor.el); }; diff --git a/site/assets/scripts/simditor.js b/site/assets/scripts/simditor.js index 687135eb..1362b245 100644 --- a/site/assets/scripts/simditor.js +++ b/site/assets/scripts/simditor.js @@ -2262,7 +2262,7 @@ Clipboard = (function(superClass) { } return this.editor.body.on('paste', (function(_this) { return function(e) { - var range; + var pasteBinAnchor, range; if (_this.pasting || _this._pasteBin) { return; } @@ -2277,11 +2277,17 @@ Clipboard = (function(superClass) { } else { _this.editor.formatter.format(); _this.editor.selection.setRangeAtStartOf(_this.editor.body.find('p:first')); + range = _this.editor.selection._range; } if (_this._processPasteByClipboardApi(e)) { return false; } - _this._createPasteBin($(range.commonAncestorContainer)); + pasteBinAnchor = $(''); + range.insertNode(pasteBinAnchor[0]); + _this._createPasteBin(pasteBinAnchor); + pasteBinAnchor.remove(); + range.collapse(true); + _this.editor.selection.range(range); _this.editor.inputManager.throttledValueChanged.clear(); _this.editor.inputManager.throttledSelectionChanged.clear(); _this.editor.undoManager.throttledPushState.clear(); @@ -2327,14 +2333,12 @@ Clipboard = (function(superClass) { }; Clipboard.prototype._createPasteBin = function(anchorNode) { - var containerOffset; - containerOffset = (anchorNode != null ? anchorNode.position() : void 0) || { - top: 0, - left: 0 - }; + var anchorOffset, editorOffset; + anchorOffset = anchorNode.offset(); + editorOffset = this.editor.el.offset(); return this._pasteBin = $('
').addClass('simditor-paste-bin').attr('tabIndex', '-1').css({ - top: containerOffset.top, - left: containerOffset.left + top: anchorOffset.top - editorOffset.top, + left: anchorOffset.left - editorOffset.left }).appendTo(this.editor.el); }; diff --git a/src/clipboard.coffee b/src/clipboard.coffee index f00da522..dcba649d 100644 --- a/src/clipboard.coffee +++ b/src/clipboard.coffee @@ -25,10 +25,16 @@ class Clipboard extends SimpleModule else @editor.formatter.format() @editor.selection.setRangeAtStartOf @editor.body.find('p:first') + range = @editor.selection._range return false if @_processPasteByClipboardApi(e) - @_createPasteBin $(range.commonAncestorContainer) + pasteBinAnchor = $('') + range.insertNode(pasteBinAnchor[0]) + @_createPasteBin pasteBinAnchor + pasteBinAnchor.remove() + range.collapse(true) + @editor.selection.range range @editor.inputManager.throttledValueChanged.clear() @editor.inputManager.throttledSelectionChanged.clear() @@ -68,13 +74,14 @@ class Clipboard extends SimpleModule return true _createPasteBin: (anchorNode) -> - containerOffset = anchorNode?.position() || { top: 0, left: 0 } + anchorOffset = anchorNode.offset() + editorOffset = @editor.el.offset() @_pasteBin = $ '
' .addClass 'simditor-paste-bin' .attr 'tabIndex', '-1' .css({ - top: containerOffset.top, - left: containerOffset.left + top: anchorOffset.top - editorOffset.top + left: anchorOffset.left - editorOffset.left }) .appendTo @editor.el