tinymce-rails 4.2.6 → 4.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/source/tinymce/tinymce.jquery.js +284 -82
- data/app/assets/source/tinymce/tinymce.js +284 -82
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/anchor/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/lists/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/spellchecker/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/modern/theme.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.jquery.js +11 -11
- data/vendor/assets/javascripts/tinymce/tinymce.js +12 -12
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10bc82ca39642df966ad7722419a540188e97a39
|
4
|
+
data.tar.gz: e000d80db3c71c977af60ab9e8d3e445ca33cb80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea703c2b4cbb1ec5cc807ac4eba239ac5249f871e2b52ad275bca8a1058f931a167812d1433450b6f25ba7967c9fb3d07385bcaa9878b0e785b0227005d924fc
|
7
|
+
data.tar.gz: 4178bd6f00e89829657fd1b927c7b9f51835fb0f1c87f6af9b3af732ea62e4b057563b29bfa4198516f6edddcd67214c18b6e46f7cfd4ca614fbe09b4f3243b6
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.2.
|
1
|
+
// 4.2.7 (2015-10-27)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -4376,7 +4376,7 @@ define("tinymce/html/Entities", [
|
|
4376
4376
|
|
4377
4377
|
var Entities = {
|
4378
4378
|
/**
|
4379
|
-
* Encodes the specified string using raw entities. This means only the required XML base entities will be
|
4379
|
+
* Encodes the specified string using raw entities. This means only the required XML base entities will be encoded.
|
4380
4380
|
*
|
4381
4381
|
* @method encodeRaw
|
4382
4382
|
* @param {String} text Text to encode.
|
@@ -4818,6 +4818,27 @@ define("tinymce/dom/DOMUtils", [
|
|
4818
4818
|
$elm.attr('data-mce-style', value);
|
4819
4819
|
}
|
4820
4820
|
|
4821
|
+
function nodeIndex(node, normalized) {
|
4822
|
+
var idx = 0, lastNodeType, nodeType;
|
4823
|
+
|
4824
|
+
if (node) {
|
4825
|
+
for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {
|
4826
|
+
nodeType = node.nodeType;
|
4827
|
+
|
4828
|
+
// Normalize text nodes
|
4829
|
+
if (normalized && nodeType == 3) {
|
4830
|
+
if (nodeType == lastNodeType || !node.nodeValue.length) {
|
4831
|
+
continue;
|
4832
|
+
}
|
4833
|
+
}
|
4834
|
+
idx++;
|
4835
|
+
lastNodeType = nodeType;
|
4836
|
+
}
|
4837
|
+
}
|
4838
|
+
|
4839
|
+
return idx;
|
4840
|
+
}
|
4841
|
+
|
4821
4842
|
/**
|
4822
4843
|
* Constructs a new DOMUtils instance. Consult the Wiki for more details on settings etc for this class.
|
4823
4844
|
*
|
@@ -6234,26 +6255,7 @@ define("tinymce/dom/DOMUtils", [
|
|
6234
6255
|
* @param {boolean} normalized Optional true/false state if the index is what it would be after a normalization.
|
6235
6256
|
* @return {Number} Index of the specified node.
|
6236
6257
|
*/
|
6237
|
-
nodeIndex:
|
6238
|
-
var idx = 0, lastNodeType, nodeType;
|
6239
|
-
|
6240
|
-
if (node) {
|
6241
|
-
for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {
|
6242
|
-
nodeType = node.nodeType;
|
6243
|
-
|
6244
|
-
// Normalize text nodes
|
6245
|
-
if (normalized && nodeType == 3) {
|
6246
|
-
if (nodeType == lastNodeType || !node.nodeValue.length) {
|
6247
|
-
continue;
|
6248
|
-
}
|
6249
|
-
}
|
6250
|
-
idx++;
|
6251
|
-
lastNodeType = nodeType;
|
6252
|
-
}
|
6253
|
-
}
|
6254
|
-
|
6255
|
-
return idx;
|
6256
|
-
},
|
6258
|
+
nodeIndex: nodeIndex,
|
6257
6259
|
|
6258
6260
|
/**
|
6259
6261
|
* Splits an element into two new elements and places the specified split
|
@@ -6562,6 +6564,7 @@ define("tinymce/dom/DOMUtils", [
|
|
6562
6564
|
* tinymce.DOM.addClass('someid', 'someclass');
|
6563
6565
|
*/
|
6564
6566
|
DOMUtils.DOM = new DOMUtils(document);
|
6567
|
+
DOMUtils.nodeIndex = nodeIndex;
|
6565
6568
|
|
6566
6569
|
return DOMUtils;
|
6567
6570
|
});
|
@@ -7365,6 +7368,10 @@ define("tinymce/dom/RangeUtils", [
|
|
7365
7368
|
var container, offset, walker, body = dom.getRoot(), node, nonEmptyElementsMap;
|
7366
7369
|
var directionLeft, isAfterNode;
|
7367
7370
|
|
7371
|
+
function isTableCell(node) {
|
7372
|
+
return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);
|
7373
|
+
}
|
7374
|
+
|
7368
7375
|
function hasBrBeforeAfter(node, left) {
|
7369
7376
|
var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || body);
|
7370
7377
|
|
@@ -7478,7 +7485,7 @@ define("tinymce/dom/RangeUtils", [
|
|
7478
7485
|
}
|
7479
7486
|
|
7480
7487
|
// Found a BR/IMG element that we can place the caret before
|
7481
|
-
if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
|
7488
|
+
if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell(node)) {
|
7482
7489
|
offset = dom.nodeIndex(node);
|
7483
7490
|
container = node.parentNode;
|
7484
7491
|
|
@@ -10910,27 +10917,29 @@ define("tinymce/html/Serializer", [
|
|
10910
10917
|
sortedAttrs.map = {};
|
10911
10918
|
|
10912
10919
|
elementRule = schema.getElementRule(node.name);
|
10913
|
-
|
10914
|
-
|
10915
|
-
|
10916
|
-
|
10917
|
-
|
10918
|
-
|
10919
|
-
|
10920
|
+
if (elementRule) {
|
10921
|
+
for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {
|
10922
|
+
attrName = elementRule.attributesOrder[i];
|
10923
|
+
|
10924
|
+
if (attrName in attrs.map) {
|
10925
|
+
attrValue = attrs.map[attrName];
|
10926
|
+
sortedAttrs.map[attrName] = attrValue;
|
10927
|
+
sortedAttrs.push({name: attrName, value: attrValue});
|
10928
|
+
}
|
10920
10929
|
}
|
10921
|
-
}
|
10922
10930
|
|
10923
|
-
|
10924
|
-
|
10931
|
+
for (i = 0, l = attrs.length; i < l; i++) {
|
10932
|
+
attrName = attrs[i].name;
|
10925
10933
|
|
10926
|
-
|
10927
|
-
|
10928
|
-
|
10929
|
-
|
10934
|
+
if (!(attrName in sortedAttrs.map)) {
|
10935
|
+
attrValue = attrs.map[attrName];
|
10936
|
+
sortedAttrs.map[attrName] = attrValue;
|
10937
|
+
sortedAttrs.push({name: attrName, value: attrValue});
|
10938
|
+
}
|
10930
10939
|
}
|
10931
|
-
}
|
10932
10940
|
|
10933
|
-
|
10941
|
+
attrs = sortedAttrs;
|
10942
|
+
}
|
10934
10943
|
}
|
10935
10944
|
|
10936
10945
|
writer.start(node.name, attrs, isEmpty);
|
@@ -12045,6 +12054,10 @@ define("tinymce/dom/ControlSelection", [
|
|
12045
12054
|
return false;
|
12046
12055
|
}
|
12047
12056
|
|
12057
|
+
if (elm == editor.getBody()) {
|
12058
|
+
return false;
|
12059
|
+
}
|
12060
|
+
|
12048
12061
|
return editor.dom.is(elm, selector);
|
12049
12062
|
}
|
12050
12063
|
|
@@ -16486,9 +16499,13 @@ define("tinymce/Formatter", [
|
|
16486
16499
|
|
16487
16500
|
removeCaretContainer();
|
16488
16501
|
|
16489
|
-
// Remove caret container
|
16490
|
-
|
16491
|
-
|
16502
|
+
// Remove caret container if it's empty
|
16503
|
+
if (keyCode == 8 && selection.isCollapsed() && selection.getStart().innerHTML == INVISIBLE_CHAR) {
|
16504
|
+
removeCaretContainer(getParentCaretContainer(selection.getStart()));
|
16505
|
+
}
|
16506
|
+
|
16507
|
+
// Remove caret container on keydown and it's left/right arrow keys
|
16508
|
+
if (keyCode == 37 || keyCode == 39) {
|
16492
16509
|
removeCaretContainer(getParentCaretContainer(selection.getStart()));
|
16493
16510
|
}
|
16494
16511
|
|
@@ -17002,6 +17019,10 @@ define("tinymce/EnterKey", [
|
|
17002
17019
|
dom.getContentEditable(node) !== "true";
|
17003
17020
|
}
|
17004
17021
|
|
17022
|
+
function isTableCell(node) {
|
17023
|
+
return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);
|
17024
|
+
}
|
17025
|
+
|
17005
17026
|
// Renders empty block on IE
|
17006
17027
|
function renderBlockOnIE(block) {
|
17007
17028
|
var oldRng;
|
@@ -17268,10 +17289,15 @@ define("tinymce/EnterKey", [
|
|
17268
17289
|
|
17269
17290
|
// Not in a block element or in a table cell or caption
|
17270
17291
|
parentBlock = dom.getParent(container, dom.isBlock);
|
17271
|
-
rootBlockName = editor.getBody().nodeName.toLowerCase();
|
17272
17292
|
if (!parentBlock || !canSplitBlock(parentBlock)) {
|
17273
17293
|
parentBlock = parentBlock || editableRoot;
|
17274
17294
|
|
17295
|
+
if (parentBlock == editor.getBody() || isTableCell(parentBlock)) {
|
17296
|
+
rootBlockName = parentBlock.nodeName.toLowerCase();
|
17297
|
+
} else {
|
17298
|
+
rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();
|
17299
|
+
}
|
17300
|
+
|
17275
17301
|
if (!parentBlock.hasChildNodes()) {
|
17276
17302
|
newBlock = dom.create(blockName);
|
17277
17303
|
setForcedBlockAttrs(newBlock);
|
@@ -17342,6 +17368,10 @@ define("tinymce/EnterKey", [
|
|
17342
17368
|
return containerBlock;
|
17343
17369
|
}
|
17344
17370
|
|
17371
|
+
if (containerBlock == editor.getBody()) {
|
17372
|
+
return;
|
17373
|
+
}
|
17374
|
+
|
17345
17375
|
// Check if we are in an nested list
|
17346
17376
|
var containerBlockParentName = containerBlock.parentNode.nodeName;
|
17347
17377
|
if (/^(OL|UL|LI)$/.test(containerBlockParentName)) {
|
@@ -18305,7 +18335,9 @@ define("tinymce/EditorCommands", [
|
|
18305
18335
|
|
18306
18336
|
// Setup parser and serializer
|
18307
18337
|
parser = editor.parser;
|
18308
|
-
serializer = new Serializer({
|
18338
|
+
serializer = new Serializer({
|
18339
|
+
validate: settings.validate
|
18340
|
+
}, editor.schema);
|
18309
18341
|
bookmarkHtml = '<span id="mce_marker" data-mce-type="bookmark">​</span>';
|
18310
18342
|
|
18311
18343
|
// Run beforeSetContent handlers on the HTML to be inserted
|
@@ -25621,6 +25653,59 @@ define("tinymce/WindowManager", [
|
|
25621
25653
|
};
|
25622
25654
|
});
|
25623
25655
|
|
25656
|
+
// Included from: js/tinymce/classes/dom/NodePath.js
|
25657
|
+
|
25658
|
+
/**
|
25659
|
+
* NodePath.js
|
25660
|
+
*
|
25661
|
+
* Released under LGPL License.
|
25662
|
+
* Copyright (c) 1999-2015 Ephox Corp. All rights reserved
|
25663
|
+
*
|
25664
|
+
* License: http://www.tinymce.com/license
|
25665
|
+
* Contributing: http://www.tinymce.com/contributing
|
25666
|
+
*/
|
25667
|
+
|
25668
|
+
/**
|
25669
|
+
* Handles paths of nodes within an element.
|
25670
|
+
*
|
25671
|
+
* @private
|
25672
|
+
* @class tinymce.dom.NodePath
|
25673
|
+
*/
|
25674
|
+
define("tinymce/dom/NodePath", [
|
25675
|
+
"tinymce/dom/DOMUtils"
|
25676
|
+
], function(DOMUtils) {
|
25677
|
+
function create(rootNode, targetNode, normalized) {
|
25678
|
+
var path = [];
|
25679
|
+
|
25680
|
+
for (; targetNode && targetNode != rootNode; targetNode = targetNode.parentNode) {
|
25681
|
+
path.push(DOMUtils.nodeIndex(targetNode, normalized));
|
25682
|
+
}
|
25683
|
+
|
25684
|
+
return path;
|
25685
|
+
}
|
25686
|
+
|
25687
|
+
function resolve(rootNode, path) {
|
25688
|
+
var i, node, children;
|
25689
|
+
|
25690
|
+
for (node = rootNode, i = path.length - 1; i >= 0; i--) {
|
25691
|
+
children = node.childNodes;
|
25692
|
+
|
25693
|
+
if (path[i] > children.length - 1) {
|
25694
|
+
return null;
|
25695
|
+
}
|
25696
|
+
|
25697
|
+
node = children[path[i]];
|
25698
|
+
}
|
25699
|
+
|
25700
|
+
return node;
|
25701
|
+
}
|
25702
|
+
|
25703
|
+
return {
|
25704
|
+
create: create,
|
25705
|
+
resolve: resolve
|
25706
|
+
};
|
25707
|
+
});
|
25708
|
+
|
25624
25709
|
// Included from: js/tinymce/classes/util/Quirks.js
|
25625
25710
|
|
25626
25711
|
/**
|
@@ -25645,11 +25730,12 @@ define("tinymce/util/Quirks", [
|
|
25645
25730
|
"tinymce/util/VK",
|
25646
25731
|
"tinymce/dom/RangeUtils",
|
25647
25732
|
"tinymce/dom/TreeWalker",
|
25733
|
+
"tinymce/dom/NodePath",
|
25648
25734
|
"tinymce/html/Node",
|
25649
25735
|
"tinymce/html/Entities",
|
25650
25736
|
"tinymce/Env",
|
25651
25737
|
"tinymce/util/Tools"
|
25652
|
-
], function(VK, RangeUtils, TreeWalker, Node, Entities, Env, Tools) {
|
25738
|
+
], function(VK, RangeUtils, TreeWalker, NodePath, Node, Entities, Env, Tools) {
|
25653
25739
|
return function(editor) {
|
25654
25740
|
var each = Tools.each, $ = editor.$;
|
25655
25741
|
var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection,
|
@@ -26028,6 +26114,111 @@ define("tinymce/util/Quirks", [
|
|
26028
26114
|
}
|
26029
26115
|
}
|
26030
26116
|
|
26117
|
+
/**
|
26118
|
+
* This retains the formatting if the last character is to be deleted.
|
26119
|
+
*
|
26120
|
+
* Backspace on this: <p><b><i>a|</i></b></p> would become <p>|</p> in WebKit.
|
26121
|
+
* With this patch: <p><b><i>|<br></i></b></p>
|
26122
|
+
*/
|
26123
|
+
function handleLastBlockCharacterDelete(isForward, rng) {
|
26124
|
+
var path, blockElm, newBlockElm, clonedBlockElm, sibling,
|
26125
|
+
container, offset, br, currentFormatNodes;
|
26126
|
+
|
26127
|
+
function cloneTextBlockWithFormats(blockElm, node) {
|
26128
|
+
currentFormatNodes = $(node).parents().filter(function(idx, node) {
|
26129
|
+
return !!editor.schema.getTextInlineElements()[node.nodeName];
|
26130
|
+
});
|
26131
|
+
|
26132
|
+
newBlockElm = blockElm.cloneNode(false);
|
26133
|
+
|
26134
|
+
currentFormatNodes = Tools.map(currentFormatNodes, function(formatNode) {
|
26135
|
+
formatNode = formatNode.cloneNode(false);
|
26136
|
+
|
26137
|
+
if (newBlockElm.hasChildNodes()) {
|
26138
|
+
formatNode.appendChild(newBlockElm.firstChild);
|
26139
|
+
newBlockElm.appendChild(formatNode);
|
26140
|
+
} else {
|
26141
|
+
newBlockElm.appendChild(formatNode);
|
26142
|
+
}
|
26143
|
+
|
26144
|
+
newBlockElm.appendChild(formatNode);
|
26145
|
+
|
26146
|
+
return formatNode;
|
26147
|
+
});
|
26148
|
+
|
26149
|
+
if (currentFormatNodes.length) {
|
26150
|
+
br = dom.create('br');
|
26151
|
+
currentFormatNodes[0].appendChild(br);
|
26152
|
+
dom.replace(newBlockElm, blockElm);
|
26153
|
+
|
26154
|
+
rng.setStartBefore(br);
|
26155
|
+
rng.setEndBefore(br);
|
26156
|
+
editor.selection.setRng(rng);
|
26157
|
+
|
26158
|
+
return br;
|
26159
|
+
}
|
26160
|
+
|
26161
|
+
return null;
|
26162
|
+
}
|
26163
|
+
|
26164
|
+
function isTextBlock(node) {
|
26165
|
+
return node && editor.schema.getTextBlockElements()[node.tagName];
|
26166
|
+
}
|
26167
|
+
|
26168
|
+
if (!rng.collapsed) {
|
26169
|
+
return;
|
26170
|
+
}
|
26171
|
+
|
26172
|
+
container = rng.startContainer;
|
26173
|
+
offset = rng.startOffset;
|
26174
|
+
blockElm = dom.getParent(container, dom.isBlock);
|
26175
|
+
if (!isTextBlock(blockElm)) {
|
26176
|
+
return;
|
26177
|
+
}
|
26178
|
+
|
26179
|
+
if (container.nodeType == 1) {
|
26180
|
+
container = container.childNodes[offset];
|
26181
|
+
if (container && container.tagName != 'BR') {
|
26182
|
+
return;
|
26183
|
+
}
|
26184
|
+
|
26185
|
+
if (isForward) {
|
26186
|
+
sibling = blockElm.nextSibling;
|
26187
|
+
} else {
|
26188
|
+
sibling = blockElm.previousSibling;
|
26189
|
+
}
|
26190
|
+
|
26191
|
+
if (dom.isEmpty(blockElm) && isTextBlock(sibling) && dom.isEmpty(sibling)) {
|
26192
|
+
if (cloneTextBlockWithFormats(blockElm, container)) {
|
26193
|
+
dom.remove(sibling);
|
26194
|
+
return true;
|
26195
|
+
}
|
26196
|
+
}
|
26197
|
+
} else if (container.nodeType == 3) {
|
26198
|
+
path = NodePath.create(blockElm, container);
|
26199
|
+
clonedBlockElm = blockElm.cloneNode(true);
|
26200
|
+
container = NodePath.resolve(clonedBlockElm, path);
|
26201
|
+
|
26202
|
+
if (isForward) {
|
26203
|
+
if (offset >= container.data.length) {
|
26204
|
+
return;
|
26205
|
+
}
|
26206
|
+
|
26207
|
+
container.deleteData(offset, 1);
|
26208
|
+
} else {
|
26209
|
+
if (offset <= 0) {
|
26210
|
+
return;
|
26211
|
+
}
|
26212
|
+
|
26213
|
+
container.deleteData(offset - 1, 1);
|
26214
|
+
}
|
26215
|
+
|
26216
|
+
if (dom.isEmpty(clonedBlockElm)) {
|
26217
|
+
return cloneTextBlockWithFormats(blockElm, container);
|
26218
|
+
}
|
26219
|
+
}
|
26220
|
+
}
|
26221
|
+
|
26031
26222
|
function customDelete(isForward) {
|
26032
26223
|
var mutationObserver, rng, caretElement;
|
26033
26224
|
|
@@ -26117,6 +26308,11 @@ define("tinymce/util/Quirks", [
|
|
26117
26308
|
return;
|
26118
26309
|
}
|
26119
26310
|
|
26311
|
+
if (handleLastBlockCharacterDelete(isForward, rng)) {
|
26312
|
+
e.preventDefault();
|
26313
|
+
return;
|
26314
|
+
}
|
26315
|
+
|
26120
26316
|
// Ignore non meta delete in the where there is text before/after the caret
|
26121
26317
|
if (!isMetaOrCtrl && rng.collapsed && container.nodeType == 3) {
|
26122
26318
|
if (isForward ? offset < container.data.length : offset > 0) {
|
@@ -26136,7 +26332,7 @@ define("tinymce/util/Quirks", [
|
|
26136
26332
|
|
26137
26333
|
// Handle case where text is deleted by typing over
|
26138
26334
|
editor.on('keypress', function(e) {
|
26139
|
-
if (!isDefaultPrevented(e) && !selection.isCollapsed() && e.charCode && !VK.metaKeyPressed(e)) {
|
26335
|
+
if (!isDefaultPrevented(e) && !selection.isCollapsed() && e.charCode > 31 && !VK.metaKeyPressed(e)) {
|
26140
26336
|
var rng, currentFormatNodes, fragmentNode, blockParent, caretNode, charText;
|
26141
26337
|
|
26142
26338
|
rng = editor.selection.getRng();
|
@@ -29355,11 +29551,14 @@ define("tinymce/Editor", [
|
|
29355
29551
|
|
29356
29552
|
// Keep scripts from executing
|
29357
29553
|
self.parser.addNodeFilter('script', function(nodes) {
|
29358
|
-
var i = nodes.length, node;
|
29554
|
+
var i = nodes.length, node, type;
|
29359
29555
|
|
29360
29556
|
while (i--) {
|
29361
29557
|
node = nodes[i];
|
29362
|
-
|
29558
|
+
type = node.attr('type') || 'no/type';
|
29559
|
+
if (type.indexOf('mce-') !== 0) {
|
29560
|
+
node.attr('type', 'mce-' + type);
|
29561
|
+
}
|
29363
29562
|
}
|
29364
29563
|
});
|
29365
29564
|
|
@@ -30162,7 +30361,7 @@ define("tinymce/Editor", [
|
|
30162
30361
|
* tinymce.activeEditor.setContent('[b]some[/b] html', {format: 'bbcode'});
|
30163
30362
|
*/
|
30164
30363
|
setContent: function(content, args) {
|
30165
|
-
var self = this, body = self.getBody(), forcedRootBlockName;
|
30364
|
+
var self = this, body = self.getBody(), forcedRootBlockName, padd;
|
30166
30365
|
|
30167
30366
|
// Setup args object
|
30168
30367
|
args = args || {};
|
@@ -30180,14 +30379,24 @@ define("tinymce/Editor", [
|
|
30180
30379
|
// Padd empty content in Gecko and Safari. Commands will otherwise fail on the content
|
30181
30380
|
// It will also be impossible to place the caret in the editor unless there is a BR element present
|
30182
30381
|
if (content.length === 0 || /^\s+$/.test(content)) {
|
30382
|
+
padd = ie && ie < 11 ? '' : '<br data-mce-bogus="1">';
|
30383
|
+
|
30384
|
+
// Todo: There is a lot more root elements that need special padding
|
30385
|
+
// so separate this and add all of them at some point.
|
30386
|
+
if (body.nodeName == 'TABLE') {
|
30387
|
+
content = '<tr><td>' + padd + '</td></tr>';
|
30388
|
+
} else if (/^(UL|OL)$/.test(body.nodeName)) {
|
30389
|
+
content = '<li>' + padd + '</li>';
|
30390
|
+
}
|
30391
|
+
|
30183
30392
|
forcedRootBlockName = self.settings.forced_root_block;
|
30184
30393
|
|
30185
30394
|
// Check if forcedRootBlock is configured and that the block is a valid child of the body
|
30186
30395
|
if (forcedRootBlockName && self.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {
|
30187
30396
|
// Padd with bogus BR elements on modern browsers and IE 7 and 8 since they don't render empty P tags properly
|
30188
|
-
content =
|
30397
|
+
content = padd;
|
30189
30398
|
content = self.dom.createHTML(forcedRootBlockName, self.settings.forced_root_block_attrs, content);
|
30190
|
-
} else if (!ie) {
|
30399
|
+
} else if (!ie && !content) {
|
30191
30400
|
// We need to add a BR when forced_root_block is disabled on non IE browsers to place the caret
|
30192
30401
|
content = '<br data-mce-bogus="1">';
|
30193
30402
|
}
|
@@ -30198,7 +30407,9 @@ define("tinymce/Editor", [
|
|
30198
30407
|
} else {
|
30199
30408
|
// Parse and serialize the html
|
30200
30409
|
if (args.format !== 'raw') {
|
30201
|
-
content = new Serializer({
|
30410
|
+
content = new Serializer({
|
30411
|
+
validate: self.validate
|
30412
|
+
}, self.schema).serialize(
|
30202
30413
|
self.parser.parse(content, {isRootContent: true})
|
30203
30414
|
);
|
30204
30415
|
}
|
@@ -31130,7 +31341,7 @@ define("tinymce/EditorManager", [
|
|
31130
31341
|
* @property minorVersion
|
31131
31342
|
* @type String
|
31132
31343
|
*/
|
31133
|
-
minorVersion: '2.
|
31344
|
+
minorVersion: '2.7',
|
31134
31345
|
|
31135
31346
|
/**
|
31136
31347
|
* Release date of TinyMCE build.
|
@@ -31138,7 +31349,7 @@ define("tinymce/EditorManager", [
|
|
31138
31349
|
* @property releaseDate
|
31139
31350
|
* @type String
|
31140
31351
|
*/
|
31141
|
-
releaseDate: '2015-
|
31352
|
+
releaseDate: '2015-10-27',
|
31142
31353
|
|
31143
31354
|
/**
|
31144
31355
|
* Collection of editor instances.
|
@@ -35542,6 +35753,23 @@ define("tinymce/ui/FormatControls", [
|
|
35542
35753
|
|
35543
35754
|
formatMenu = createFormatMenu();
|
35544
35755
|
|
35756
|
+
function initOnPostRender() {
|
35757
|
+
var self = this;
|
35758
|
+
|
35759
|
+
// TODO: Fix this
|
35760
|
+
if (editor.formatter) {
|
35761
|
+
editor.formatter.formatChanged(name, function(state) {
|
35762
|
+
self.active(state);
|
35763
|
+
});
|
35764
|
+
} else {
|
35765
|
+
editor.on('init', function() {
|
35766
|
+
editor.formatter.formatChanged(name, function(state) {
|
35767
|
+
self.active(state);
|
35768
|
+
});
|
35769
|
+
});
|
35770
|
+
}
|
35771
|
+
}
|
35772
|
+
|
35545
35773
|
// Simple format controls <control/format>:<UI text>
|
35546
35774
|
each({
|
35547
35775
|
bold: 'Bold',
|
@@ -35554,20 +35782,7 @@ define("tinymce/ui/FormatControls", [
|
|
35554
35782
|
editor.addButton(name, {
|
35555
35783
|
tooltip: text,
|
35556
35784
|
onPostRender: function() {
|
35557
|
-
|
35558
|
-
|
35559
|
-
// TODO: Fix this
|
35560
|
-
if (editor.formatter) {
|
35561
|
-
editor.formatter.formatChanged(name, function(state) {
|
35562
|
-
self.active(state);
|
35563
|
-
});
|
35564
|
-
} else {
|
35565
|
-
editor.on('init', function() {
|
35566
|
-
editor.formatter.formatChanged(name, function(state) {
|
35567
|
-
self.active(state);
|
35568
|
-
});
|
35569
|
-
});
|
35570
|
-
}
|
35785
|
+
initOnPostRender();
|
35571
35786
|
},
|
35572
35787
|
onclick: function() {
|
35573
35788
|
toggleFormat(name);
|
@@ -35611,20 +35826,7 @@ define("tinymce/ui/FormatControls", [
|
|
35611
35826
|
tooltip: item[0],
|
35612
35827
|
cmd: item[1],
|
35613
35828
|
onPostRender: function() {
|
35614
|
-
|
35615
|
-
|
35616
|
-
// TODO: Fix this
|
35617
|
-
if (editor.formatter) {
|
35618
|
-
editor.formatter.formatChanged(name, function(state) {
|
35619
|
-
self.active(state);
|
35620
|
-
});
|
35621
|
-
} else {
|
35622
|
-
editor.on('init', function() {
|
35623
|
-
editor.formatter.formatChanged(name, function(state) {
|
35624
|
-
self.active(state);
|
35625
|
-
});
|
35626
|
-
});
|
35627
|
-
}
|
35829
|
+
initOnPostRender();
|
35628
35830
|
}
|
35629
35831
|
});
|
35630
35832
|
});
|