tinymce-rails 4.0.8 → 4.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/source/tinymce/tinymce.jquery.js +217 -104
- data/app/assets/source/tinymce/tinymce.js +218 -93
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/jquery.tinymce.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/advlist/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autolink/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autoresize/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autosave/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/charmap/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/code/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/contextmenu/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/directionality/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/example/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/fullpage/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/fullscreen/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/hr/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/image/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/importcss/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/insertdatetime/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/layer/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/legacyoutput/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/link/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/lists/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/media/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/nonbreaking/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/noneditable/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/pagebreak/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/preview/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/print/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/save/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/spellchecker/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/tabfocus/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/template/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/visualblocks/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/visualchars/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/skins/lightgray/content.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/{icomoon-small.eot → tinymce-small.eot} +0 -0
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/{icomoon-small.svg → tinymce-small.svg} +4 -4
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/{icomoon-small.ttf → tinymce-small.ttf} +0 -0
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce-small.woff +0 -0
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/{icomoon.eot → tinymce.eot} +0 -0
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/{icomoon.svg → tinymce.svg} +3 -3
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/{icomoon.ttf → tinymce.ttf} +0 -0
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce.woff +0 -0
- data/vendor/assets/javascripts/tinymce/skins/lightgray/skin.ie7.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/lightgray/skin.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.jquery.js +9 -9
- data/vendor/assets/javascripts/tinymce/tinymce.js +10 -10
- metadata +11 -10
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/icomoon-small.woff +0 -0
- data/vendor/assets/javascripts/tinymce/skins/lightgray/fonts/icomoon.woff +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.0.
|
1
|
+
// 4.0.10 (2013-10-28)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -253,7 +253,11 @@ define("tinymce/dom/EventUtils", [], function() {
|
|
253
253
|
|
254
254
|
// Use W3C method
|
255
255
|
if (doc.addEventListener) {
|
256
|
-
|
256
|
+
if (doc.readyState === "complete") {
|
257
|
+
readyHandler();
|
258
|
+
} else {
|
259
|
+
addEvent(win, 'DOMContentLoaded', readyHandler);
|
260
|
+
}
|
257
261
|
} else {
|
258
262
|
// Use IE method
|
259
263
|
addEvent(doc, "readystatechange", waitForDomLoaded);
|
@@ -2549,12 +2553,14 @@ setDocument();
|
|
2549
2553
|
[0, 0].sort( sortOrder );
|
2550
2554
|
support.detectDuplicates = hasDuplicate;
|
2551
2555
|
|
2556
|
+
/*
|
2552
2557
|
// EXPOSE
|
2553
2558
|
if ( typeof define === "function" && define.amd ) {
|
2554
2559
|
define(function() { return Sizzle; });
|
2555
2560
|
} else {
|
2556
2561
|
window.Sizzle = Sizzle;
|
2557
2562
|
}
|
2563
|
+
*/
|
2558
2564
|
|
2559
2565
|
// EXPOSE
|
2560
2566
|
return Sizzle;
|
@@ -3366,7 +3372,8 @@ define("tinymce/html/Styles", [], function() {
|
|
3366
3372
|
* @return {Object} Object representation of that style like {border: '1px solid red'}
|
3367
3373
|
*/
|
3368
3374
|
parse: function(css) {
|
3369
|
-
var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter
|
3375
|
+
var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter;
|
3376
|
+
var urlConverterScope = settings.url_converter_scope || this;
|
3370
3377
|
|
3371
3378
|
function compress(prefix, suffix) {
|
3372
3379
|
var top, right, bottom, left;
|
@@ -3487,6 +3494,10 @@ define("tinymce/html/Styles", [], function() {
|
|
3487
3494
|
|
3488
3495
|
url = decode(url || url2 || url3);
|
3489
3496
|
|
3497
|
+
if (!settings.allow_script_urls && /(java|vb)script:/i.test(url.replace(/[\s\r\n]+/, ''))) {
|
3498
|
+
return "";
|
3499
|
+
}
|
3500
|
+
|
3490
3501
|
// Convert the URL to relative/absolute depending on config
|
3491
3502
|
if (urlConverter) {
|
3492
3503
|
url = urlConverter.call(urlConverterScope, url, 'style');
|
@@ -3497,6 +3508,8 @@ define("tinymce/html/Styles", [], function() {
|
|
3497
3508
|
}
|
3498
3509
|
|
3499
3510
|
if (css) {
|
3511
|
+
css = css.replace(/[\u0000-\u001F]/g, '');
|
3512
|
+
|
3500
3513
|
// Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing
|
3501
3514
|
css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) {
|
3502
3515
|
return str.replace(/[;:]/g, encode);
|
@@ -3508,6 +3521,10 @@ define("tinymce/html/Styles", [], function() {
|
|
3508
3521
|
value = matches[2].replace(trimRightRegExp, '');
|
3509
3522
|
|
3510
3523
|
if (name && value.length > 0) {
|
3524
|
+
if (!settings.allow_script_urls && (name == "behavior" || /expression\s*\(/.test(value))) {
|
3525
|
+
continue;
|
3526
|
+
}
|
3527
|
+
|
3511
3528
|
// Opera will produce 700 instead of bold in their style values
|
3512
3529
|
if (name === 'font-weight' && value === '700') {
|
3513
3530
|
value = 'bold';
|
@@ -5254,9 +5271,9 @@ define("tinymce/Env", [], function() {
|
|
5254
5271
|
webkit = /WebKit/.test(userAgent);
|
5255
5272
|
ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName);
|
5256
5273
|
ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
|
5257
|
-
ie11 = userAgent.indexOf('Trident') != -1 ? 11 : false;
|
5274
|
+
ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false;
|
5258
5275
|
ie = ie || ie11;
|
5259
|
-
gecko = !webkit && /Gecko/.test(userAgent);
|
5276
|
+
gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
|
5260
5277
|
mac = userAgent.indexOf('Mac') != -1;
|
5261
5278
|
iDevice = /(iPad|iPhone)/.test(userAgent);
|
5262
5279
|
|
@@ -7382,6 +7399,12 @@ define("tinymce/dom/DOMUtils", [
|
|
7382
7399
|
self.boundEvents = null;
|
7383
7400
|
}
|
7384
7401
|
|
7402
|
+
// Restore sizzle document to window.document
|
7403
|
+
// Since the current document might be removed producing "Permission denied" on IE see #6325
|
7404
|
+
if (Sizzle.setDocument) {
|
7405
|
+
Sizzle.setDocument();
|
7406
|
+
}
|
7407
|
+
|
7385
7408
|
self.win = self.doc = self.root = self.events = self.frag = null;
|
7386
7409
|
},
|
7387
7410
|
|
@@ -9129,6 +9152,12 @@ define("tinymce/html/Schema", [
|
|
9129
9152
|
each(split('span'), function(name) {
|
9130
9153
|
elements[name].removeEmptyAttrs = true;
|
9131
9154
|
});
|
9155
|
+
|
9156
|
+
// Remove these by default
|
9157
|
+
// TODO: Reenable in 4.1
|
9158
|
+
/*each(split('script style'), function(name) {
|
9159
|
+
delete elements[name];
|
9160
|
+
});*/
|
9132
9161
|
} else {
|
9133
9162
|
setValidElements(settings.valid_elements);
|
9134
9163
|
}
|
@@ -9470,7 +9499,7 @@ define("tinymce/html/SaxParser", [
|
|
9470
9499
|
var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;
|
9471
9500
|
var attributesRequired, attributesDefault, attributesForced;
|
9472
9501
|
var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;
|
9473
|
-
var decode = Entities.decode, fixSelfClosing;
|
9502
|
+
var decode = Entities.decode, fixSelfClosing, filteredAttrs = Tools.makeMap('src,href');
|
9474
9503
|
|
9475
9504
|
function processEndTag(name) {
|
9476
9505
|
var pos, i;
|
@@ -9500,7 +9529,7 @@ define("tinymce/html/SaxParser", [
|
|
9500
9529
|
}
|
9501
9530
|
|
9502
9531
|
function parseAttribute(match, name, value, val2, val3) {
|
9503
|
-
var attrRule, i;
|
9532
|
+
var attrRule, i, trimRegExp = /[\s\u0000-\u001F]+/g;
|
9504
9533
|
|
9505
9534
|
name = name.toLowerCase();
|
9506
9535
|
value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute
|
@@ -9536,6 +9565,12 @@ define("tinymce/html/SaxParser", [
|
|
9536
9565
|
}
|
9537
9566
|
}
|
9538
9567
|
|
9568
|
+
if (filteredAttrs[name] && !settings.allow_script_urls) {
|
9569
|
+
if (/(java|vb)script:/i.test(decodeURIComponent(value.replace(trimRegExp, '')))) {
|
9570
|
+
return;
|
9571
|
+
}
|
9572
|
+
}
|
9573
|
+
|
9539
9574
|
// Add attribute to list and map
|
9540
9575
|
attrList.map[name] = value;
|
9541
9576
|
attrList.push({
|
@@ -9736,6 +9771,15 @@ define("tinymce/html/SaxParser", [
|
|
9736
9771
|
}
|
9737
9772
|
}
|
9738
9773
|
} else if ((value = matches[1])) { // Comment
|
9774
|
+
// Padd comment value to avoid browsers from parsing invalid comments as HTML
|
9775
|
+
if (value.charAt(0) === '>') {
|
9776
|
+
value = ' ' + value;
|
9777
|
+
}
|
9778
|
+
|
9779
|
+
if (!settings.allow_conditional_comments && value.substr(0, 3) === '[if') {
|
9780
|
+
value = ' ' + value;
|
9781
|
+
}
|
9782
|
+
|
9739
9783
|
self.comment(value);
|
9740
9784
|
} else if ((value = matches[2])) { // CDATA
|
9741
9785
|
self.cdata(value);
|
@@ -10088,6 +10132,7 @@ define("tinymce/html/DomParser", [
|
|
10088
10132
|
if (!rootBlockNode) {
|
10089
10133
|
// Create a new root block element
|
10090
10134
|
rootBlockNode = createNode(rootBlockName, 1);
|
10135
|
+
rootBlockNode.attr(settings.forced_root_block_attrs);
|
10091
10136
|
rootNode.insert(rootBlockNode, node);
|
10092
10137
|
rootBlockNode.append(node);
|
10093
10138
|
} else {
|
@@ -10151,6 +10196,8 @@ define("tinymce/html/DomParser", [
|
|
10151
10196
|
|
10152
10197
|
parser = new SaxParser({
|
10153
10198
|
validate: validate,
|
10199
|
+
allow_script_urls: settings.allow_script_urls,
|
10200
|
+
allow_conditional_comments: settings.allow_conditional_comments,
|
10154
10201
|
|
10155
10202
|
// Exclude P and LI from DOM parsing since it's treated better by the DOM parser
|
10156
10203
|
self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),
|
@@ -11983,10 +12030,7 @@ define("tinymce/dom/ControlSelection", [
|
|
11983
12030
|
}
|
11984
12031
|
|
11985
12032
|
function showResizeRect(targetElm, mouseDownHandleName, mouseDownEvent) {
|
11986
|
-
var position, targetWidth, targetHeight, e, rect;
|
11987
|
-
|
11988
|
-
// Fix when inline element is within a relaive container
|
11989
|
-
var offsetParent = editor.getBody().offsetParent || editor.getBody();
|
12033
|
+
var position, targetWidth, targetHeight, e, rect, offsetParent = editor.getBody();
|
11990
12034
|
|
11991
12035
|
// Get position and size of target
|
11992
12036
|
position = dom.getPos(targetElm, offsetParent);
|
@@ -12254,16 +12298,24 @@ define("tinymce/dom/ControlSelection", [
|
|
12254
12298
|
|
12255
12299
|
if (Env.ie >= 11) {
|
12256
12300
|
// TODO: Drag/drop doesn't work
|
12257
|
-
editor.on('mouseup
|
12258
|
-
|
12301
|
+
editor.on('mouseup', function(e) {
|
12302
|
+
var nodeName = e.target.nodeName;
|
12303
|
+
|
12304
|
+
if (/^(TABLE|IMG|HR)$/.test(nodeName)) {
|
12305
|
+
editor.selection.select(e.target, nodeName == 'TABLE');
|
12306
|
+
editor.nodeChanged();
|
12307
|
+
}
|
12308
|
+
});
|
12309
|
+
|
12310
|
+
editor.dom.bind(editor.getBody(), 'mscontrolselect', function(e) {
|
12311
|
+
if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {
|
12259
12312
|
e.preventDefault();
|
12260
|
-
editor.selection.select(e.target);
|
12261
12313
|
}
|
12262
12314
|
});
|
12263
12315
|
}
|
12264
12316
|
}
|
12265
12317
|
|
12266
|
-
editor.on('nodechange mousedown ResizeEditor', updateResizeRect);
|
12318
|
+
editor.on('nodechange mousedown mouseup ResizeEditor', updateResizeRect);
|
12267
12319
|
|
12268
12320
|
// Update resize rect while typing in a table
|
12269
12321
|
editor.on('keydown keyup', function(e) {
|
@@ -13270,7 +13322,7 @@ define("tinymce/dom/Selection", [
|
|
13270
13322
|
getNode: function() {
|
13271
13323
|
var self = this, rng = self.getRng(), elm;
|
13272
13324
|
var startContainer = rng.startContainer, endContainer = rng.endContainer;
|
13273
|
-
var startOffset = rng.startOffset, endOffset = rng.endOffset;
|
13325
|
+
var startOffset = rng.startOffset, endOffset = rng.endOffset, root = self.dom.getRoot();
|
13274
13326
|
|
13275
13327
|
function skipEmptyTextNodes(node, forwards) {
|
13276
13328
|
var orig = node;
|
@@ -13284,7 +13336,7 @@ define("tinymce/dom/Selection", [
|
|
13284
13336
|
|
13285
13337
|
// Range maybe lost after the editor is made visible again
|
13286
13338
|
if (!rng) {
|
13287
|
-
return
|
13339
|
+
return root;
|
13288
13340
|
}
|
13289
13341
|
|
13290
13342
|
if (rng.setStart) {
|
@@ -13332,7 +13384,14 @@ define("tinymce/dom/Selection", [
|
|
13332
13384
|
return elm;
|
13333
13385
|
}
|
13334
13386
|
|
13335
|
-
|
13387
|
+
elm = rng.item ? rng.item(0) : rng.parentElement();
|
13388
|
+
|
13389
|
+
// IE 7 might return elements outside the iframe
|
13390
|
+
if (elm.ownerDocument !== self.win.document) {
|
13391
|
+
elm = root;
|
13392
|
+
}
|
13393
|
+
|
13394
|
+
return elm;
|
13336
13395
|
},
|
13337
13396
|
|
13338
13397
|
getSelectedBlocks: function(startElm, endElm) {
|
@@ -14780,6 +14839,7 @@ define("tinymce/Formatter", [
|
|
14780
14839
|
|
14781
14840
|
function removeRngStyle(rng) {
|
14782
14841
|
var startContainer, endContainer;
|
14842
|
+
var commonAncestorContainer = rng.commonAncestorContainer;
|
14783
14843
|
|
14784
14844
|
rng = expandRng(rng, formatList, TRUE);
|
14785
14845
|
|
@@ -14788,17 +14848,24 @@ define("tinymce/Formatter", [
|
|
14788
14848
|
endContainer = getContainer(rng);
|
14789
14849
|
|
14790
14850
|
if (startContainer != endContainer) {
|
14791
|
-
// WebKit will render the table incorrectly if we wrap a TD in a SPAN
|
14792
|
-
// so
|
14793
|
-
// This will happen if you
|
14794
|
-
if (/^(TR|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
|
14795
|
-
if (startContainer.nodeName == "
|
14796
|
-
startContainer = startContainer.firstChild || startContainer;
|
14797
|
-
} else {
|
14851
|
+
// WebKit will render the table incorrectly if we wrap a TH or TD in a SPAN
|
14852
|
+
// so let's see if we can use the first child instead
|
14853
|
+
// This will happen if you triple click a table cell and use remove formatting
|
14854
|
+
if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
|
14855
|
+
if (startContainer.nodeName == "TR") {
|
14798
14856
|
startContainer = startContainer.firstChild.firstChild || startContainer;
|
14857
|
+
} else {
|
14858
|
+
startContainer = startContainer.firstChild || startContainer;
|
14799
14859
|
}
|
14800
14860
|
}
|
14801
14861
|
|
14862
|
+
// Try to adjust endContainer as well if cells on the same row were selected - bug #6410
|
14863
|
+
if (commonAncestorContainer &&
|
14864
|
+
/^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) &&
|
14865
|
+
/^(TH|TD)$/.test(endContainer.nodeName) && endContainer.firstChild) {
|
14866
|
+
endContainer = endContainer.firstChild || endContainer;
|
14867
|
+
}
|
14868
|
+
|
14802
14869
|
// Wrap start/end nodes in span element since these might be cloned/moved
|
14803
14870
|
startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'});
|
14804
14871
|
endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'});
|
@@ -15812,6 +15879,7 @@ define("tinymce/Formatter", [
|
|
15812
15879
|
if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) {
|
15813
15880
|
if (!rootBlockElm) {
|
15814
15881
|
rootBlockElm = wrap(node, forcedRootBlock);
|
15882
|
+
dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);
|
15815
15883
|
} else {
|
15816
15884
|
rootBlockElm.appendChild(node);
|
15817
15885
|
}
|
@@ -16799,6 +16867,24 @@ define("tinymce/EnterKey", [
|
|
16799
16867
|
function moveToCaretPosition(root) {
|
16800
16868
|
var walker, node, rng, lastNode = root, tempElm;
|
16801
16869
|
|
16870
|
+
function firstNonWhiteSpaceNodeSibling(node) {
|
16871
|
+
while (node) {
|
16872
|
+
if (node.nodeType == 1 || (node.nodeType == 3 && node.data && /[\r\n\s]/.test(node.data))) {
|
16873
|
+
return node;
|
16874
|
+
}
|
16875
|
+
|
16876
|
+
node = node.nextSibling;
|
16877
|
+
}
|
16878
|
+
}
|
16879
|
+
|
16880
|
+
if (root.nodeName == 'LI') {
|
16881
|
+
var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);
|
16882
|
+
|
16883
|
+
if (firstChild && /^(UL|OL)$/.test(firstChild.nodeName)) {
|
16884
|
+
root.insertBefore(dom.doc.createTextNode('\u00a0'), root.firstChild);
|
16885
|
+
}
|
16886
|
+
}
|
16887
|
+
|
16802
16888
|
rng = dom.createRng();
|
16803
16889
|
|
16804
16890
|
if (root.hasChildNodes()) {
|
@@ -16853,12 +16939,26 @@ define("tinymce/EnterKey", [
|
|
16853
16939
|
selection.scrollIntoView(root);
|
16854
16940
|
}
|
16855
16941
|
|
16942
|
+
function setForcedBlockAttrs(node) {
|
16943
|
+
var forcedRootBlockName = settings.forced_root_block;
|
16944
|
+
|
16945
|
+
if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {
|
16946
|
+
dom.setAttribs(node, settings.forced_root_block_attrs);
|
16947
|
+
}
|
16948
|
+
}
|
16949
|
+
|
16856
16950
|
// Creates a new block element by cloning the current one or creating a new one if the name is specified
|
16857
16951
|
// This function will also copy any text formatting from the parent block and add it to the new one
|
16858
16952
|
function createNewBlock(name) {
|
16859
16953
|
var node = container, block, clonedNode, caretNode;
|
16860
16954
|
|
16861
|
-
|
16955
|
+
if (name || parentBlockName == "TABLE") {
|
16956
|
+
block = dom.create(name || newBlockName);
|
16957
|
+
setForcedBlockAttrs(block);
|
16958
|
+
} else {
|
16959
|
+
block = parentBlock.cloneNode(false);
|
16960
|
+
}
|
16961
|
+
|
16862
16962
|
caretNode = block;
|
16863
16963
|
|
16864
16964
|
// Clone any parent styles
|
@@ -16964,6 +17064,7 @@ define("tinymce/EnterKey", [
|
|
16964
17064
|
|
16965
17065
|
if (!parentBlock.hasChildNodes()) {
|
16966
17066
|
newBlock = dom.create(blockName);
|
17067
|
+
setForcedBlockAttrs(newBlock);
|
16967
17068
|
parentBlock.appendChild(newBlock);
|
16968
17069
|
rng.setStart(newBlock, 0);
|
16969
17070
|
rng.setEnd(newBlock, 0);
|
@@ -16984,6 +17085,7 @@ define("tinymce/EnterKey", [
|
|
16984
17085
|
|
16985
17086
|
if (startNode && schema.isValidChild(rootBlockName, blockName.toLowerCase())) {
|
16986
17087
|
newBlock = dom.create(blockName);
|
17088
|
+
setForcedBlockAttrs(newBlock);
|
16987
17089
|
startNode.parentNode.insertBefore(newBlock, startNode);
|
16988
17090
|
|
16989
17091
|
// Start wrapping until we hit a block
|
@@ -17068,8 +17170,14 @@ define("tinymce/EnterKey", [
|
|
17068
17170
|
tmpRng.setStartAfter(parentBlock);
|
17069
17171
|
tmpRng.setEndAfter(containerBlock);
|
17070
17172
|
fragment = tmpRng.extractContents();
|
17071
|
-
|
17072
|
-
|
17173
|
+
|
17174
|
+
if (newBlockName == 'LI' && fragment.firstChild.nodeName == 'LI') {
|
17175
|
+
newBlock = fragment.firstChild;
|
17176
|
+
dom.insertAfter(fragment, containerBlock);
|
17177
|
+
} else {
|
17178
|
+
dom.insertAfter(fragment, containerBlock);
|
17179
|
+
dom.insertAfter(newBlock, containerBlock);
|
17180
|
+
}
|
17073
17181
|
}
|
17074
17182
|
|
17075
17183
|
dom.remove(parentBlock);
|
@@ -17420,7 +17528,7 @@ define("tinymce/ForceBlocks", [], function() {
|
|
17420
17528
|
}
|
17421
17529
|
|
17422
17530
|
if (!rootBlockNode) {
|
17423
|
-
rootBlockNode = dom.create(forcedRootBlock);
|
17531
|
+
rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs);
|
17424
17532
|
node.parentNode.insertBefore(rootBlockNode, node);
|
17425
17533
|
wrapped = true;
|
17426
17534
|
}
|
@@ -17775,7 +17883,7 @@ define("tinymce/EditorCommands", [
|
|
17775
17883
|
|
17776
17884
|
mceInsertContent: function(command, ui, value) {
|
17777
17885
|
var parser, serializer, parentNode, rootNode, fragment, args;
|
17778
|
-
var marker,
|
17886
|
+
var marker, rng, node, node2, bookmarkHtml;
|
17779
17887
|
|
17780
17888
|
function trimOrPaddLeftRight(html) {
|
17781
17889
|
var rng, container, offset;
|
@@ -17828,6 +17936,14 @@ define("tinymce/EditorCommands", [
|
|
17828
17936
|
// Replace the caret marker with a span bookmark element
|
17829
17937
|
value = value.replace(/\{\$caret\}/, bookmarkHtml);
|
17830
17938
|
|
17939
|
+
// If selection is at <body>|<p></p> then move it into <body><p>|</p>
|
17940
|
+
var body = editor.getBody();
|
17941
|
+
if (dom.isBlock(body.firstChild) && dom.isEmpty(body.firstChild)) {
|
17942
|
+
body.firstChild.appendChild(dom.doc.createTextNode('\u00a0'));
|
17943
|
+
selection.select(body.firstChild, true);
|
17944
|
+
dom.remove(body.firstChild.lastChild);
|
17945
|
+
}
|
17946
|
+
|
17831
17947
|
// Insert node maker where we will insert the new HTML and get it's parent
|
17832
17948
|
if (!selection.isCollapsed()) {
|
17833
17949
|
editor.getDoc().execCommand('Delete', false, null);
|
@@ -17906,18 +18022,7 @@ define("tinymce/EditorCommands", [
|
|
17906
18022
|
}
|
17907
18023
|
|
17908
18024
|
marker = dom.get('mce_marker');
|
17909
|
-
|
17910
|
-
// Scroll range into view scrollIntoView on element can't be used since it will scroll the main view port as well
|
17911
|
-
nodeRect = dom.getRect(marker);
|
17912
|
-
viewPortRect = dom.getViewPort(editor.getWin());
|
17913
|
-
|
17914
|
-
// Check if node is out side the viewport if it is then scroll to it
|
17915
|
-
if ((nodeRect.y + nodeRect.h > viewPortRect.y + viewPortRect.h || nodeRect.y < viewPortRect.y) ||
|
17916
|
-
(nodeRect.x > viewPortRect.x + viewPortRect.w || nodeRect.x < viewPortRect.x)) {
|
17917
|
-
viewportBodyElement = isIE ? editor.getDoc().documentElement : editor.getBody();
|
17918
|
-
viewportBodyElement.scrollLeft = nodeRect.x;
|
17919
|
-
viewportBodyElement.scrollTop = nodeRect.y - viewPortRect.h + 25;
|
17920
|
-
}
|
18025
|
+
selection.scrollIntoView(marker);
|
17921
18026
|
|
17922
18027
|
// Move selection before marker and remove it
|
17923
18028
|
rng = dom.createRng();
|
@@ -18717,9 +18822,8 @@ define("tinymce/util/Class", [
|
|
18717
18822
|
* @class tinymce.ui.Selector
|
18718
18823
|
*/
|
18719
18824
|
define("tinymce/ui/Selector", [
|
18720
|
-
"tinymce/util/Class"
|
18721
|
-
|
18722
|
-
], function(Class, Tools) {
|
18825
|
+
"tinymce/util/Class"
|
18826
|
+
], function(Class) {
|
18723
18827
|
"use strict";
|
18724
18828
|
|
18725
18829
|
/**
|
@@ -18938,8 +19042,12 @@ define("tinymce/ui/Selector", [
|
|
18938
19042
|
// Find the index and length since a psuedo filter like :first needs it
|
18939
19043
|
if (filters.psuedo) {
|
18940
19044
|
siblings = item.parent().items();
|
18941
|
-
index =
|
18942
|
-
|
19045
|
+
index = length = siblings.length;
|
19046
|
+
while (index--) {
|
19047
|
+
if (siblings[index] === item) {
|
19048
|
+
break;
|
19049
|
+
}
|
19050
|
+
}
|
18943
19051
|
}
|
18944
19052
|
|
18945
19053
|
for (fi = 0, fl = filters.length; fi < fl; fi++) {
|
@@ -19609,7 +19717,8 @@ define("tinymce/ui/Control", [
|
|
19609
19717
|
|
19610
19718
|
var Control = Class.extend({
|
19611
19719
|
Statics: {
|
19612
|
-
controlIdLookup: {}
|
19720
|
+
controlIdLookup: {},
|
19721
|
+
elementIdCache: elementIdCache
|
19613
19722
|
},
|
19614
19723
|
|
19615
19724
|
isRtl: function() {
|
@@ -23108,7 +23217,7 @@ define("tinymce/ui/Window", [
|
|
23108
23217
|
* @method recalc
|
23109
23218
|
*/
|
23110
23219
|
recalc: function() {
|
23111
|
-
var self = this, statusbar = self.statusbar, layoutRect, width, needsRecalc;
|
23220
|
+
var self = this, statusbar = self.statusbar, layoutRect, width, x, needsRecalc;
|
23112
23221
|
|
23113
23222
|
if (self._fullscreen) {
|
23114
23223
|
self.layoutRect(DomUtils.getWindowSize());
|
@@ -23123,7 +23232,8 @@ define("tinymce/ui/Window", [
|
|
23123
23232
|
if (self.settings.title && !self._fullscreen) {
|
23124
23233
|
width = layoutRect.headerW;
|
23125
23234
|
if (width > layoutRect.w) {
|
23126
|
-
|
23235
|
+
x = layoutRect.x - Math.max(0, width / 2);
|
23236
|
+
self.layoutRect({w: width, x: x});
|
23127
23237
|
needsRecalc = true;
|
23128
23238
|
}
|
23129
23239
|
}
|
@@ -23134,7 +23244,8 @@ define("tinymce/ui/Window", [
|
|
23134
23244
|
|
23135
23245
|
width = statusbar.layoutRect().minW + layoutRect.deltaW;
|
23136
23246
|
if (width > layoutRect.w) {
|
23137
|
-
|
23247
|
+
x = layoutRect.x - Math.max(0, width - layoutRect.w);
|
23248
|
+
self.layoutRect({w: width, x: x});
|
23138
23249
|
needsRecalc = true;
|
23139
23250
|
}
|
23140
23251
|
}
|
@@ -25942,6 +26053,10 @@ define("tinymce/Editor", [
|
|
25942
26053
|
body.disabled = true;
|
25943
26054
|
|
25944
26055
|
if (!settings.readonly) {
|
26056
|
+
if (self.inline && DOM.getStyle(body, 'position', true) == 'static') {
|
26057
|
+
body.style.position = 'relative';
|
26058
|
+
}
|
26059
|
+
|
25945
26060
|
body.contentEditable = self.getParam('content_editable_state', true);
|
25946
26061
|
}
|
25947
26062
|
|
@@ -26228,7 +26343,7 @@ define("tinymce/Editor", [
|
|
26228
26343
|
body = self.getBody();
|
26229
26344
|
|
26230
26345
|
// Check for setActive since it doesn't scroll to the element
|
26231
|
-
if (body.setActive) {
|
26346
|
+
if (body.setActive && Env.ie < 11) {
|
26232
26347
|
body.setActive();
|
26233
26348
|
} else {
|
26234
26349
|
body.focus();
|
@@ -26903,13 +27018,9 @@ define("tinymce/Editor", [
|
|
26903
27018
|
|
26904
27019
|
// Check if forcedRootBlock is configured and that the block is a valid child of the body
|
26905
27020
|
if (forcedRootBlockName && self.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {
|
26906
|
-
|
26907
|
-
|
26908
|
-
|
26909
|
-
} else {
|
26910
|
-
content = '<' + forcedRootBlockName + '><br data-mce-bogus="1"></' + forcedRootBlockName + '>';
|
26911
|
-
}
|
26912
|
-
} else if (!ie) {
|
27021
|
+
content = ie && ie < 11 ? '' : '<br data-mce-bogus="1">';
|
27022
|
+
content = self.dom.createHTML(forcedRootBlockName, self.settings.forced_root_block_attrs, content);
|
27023
|
+
} else if (!ie || ie < 11) {
|
26913
27024
|
// We need to add a BR when forced_root_block is disabled on non IE browsers to place the caret
|
26914
27025
|
content = '<br data-mce-bogus="1">';
|
26915
27026
|
}
|
@@ -26941,22 +27052,6 @@ define("tinymce/Editor", [
|
|
26941
27052
|
}*/
|
26942
27053
|
}
|
26943
27054
|
|
26944
|
-
// Move selection to start of body if it's a after init setContent call
|
26945
|
-
// This prevents IE 7/8 from moving focus to empty editors
|
26946
|
-
if (!args.initial) {
|
26947
|
-
var dom = self.dom, selection = self.selection;
|
26948
|
-
|
26949
|
-
// IE can't have the caret inside <body><p>|</p></body> unless we do some magic
|
26950
|
-
if (ie < 11 && dom.isBlock(body.firstChild) && dom.isEmpty(body.firstChild)) {
|
26951
|
-
body.firstChild.appendChild(dom.doc.createTextNode('\u00a0'));
|
26952
|
-
selection.select(body.firstChild, true);
|
26953
|
-
dom.remove(body.firstChild.lastChild);
|
26954
|
-
} else {
|
26955
|
-
selection.select(body, true);
|
26956
|
-
selection.collapse(true);
|
26957
|
-
}
|
26958
|
-
}
|
26959
|
-
|
26960
27055
|
return args.content;
|
26961
27056
|
},
|
26962
27057
|
|
@@ -27610,6 +27705,10 @@ define("tinymce/FocusManager", [
|
|
27610
27705
|
}
|
27611
27706
|
});
|
27612
27707
|
|
27708
|
+
editor.on('setcontent', function() {
|
27709
|
+
lastRng = null;
|
27710
|
+
});
|
27711
|
+
|
27613
27712
|
// Remove last selection bookmark on mousedown see #6305
|
27614
27713
|
editor.on('mousedown', function() {
|
27615
27714
|
editor.selection.lastFocusBookmark = null;
|
@@ -27633,6 +27732,8 @@ define("tinymce/FocusManager", [
|
|
27633
27732
|
editor.focus(false);
|
27634
27733
|
editorManager.focusedEditor = editor;
|
27635
27734
|
}
|
27735
|
+
|
27736
|
+
lastRng = null;
|
27636
27737
|
});
|
27637
27738
|
|
27638
27739
|
editor.on('focusout', function() {
|
@@ -27724,7 +27825,7 @@ define("tinymce/EditorManager", [
|
|
27724
27825
|
* @property minorVersion
|
27725
27826
|
* @type String
|
27726
27827
|
*/
|
27727
|
-
minorVersion : '0.
|
27828
|
+
minorVersion : '0.10',
|
27728
27829
|
|
27729
27830
|
/**
|
27730
27831
|
* Release date of TinyMCE build.
|
@@ -27732,7 +27833,7 @@ define("tinymce/EditorManager", [
|
|
27732
27833
|
* @property releaseDate
|
27733
27834
|
* @type String
|
27734
27835
|
*/
|
27735
|
-
releaseDate: '2013-10-
|
27836
|
+
releaseDate: '2013-10-28',
|
27736
27837
|
|
27737
27838
|
/**
|
27738
27839
|
* Collection of editor instances.
|
@@ -28770,10 +28871,23 @@ define("tinymce/util/LocalStorage", [], function() {
|
|
28770
28871
|
data = storageElm.getAttribute(userDataKey) || '';
|
28771
28872
|
|
28772
28873
|
do {
|
28773
|
-
|
28874
|
+
var offset = next();
|
28875
|
+
if (offset === null) {
|
28876
|
+
break;
|
28877
|
+
}
|
28878
|
+
|
28879
|
+
key = next(parseInt(offset, 32) || 0);
|
28774
28880
|
if (key !== null) {
|
28775
|
-
|
28776
|
-
|
28881
|
+
offset = next();
|
28882
|
+
if (offset === null) {
|
28883
|
+
break;
|
28884
|
+
}
|
28885
|
+
|
28886
|
+
value = next(parseInt(offset, 32) || 0);
|
28887
|
+
|
28888
|
+
if (key) {
|
28889
|
+
items[key] = value;
|
28890
|
+
}
|
28777
28891
|
}
|
28778
28892
|
} while (key !== null);
|
28779
28893
|
|
@@ -28797,7 +28911,13 @@ define("tinymce/util/LocalStorage", [], function() {
|
|
28797
28911
|
}
|
28798
28912
|
|
28799
28913
|
storageElm.setAttribute(userDataKey, data);
|
28800
|
-
|
28914
|
+
|
28915
|
+
try {
|
28916
|
+
storageElm.save(userDataKey);
|
28917
|
+
} catch (ex) {
|
28918
|
+
// Ignore disk full
|
28919
|
+
}
|
28920
|
+
|
28801
28921
|
updateKeys();
|
28802
28922
|
}
|
28803
28923
|
|
@@ -30313,8 +30433,18 @@ define("tinymce/ui/ElementPath", [
|
|
30313
30433
|
postRender: function() {
|
30314
30434
|
var self = this, editor = EditorManager.activeEditor;
|
30315
30435
|
|
30316
|
-
function
|
30317
|
-
|
30436
|
+
function isHidden(elm) {
|
30437
|
+
if (elm.nodeType === 1) {
|
30438
|
+
if (elm.nodeName == "BR" || !!elm.getAttribute('data-mce-bogus')) {
|
30439
|
+
return true;
|
30440
|
+
}
|
30441
|
+
|
30442
|
+
if (elm.getAttribute('data-mce-type') === 'bookmark') {
|
30443
|
+
return true;
|
30444
|
+
}
|
30445
|
+
}
|
30446
|
+
|
30447
|
+
return false;
|
30318
30448
|
}
|
30319
30449
|
|
30320
30450
|
self.on('select', function(e) {
|
@@ -30324,7 +30454,7 @@ define("tinymce/ui/ElementPath", [
|
|
30324
30454
|
|
30325
30455
|
node = editor.selection.getStart();
|
30326
30456
|
while (node && node != body) {
|
30327
|
-
if (!
|
30457
|
+
if (!isHidden(node)) {
|
30328
30458
|
parents.push(node);
|
30329
30459
|
}
|
30330
30460
|
|
@@ -30339,7 +30469,7 @@ define("tinymce/ui/ElementPath", [
|
|
30339
30469
|
var parents = [], selectionParents = e.parents, i = selectionParents.length;
|
30340
30470
|
|
30341
30471
|
while (i--) {
|
30342
|
-
if (selectionParents[i].nodeType == 1 && !
|
30472
|
+
if (selectionParents[i].nodeType == 1 && !isHidden(selectionParents[i])) {
|
30343
30473
|
var args = editor.fire('ResolveName', {
|
30344
30474
|
name: selectionParents[i].nodeName.toLowerCase(),
|
30345
30475
|
target: selectionParents[i]
|
@@ -31872,7 +32002,7 @@ define("tinymce/ui/GridLayout", [
|
|
31872
32002
|
// Get control settings and calculate x, y
|
31873
32003
|
ctrlSettings = ctrl.settings;
|
31874
32004
|
ctrlLayoutRect = ctrl.layoutRect();
|
31875
|
-
width = colWidths[x];
|
32005
|
+
width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);
|
31876
32006
|
alignX = alignY = 0;
|
31877
32007
|
ctrlLayoutRect.x = posX;
|
31878
32008
|
ctrlLayoutRect.y = posY;
|
@@ -32760,6 +32890,7 @@ define("tinymce/ui/MenuItem", [
|
|
32760
32890
|
);
|
32761
32891
|
|
32762
32892
|
menu.moveRel(self.getEl(), rel);
|
32893
|
+
menu.rel = rel;
|
32763
32894
|
|
32764
32895
|
rel = 'menu-sub-' + rel;
|
32765
32896
|
menu.removeClass(menu._lastRel);
|
@@ -33203,7 +33334,7 @@ define("tinymce/ui/SplitButton", [
|
|
33203
33334
|
* @method repaint
|
33204
33335
|
*/
|
33205
33336
|
repaint: function() {
|
33206
|
-
var self = this, elm = self.getEl(), rect = self.layoutRect(), mainButtonElm, menuButtonElm
|
33337
|
+
var self = this, elm = self.getEl(), rect = self.layoutRect(), mainButtonElm, menuButtonElm;
|
33207
33338
|
|
33208
33339
|
self._super();
|
33209
33340
|
|
@@ -33219,12 +33350,6 @@ define("tinymce/ui/SplitButton", [
|
|
33219
33350
|
height: rect.h - 2
|
33220
33351
|
});
|
33221
33352
|
|
33222
|
-
btnStyle = mainButtonElm.firstChild.style;
|
33223
|
-
btnStyle.width = btnStyle.height = "100%";
|
33224
|
-
|
33225
|
-
btnStyle = menuButtonElm.firstChild.style;
|
33226
|
-
btnStyle.width = btnStyle.height = "100%";
|
33227
|
-
|
33228
33353
|
return self;
|
33229
33354
|
},
|
33230
33355
|
|