run:R W Run
80.43 KB
2026-03-11 16:18:51
R W Run
30.11 KB
2026-03-11 16:18:51
R W Run
error_log
📄plugin.js
1(function () {
2var paste = (function (domGlobals) {
3 'use strict';
4
5 var Cell = function (initial) {
6 var value = initial;
7 var get = function () {
8 return value;
9 };
10 var set = function (v) {
11 value = v;
12 };
13 var clone = function () {
14 return Cell(get());
15 };
16 return {
17 get: get,
18 set: set,
19 clone: clone
20 };
21 };
22
23 var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');
24
25 var hasProPlugin = function (editor) {
26 if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) {
27 if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {
28 domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \'paste\' from the \'plugins\' option.');
29 }
30 return true;
31 } else {
32 return false;
33 }
34 };
35 var DetectProPlugin = { hasProPlugin: hasProPlugin };
36
37 var get = function (clipboard, quirks) {
38 return {
39 clipboard: clipboard,
40 quirks: quirks
41 };
42 };
43 var Api = { get: get };
44
45 var firePastePreProcess = function (editor, html, internal, isWordHtml) {
46 return editor.fire('PastePreProcess', {
47 content: html,
48 internal: internal,
49 wordContent: isWordHtml
50 });
51 };
52 var firePastePostProcess = function (editor, node, internal, isWordHtml) {
53 return editor.fire('PastePostProcess', {
54 node: node,
55 internal: internal,
56 wordContent: isWordHtml
57 });
58 };
59 var firePastePlainTextToggle = function (editor, state) {
60 return editor.fire('PastePlainTextToggle', { state: state });
61 };
62 var firePaste = function (editor, ieFake) {
63 return editor.fire('paste', { ieFake: ieFake });
64 };
65 var Events = {
66 firePastePreProcess: firePastePreProcess,
67 firePastePostProcess: firePastePostProcess,
68 firePastePlainTextToggle: firePastePlainTextToggle,
69 firePaste: firePaste
70 };
71
72 var shouldPlainTextInform = function (editor) {
73 return editor.getParam('paste_plaintext_inform', true);
74 };
75 var shouldBlockDrop = function (editor) {
76 return editor.getParam('paste_block_drop', false);
77 };
78 var shouldPasteDataImages = function (editor) {
79 return editor.getParam('paste_data_images', false);
80 };
81 var shouldFilterDrop = function (editor) {
82 return editor.getParam('paste_filter_drop', true);
83 };
84 var getPreProcess = function (editor) {
85 return editor.getParam('paste_preprocess');
86 };
87 var getPostProcess = function (editor) {
88 return editor.getParam('paste_postprocess');
89 };
90 var getWebkitStyles = function (editor) {
91 return editor.getParam('paste_webkit_styles');
92 };
93 var shouldRemoveWebKitStyles = function (editor) {
94 return editor.getParam('paste_remove_styles_if_webkit', true);
95 };
96 var shouldMergeFormats = function (editor) {
97 return editor.getParam('paste_merge_formats', true);
98 };
99 var isSmartPasteEnabled = function (editor) {
100 return editor.getParam('smart_paste', true);
101 };
102 var isPasteAsTextEnabled = function (editor) {
103 return editor.getParam('paste_as_text', false);
104 };
105 var getRetainStyleProps = function (editor) {
106 return editor.getParam('paste_retain_style_properties');
107 };
108 var getWordValidElements = function (editor) {
109 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';
110 return editor.getParam('paste_word_valid_elements', defaultValidElements);
111 };
112 var shouldConvertWordFakeLists = function (editor) {
113 return editor.getParam('paste_convert_word_fake_lists', true);
114 };
115 var shouldUseDefaultFilters = function (editor) {
116 return editor.getParam('paste_enable_default_filters', true);
117 };
118 var Settings = {
119 shouldPlainTextInform: shouldPlainTextInform,
120 shouldBlockDrop: shouldBlockDrop,
121 shouldPasteDataImages: shouldPasteDataImages,
122 shouldFilterDrop: shouldFilterDrop,
123 getPreProcess: getPreProcess,
124 getPostProcess: getPostProcess,
125 getWebkitStyles: getWebkitStyles,
126 shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,
127 shouldMergeFormats: shouldMergeFormats,
128 isSmartPasteEnabled: isSmartPasteEnabled,
129 isPasteAsTextEnabled: isPasteAsTextEnabled,
130 getRetainStyleProps: getRetainStyleProps,
131 getWordValidElements: getWordValidElements,
132 shouldConvertWordFakeLists: shouldConvertWordFakeLists,
133 shouldUseDefaultFilters: shouldUseDefaultFilters
134 };
135
136 var shouldInformUserAboutPlainText = function (editor, userIsInformedState) {
137 return userIsInformedState.get() === false && Settings.shouldPlainTextInform(editor);
138 };
139 var displayNotification = function (editor, message) {
140 editor.notificationManager.open({
141 text: editor.translate(message),
142 type: 'info'
143 });
144 };
145 var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) {
146 if (clipboard.pasteFormat.get() === 'text') {
147 clipboard.pasteFormat.set('html');
148 Events.firePastePlainTextToggle(editor, false);
149 } else {
150 clipboard.pasteFormat.set('text');
151 Events.firePastePlainTextToggle(editor, true);
152 if (shouldInformUserAboutPlainText(editor, userIsInformedState)) {
153 displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.');
154 userIsInformedState.set(true);
155 }
156 }
157 editor.focus();
158 };
159 var Actions = { togglePlainTextPaste: togglePlainTextPaste };
160
161 var register = function (editor, clipboard, userIsInformedState) {
162 editor.addCommand('mceTogglePlainTextPaste', function () {
163 Actions.togglePlainTextPaste(editor, clipboard, userIsInformedState);
164 });
165 editor.addCommand('mceInsertClipboardContent', function (ui, value) {
166 if (value.content) {
167 clipboard.pasteHtml(value.content, value.internal);
168 }
169 if (value.text) {
170 clipboard.pasteText(value.text);
171 }
172 });
173 };
174 var Commands = { register: register };
175
176 var global$2 = tinymce.util.Tools.resolve('tinymce.Env');
177
178 var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');
179
180 var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
181
182 var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');
183
184 var internalMimeType = 'x-tinymce/html';
185 var internalMark = '<!-- ' + internalMimeType + ' -->';
186 var mark = function (html) {
187 return internalMark + html;
188 };
189 var unmark = function (html) {
190 return html.replace(internalMark, '');
191 };
192 var isMarked = function (html) {
193 return html.indexOf(internalMark) !== -1;
194 };
195 var InternalHtml = {
196 mark: mark,
197 unmark: unmark,
198 isMarked: isMarked,
199 internalHtmlMime: function () {
200 return internalMimeType;
201 }
202 };
203
204 var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');
205
206 var isPlainText = function (text) {
207 return !/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(text);
208 };
209 var toBRs = function (text) {
210 return text.replace(/\r?\n/g, '<br>');
211 };
212 var openContainer = function (rootTag, rootAttrs) {
213 var key;
214 var attrs = [];
215 var tag = '<' + rootTag;
216 if (typeof rootAttrs === 'object') {
217 for (key in rootAttrs) {
218 if (rootAttrs.hasOwnProperty(key)) {
219 attrs.push(key + '="' + global$6.encodeAllRaw(rootAttrs[key]) + '"');
220 }
221 }
222 if (attrs.length) {
223 tag += ' ' + attrs.join(' ');
224 }
225 }
226 return tag + '>';
227 };
228 var toBlockElements = function (text, rootTag, rootAttrs) {
229 var blocks = text.split(/\n\n/);
230 var tagOpen = openContainer(rootTag, rootAttrs);
231 var tagClose = '</' + rootTag + '>';
232 var paragraphs = global$4.map(blocks, function (p) {
233 return p.split(/\n/).join('<br />');
234 });
235 var stitch = function (p) {
236 return tagOpen + p + tagClose;
237 };
238 return paragraphs.length === 1 ? paragraphs[0] : global$4.map(paragraphs, stitch).join('');
239 };
240 var convert = function (text, rootTag, rootAttrs) {
241 return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text);
242 };
243 var Newlines = {
244 isPlainText: isPlainText,
245 convert: convert,
246 toBRs: toBRs,
247 toBlockElements: toBlockElements
248 };
249
250 var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser');
251
252 var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer');
253
254 var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node');
255
256 var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema');
257
258 function filter(content, items) {
259 global$4.each(items, function (v) {
260 if (v.constructor === RegExp) {
261 content = content.replace(v, '');
262 } else {
263 content = content.replace(v[0], v[1]);
264 }
265 });
266 return content;
267 }
268 function innerText(html) {
269 var schema = global$a();
270 var domParser = global$7({}, schema);
271 var text = '';
272 var shortEndedElements = schema.getShortEndedElements();
273 var ignoreElements = global$4.makeMap('script noscript style textarea video audio iframe object', ' ');
274 var blockElements = schema.getBlockElements();
275 function walk(node) {
276 var name = node.name, currentNode = node;
277 if (name === 'br') {
278 text += '\n';
279 return;
280 }
281 if (name === 'wbr') {
282 return;
283 }
284 if (shortEndedElements[name]) {
285 text += ' ';
286 }
287 if (ignoreElements[name]) {
288 text += ' ';
289 return;
290 }
291 if (node.type === 3) {
292 text += node.value;
293 }
294 if (!node.shortEnded) {
295 if (node = node.firstChild) {
296 do {
297 walk(node);
298 } while (node = node.next);
299 }
300 }
301 if (blockElements[name] && currentNode.next) {
302 text += '\n';
303 if (name === 'p') {
304 text += '\n';
305 }
306 }
307 }
308 html = filter(html, [/<!\[[^\]]+\]>/g]);
309 walk(domParser.parse(html));
310 return text;
311 }
312 function trimHtml(html) {
313 function trimSpaces(all, s1, s2) {
314 if (!s1 && !s2) {
315 return ' ';
316 }
317 return '\xA0';
318 }
319 html = filter(html, [
320 /^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/ig,
321 /<!--StartFragment-->|<!--EndFragment-->/g,
322 [
323 /( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,
324 trimSpaces
325 ],
326 /<br class="Apple-interchange-newline">/g,
327 /<br>$/i
328 ]);
329 return html;
330 }
331 function createIdGenerator(prefix) {
332 var count = 0;
333 return function () {
334 return prefix + count++;
335 };
336 }
337 var isMsEdge = function () {
338 return domGlobals.navigator.userAgent.indexOf(' Edge/') !== -1;
339 };
340 var Utils = {
341 filter: filter,
342 innerText: innerText,
343 trimHtml: trimHtml,
344 createIdGenerator: createIdGenerator,
345 isMsEdge: isMsEdge
346 };
347
348 function isWordContent(content) {
349 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);
350 }
351 function isNumericList(text) {
352 var found, patterns;
353 patterns = [
354 /^[IVXLMCD]{1,2}\.[ \u00a0]/,
355 /^[ivxlmcd]{1,2}\.[ \u00a0]/,
356 /^[a-z]{1,2}[\.\)][ \u00a0]/,
357 /^[A-Z]{1,2}[\.\)][ \u00a0]/,
358 /^[0-9]+\.[ \u00a0]/,
359 /^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,
360 /^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/
361 ];
362 text = text.replace(/^[\u00a0 ]+/, '');
363 global$4.each(patterns, function (pattern) {
364 if (pattern.test(text)) {
365 found = true;
366 return false;
367 }
368 });
369 return found;
370 }
371 function isBulletList(text) {
372 return /^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(text);
373 }
374 function convertFakeListsToProperLists(node) {
375 var currentListNode, prevListNode, lastLevel = 1;
376 function getText(node) {
377 var txt = '';
378 if (node.type === 3) {
379 return node.value;
380 }
381 if (node = node.firstChild) {
382 do {
383 txt += getText(node);
384 } while (node = node.next);
385 }
386 return txt;
387 }
388 function trimListStart(node, regExp) {
389 if (node.type === 3) {
390 if (regExp.test(node.value)) {
391 node.value = node.value.replace(regExp, '');
392 return false;
393 }
394 }
395 if (node = node.firstChild) {
396 do {
397 if (!trimListStart(node, regExp)) {
398 return false;
399 }
400 } while (node = node.next);
401 }
402 return true;
403 }
404 function removeIgnoredNodes(node) {
405 if (node._listIgnore) {
406 node.remove();
407 return;
408 }
409 if (node = node.firstChild) {
410 do {
411 removeIgnoredNodes(node);
412 } while (node = node.next);
413 }
414 }
415 function convertParagraphToLi(paragraphNode, listName, start) {
416 var level = paragraphNode._listLevel || lastLevel;
417 if (level !== lastLevel) {
418 if (level < lastLevel) {
419 if (currentListNode) {
420 currentListNode = currentListNode.parent.parent;
421 }
422 } else {
423 prevListNode = currentListNode;
424 currentListNode = null;
425 }
426 }
427 if (!currentListNode || currentListNode.name !== listName) {
428 prevListNode = prevListNode || currentListNode;
429 currentListNode = new global$9(listName, 1);
430 if (start > 1) {
431 currentListNode.attr('start', '' + start);
432 }
433 paragraphNode.wrap(currentListNode);
434 } else {
435 currentListNode.append(paragraphNode);
436 }
437 paragraphNode.name = 'li';
438 if (level > lastLevel && prevListNode) {
439 prevListNode.lastChild.append(currentListNode);
440 }
441 lastLevel = level;
442 removeIgnoredNodes(paragraphNode);
443 trimListStart(paragraphNode, /^\u00a0+/);
444 trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/);
445 trimListStart(paragraphNode, /^\u00a0+/);
446 }
447 var elements = [];
448 var child = node.firstChild;
449 while (typeof child !== 'undefined' && child !== null) {
450 elements.push(child);
451 child = child.walk();
452 if (child !== null) {
453 while (typeof child !== 'undefined' && child.parent !== node) {
454 child = child.walk();
455 }
456 }
457 }
458 for (var i = 0; i < elements.length; i++) {
459 node = elements[i];
460 if (node.name === 'p' && node.firstChild) {
461 var nodeText = getText(node);
462 if (isBulletList(nodeText)) {
463 convertParagraphToLi(node, 'ul');
464 continue;
465 }
466 if (isNumericList(nodeText)) {
467 var matches = /([0-9]+)\./.exec(nodeText);
468 var start = 1;
469 if (matches) {
470 start = parseInt(matches[1], 10);
471 }
472 convertParagraphToLi(node, 'ol', start);
473 continue;
474 }
475 if (node._listLevel) {
476 convertParagraphToLi(node, 'ul', 1);
477 continue;
478 }
479 currentListNode = null;
480 } else {
481 prevListNode = currentListNode;
482 currentListNode = null;
483 }
484 }
485 }
486 function filterStyles(editor, validStyles, node, styleValue) {
487 var outputStyles = {}, matches;
488 var styles = editor.dom.parseStyle(styleValue);
489 global$4.each(styles, function (value, name) {
490 switch (name) {
491 case 'mso-list':
492 matches = /\w+ \w+([0-9]+)/i.exec(styleValue);
493 if (matches) {
494 node._listLevel = parseInt(matches[1], 10);
495 }
496 if (/Ignore/i.test(value) && node.firstChild) {
497 node._listIgnore = true;
498 node.firstChild._listIgnore = true;
499 }
500 break;
501 case 'horiz-align':
502 name = 'text-align';
503 break;
504 case 'vert-align':
505 name = 'vertical-align';
506 break;
507 case 'font-color':
508 case 'mso-foreground':
509 name = 'color';
510 break;
511 case 'mso-background':
512 case 'mso-highlight':
513 name = 'background';
514 break;
515 case 'font-weight':
516 case 'font-style':
517 if (value !== 'normal') {
518 outputStyles[name] = value;
519 }
520 return;
521 case 'mso-element':
522 if (/^(comment|comment-list)$/i.test(value)) {
523 node.remove();
524 return;
525 }
526 break;
527 }
528 if (name.indexOf('mso-comment') === 0) {
529 node.remove();
530 return;
531 }
532 if (name.indexOf('mso-') === 0) {
533 return;
534 }
535 if (Settings.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {
536 outputStyles[name] = value;
537 }
538 });
539 if (/(bold)/i.test(outputStyles['font-weight'])) {
540 delete outputStyles['font-weight'];
541 node.wrap(new global$9('b', 1));
542 }
543 if (/(italic)/i.test(outputStyles['font-style'])) {
544 delete outputStyles['font-style'];
545 node.wrap(new global$9('i', 1));
546 }
547 outputStyles = editor.dom.serializeStyle(outputStyles, node.name);
548 if (outputStyles) {
549 return outputStyles;
550 }
551 return null;
552 }
553 var filterWordContent = function (editor, content) {
554 var retainStyleProperties, validStyles;
555 retainStyleProperties = Settings.getRetainStyleProps(editor);
556 if (retainStyleProperties) {
557 validStyles = global$4.makeMap(retainStyleProperties.split(/[, ]/));
558 }
559 content = Utils.filter(content, [
560 /<br class="?Apple-interchange-newline"?>/gi,
561 /<b[^>]+id="?docs-internal-[^>]*>/gi,
562 /<!--[\s\S]+?-->/gi,
563 /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
564 [
565 /<(\/?)s>/gi,
566 '<$1strike>'
567 ],
568 [
569 /&nbsp;/gi,
570 '\xA0'
571 ],
572 [
573 /<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
574 function (str, spaces) {
575 return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join('\xA0') : '';
576 }
577 ]
578 ]);
579 var validElements = Settings.getWordValidElements(editor);
580 var schema = global$a({
581 valid_elements: validElements,
582 valid_children: '-li[p]'
583 });
584 global$4.each(schema.elements, function (rule) {
585 if (!rule.attributes.class) {
586 rule.attributes.class = {};
587 rule.attributesOrder.push('class');
588 }
589 if (!rule.attributes.style) {
590 rule.attributes.style = {};
591 rule.attributesOrder.push('style');
592 }
593 });
594 var domParser = global$7({}, schema);
595 domParser.addAttributeFilter('style', function (nodes) {
596 var i = nodes.length, node;
597 while (i--) {
598 node = nodes[i];
599 node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));
600 if (node.name === 'span' && node.parent && !node.attributes.length) {
601 node.unwrap();
602 }
603 }
604 });
605 domParser.addAttributeFilter('class', function (nodes) {
606 var i = nodes.length, node, className;
607 while (i--) {
608 node = nodes[i];
609 className = node.attr('class');
610 if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {
611 node.remove();
612 }
613 node.attr('class', null);
614 }
615 });
616 domParser.addNodeFilter('del', function (nodes) {
617 var i = nodes.length;
618 while (i--) {
619 nodes[i].remove();
620 }
621 });
622 domParser.addNodeFilter('a', function (nodes) {
623 var i = nodes.length, node, href, name;
624 while (i--) {
625 node = nodes[i];
626 href = node.attr('href');
627 name = node.attr('name');
628 if (href && href.indexOf('#_msocom_') !== -1) {
629 node.remove();
630 continue;
631 }
632 if (href && href.indexOf('file://') === 0) {
633 href = href.split('#')[1];
634 if (href) {
635 href = '#' + href;
636 }
637 }
638 if (!href && !name) {
639 node.unwrap();
640 } else {
641 if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {
642 node.unwrap();
643 continue;
644 }
645 node.attr({
646 href: href,
647 name: name
648 });
649 }
650 }
651 });
652 var rootNode = domParser.parse(content);
653 if (Settings.shouldConvertWordFakeLists(editor)) {
654 convertFakeListsToProperLists(rootNode);
655 }
656 content = global$8({ validate: editor.settings.validate }, schema).serialize(rootNode);
657 return content;
658 };
659 var preProcess = function (editor, content) {
660 return Settings.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;
661 };
662 var WordFilter = {
663 preProcess: preProcess,
664 isWordContent: isWordContent
665 };
666
667 var preProcess$1 = function (editor, html) {
668 var parser = global$7({}, editor.schema);
669 parser.addNodeFilter('meta', function (nodes) {
670 global$4.each(nodes, function (node) {
671 return node.remove();
672 });
673 });
674 var fragment = parser.parse(html, {
675 forced_root_block: false,
676 isRootContent: true
677 });
678 return global$8({ validate: editor.settings.validate }, editor.schema).serialize(fragment);
679 };
680 var processResult = function (content, cancelled) {
681 return {
682 content: content,
683 cancelled: cancelled
684 };
685 };
686 var postProcessFilter = function (editor, html, internal, isWordHtml) {
687 var tempBody = editor.dom.create('div', { style: 'display:none' }, html);
688 var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml);
689 return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());
690 };
691 var filterContent = function (editor, content, internal, isWordHtml) {
692 var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml);
693 var filteredContent = preProcess$1(editor, preProcessArgs.content);
694 if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {
695 return postProcessFilter(editor, filteredContent, internal, isWordHtml);
696 } else {
697 return processResult(filteredContent, preProcessArgs.isDefaultPrevented());
698 }
699 };
700 var process = function (editor, html, internal) {
701 var isWordHtml = WordFilter.isWordContent(html);
702 var content = isWordHtml ? WordFilter.preProcess(editor, html) : html;
703 return filterContent(editor, content, internal, isWordHtml);
704 };
705 var ProcessFilters = { process: process };
706
707 var pasteHtml = function (editor, html) {
708 editor.insertContent(html, {
709 merge: Settings.shouldMergeFormats(editor),
710 paste: true
711 });
712 return true;
713 };
714 var isAbsoluteUrl = function (url) {
715 return /^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(url);
716 };
717 var isImageUrl = function (url) {
718 return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);
719 };
720 var createImage = function (editor, url, pasteHtmlFn) {
721 editor.undoManager.extra(function () {
722 pasteHtmlFn(editor, url);
723 }, function () {
724 editor.insertContent('<img src="' + url + '">');
725 });
726 return true;
727 };
728 var createLink = function (editor, url, pasteHtmlFn) {
729 editor.undoManager.extra(function () {
730 pasteHtmlFn(editor, url);
731 }, function () {
732 editor.execCommand('mceInsertLink', false, url);
733 });
734 return true;
735 };
736 var linkSelection = function (editor, html, pasteHtmlFn) {
737 return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;
738 };
739 var insertImage = function (editor, html, pasteHtmlFn) {
740 return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false;
741 };
742 var smartInsertContent = function (editor, html) {
743 global$4.each([
744 linkSelection,
745 insertImage,
746 pasteHtml
747 ], function (action) {
748 return action(editor, html, pasteHtml) !== true;
749 });
750 };
751 var insertContent = function (editor, html) {
752 if (Settings.isSmartPasteEnabled(editor) === false) {
753 pasteHtml(editor, html);
754 } else {
755 smartInsertContent(editor, html);
756 }
757 };
758 var SmartPaste = {
759 isImageUrl: isImageUrl,
760 isAbsoluteUrl: isAbsoluteUrl,
761 insertContent: insertContent
762 };
763
764 var noop = function () {
765 };
766 var constant = function (value) {
767 return function () {
768 return value;
769 };
770 };
771 function curry(fn) {
772 var initialArgs = [];
773 for (var _i = 1; _i < arguments.length; _i++) {
774 initialArgs[_i - 1] = arguments[_i];
775 }
776 return function () {
777 var restArgs = [];
778 for (var _i = 0; _i < arguments.length; _i++) {
779 restArgs[_i] = arguments[_i];
780 }
781 var all = initialArgs.concat(restArgs);
782 return fn.apply(null, all);
783 };
784 }
785 var never = constant(false);
786 var always = constant(true);
787
788 var none = function () {
789 return NONE;
790 };
791 var NONE = function () {
792 var eq = function (o) {
793 return o.isNone();
794 };
795 var call = function (thunk) {
796 return thunk();
797 };
798 var id = function (n) {
799 return n;
800 };
801 var me = {
802 fold: function (n, s) {
803 return n();
804 },
805 is: never,
806 isSome: never,
807 isNone: always,
808 getOr: id,
809 getOrThunk: call,
810 getOrDie: function (msg) {
811 throw new Error(msg || 'error: getOrDie called on none.');
812 },
813 getOrNull: constant(null),
814 getOrUndefined: constant(undefined),
815 or: id,
816 orThunk: call,
817 map: none,
818 each: noop,
819 bind: none,
820 exists: never,
821 forall: always,
822 filter: none,
823 equals: eq,
824 equals_: eq,
825 toArray: function () {
826 return [];
827 },
828 toString: constant('none()')
829 };
830 if (Object.freeze) {
831 Object.freeze(me);
832 }
833 return me;
834 }();
835 var some = function (a) {
836 var constant_a = constant(a);
837 var self = function () {
838 return me;
839 };
840 var bind = function (f) {
841 return f(a);
842 };
843 var me = {
844 fold: function (n, s) {
845 return s(a);
846 },
847 is: function (v) {
848 return a === v;
849 },
850 isSome: always,
851 isNone: never,
852 getOr: constant_a,
853 getOrThunk: constant_a,
854 getOrDie: constant_a,
855 getOrNull: constant_a,
856 getOrUndefined: constant_a,
857 or: self,
858 orThunk: self,
859 map: function (f) {
860 return some(f(a));
861 },
862 each: function (f) {
863 f(a);
864 },
865 bind: bind,
866 exists: bind,
867 forall: bind,
868 filter: function (f) {
869 return f(a) ? me : NONE;
870 },
871 toArray: function () {
872 return [a];
873 },
874 toString: function () {
875 return 'some(' + a + ')';
876 },
877 equals: function (o) {
878 return o.is(a);
879 },
880 equals_: function (o, elementEq) {
881 return o.fold(never, function (b) {
882 return elementEq(a, b);
883 });
884 }
885 };
886 return me;
887 };
888 var from = function (value) {
889 return value === null || value === undefined ? NONE : some(value);
890 };
891 var Option = {
892 some: some,
893 none: none,
894 from: from
895 };
896
897 var typeOf = function (x) {
898 if (x === null) {
899 return 'null';
900 }
901 var t = typeof x;
902 if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
903 return 'array';
904 }
905 if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
906 return 'string';
907 }
908 return t;
909 };
910 var isType = function (type) {
911 return function (value) {
912 return typeOf(value) === type;
913 };
914 };
915 var isFunction = isType('function');
916
917 var nativeSlice = Array.prototype.slice;
918 var map = function (xs, f) {
919 var len = xs.length;
920 var r = new Array(len);
921 for (var i = 0; i < len; i++) {
922 var x = xs[i];
923 r[i] = f(x, i);
924 }
925 return r;
926 };
927 var each = function (xs, f) {
928 for (var i = 0, len = xs.length; i < len; i++) {
929 var x = xs[i];
930 f(x, i);
931 }
932 };
933 var filter$1 = function (xs, pred) {
934 var r = [];
935 for (var i = 0, len = xs.length; i < len; i++) {
936 var x = xs[i];
937 if (pred(x, i)) {
938 r.push(x);
939 }
940 }
941 return r;
942 };
943 var from$1 = isFunction(Array.from) ? Array.from : function (x) {
944 return nativeSlice.call(x);
945 };
946
947 var exports$1 = {}, module = { exports: exports$1 };
948 (function (define, exports, module, require) {
949 (function (f) {
950 if (typeof exports === 'object' && typeof module !== 'undefined') {
951 module.exports = f();
952 } else if (typeof define === 'function' && define.amd) {
953 define([], f);
954 } else {
955 var g;
956 if (typeof window !== 'undefined') {
957 g = window;
958 } else if (typeof global !== 'undefined') {
959 g = global;
960 } else if (typeof self !== 'undefined') {
961 g = self;
962 } else {
963 g = this;
964 }
965 g.EphoxContactWrapper = f();
966 }
967 }(function () {
968 return function () {
969 function r(e, n, t) {
970 function o(i, f) {
971 if (!n[i]) {
972 if (!e[i]) {
973 var c = 'function' == typeof require && require;
974 if (!f && c)
975 return c(i, !0);
976 if (u)
977 return u(i, !0);
978 var a = new Error('Cannot find module \'' + i + '\'');
979 throw a.code = 'MODULE_NOT_FOUND', a;
980 }
981 var p = n[i] = { exports: {} };
982 e[i][0].call(p.exports, function (r) {
983 var n = e[i][1][r];
984 return o(n || r);
985 }, p, p.exports, r, e, n, t);
986 }
987 return n[i].exports;
988 }
989 for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)
990 o(t[i]);
991 return o;
992 }
993 return r;
994 }()({
995 1: [
996 function (require, module, exports) {
997 var process = module.exports = {};
998 var cachedSetTimeout;
999 var cachedClearTimeout;
1000 function defaultSetTimout() {
1001 throw new Error('setTimeout has not been defined');
1002 }
1003 function defaultClearTimeout() {
1004 throw new Error('clearTimeout has not been defined');
1005 }
1006 (function () {
1007 try {
1008 if (typeof setTimeout === 'function') {
1009 cachedSetTimeout = setTimeout;
1010 } else {
1011 cachedSetTimeout = defaultSetTimout;
1012 }
1013 } catch (e) {
1014 cachedSetTimeout = defaultSetTimout;
1015 }
1016 try {
1017 if (typeof clearTimeout === 'function') {
1018 cachedClearTimeout = clearTimeout;
1019 } else {
1020 cachedClearTimeout = defaultClearTimeout;
1021 }
1022 } catch (e) {
1023 cachedClearTimeout = defaultClearTimeout;
1024 }
1025 }());
1026 function runTimeout(fun) {
1027 if (cachedSetTimeout === setTimeout) {
1028 return setTimeout(fun, 0);
1029 }
1030 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
1031 cachedSetTimeout = setTimeout;
1032 return setTimeout(fun, 0);
1033 }
1034 try {
1035 return cachedSetTimeout(fun, 0);
1036 } catch (e) {
1037 try {
1038 return cachedSetTimeout.call(null, fun, 0);
1039 } catch (e) {
1040 return cachedSetTimeout.call(this, fun, 0);
1041 }
1042 }
1043 }
1044 function runClearTimeout(marker) {
1045 if (cachedClearTimeout === clearTimeout) {
1046 return clearTimeout(marker);
1047 }
1048 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
1049 cachedClearTimeout = clearTimeout;
1050 return clearTimeout(marker);
1051 }
1052 try {
1053 return cachedClearTimeout(marker);
1054 } catch (e) {
1055 try {
1056 return cachedClearTimeout.call(null, marker);
1057 } catch (e) {
1058 return cachedClearTimeout.call(this, marker);
1059 }
1060 }
1061 }
1062 var queue = [];
1063 var draining = false;
1064 var currentQueue;
1065 var queueIndex = -1;
1066 function cleanUpNextTick() {
1067 if (!draining || !currentQueue) {
1068 return;
1069 }
1070 draining = false;
1071 if (currentQueue.length) {
1072 queue = currentQueue.concat(queue);
1073 } else {
1074 queueIndex = -1;
1075 }
1076 if (queue.length) {
1077 drainQueue();
1078 }
1079 }
1080 function drainQueue() {
1081 if (draining) {
1082 return;
1083 }
1084 var timeout = runTimeout(cleanUpNextTick);
1085 draining = true;
1086 var len = queue.length;
1087 while (len) {
1088 currentQueue = queue;
1089 queue = [];
1090 while (++queueIndex < len) {
1091 if (currentQueue) {
1092 currentQueue[queueIndex].run();
1093 }
1094 }
1095 queueIndex = -1;
1096 len = queue.length;
1097 }
1098 currentQueue = null;
1099 draining = false;
1100 runClearTimeout(timeout);
1101 }
1102 process.nextTick = function (fun) {
1103 var args = new Array(arguments.length - 1);
1104 if (arguments.length > 1) {
1105 for (var i = 1; i < arguments.length; i++) {
1106 args[i - 1] = arguments[i];
1107 }
1108 }
1109 queue.push(new Item(fun, args));
1110 if (queue.length === 1 && !draining) {
1111 runTimeout(drainQueue);
1112 }
1113 };
1114 function Item(fun, array) {
1115 this.fun = fun;
1116 this.array = array;
1117 }
1118 Item.prototype.run = function () {
1119 this.fun.apply(null, this.array);
1120 };
1121 process.title = 'browser';
1122 process.browser = true;
1123 process.env = {};
1124 process.argv = [];
1125 process.version = '';
1126 process.versions = {};
1127 function noop() {
1128 }
1129 process.on = noop;
1130 process.addListener = noop;
1131 process.once = noop;
1132 process.off = noop;
1133 process.removeListener = noop;
1134 process.removeAllListeners = noop;
1135 process.emit = noop;
1136 process.prependListener = noop;
1137 process.prependOnceListener = noop;
1138 process.listeners = function (name) {
1139 return [];
1140 };
1141 process.binding = function (name) {
1142 throw new Error('process.binding is not supported');
1143 };
1144 process.cwd = function () {
1145 return '/';
1146 };
1147 process.chdir = function (dir) {
1148 throw new Error('process.chdir is not supported');
1149 };
1150 process.umask = function () {
1151 return 0;
1152 };
1153 },
1154 {}
1155 ],
1156 2: [
1157 function (require, module, exports) {
1158 (function (setImmediate) {
1159 (function (root) {
1160 var setTimeoutFunc = setTimeout;
1161 function noop() {
1162 }
1163 function bind(fn, thisArg) {
1164 return function () {
1165 fn.apply(thisArg, arguments);
1166 };
1167 }
1168 function Promise(fn) {
1169 if (typeof this !== 'object')
1170 throw new TypeError('Promises must be constructed via new');
1171 if (typeof fn !== 'function')
1172 throw new TypeError('not a function');
1173 this._state = 0;
1174 this._handled = false;
1175 this._value = undefined;
1176 this._deferreds = [];
1177 doResolve(fn, this);
1178 }
1179 function handle(self, deferred) {
1180 while (self._state === 3) {
1181 self = self._value;
1182 }
1183 if (self._state === 0) {
1184 self._deferreds.push(deferred);
1185 return;
1186 }
1187 self._handled = true;
1188 Promise._immediateFn(function () {
1189 var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
1190 if (cb === null) {
1191 (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
1192 return;
1193 }
1194 var ret;
1195 try {
1196 ret = cb(self._value);
1197 } catch (e) {
1198 reject(deferred.promise, e);
1199 return;
1200 }
1201 resolve(deferred.promise, ret);
1202 });
1203 }
1204 function resolve(self, newValue) {
1205 try {
1206 if (newValue === self)
1207 throw new TypeError('A promise cannot be resolved with itself.');
1208 if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
1209 var then = newValue.then;
1210 if (newValue instanceof Promise) {
1211 self._state = 3;
1212 self._value = newValue;
1213 finale(self);
1214 return;
1215 } else if (typeof then === 'function') {
1216 doResolve(bind(then, newValue), self);
1217 return;
1218 }
1219 }
1220 self._state = 1;
1221 self._value = newValue;
1222 finale(self);
1223 } catch (e) {
1224 reject(self, e);
1225 }
1226 }
1227 function reject(self, newValue) {
1228 self._state = 2;
1229 self._value = newValue;
1230 finale(self);
1231 }
1232 function finale(self) {
1233 if (self._state === 2 && self._deferreds.length === 0) {
1234 Promise._immediateFn(function () {
1235 if (!self._handled) {
1236 Promise._unhandledRejectionFn(self._value);
1237 }
1238 });
1239 }
1240 for (var i = 0, len = self._deferreds.length; i < len; i++) {
1241 handle(self, self._deferreds[i]);
1242 }
1243 self._deferreds = null;
1244 }
1245 function Handler(onFulfilled, onRejected, promise) {
1246 this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
1247 this.onRejected = typeof onRejected === 'function' ? onRejected : null;
1248 this.promise = promise;
1249 }
1250 function doResolve(fn, self) {
1251 var done = false;
1252 try {
1253 fn(function (value) {
1254 if (done)
1255 return;
1256 done = true;
1257 resolve(self, value);
1258 }, function (reason) {
1259 if (done)
1260 return;
1261 done = true;
1262 reject(self, reason);
1263 });
1264 } catch (ex) {
1265 if (done)
1266 return;
1267 done = true;
1268 reject(self, ex);
1269 }
1270 }
1271 Promise.prototype['catch'] = function (onRejected) {
1272 return this.then(null, onRejected);
1273 };
1274 Promise.prototype.then = function (onFulfilled, onRejected) {
1275 var prom = new this.constructor(noop);
1276 handle(this, new Handler(onFulfilled, onRejected, prom));
1277 return prom;
1278 };
1279 Promise.all = function (arr) {
1280 var args = Array.prototype.slice.call(arr);
1281 return new Promise(function (resolve, reject) {
1282 if (args.length === 0)
1283 return resolve([]);
1284 var remaining = args.length;
1285 function res(i, val) {
1286 try {
1287 if (val && (typeof val === 'object' || typeof val === 'function')) {
1288 var then = val.then;
1289 if (typeof then === 'function') {
1290 then.call(val, function (val) {
1291 res(i, val);
1292 }, reject);
1293 return;
1294 }
1295 }
1296 args[i] = val;
1297 if (--remaining === 0) {
1298 resolve(args);
1299 }
1300 } catch (ex) {
1301 reject(ex);
1302 }
1303 }
1304 for (var i = 0; i < args.length; i++) {
1305 res(i, args[i]);
1306 }
1307 });
1308 };
1309 Promise.resolve = function (value) {
1310 if (value && typeof value === 'object' && value.constructor === Promise) {
1311 return value;
1312 }
1313 return new Promise(function (resolve) {
1314 resolve(value);
1315 });
1316 };
1317 Promise.reject = function (value) {
1318 return new Promise(function (resolve, reject) {
1319 reject(value);
1320 });
1321 };
1322 Promise.race = function (values) {
1323 return new Promise(function (resolve, reject) {
1324 for (var i = 0, len = values.length; i < len; i++) {
1325 values[i].then(resolve, reject);
1326 }
1327 });
1328 };
1329 Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {
1330 setImmediate(fn);
1331 } : function (fn) {
1332 setTimeoutFunc(fn, 0);
1333 };
1334 Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
1335 if (typeof console !== 'undefined' && console) {
1336 console.warn('Possible Unhandled Promise Rejection:', err);
1337 }
1338 };
1339 Promise._setImmediateFn = function _setImmediateFn(fn) {
1340 Promise._immediateFn = fn;
1341 };
1342 Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {
1343 Promise._unhandledRejectionFn = fn;
1344 };
1345 if (typeof module !== 'undefined' && module.exports) {
1346 module.exports = Promise;
1347 } else if (!root.Promise) {
1348 root.Promise = Promise;
1349 }
1350 }(this));
1351 }.call(this, require('timers').setImmediate));
1352 },
1353 { 'timers': 3 }
1354 ],
1355 3: [
1356 function (require, module, exports) {
1357 (function (setImmediate, clearImmediate) {
1358 var nextTick = require('process/browser.js').nextTick;
1359 var apply = Function.prototype.apply;
1360 var slice = Array.prototype.slice;
1361 var immediateIds = {};
1362 var nextImmediateId = 0;
1363 exports.setTimeout = function () {
1364 return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
1365 };
1366 exports.setInterval = function () {
1367 return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
1368 };
1369 exports.clearTimeout = exports.clearInterval = function (timeout) {
1370 timeout.close();
1371 };
1372 function Timeout(id, clearFn) {
1373 this._id = id;
1374 this._clearFn = clearFn;
1375 }
1376 Timeout.prototype.unref = Timeout.prototype.ref = function () {
1377 };
1378 Timeout.prototype.close = function () {
1379 this._clearFn.call(window, this._id);
1380 };
1381 exports.enroll = function (item, msecs) {
1382 clearTimeout(item._idleTimeoutId);
1383 item._idleTimeout = msecs;
1384 };
1385 exports.unenroll = function (item) {
1386 clearTimeout(item._idleTimeoutId);
1387 item._idleTimeout = -1;
1388 };
1389 exports._unrefActive = exports.active = function (item) {
1390 clearTimeout(item._idleTimeoutId);
1391 var msecs = item._idleTimeout;
1392 if (msecs >= 0) {
1393 item._idleTimeoutId = setTimeout(function onTimeout() {
1394 if (item._onTimeout)
1395 item._onTimeout();
1396 }, msecs);
1397 }
1398 };
1399 exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {
1400 var id = nextImmediateId++;
1401 var args = arguments.length < 2 ? false : slice.call(arguments, 1);
1402 immediateIds[id] = true;
1403 nextTick(function onNextTick() {
1404 if (immediateIds[id]) {
1405 if (args) {
1406 fn.apply(null, args);
1407 } else {
1408 fn.call(null);
1409 }
1410 exports.clearImmediate(id);
1411 }
1412 });
1413 return id;
1414 };
1415 exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {
1416 delete immediateIds[id];
1417 };
1418 }.call(this, require('timers').setImmediate, require('timers').clearImmediate));
1419 },
1420 {
1421 'process/browser.js': 1,
1422 'timers': 3
1423 }
1424 ],
1425 4: [
1426 function (require, module, exports) {
1427 var promisePolyfill = require('promise-polyfill');
1428 var Global = function () {
1429 if (typeof window !== 'undefined') {
1430 return window;
1431 } else {
1432 return Function('return this;')();
1433 }
1434 }();
1435 module.exports = { boltExport: Global.Promise || promisePolyfill };
1436 },
1437 { 'promise-polyfill': 2 }
1438 ]
1439 }, {}, [4])(4);
1440 }));
1441 }(undefined, exports$1, module, undefined));
1442 var Promise = module.exports.boltExport;
1443
1444 var nu = function (baseFn) {
1445 var data = Option.none();
1446 var callbacks = [];
1447 var map = function (f) {
1448 return nu(function (nCallback) {
1449 get(function (data) {
1450 nCallback(f(data));
1451 });
1452 });
1453 };
1454 var get = function (nCallback) {
1455 if (isReady()) {
1456 call(nCallback);
1457 } else {
1458 callbacks.push(nCallback);
1459 }
1460 };
1461 var set = function (x) {
1462 data = Option.some(x);
1463 run(callbacks);
1464 callbacks = [];
1465 };
1466 var isReady = function () {
1467 return data.isSome();
1468 };
1469 var run = function (cbs) {
1470 each(cbs, call);
1471 };
1472 var call = function (cb) {
1473 data.each(function (x) {
1474 domGlobals.setTimeout(function () {
1475 cb(x);
1476 }, 0);
1477 });
1478 };
1479 baseFn(set);
1480 return {
1481 get: get,
1482 map: map,
1483 isReady: isReady
1484 };
1485 };
1486 var pure = function (a) {
1487 return nu(function (callback) {
1488 callback(a);
1489 });
1490 };
1491 var LazyValue = {
1492 nu: nu,
1493 pure: pure
1494 };
1495
1496 var errorReporter = function (err) {
1497 domGlobals.setTimeout(function () {
1498 throw err;
1499 }, 0);
1500 };
1501 var make = function (run) {
1502 var get = function (callback) {
1503 run().then(callback, errorReporter);
1504 };
1505 var map = function (fab) {
1506 return make(function () {
1507 return run().then(fab);
1508 });
1509 };
1510 var bind = function (aFutureB) {
1511 return make(function () {
1512 return run().then(function (v) {
1513 return aFutureB(v).toPromise();
1514 });
1515 });
1516 };
1517 var anonBind = function (futureB) {
1518 return make(function () {
1519 return run().then(function () {
1520 return futureB.toPromise();
1521 });
1522 });
1523 };
1524 var toLazy = function () {
1525 return LazyValue.nu(get);
1526 };
1527 var toCached = function () {
1528 var cache = null;
1529 return make(function () {
1530 if (cache === null) {
1531 cache = run();
1532 }
1533 return cache;
1534 });
1535 };
1536 var toPromise = run;
1537 return {
1538 map: map,
1539 bind: bind,
1540 anonBind: anonBind,
1541 toLazy: toLazy,
1542 toCached: toCached,
1543 toPromise: toPromise,
1544 get: get
1545 };
1546 };
1547 var nu$1 = function (baseFn) {
1548 return make(function () {
1549 return new Promise(baseFn);
1550 });
1551 };
1552 var pure$1 = function (a) {
1553 return make(function () {
1554 return Promise.resolve(a);
1555 });
1556 };
1557 var Future = {
1558 nu: nu$1,
1559 pure: pure$1
1560 };
1561
1562 var par = function (asyncValues, nu) {
1563 return nu(function (callback) {
1564 var r = [];
1565 var count = 0;
1566 var cb = function (i) {
1567 return function (value) {
1568 r[i] = value;
1569 count++;
1570 if (count >= asyncValues.length) {
1571 callback(r);
1572 }
1573 };
1574 };
1575 if (asyncValues.length === 0) {
1576 callback([]);
1577 } else {
1578 each(asyncValues, function (asyncValue, i) {
1579 asyncValue.get(cb(i));
1580 });
1581 }
1582 });
1583 };
1584
1585 var par$1 = function (futures) {
1586 return par(futures, Future.nu);
1587 };
1588 var traverse = function (array, fn) {
1589 return par$1(map(array, fn));
1590 };
1591 var mapM = traverse;
1592
1593 var value = function () {
1594 var subject = Cell(Option.none());
1595 var clear = function () {
1596 subject.set(Option.none());
1597 };
1598 var set = function (s) {
1599 subject.set(Option.some(s));
1600 };
1601 var on = function (f) {
1602 subject.get().each(f);
1603 };
1604 var isSet = function () {
1605 return subject.get().isSome();
1606 };
1607 return {
1608 clear: clear,
1609 set: set,
1610 isSet: isSet,
1611 on: on
1612 };
1613 };
1614
1615 var pasteHtml$1 = function (editor, html, internalFlag) {
1616 var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html);
1617 var args = ProcessFilters.process(editor, InternalHtml.unmark(html), internal);
1618 if (args.cancelled === false) {
1619 SmartPaste.insertContent(editor, args.content);
1620 }
1621 };
1622 var pasteText = function (editor, text) {
1623 text = editor.dom.encode(text).replace(/\r\n/g, '\n');
1624 text = Newlines.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);
1625 pasteHtml$1(editor, text, false);
1626 };
1627 var getDataTransferItems = function (dataTransfer) {
1628 var items = {};
1629 var mceInternalUrlPrefix = 'data:text/mce-internal,';
1630 if (dataTransfer) {
1631 if (dataTransfer.getData) {
1632 var legacyText = dataTransfer.getData('Text');
1633 if (legacyText && legacyText.length > 0) {
1634 if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {
1635 items['text/plain'] = legacyText;
1636 }
1637 }
1638 }
1639 if (dataTransfer.types) {
1640 for (var i = 0; i < dataTransfer.types.length; i++) {
1641 var contentType = dataTransfer.types[i];
1642 try {
1643 items[contentType] = dataTransfer.getData(contentType);
1644 } catch (ex) {
1645 items[contentType] = '';
1646 }
1647 }
1648 }
1649 }
1650 return items;
1651 };
1652 var getClipboardContent = function (editor, clipboardEvent) {
1653 var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);
1654 return Utils.isMsEdge() ? global$4.extend(content, { 'text/html': '' }) : content;
1655 };
1656 var hasContentType = function (clipboardContent, mimeType) {
1657 return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;
1658 };
1659 var hasHtmlOrText = function (content) {
1660 return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');
1661 };
1662 var getBase64FromUri = function (uri) {
1663 var idx;
1664 idx = uri.indexOf(',');
1665 if (idx !== -1) {
1666 return uri.substr(idx + 1);
1667 }
1668 return null;
1669 };
1670 var isValidDataUriImage = function (settings, imgElm) {
1671 return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;
1672 };
1673 var extractFilename = function (editor, str) {
1674 var m = str.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i);
1675 return m ? editor.dom.encode(m[1]) : null;
1676 };
1677 var uniqueId = Utils.createIdGenerator('mceclip');
1678 var pasteImage = function (editor, imageItem) {
1679 var base64 = getBase64FromUri(imageItem.uri);
1680 var id = uniqueId();
1681 var name = editor.settings.images_reuse_filename && imageItem.blob.name ? extractFilename(editor, imageItem.blob.name) : id;
1682 var img = new domGlobals.Image();
1683 img.src = imageItem.uri;
1684 if (isValidDataUriImage(editor.settings, img)) {
1685 var blobCache = editor.editorUpload.blobCache;
1686 var blobInfo = void 0, existingBlobInfo = void 0;
1687 existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {
1688 return cachedBlobInfo.base64() === base64;
1689 });
1690 if (!existingBlobInfo) {
1691 blobInfo = blobCache.create(id, imageItem.blob, base64, name);
1692 blobCache.add(blobInfo);
1693 } else {
1694 blobInfo = existingBlobInfo;
1695 }
1696 pasteHtml$1(editor, '<img src="' + blobInfo.blobUri() + '">', false);
1697 } else {
1698 pasteHtml$1(editor, '<img src="' + imageItem.uri + '">', false);
1699 }
1700 };
1701 var isClipboardEvent = function (event) {
1702 return event.type === 'paste';
1703 };
1704 var readBlobsAsDataUris = function (items) {
1705 return mapM(items, function (item) {
1706 return Future.nu(function (resolve) {
1707 var blob = item.getAsFile ? item.getAsFile() : item;
1708 var reader = new window.FileReader();
1709 reader.onload = function () {
1710 resolve({
1711 blob: blob,
1712 uri: reader.result
1713 });
1714 };
1715 reader.readAsDataURL(blob);
1716 });
1717 });
1718 };
1719 var getImagesFromDataTransfer = function (dataTransfer) {
1720 var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) {
1721 return item.getAsFile();
1722 }) : [];
1723 var files = dataTransfer.files ? from$1(dataTransfer.files) : [];
1724 var images = filter$1(items.length > 0 ? items : files, function (file) {
1725 return /^image\/(jpeg|png|gif|bmp)$/.test(file.type);
1726 });
1727 return images;
1728 };
1729 var pasteImageData = function (editor, e, rng) {
1730 var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;
1731 if (editor.settings.paste_data_images && dataTransfer) {
1732 var images = getImagesFromDataTransfer(dataTransfer);
1733 if (images.length > 0) {
1734 e.preventDefault();
1735 readBlobsAsDataUris(images).get(function (blobResults) {
1736 if (rng) {
1737 editor.selection.setRng(rng);
1738 }
1739 each(blobResults, function (result) {
1740 pasteImage(editor, result);
1741 });
1742 });
1743 return true;
1744 }
1745 }
1746 return false;
1747 };
1748 var isBrokenAndroidClipboardEvent = function (e) {
1749 var clipboardData = e.clipboardData;
1750 return domGlobals.navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;
1751 };
1752 var isKeyboardPasteEvent = function (e) {
1753 return global$5.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;
1754 };
1755 var registerEventHandlers = function (editor, pasteBin, pasteFormat) {
1756 var keyboardPasteEvent = value();
1757 var keyboardPastePlainTextState;
1758 editor.on('keydown', function (e) {
1759 function removePasteBinOnKeyUp(e) {
1760 if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
1761 pasteBin.remove();
1762 }
1763 }
1764 if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
1765 keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;
1766 if (keyboardPastePlainTextState && global$2.webkit && domGlobals.navigator.userAgent.indexOf('Version/') !== -1) {
1767 return;
1768 }
1769 e.stopImmediatePropagation();
1770 keyboardPasteEvent.set(e);
1771 window.setTimeout(function () {
1772 keyboardPasteEvent.clear();
1773 }, 100);
1774 if (global$2.ie && keyboardPastePlainTextState) {
1775 e.preventDefault();
1776 Events.firePaste(editor, true);
1777 return;
1778 }
1779 pasteBin.remove();
1780 pasteBin.create();
1781 editor.once('keyup', removePasteBinOnKeyUp);
1782 editor.once('paste', function () {
1783 editor.off('keyup', removePasteBinOnKeyUp);
1784 });
1785 }
1786 });
1787 function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {
1788 var content, isPlainTextHtml;
1789 if (hasContentType(clipboardContent, 'text/html')) {
1790 content = clipboardContent['text/html'];
1791 } else {
1792 content = pasteBin.getHtml();
1793 internal = internal ? internal : InternalHtml.isMarked(content);
1794 if (pasteBin.isDefaultContent(content)) {
1795 plainTextMode = true;
1796 }
1797 }
1798 content = Utils.trimHtml(content);
1799 pasteBin.remove();
1800 isPlainTextHtml = internal === false && Newlines.isPlainText(content);
1801 if (!content.length || isPlainTextHtml) {
1802 plainTextMode = true;
1803 }
1804 if (plainTextMode) {
1805 if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {
1806 content = clipboardContent['text/plain'];
1807 } else {
1808 content = Utils.innerText(content);
1809 }
1810 }
1811 if (pasteBin.isDefaultContent(content)) {
1812 if (!isKeyBoardPaste) {
1813 editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');
1814 }
1815 return;
1816 }
1817 if (plainTextMode) {
1818 pasteText(editor, content);
1819 } else {
1820 pasteHtml$1(editor, content, internal);
1821 }
1822 }
1823 var getLastRng = function () {
1824 return pasteBin.getLastRng() || editor.selection.getRng();
1825 };
1826 editor.on('paste', function (e) {
1827 var isKeyBoardPaste = keyboardPasteEvent.isSet();
1828 var clipboardContent = getClipboardContent(editor, e);
1829 var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;
1830 var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime());
1831 keyboardPastePlainTextState = false;
1832 if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {
1833 pasteBin.remove();
1834 return;
1835 }
1836 if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {
1837 pasteBin.remove();
1838 return;
1839 }
1840 if (!isKeyBoardPaste) {
1841 e.preventDefault();
1842 }
1843 if (global$2.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {
1844 pasteBin.create();
1845 editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {
1846 e.stopPropagation();
1847 });
1848 editor.getDoc().execCommand('Paste', false, null);
1849 clipboardContent['text/html'] = pasteBin.getHtml();
1850 }
1851 if (hasContentType(clipboardContent, 'text/html')) {
1852 e.preventDefault();
1853 if (!internal) {
1854 internal = InternalHtml.isMarked(clipboardContent['text/html']);
1855 }
1856 insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
1857 } else {
1858 global$3.setEditorTimeout(editor, function () {
1859 insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
1860 }, 0);
1861 }
1862 });
1863 };
1864 var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {
1865 registerEventHandlers(editor, pasteBin, pasteFormat);
1866 var src;
1867 editor.parser.addNodeFilter('img', function (nodes, name, args) {
1868 var isPasteInsert = function (args) {
1869 return args.data && args.data.paste === true;
1870 };
1871 var remove = function (node) {
1872 if (!node.attr('data-mce-object') && src !== global$2.transparentSrc) {
1873 node.remove();
1874 }
1875 };
1876 var isWebKitFakeUrl = function (src) {
1877 return src.indexOf('webkit-fake-url') === 0;
1878 };
1879 var isDataUri = function (src) {
1880 return src.indexOf('data:') === 0;
1881 };
1882 if (!editor.settings.paste_data_images && isPasteInsert(args)) {
1883 var i = nodes.length;
1884 while (i--) {
1885 src = nodes[i].attributes.map.src;
1886 if (!src) {
1887 continue;
1888 }
1889 if (isWebKitFakeUrl(src)) {
1890 remove(nodes[i]);
1891 } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {
1892 remove(nodes[i]);
1893 }
1894 }
1895 }
1896 });
1897 };
1898
1899 var getPasteBinParent = function (editor) {
1900 return global$2.ie && editor.inline ? domGlobals.document.body : editor.getBody();
1901 };
1902 var isExternalPasteBin = function (editor) {
1903 return getPasteBinParent(editor) !== editor.getBody();
1904 };
1905 var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) {
1906 if (isExternalPasteBin(editor)) {
1907 editor.dom.bind(pasteBinElm, 'paste keyup', function (e) {
1908 if (!isDefault(editor, pasteBinDefaultContent)) {
1909 editor.fire('paste');
1910 }
1911 });
1912 }
1913 };
1914 var create = function (editor, lastRngCell, pasteBinDefaultContent) {
1915 var dom = editor.dom, body = editor.getBody();
1916 var pasteBinElm;
1917 lastRngCell.set(editor.selection.getRng());
1918 pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {
1919 'id': 'mcepastebin',
1920 'class': 'mce-pastebin',
1921 'contentEditable': true,
1922 'data-mce-bogus': 'all',
1923 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'
1924 }, pasteBinDefaultContent);
1925 if (global$2.ie || global$2.gecko) {
1926 dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);
1927 }
1928 dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {
1929 e.stopPropagation();
1930 });
1931 delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent);
1932 pasteBinElm.focus();
1933 editor.selection.select(pasteBinElm, true);
1934 };
1935 var remove = function (editor, lastRngCell) {
1936 if (getEl(editor)) {
1937 var pasteBinClone = void 0;
1938 var lastRng = lastRngCell.get();
1939 while (pasteBinClone = editor.dom.get('mcepastebin')) {
1940 editor.dom.remove(pasteBinClone);
1941 editor.dom.unbind(pasteBinClone);
1942 }
1943 if (lastRng) {
1944 editor.selection.setRng(lastRng);
1945 }
1946 }
1947 lastRngCell.set(null);
1948 };
1949 var getEl = function (editor) {
1950 return editor.dom.get('mcepastebin');
1951 };
1952 var getHtml = function (editor) {
1953 var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;
1954 var copyAndRemove = function (toElm, fromElm) {
1955 toElm.appendChild(fromElm);
1956 editor.dom.remove(fromElm, true);
1957 };
1958 pasteBinClones = global$4.grep(getPasteBinParent(editor).childNodes, function (elm) {
1959 return elm.id === 'mcepastebin';
1960 });
1961 pasteBinElm = pasteBinClones.shift();
1962 global$4.each(pasteBinClones, function (pasteBinClone) {
1963 copyAndRemove(pasteBinElm, pasteBinClone);
1964 });
1965 dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);
1966 for (i = dirtyWrappers.length - 1; i >= 0; i--) {
1967 cleanWrapper = editor.dom.create('div');
1968 pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);
1969 copyAndRemove(cleanWrapper, dirtyWrappers[i]);
1970 }
1971 return pasteBinElm ? pasteBinElm.innerHTML : '';
1972 };
1973 var getLastRng = function (lastRng) {
1974 return lastRng.get();
1975 };
1976 var isDefaultContent = function (pasteBinDefaultContent, content) {
1977 return content === pasteBinDefaultContent;
1978 };
1979 var isPasteBin = function (elm) {
1980 return elm && elm.id === 'mcepastebin';
1981 };
1982 var isDefault = function (editor, pasteBinDefaultContent) {
1983 var pasteBinElm = getEl(editor);
1984 return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);
1985 };
1986 var PasteBin = function (editor) {
1987 var lastRng = Cell(null);
1988 var pasteBinDefaultContent = '%MCEPASTEBIN%';
1989 return {
1990 create: function () {
1991 return create(editor, lastRng, pasteBinDefaultContent);
1992 },
1993 remove: function () {
1994 return remove(editor, lastRng);
1995 },
1996 getEl: function () {
1997 return getEl(editor);
1998 },
1999 getHtml: function () {
2000 return getHtml(editor);
2001 },
2002 getLastRng: function () {
2003 return getLastRng(lastRng);
2004 },
2005 isDefault: function () {
2006 return isDefault(editor, pasteBinDefaultContent);
2007 },
2008 isDefaultContent: function (content) {
2009 return isDefaultContent(pasteBinDefaultContent, content);
2010 }
2011 };
2012 };
2013
2014 var Clipboard = function (editor, pasteFormat) {
2015 var pasteBin = PasteBin(editor);
2016 editor.on('preInit', function () {
2017 return registerEventsAndFilters(editor, pasteBin, pasteFormat);
2018 });
2019 return {
2020 pasteFormat: pasteFormat,
2021 pasteHtml: function (html, internalFlag) {
2022 return pasteHtml$1(editor, html, internalFlag);
2023 },
2024 pasteText: function (text) {
2025 return pasteText(editor, text);
2026 },
2027 pasteImageData: function (e, rng) {
2028 return pasteImageData(editor, e, rng);
2029 },
2030 getDataTransferItems: getDataTransferItems,
2031 hasHtmlOrText: hasHtmlOrText,
2032 hasContentType: hasContentType
2033 };
2034 };
2035
2036 var noop$1 = function () {
2037 };
2038 var hasWorkingClipboardApi = function (clipboardData) {
2039 return global$2.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true;
2040 };
2041 var setHtml5Clipboard = function (clipboardData, html, text) {
2042 if (hasWorkingClipboardApi(clipboardData)) {
2043 try {
2044 clipboardData.clearData();
2045 clipboardData.setData('text/html', html);
2046 clipboardData.setData('text/plain', text);
2047 clipboardData.setData(InternalHtml.internalHtmlMime(), html);
2048 return true;
2049 } catch (e) {
2050 return false;
2051 }
2052 } else {
2053 return false;
2054 }
2055 };
2056 var setClipboardData = function (evt, data, fallback, done) {
2057 if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {
2058 evt.preventDefault();
2059 done();
2060 } else {
2061 fallback(data.html, done);
2062 }
2063 };
2064 var fallback = function (editor) {
2065 return function (html, done) {
2066 var markedHtml = InternalHtml.mark(html);
2067 var outer = editor.dom.create('div', {
2068 'contenteditable': 'false',
2069 'data-mce-bogus': 'all'
2070 });
2071 var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);
2072 editor.dom.setStyles(outer, {
2073 position: 'fixed',
2074 top: '0',
2075 left: '-3000px',
2076 width: '1000px',
2077 overflow: 'hidden'
2078 });
2079 outer.appendChild(inner);
2080 editor.dom.add(editor.getBody(), outer);
2081 var range = editor.selection.getRng();
2082 inner.focus();
2083 var offscreenRange = editor.dom.createRng();
2084 offscreenRange.selectNodeContents(inner);
2085 editor.selection.setRng(offscreenRange);
2086 setTimeout(function () {
2087 editor.selection.setRng(range);
2088 outer.parentNode.removeChild(outer);
2089 done();
2090 }, 0);
2091 };
2092 };
2093 var getData = function (editor) {
2094 return {
2095 html: editor.selection.getContent({ contextual: true }),
2096 text: editor.selection.getContent({ format: 'text' })
2097 };
2098 };
2099 var isTableSelection = function (editor) {
2100 return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());
2101 };
2102 var hasSelectedContent = function (editor) {
2103 return !editor.selection.isCollapsed() || isTableSelection(editor);
2104 };
2105 var cut = function (editor) {
2106 return function (evt) {
2107 if (hasSelectedContent(editor)) {
2108 setClipboardData(evt, getData(editor), fallback(editor), function () {
2109 setTimeout(function () {
2110 editor.execCommand('Delete');
2111 }, 0);
2112 });
2113 }
2114 };
2115 };
2116 var copy = function (editor) {
2117 return function (evt) {
2118 if (hasSelectedContent(editor)) {
2119 setClipboardData(evt, getData(editor), fallback(editor), noop$1);
2120 }
2121 };
2122 };
2123 var register$1 = function (editor) {
2124 editor.on('cut', cut(editor));
2125 editor.on('copy', copy(editor));
2126 };
2127 var CutCopy = { register: register$1 };
2128
2129 var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
2130
2131 var getCaretRangeFromEvent = function (editor, e) {
2132 return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());
2133 };
2134 var isPlainTextFileUrl = function (content) {
2135 var plainTextContent = content['text/plain'];
2136 return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;
2137 };
2138 var setFocusedRange = function (editor, rng) {
2139 editor.focus();
2140 editor.selection.setRng(rng);
2141 };
2142 var setup = function (editor, clipboard, draggingInternallyState) {
2143 if (Settings.shouldBlockDrop(editor)) {
2144 editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {
2145 e.preventDefault();
2146 e.stopPropagation();
2147 });
2148 }
2149 if (!Settings.shouldPasteDataImages(editor)) {
2150 editor.on('drop', function (e) {
2151 var dataTransfer = e.dataTransfer;
2152 if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {
2153 e.preventDefault();
2154 }
2155 });
2156 }
2157 editor.on('drop', function (e) {
2158 var dropContent, rng;
2159 rng = getCaretRangeFromEvent(editor, e);
2160 if (e.isDefaultPrevented() || draggingInternallyState.get()) {
2161 return;
2162 }
2163 dropContent = clipboard.getDataTransferItems(e.dataTransfer);
2164 var internal = clipboard.hasContentType(dropContent, InternalHtml.internalHtmlMime());
2165 if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {
2166 return;
2167 }
2168 if (rng && Settings.shouldFilterDrop(editor)) {
2169 var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];
2170 if (content_1) {
2171 e.preventDefault();
2172 global$3.setEditorTimeout(editor, function () {
2173 editor.undoManager.transact(function () {
2174 if (dropContent['mce-internal']) {
2175 editor.execCommand('Delete');
2176 }
2177 setFocusedRange(editor, rng);
2178 content_1 = Utils.trimHtml(content_1);
2179 if (!dropContent['text/html']) {
2180 clipboard.pasteText(content_1);
2181 } else {
2182 clipboard.pasteHtml(content_1, internal);
2183 }
2184 });
2185 });
2186 }
2187 }
2188 });
2189 editor.on('dragstart', function (e) {
2190 draggingInternallyState.set(true);
2191 });
2192 editor.on('dragover dragend', function (e) {
2193 if (Settings.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {
2194 e.preventDefault();
2195 setFocusedRange(editor, getCaretRangeFromEvent(editor, e));
2196 }
2197 if (e.type === 'dragend') {
2198 draggingInternallyState.set(false);
2199 }
2200 });
2201 };
2202 var DragDrop = { setup: setup };
2203
2204 var setup$1 = function (editor) {
2205 var plugin = editor.plugins.paste;
2206 var preProcess = Settings.getPreProcess(editor);
2207 if (preProcess) {
2208 editor.on('PastePreProcess', function (e) {
2209 preProcess.call(plugin, plugin, e);
2210 });
2211 }
2212 var postProcess = Settings.getPostProcess(editor);
2213 if (postProcess) {
2214 editor.on('PastePostProcess', function (e) {
2215 postProcess.call(plugin, plugin, e);
2216 });
2217 }
2218 };
2219 var PrePostProcess = { setup: setup$1 };
2220
2221 function addPreProcessFilter(editor, filterFunc) {
2222 editor.on('PastePreProcess', function (e) {
2223 e.content = filterFunc(editor, e.content, e.internal, e.wordContent);
2224 });
2225 }
2226 function addPostProcessFilter(editor, filterFunc) {
2227 editor.on('PastePostProcess', function (e) {
2228 filterFunc(editor, e.node);
2229 });
2230 }
2231 function removeExplorerBrElementsAfterBlocks(editor, html) {
2232 if (!WordFilter.isWordContent(html)) {
2233 return html;
2234 }
2235 var blockElements = [];
2236 global$4.each(editor.schema.getBlockElements(), function (block, blockName) {
2237 blockElements.push(blockName);
2238 });
2239 var explorerBlocksRegExp = new RegExp('(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*', 'g');
2240 html = Utils.filter(html, [[
2241 explorerBlocksRegExp,
2242 '$1'
2243 ]]);
2244 html = Utils.filter(html, [
2245 [
2246 /<br><br>/g,
2247 '<BR><BR>'
2248 ],
2249 [
2250 /<br>/g,
2251 ' '
2252 ],
2253 [
2254 /<BR><BR>/g,
2255 '<br>'
2256 ]
2257 ]);
2258 return html;
2259 }
2260 function removeWebKitStyles(editor, content, internal, isWordHtml) {
2261 if (isWordHtml || internal) {
2262 return content;
2263 }
2264 var webKitStylesSetting = Settings.getWebkitStyles(editor);
2265 var webKitStyles;
2266 if (Settings.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {
2267 return content;
2268 }
2269 if (webKitStylesSetting) {
2270 webKitStyles = webKitStylesSetting.split(/[, ]/);
2271 }
2272 if (webKitStyles) {
2273 var dom_1 = editor.dom, node_1 = editor.selection.getNode();
2274 content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, function (all, before, value, after) {
2275 var inputStyles = dom_1.parseStyle(dom_1.decode(value));
2276 var outputStyles = {};
2277 if (webKitStyles === 'none') {
2278 return before + after;
2279 }
2280 for (var i = 0; i < webKitStyles.length; i++) {
2281 var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);
2282 if (/color/.test(webKitStyles[i])) {
2283 inputValue = dom_1.toHex(inputValue);
2284 currentValue = dom_1.toHex(currentValue);
2285 }
2286 if (currentValue !== inputValue) {
2287 outputStyles[webKitStyles[i]] = inputValue;
2288 }
2289 }
2290 outputStyles = dom_1.serializeStyle(outputStyles, 'span');
2291 if (outputStyles) {
2292 return before + ' style="' + outputStyles + '"' + after;
2293 }
2294 return before + after;
2295 });
2296 } else {
2297 content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, '$1$3');
2298 }
2299 content = content.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi, function (all, before, value, after) {
2300 return before + ' style="' + value + '"' + after;
2301 });
2302 return content;
2303 }
2304 function removeUnderlineAndFontInAnchor(editor, root) {
2305 editor.$('a', root).find('font,u').each(function (i, node) {
2306 editor.dom.remove(node, true);
2307 });
2308 }
2309 var setup$2 = function (editor) {
2310 if (global$2.webkit) {
2311 addPreProcessFilter(editor, removeWebKitStyles);
2312 }
2313 if (global$2.ie) {
2314 addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);
2315 addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);
2316 }
2317 };
2318 var Quirks = { setup: setup$2 };
2319
2320 var stateChange = function (editor, clipboard, e) {
2321 var ctrl = e.control;
2322 ctrl.active(clipboard.pasteFormat.get() === 'text');
2323 editor.on('PastePlainTextToggle', function (e) {
2324 ctrl.active(e.state);
2325 });
2326 };
2327 var register$2 = function (editor, clipboard) {
2328 var postRender = curry(stateChange, editor, clipboard);
2329 editor.addButton('pastetext', {
2330 active: false,
2331 icon: 'pastetext',
2332 tooltip: 'Paste as text',
2333 cmd: 'mceTogglePlainTextPaste',
2334 onPostRender: postRender
2335 });
2336 editor.addMenuItem('pastetext', {
2337 text: 'Paste as text',
2338 selectable: true,
2339 active: clipboard.pasteFormat,
2340 cmd: 'mceTogglePlainTextPaste',
2341 onPostRender: postRender
2342 });
2343 };
2344 var Buttons = { register: register$2 };
2345
2346 global$1.add('paste', function (editor) {
2347 if (DetectProPlugin.hasProPlugin(editor) === false) {
2348 var userIsInformedState = Cell(false);
2349 var draggingInternallyState = Cell(false);
2350 var pasteFormat = Cell(Settings.isPasteAsTextEnabled(editor) ? 'text' : 'html');
2351 var clipboard = Clipboard(editor, pasteFormat);
2352 var quirks = Quirks.setup(editor);
2353 Buttons.register(editor, clipboard);
2354 Commands.register(editor, clipboard, userIsInformedState);
2355 PrePostProcess.setup(editor);
2356 CutCopy.register(editor);
2357 DragDrop.setup(editor, clipboard, draggingInternallyState);
2358 return Api.get(clipboard, quirks);
2359 }
2360 });
2361 function Plugin () {
2362 }
2363
2364 return Plugin;
2365
2366}(window));
2367})();
2368
Ui Ux Design – Teachers Night Out https://cardgames4educators.com Wed, 16 Oct 2024 22:24:18 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 https://cardgames4educators.com/wp-content/uploads/2024/06/cropped-Card-4-Educators-logo-32x32.png Ui Ux Design – Teachers Night Out https://cardgames4educators.com 32 32 Masters In English How English Speaker https://cardgames4educators.com/masters-in-english-how-english-speaker/ https://cardgames4educators.com/masters-in-english-how-english-speaker/#comments Mon, 27 May 2024 08:54:45 +0000 https://themexriver.com/wp/kadu/?p=1

Erat himenaeos neque id sagittis massa. Hac suscipit pulvinar dignissim platea magnis eu. Don tellus a pharetra inceptos efficitur dui pulvinar. Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent pulvinar odio volutpat parturient. Quisque risus finibus suspendisse mus purus magnis facilisi condimentum consectetur dui. Curae elit suspendisse cursus vehicula.

Turpis taciti class non vel pretium quis pulvinar tempor lobortis nunc. Libero phasellus parturient sapien volutpat malesuada ornare. Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae. Porta est tempor ex eget feugiat vulputate ipsum. Justo nec iaculis habitant diam arcu fermentum.

We offer comprehen sive emplo ment services such as assistance wit employer compliance.Our company is your strategic HR partner as instead of HR. john smithson

Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae.

Exploring Learning Landscapes in Academic

Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent.

]]>
https://cardgames4educators.com/masters-in-english-how-english-speaker/feed/ 1