diff --git a/src/wp-includes/js/tinymce/plugins/charmap/plugin.js b/src/wp-includes/js/tinymce/plugins/charmap/plugin.js index 295d8d4903..90de9383ca 100644 --- a/src/wp-includes/js/tinymce/plugins/charmap/plugin.js +++ b/src/wp-includes/js/tinymce/plugins/charmap/plugin.js @@ -117,16 +117,19 @@ tinymce.PluginManager.add('charmap', function(editor) { ['195', 'A - tilde'], ['196', 'A - diaeresis'], ['197', 'A - ring above'], + ['256', 'A - macron'], ['198', 'ligature AE'], ['199', 'C - cedilla'], ['200', 'E - grave'], ['201', 'E - acute'], ['202', 'E - circumflex'], ['203', 'E - diaeresis'], + ['274', 'E - macron'], ['204', 'I - grave'], ['205', 'I - acute'], ['206', 'I - circumflex'], ['207', 'I - diaeresis'], + ['298', 'I - macron'], ['208', 'ETH'], ['209', 'N - tilde'], ['210', 'O - grave'], @@ -135,14 +138,17 @@ tinymce.PluginManager.add('charmap', function(editor) { ['213', 'O - tilde'], ['214', 'O - diaeresis'], ['216', 'O - slash'], + ['332', 'O - macron'], ['338', 'ligature OE'], ['352', 'S - caron'], ['217', 'U - grave'], ['218', 'U - acute'], ['219', 'U - circumflex'], ['220', 'U - diaeresis'], + ['362', 'U - macron'], ['221', 'Y - acute'], ['376', 'Y - diaeresis'], + ['562', 'Y - macron'], ['222', 'THORN'], ['224', 'a - grave'], ['225', 'a - acute'], @@ -150,16 +156,19 @@ tinymce.PluginManager.add('charmap', function(editor) { ['227', 'a - tilde'], ['228', 'a - diaeresis'], ['229', 'a - ring above'], + ['257', 'a - macron'], ['230', 'ligature ae'], ['231', 'c - cedilla'], ['232', 'e - grave'], ['233', 'e - acute'], ['234', 'e - circumflex'], ['235', 'e - diaeresis'], + ['275', 'e - macron'], ['236', 'i - grave'], ['237', 'i - acute'], ['238', 'i - circumflex'], ['239', 'i - diaeresis'], + ['299', 'i - macron'], ['240', 'eth'], ['241', 'n - tilde'], ['242', 'o - grave'], @@ -168,15 +177,18 @@ tinymce.PluginManager.add('charmap', function(editor) { ['245', 'o - tilde'], ['246', 'o - diaeresis'], ['248', 'o slash'], + ['333', 'o macron'], ['339', 'ligature oe'], ['353', 's - caron'], ['249', 'u - grave'], ['250', 'u - acute'], ['251', 'u - circumflex'], ['252', 'u - diaeresis'], + ['363', 'u - macron'], ['253', 'y - acute'], ['254', 'thorn'], ['255', 'y - diaeresis'], + ['563', 'y - macron'], ['913', 'Alpha'], ['914', 'Beta'], ['915', 'Gamma'], diff --git a/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js b/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js index 9fd639ef9c..9bf1e9fcd8 100644 --- a/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js @@ -1 +1 @@ -tinymce.PluginManager.add("charmap",function(a){function b(){return[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]]}function c(a){return tinymce.util.Tools.grep(a,function(a){return i(a)&&2==a.length})}function d(a){return i(a)?[].concat(c(a)):"function"==typeof a?a():[]}function e(b){var c=a.settings;return c.charmap&&(b=d(c.charmap)),c.charmap_append?[].concat(b).concat(d(c.charmap_append)):b}function f(){return e(b())}function g(b){a.fire("insertCustomChar",{chr:b}).chr,a.execCommand("mceInsertContent",!1,b)}function h(){function b(a){for(;a;){if("TD"==a.nodeName)return a;a=a.parentNode}}var c,d,e,h;c='
"}c+=" |
"}c+=" |
|
if (node.nodeName == 'IMG' && selection.isCollapsed()) { @@ -15762,18 +15798,18 @@ define("tinymce/dom/ControlSelection", [ } } - var throttledUpdateResizeRect = Delay.throttle(updateResizeRect); - - editor.on('nodechange ResizeEditor ResizeWindow drop', function(e) { + var throttledUpdateResizeRect = Delay.throttle(function(e) { if (!editor.composing) { - throttledUpdateResizeRect(e); + updateResizeRect(e); } }); + editor.on('nodechange ResizeEditor ResizeWindow drop', throttledUpdateResizeRect); + // Update resize rect while typing in a table - editor.on('keydown keyup compositionend', function(e) { + editor.on('keyup compositionend', function(e) { // Don't update the resize rect while composing since it blows away the IME see: #2710 - if (selectedElm && selectedElm.nodeName == "TABLE" && !editor.composing) { + if (selectedElm && selectedElm.nodeName == "TABLE") { throttledUpdateResizeRect(e); } }); @@ -18360,7 +18396,7 @@ define("tinymce/dom/ElementUtils", [ var name = attr.nodeName.toLowerCase(); // Don't compare internal attributes or style - if (name.indexOf('_') !== 0 && name !== 'style' && name !== 'data-mce-style') { + if (name.indexOf('_') !== 0 && name !== 'style' && name !== 'data-mce-style' && name != 'data-mce-fragment') { attribs[name] = dom.getAttrib(node, name); } }); @@ -22597,6 +22633,7 @@ define("tinymce/caret/CaretWalker", [ var isContentEditableFalse = NodeType.isContentEditableFalse, isText = NodeType.isText, isElement = NodeType.isElement, + isBr = NodeType.isBr, isForwards = CaretUtils.isForwards, isBackwards = CaretUtils.isBackwards, isCaretCandidate = CaretCandidate.isCaretCandidate, @@ -22644,12 +22681,32 @@ define("tinymce/caret/CaretWalker", [ } if (isBackwards(direction)) { + if (isBr(node)) { + return CaretPosition.before(node); + } + return CaretPosition.after(node); } return CaretPosition.before(node); } + // Jumps over BR elements|
a
->|a
+ function isBrBeforeBlock(node, rootNode) { + var next; + + if (!NodeType.isBr(node)) { + return false; + } + + next = findCaretPosition(1, CaretPosition.after(node), rootNode); + if (!next) { + return false; + } + + return !CaretUtils.isInSameBlock(CaretPosition.before(node), CaretPosition.before(next), rootNode); + } + function findCaretPosition(direction, startCaretPosition, rootNode) { var container, offset, node, nextNode, innerNode, rootContentEditableFalseElm, caretPosition; @@ -22698,6 +22755,10 @@ define("tinymce/caret/CaretWalker", [ if (isForwards(direction) && offset < container.childNodes.length) { nextNode = nodeAtIndex(container, offset); if (isCaretCandidate(nextNode)) { + if (isBrBeforeBlock(nextNode, rootNode)) { + return findCaretPosition(direction, CaretPosition.after(nextNode), rootNode); + } + if (!isAtomic(nextNode)) { innerNode = CaretUtils.findNode(nextNode, direction, isEditableCaretCandidate, nextNode); if (innerNode) { @@ -22778,6 +22839,560 @@ define("tinymce/caret/CaretWalker", [ }; }); +// Included from: js/tinymce/classes/InsertList.js + +/** + * InsertList.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Handles inserts of lists into the editor instance. + * + * @class tinymce.InsertList + * @private + */ +define("tinymce/InsertList", [ + "tinymce/util/Tools", + "tinymce/caret/CaretWalker", + "tinymce/caret/CaretPosition" +], function(Tools, CaretWalker, CaretPosition) { + var isListFragment = function(fragment) { + var firstChild = fragment.firstChild; + var lastChild = fragment.lastChild; + + // Skip meta since it's likely|
+ rng = selection.getRng(); + var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null); + var body = editor.getBody(); + if (caretElement === body && selection.isCollapsed()) { + if (dom.isBlock(body.firstChild) && canHaveChildren(body.firstChild) && dom.isEmpty(body.firstChild)) { + rng = dom.createRng(); + rng.setStart(body.firstChild, 0); + rng.setEnd(body.firstChild, 0); + selection.setRng(rng); + } + } + + // Insert node maker where we will insert the new HTML and get it's parent + if (!selection.isCollapsed()) { + // Fix for #2595 seems that delete removes one extra character on + // WebKit for some odd reason if you double click select a word + editor.selection.setRng(editor.selection.getRng()); + editor.getDoc().execCommand('Delete', false, null); + trimNbspAfterDeleteAndPaddValue(); + } + + parentNode = selection.getNode(); + + // Parse the fragment within the context of the parent node + var parserArgs = {context: parentNode.nodeName.toLowerCase(), data: data}; + fragment = parser.parse(value, parserArgs); + + // Custom handling of lists + if (InsertList.isListFragment(fragment) && InsertList.isParentBlockLi(dom, parentNode)) { + rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment); + editor.selection.setRng(rng); + editor.fire('SetContent', args); + return; + } + + markFragmentElements(fragment); + markInlineFormatElements(fragment); + + // Move the caret to a more suitable location + node = fragment.lastChild; + if (node.attr('id') == 'mce_marker') { + marker = node; + + for (node = node.prev; node; node = node.walk(true)) { + if (node.type == 3 || !dom.isBlock(node.name)) { + if (editor.schema.isValidChild(node.parent.name, 'span')) { + node.parent.insert(marker, node, node.name === 'br'); + } + break; + } + } + } + + editor._selectionOverrides.showBlockCaretContainer(parentNode); + + // If parser says valid we can insert the contents into that parent + if (!parserArgs.invalid) { + value = serializer.serialize(fragment); + + // Check if parent is empty or only has one BR element then set the innerHTML of that parent + node = parentNode.firstChild; + node2 = parentNode.lastChild; + if (!node || (node === node2 && node.nodeName === 'BR')) { + dom.setHTML(parentNode, value); + } else { + selection.setContent(value); + } + } else { + // If the fragment was invalid within that context then we need + // to parse and process the parent it's inserted into + + // Insert bookmark node and get the parent + selection.setContent(bookmarkHtml); + parentNode = selection.getNode(); + rootNode = editor.getBody(); + + // Opera will return the document node when selection is in root + if (parentNode.nodeType == 9) { + parentNode = node = rootNode; + } else { + node = parentNode; + } + + // Find the ancestor just before the root element + while (node !== rootNode) { + parentNode = node; + node = node.parentNode; + } + + // Get the outer/inner HTML depending on if we are in the root and parser and serialize that + value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); + value = serializer.serialize( + parser.parse( + // Need to replace by using a function since $ in the contents would otherwise be a problem + value.replace(//i, function() { + return serializer.serialize(fragment); + }) + ) + ); + + // Set the inner/outer HTML depending on if we are in the root or not + if (parentNode == rootNode) { + dom.setHTML(rootNode, value); + } else { + dom.setOuterHTML(parentNode, value); + } + } + + reduceInlineTextElements(); + moveSelectionToMarker(dom.get('mce_marker')); + umarkFragmentElements(editor.getBody()); + editor.fire('SetContent', args); + editor.addVisual(); + }; + + return { + insertAtCaret: insertAtCaret + }; +}); + // Included from: js/tinymce/classes/EditorCommands.js /** @@ -22797,21 +23412,17 @@ define("tinymce/caret/CaretWalker", [ * @class tinymce.EditorCommands */ define("tinymce/EditorCommands", [ - "tinymce/html/Serializer", "tinymce/Env", "tinymce/util/Tools", - "tinymce/dom/ElementUtils", "tinymce/dom/RangeUtils", "tinymce/dom/TreeWalker", - "tinymce/caret/CaretWalker", - "tinymce/caret/CaretPosition", - "tinymce/dom/NodeType" -], function(Serializer, Env, Tools, ElementUtils, RangeUtils, TreeWalker, CaretWalker, CaretPosition, NodeType) { + "tinymce/InsertContent" +], function(Env, Tools, RangeUtils, TreeWalker, InsertContent) { // Added for compression purposes var each = Tools.each, extend = Tools.extend; var map = Tools.map, inArray = Tools.inArray, explode = Tools.explode; - var isIE = Env.ie, isOldIE = Env.ie && Env.ie < 11; - var TRUE = true, FALSE = false, isTableCell = NodeType.matchNodeNames('td th'); + var isOldIE = Env.ie && Env.ie < 11; + var TRUE = true, FALSE = false; return function(editor) { var dom, selection, formatter, @@ -23079,6 +23690,11 @@ define("tinymce/EditorCommands", [ failed = TRUE; } + // Chrome reports the paste command as supported however older IE:s will return false for cut/paste + if (command === 'paste' && !doc.queryCommandEnabled(command)) { + failed = true; + } + // Present alert message about clipboard access not being available if (failed || !doc.queryCommandSupported(command)) { var msg = editor.translate( @@ -23225,310 +23841,7 @@ define("tinymce/EditorCommands", [ }, mceInsertContent: function(command, ui, value) { - var parser, serializer, parentNode, rootNode, fragment, args; - var marker, rng, node, node2, bookmarkHtml, merge, data; - var textInlineElements = editor.schema.getTextInlineElements(); - - function trimOrPaddLeftRight(html) { - var rng, container, offset; - - rng = selection.getRng(true); - container = rng.startContainer; - offset = rng.startOffset; - - function hasSiblingText(siblingName) { - return container[siblingName] && container[siblingName].nodeType == 3; - } - - if (container.nodeType == 3) { - if (offset > 0) { - html = html.replace(/^ /, ' '); - } else if (!hasSiblingText('previousSibling')) { - html = html.replace(/^ /, ' '); - } - - if (offset < container.length) { - html = html.replace(/ (|
- rng = selection.getRng(); - var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null); - var body = editor.getBody(); - if (caretElement === body && selection.isCollapsed()) { - if (dom.isBlock(body.firstChild) && canHaveChildren(body.firstChild) && dom.isEmpty(body.firstChild)) { - rng = dom.createRng(); - rng.setStart(body.firstChild, 0); - rng.setEnd(body.firstChild, 0); - selection.setRng(rng); - } - } - - // Insert node maker where we will insert the new HTML and get it's parent - if (!selection.isCollapsed()) { - // Fix for #2595 seems that delete removes one extra character on - // WebKit for some odd reason if you double click select a word - editor.selection.setRng(editor.selection.getRng()); - editor.getDoc().execCommand('Delete', false, null); - trimNbspAfterDeleteAndPaddValue(); - } - - parentNode = selection.getNode(); - - // Parse the fragment within the context of the parent node - var parserArgs = {context: parentNode.nodeName.toLowerCase(), data: data}; - fragment = parser.parse(value, parserArgs); - - markInlineFormatElements(fragment); - - // Move the caret to a more suitable location - node = fragment.lastChild; - if (node.attr('id') == 'mce_marker') { - marker = node; - - for (node = node.prev; node; node = node.walk(true)) { - if (node.type == 3 || !dom.isBlock(node.name)) { - if (editor.schema.isValidChild(node.parent.name, 'span')) { - node.parent.insert(marker, node, node.name === 'br'); - } - break; - } - } - } - - editor._selectionOverrides.showBlockCaretContainer(parentNode); - - // If parser says valid we can insert the contents into that parent - if (!parserArgs.invalid) { - value = serializer.serialize(fragment); - - // Check if parent is empty or only has one BR element then set the innerHTML of that parent - node = parentNode.firstChild; - node2 = parentNode.lastChild; - if (!node || (node === node2 && node.nodeName === 'BR')) { - dom.setHTML(parentNode, value); - } else { - selection.setContent(value); - } - } else { - // If the fragment was invalid within that context then we need - // to parse and process the parent it's inserted into - - // Insert bookmark node and get the parent - selection.setContent(bookmarkHtml); - parentNode = selection.getNode(); - rootNode = editor.getBody(); - - // Opera will return the document node when selection is in root - if (parentNode.nodeType == 9) { - parentNode = node = rootNode; - } else { - node = parentNode; - } - - // Find the ancestor just before the root element - while (node !== rootNode) { - parentNode = node; - node = node.parentNode; - } - - // Get the outer/inner HTML depending on if we are in the root and parser and serialize that - value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); - value = serializer.serialize( - parser.parse( - // Need to replace by using a function since $ in the contents would otherwise be a problem - value.replace(//i, function() { - return serializer.serialize(fragment); - }) - ) - ); - - // Set the inner/outer HTML depending on if we are in the root or not - if (parentNode == rootNode) { - dom.setHTML(rootNode, value); - } else { - dom.setOuterHTML(parentNode, value); - } - } - - reduceInlineTextElements(); - moveSelectionToMarker(dom.get('mce_marker')); - editor.fire('SetContent', args); - editor.addVisual(); + InsertContent.insertAtCaret(editor, value); }, mceInsertRawHTML: function(command, ui, value) { @@ -31538,7 +31851,7 @@ define("tinymce/util/Quirks", [ * @private * @param {DragEvent} e Event object */ - function setMceInteralContent(e) { + function setMceInternalContent(e) { var selectionHtml, internalContent; if (e.dataTransfer) { @@ -32158,7 +32471,7 @@ define("tinymce/util/Quirks", [ editor.on('dragstart', function(e) { dragStartRng = selection.getRng(); - setMceInteralContent(e); + setMceInternalContent(e); }); editor.on('drop', function(e) { @@ -33077,7 +33390,7 @@ define("tinymce/util/Quirks", [ */ function ieInternalDragAndDrop() { editor.on('dragstart', function(e) { - setMceInteralContent(e); + setMceInternalContent(e); }); editor.on('drop', function(e) { @@ -33750,8 +34063,8 @@ define("tinymce/file/Uploader", [ "tinymce/util/Tools", "tinymce/util/Fun" ], function(Promise, Tools, Fun) { - return function(settings) { - var cachedPromises = {}; + return function(uploadStatus, settings) { + var pendingPromises = {}; function fileName(blobInfo) { var ext, extensions; @@ -33785,30 +34098,24 @@ define("tinymce/file/Uploader", [ }; } - function defaultHandler(blobInfo, success, failure, openNotification) { - var xhr, formData, notification; + function defaultHandler(blobInfo, success, failure, progress) { + var xhr, formData; xhr = new XMLHttpRequest(); xhr.open('POST', settings.url); xhr.withCredentials = settings.credentials; - notification = openNotification(); - xhr.upload.onprogress = function(e) { - var percentLoaded = Math.round(e.loaded / e.total * 100); - notification.progressBar.value(percentLoaded); + progress(e.loaded / e.total * 100); }; xhr.onerror = function() { - notification.close(); failure("Image upload failed due to a XHR Transport error. Code: " + xhr.status); }; xhr.onload = function() { var json; - notification.close(); - if (xhr.status != 200) { failure("HTTP Error: " + xhr.status); return; @@ -33836,66 +34143,107 @@ define("tinymce/file/Uploader", [ }); } - function interpretResult(promise) { - return promise.then(function(result) { - return result; - })['catch'](function(error) { - return error; + function handlerSuccess(blobInfo, url) { + return { + url: url, + blobInfo: blobInfo, + status: true + }; + } + + function handlerFailure(blobInfo, error) { + return { + url: '', + blobInfo: blobInfo, + status: false, + error: error + }; + } + + function resolvePending(blobUri, result) { + Tools.each(pendingPromises[blobUri], function(resolve) { + resolve(result); + }); + + delete pendingPromises[blobUri]; + } + + function uploadBlobInfo(blobInfo, handler, openNotification) { + uploadStatus.markPending(blobInfo.blobUri()); + + return new Promise(function(resolve) { + var notification, progress; + + var noop = function() { + }; + + try { + var closeNotification = function() { + if (notification) { + notification.close(); + progress = noop; // Once it's closed it's closed + } + }; + + var success = function(url) { + closeNotification(); + uploadStatus.markUploaded(blobInfo.blobUri(), url); + resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url)); + resolve(handlerSuccess(blobInfo, url)); + }; + + var failure = function() { + closeNotification(); + uploadStatus.removeFailed(blobInfo.blobUri()); + resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, failure)); + resolve(handlerFailure(blobInfo, failure)); + }; + + progress = function(percent) { + if (percent < 0 || percent > 100) { + return; + } + + if (!notification) { + notification = openNotification(); + } + + notification.progressBar.value(percent); + }; + + handler(blobInfoToData(blobInfo), success, failure, progress); + } catch (ex) { + resolve(handlerFailure(blobInfo, ex.message)); + } }); } - function registerPromise(handler, id, blobInfo) { - var response = handler(blobInfo); - var promise = interpretResult(response); - delete cachedPromises[id]; - cachedPromises[id] = promise; - return promise; + function isDefaultHandler(handler) { + return handler === defaultHandler; } - function collectUploads(blobInfos, uploadBlobInfo) { - return Tools.map(blobInfos, function(blobInfo) { - var id = blobInfo.id(); - return cachedPromises[id] ? cachedPromises[id] : registerPromise(uploadBlobInfo, id, blobInfo); + function pendingUploadBlobInfo(blobInfo) { + var blobUri = blobInfo.blobUri(); + + return new Promise(function(resolve) { + pendingPromises[blobUri] = pendingPromises[blobUri] || []; + pendingPromises[blobUri].push(resolve); }); } function uploadBlobs(blobInfos, openNotification) { - function uploadBlobInfo(blobInfo) { - return new Promise(function(resolve) { - var handler = settings.handler; + blobInfos = Tools.grep(blobInfos, function(blobInfo) { + return !uploadStatus.isUploaded(blobInfo.blobUri()); + }); - try { - handler(blobInfoToData(blobInfo), function(url) { - resolve({ - url: url, - blobInfo: blobInfo, - status: true - }); - }, function(failure) { - resolve({ - url: '', - blobInfo: blobInfo, - status: false, - error: failure - }); - }, openNotification); - } catch (ex) { - resolve({ - url: '', - blobInfo: blobInfo, - status: false, - error: ex.message - }); - } - }); - } - - var promises = collectUploads(blobInfos, uploadBlobInfo); - return Promise.all(promises); + return Promise.all(Tools.map(blobInfos, function(blobInfo) { + return uploadStatus.isPending(blobInfo.blobUri()) ? + pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification); + })); } function upload(blobInfos, openNotification) { - return (!settings.url && settings.handler === defaultHandler) ? noUpload() : uploadBlobs(blobInfos, openNotification); + return (!settings.url && isDefaultHandler(settings.handler)) ? noUpload() : uploadBlobs(blobInfos, openNotification); } settings = Tools.extend({ @@ -34046,7 +34394,7 @@ define("tinymce/file/ImageScanner", [ ], function(Promise, Arr, Fun, Conversions, Env) { var count = 0; - return function(blobCache) { + return function(uploadStatus, blobCache) { var cachedPromises = {}; function findAll(elm, predicate) { @@ -34117,7 +34465,7 @@ define("tinymce/file/ImageScanner", [ } if (src.indexOf('blob:') === 0) { - return true; + return !uploadStatus.isUploaded(src); } if (src.indexOf('data:') === 0) { @@ -34223,6 +34571,17 @@ define("tinymce/file/BlobCache", [ }); } + function removeByUri(blobUri) { + cache = Arr.filter(cache, function(blobInfo) { + if (blobInfo.blobUri() === blobUri) { + URL.revokeObjectURL(blobInfo.blobUri()); + return false; + } + + return true; + }); + } + function destroy() { Arr.each(cache, function(cachedBlobInfo) { URL.revokeObjectURL(cachedBlobInfo.blobUri()); @@ -34237,6 +34596,85 @@ define("tinymce/file/BlobCache", [ get: get, getByUri: getByUri, findFirst: findFirst, + removeByUri: removeByUri, + destroy: destroy + }; + }; +}); + +// Included from: js/tinymce/classes/file/UploadStatus.js + +/** + * UploadStatus.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Holds the current status of a blob uri, if it's pending or uploaded and what the result urls was. + * + * @private + * @class tinymce.file.UploadStatus + */ +define("tinymce/file/UploadStatus", [ +], function() { + return function() { + var PENDING = 1, UPLOADED = 2; + var blobUriStatuses = {}; + + function createStatus(status, resultUri) { + return { + status: status, + resultUri: resultUri + }; + } + + function hasBlobUri(blobUri) { + return blobUri in blobUriStatuses; + } + + function getResultUri(blobUri) { + var result = blobUriStatuses[blobUri]; + + return result ? result.resultUri : null; + } + + function isPending(blobUri) { + return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false; + } + + function isUploaded(blobUri) { + return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false; + } + + function markPending(blobUri) { + blobUriStatuses[blobUri] = createStatus(PENDING, null); + } + + function markUploaded(blobUri, resultUri) { + blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri); + } + + function removeFailed(blobUri) { + delete blobUriStatuses[blobUri]; + } + + function destroy() { + blobUriStatuses = {}; + } + + return { + hasBlobUri: hasBlobUri, + getResultUri: getResultUri, + isPending: isPending, + isUploaded: isUploaded, + markPending: markPending, + markUploaded: markUploaded, + removeFailed: removeFailed, destroy: destroy }; }; @@ -34264,10 +34702,12 @@ define("tinymce/EditorUpload", [ "tinymce/util/Arr", "tinymce/file/Uploader", "tinymce/file/ImageScanner", - "tinymce/file/BlobCache" -], function(Arr, Uploader, ImageScanner, BlobCache) { + "tinymce/file/BlobCache", + "tinymce/file/UploadStatus" +], function(Arr, Uploader, ImageScanner, BlobCache, UploadStatus) { return function(editor) { var blobCache = new BlobCache(), uploader, imageScanner, settings = editor.settings; + var uploadStatus = new UploadStatus(); function aliveGuard(callback) { return function(result) { @@ -34317,9 +34757,19 @@ define("tinymce/EditorUpload", [ }); } + function replaceImageUri(image, resultUri) { + blobCache.removeByUri(image.src); + replaceUrlInUndoStack(image.src, resultUri); + + editor.$(image).attr({ + src: resultUri, + 'data-mce-src': editor.convertURL(resultUri, 'src') + }); + } + function uploadImages(callback) { if (!uploader) { - uploader = new Uploader({ + uploader = new Uploader(uploadStatus, { url: settings.images_upload_url, basePath: settings.images_upload_base_path, credentials: settings.images_upload_credentials, @@ -34338,13 +34788,8 @@ define("tinymce/EditorUpload", [ result = Arr.map(result, function(uploadInfo, index) { var image = imageInfos[index].image; - if (uploadInfo.status) { - replaceUrlInUndoStack(image.src, uploadInfo.url); - - editor.$(image).attr({ - src: uploadInfo.url, - 'data-mce-src': editor.convertURL(uploadInfo.url, 'src') - }); + if (uploadInfo.status && editor.settings.images_replace_blob_uris !== false) { + replaceImageUri(image, uploadInfo.url); } return { @@ -34368,15 +34813,20 @@ define("tinymce/EditorUpload", [ } } + function isValidDataUriImage(imgElm) { + return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true; + } + function scanForImages() { if (!imageScanner) { - imageScanner = new ImageScanner(blobCache); + imageScanner = new ImageScanner(uploadStatus, blobCache); } - return imageScanner.findAll(editor.getBody(), settings.images_dataimg_filter).then(aliveGuard(function(result) { + return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function(result) { Arr.each(result, function(resultItem) { replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri()); resultItem.image.src = resultItem.blobInfo.blobUri(); + resultItem.image.removeAttribute('data-mce-src'); }); return result; @@ -34385,11 +34835,18 @@ define("tinymce/EditorUpload", [ function destroy() { blobCache.destroy(); + uploadStatus.destroy(); imageScanner = uploader = null; } - function replaceBlobWithBase64(content) { + function replaceBlobUris(content) { return content.replace(/src="(blob:[^"]+)"/g, function(match, blobUri) { + var resultUri = uploadStatus.getResultUri(blobUri); + + if (resultUri) { + return 'src="' + resultUri + '"'; + } + var blobInfo = blobCache.getByUri(blobUri); if (!blobInfo) { @@ -34415,7 +34872,7 @@ define("tinymce/EditorUpload", [ }); editor.on('RawSaveContent', function(e) { - e.content = replaceBlobWithBase64(e.content); + e.content = replaceBlobUris(e.content); }); editor.on('getContent', function(e) { @@ -34423,7 +34880,24 @@ define("tinymce/EditorUpload", [ return; } - e.content = replaceBlobWithBase64(e.content); + e.content = replaceBlobUris(e.content); + }); + + editor.on('PostRender', function() { + editor.parser.addNodeFilter('img', function(images) { + Arr.each(images, function(img) { + var src = img.attr('src'); + + if (blobCache.getByUri(src)) { + return; + } + + var resultUri = uploadStatus.getResultUri(src); + if (resultUri) { + img.attr('src', resultUri); + } + }); + }); }); return { @@ -35664,8 +36138,39 @@ define("tinymce/SelectionOverrides", [ return null; } + function mergeTextBlocks(direction, fromCaretPosition, toCaretPosition) { + var dom = editor.dom, fromBlock, toBlock, node, textBlocks; + + if (direction === -1) { + if (isAfterContentEditableFalse(toCaretPosition) && isBlock(toCaretPosition.getNode(true))) { + return deleteContentEditableNode(toCaretPosition.getNode(true)); + } + } else { + if (isBeforeContentEditableFalse(fromCaretPosition) && isBlock(fromCaretPosition.getNode())) { + return deleteContentEditableNode(fromCaretPosition.getNode()); + } + } + + textBlocks = editor.schema.getTextBlockElements(); + fromBlock = dom.getParent(fromCaretPosition.getNode(), dom.isBlock); + toBlock = dom.getParent(toCaretPosition.getNode(), dom.isBlock); + + // Verify that both blocks are text blocks + if (fromBlock === toBlock || !textBlocks[fromBlock.nodeName] || !textBlocks[toBlock.nodeName]) { + return null; + } + + while ((node = fromBlock.firstChild)) { + toBlock.appendChild(node); + } + + editor.dom.remove(fromBlock); + + return toCaretPosition.toRange(); + } + function backspaceDelete(direction, beforeFn, range) { - var node, caretPosition; + var node, caretPosition, peekCaretPosition; if (!range.collapsed) { node = getSelectedNode(range); @@ -35679,6 +36184,15 @@ define("tinymce/SelectionOverrides", [ if (beforeFn(caretPosition)) { return renderRangeCaret(deleteContentEditableNode(caretPosition.getNode(direction == -1))); } + + peekCaretPosition = direction == -1 ? caretWalker.prev(caretPosition) : caretWalker.next(caretPosition); + if (beforeFn(peekCaretPosition)) { + if (direction === -1) { + return mergeTextBlocks(direction, caretPosition, peekCaretPosition); + } + + return mergeTextBlocks(direction, peekCaretPosition, caretPosition); + } } function registerEvents() { @@ -35744,6 +36258,35 @@ define("tinymce/SelectionOverrides", [ } }); + var hasNormalCaretPosition = function (elm) { + var caretWalker = new CaretWalker(elm); + + if (!elm.firstChild) { + return false; + } + + var startPos = CaretPosition.before(elm.firstChild); + var newPos = caretWalker.next(startPos); + + return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos); + }; + + var isInSameBlock = function (node1, node2) { + var block1 = editor.dom.getParent(node1, editor.dom.isBlock); + var block2 = editor.dom.getParent(node2, editor.dom.isBlock); + return block1 === block2; + }; + + // Checks if the target node is in a block and if that block has a caret position better than the + // suggested caretNode this is to prevent the caret from being sucked in towards a cE=false block if + // they are adjacent on the vertical axis + var hasBetterMouseTarget = function (targetNode, caretNode) { + var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock); + var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock); + + return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock); + }; + editor.on('mousedown', function(e) { var contentEditableRoot; @@ -35765,9 +36308,11 @@ define("tinymce/SelectionOverrides", [ var caretInfo = LineUtils.closestCaret(rootNode, e.clientX, e.clientY); if (caretInfo) { - e.preventDefault(); - editor.getBody().focus(); - setRange(showCaret(1, caretInfo.node, caretInfo.before)); + if (!hasBetterMouseTarget(e.target, caretInfo.node)) { + e.preventDefault(); + editor.getBody().focus(); + setRange(showCaret(1, caretInfo.node, caretInfo.before)); + } } } }); @@ -36542,6 +37087,7 @@ define("tinymce/Editor", [ }); } + self.editorManager.add(self); loadScripts(); }, @@ -36558,7 +37104,6 @@ define("tinymce/Editor", [ this.editorManager.i18n.setCode(settings.language); self.rtl = settings.rtl_ui || this.editorManager.i18n.rtl; - self.editorManager.add(self); settings.aria_label = settings.aria_label || DOM.getAttrib(elm, 'aria-label', self.getLang('aria.rich_text_area')); @@ -37033,9 +37578,8 @@ define("tinymce/Editor", [ DOM.setAttrib(body, "spellcheck", "false"); } - self.fire('PostRender'); - self.quirks = new Quirks(self); + self.fire('PostRender'); if (settings.directionality) { body.dir = settings.directionality; @@ -37243,7 +37787,7 @@ define("tinymce/Editor", [ /** * Translates the specified string by replacing variables with language pack items it will also check if there is - * a key mathcin the input. + * a key matching the input. * * @method translate * @param {String} text String to translate by the language pack data. @@ -37256,9 +37800,11 @@ define("tinymce/Editor", [ return ''; } - return i18n.data[lang + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function(a, b) { + text = i18n.data[lang + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function(a, b) { return i18n.data[lang + '.' + b] || '{#' + b + '}'; }); + + return this.editorManager.translate(text); }, /** @@ -38738,7 +39284,7 @@ define("tinymce/EditorManager", [ function purgeDestroyedEditor(editor) { // User has manually destroyed the editor lets clean up the mess - if (editor && !(editor.getContainer() || editor.getBody()).parentNode) { + if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) { removeEditorFromList(editor); editor.unbindAllNativeEvents(); editor.destroy(true); @@ -38772,7 +39318,7 @@ define("tinymce/EditorManager", [ * @property minorVersion * @type String */ - minorVersion: '3.10', + minorVersion: '3.13', /** * Release date of TinyMCE build. @@ -38780,7 +39326,7 @@ define("tinymce/EditorManager", [ * @property releaseDate * @type String */ - releaseDate: '2016-04-12', + releaseDate: '2016-06-08', /** * Collection of editor instances. @@ -39047,20 +39593,18 @@ define("tinymce/EditorManager", [ var initCount = 0, editors = [], targets; function createEditor(id, settings, targetElm) { - if (!purgeDestroyedEditor(self.get(id))) { - var editor = new Editor(id, settings, self); + var editor = new Editor(id, settings, self); - editors.push(editor); + editors.push(editor); - editor.on('init', function() { - if (++initCount === targets.length) { - provideResults(editors); - } - }); + editor.on('init', function() { + if (++initCount === targets.length) { + provideResults(editors); + } + }); - editor.targetElm = editor.targetElm || targetElm; - editor.render(); - } + editor.targetElm = editor.targetElm || targetElm; + editor.render(); } DOM.unbind(window, 'ready', initEditors); @@ -39084,6 +39628,14 @@ define("tinymce/EditorManager", [ return; } + Tools.each(targets, function(elm) { + purgeDestroyedEditor(self.get(elm.id)); + }); + + targets = Tools.grep(targets, function(elm) { + return !self.get(elm.id); + }); + each(targets, function(elm) { createEditor(createId(elm), settings, elm); }); @@ -39610,6 +40162,7 @@ define("tinymce/util/JSON", [], function() { if (t == 'string') { v = '\bb\tt\nn\ff\rr\""\'\'\\\\'; + /*eslint no-control-regex:0 */ return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) { // Make sure single quotes never get encoded inside double quotes for JSON compatibility if (quote === '"' && a === "'") { @@ -41141,7 +41694,7 @@ define("tinymce/ui/ColorBox", [ var self = this; self.state.on('change:value', function(e) { - if (self._rendered) { + if (self.state.get('rendered')) { self.repaintColor(e.value); } }); @@ -46143,5 +46696,5 @@ define("tinymce/Register", [ return {}; }); -expose(["tinymce/geom/Rect","tinymce/util/Promise","tinymce/util/Delay","tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/Env","tinymce/util/Tools","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/html/Entities","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/dom/RangeUtils","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/BookmarkManager","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/util/EventDispatcher","tinymce/util/Observable","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/ReflowQueue","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Progress","tinymce/ui/Notification","tinymce/NotificationManager","tinymce/EditorObservable","tinymce/Shortcuts","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/ComboBox","tinymce/ui/ColorBox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/util/Color","tinymce/ui/ColorPicker","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/InfoBox","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/MenuItem","tinymce/ui/Throbber","tinymce/ui/Menu","tinymce/ui/ListBox","tinymce/ui/Radio","tinymce/ui/ResizeHandle","tinymce/ui/SelectBox","tinymce/ui/Slider","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox"]); +expose(["tinymce/geom/Rect","tinymce/util/Promise","tinymce/util/Delay","tinymce/Env","tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/util/Tools","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/html/Entities","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/dom/RangeUtils","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/BookmarkManager","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/util/EventDispatcher","tinymce/util/Observable","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/ReflowQueue","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Progress","tinymce/ui/Notification","tinymce/NotificationManager","tinymce/EditorObservable","tinymce/Shortcuts","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/ComboBox","tinymce/ui/ColorBox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/util/Color","tinymce/ui/ColorPicker","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/InfoBox","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/MenuItem","tinymce/ui/Throbber","tinymce/ui/Menu","tinymce/ui/ListBox","tinymce/ui/Radio","tinymce/ui/ResizeHandle","tinymce/ui/SelectBox","tinymce/ui/Slider","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox"]); })(this); \ No newline at end of file diff --git a/src/wp-includes/js/tinymce/tinymce.min.js b/src/wp-includes/js/tinymce/tinymce.min.js index 1eeac3683d..11b34207c3 100644 --- a/src/wp-includes/js/tinymce/tinymce.min.js +++ b/src/wp-includes/js/tinymce/tinymce.min.js @@ -1,13 +1,13 @@ -// 4.3.10 (2016-04-12) -!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.on("compositionstart compositionend",function(e){n.composing="compositionstart"===e.type}),n.contentStyles.length>0&&(m="",P(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),P(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),r.auto_focus&&N.setEditorTimeout(n,function(){var e;e=r.auto_focus===!0?n:n.editorManager.get(r.auto_focus),e.destroyed||e.focus()},100),s=h=p=null},focus:function(e){function t(e){return n.dom.getParent(e,function(e){return"true"===n.dom.getContentEditable(e)})}var n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l=n.getBody(),c;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n.quirks.refreshContentEditable(),c=t(r.getNode()),n.$.contains(l,c))return c.focus(),r.normalize(),void n.editorManager.setActive(n);if(i||(w.opera||n.getBody().focus(),n.getWin().focus()),W||i){if(l.setActive)try{l.setActive()}catch(u){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.setActive(n)},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?F(r):0,n=F(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?P(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),e.length>1?i[I(e[0])]=I(e[1]):i[I(e[0])]=I(e)}):i=r,i):r},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addContextToolbar:function(e,t){var n=this,r;n.contextToolbars=n.contextToolbars||[],"string"==typeof e&&(r=e,e=function(e){return n.dom.is(e,r)}),n.contextToolbars.push({predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(B.show(e.getContainer()),B.hide(e.id)),e.load(),e.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(V&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(B.hide(e.getContainer()),B.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),"raw"==e.format&&t.fire("RawSaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=B.getParent(t.id,"form"))&&P(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&t.setDirty(!1),r},setContent:function(e,t){var n=this,r=n.getBody(),i,o;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(o=V&&11>V?"":'
',"TABLE"==r.nodeName?e="
]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.on("compositionstart compositionend",function(e){n.composing="compositionstart"===e.type}),n.contentStyles.length>0&&(m="",P(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),P(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),r.auto_focus&&E.setEditorTimeout(n,function(){var e;e=r.auto_focus===!0?n:n.editorManager.get(r.auto_focus),e.destroyed||e.focus()},100),s=h=p=null},focus:function(e){function t(e){return n.dom.getParent(e,function(e){return"true"===n.dom.getContentEditable(e)})}var n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l=n.getBody(),c;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n.quirks.refreshContentEditable(),c=t(r.getNode()),n.$.contains(l,c))return c.focus(),r.normalize(),void n.editorManager.setActive(n);if(i||(w.opera||n.getBody().focus(),n.getWin().focus()),U||i){if(l.setActive)try{l.setActive()}catch(u){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.setActive(n)},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?F(r):0,n=F(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?(e=n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}),this.editorManager.translate(e)):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?P(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),e.length>1?i[I(e[0])]=I(e[1]):i[I(e[0])]=I(e)}):i=r,i):r},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addContextToolbar:function(e,t){var n=this,r;n.contextToolbars=n.contextToolbars||[],"string"==typeof e&&(r=e,e=function(e){return n.dom.is(e,r)}),n.contextToolbars.push({predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(B.show(e.getContainer()),B.hide(e.id)),e.load(),e.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(W&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(B.hide(e.getContainer()),B.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),"raw"==e.format&&t.fire("RawSaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=B.getParent(t.id,"form"))&&P(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&t.setDirty(!1),r},setContent:function(e,t){var n=this,r=n.getBody(),i,o;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(o=W&&11>W?"":'
',"TABLE"==r.nodeName?e="