| (function () { |
| var paste = (function (domGlobals) { |
| 'use strict'; |
|
|
| var Cell = function (initial) { |
| var value = initial; |
| var get = function () { |
| return value; |
| }; |
| var set = function (v) { |
| value = v; |
| }; |
| var clone = function () { |
| return Cell(get()); |
| }; |
| return { |
| get: get, |
| set: set, |
| clone: clone |
| }; |
| }; |
|
|
| var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager'); |
|
|
| var hasProPlugin = function (editor) { |
| if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) { |
| if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) { |
| domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \'paste\' from the \'plugins\' option.'); |
| } |
| return true; |
| } else { |
| return false; |
| } |
| }; |
| var DetectProPlugin = { hasProPlugin: hasProPlugin }; |
|
|
| var get = function (clipboard, quirks) { |
| return { |
| clipboard: clipboard, |
| quirks: quirks |
| }; |
| }; |
| var Api = { get: get }; |
|
|
| var firePastePreProcess = function (editor, html, internal, isWordHtml) { |
| return editor.fire('PastePreProcess', { |
| content: html, |
| internal: internal, |
| wordContent: isWordHtml |
| }); |
| }; |
| var firePastePostProcess = function (editor, node, internal, isWordHtml) { |
| return editor.fire('PastePostProcess', { |
| node: node, |
| internal: internal, |
| wordContent: isWordHtml |
| }); |
| }; |
| var firePastePlainTextToggle = function (editor, state) { |
| return editor.fire('PastePlainTextToggle', { state: state }); |
| }; |
| var firePaste = function (editor, ieFake) { |
| return editor.fire('paste', { ieFake: ieFake }); |
| }; |
| var Events = { |
| firePastePreProcess: firePastePreProcess, |
| firePastePostProcess: firePastePostProcess, |
| firePastePlainTextToggle: firePastePlainTextToggle, |
| firePaste: firePaste |
| }; |
|
|
| var shouldPlainTextInform = function (editor) { |
| return editor.getParam('paste_plaintext_inform', true); |
| }; |
| var shouldBlockDrop = function (editor) { |
| return editor.getParam('paste_block_drop', false); |
| }; |
| var shouldPasteDataImages = function (editor) { |
| return editor.getParam('paste_data_images', false); |
| }; |
| var shouldFilterDrop = function (editor) { |
| return editor.getParam('paste_filter_drop', true); |
| }; |
| var getPreProcess = function (editor) { |
| return editor.getParam('paste_preprocess'); |
| }; |
| var getPostProcess = function (editor) { |
| return editor.getParam('paste_postprocess'); |
| }; |
| var getWebkitStyles = function (editor) { |
| return editor.getParam('paste_webkit_styles'); |
| }; |
| var shouldRemoveWebKitStyles = function (editor) { |
| return editor.getParam('paste_remove_styles_if_webkit', true); |
| }; |
| var shouldMergeFormats = function (editor) { |
| return editor.getParam('paste_merge_formats', true); |
| }; |
| var isSmartPasteEnabled = function (editor) { |
| return editor.getParam('smart_paste', true); |
| }; |
| var isPasteAsTextEnabled = function (editor) { |
| return editor.getParam('paste_as_text', false); |
| }; |
| var getRetainStyleProps = function (editor) { |
| return editor.getParam('paste_retain_style_properties'); |
| }; |
| var getWordValidElements = function (editor) { |
| var defaultValidElements = '-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'; |
| return editor.getParam('paste_word_valid_elements', defaultValidElements); |
| }; |
| var shouldConvertWordFakeLists = function (editor) { |
| return editor.getParam('paste_convert_word_fake_lists', true); |
| }; |
| var shouldUseDefaultFilters = function (editor) { |
| return editor.getParam('paste_enable_default_filters', true); |
| }; |
| var Settings = { |
| shouldPlainTextInform: shouldPlainTextInform, |
| shouldBlockDrop: shouldBlockDrop, |
| shouldPasteDataImages: shouldPasteDataImages, |
| shouldFilterDrop: shouldFilterDrop, |
| getPreProcess: getPreProcess, |
| getPostProcess: getPostProcess, |
| getWebkitStyles: getWebkitStyles, |
| shouldRemoveWebKitStyles: shouldRemoveWebKitStyles, |
| shouldMergeFormats: shouldMergeFormats, |
| isSmartPasteEnabled: isSmartPasteEnabled, |
| isPasteAsTextEnabled: isPasteAsTextEnabled, |
| getRetainStyleProps: getRetainStyleProps, |
| getWordValidElements: getWordValidElements, |
| shouldConvertWordFakeLists: shouldConvertWordFakeLists, |
| shouldUseDefaultFilters: shouldUseDefaultFilters |
| }; |
|
|
| var shouldInformUserAboutPlainText = function (editor, userIsInformedState) { |
| return userIsInformedState.get() === false && Settings.shouldPlainTextInform(editor); |
| }; |
| var displayNotification = function (editor, message) { |
| editor.notificationManager.open({ |
| text: editor.translate(message), |
| type: 'info' |
| }); |
| }; |
| var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) { |
| if (clipboard.pasteFormat.get() === 'text') { |
| clipboard.pasteFormat.set('html'); |
| Events.firePastePlainTextToggle(editor, false); |
| } else { |
| clipboard.pasteFormat.set('text'); |
| Events.firePastePlainTextToggle(editor, true); |
| if (shouldInformUserAboutPlainText(editor, userIsInformedState)) { |
| displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.'); |
| userIsInformedState.set(true); |
| } |
| } |
| editor.focus(); |
| }; |
| var Actions = { togglePlainTextPaste: togglePlainTextPaste }; |
|
|
| var register = function (editor, clipboard, userIsInformedState) { |
| editor.addCommand('mceTogglePlainTextPaste', function () { |
| Actions.togglePlainTextPaste(editor, clipboard, userIsInformedState); |
| }); |
| editor.addCommand('mceInsertClipboardContent', function (ui, value) { |
| if (value.content) { |
| clipboard.pasteHtml(value.content, value.internal); |
| } |
| if (value.text) { |
| clipboard.pasteText(value.text); |
| } |
| }); |
| }; |
| var Commands = { register: register }; |
|
|
| var global$2 = tinymce.util.Tools.resolve('tinymce.Env'); |
|
|
| var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay'); |
|
|
| var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); |
|
|
| var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK'); |
|
|
| var internalMimeType = 'x-tinymce/html'; |
| var internalMark = '<!-- ' + internalMimeType + ' -->'; |
| var mark = function (html) { |
| return internalMark + html; |
| }; |
| var unmark = function (html) { |
| return html.replace(internalMark, ''); |
| }; |
| var isMarked = function (html) { |
| return html.indexOf(internalMark) !== -1; |
| }; |
| var InternalHtml = { |
| mark: mark, |
| unmark: unmark, |
| isMarked: isMarked, |
| internalHtmlMime: function () { |
| return internalMimeType; |
| } |
| }; |
|
|
| var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities'); |
|
|
| var isPlainText = function (text) { |
| return !/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(text); |
| }; |
| var toBRs = function (text) { |
| return text.replace(/\r?\n/g, '<br>'); |
| }; |
| var openContainer = function (rootTag, rootAttrs) { |
| var key; |
| var attrs = []; |
| var tag = '<' + rootTag; |
| if (typeof rootAttrs === 'object') { |
| for (key in rootAttrs) { |
| if (rootAttrs.hasOwnProperty(key)) { |
| attrs.push(key + '="' + global$6.encodeAllRaw(rootAttrs[key]) + '"'); |
| } |
| } |
| if (attrs.length) { |
| tag += ' ' + attrs.join(' '); |
| } |
| } |
| return tag + '>'; |
| }; |
| var toBlockElements = function (text, rootTag, rootAttrs) { |
| var blocks = text.split(/\n\n/); |
| var tagOpen = openContainer(rootTag, rootAttrs); |
| var tagClose = '</' + rootTag + '>'; |
| var paragraphs = global$4.map(blocks, function (p) { |
| return p.split(/\n/).join('<br />'); |
| }); |
| var stitch = function (p) { |
| return tagOpen + p + tagClose; |
| }; |
| return paragraphs.length === 1 ? paragraphs[0] : global$4.map(paragraphs, stitch).join(''); |
| }; |
| var convert = function (text, rootTag, rootAttrs) { |
| return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text); |
| }; |
| var Newlines = { |
| isPlainText: isPlainText, |
| convert: convert, |
| toBRs: toBRs, |
| toBlockElements: toBlockElements |
| }; |
|
|
| var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser'); |
|
|
| var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer'); |
|
|
| var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node'); |
|
|
| var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema'); |
|
|
| function filter(content, items) { |
| global$4.each(items, function (v) { |
| if (v.constructor === RegExp) { |
| content = content.replace(v, ''); |
| } else { |
| content = content.replace(v[0], v[1]); |
| } |
| }); |
| return content; |
| } |
| function innerText(html) { |
| var schema = global$a(); |
| var domParser = global$7({}, schema); |
| var text = ''; |
| var shortEndedElements = schema.getShortEndedElements(); |
| var ignoreElements = global$4.makeMap('script noscript style textarea video audio iframe object', ' '); |
| var blockElements = schema.getBlockElements(); |
| function walk(node) { |
| var name = node.name, currentNode = node; |
| if (name === 'br') { |
| text += '\n'; |
| return; |
| } |
| if (name === 'wbr') { |
| return; |
| } |
| if (shortEndedElements[name]) { |
| text += ' '; |
| } |
| if (ignoreElements[name]) { |
| text += ' '; |
| return; |
| } |
| if (node.type === 3) { |
| text += node.value; |
| } |
| if (!node.shortEnded) { |
| if (node = node.firstChild) { |
| do { |
| walk(node); |
| } while (node = node.next); |
| } |
| } |
| if (blockElements[name] && currentNode.next) { |
| text += '\n'; |
| if (name === 'p') { |
| text += '\n'; |
| } |
| } |
| } |
| html = filter(html, [/<!\[[^\]]+\]>/g]); |
| walk(domParser.parse(html)); |
| return text; |
| } |
| function trimHtml(html) { |
| function trimSpaces(all, s1, s2) { |
| if (!s1 && !s2) { |
| return ' '; |
| } |
| return '\xA0'; |
| } |
| html = filter(html, [ |
| /^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/ig, |
| /<!--StartFragment-->|<!--EndFragment-->/g, |
| [ |
| /( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g, |
| trimSpaces |
| ], |
| /<br class="Apple-interchange-newline">/g, |
| /<br>$/i |
| ]); |
| return html; |
| } |
| function createIdGenerator(prefix) { |
| var count = 0; |
| return function () { |
| return prefix + count++; |
| }; |
| } |
| var isMsEdge = function () { |
| return domGlobals.navigator.userAgent.indexOf(' Edge/') !== -1; |
| }; |
| var Utils = { |
| filter: filter, |
| innerText: innerText, |
| trimHtml: trimHtml, |
| createIdGenerator: createIdGenerator, |
| isMsEdge: isMsEdge |
| }; |
|
|
| function isWordContent(content) { |
| return /<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(content) || /class="OutlineElement/.test(content) || /id="?docs\-internal\-guid\-/.test(content); |
| } |
| function isNumericList(text) { |
| var found, patterns; |
| patterns = [ |
| /^[IVXLMCD]{1,2}\.[ \u00a0]/, |
| /^[ivxlmcd]{1,2}\.[ \u00a0]/, |
| /^[a-z]{1,2}[\.\)][ \u00a0]/, |
| /^[A-Z]{1,2}[\.\)][ \u00a0]/, |
| /^[0-9]+\.[ \u00a0]/, |
| /^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/, |
| /^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/ |
| ]; |
| text = text.replace(/^[\u00a0 ]+/, ''); |
| global$4.each(patterns, function (pattern) { |
| if (pattern.test(text)) { |
| found = true; |
| return false; |
| } |
| }); |
| return found; |
| } |
| function isBulletList(text) { |
| return /^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(text); |
| } |
| function convertFakeListsToProperLists(node) { |
| var currentListNode, prevListNode, lastLevel = 1; |
| function getText(node) { |
| var txt = ''; |
| if (node.type === 3) { |
| return node.value; |
| } |
| if (node = node.firstChild) { |
| do { |
| txt += getText(node); |
| } while (node = node.next); |
| } |
| return txt; |
| } |
| function trimListStart(node, regExp) { |
| if (node.type === 3) { |
| if (regExp.test(node.value)) { |
| node.value = node.value.replace(regExp, ''); |
| return false; |
| } |
| } |
| if (node = node.firstChild) { |
| do { |
| if (!trimListStart(node, regExp)) { |
| return false; |
| } |
| } while (node = node.next); |
| } |
| return true; |
| } |
| function removeIgnoredNodes(node) { |
| if (node._listIgnore) { |
| node.remove(); |
| return; |
| } |
| if (node = node.firstChild) { |
| do { |
| removeIgnoredNodes(node); |
| } while (node = node.next); |
| } |
| } |
| function convertParagraphToLi(paragraphNode, listName, start) { |
| var level = paragraphNode._listLevel || lastLevel; |
| if (level !== lastLevel) { |
| if (level < lastLevel) { |
| if (currentListNode) { |
| currentListNode = currentListNode.parent.parent; |
| } |
| } else { |
| prevListNode = currentListNode; |
| currentListNode = null; |
| } |
| } |
| if (!currentListNode || currentListNode.name !== listName) { |
| prevListNode = prevListNode || currentListNode; |
| currentListNode = new global$9(listName, 1); |
| if (start > 1) { |
| currentListNode.attr('start', '' + start); |
| } |
| paragraphNode.wrap(currentListNode); |
| } else { |
| currentListNode.append(paragraphNode); |
| } |
| paragraphNode.name = 'li'; |
| if (level > lastLevel && prevListNode) { |
| prevListNode.lastChild.append(currentListNode); |
| } |
| lastLevel = level; |
| removeIgnoredNodes(paragraphNode); |
| trimListStart(paragraphNode, /^\u00a0+/); |
| trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/); |
| trimListStart(paragraphNode, /^\u00a0+/); |
| } |
| var elements = []; |
| var child = node.firstChild; |
| while (typeof child !== 'undefined' && child !== null) { |
| elements.push(child); |
| 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) { |
| var nodeText = getText(node); |
| if (isBulletList(nodeText)) { |
| convertParagraphToLi(node, 'ul'); |
| continue; |
| } |
| if (isNumericList(nodeText)) { |
| var matches = /([0-9]+)\./.exec(nodeText); |
| var start = 1; |
| if (matches) { |
| start = parseInt(matches[1], 10); |
| } |
| convertParagraphToLi(node, 'ol', start); |
| continue; |
| } |
| if (node._listLevel) { |
| convertParagraphToLi(node, 'ul', 1); |
| continue; |
| } |
| currentListNode = null; |
| } else { |
| prevListNode = currentListNode; |
| currentListNode = null; |
| } |
| } |
| } |
| function filterStyles(editor, validStyles, node, styleValue) { |
| var outputStyles = {}, matches; |
| var styles = editor.dom.parseStyle(styleValue); |
| global$4.each(styles, function (value, name) { |
| switch (name) { |
| case 'mso-list': |
| matches = /\w+ \w+([0-9]+)/i.exec(styleValue); |
| if (matches) { |
| node._listLevel = parseInt(matches[1], 10); |
| } |
| if (/Ignore/i.test(value) && node.firstChild) { |
| node._listIgnore = true; |
| node.firstChild._listIgnore = true; |
| } |
| break; |
| case 'horiz-align': |
| name = 'text-align'; |
| break; |
| case 'vert-align': |
| name = 'vertical-align'; |
| break; |
| case 'font-color': |
| case 'mso-foreground': |
| name = 'color'; |
| break; |
| case 'mso-background': |
| case 'mso-highlight': |
| name = 'background'; |
| break; |
| case 'font-weight': |
| case 'font-style': |
| if (value !== 'normal') { |
| outputStyles[name] = value; |
| } |
| return; |
| case 'mso-element': |
| if (/^(comment|comment-list)$/i.test(value)) { |
| node.remove(); |
| return; |
| } |
| break; |
| } |
| if (name.indexOf('mso-comment') === 0) { |
| node.remove(); |
| return; |
| } |
| if (name.indexOf('mso-') === 0) { |
| return; |
| } |
| if (Settings.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) { |
| outputStyles[name] = value; |
| } |
| }); |
| if (/(bold)/i.test(outputStyles['font-weight'])) { |
| delete outputStyles['font-weight']; |
| node.wrap(new global$9('b', 1)); |
| } |
| if (/(italic)/i.test(outputStyles['font-style'])) { |
| delete outputStyles['font-style']; |
| node.wrap(new global$9('i', 1)); |
| } |
| outputStyles = editor.dom.serializeStyle(outputStyles, node.name); |
| if (outputStyles) { |
| return outputStyles; |
| } |
| return null; |
| } |
| var filterWordContent = function (editor, content) { |
| var retainStyleProperties, validStyles; |
| retainStyleProperties = Settings.getRetainStyleProps(editor); |
| if (retainStyleProperties) { |
| validStyles = global$4.makeMap(retainStyleProperties.split(/[, ]/)); |
| } |
| content = Utils.filter(content, [ |
| /<br class="?Apple-interchange-newline"?>/gi, |
| /<b[^>]+id="?docs-internal-[^>]*>/gi, |
| /<!--[\s\S]+?-->/gi, |
| /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, |
| [ |
| /<(\/?)s>/gi, |
| '<$1strike>' |
| ], |
| [ |
| / /gi, |
| '\xA0' |
| ], |
| [ |
| /<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi, |
| function (str, spaces) { |
| return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join('\xA0') : ''; |
| } |
| ] |
| ]); |
| var validElements = Settings.getWordValidElements(editor); |
| var schema = global$a({ |
| valid_elements: validElements, |
| valid_children: '-li[p]' |
| }); |
| global$4.each(schema.elements, function (rule) { |
| if (!rule.attributes.class) { |
| rule.attributes.class = {}; |
| rule.attributesOrder.push('class'); |
| } |
| if (!rule.attributes.style) { |
| rule.attributes.style = {}; |
| rule.attributesOrder.push('style'); |
| } |
| }); |
| var domParser = global$7({}, schema); |
| domParser.addAttributeFilter('style', function (nodes) { |
| var i = nodes.length, node; |
| while (i--) { |
| node = nodes[i]; |
| node.attr('style', filterStyles(editor, validStyles, node, node.attr('style'))); |
| if (node.name === 'span' && node.parent && !node.attributes.length) { |
| node.unwrap(); |
| } |
| } |
| }); |
| domParser.addAttributeFilter('class', function (nodes) { |
| var i = nodes.length, node, className; |
| while (i--) { |
| node = nodes[i]; |
| className = node.attr('class'); |
| if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) { |
| node.remove(); |
| } |
| node.attr('class', null); |
| } |
| }); |
| domParser.addNodeFilter('del', function (nodes) { |
| var i = nodes.length; |
| while (i--) { |
| nodes[i].remove(); |
| } |
| }); |
| domParser.addNodeFilter('a', function (nodes) { |
| var i = nodes.length, node, href, name; |
| while (i--) { |
| node = nodes[i]; |
| href = node.attr('href'); |
| name = node.attr('name'); |
| if (href && href.indexOf('#_msocom_') !== -1) { |
| node.remove(); |
| continue; |
| } |
| if (href && href.indexOf('file://') === 0) { |
| href = href.split('#')[1]; |
| if (href) { |
| href = '#' + href; |
| } |
| } |
| if (!href && !name) { |
| node.unwrap(); |
| } else { |
| if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) { |
| node.unwrap(); |
| continue; |
| } |
| node.attr({ |
| href: href, |
| name: name |
| }); |
| } |
| } |
| }); |
| var rootNode = domParser.parse(content); |
| if (Settings.shouldConvertWordFakeLists(editor)) { |
| convertFakeListsToProperLists(rootNode); |
| } |
| content = global$8({ validate: editor.settings.validate }, schema).serialize(rootNode); |
| return content; |
| }; |
| var preProcess = function (editor, content) { |
| return Settings.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content; |
| }; |
| var WordFilter = { |
| preProcess: preProcess, |
| isWordContent: isWordContent |
| }; |
|
|
| var preProcess$1 = function (editor, html) { |
| var parser = global$7({}, editor.schema); |
| parser.addNodeFilter('meta', function (nodes) { |
| global$4.each(nodes, function (node) { |
| return node.remove(); |
| }); |
| }); |
| var fragment = parser.parse(html, { |
| forced_root_block: false, |
| isRootContent: true |
| }); |
| return global$8({ validate: editor.settings.validate }, editor.schema).serialize(fragment); |
| }; |
| var processResult = function (content, cancelled) { |
| return { |
| content: content, |
| cancelled: cancelled |
| }; |
| }; |
| var postProcessFilter = function (editor, html, internal, isWordHtml) { |
| var tempBody = editor.dom.create('div', { style: 'display:none' }, html); |
| var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml); |
| return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented()); |
| }; |
| var filterContent = function (editor, content, internal, isWordHtml) { |
| var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml); |
| var filteredContent = preProcess$1(editor, preProcessArgs.content); |
| if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) { |
| return postProcessFilter(editor, filteredContent, internal, isWordHtml); |
| } else { |
| return processResult(filteredContent, preProcessArgs.isDefaultPrevented()); |
| } |
| }; |
| var process = function (editor, html, internal) { |
| var isWordHtml = WordFilter.isWordContent(html); |
| var content = isWordHtml ? WordFilter.preProcess(editor, html) : html; |
| return filterContent(editor, content, internal, isWordHtml); |
| }; |
| var ProcessFilters = { process: process }; |
|
|
| var pasteHtml = function (editor, html) { |
| editor.insertContent(html, { |
| merge: Settings.shouldMergeFormats(editor), |
| paste: true |
| }); |
| return true; |
| }; |
| var isAbsoluteUrl = function (url) { |
| return /^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(url); |
| }; |
| var isImageUrl = function (url) { |
| return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url); |
| }; |
| var createImage = function (editor, url, pasteHtmlFn) { |
| editor.undoManager.extra(function () { |
| pasteHtmlFn(editor, url); |
| }, function () { |
| editor.insertContent('<img src="' + url + '">'); |
| }); |
| return true; |
| }; |
| var createLink = function (editor, url, pasteHtmlFn) { |
| editor.undoManager.extra(function () { |
| pasteHtmlFn(editor, url); |
| }, function () { |
| editor.execCommand('mceInsertLink', false, url); |
| }); |
| return true; |
| }; |
| var linkSelection = function (editor, html, pasteHtmlFn) { |
| return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false; |
| }; |
| var insertImage = function (editor, html, pasteHtmlFn) { |
| return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false; |
| }; |
| var smartInsertContent = function (editor, html) { |
| global$4.each([ |
| linkSelection, |
| insertImage, |
| pasteHtml |
| ], function (action) { |
| return action(editor, html, pasteHtml) !== true; |
| }); |
| }; |
| var insertContent = function (editor, html) { |
| if (Settings.isSmartPasteEnabled(editor) === false) { |
| pasteHtml(editor, html); |
| } else { |
| smartInsertContent(editor, html); |
| } |
| }; |
| var SmartPaste = { |
| isImageUrl: isImageUrl, |
| isAbsoluteUrl: isAbsoluteUrl, |
| insertContent: insertContent |
| }; |
|
|
| var noop = function () { |
| }; |
| var constant = function (value) { |
| return function () { |
| return value; |
| }; |
| }; |
| function curry(fn) { |
| var initialArgs = []; |
| for (var _i = 1; _i < arguments.length; _i++) { |
| initialArgs[_i - 1] = arguments[_i]; |
| } |
| return function () { |
| var restArgs = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| restArgs[_i] = arguments[_i]; |
| } |
| var all = initialArgs.concat(restArgs); |
| return fn.apply(null, all); |
| }; |
| } |
| var never = constant(false); |
| var always = constant(true); |
|
|
| var none = function () { |
| return NONE; |
| }; |
| var NONE = function () { |
| var eq = function (o) { |
| return o.isNone(); |
| }; |
| var call = function (thunk) { |
| return thunk(); |
| }; |
| var id = function (n) { |
| return n; |
| }; |
| var me = { |
| fold: function (n, s) { |
| return n(); |
| }, |
| is: never, |
| isSome: never, |
| isNone: always, |
| getOr: id, |
| getOrThunk: call, |
| getOrDie: function (msg) { |
| throw new Error(msg || 'error: getOrDie called on none.'); |
| }, |
| getOrNull: constant(null), |
| getOrUndefined: constant(undefined), |
| or: id, |
| orThunk: call, |
| map: none, |
| each: noop, |
| bind: none, |
| exists: never, |
| forall: always, |
| filter: none, |
| equals: eq, |
| equals_: eq, |
| toArray: function () { |
| return []; |
| }, |
| toString: constant('none()') |
| }; |
| if (Object.freeze) { |
| Object.freeze(me); |
| } |
| return me; |
| }(); |
| var some = function (a) { |
| var constant_a = constant(a); |
| var self = function () { |
| return me; |
| }; |
| var bind = function (f) { |
| return f(a); |
| }; |
| var me = { |
| fold: function (n, s) { |
| return s(a); |
| }, |
| is: function (v) { |
| return a === v; |
| }, |
| isSome: always, |
| isNone: never, |
| getOr: constant_a, |
| getOrThunk: constant_a, |
| getOrDie: constant_a, |
| getOrNull: constant_a, |
| getOrUndefined: constant_a, |
| or: self, |
| orThunk: self, |
| map: function (f) { |
| return some(f(a)); |
| }, |
| each: function (f) { |
| f(a); |
| }, |
| bind: bind, |
| exists: bind, |
| forall: bind, |
| filter: function (f) { |
| return f(a) ? me : NONE; |
| }, |
| toArray: function () { |
| return [a]; |
| }, |
| toString: function () { |
| return 'some(' + a + ')'; |
| }, |
| equals: function (o) { |
| return o.is(a); |
| }, |
| equals_: function (o, elementEq) { |
| return o.fold(never, function (b) { |
| return elementEq(a, b); |
| }); |
| } |
| }; |
| return me; |
| }; |
| var from = function (value) { |
| return value === null || value === undefined ? NONE : some(value); |
| }; |
| var Option = { |
| some: some, |
| none: none, |
| from: from |
| }; |
|
|
| var typeOf = function (x) { |
| if (x === null) { |
| return 'null'; |
| } |
| var t = typeof x; |
| if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { |
| return 'array'; |
| } |
| if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { |
| return 'string'; |
| } |
| return t; |
| }; |
| var isType = function (type) { |
| return function (value) { |
| return typeOf(value) === type; |
| }; |
| }; |
| var isFunction = isType('function'); |
|
|
| var nativeSlice = Array.prototype.slice; |
| var map = function (xs, f) { |
| var len = xs.length; |
| var r = new Array(len); |
| for (var i = 0; i < len; i++) { |
| var x = xs[i]; |
| r[i] = f(x, i); |
| } |
| return r; |
| }; |
| var each = function (xs, f) { |
| for (var i = 0, len = xs.length; i < len; i++) { |
| var x = xs[i]; |
| f(x, i); |
| } |
| }; |
| var filter$1 = function (xs, pred) { |
| var r = []; |
| for (var i = 0, len = xs.length; i < len; i++) { |
| var x = xs[i]; |
| if (pred(x, i)) { |
| r.push(x); |
| } |
| } |
| return r; |
| }; |
| var from$1 = isFunction(Array.from) ? Array.from : function (x) { |
| return nativeSlice.call(x); |
| }; |
|
|
| var exports$1 = {}, module = { exports: exports$1 }; |
| (function (define, exports, module, require) { |
| (function (f) { |
| if (typeof exports === 'object' && typeof module !== 'undefined') { |
| module.exports = f(); |
| } else if (typeof define === 'function' && define.amd) { |
| define([], f); |
| } else { |
| var g; |
| if (typeof window !== 'undefined') { |
| g = window; |
| } else if (typeof global !== 'undefined') { |
| g = global; |
| } else if (typeof self !== 'undefined') { |
| g = self; |
| } else { |
| g = this; |
| } |
| g.EphoxContactWrapper = f(); |
| } |
| }(function () { |
| return function () { |
| function r(e, n, t) { |
| function o(i, f) { |
| if (!n[i]) { |
| if (!e[i]) { |
| var c = 'function' == typeof require && require; |
| if (!f && c) |
| return c(i, !0); |
| if (u) |
| return u(i, !0); |
| var a = new Error('Cannot find module \'' + i + '\''); |
| throw a.code = 'MODULE_NOT_FOUND', a; |
| } |
| var p = n[i] = { exports: {} }; |
| e[i][0].call(p.exports, function (r) { |
| var n = e[i][1][r]; |
| return o(n || r); |
| }, p, p.exports, r, e, n, t); |
| } |
| return n[i].exports; |
| } |
| for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) |
| o(t[i]); |
| return o; |
| } |
| return r; |
| }()({ |
| 1: [ |
| function (require, module, exports) { |
| var process = module.exports = {}; |
| var cachedSetTimeout; |
| var cachedClearTimeout; |
| function defaultSetTimout() { |
| throw new Error('setTimeout has not been defined'); |
| } |
| function defaultClearTimeout() { |
| throw new Error('clearTimeout has not been defined'); |
| } |
| (function () { |
| try { |
| if (typeof setTimeout === 'function') { |
| cachedSetTimeout = setTimeout; |
| } else { |
| cachedSetTimeout = defaultSetTimout; |
| } |
| } catch (e) { |
| cachedSetTimeout = defaultSetTimout; |
| } |
| try { |
| if (typeof clearTimeout === 'function') { |
| cachedClearTimeout = clearTimeout; |
| } else { |
| cachedClearTimeout = defaultClearTimeout; |
| } |
| } catch (e) { |
| cachedClearTimeout = defaultClearTimeout; |
| } |
| }()); |
| function runTimeout(fun) { |
| if (cachedSetTimeout === setTimeout) { |
| return setTimeout(fun, 0); |
| } |
| if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { |
| cachedSetTimeout = setTimeout; |
| return setTimeout(fun, 0); |
| } |
| try { |
| return cachedSetTimeout(fun, 0); |
| } catch (e) { |
| try { |
| return cachedSetTimeout.call(null, fun, 0); |
| } catch (e) { |
| return cachedSetTimeout.call(this, fun, 0); |
| } |
| } |
| } |
| function runClearTimeout(marker) { |
| if (cachedClearTimeout === clearTimeout) { |
| return clearTimeout(marker); |
| } |
| if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { |
| cachedClearTimeout = clearTimeout; |
| return clearTimeout(marker); |
| } |
| try { |
| return cachedClearTimeout(marker); |
| } catch (e) { |
| try { |
| return cachedClearTimeout.call(null, marker); |
| } catch (e) { |
| return cachedClearTimeout.call(this, marker); |
| } |
| } |
| } |
| var queue = []; |
| var draining = false; |
| var currentQueue; |
| var queueIndex = -1; |
| function cleanUpNextTick() { |
| if (!draining || !currentQueue) { |
| return; |
| } |
| draining = false; |
| if (currentQueue.length) { |
| queue = currentQueue.concat(queue); |
| } else { |
| queueIndex = -1; |
| } |
| if (queue.length) { |
| drainQueue(); |
| } |
| } |
| function drainQueue() { |
| if (draining) { |
| return; |
| } |
| var timeout = runTimeout(cleanUpNextTick); |
| draining = true; |
| var len = queue.length; |
| while (len) { |
| currentQueue = queue; |
| queue = []; |
| while (++queueIndex < len) { |
| if (currentQueue) { |
| currentQueue[queueIndex].run(); |
| } |
| } |
| queueIndex = -1; |
| len = queue.length; |
| } |
| currentQueue = null; |
| draining = false; |
| runClearTimeout(timeout); |
| } |
| process.nextTick = function (fun) { |
| var args = new Array(arguments.length - 1); |
| if (arguments.length > 1) { |
| for (var i = 1; i < arguments.length; i++) { |
| args[i - 1] = arguments[i]; |
| } |
| } |
| queue.push(new Item(fun, args)); |
| if (queue.length === 1 && !draining) { |
| runTimeout(drainQueue); |
| } |
| }; |
| function Item(fun, array) { |
| this.fun = fun; |
| this.array = array; |
| } |
| Item.prototype.run = function () { |
| this.fun.apply(null, this.array); |
| }; |
| process.title = 'browser'; |
| process.browser = true; |
| process.env = {}; |
| process.argv = []; |
| process.version = ''; |
| process.versions = {}; |
| function noop() { |
| } |
| process.on = noop; |
| process.addListener = noop; |
| process.once = noop; |
| process.off = noop; |
| process.removeListener = noop; |
| process.removeAllListeners = noop; |
| process.emit = noop; |
| process.prependListener = noop; |
| process.prependOnceListener = noop; |
| process.listeners = function (name) { |
| return []; |
| }; |
| process.binding = function (name) { |
| throw new Error('process.binding is not supported'); |
| }; |
| process.cwd = function () { |
| return '/'; |
| }; |
| process.chdir = function (dir) { |
| throw new Error('process.chdir is not supported'); |
| }; |
| process.umask = function () { |
| return 0; |
| }; |
| }, |
| {} |
| ], |
| 2: [ |
| function (require, module, exports) { |
| (function (setImmediate) { |
| (function (root) { |
| var setTimeoutFunc = setTimeout; |
| function noop() { |
| } |
| function bind(fn, thisArg) { |
| return function () { |
| fn.apply(thisArg, arguments); |
| }; |
| } |
| function Promise(fn) { |
| if (typeof this !== 'object') |
| throw new TypeError('Promises must be constructed via new'); |
| if (typeof fn !== 'function') |
| throw new TypeError('not a function'); |
| this._state = 0; |
| this._handled = false; |
| this._value = undefined; |
| this._deferreds = []; |
| doResolve(fn, this); |
| } |
| function handle(self, deferred) { |
| while (self._state === 3) { |
| self = self._value; |
| } |
| if (self._state === 0) { |
| self._deferreds.push(deferred); |
| return; |
| } |
| self._handled = true; |
| Promise._immediateFn(function () { |
| var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; |
| if (cb === null) { |
| (self._state === 1 ? resolve : reject)(deferred.promise, self._value); |
| return; |
| } |
| var ret; |
| try { |
| ret = cb(self._value); |
| } catch (e) { |
| reject(deferred.promise, e); |
| return; |
| } |
| resolve(deferred.promise, ret); |
| }); |
| } |
| function resolve(self, newValue) { |
| try { |
| if (newValue === self) |
| throw new TypeError('A promise cannot be resolved with itself.'); |
| if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { |
| var then = newValue.then; |
| if (newValue instanceof Promise) { |
| self._state = 3; |
| self._value = newValue; |
| finale(self); |
| return; |
| } else if (typeof then === 'function') { |
| doResolve(bind(then, newValue), self); |
| return; |
| } |
| } |
| self._state = 1; |
| self._value = newValue; |
| finale(self); |
| } catch (e) { |
| reject(self, e); |
| } |
| } |
| function reject(self, newValue) { |
| self._state = 2; |
| self._value = newValue; |
| finale(self); |
| } |
| function finale(self) { |
| if (self._state === 2 && self._deferreds.length === 0) { |
| Promise._immediateFn(function () { |
| if (!self._handled) { |
| Promise._unhandledRejectionFn(self._value); |
| } |
| }); |
| } |
| for (var i = 0, len = self._deferreds.length; i < len; i++) { |
| handle(self, self._deferreds[i]); |
| } |
| self._deferreds = null; |
| } |
| function Handler(onFulfilled, onRejected, promise) { |
| this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; |
| this.onRejected = typeof onRejected === 'function' ? onRejected : null; |
| this.promise = promise; |
| } |
| function doResolve(fn, self) { |
| var done = false; |
| try { |
| fn(function (value) { |
| if (done) |
| return; |
| done = true; |
| resolve(self, value); |
| }, function (reason) { |
| if (done) |
| return; |
| done = true; |
| reject(self, reason); |
| }); |
| } catch (ex) { |
| if (done) |
| return; |
| done = true; |
| reject(self, ex); |
| } |
| } |
| Promise.prototype['catch'] = function (onRejected) { |
| return this.then(null, onRejected); |
| }; |
| Promise.prototype.then = function (onFulfilled, onRejected) { |
| var prom = new this.constructor(noop); |
| handle(this, new Handler(onFulfilled, onRejected, prom)); |
| return prom; |
| }; |
| Promise.all = function (arr) { |
| var args = Array.prototype.slice.call(arr); |
| return new Promise(function (resolve, reject) { |
| if (args.length === 0) |
| return resolve([]); |
| var remaining = args.length; |
| function res(i, val) { |
| try { |
| if (val && (typeof val === 'object' || typeof val === 'function')) { |
| var then = val.then; |
| if (typeof then === 'function') { |
| then.call(val, function (val) { |
| res(i, val); |
| }, reject); |
| return; |
| } |
| } |
| args[i] = val; |
| if (--remaining === 0) { |
| resolve(args); |
| } |
| } catch (ex) { |
| reject(ex); |
| } |
| } |
| for (var i = 0; i < args.length; i++) { |
| res(i, args[i]); |
| } |
| }); |
| }; |
| Promise.resolve = function (value) { |
| if (value && typeof value === 'object' && value.constructor === Promise) { |
| return value; |
| } |
| return new Promise(function (resolve) { |
| resolve(value); |
| }); |
| }; |
| Promise.reject = function (value) { |
| return new Promise(function (resolve, reject) { |
| reject(value); |
| }); |
| }; |
| Promise.race = function (values) { |
| return new Promise(function (resolve, reject) { |
| for (var i = 0, len = values.length; i < len; i++) { |
| values[i].then(resolve, reject); |
| } |
| }); |
| }; |
| Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) { |
| setImmediate(fn); |
| } : function (fn) { |
| setTimeoutFunc(fn, 0); |
| }; |
| Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { |
| if (typeof console !== 'undefined' && console) { |
| console.warn('Possible Unhandled Promise Rejection:', err); |
| } |
| }; |
| Promise._setImmediateFn = function _setImmediateFn(fn) { |
| Promise._immediateFn = fn; |
| }; |
| Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) { |
| Promise._unhandledRejectionFn = fn; |
| }; |
| if (typeof module !== 'undefined' && module.exports) { |
| module.exports = Promise; |
| } else if (!root.Promise) { |
| root.Promise = Promise; |
| } |
| }(this)); |
| }.call(this, require('timers').setImmediate)); |
| }, |
| { 'timers': 3 } |
| ], |
| 3: [ |
| function (require, module, exports) { |
| (function (setImmediate, clearImmediate) { |
| var nextTick = require('process/browser.js').nextTick; |
| var apply = Function.prototype.apply; |
| var slice = Array.prototype.slice; |
| var immediateIds = {}; |
| var nextImmediateId = 0; |
| exports.setTimeout = function () { |
| return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); |
| }; |
| exports.setInterval = function () { |
| return new Timeout(apply.call(setInterval, window, arguments), clearInterval); |
| }; |
| exports.clearTimeout = exports.clearInterval = function (timeout) { |
| timeout.close(); |
| }; |
| function Timeout(id, clearFn) { |
| this._id = id; |
| this._clearFn = clearFn; |
| } |
| Timeout.prototype.unref = Timeout.prototype.ref = function () { |
| }; |
| Timeout.prototype.close = function () { |
| this._clearFn.call(window, this._id); |
| }; |
| exports.enroll = function (item, msecs) { |
| clearTimeout(item._idleTimeoutId); |
| item._idleTimeout = msecs; |
| }; |
| exports.unenroll = function (item) { |
| clearTimeout(item._idleTimeoutId); |
| item._idleTimeout = -1; |
| }; |
| exports._unrefActive = exports.active = function (item) { |
| clearTimeout(item._idleTimeoutId); |
| var msecs = item._idleTimeout; |
| if (msecs >= 0) { |
| item._idleTimeoutId = setTimeout(function onTimeout() { |
| if (item._onTimeout) |
| item._onTimeout(); |
| }, msecs); |
| } |
| }; |
| exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) { |
| var id = nextImmediateId++; |
| var args = arguments.length < 2 ? false : slice.call(arguments, 1); |
| immediateIds[id] = true; |
| nextTick(function onNextTick() { |
| if (immediateIds[id]) { |
| if (args) { |
| fn.apply(null, args); |
| } else { |
| fn.call(null); |
| } |
| exports.clearImmediate(id); |
| } |
| }); |
| return id; |
| }; |
| exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) { |
| delete immediateIds[id]; |
| }; |
| }.call(this, require('timers').setImmediate, require('timers').clearImmediate)); |
| }, |
| { |
| 'process/browser.js': 1, |
| 'timers': 3 |
| } |
| ], |
| 4: [ |
| function (require, module, exports) { |
| var promisePolyfill = require('promise-polyfill'); |
| var Global = function () { |
| if (typeof window !== 'undefined') { |
| return window; |
| } else { |
| return Function('return this;')(); |
| } |
| }(); |
| module.exports = { boltExport: Global.Promise || promisePolyfill }; |
| }, |
| { 'promise-polyfill': 2 } |
| ] |
| }, {}, [4])(4); |
| })); |
| }(undefined, exports$1, module, undefined)); |
| var Promise = module.exports.boltExport; |
|
|
| var nu = function (baseFn) { |
| var data = Option.none(); |
| var callbacks = []; |
| var map = function (f) { |
| return nu(function (nCallback) { |
| get(function (data) { |
| nCallback(f(data)); |
| }); |
| }); |
| }; |
| var get = function (nCallback) { |
| if (isReady()) { |
| call(nCallback); |
| } else { |
| callbacks.push(nCallback); |
| } |
| }; |
| var set = function (x) { |
| data = Option.some(x); |
| run(callbacks); |
| callbacks = []; |
| }; |
| var isReady = function () { |
| return data.isSome(); |
| }; |
| var run = function (cbs) { |
| each(cbs, call); |
| }; |
| var call = function (cb) { |
| data.each(function (x) { |
| domGlobals.setTimeout(function () { |
| cb(x); |
| }, 0); |
| }); |
| }; |
| baseFn(set); |
| return { |
| get: get, |
| map: map, |
| isReady: isReady |
| }; |
| }; |
| var pure = function (a) { |
| return nu(function (callback) { |
| callback(a); |
| }); |
| }; |
| var LazyValue = { |
| nu: nu, |
| pure: pure |
| }; |
|
|
| var errorReporter = function (err) { |
| domGlobals.setTimeout(function () { |
| throw err; |
| }, 0); |
| }; |
| var make = function (run) { |
| var get = function (callback) { |
| run().then(callback, errorReporter); |
| }; |
| var map = function (fab) { |
| return make(function () { |
| return run().then(fab); |
| }); |
| }; |
| var bind = function (aFutureB) { |
| return make(function () { |
| return run().then(function (v) { |
| return aFutureB(v).toPromise(); |
| }); |
| }); |
| }; |
| var anonBind = function (futureB) { |
| return make(function () { |
| return run().then(function () { |
| return futureB.toPromise(); |
| }); |
| }); |
| }; |
| var toLazy = function () { |
| return LazyValue.nu(get); |
| }; |
| var toCached = function () { |
| var cache = null; |
| return make(function () { |
| if (cache === null) { |
| cache = run(); |
| } |
| return cache; |
| }); |
| }; |
| var toPromise = run; |
| return { |
| map: map, |
| bind: bind, |
| anonBind: anonBind, |
| toLazy: toLazy, |
| toCached: toCached, |
| toPromise: toPromise, |
| get: get |
| }; |
| }; |
| var nu$1 = function (baseFn) { |
| return make(function () { |
| return new Promise(baseFn); |
| }); |
| }; |
| var pure$1 = function (a) { |
| return make(function () { |
| return Promise.resolve(a); |
| }); |
| }; |
| var Future = { |
| nu: nu$1, |
| pure: pure$1 |
| }; |
|
|
| var par = function (asyncValues, nu) { |
| return nu(function (callback) { |
| var r = []; |
| var count = 0; |
| var cb = function (i) { |
| return function (value) { |
| r[i] = value; |
| count++; |
| if (count >= asyncValues.length) { |
| callback(r); |
| } |
| }; |
| }; |
| if (asyncValues.length === 0) { |
| callback([]); |
| } else { |
| each(asyncValues, function (asyncValue, i) { |
| asyncValue.get(cb(i)); |
| }); |
| } |
| }); |
| }; |
|
|
| var par$1 = function (futures) { |
| return par(futures, Future.nu); |
| }; |
| var traverse = function (array, fn) { |
| return par$1(map(array, fn)); |
| }; |
| var mapM = traverse; |
|
|
| var value = function () { |
| var subject = Cell(Option.none()); |
| var clear = function () { |
| subject.set(Option.none()); |
| }; |
| var set = function (s) { |
| subject.set(Option.some(s)); |
| }; |
| var on = function (f) { |
| subject.get().each(f); |
| }; |
| var isSet = function () { |
| return subject.get().isSome(); |
| }; |
| return { |
| clear: clear, |
| set: set, |
| isSet: isSet, |
| on: on |
| }; |
| }; |
|
|
| var pasteHtml$1 = function (editor, html, internalFlag) { |
| var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html); |
| var args = ProcessFilters.process(editor, InternalHtml.unmark(html), internal); |
| if (args.cancelled === false) { |
| SmartPaste.insertContent(editor, args.content); |
| } |
| }; |
| var pasteText = function (editor, text) { |
| text = editor.dom.encode(text).replace(/\r\n/g, '\n'); |
| text = Newlines.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs); |
| pasteHtml$1(editor, text, false); |
| }; |
| var getDataTransferItems = function (dataTransfer) { |
| var items = {}; |
| var mceInternalUrlPrefix = 'data:text/mce-internal,'; |
| if (dataTransfer) { |
| if (dataTransfer.getData) { |
| var legacyText = dataTransfer.getData('Text'); |
| if (legacyText && legacyText.length > 0) { |
| if (legacyText.indexOf(mceInternalUrlPrefix) === -1) { |
| items['text/plain'] = legacyText; |
| } |
| } |
| } |
| if (dataTransfer.types) { |
| for (var i = 0; i < dataTransfer.types.length; i++) { |
| var contentType = dataTransfer.types[i]; |
| try { |
| items[contentType] = dataTransfer.getData(contentType); |
| } catch (ex) { |
| items[contentType] = ''; |
| } |
| } |
| } |
| } |
| return items; |
| }; |
| var getClipboardContent = function (editor, clipboardEvent) { |
| var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer); |
| return Utils.isMsEdge() ? global$4.extend(content, { 'text/html': '' }) : content; |
| }; |
| var hasContentType = function (clipboardContent, mimeType) { |
| return mimeType in clipboardContent && clipboardContent[mimeType].length > 0; |
| }; |
| var hasHtmlOrText = function (content) { |
| return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain'); |
| }; |
| var getBase64FromUri = function (uri) { |
| var idx; |
| idx = uri.indexOf(','); |
| if (idx !== -1) { |
| return uri.substr(idx + 1); |
| } |
| return null; |
| }; |
| var isValidDataUriImage = function (settings, imgElm) { |
| return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true; |
| }; |
| var extractFilename = function (editor, str) { |
| var m = str.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i); |
| return m ? editor.dom.encode(m[1]) : null; |
| }; |
| var uniqueId = Utils.createIdGenerator('mceclip'); |
| var pasteImage = function (editor, imageItem) { |
| var base64 = getBase64FromUri(imageItem.uri); |
| var id = uniqueId(); |
| var name = editor.settings.images_reuse_filename && imageItem.blob.name ? extractFilename(editor, imageItem.blob.name) : id; |
| var img = new domGlobals.Image(); |
| img.src = imageItem.uri; |
| if (isValidDataUriImage(editor.settings, img)) { |
| var blobCache = editor.editorUpload.blobCache; |
| var blobInfo = void 0, existingBlobInfo = void 0; |
| existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) { |
| return cachedBlobInfo.base64() === base64; |
| }); |
| if (!existingBlobInfo) { |
| blobInfo = blobCache.create(id, imageItem.blob, base64, name); |
| blobCache.add(blobInfo); |
| } else { |
| blobInfo = existingBlobInfo; |
| } |
| pasteHtml$1(editor, '<img src="' + blobInfo.blobUri() + '">', false); |
| } else { |
| pasteHtml$1(editor, '<img src="' + imageItem.uri + '">', false); |
| } |
| }; |
| var isClipboardEvent = function (event) { |
| return event.type === 'paste'; |
| }; |
| var readBlobsAsDataUris = function (items) { |
| return mapM(items, function (item) { |
| return Future.nu(function (resolve) { |
| var blob = item.getAsFile ? item.getAsFile() : item; |
| var reader = new window.FileReader(); |
| reader.onload = function () { |
| resolve({ |
| blob: blob, |
| uri: reader.result |
| }); |
| }; |
| reader.readAsDataURL(blob); |
| }); |
| }); |
| }; |
| var getImagesFromDataTransfer = function (dataTransfer) { |
| var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) { |
| return item.getAsFile(); |
| }) : []; |
| var files = dataTransfer.files ? from$1(dataTransfer.files) : []; |
| var images = filter$1(items.length > 0 ? items : files, function (file) { |
| return /^image\/(jpeg|png|gif|bmp)$/.test(file.type); |
| }); |
| return images; |
| }; |
| var pasteImageData = function (editor, e, rng) { |
| var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer; |
| if (editor.settings.paste_data_images && dataTransfer) { |
| var images = getImagesFromDataTransfer(dataTransfer); |
| if (images.length > 0) { |
| e.preventDefault(); |
| readBlobsAsDataUris(images).get(function (blobResults) { |
| if (rng) { |
| editor.selection.setRng(rng); |
| } |
| each(blobResults, function (result) { |
| pasteImage(editor, result); |
| }); |
| }); |
| return true; |
| } |
| } |
| return false; |
| }; |
| var isBrokenAndroidClipboardEvent = function (e) { |
| var clipboardData = e.clipboardData; |
| return domGlobals.navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0; |
| }; |
| var isKeyboardPasteEvent = function (e) { |
| return global$5.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45; |
| }; |
| var registerEventHandlers = function (editor, pasteBin, pasteFormat) { |
| var keyboardPasteEvent = value(); |
| var keyboardPastePlainTextState; |
| editor.on('keydown', function (e) { |
| function removePasteBinOnKeyUp(e) { |
| if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) { |
| pasteBin.remove(); |
| } |
| } |
| if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) { |
| keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86; |
| if (keyboardPastePlainTextState && global$2.webkit && domGlobals.navigator.userAgent.indexOf('Version/') !== -1) { |
| return; |
| } |
| e.stopImmediatePropagation(); |
| keyboardPasteEvent.set(e); |
| window.setTimeout(function () { |
| keyboardPasteEvent.clear(); |
| }, 100); |
| if (global$2.ie && keyboardPastePlainTextState) { |
| e.preventDefault(); |
| Events.firePaste(editor, true); |
| return; |
| } |
| pasteBin.remove(); |
| pasteBin.create(); |
| editor.once('keyup', removePasteBinOnKeyUp); |
| editor.once('paste', function () { |
| editor.off('keyup', removePasteBinOnKeyUp); |
| }); |
| } |
| }); |
| function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) { |
| var content, isPlainTextHtml; |
| if (hasContentType(clipboardContent, 'text/html')) { |
| content = clipboardContent['text/html']; |
| } else { |
| content = pasteBin.getHtml(); |
| internal = internal ? internal : InternalHtml.isMarked(content); |
| if (pasteBin.isDefaultContent(content)) { |
| plainTextMode = true; |
| } |
| } |
| content = Utils.trimHtml(content); |
| pasteBin.remove(); |
| isPlainTextHtml = internal === false && Newlines.isPlainText(content); |
| if (!content.length || isPlainTextHtml) { |
| plainTextMode = true; |
| } |
| if (plainTextMode) { |
| if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) { |
| content = clipboardContent['text/plain']; |
| } else { |
| content = Utils.innerText(content); |
| } |
| } |
| if (pasteBin.isDefaultContent(content)) { |
| if (!isKeyBoardPaste) { |
| editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.'); |
| } |
| return; |
| } |
| if (plainTextMode) { |
| pasteText(editor, content); |
| } else { |
| pasteHtml$1(editor, content, internal); |
| } |
| } |
| var getLastRng = function () { |
| return pasteBin.getLastRng() || editor.selection.getRng(); |
| }; |
| editor.on('paste', function (e) { |
| var isKeyBoardPaste = keyboardPasteEvent.isSet(); |
| var clipboardContent = getClipboardContent(editor, e); |
| var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState; |
| var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime()); |
| keyboardPastePlainTextState = false; |
| if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) { |
| pasteBin.remove(); |
| return; |
| } |
| if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) { |
| pasteBin.remove(); |
| return; |
| } |
| if (!isKeyBoardPaste) { |
| e.preventDefault(); |
| } |
| if (global$2.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) { |
| pasteBin.create(); |
| editor.dom.bind(pasteBin.getEl(), 'paste', function (e) { |
| e.stopPropagation(); |
| }); |
| editor.getDoc().execCommand('Paste', false, null); |
| clipboardContent['text/html'] = pasteBin.getHtml(); |
| } |
| if (hasContentType(clipboardContent, 'text/html')) { |
| e.preventDefault(); |
| if (!internal) { |
| internal = InternalHtml.isMarked(clipboardContent['text/html']); |
| } |
| insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal); |
| } else { |
| global$3.setEditorTimeout(editor, function () { |
| insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal); |
| }, 0); |
| } |
| }); |
| }; |
| var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) { |
| registerEventHandlers(editor, pasteBin, pasteFormat); |
| var src; |
| editor.parser.addNodeFilter('img', function (nodes, name, args) { |
| var isPasteInsert = function (args) { |
| return args.data && args.data.paste === true; |
| }; |
| var remove = function (node) { |
| if (!node.attr('data-mce-object') && src !== global$2.transparentSrc) { |
| node.remove(); |
| } |
| }; |
| var isWebKitFakeUrl = function (src) { |
| return src.indexOf('webkit-fake-url') === 0; |
| }; |
| var isDataUri = function (src) { |
| return src.indexOf('data:') === 0; |
| }; |
| if (!editor.settings.paste_data_images && isPasteInsert(args)) { |
| var i = nodes.length; |
| while (i--) { |
| src = nodes[i].attributes.map.src; |
| if (!src) { |
| continue; |
| } |
| if (isWebKitFakeUrl(src)) { |
| remove(nodes[i]); |
| } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) { |
| remove(nodes[i]); |
| } |
| } |
| } |
| }); |
| }; |
|
|
| var getPasteBinParent = function (editor) { |
| return global$2.ie && editor.inline ? domGlobals.document.body : editor.getBody(); |
| }; |
| var isExternalPasteBin = function (editor) { |
| return getPasteBinParent(editor) !== editor.getBody(); |
| }; |
| var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) { |
| if (isExternalPasteBin(editor)) { |
| editor.dom.bind(pasteBinElm, 'paste keyup', function (e) { |
| if (!isDefault(editor, pasteBinDefaultContent)) { |
| editor.fire('paste'); |
| } |
| }); |
| } |
| }; |
| var create = function (editor, lastRngCell, pasteBinDefaultContent) { |
| var dom = editor.dom, body = editor.getBody(); |
| var pasteBinElm; |
| lastRngCell.set(editor.selection.getRng()); |
| pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', { |
| 'id': 'mcepastebin', |
| 'class': 'mce-pastebin', |
| 'contentEditable': true, |
| 'data-mce-bogus': 'all', |
| 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0' |
| }, pasteBinDefaultContent); |
| if (global$2.ie || global$2.gecko) { |
| dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535); |
| } |
| dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) { |
| e.stopPropagation(); |
| }); |
| delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent); |
| pasteBinElm.focus(); |
| editor.selection.select(pasteBinElm, true); |
| }; |
| var remove = function (editor, lastRngCell) { |
| if (getEl(editor)) { |
| var pasteBinClone = void 0; |
| var lastRng = lastRngCell.get(); |
| while (pasteBinClone = editor.dom.get('mcepastebin')) { |
| editor.dom.remove(pasteBinClone); |
| editor.dom.unbind(pasteBinClone); |
| } |
| if (lastRng) { |
| editor.selection.setRng(lastRng); |
| } |
| } |
| lastRngCell.set(null); |
| }; |
| var getEl = function (editor) { |
| return editor.dom.get('mcepastebin'); |
| }; |
| var getHtml = function (editor) { |
| var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper; |
| var copyAndRemove = function (toElm, fromElm) { |
| toElm.appendChild(fromElm); |
| editor.dom.remove(fromElm, true); |
| }; |
| pasteBinClones = global$4.grep(getPasteBinParent(editor).childNodes, function (elm) { |
| return elm.id === 'mcepastebin'; |
| }); |
| pasteBinElm = pasteBinClones.shift(); |
| global$4.each(pasteBinClones, function (pasteBinClone) { |
| copyAndRemove(pasteBinElm, pasteBinClone); |
| }); |
| dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm); |
| for (i = dirtyWrappers.length - 1; i >= 0; i--) { |
| cleanWrapper = editor.dom.create('div'); |
| pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]); |
| copyAndRemove(cleanWrapper, dirtyWrappers[i]); |
| } |
| return pasteBinElm ? pasteBinElm.innerHTML : ''; |
| }; |
| var getLastRng = function (lastRng) { |
| return lastRng.get(); |
| }; |
| var isDefaultContent = function (pasteBinDefaultContent, content) { |
| return content === pasteBinDefaultContent; |
| }; |
| var isPasteBin = function (elm) { |
| return elm && elm.id === 'mcepastebin'; |
| }; |
| var isDefault = function (editor, pasteBinDefaultContent) { |
| var pasteBinElm = getEl(editor); |
| return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML); |
| }; |
| var PasteBin = function (editor) { |
| var lastRng = Cell(null); |
| var pasteBinDefaultContent = '%MCEPASTEBIN%'; |
| return { |
| create: function () { |
| return create(editor, lastRng, pasteBinDefaultContent); |
| }, |
| remove: function () { |
| return remove(editor, lastRng); |
| }, |
| getEl: function () { |
| return getEl(editor); |
| }, |
| getHtml: function () { |
| return getHtml(editor); |
| }, |
| getLastRng: function () { |
| return getLastRng(lastRng); |
| }, |
| isDefault: function () { |
| return isDefault(editor, pasteBinDefaultContent); |
| }, |
| isDefaultContent: function (content) { |
| return isDefaultContent(pasteBinDefaultContent, content); |
| } |
| }; |
| }; |
|
|
| var Clipboard = function (editor, pasteFormat) { |
| var pasteBin = PasteBin(editor); |
| editor.on('preInit', function () { |
| return registerEventsAndFilters(editor, pasteBin, pasteFormat); |
| }); |
| return { |
| pasteFormat: pasteFormat, |
| pasteHtml: function (html, internalFlag) { |
| return pasteHtml$1(editor, html, internalFlag); |
| }, |
| pasteText: function (text) { |
| return pasteText(editor, text); |
| }, |
| pasteImageData: function (e, rng) { |
| return pasteImageData(editor, e, rng); |
| }, |
| getDataTransferItems: getDataTransferItems, |
| hasHtmlOrText: hasHtmlOrText, |
| hasContentType: hasContentType |
| }; |
| }; |
|
|
| var noop$1 = function () { |
| }; |
| var hasWorkingClipboardApi = function (clipboardData) { |
| return global$2.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true; |
| }; |
| var setHtml5Clipboard = function (clipboardData, html, text) { |
| if (hasWorkingClipboardApi(clipboardData)) { |
| try { |
| clipboardData.clearData(); |
| clipboardData.setData('text/html', html); |
| clipboardData.setData('text/plain', text); |
| clipboardData.setData(InternalHtml.internalHtmlMime(), html); |
| return true; |
| } catch (e) { |
| return false; |
| } |
| } else { |
| return false; |
| } |
| }; |
| var setClipboardData = function (evt, data, fallback, done) { |
| if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) { |
| evt.preventDefault(); |
| done(); |
| } else { |
| fallback(data.html, done); |
| } |
| }; |
| var fallback = function (editor) { |
| return function (html, done) { |
| var markedHtml = InternalHtml.mark(html); |
| var outer = editor.dom.create('div', { |
| 'contenteditable': 'false', |
| 'data-mce-bogus': 'all' |
| }); |
| var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml); |
| editor.dom.setStyles(outer, { |
| position: 'fixed', |
| top: '0', |
| left: '-3000px', |
| width: '1000px', |
| overflow: 'hidden' |
| }); |
| outer.appendChild(inner); |
| editor.dom.add(editor.getBody(), outer); |
| var range = editor.selection.getRng(); |
| inner.focus(); |
| var offscreenRange = editor.dom.createRng(); |
| offscreenRange.selectNodeContents(inner); |
| editor.selection.setRng(offscreenRange); |
| setTimeout(function () { |
| editor.selection.setRng(range); |
| outer.parentNode.removeChild(outer); |
| done(); |
| }, 0); |
| }; |
| }; |
| var getData = function (editor) { |
| return { |
| html: editor.selection.getContent({ contextual: true }), |
| text: editor.selection.getContent({ format: 'text' }) |
| }; |
| }; |
| var isTableSelection = function (editor) { |
| return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody()); |
| }; |
| var hasSelectedContent = function (editor) { |
| return !editor.selection.isCollapsed() || isTableSelection(editor); |
| }; |
| var cut = function (editor) { |
| return function (evt) { |
| if (hasSelectedContent(editor)) { |
| setClipboardData(evt, getData(editor), fallback(editor), function () { |
| setTimeout(function () { |
| editor.execCommand('Delete'); |
| }, 0); |
| }); |
| } |
| }; |
| }; |
| var copy = function (editor) { |
| return function (evt) { |
| if (hasSelectedContent(editor)) { |
| setClipboardData(evt, getData(editor), fallback(editor), noop$1); |
| } |
| }; |
| }; |
| var register$1 = function (editor) { |
| editor.on('cut', cut(editor)); |
| editor.on('copy', copy(editor)); |
| }; |
| var CutCopy = { register: register$1 }; |
|
|
| var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils'); |
|
|
| var getCaretRangeFromEvent = function (editor, e) { |
| return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc()); |
| }; |
| var isPlainTextFileUrl = function (content) { |
| var plainTextContent = content['text/plain']; |
| return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false; |
| }; |
| var setFocusedRange = function (editor, rng) { |
| editor.focus(); |
| editor.selection.setRng(rng); |
| }; |
| var setup = function (editor, clipboard, draggingInternallyState) { |
| if (Settings.shouldBlockDrop(editor)) { |
| editor.on('dragend dragover draggesture dragdrop drop drag', function (e) { |
| e.preventDefault(); |
| e.stopPropagation(); |
| }); |
| } |
| if (!Settings.shouldPasteDataImages(editor)) { |
| editor.on('drop', function (e) { |
| var dataTransfer = e.dataTransfer; |
| if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { |
| e.preventDefault(); |
| } |
| }); |
| } |
| editor.on('drop', function (e) { |
| var dropContent, rng; |
| rng = getCaretRangeFromEvent(editor, e); |
| if (e.isDefaultPrevented() || draggingInternallyState.get()) { |
| return; |
| } |
| dropContent = clipboard.getDataTransferItems(e.dataTransfer); |
| var internal = clipboard.hasContentType(dropContent, InternalHtml.internalHtmlMime()); |
| if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) { |
| return; |
| } |
| if (rng && Settings.shouldFilterDrop(editor)) { |
| var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain']; |
| if (content_1) { |
| e.preventDefault(); |
| global$3.setEditorTimeout(editor, function () { |
| editor.undoManager.transact(function () { |
| if (dropContent['mce-internal']) { |
| editor.execCommand('Delete'); |
| } |
| setFocusedRange(editor, rng); |
| content_1 = Utils.trimHtml(content_1); |
| if (!dropContent['text/html']) { |
| clipboard.pasteText(content_1); |
| } else { |
| clipboard.pasteHtml(content_1, internal); |
| } |
| }); |
| }); |
| } |
| } |
| }); |
| editor.on('dragstart', function (e) { |
| draggingInternallyState.set(true); |
| }); |
| editor.on('dragover dragend', function (e) { |
| if (Settings.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) { |
| e.preventDefault(); |
| setFocusedRange(editor, getCaretRangeFromEvent(editor, e)); |
| } |
| if (e.type === 'dragend') { |
| draggingInternallyState.set(false); |
| } |
| }); |
| }; |
| var DragDrop = { setup: setup }; |
|
|
| var setup$1 = function (editor) { |
| var plugin = editor.plugins.paste; |
| var preProcess = Settings.getPreProcess(editor); |
| if (preProcess) { |
| editor.on('PastePreProcess', function (e) { |
| preProcess.call(plugin, plugin, e); |
| }); |
| } |
| var postProcess = Settings.getPostProcess(editor); |
| if (postProcess) { |
| editor.on('PastePostProcess', function (e) { |
| postProcess.call(plugin, plugin, e); |
| }); |
| } |
| }; |
| var PrePostProcess = { setup: setup$1 }; |
|
|
| function addPreProcessFilter(editor, filterFunc) { |
| editor.on('PastePreProcess', function (e) { |
| e.content = filterFunc(editor, e.content, e.internal, e.wordContent); |
| }); |
| } |
| function addPostProcessFilter(editor, filterFunc) { |
| editor.on('PastePostProcess', function (e) { |
| filterFunc(editor, e.node); |
| }); |
| } |
| function removeExplorerBrElementsAfterBlocks(editor, html) { |
| if (!WordFilter.isWordContent(html)) { |
| return html; |
| } |
| var blockElements = []; |
| global$4.each(editor.schema.getBlockElements(), function (block, blockName) { |
| blockElements.push(blockName); |
| }); |
| var explorerBlocksRegExp = new RegExp('(?:<br> [\\s\\r\\n]+|<br>)*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:<br> [\\s\\r\\n]+|<br>)*', 'g'); |
| html = Utils.filter(html, [[ |
| explorerBlocksRegExp, |
| '$1' |
| ]]); |
| html = Utils.filter(html, [ |
| [ |
| /<br><br>/g, |
| '<BR><BR>' |
| ], |
| [ |
| /<br>/g, |
| ' ' |
| ], |
| [ |
| /<BR><BR>/g, |
| '<br>' |
| ] |
| ]); |
| return html; |
| } |
| function removeWebKitStyles(editor, content, internal, isWordHtml) { |
| if (isWordHtml || internal) { |
| return content; |
| } |
| var webKitStylesSetting = Settings.getWebkitStyles(editor); |
| var webKitStyles; |
| if (Settings.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') { |
| return content; |
| } |
| if (webKitStylesSetting) { |
| webKitStyles = webKitStylesSetting.split(/[, ]/); |
| } |
| if (webKitStyles) { |
| var dom_1 = editor.dom, node_1 = editor.selection.getNode(); |
| content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, function (all, before, value, after) { |
| var inputStyles = dom_1.parseStyle(dom_1.decode(value)); |
| var outputStyles = {}; |
| if (webKitStyles === 'none') { |
| return before + after; |
| } |
| for (var i = 0; i < webKitStyles.length; i++) { |
| var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true); |
| if (/color/.test(webKitStyles[i])) { |
| inputValue = dom_1.toHex(inputValue); |
| currentValue = dom_1.toHex(currentValue); |
| } |
| if (currentValue !== inputValue) { |
| outputStyles[webKitStyles[i]] = inputValue; |
| } |
| } |
| outputStyles = dom_1.serializeStyle(outputStyles, 'span'); |
| if (outputStyles) { |
| return before + ' style="' + outputStyles + '"' + after; |
| } |
| return before + after; |
| }); |
| } else { |
| content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, '$1$3'); |
| } |
| content = content.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi, function (all, before, value, after) { |
| return before + ' style="' + value + '"' + after; |
| }); |
| return content; |
| } |
| function removeUnderlineAndFontInAnchor(editor, root) { |
| editor.$('a', root).find('font,u').each(function (i, node) { |
| editor.dom.remove(node, true); |
| }); |
| } |
| var setup$2 = function (editor) { |
| if (global$2.webkit) { |
| addPreProcessFilter(editor, removeWebKitStyles); |
| } |
| if (global$2.ie) { |
| addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks); |
| addPostProcessFilter(editor, removeUnderlineAndFontInAnchor); |
| } |
| }; |
| var Quirks = { setup: setup$2 }; |
|
|
| var stateChange = function (editor, clipboard, e) { |
| var ctrl = e.control; |
| ctrl.active(clipboard.pasteFormat.get() === 'text'); |
| editor.on('PastePlainTextToggle', function (e) { |
| ctrl.active(e.state); |
| }); |
| }; |
| var register$2 = function (editor, clipboard) { |
| var postRender = curry(stateChange, editor, clipboard); |
| editor.addButton('pastetext', { |
| active: false, |
| icon: 'pastetext', |
| tooltip: 'Paste as text', |
| cmd: 'mceTogglePlainTextPaste', |
| onPostRender: postRender |
| }); |
| editor.addMenuItem('pastetext', { |
| text: 'Paste as text', |
| selectable: true, |
| active: clipboard.pasteFormat, |
| cmd: 'mceTogglePlainTextPaste', |
| onPostRender: postRender |
| }); |
| }; |
| var Buttons = { register: register$2 }; |
|
|
| global$1.add('paste', function (editor) { |
| if (DetectProPlugin.hasProPlugin(editor) === false) { |
| var userIsInformedState = Cell(false); |
| var draggingInternallyState = Cell(false); |
| var pasteFormat = Cell(Settings.isPasteAsTextEnabled(editor) ? 'text' : 'html'); |
| var clipboard = Clipboard(editor, pasteFormat); |
| var quirks = Quirks.setup(editor); |
| Buttons.register(editor, clipboard); |
| Commands.register(editor, clipboard, userIsInformedState); |
| PrePostProcess.setup(editor); |
| CutCopy.register(editor); |
| DragDrop.setup(editor, clipboard, draggingInternallyState); |
| return Api.get(clipboard, quirks); |
| } |
| }); |
| function Plugin () { |
| } |
|
|
| return Plugin; |
|
|
| }(window)); |
| })(); |
|
|