Fixed issue #990 - paste in not possible in contentediable fields.
This commit is contained in:
parent
d6a45cbb89
commit
18a27f0d7a
1 changed files with 58 additions and 9 deletions
|
@ -254,6 +254,9 @@
|
||||||
if (e.clipboardData) { // ie
|
if (e.clipboardData) { // ie
|
||||||
clipboardData = e.clipboardData
|
clipboardData = e.clipboardData
|
||||||
}
|
}
|
||||||
|
else if (window.clipboardData) { // ie
|
||||||
|
clipboardData = window.clipboardData
|
||||||
|
}
|
||||||
else if (e.originalEvent.clipboardData) { // other browsers
|
else if (e.originalEvent.clipboardData) { // other browsers
|
||||||
clipboardData = e.originalEvent.clipboardData
|
clipboardData = e.originalEvent.clipboardData
|
||||||
}
|
}
|
||||||
|
@ -307,15 +310,23 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// check existing + paste text for limit
|
// check existing + paste text for limit
|
||||||
var text = clipboardData.getData('text/html')
|
var text, docType
|
||||||
var docType = 'html'
|
try {
|
||||||
if (!text || text.length === 0) {
|
text = clipboardData.getData('text/html')
|
||||||
docType = 'text'
|
docType = 'html'
|
||||||
text = clipboardData.getData('text/plain')
|
if (!text || text.length === 0) {
|
||||||
|
docType = 'text'
|
||||||
|
text = clipboardData.getData('text/plain')
|
||||||
|
}
|
||||||
|
if (!text || text.length === 0) {
|
||||||
|
docType = 'text2'
|
||||||
|
text = clipboardData.getData('text')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!text || text.length === 0) {
|
catch (e) {
|
||||||
docType = 'text2'
|
console.log('Sorry, can\'t insert markup because browser is not supporting it.')
|
||||||
text = clipboardData.getData('text')
|
docType = 'text3'
|
||||||
|
text = clipboardData.getData('text')
|
||||||
}
|
}
|
||||||
_this.log('paste', docType, text)
|
_this.log('paste', docType, text)
|
||||||
|
|
||||||
|
@ -355,7 +366,14 @@
|
||||||
// cleanup
|
// cleanup
|
||||||
text = App.Utils.removeEmptyLines(text)
|
text = App.Utils.removeEmptyLines(text)
|
||||||
_this.log('insert', text)
|
_this.log('insert', text)
|
||||||
document.execCommand('insertHTML', false, text)
|
|
||||||
|
// as fallback, insert html via pasteHtmlAtCaret (for IE 11 and lower)
|
||||||
|
if (docType == 'text3') {
|
||||||
|
_this.pasteHtmlAtCaret(text)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
document.execCommand('insertHTML', false, text)
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -515,6 +533,37 @@
|
||||||
return this.$element.html().trim()
|
return this.$element.html().trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// taken from https://stackoverflow.com/questions/6690752/insert-html-at-caret-in-a-contenteditable-div/6691294#6691294
|
||||||
|
Plugin.prototype.pasteHtmlAtCaret = function(html) {
|
||||||
|
var sel, range;
|
||||||
|
if (window.getSelection) {
|
||||||
|
sel = window.getSelection()
|
||||||
|
if (sel.getRangeAt && sel.rangeCount) {
|
||||||
|
range = sel.getRangeAt(0)
|
||||||
|
range.deleteContents()
|
||||||
|
|
||||||
|
var el = document.createElement('div')
|
||||||
|
el.innerHTML = html;
|
||||||
|
var frag = document.createDocumentFragment(), node, lastNode
|
||||||
|
while ( (node = el.firstChild) ) {
|
||||||
|
lastNode = frag.appendChild(node)
|
||||||
|
}
|
||||||
|
range.insertNode(frag)
|
||||||
|
|
||||||
|
if (lastNode) {
|
||||||
|
range = range.cloneRange()
|
||||||
|
range.setStartAfter(lastNode)
|
||||||
|
range.collapse(true)
|
||||||
|
sel.removeAllRanges()
|
||||||
|
sel.addRange(range)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (document.selection && document.selection.type != 'Control') {
|
||||||
|
document.selection.createRange().pasteHTML(html)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// log method
|
// log method
|
||||||
Plugin.prototype.log = function() {
|
Plugin.prototype.log = function() {
|
||||||
if (App && App.Log) {
|
if (App && App.Log) {
|
||||||
|
|
Loading…
Reference in a new issue