tinymce-rails 4.1.2 → 4.1.3
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 +293 -175
- data/app/assets/source/tinymce/tinymce.js +293 -175
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/autosave/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/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/tinymce.jquery.js +10 -10
- data/vendor/assets/javascripts/tinymce/tinymce.js +11 -11
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b10bebdbdb38594580eae5b6efb7779ccbf7d90
|
4
|
+
data.tar.gz: 8f272bf38e6f925f8b7f661e78bd94322fbd5146
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6c327d32ff8d7a2e7ab86f87870a35d46359a31bcfa4244e106f17ab3903e43dc50c24dc9937b3e7edd6b7ca4bf44784c9b8ae8c7ea76481d1689d1f6ed8e28
|
7
|
+
data.tar.gz: 46b11c4ac4f498ce446b35b9763f514fc693d36a5753415af8accc2008079e161bb84c508a1a3af0499891f1d1d3d6244c95855d200d58f80e47e5c7fc62011b
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.1.
|
1
|
+
// 4.1.3 (2014-07-29)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -454,6 +454,7 @@ define("tinymce/dom/EventUtils", [], function() {
|
|
454
454
|
events[id][name] = callbackList = [{func: callback, scope: scope}];
|
455
455
|
callbackList.fakeName = fakeName;
|
456
456
|
callbackList.capture = capture;
|
457
|
+
//callbackList.callback = callback;
|
457
458
|
|
458
459
|
// Add the nativeHandler to the callback list so that we can later unbind it
|
459
460
|
callbackList.nativeHandler = nativeHandler;
|
@@ -1450,7 +1451,7 @@ define("tinymce/dom/DomQuery", [
|
|
1450
1451
|
'readonly': 'readOnly'
|
1451
1452
|
};
|
1452
1453
|
var cssFix = {
|
1453
|
-
float: 'cssFloat'
|
1454
|
+
'float': 'cssFloat'
|
1454
1455
|
};
|
1455
1456
|
|
1456
1457
|
var attrHooks = {}, cssHooks = {};
|
@@ -2778,7 +2779,7 @@ define("tinymce/dom/DomQuery", [
|
|
2778
2779
|
DomQuery.overrideDefaults = function(callback) {
|
2779
2780
|
var defaults;
|
2780
2781
|
|
2781
|
-
function
|
2782
|
+
function sub(selector, context) {
|
2782
2783
|
defaults = defaults || callback();
|
2783
2784
|
|
2784
2785
|
if (arguments.length === 0) {
|
@@ -2789,12 +2790,12 @@ define("tinymce/dom/DomQuery", [
|
|
2789
2790
|
context = defaults.context;
|
2790
2791
|
}
|
2791
2792
|
|
2792
|
-
return new
|
2793
|
+
return new sub.fn.init(selector, context);
|
2793
2794
|
}
|
2794
2795
|
|
2795
|
-
DomQuery.extend(
|
2796
|
+
DomQuery.extend(sub, this);
|
2796
2797
|
|
2797
|
-
return
|
2798
|
+
return sub;
|
2798
2799
|
};
|
2799
2800
|
|
2800
2801
|
function appendHooks(targetHooks, prop, hooks) {
|
@@ -2853,7 +2854,9 @@ define("tinymce/dom/DomQuery", [
|
|
2853
2854
|
}
|
2854
2855
|
|
2855
2856
|
if (Env.ie && Env.ie < 9) {
|
2856
|
-
|
2857
|
+
/*jshint sub:true */
|
2858
|
+
/*eslint dot-notation: 0*/
|
2859
|
+
cssFix['float'] = 'styleFloat';
|
2857
2860
|
|
2858
2861
|
appendHooks(cssHooks, 'set', {
|
2859
2862
|
opacity: function(elm, value) {
|
@@ -5304,6 +5307,10 @@ define("tinymce/dom/DOMUtils", [
|
|
5304
5307
|
elm = self.$$(elm);
|
5305
5308
|
originalValue = elm.attr(name);
|
5306
5309
|
|
5310
|
+
if (!elm.length) {
|
5311
|
+
return;
|
5312
|
+
}
|
5313
|
+
|
5307
5314
|
hook = self.attrHooks[name];
|
5308
5315
|
if (hook && hook.set) {
|
5309
5316
|
hook.set(elm, value, name);
|
@@ -5357,11 +5364,14 @@ define("tinymce/dom/DOMUtils", [
|
|
5357
5364
|
|
5358
5365
|
elm = self.$$(elm);
|
5359
5366
|
|
5360
|
-
|
5361
|
-
|
5362
|
-
|
5363
|
-
|
5364
|
-
|
5367
|
+
if (elm.length) {
|
5368
|
+
hook = self.attrHooks[name];
|
5369
|
+
|
5370
|
+
if (hook && hook.get) {
|
5371
|
+
value = hook.get(elm, name);
|
5372
|
+
} else {
|
5373
|
+
value = elm.attr(name);
|
5374
|
+
}
|
5365
5375
|
}
|
5366
5376
|
|
5367
5377
|
if (typeof value == 'undefined') {
|
@@ -5380,21 +5390,22 @@ define("tinymce/dom/DOMUtils", [
|
|
5380
5390
|
* @return {object} Absolute position of the specified element object with x, y fields.
|
5381
5391
|
*/
|
5382
5392
|
getPos: function(elm, rootElm) {
|
5383
|
-
var self = this, x = 0, y = 0, offsetParent, doc = self.doc, pos;
|
5393
|
+
var self = this, x = 0, y = 0, offsetParent, doc = self.doc, body = doc.body, pos;
|
5384
5394
|
|
5385
5395
|
elm = self.get(elm);
|
5386
|
-
rootElm = rootElm ||
|
5396
|
+
rootElm = rootElm || body;
|
5387
5397
|
|
5388
5398
|
if (elm) {
|
5389
5399
|
// Use getBoundingClientRect if it exists since it's faster than looping offset nodes
|
5390
|
-
if
|
5400
|
+
// Fallback to offsetParent calculations if the body isn't static better since it stops at the body root
|
5401
|
+
if (rootElm === body && elm.getBoundingClientRect && $(body).css('position') === 'static') {
|
5391
5402
|
pos = elm.getBoundingClientRect();
|
5392
|
-
rootElm = self.boxModel ? doc.documentElement :
|
5403
|
+
rootElm = self.boxModel ? doc.documentElement : body;
|
5393
5404
|
|
5394
5405
|
// Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit
|
5395
5406
|
// Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position
|
5396
|
-
x = pos.left + (doc.documentElement.scrollLeft ||
|
5397
|
-
y = pos.top + (doc.documentElement.scrollTop ||
|
5407
|
+
x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - rootElm.clientLeft;
|
5408
|
+
y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - rootElm.clientTop;
|
5398
5409
|
|
5399
5410
|
return {x: x, y: y};
|
5400
5411
|
}
|
@@ -7465,7 +7476,7 @@ define("tinymce/NodeChange", [
|
|
7465
7476
|
|
7466
7477
|
// Gecko doesn't support the "selectionchange" event
|
7467
7478
|
if (!('onselectionchange' in editor.getDoc())) {
|
7468
|
-
editor.on('NodeChange Click MouseUp KeyUp', function(e) {
|
7479
|
+
editor.on('NodeChange Click MouseUp KeyUp Focus', function(e) {
|
7469
7480
|
var nativeRng, fakeRng;
|
7470
7481
|
|
7471
7482
|
// Since DOM Ranges mutate on modification
|
@@ -7495,7 +7506,7 @@ define("tinymce/NodeChange", [
|
|
7495
7506
|
});
|
7496
7507
|
|
7497
7508
|
editor.on('SelectionChange', function() {
|
7498
|
-
var startElm = editor.selection.getStart();
|
7509
|
+
var startElm = editor.selection.getStart(true);
|
7499
7510
|
|
7500
7511
|
// Selection change might fire when focus is lost so check if the start is still within the body
|
7501
7512
|
if (!isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {
|
@@ -7503,6 +7514,13 @@ define("tinymce/NodeChange", [
|
|
7503
7514
|
}
|
7504
7515
|
});
|
7505
7516
|
|
7517
|
+
// Fire an extra nodeChange on mouseup for compatibility reasons
|
7518
|
+
editor.on('MouseUp', function(e) {
|
7519
|
+
if (!e.isDefaultPrevented()) {
|
7520
|
+
editor.nodeChanged();
|
7521
|
+
}
|
7522
|
+
});
|
7523
|
+
|
7506
7524
|
/**
|
7507
7525
|
* Distpaches out a onNodeChange event to all observers. This method should be called when you
|
7508
7526
|
* need to update the UI states or element path etc.
|
@@ -8073,7 +8091,7 @@ define("tinymce/html/Node", [], function() {
|
|
8073
8091
|
define("tinymce/html/Schema", [
|
8074
8092
|
"tinymce/util/Tools"
|
8075
8093
|
], function(Tools) {
|
8076
|
-
var mapCache = {};
|
8094
|
+
var mapCache = {}, dummyObj = {};
|
8077
8095
|
var makeMap = Tools.makeMap, each = Tools.each, extend = Tools.extend, explode = Tools.explode, inArray = Tools.inArray;
|
8078
8096
|
|
8079
8097
|
function split(items, delim) {
|
@@ -8094,11 +8112,11 @@ define("tinymce/html/Schema", [
|
|
8094
8112
|
function add(name, attributes, children) {
|
8095
8113
|
var ni, i, attributesOrder, args = arguments;
|
8096
8114
|
|
8097
|
-
function arrayToMap(array) {
|
8115
|
+
function arrayToMap(array, obj) {
|
8098
8116
|
var map = {}, i, l;
|
8099
8117
|
|
8100
8118
|
for (i = 0, l = array.length; i < l; i++) {
|
8101
|
-
map[array[i]] = {};
|
8119
|
+
map[array[i]] = obj || {};
|
8102
8120
|
}
|
8103
8121
|
|
8104
8122
|
return map;
|
@@ -8127,7 +8145,7 @@ define("tinymce/html/Schema", [
|
|
8127
8145
|
schema[name[ni]] = {
|
8128
8146
|
attributes: arrayToMap(attributesOrder),
|
8129
8147
|
attributesOrder: attributesOrder,
|
8130
|
-
children: arrayToMap(children)
|
8148
|
+
children: arrayToMap(children, dummyObj)
|
8131
8149
|
};
|
8132
8150
|
}
|
8133
8151
|
}
|
@@ -11850,6 +11868,7 @@ define("tinymce/dom/ControlSelection", [
|
|
11850
11868
|
}
|
11851
11869
|
|
11852
11870
|
editor.fire('ObjectResized', {target: selectedElm, width: width, height: height});
|
11871
|
+
dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));
|
11853
11872
|
editor.nodeChanged();
|
11854
11873
|
}
|
11855
11874
|
|
@@ -11997,7 +12016,7 @@ define("tinymce/dom/ControlSelection", [
|
|
11997
12016
|
}
|
11998
12017
|
|
11999
12018
|
function updateResizeRect(e) {
|
12000
|
-
var controlElm;
|
12019
|
+
var startElm, controlElm;
|
12001
12020
|
|
12002
12021
|
function isChildOrEqual(node, parent) {
|
12003
12022
|
if (node) {
|
@@ -12019,9 +12038,10 @@ define("tinymce/dom/ControlSelection", [
|
|
12019
12038
|
|
12020
12039
|
if (isChildOrEqual(controlElm, rootElement)) {
|
12021
12040
|
disableGeckoResize();
|
12041
|
+
startElm = selection.getStart(true);
|
12022
12042
|
|
12023
|
-
if (isChildOrEqual(
|
12024
|
-
if (!isIE || (controlElm !=
|
12043
|
+
if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {
|
12044
|
+
if (!isIE || (controlElm != startElm && startElm.nodeName !== 'IMG')) {
|
12025
12045
|
showResizeRect(controlElm);
|
12026
12046
|
return;
|
12027
12047
|
}
|
@@ -12181,7 +12201,7 @@ define("tinymce/dom/ControlSelection", [
|
|
12181
12201
|
}
|
12182
12202
|
}
|
12183
12203
|
|
12184
|
-
editor.on('nodechange
|
12204
|
+
editor.on('nodechange ResizeEditor', updateResizeRect);
|
12185
12205
|
|
12186
12206
|
// Update resize rect while typing in a table
|
12187
12207
|
editor.on('keydown keyup', function(e) {
|
@@ -12853,9 +12873,10 @@ define("tinymce/dom/Selection", [
|
|
12853
12873
|
* node the parent element will be returned.
|
12854
12874
|
*
|
12855
12875
|
* @method getStart
|
12876
|
+
* @param {Boolean} real Optional state to get the real parent when the selection is collapsed not the closest element.
|
12856
12877
|
* @return {Element} Start element of selection range.
|
12857
12878
|
*/
|
12858
|
-
getStart: function() {
|
12879
|
+
getStart: function(real) {
|
12859
12880
|
var self = this, rng = self.getRng(), startElement, parentElement, checkRng, node;
|
12860
12881
|
|
12861
12882
|
if (rng.duplicate || rng.item) {
|
@@ -12887,7 +12908,9 @@ define("tinymce/dom/Selection", [
|
|
12887
12908
|
startElement = rng.startContainer;
|
12888
12909
|
|
12889
12910
|
if (startElement.nodeType == 1 && startElement.hasChildNodes()) {
|
12890
|
-
|
12911
|
+
if (!real || !rng.collapsed) {
|
12912
|
+
startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];
|
12913
|
+
}
|
12891
12914
|
}
|
12892
12915
|
|
12893
12916
|
if (startElement && startElement.nodeType == 3) {
|
@@ -12903,9 +12926,10 @@ define("tinymce/dom/Selection", [
|
|
12903
12926
|
* node the parent element will be returned.
|
12904
12927
|
*
|
12905
12928
|
* @method getEnd
|
12929
|
+
* @param {Boolean} real Optional state to get the real parent when the selection is collapsed not the closest element.
|
12906
12930
|
* @return {Element} End element of selection range.
|
12907
12931
|
*/
|
12908
|
-
getEnd: function() {
|
12932
|
+
getEnd: function(real) {
|
12909
12933
|
var self = this, rng = self.getRng(), endElement, endOffset;
|
12910
12934
|
|
12911
12935
|
if (rng.duplicate || rng.item) {
|
@@ -12930,7 +12954,9 @@ define("tinymce/dom/Selection", [
|
|
12930
12954
|
endOffset = rng.endOffset;
|
12931
12955
|
|
12932
12956
|
if (endElement.nodeType == 1 && endElement.hasChildNodes()) {
|
12933
|
-
|
12957
|
+
if (!real || !rng.collapsed) {
|
12958
|
+
endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset];
|
12959
|
+
}
|
12934
12960
|
}
|
12935
12961
|
|
12936
12962
|
if (endElement && endElement.nodeType == 3) {
|
@@ -13522,8 +13548,8 @@ define("tinymce/dom/Selection", [
|
|
13522
13548
|
return;
|
13523
13549
|
}
|
13524
13550
|
|
13525
|
-
// BR/IMG/INPUT elements
|
13526
|
-
if (nonEmptyElementsMap[node.nodeName]) {
|
13551
|
+
// BR/IMG/INPUT elements but not table cells
|
13552
|
+
if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {
|
13527
13553
|
if (start) {
|
13528
13554
|
rng.setStartBefore(node);
|
13529
13555
|
} else {
|
@@ -13979,8 +14005,8 @@ define("tinymce/Formatter", [
|
|
13979
14005
|
{inline: 'strike', remove: 'all'}
|
13980
14006
|
],
|
13981
14007
|
|
13982
|
-
forecolor: {inline: 'span', styles: {color: '%value'},
|
13983
|
-
hilitecolor: {inline: 'span', styles: {backgroundColor: '%value'},
|
14008
|
+
forecolor: {inline: 'span', styles: {color: '%value'}, links: true, remove_similar: true},
|
14009
|
+
hilitecolor: {inline: 'span', styles: {backgroundColor: '%value'}, links: true, remove_similar: true},
|
13984
14010
|
fontname: {inline: 'span', styles: {fontFamily: '%value'}},
|
13985
14011
|
fontsize: {inline: 'span', styles: {fontSize: '%value'}},
|
13986
14012
|
fontsize_class: {inline: 'span', attributes: {'class': '%value'}},
|
@@ -14316,22 +14342,12 @@ define("tinymce/Formatter", [
|
|
14316
14342
|
each(nodes, process);
|
14317
14343
|
});
|
14318
14344
|
|
14319
|
-
//
|
14320
|
-
if (format.
|
14345
|
+
// Apply formats to links as well to get the color of the underline to change as well
|
14346
|
+
if (format.links === true) {
|
14321
14347
|
each(newWrappers, function(node) {
|
14322
14348
|
function process(node) {
|
14323
|
-
var i, currentWrapElm, children;
|
14324
|
-
|
14325
14349
|
if (node.nodeName === 'A') {
|
14326
|
-
|
14327
|
-
newWrappers.push(currentWrapElm);
|
14328
|
-
|
14329
|
-
children = grep(node.childNodes);
|
14330
|
-
for (i = 0; i < children.length; i++) {
|
14331
|
-
currentWrapElm.appendChild(children[i]);
|
14332
|
-
}
|
14333
|
-
|
14334
|
-
node.appendChild(currentWrapElm);
|
14350
|
+
setElementFormat(node, format);
|
14335
14351
|
}
|
14336
14352
|
|
14337
14353
|
each(grep(node.childNodes), process);
|
@@ -14401,24 +14417,10 @@ define("tinymce/Formatter", [
|
|
14401
14417
|
// this: <span style="color:red"><b><span style="color:red; font-size:10px">text</span></b></span>
|
14402
14418
|
// will become: <span style="color:red"><b><span style="font-size:10px">text</span></b></span>
|
14403
14419
|
each(dom.select(format.inline, node), function(child) {
|
14404
|
-
var parent;
|
14405
|
-
|
14406
14420
|
if (isBookmarkNode(child)) {
|
14407
14421
|
return;
|
14408
14422
|
}
|
14409
14423
|
|
14410
|
-
// When wrap_links is set to false we don't want
|
14411
|
-
// to remove the format on children within links
|
14412
|
-
if (format.wrap_links === false) {
|
14413
|
-
parent = child.parentNode;
|
14414
|
-
|
14415
|
-
do {
|
14416
|
-
if (parent.nodeName === 'A') {
|
14417
|
-
return;
|
14418
|
-
}
|
14419
|
-
} while ((parent = parent.parentNode));
|
14420
|
-
}
|
14421
|
-
|
14422
14424
|
removeFormat(format, vars, child, format.exact ? child : null);
|
14423
14425
|
});
|
14424
14426
|
});
|
@@ -14960,7 +14962,7 @@ define("tinymce/Formatter", [
|
|
14960
14962
|
|
14961
14963
|
// Ignore bogus nodes like the <a> tag created by moveStart()
|
14962
14964
|
parents = Tools.grep(parents, function(node) {
|
14963
|
-
return !node.getAttribute('data-mce-bogus');
|
14965
|
+
return node.nodeType == 1 && !node.getAttribute('data-mce-bogus');
|
14964
14966
|
});
|
14965
14967
|
|
14966
14968
|
// Check for new formats
|
@@ -15040,8 +15042,8 @@ define("tinymce/Formatter", [
|
|
15040
15042
|
// Initialize
|
15041
15043
|
defaultFormats();
|
15042
15044
|
addKeyboardShortcuts();
|
15043
|
-
ed.on('BeforeGetContent', function() {
|
15044
|
-
if (markCaretContainersBogus) {
|
15045
|
+
ed.on('BeforeGetContent', function(e) {
|
15046
|
+
if (markCaretContainersBogus && e.format != 'raw') {
|
15045
15047
|
markCaretContainersBogus();
|
15046
15048
|
}
|
15047
15049
|
});
|
@@ -15531,6 +15533,10 @@ define("tinymce/Formatter", [
|
|
15531
15533
|
};
|
15532
15534
|
}
|
15533
15535
|
|
15536
|
+
function isColorFormatAndAnchor(node, format) {
|
15537
|
+
return format.links && node.tagName == 'A';
|
15538
|
+
}
|
15539
|
+
|
15534
15540
|
/**
|
15535
15541
|
* Removes the specified format for the specified node. It will also remove the node if it doesn't have
|
15536
15542
|
* any attributes if the format specifies it to do so.
|
@@ -15546,7 +15552,7 @@ define("tinymce/Formatter", [
|
|
15546
15552
|
var i, attrs, stylesModified;
|
15547
15553
|
|
15548
15554
|
// Check if node matches format
|
15549
|
-
if (!matchName(node, format)) {
|
15555
|
+
if (!matchName(node, format) && !isColorFormatAndAnchor(node, format)) {
|
15550
15556
|
return FALSE;
|
15551
15557
|
}
|
15552
15558
|
|
@@ -18759,7 +18765,7 @@ define("tinymce/util/EventDispatcher", [
|
|
18759
18765
|
"focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange " +
|
18760
18766
|
"mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover " +
|
18761
18767
|
"draggesture dragdrop drop drag submit " +
|
18762
|
-
"compositionstart compositionend compositionupdate",
|
18768
|
+
"compositionstart compositionend compositionupdate touchstart touchend",
|
18763
18769
|
' '
|
18764
18770
|
);
|
18765
18771
|
|
@@ -19953,7 +19959,6 @@ define("tinymce/ui/Control", [
|
|
19953
19959
|
], function(Class, Tools, EventDispatcher, Collection, DomUtils) {
|
19954
19960
|
"use strict";
|
19955
19961
|
|
19956
|
-
var elementIdCache = {};
|
19957
19962
|
var hasMouseWheelEventSupport = "onmousewheel" in document;
|
19958
19963
|
var hasWheelEventSupport = false;
|
19959
19964
|
var classPrefix = "mce-";
|
@@ -19983,7 +19988,6 @@ define("tinymce/ui/Control", [
|
|
19983
19988
|
|
19984
19989
|
var Control = Class.extend({
|
19985
19990
|
Statics: {
|
19986
|
-
elementIdCache: elementIdCache,
|
19987
19991
|
classPrefix: classPrefix
|
19988
19992
|
},
|
19989
19993
|
|
@@ -20026,6 +20030,7 @@ define("tinymce/ui/Control", [
|
|
20026
20030
|
self._text = self._name = '';
|
20027
20031
|
self._width = self._height = 0;
|
20028
20032
|
self._aria = {role: settings.role};
|
20033
|
+
this._elmCache = {};
|
20029
20034
|
|
20030
20035
|
// Setup classes
|
20031
20036
|
classes = settings.classes;
|
@@ -20767,15 +20772,16 @@ define("tinymce/ui/Control", [
|
|
20767
20772
|
*
|
20768
20773
|
* @method getEl
|
20769
20774
|
* @param {String} [suffix] Suffix to get element by.
|
20770
|
-
* @param {Boolean} [dropCache] True if the cache for the element should be dropped.
|
20771
20775
|
* @return {Element} HTML DOM element for the current control or it's children.
|
20772
20776
|
*/
|
20773
|
-
getEl: function(suffix
|
20774
|
-
var
|
20777
|
+
getEl: function(suffix) {
|
20778
|
+
var id = suffix ? this._id + '-' + suffix : this._id;
|
20775
20779
|
|
20776
|
-
|
20780
|
+
if (!this._elmCache[id]) {
|
20781
|
+
this._elmCache[id] = DomUtils.get(id);
|
20782
|
+
}
|
20777
20783
|
|
20778
|
-
return
|
20784
|
+
return this._elmCache[id];
|
20779
20785
|
},
|
20780
20786
|
|
20781
20787
|
/**
|
@@ -20986,16 +20992,7 @@ define("tinymce/ui/Control", [
|
|
20986
20992
|
delete lookup[self._id];
|
20987
20993
|
}
|
20988
20994
|
|
20989
|
-
delete elementIdCache[self._id];
|
20990
|
-
|
20991
20995
|
if (elm && elm.parentNode) {
|
20992
|
-
var nodes = elm.getElementsByTagName('*');
|
20993
|
-
|
20994
|
-
i = nodes.length;
|
20995
|
-
while (i--) {
|
20996
|
-
delete elementIdCache[nodes[i].id];
|
20997
|
-
}
|
20998
|
-
|
20999
20996
|
elm.parentNode.removeChild(elm);
|
21000
20997
|
}
|
21001
20998
|
|
@@ -23148,8 +23145,15 @@ define("tinymce/ui/FloatPanel", [
|
|
23148
23145
|
|
23149
23146
|
function bindWindowResizeHandler() {
|
23150
23147
|
if (!windowResizeHandler) {
|
23148
|
+
var docElm = document.documentElement, clientWidth = docElm.clientWidth, clientHeight = docElm.clientHeight;
|
23149
|
+
|
23151
23150
|
windowResizeHandler = function() {
|
23152
|
-
|
23151
|
+
// Workaround for #7065 IE 7 fires resize events event though the window wasn't resized
|
23152
|
+
if (!document.all || clientWidth != docElm.clientWidth || clientHeight != docElm.clientHeight) {
|
23153
|
+
clientWidth = docElm.clientWidth;
|
23154
|
+
clientHeight = docElm.clientHeight;
|
23155
|
+
FloatPanel.hideAll();
|
23156
|
+
}
|
23153
23157
|
};
|
23154
23158
|
|
23155
23159
|
DomUtils.on(window, 'resize', windowResizeHandler);
|
@@ -24095,6 +24099,14 @@ define("tinymce/WindowManager", [
|
|
24095
24099
|
|
24096
24100
|
self.windows = windows;
|
24097
24101
|
|
24102
|
+
editor.on('remove', function() {
|
24103
|
+
var i = windows.length;
|
24104
|
+
|
24105
|
+
while (i--) {
|
24106
|
+
windows[i].close();
|
24107
|
+
}
|
24108
|
+
});
|
24109
|
+
|
24098
24110
|
/**
|
24099
24111
|
* Opens a new window.
|
24100
24112
|
*
|
@@ -24421,7 +24433,7 @@ define("tinymce/util/Quirks", [
|
|
24421
24433
|
|
24422
24434
|
// Make sure all elements has a data-mce-style attribute
|
24423
24435
|
if (!elm.hasAttribute('data-mce-style') && elm.hasAttribute('style')) {
|
24424
|
-
editor.dom.setAttrib(elm, 'style',
|
24436
|
+
editor.dom.setAttrib(elm, 'style', editor.dom.getAttrib(elm, 'style'));
|
24425
24437
|
}
|
24426
24438
|
});
|
24427
24439
|
|
@@ -24843,35 +24855,6 @@ define("tinymce/util/Quirks", [
|
|
24843
24855
|
});
|
24844
24856
|
}
|
24845
24857
|
|
24846
|
-
/**
|
24847
|
-
* Fire a nodeChanged when the selection is changed on WebKit this fixes selection issues on iOS5. It only fires the nodeChange
|
24848
|
-
* event every 50ms since it would other wise update the UI when you type and it hogs the CPU.
|
24849
|
-
*/
|
24850
|
-
function selectionChangeNodeChanged() {
|
24851
|
-
var lastRng, selectionTimer;
|
24852
|
-
|
24853
|
-
editor.on('selectionchange', function() {
|
24854
|
-
if (selectionTimer) {
|
24855
|
-
clearTimeout(selectionTimer);
|
24856
|
-
selectionTimer = 0;
|
24857
|
-
}
|
24858
|
-
|
24859
|
-
selectionTimer = window.setTimeout(function() {
|
24860
|
-
if (editor.removed) {
|
24861
|
-
return;
|
24862
|
-
}
|
24863
|
-
|
24864
|
-
var rng = selection.getRng();
|
24865
|
-
|
24866
|
-
// Compare the ranges to see if it was a real change or not
|
24867
|
-
if (!lastRng || !RangeUtils.compareRanges(rng, lastRng)) {
|
24868
|
-
editor.nodeChanged();
|
24869
|
-
lastRng = rng;
|
24870
|
-
}
|
24871
|
-
}, 50);
|
24872
|
-
});
|
24873
|
-
}
|
24874
|
-
|
24875
24858
|
/**
|
24876
24859
|
* Screen readers on IE needs to have the role application set on the body.
|
24877
24860
|
*/
|
@@ -25398,6 +25381,53 @@ define("tinymce/util/Quirks", [
|
|
25398
25381
|
editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');
|
25399
25382
|
}
|
25400
25383
|
|
25384
|
+
/**
|
25385
|
+
* iOS Safari and possible other browsers have a bug where it won't fire
|
25386
|
+
* a click event when a contentEditable is focused. This function fakes click events
|
25387
|
+
* by using touchstart/touchend and measuring the time and distance travelled.
|
25388
|
+
*/
|
25389
|
+
function touchClickEvent() {
|
25390
|
+
editor.on('touchstart', function(e) {
|
25391
|
+
var elm, time, startTouch, changedTouches;
|
25392
|
+
|
25393
|
+
elm = e.target;
|
25394
|
+
time = new Date().getTime();
|
25395
|
+
changedTouches = e.changedTouches;
|
25396
|
+
|
25397
|
+
if (!changedTouches || changedTouches.length > 1) {
|
25398
|
+
return;
|
25399
|
+
}
|
25400
|
+
|
25401
|
+
startTouch = changedTouches[0];
|
25402
|
+
|
25403
|
+
editor.once('touchend', function(e) {
|
25404
|
+
var endTouch = e.changedTouches[0], args;
|
25405
|
+
|
25406
|
+
if (new Date().getTime() - time > 500) {
|
25407
|
+
return;
|
25408
|
+
}
|
25409
|
+
|
25410
|
+
if (Math.abs(startTouch.clientX - endTouch.clientX) > 5) {
|
25411
|
+
return;
|
25412
|
+
}
|
25413
|
+
|
25414
|
+
if (Math.abs(startTouch.clientY - endTouch.clientY) > 5) {
|
25415
|
+
return;
|
25416
|
+
}
|
25417
|
+
|
25418
|
+
args = {
|
25419
|
+
target: elm
|
25420
|
+
};
|
25421
|
+
|
25422
|
+
each('pageX pageY clientX clientY screenX screenY'.split(' '), function(key) {
|
25423
|
+
args[key] = endTouch[key];
|
25424
|
+
});
|
25425
|
+
|
25426
|
+
args = editor.fire('click', args);
|
25427
|
+
});
|
25428
|
+
});
|
25429
|
+
}
|
25430
|
+
|
25401
25431
|
/**
|
25402
25432
|
* WebKit has a bug where it will allow forms to be submitted if they are inside a contentEditable element.
|
25403
25433
|
* For example this: <form><button></form>
|
@@ -25444,10 +25474,10 @@ define("tinymce/util/Quirks", [
|
|
25444
25474
|
blockFormSubmitInsideEditor();
|
25445
25475
|
disableBackspaceIntoATable();
|
25446
25476
|
removeAppleInterchangeBrs();
|
25477
|
+
touchClickEvent();
|
25447
25478
|
|
25448
25479
|
// iOS
|
25449
25480
|
if (Env.iOS) {
|
25450
|
-
selectionChangeNodeChanged();
|
25451
25481
|
restoreFocusOnKeyDown();
|
25452
25482
|
bodyHeight();
|
25453
25483
|
tapLinksAndImages();
|
@@ -25649,8 +25679,18 @@ define("tinymce/EditorObservable", [
|
|
25649
25679
|
"tinymce/dom/DOMUtils",
|
25650
25680
|
"tinymce/util/Tools"
|
25651
25681
|
], function(Observable, DOMUtils, Tools) {
|
25652
|
-
var DOM = DOMUtils.DOM;
|
25682
|
+
var DOM = DOMUtils.DOM, customEventRootDelegates;
|
25653
25683
|
|
25684
|
+
/**
|
25685
|
+
* Returns the event target so for the specified event. Some events fire
|
25686
|
+
* only on document, some fire on documentElement etc. This also handles the
|
25687
|
+
* custom event root setting where it returns that element instead of the body.
|
25688
|
+
*
|
25689
|
+
* @private
|
25690
|
+
* @param {tinymce.Editor} editor Editor instance to get event target from.
|
25691
|
+
* @param {String} eventName Name of the event for example "click".
|
25692
|
+
* @return {Element/Document} HTML Element or document target to bind on.
|
25693
|
+
*/
|
25654
25694
|
function getEventTarget(editor, eventName) {
|
25655
25695
|
if (eventName == 'selectionchange') {
|
25656
25696
|
return editor.getDoc();
|
@@ -25659,62 +25699,96 @@ define("tinymce/EditorObservable", [
|
|
25659
25699
|
// Need to bind mousedown/mouseup etc to document not body in iframe mode
|
25660
25700
|
// Since the user might click on the HTML element not the BODY
|
25661
25701
|
if (!editor.inline && /^mouse|click|contextmenu|drop|dragover|dragend/.test(eventName)) {
|
25662
|
-
return editor.getDoc();
|
25702
|
+
return editor.getDoc().documentElement;
|
25703
|
+
}
|
25704
|
+
|
25705
|
+
// Bind to event root instead of body if it's defined
|
25706
|
+
if (editor.settings.event_root) {
|
25707
|
+
if (!editor.eventRoot) {
|
25708
|
+
editor.eventRoot = DOM.select(editor.settings.event_root)[0];
|
25709
|
+
}
|
25710
|
+
|
25711
|
+
return editor.eventRoot;
|
25663
25712
|
}
|
25664
25713
|
|
25665
25714
|
return editor.getBody();
|
25666
25715
|
}
|
25667
25716
|
|
25668
|
-
|
25669
|
-
|
25670
|
-
|
25717
|
+
/**
|
25718
|
+
* Binds a event delegate for the specified name this delegate will fire
|
25719
|
+
* the event to the editor dispatcher.
|
25720
|
+
*
|
25721
|
+
* @private
|
25722
|
+
* @param {tinymce.Editor} editor Editor instance to get event target from.
|
25723
|
+
* @param {String} eventName Name of the event for example "click".
|
25724
|
+
*/
|
25725
|
+
function bindEventDelegate(editor, eventName) {
|
25726
|
+
var eventRootElm = getEventTarget(editor, eventName), delegate;
|
25727
|
+
|
25728
|
+
if (!editor.delegates) {
|
25729
|
+
editor.delegates = {};
|
25730
|
+
}
|
25671
25731
|
|
25672
|
-
if (
|
25673
|
-
|
25674
|
-
|
25732
|
+
if (editor.delegates[eventName]) {
|
25733
|
+
return;
|
25734
|
+
}
|
25675
25735
|
|
25676
|
-
|
25677
|
-
|
25678
|
-
|
25679
|
-
|
25736
|
+
if (editor.settings.event_root) {
|
25737
|
+
if (!customEventRootDelegates) {
|
25738
|
+
customEventRootDelegates = {};
|
25739
|
+
editor.editorManager.on('removeEditor', function() {
|
25740
|
+
var name;
|
25741
|
+
|
25742
|
+
if (!editor.editorManager.activeEditor) {
|
25743
|
+
if (customEventRootDelegates) {
|
25744
|
+
for (name in customEventRootDelegates) {
|
25745
|
+
editor.dom.unbind(getEventTarget(editor, name));
|
25746
|
+
}
|
25747
|
+
|
25748
|
+
customEventRootDelegates = null;
|
25749
|
+
}
|
25680
25750
|
}
|
25681
25751
|
});
|
25682
25752
|
}
|
25683
25753
|
|
25684
|
-
if (
|
25754
|
+
if (customEventRootDelegates[eventName]) {
|
25685
25755
|
return;
|
25686
25756
|
}
|
25687
25757
|
|
25688
|
-
|
25689
|
-
|
25690
|
-
editorManager.eventRootElm = eventRootElm;
|
25691
|
-
}
|
25692
|
-
|
25693
|
-
editorManager.rootEvents[name] = true;
|
25694
|
-
|
25695
|
-
DOM.bind(eventRootElm, name, function(e) {
|
25696
|
-
var target = e.target, editors = editorManager.editors, i = editors.length;
|
25758
|
+
delegate = function(e) {
|
25759
|
+
var target = e.target, editors = editor.editorManager.editors, i = editors.length;
|
25697
25760
|
|
25698
25761
|
while (i--) {
|
25699
25762
|
var body = editors[i].getBody();
|
25700
25763
|
|
25701
25764
|
if (body === target || DOM.isChildOf(target, body)) {
|
25702
25765
|
if (!editors[i].hidden) {
|
25703
|
-
editors[i].fire(
|
25766
|
+
editors[i].fire(eventName, e);
|
25704
25767
|
}
|
25705
25768
|
}
|
25706
25769
|
}
|
25707
|
-
}
|
25770
|
+
};
|
25771
|
+
|
25772
|
+
customEventRootDelegates[eventName] = delegate;
|
25773
|
+
DOM.bind(eventRootElm, eventName, delegate);
|
25708
25774
|
} else {
|
25709
|
-
|
25775
|
+
delegate = function(e) {
|
25710
25776
|
if (!editor.hidden) {
|
25711
|
-
editor.fire(
|
25777
|
+
editor.fire(eventName, e);
|
25712
25778
|
}
|
25713
|
-
}
|
25779
|
+
};
|
25780
|
+
|
25781
|
+
DOM.bind(eventRootElm, eventName, delegate);
|
25782
|
+
editor.delegates[eventName] = delegate;
|
25714
25783
|
}
|
25715
25784
|
}
|
25716
25785
|
|
25717
25786
|
var EditorObservable = {
|
25787
|
+
/**
|
25788
|
+
* Bind any pending event delegates. This gets executed after the target body/document is created.
|
25789
|
+
*
|
25790
|
+
* @private
|
25791
|
+
*/
|
25718
25792
|
bindPendingEventDelegates: function() {
|
25719
25793
|
var self = this;
|
25720
25794
|
|
@@ -25723,6 +25797,12 @@ define("tinymce/EditorObservable", [
|
|
25723
25797
|
});
|
25724
25798
|
},
|
25725
25799
|
|
25800
|
+
/**
|
25801
|
+
* Toggles a native event on/off this is called by the EventDispatcher when
|
25802
|
+
* the first native event handler is added and when the last native event handler is removed.
|
25803
|
+
*
|
25804
|
+
* @private
|
25805
|
+
*/
|
25726
25806
|
toggleNativeEvent: function(name, state) {
|
25727
25807
|
var self = this;
|
25728
25808
|
|
@@ -25746,8 +25826,35 @@ define("tinymce/EditorObservable", [
|
|
25746
25826
|
}
|
25747
25827
|
}
|
25748
25828
|
} else if (self.initialized) {
|
25749
|
-
self.dom.unbind(getEventTarget(self, name), name);
|
25829
|
+
self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);
|
25830
|
+
delete self.delegates[name];
|
25831
|
+
}
|
25832
|
+
},
|
25833
|
+
|
25834
|
+
/**
|
25835
|
+
* Unbinds all native event handlers that means delegates, custom events bound using the Events API etc.
|
25836
|
+
*
|
25837
|
+
* @private
|
25838
|
+
*/
|
25839
|
+
unbindAllNativeEvents: function() {
|
25840
|
+
var self = this, name;
|
25841
|
+
|
25842
|
+
if (self.delegates) {
|
25843
|
+
for (name in self.delegates) {
|
25844
|
+
self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);
|
25845
|
+
}
|
25846
|
+
|
25847
|
+
delete self.delegates;
|
25848
|
+
}
|
25849
|
+
|
25850
|
+
if (!self.inline) {
|
25851
|
+
self.getBody().onload = null;
|
25852
|
+
self.dom.unbind(self.getWin());
|
25853
|
+
self.dom.unbind(self.getDoc());
|
25750
25854
|
}
|
25855
|
+
|
25856
|
+
self.dom.unbind(self.getBody());
|
25857
|
+
self.dom.unbind(self.getContainer());
|
25751
25858
|
}
|
25752
25859
|
};
|
25753
25860
|
|
@@ -26554,6 +26661,9 @@ define("tinymce/Editor", [
|
|
26554
26661
|
|
26555
26662
|
DOM.setAttrib("src", url || 'javascript:""');
|
26556
26663
|
|
26664
|
+
self.contentAreaContainer = o.iframeContainer;
|
26665
|
+
self.iframeElement = ifr;
|
26666
|
+
|
26557
26667
|
n = DOM.add(o.iframeContainer, ifr);
|
26558
26668
|
|
26559
26669
|
// Try accessing the document this will fail on IE when document.domain is set to the same as location.hostname
|
@@ -26566,9 +26676,6 @@ define("tinymce/Editor", [
|
|
26566
26676
|
}
|
26567
26677
|
}
|
26568
26678
|
|
26569
|
-
self.contentAreaContainer = o.iframeContainer;
|
26570
|
-
self.iframeElement = ifr;
|
26571
|
-
|
26572
26679
|
if (o.editorContainer) {
|
26573
26680
|
DOM.get(o.editorContainer).style.display = self.orgDisplay;
|
26574
26681
|
self.hidden = DOM.isHidden(o.editorContainer);
|
@@ -26879,12 +26986,15 @@ define("tinymce/Editor", [
|
|
26879
26986
|
// Handle auto focus
|
26880
26987
|
if (settings.auto_focus) {
|
26881
26988
|
setTimeout(function() {
|
26882
|
-
var
|
26989
|
+
var editor;
|
26990
|
+
|
26991
|
+
if (settings.auto_focus === true) {
|
26992
|
+
editor = self;
|
26993
|
+
} else {
|
26994
|
+
editor = self.editorManager.get(settings.auto_focus);
|
26995
|
+
}
|
26883
26996
|
|
26884
|
-
|
26885
|
-
ed.selection.collapse(1);
|
26886
|
-
ed.getBody().focus();
|
26887
|
-
ed.getWin().focus();
|
26997
|
+
editor.focus();
|
26888
26998
|
}, 100);
|
26889
26999
|
}
|
26890
27000
|
|
@@ -27927,6 +28037,7 @@ define("tinymce/Editor", [
|
|
27927
28037
|
if (!self.removed) {
|
27928
28038
|
self.save();
|
27929
28039
|
self.removed = 1;
|
28040
|
+
self.unbindAllNativeEvents();
|
27930
28041
|
|
27931
28042
|
// Remove any hidden input
|
27932
28043
|
if (self.hasHiddenInput) {
|
@@ -27942,21 +28053,12 @@ define("tinymce/Editor", [
|
|
27942
28053
|
|
27943
28054
|
DOM.setStyle(self.id, 'display', self.orgDisplay);
|
27944
28055
|
self.getBody().onload = null; // Prevent #6816
|
27945
|
-
|
27946
|
-
// Don't clear the window or document if content editable
|
27947
|
-
// is enabled since other instances might still be present
|
27948
|
-
Event.unbind(self.getWin());
|
27949
|
-
Event.unbind(self.getDoc());
|
27950
28056
|
}
|
27951
28057
|
|
27952
|
-
var elm = self.getContainer();
|
27953
|
-
Event.unbind(self.getBody());
|
27954
|
-
Event.unbind(elm);
|
27955
|
-
|
27956
28058
|
self.fire('remove');
|
27957
28059
|
|
27958
28060
|
self.editorManager.remove(self);
|
27959
|
-
DOM.remove(
|
28061
|
+
DOM.remove(self.getContainer());
|
27960
28062
|
self.destroy();
|
27961
28063
|
}
|
27962
28064
|
},
|
@@ -27984,14 +28086,6 @@ define("tinymce/Editor", [
|
|
27984
28086
|
return;
|
27985
28087
|
}
|
27986
28088
|
|
27987
|
-
// We must unbind on Gecko since it would otherwise produce the pesky "attempt
|
27988
|
-
// to run compile-and-go script on a cleared scope" message
|
27989
|
-
if (automatic && isGecko) {
|
27990
|
-
Event.unbind(self.getDoc());
|
27991
|
-
Event.unbind(self.getWin());
|
27992
|
-
Event.unbind(self.getBody());
|
27993
|
-
}
|
27994
|
-
|
27995
28089
|
if (!automatic) {
|
27996
28090
|
self.editorManager.off('beforeunload', self._beforeUnload);
|
27997
28091
|
|
@@ -28474,6 +28568,7 @@ define("tinymce/EditorManager", [
|
|
28474
28568
|
// User has manually destroyed the editor lets clean up the mess
|
28475
28569
|
if (editor && !(editor.getContainer() || editor.getBody()).parentNode) {
|
28476
28570
|
removeEditorFromList(editor);
|
28571
|
+
editor.unbindAllNativeEvents();
|
28477
28572
|
editor.destroy(true);
|
28478
28573
|
editor = null;
|
28479
28574
|
}
|
@@ -28504,7 +28599,7 @@ define("tinymce/EditorManager", [
|
|
28504
28599
|
* @property minorVersion
|
28505
28600
|
* @type String
|
28506
28601
|
*/
|
28507
|
-
minorVersion: '1.
|
28602
|
+
minorVersion: '1.3',
|
28508
28603
|
|
28509
28604
|
/**
|
28510
28605
|
* Release date of TinyMCE build.
|
@@ -28512,7 +28607,7 @@ define("tinymce/EditorManager", [
|
|
28512
28607
|
* @property releaseDate
|
28513
28608
|
* @type String
|
28514
28609
|
*/
|
28515
|
-
releaseDate: '2014-07-
|
28610
|
+
releaseDate: '2014-07-29',
|
28516
28611
|
|
28517
28612
|
/**
|
28518
28613
|
* Collection of editor instances.
|
@@ -29131,6 +29226,7 @@ define("tinymce/LegacyInput", [
|
|
29131
29226
|
/**
|
29132
29227
|
* This class enables you to send XMLHTTPRequests cross browser.
|
29133
29228
|
* @class tinymce.util.XHR
|
29229
|
+
* @mixes tinymce.util.Observable
|
29134
29230
|
* @static
|
29135
29231
|
* @example
|
29136
29232
|
* // Sends a low level Ajax request
|
@@ -29140,9 +29236,17 @@ define("tinymce/LegacyInput", [
|
|
29140
29236
|
* console.debug(text);
|
29141
29237
|
* }
|
29142
29238
|
* });
|
29239
|
+
*
|
29240
|
+
* // Add custom header to XHR request
|
29241
|
+
* tinymce.util.XHR.on('beforeSend', function(e) {
|
29242
|
+
* e.xhr.setRequestHeader('X-Requested-With', 'Something');
|
29243
|
+
* });
|
29143
29244
|
*/
|
29144
|
-
define("tinymce/util/XHR", [
|
29145
|
-
|
29245
|
+
define("tinymce/util/XHR", [
|
29246
|
+
"tinymce/util/Observable",
|
29247
|
+
"tinymce/util/Tools"
|
29248
|
+
], function(Observable, Tools) {
|
29249
|
+
var XHR = {
|
29146
29250
|
/**
|
29147
29251
|
* Sends a XMLHTTPRequest.
|
29148
29252
|
* Consult the Wiki for details on what settings this method takes.
|
@@ -29186,12 +29290,14 @@ define("tinymce/util/XHR", [], function() {
|
|
29186
29290
|
if (settings.crossDomain) {
|
29187
29291
|
xhr.withCredentials = true;
|
29188
29292
|
}
|
29293
|
+
|
29189
29294
|
if (settings.content_type) {
|
29190
29295
|
xhr.setRequestHeader('Content-Type', settings.content_type);
|
29191
29296
|
}
|
29192
29297
|
|
29193
29298
|
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
29194
29299
|
|
29300
|
+
xhr = XHR.fire('beforeSend', {xhr: xhr, settings: settings}).xhr;
|
29195
29301
|
xhr.send(settings.data);
|
29196
29302
|
|
29197
29303
|
// Syncronous request
|
@@ -29204,6 +29310,10 @@ define("tinymce/util/XHR", [], function() {
|
|
29204
29310
|
}
|
29205
29311
|
}
|
29206
29312
|
};
|
29313
|
+
|
29314
|
+
Tools.extend(XHR, Observable);
|
29315
|
+
|
29316
|
+
return XHR;
|
29207
29317
|
});
|
29208
29318
|
|
29209
29319
|
// Included from: js/tinymce/classes/util/JSON.js
|
@@ -31070,6 +31180,15 @@ define("tinymce/ui/PanelButton", [
|
|
31070
31180
|
});
|
31071
31181
|
|
31072
31182
|
return self._super();
|
31183
|
+
},
|
31184
|
+
|
31185
|
+
remove: function() {
|
31186
|
+
if (this.panel) {
|
31187
|
+
this.panel.remove();
|
31188
|
+
this.panel = null;
|
31189
|
+
}
|
31190
|
+
|
31191
|
+
return this._super();
|
31073
31192
|
}
|
31074
31193
|
});
|
31075
31194
|
});
|
@@ -32856,7 +32975,6 @@ define("tinymce/ui/FormatControls", [
|
|
32856
32975
|
paste: ['Paste', 'Paste'],
|
32857
32976
|
help: ['Help', 'mceHelp'],
|
32858
32977
|
selectall: ['Select all', 'SelectAll'],
|
32859
|
-
hr: ['Insert horizontal rule', 'InsertHorizontalRule'],
|
32860
32978
|
removeformat: ['Clear formatting', 'RemoveFormat'],
|
32861
32979
|
visualaid: ['Visual aids', 'mceToggleVisualAid'],
|
32862
32980
|
newdocument: ['New document', 'mceNewDocument']
|