Archived
Updates
This commit is contained in:
1 parent
70d2335bba
commit
7428b67da5
1086 files changed
+94145
-59082
No files matched your search
@@ -95,8 +95,7 @@
|
||||
/**
|
||||
* This class contails various utility functions for the paste plugin.
|
||||
*
|
||||
* @class tinymce.pasteplugin.Clipboard
|
||||
* @private
|
||||
* @class tinymce.pasteplugin.Utils
|
||||
*/
|
||||
define("tinymce/pasteplugin/Utils", [
|
||||
"tinymce/util/Tools",
|
||||
@@ -246,12 +245,14 @@ define("tinymce/pasteplugin/Utils", [
|
||||
*/
|
||||
define("tinymce/pasteplugin/Clipboard", [
|
||||
"tinymce/Env",
|
||||
"tinymce/dom/RangeUtils",
|
||||
"tinymce/util/VK",
|
||||
"tinymce/pasteplugin/Utils"
|
||||
], function(Env, VK, Utils) {
|
||||
], function(Env, RangeUtils, VK, Utils) {
|
||||
return function(editor) {
|
||||
var self = this, pasteBinElm, lastRng, keyboardPasteTimeStamp = 0, draggingInternally = false;
|
||||
var pasteBinDefaultContent = '%MCEPASTEBIN%', keyboardPastePlainTextState;
|
||||
var mceInternalUrlPrefix = 'data:text/mce-internal,';
|
||||
|
||||
/**
|
||||
* Pastes the specified HTML. This means that the HTML is filtered and then
|
||||
@@ -345,15 +346,63 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the rect of the current caret if the caret is in an empty block before a
|
||||
* BR we insert a temporary invisible character that we get the rect this way we always get a proper rect.
|
||||
*
|
||||
* TODO: This might be useful in core.
|
||||
*/
|
||||
function getCaretRect(rng) {
|
||||
var rects, textNode, node, container = rng.startContainer;
|
||||
|
||||
rects = rng.getClientRects();
|
||||
if (rects.length) {
|
||||
return rects[0];
|
||||
}
|
||||
|
||||
if (!rng.collapsed || container.nodeType != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
node = container.childNodes[lastRng.startOffset];
|
||||
|
||||
// Skip empty whitespace nodes
|
||||
while (node && node.nodeType == 3 && !node.data.length) {
|
||||
node = node.nextSibling;
|
||||
}
|
||||
|
||||
if (!node) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the location is |<br>
|
||||
// TODO: Might need to expand this to say |<table>
|
||||
if (node.tagName == 'BR') {
|
||||
textNode = dom.doc.createTextNode('\uFEFF');
|
||||
node.parentNode.insertBefore(textNode, node);
|
||||
|
||||
rng = dom.createRng();
|
||||
rng.setStartBefore(textNode);
|
||||
rng.setEndAfter(textNode);
|
||||
|
||||
rects = rng.getClientRects();
|
||||
dom.remove(textNode);
|
||||
}
|
||||
|
||||
if (rects.length) {
|
||||
return rects[0];
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate top cordinate this is needed to avoid scrolling to top of document
|
||||
// We want the paste bin to be as close to the caret as possible to avoid scrolling
|
||||
if (lastRng.getClientRects) {
|
||||
var rects = lastRng.getClientRects();
|
||||
var rect = getCaretRect(lastRng);
|
||||
|
||||
if (rects.length) {
|
||||
if (rect) {
|
||||
// Client rects gets us closes to the actual
|
||||
// caret location in for example a wrapped paragraph block
|
||||
top = scrollTop + (rects[0].top - dom.getPos(body).y);
|
||||
top = scrollTop + (rect.top - dom.getPos(body).y);
|
||||
} else {
|
||||
top = scrollTop;
|
||||
|
||||
@@ -460,7 +509,9 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
if (dataTransfer.getData) {
|
||||
var legacyText = dataTransfer.getData('Text');
|
||||
if (legacyText && legacyText.length > 0) {
|
||||
data['text/plain'] = legacyText;
|
||||
if (legacyText.indexOf(mceInternalUrlPrefix) == -1) {
|
||||
data['text/plain'] = legacyText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,9 +549,9 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
var dataTransfer = e.clipboardData || e.dataTransfer;
|
||||
|
||||
function processItems(items) {
|
||||
var i, item, reader;
|
||||
var i, item, reader, hadImage = false;
|
||||
|
||||
function pasteImage() {
|
||||
function pasteImage(reader) {
|
||||
if (rng) {
|
||||
editor.selection.setRng(rng);
|
||||
rng = null;
|
||||
@@ -513,16 +564,18 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
for (i = 0; i < items.length; i++) {
|
||||
item = items[i];
|
||||
|
||||
if (/^image\/(jpeg|png|gif)$/.test(item.type)) {
|
||||
if (/^image\/(jpeg|png|gif|bmp)$/.test(item.type)) {
|
||||
reader = new FileReader();
|
||||
reader.onload = pasteImage;
|
||||
reader.onload = pasteImage.bind(null, reader);
|
||||
reader.readAsDataURL(item.getAsFile ? item.getAsFile() : item);
|
||||
|
||||
e.preventDefault();
|
||||
return true;
|
||||
hadImage = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hadImage;
|
||||
}
|
||||
|
||||
if (editor.settings.paste_data_images && dataTransfer) {
|
||||
@@ -531,40 +584,19 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
}
|
||||
|
||||
/**
|
||||
* Chrome on Andoid doesn't support proper clipboard access so we have no choice but to allow the browser default behavior.
|
||||
* Chrome on Android doesn't support proper clipboard access so we have no choice but to allow the browser default behavior.
|
||||
*
|
||||
* @param {Event} e Paste event object to check if it contains any data.
|
||||
* @return {Boolean} true/false if the clipboard is empty or not.
|
||||
*/
|
||||
function isBrokenAndoidClipboardEvent(e) {
|
||||
function isBrokenAndroidClipboardEvent(e) {
|
||||
var clipboardData = e.clipboardData;
|
||||
|
||||
return navigator.userAgent.indexOf('Android') != -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;
|
||||
}
|
||||
|
||||
function getCaretRangeFromEvent(e) {
|
||||
var doc = editor.getDoc(), rng, point;
|
||||
|
||||
if (doc.caretPositionFromPoint) {
|
||||
point = doc.caretPositionFromPoint(e.clientX, e.clientY);
|
||||
rng = doc.createRange();
|
||||
rng.setStart(point.offsetNode, point.offset);
|
||||
rng.collapse(true);
|
||||
} else if (doc.caretRangeFromPoint) {
|
||||
rng = doc.caretRangeFromPoint(e.clientX, e.clientY);
|
||||
} else if (doc.body.createTextRange) {
|
||||
rng = doc.body.createTextRange();
|
||||
|
||||
try {
|
||||
rng.moveToPoint(e.clientX, e.clientY);
|
||||
rng.collapse(true);
|
||||
} catch (ex) {
|
||||
// Append to top or bottom depending on drop location
|
||||
rng.collapse(e.clientY < doc.body.clientHeight);
|
||||
}
|
||||
}
|
||||
|
||||
return rng;
|
||||
return RangeUtils.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());
|
||||
}
|
||||
|
||||
function hasContentType(clipboardContent, mimeType) {
|
||||
@@ -630,7 +662,7 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
|
||||
keyboardPastePlainTextState = false;
|
||||
|
||||
if (e.isDefaultPrevented() || isBrokenAndoidClipboardEvent(e)) {
|
||||
if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {
|
||||
removePasteBin();
|
||||
return;
|
||||
}
|
||||
@@ -759,16 +791,8 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
});
|
||||
|
||||
editor.on('dragover dragend', function(e) {
|
||||
var i, dataTransfer = e.dataTransfer;
|
||||
|
||||
if (editor.settings.paste_data_images && dataTransfer) {
|
||||
for (i = 0; i < dataTransfer.types.length; i++) {
|
||||
// Prevent default if we have files dragged into the editor since the pasteImageData handles that
|
||||
if (dataTransfer.types[i] == "Files") {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (editor.settings.paste_data_images) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -817,7 +841,7 @@ define("tinymce/pasteplugin/Clipboard", [
|
||||
/**
|
||||
* This class parses word HTML into proper TinyMCE markup.
|
||||
*
|
||||
* @class tinymce.pasteplugin.Quirks
|
||||
* @class tinymce.pasteplugin.WordFilter
|
||||
* @private
|
||||
*/
|
||||
define("tinymce/pasteplugin/WordFilter", [
|
||||
@@ -868,7 +892,7 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
}
|
||||
|
||||
function isBulletList(text) {
|
||||
return /^[\s\u00a0]*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*/.test(text);
|
||||
return /^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(text);
|
||||
}
|
||||
|
||||
function WordFilter(editor) {
|
||||
@@ -877,6 +901,10 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
editor.on('BeforePastePreProcess', function(e) {
|
||||
var content = e.content, retainStyleProperties, validStyles;
|
||||
|
||||
// Remove google docs internal guid markers
|
||||
content = content.replace(/<b[^>]+id="?docs-internal-[^>]*>/gi, '');
|
||||
content = content.replace(/<br class="?Apple-interchange-newline"?>/gi, '');
|
||||
|
||||
retainStyleProperties = settings.paste_retain_style_properties;
|
||||
if (retainStyleProperties) {
|
||||
validStyles = Tools.makeMap(retainStyleProperties.split(/[, ]/));
|
||||
@@ -980,14 +1008,26 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
// Remove start of list item "1. " or "· " etc
|
||||
removeIgnoredNodes(paragraphNode);
|
||||
trimListStart(paragraphNode, /^\u00a0+/);
|
||||
trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u00d8\u25CF]|\w+\.)/);
|
||||
trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/);
|
||||
trimListStart(paragraphNode, /^\u00a0+/);
|
||||
}
|
||||
|
||||
var paragraphs = node.getAll('p');
|
||||
// Build a list of all root level elements before we start
|
||||
// altering them in the loop below.
|
||||
var elements = [], child = node.firstChild;
|
||||
while (typeof child !== 'undefined' && child !== null) {
|
||||
elements.push(child);
|
||||
|
||||
for (var i = 0; i < paragraphs.length; i++) {
|
||||
node = paragraphs[i];
|
||||
child = child.walk();
|
||||
if (child !== null) {
|
||||
while (typeof child !== 'undefined' && child.parent !== node) {
|
||||
child = child.walk();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < elements.length; i++) {
|
||||
node = elements[i];
|
||||
|
||||
if (node.name == 'p' && node.firstChild) {
|
||||
// Find first text node in paragraph
|
||||
@@ -1002,7 +1042,7 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
// Detect ordered lists 1., a. or ixv.
|
||||
if (isNumericList(nodeText)) {
|
||||
// Parse OL start number
|
||||
var matches = /([0-9])\./.exec(nodeText);
|
||||
var matches = /([0-9]+)\./.exec(nodeText);
|
||||
var start = 1;
|
||||
if (matches) {
|
||||
start = parseInt(matches[1], 10);
|
||||
@@ -1018,6 +1058,13 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
continue;
|
||||
}
|
||||
|
||||
currentListNode = null;
|
||||
} else {
|
||||
// If the root level element isn't a p tag which can be
|
||||
// processed by convertParagraphToLi, it interrupts the
|
||||
// lists, causing a new list to start instead of having
|
||||
// elements from the next list inserted above this tag.
|
||||
prevListNode = currentListNode;
|
||||
currentListNode = null;
|
||||
}
|
||||
}
|
||||
@@ -1152,8 +1199,11 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
|
||||
var validElements = settings.paste_word_valid_elements;
|
||||
if (!validElements) {
|
||||
validElements = '-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,' +
|
||||
'-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br,del';
|
||||
validElements = (
|
||||
'-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' +
|
||||
'-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' +
|
||||
'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody'
|
||||
);
|
||||
}
|
||||
|
||||
// Setup strict schema
|
||||
@@ -1165,6 +1215,7 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
// Add style/class attribute to all element rules since the user might have removed them from
|
||||
// paste_word_valid_elements config option and we need to check them for properties
|
||||
Tools.each(schema.elements, function(rule) {
|
||||
/*eslint dot-notation:0*/
|
||||
if (!rule.attributes["class"]) {
|
||||
rule.attributes["class"] = {};
|
||||
rule.attributesOrder.push("class");
|
||||
@@ -1202,7 +1253,7 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
node = nodes[i];
|
||||
|
||||
className = node.attr('class');
|
||||
if (/^(MsoCommentReference|MsoCommentText|msoDel|MsoCaption)$/i.test(className)) {
|
||||
if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {
|
||||
node.remove();
|
||||
}
|
||||
|
||||
@@ -1261,7 +1312,9 @@ define("tinymce/pasteplugin/WordFilter", [
|
||||
var rootNode = domParser.parse(content);
|
||||
|
||||
// Process DOM
|
||||
convertFakeListsToProperLists(rootNode);
|
||||
if (settings.paste_convert_word_fake_lists !== false) {
|
||||
convertFakeListsToProperLists(rootNode);
|
||||
}
|
||||
|
||||
// Serialize DOM back to HTML
|
||||
e.content = new Serializer({}, schema).serialize(rootNode);
|
||||
@@ -1549,5 +1602,5 @@ define("tinymce/pasteplugin/Plugin", [
|
||||
});
|
||||
});
|
||||
|
||||
expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/WordFilter"]);
|
||||
expose(["tinymce/pasteplugin/Utils"]);
|
||||
})(this);
|
||||
+1
-1
@@ -1 +1 @@
|
||||
!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r<e.length;++r){if(n=s[e[r]]||a(e[r]),!n)throw"module definition dependecy not found: "+e[r];i.push(n)}t.apply(null,i)}function i(e,i,r){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(i===t)throw"invalid module definition, dependencies must be specified";if(r===t)throw"invalid module definition, definition function must be specified";n(i,function(){s[e]=r.apply(null,arguments)})}function r(e){return!!s[e]}function a(t){for(var n=e,i=t.split(/[.\/]/),r=0;r<i.length;++r){if(!n[i[r]])return;n=n[i[r]]}return n}function o(n){for(var i=0;i<n.length;i++){for(var r=e,a=n[i],o=a.split(/[.\/]/),l=0;l<o.length-1;++l)r[o[l]]===t&&(r[o[l]]={}),r=r[o[l]];r[o[o.length-1]]=s[a]}}var s={},l="tinymce/pasteplugin/Utils",c="tinymce/util/Tools",u="tinymce/html/DomParser",d="tinymce/html/Schema",f="tinymce/pasteplugin/Clipboard",p="tinymce/Env",m="tinymce/util/VK",g="tinymce/pasteplugin/WordFilter",v="tinymce/html/Serializer",h="tinymce/html/Node",b="tinymce/pasteplugin/Quirks",y="tinymce/pasteplugin/Plugin",w="tinymce/PluginManager";i(l,[c,u,d],function(e,t,n){function i(t,n){return e.each(n,function(e){t=e.constructor==RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}function r(r){function a(e){var t=e.name,n=e;if("br"===t)return void(l+="\n");if(c[t]&&(l+=" "),u[t])return void(l+=" ");if(3==e.type&&(l+=e.value),!e.shortEnded&&(e=e.firstChild))do a(e);while(e=e.next);d[t]&&n.next&&(l+="\n","p"==t&&(l+="\n"))}var o=new n,s=new t({},o),l="",c=o.getShortEndedElements(),u=e.makeMap("script noscript style textarea video audio iframe object"," "),d=o.getBlockElements();return r=i(r,[/<!\[[^\]]+\]>/g]),a(s.parse(r)),l}function a(e){function t(e,t,n){return t||n?"\xa0":" "}return e=i(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,t],/<br>$/i])}return{filter:i,innerText:r,trimHtml:a}}),i(f,[p,m,l],function(e,t,n){return function(i){function r(e){var t,n=i.dom;if(t=i.fire("BeforePastePreProcess",{content:e}),t=i.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(i.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var r=n.add(i.getBody(),"div",{style:"display:none"},e);t=i.fire("PastePostProcess",{node:r}),n.remove(r),e=t.node.innerHTML}t.isDefaultPrevented()||i.insertContent(e,{merge:i.settings.paste_merge_formats!==!1})}}function a(e){e=i.dom.encode(e).replace(/\r\n/g,"\n");var t=i.dom.getParent(i.selection.getStart(),i.dom.isBlock),a=i.settings.forced_root_block,o;a&&(o=i.dom.createHTML(a,i.settings.forced_root_block_attrs),o=o.substr(0,o.length-3)+">"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!a?e=n.filter(e,[[/\n/g,"<br>"]]):(e=n.filter(e,[[/\n\n/g,"</p>"+o],[/^(.*<\/p>)(<p>)$/,o+"$1"],[/\n/g,"<br />"]]),-1!=e.indexOf("<p>")&&(e=o+e)),r(e)}function o(){var t=i.dom,n=i.getBody(),r=i.dom.getViewPort(i.getWin()),a=r.y,o=20,s;if(y=i.selection.getRng(),i.inline&&(s=i.selection.getScrollContainer(),s&&s.scrollTop>0&&(a=s.scrollTop)),y.getClientRects){var l=y.getClientRects();if(l.length)o=a+(l[0].top-t.getPos(n).y);else{o=a;var c=y.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(o=t.getPos(c,s||n).y))}}b=t.add(i.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+o+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},P),(e.ie||e.gecko)&&t.setStyle(b,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(b,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),b.focus(),i.selection.select(b,!0)}function s(){if(b){for(var e;e=i.dom.get("mcepastebin");)i.dom.remove(e),i.dom.unbind(e);y&&i.selection.setRng(y)}b=y=null}function l(){var e="",t,n,r,a;for(t=i.dom.select("div[id=mcepastebin]"),n=0;n<t.length;n++)r=t[n],r.firstChild&&"mcepastebin"==r.firstChild.id&&(r=r.firstChild),a=r.innerHTML,e!=P&&(e+=a);return e}function c(e){var t={};if(e){if(e.getData){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n)}if(e.types)for(var i=0;i<e.types.length;i++){var r=e.types[i];t[r]=e.getData(r)}}return t}function u(e){return c(e.clipboardData||i.getDoc().dataTransfer)}function d(e,t){function n(n){function a(){t&&(i.selection.setRng(t),t=null),r('<img src="'+l.result+'">')}var o,s,l;if(n)for(o=0;o<n.length;o++)if(s=n[o],/^image\/(jpeg|png|gif)$/.test(s.type))return l=new FileReader,l.onload=a,l.readAsDataURL(s.getAsFile?s.getAsFile():s),e.preventDefault(),!0}var a=e.clipboardData||e.dataTransfer;return i.settings.paste_data_images&&a?n(a.items)||n(a.files):void 0}function f(e){var t=e.clipboardData;return-1!=navigator.userAgent.indexOf("Android")&&t&&t.items&&0===t.items.length}function p(e){var t=i.getDoc(),n,r;if(t.caretPositionFromPoint)r=t.caretPositionFromPoint(e.clientX,e.clientY),n=t.createRange(),n.setStart(r.offsetNode,r.offset),n.collapse(!0);else if(t.caretRangeFrLine truncated
|
||||
!function(a,b){"use strict";function c(a,b){for(var c,d=[],f=0;f<a.length;++f){if(c=g[a[f]]||e(a[f]),!c)throw"module definition dependecy not found: "+a[f];d.push(c)}b.apply(null,d)}function d(a,d,e){if("string"!=typeof a)throw"invalid module definition, module id must be defined and be a string";if(d===b)throw"invalid module definition, dependencies must be specified";if(e===b)throw"invalid module definition, definition function must be specified";c(d,function(){g[a]=e.apply(null,arguments)})}function e(b){for(var c=a,d=b.split(/[.\/]/),e=0;e<d.length;++e){if(!c[d[e]])return;c=c[d[e]]}return c}function f(c){for(var d=0;d<c.length;d++){for(var e=a,f=c[d],h=f.split(/[.\/]/),i=0;i<h.length-1;++i)e[h[i]]===b&&(e[h[i]]={}),e=e[h[i]];e[h[h.length-1]]=g[f]}}var g={};d("tinymce/pasteplugin/Utils",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema"],function(a,b,c){function d(b,c){return a.each(c,function(a){b=a.constructor==RegExp?b.replace(a,""):b.replace(a[0],a[1])}),b}function e(e){function f(a){var b=a.name,c=a;if("br"===b)return void(i+="\n");if(j[b]&&(i+=" "),k[b])return void(i+=" ");if(3==a.type&&(i+=a.value),!a.shortEnded&&(a=a.firstChild))do f(a);while(a=a.next);l[b]&&c.next&&(i+="\n","p"==b&&(i+="\n"))}var g=new c,h=new b({},g),i="",j=g.getShortEndedElements(),k=a.makeMap("script noscript style textarea video audio iframe object"," "),l=g.getBlockElements();return e=d(e,[/<!\[[^\]]+\]>/g]),f(h.parse(e)),i}function f(a){function b(a,b,c){return b||c?"\xa0":" "}return a=d(a,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,b],/<br>$/i])}return{filter:d,innerText:e,trimHtml:f}}),d("tinymce/pasteplugin/Clipboard",["tinymce/Env","tinymce/dom/RangeUtils","tinymce/util/VK","tinymce/pasteplugin/Utils"],function(a,b,c,d){return function(e){function f(a){var b,c=e.dom;if(b=e.fire("BeforePastePreProcess",{content:a}),b=e.fire("PastePreProcess",b),a=b.content,!b.isDefaultPrevented()){if(e.hasEventListeners("PastePostProcess")&&!b.isDefaultPrevented()){var d=c.add(e.getBody(),"div",{style:"display:none"},a);b=e.fire("PastePostProcess",{node:d}),c.remove(d),a=b.node.innerHTML}b.isDefaultPrevented()||e.insertContent(a,{merge:e.settings.paste_merge_formats!==!1})}}function g(a){a=e.dom.encode(a).replace(/\r\n/g,"\n");var b,c=e.dom.getParent(e.selection.getStart(),e.dom.isBlock),g=e.settings.forced_root_block;g&&(b=e.dom.createHTML(g,e.settings.forced_root_block_attrs),b=b.substr(0,b.length-3)+">"),c&&/^(PRE|DIV)$/.test(c.nodeName)||!g?a=d.filter(a,[[/\n/g,"<br>"]]):(a=d.filter(a,[[/\n\n/g,"</p>"+b],[/^(.*<\/p>)(<p>)$/,b+"$1"],[/\n/g,"<br />"]]),-1!=a.indexOf("<p>")&&(a=b+a)),f(a)}function h(){function b(a){var b,c,e,f=a.startContainer;if(b=a.getClientRects(),b.length)return b[0];if(a.collapsed&&1==f.nodeType){for(e=f.childNodes[t.startOffset];e&&3==e.nodeType&&!e.data.length;)e=e.nextSibling;if(e)return"BR"==e.tagName&&(c=d.doc.createTextNode("\ufeff"),e.parentNode.insertBefore(c,e),a=d.createRng(),a.setStartBefore(c),a.setEndAfter(c),b=a.getClientRects(),d.remove(c)),b.length?b[0]:void 0}}var c,d=e.dom,f=e.getBody(),g=e.dom.getViewPort(e.getWin()),h=g.y,i=20;if(t=e.selection.getRng(),e.inline&&(c=e.selection.getScrollContainer(),c&&c.scrollTop>0&&(h=c.scrollTop)),t.getClientRects){var j=b(t);if(j)i=h+(j.top-d.getPos(f).y);else{i=h;var k=t.startContainer;k&&(3==k.nodeType&&k.parentNode!=f&&(k=k.parentNode),1==k.nodeType&&(i=d.getPos(k,c||f).y))}}s=d.add(e.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+i+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},y),(a.ie||a.gecko)&&d.setStyle(s,"left","rtl"==d.getStyle(f,"direction",!0)?65535:-65535),d.bind(s,"beforedeactivate focusin focusout",function(a){a.stopPropagation()}),s.focus(),e.selection.select(s,!0)}function i(){if(s){for(var a;a=e.dom.get("mcepastebin");)e.dom.remove(a),e.dom.unbind(a);t&&e.selection.setRng(t)}s=t=null}function j(){var a,b,c,d,f="";for(a=e.dom.select("div[id=mcepastebin]"),b=0;b<a.length;b++)c=a[b],c.firstChild&&"mcepastebin"==c.firstChild.id&&(c=c.firstChild),d=c.innerHTML,f!=y&&(f+=d);return f}function k(a){var b={};if(a){if(a.getData){var c=a.getData("Text");c&&c.length>0&&-1==c.indexOf(z)&&(b["text/plain"]=c)}if(a.types)for(var d=0;d<a.types.length;d++){var e=a.types[d];b[e]=a.getData(e)}}return b}function l(a){return k(a.clipboardData||e.getDoc().dataTransfer)}function m(a,b){function c(c){function d(a){b&&(e.selection.setRng(b),b=null),f('<img src="'+a.result+'">')}var g,h,i,j=!1;if(c)for(g=0;g<c.length;g++)h=c[g],/^image\/(jpeg|png|gif|bmp)$/.test(h.type)&&(i=new FileReader,i.onload=d.bind(null,i),i.readAsDataURL(h.getAsFile?h.getAsFile():h),a.preventDefault(),j=!0);return j}var d=a.clipboardData||a.dataTransfer;return e.settings.paste_data_images&&d?c(d.items)||c(d.files):void 0}function n(a){var b=a.clipboardData;return-1!=navigator.userAgent.Line truncated
|
||||
Reference in new issue
Block a user