X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/af50974463450c98503e763a7836a50e260461a9..refs/tags/wordpress-4.3.1:/wp-includes/js/tinymce/plugins/paste/plugin.js diff --git a/wp-includes/js/tinymce/plugins/paste/plugin.js b/wp-includes/js/tinymce/plugins/paste/plugin.js index eea165d1..9c504700 100644 --- a/wp-includes/js/tinymce/plugins/paste/plugin.js +++ b/wp-includes/js/tinymce/plugins/paste/plugin.js @@ -63,10 +63,12 @@ } function expose(ids) { - for (var i = 0; i < ids.length; i++) { - var target = exports; - var id = ids[i]; - var fragments = id.split(/[.\/]/); + var i, target, id, fragments, privateModules; + + for (i = 0; i < ids.length; i++) { + target = exports; + id = ids[i]; + fragments = id.split(/[.\/]/); for (var fi = 0; fi < fragments.length - 1; ++fi) { if (target[fragments[fi]] === undefined) { @@ -78,6 +80,21 @@ target[fragments[fragments.length - 1]] = modules[id]; } + + // Expose private modules for unit tests + if (exports.AMDLC_TESTS) { + privateModules = exports.privateModules || {}; + + for (id in modules) { + privateModules[id] = modules[id]; + } + + for (i = 0; i < ids.length; i++) { + delete privateModules[ids[i]]; + } + + exports.privateModules = privateModules; + } } // Included from: js/tinymce/plugins/paste/classes/Utils.js @@ -85,8 +102,8 @@ /** * Utils.js * - * Copyright, Moxiecode Systems AB * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing @@ -95,8 +112,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", @@ -218,8 +234,8 @@ define("tinymce/pasteplugin/Utils", [ /** * Clipboard.js * - * Copyright, Moxiecode Systems AB * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing @@ -246,12 +262,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 @@ -280,7 +298,7 @@ define("tinymce/pasteplugin/Clipboard", [ } if (!args.isDefaultPrevented()) { - editor.insertContent(html, {merge: editor.settings.paste_merge_formats !== false}); + editor.insertContent(html, {merge: editor.settings.paste_merge_formats !== false, data: {paste: true}}); } } } @@ -508,7 +526,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; + } } } @@ -546,9 +566,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; @@ -561,16 +581,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) { @@ -591,28 +613,7 @@ define("tinymce/pasteplugin/Clipboard", [ } 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) { @@ -807,16 +808,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(); } }); } @@ -829,19 +822,40 @@ define("tinymce/pasteplugin/Clipboard", [ // Remove all data images from paste for example from Gecko // except internal images like video elements - editor.parser.addNodeFilter('img', function(nodes) { - if (!editor.settings.paste_data_images) { + editor.parser.addNodeFilter('img', function(nodes, name, args) { + function isPasteInsert(args) { + return args.data && args.data.paste === true; + } + + function remove(node) { + if (!node.attr('data-mce-object') && src !== Env.transparentSrc) { + node.remove(); + } + } + + function isWebKitFakeUrl(src) { + return src.indexOf("webkit-fake-url") === 0; + } + + function isDataUri(src) { + return src.indexOf("data:") === 0; + } + + if (!editor.settings.paste_data_images && isPasteInsert(args)) { var i = nodes.length; while (i--) { var src = nodes[i].attributes.map.src; - // Some browsers automatically produce data uris on paste + if (!src) { + continue; + } + // Safari on Mac produces webkit-fake-url see: https://bugs.webkit.org/show_bug.cgi?id=49141 - if (src && /^(data:image|webkit\-fake\-url)/.test(src)) { - if (!nodes[i].attr('data-mce-object') && src !== Env.transparentSrc) { - nodes[i].remove(); - } + if (isWebKitFakeUrl(src)) { + remove(nodes[i]); + } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) { + remove(nodes[i]); } } } @@ -855,8 +869,8 @@ define("tinymce/pasteplugin/Clipboard", [ /** * WordFilter.js * - * Copyright, Moxiecode Systems AB * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing @@ -865,7 +879,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", [ @@ -916,7 +930,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) { @@ -925,6 +939,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(/]+id="?docs-internal-[^>]*>/gi, ''); + content = content.replace(/
/gi, ''); + retainStyleProperties = settings.paste_retain_style_properties; if (retainStyleProperties) { validStyles = Tools.makeMap(retainStyleProperties.split(/[, ]/)); @@ -1028,7 +1046,7 @@ 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+/); } @@ -1235,6 +1253,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"); @@ -1272,7 +1291,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(); } @@ -1351,8 +1370,8 @@ define("tinymce/pasteplugin/WordFilter", [ /** * Quirks.js * - * Copyright, Moxiecode Systems AB * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing @@ -1513,8 +1532,8 @@ define("tinymce/pasteplugin/Quirks", [ /** * Plugin.js * - * Copyright, Moxiecode Systems AB * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing @@ -1621,5 +1640,5 @@ define("tinymce/pasteplugin/Plugin", [ }); }); -expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/WordFilter"]); +expose(["tinymce/pasteplugin/Utils"]); })(this); \ No newline at end of file