tinymce-rails 4.1.4 → 4.1.5
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.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/app/assets/source/tinymce/tinymce.jquery.js +149 -69
- data/app/assets/source/tinymce/tinymce.js +149 -69
- 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/lists/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/noneditable/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/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/visualchars/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.jquery.js +10 -10
- data/vendor/assets/javascripts/tinymce/tinymce.js +10 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8649340667e7ef05b3c60dcbc66ff313894bc65
|
4
|
+
data.tar.gz: 8490b2824f51aa4b4d42a668147d106849c47912
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bbf6b99ad46262d1798e692b6c03acfc2850a94bbdae0e663cee89593f1dff9ee0df6a534526f83dffc40de52afe6a22ec24cff65ec55f176fd107aa5cc0a0a
|
7
|
+
data.tar.gz: d6461a8c7d98715d1e0f59cba023a9c9c147808705e1936685fc848d441d26dbd63ece5a9349170cfcbd29ed92e7b6979a8b1b7efa8b2bb76c1176f8d076f6ef
|
data/README.md
CHANGED
@@ -26,11 +26,11 @@ Be sure to add to the global group, not the `assets` group. Then run `bundle ins
|
|
26
26
|
|
27
27
|
```yml
|
28
28
|
toolbar:
|
29
|
-
- styleselect | bold italic |
|
30
|
-
-
|
29
|
+
- styleselect | bold italic | undo redo
|
30
|
+
- image | link
|
31
31
|
plugins:
|
32
|
-
-
|
33
|
-
-
|
32
|
+
- image
|
33
|
+
- link
|
34
34
|
```
|
35
35
|
|
36
36
|
The Rails server no longer needs to be restarted when this file is updated in development mode.
|
@@ -45,7 +45,7 @@ default:
|
|
45
45
|
|
46
46
|
alternate:
|
47
47
|
selector: textarea.table-editor
|
48
|
-
toolbar: styleselect | bold italic |
|
48
|
+
toolbar: styleselect | bold italic | undo redo | table
|
49
49
|
plugins:
|
50
50
|
- table
|
51
51
|
```
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.1.
|
1
|
+
// 4.1.5 (2014-09-09)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -5273,7 +5273,11 @@ define("tinymce/dom/DOMUtils", [
|
|
5273
5273
|
* tinymce.DOM.setStyles('mydiv', {'background-color': 'red', 'color': 'green'});
|
5274
5274
|
*/
|
5275
5275
|
setStyles: function(elm, styles) {
|
5276
|
-
this.$$(elm).css(styles);
|
5276
|
+
elm = this.$$(elm).css(styles);
|
5277
|
+
|
5278
|
+
if (this.settings.update_styles) {
|
5279
|
+
elm.attr('data-mce-style', null);
|
5280
|
+
}
|
5277
5281
|
},
|
5278
5282
|
|
5279
5283
|
/**
|
@@ -6002,7 +6006,7 @@ define("tinymce/dom/DOMUtils", [
|
|
6002
6006
|
node = node.firstChild;
|
6003
6007
|
if (node) {
|
6004
6008
|
walker = new TreeWalker(node, node.parentNode);
|
6005
|
-
elements = elements || self.schema ? self.schema.getNonEmptyElements() : null;
|
6009
|
+
elements = elements || (self.schema ? self.schema.getNonEmptyElements() : null);
|
6006
6010
|
|
6007
6011
|
do {
|
6008
6012
|
type = node.nodeType;
|
@@ -7525,7 +7529,11 @@ define("tinymce/NodeChange", [
|
|
7525
7529
|
// Fire an extra nodeChange on mouseup for compatibility reasons
|
7526
7530
|
editor.on('MouseUp', function(e) {
|
7527
7531
|
if (!e.isDefaultPrevented()) {
|
7528
|
-
|
7532
|
+
// Delay nodeChanged call for WebKit edge case issue where the range
|
7533
|
+
// isn't updated until after you click outside a selected image
|
7534
|
+
setTimeout(function() {
|
7535
|
+
editor.nodeChanged();
|
7536
|
+
}, 0);
|
7529
7537
|
}
|
7530
7538
|
});
|
7531
7539
|
|
@@ -7540,7 +7548,7 @@ define("tinymce/NodeChange", [
|
|
7540
7548
|
var selection = editor.selection, node, parents, root;
|
7541
7549
|
|
7542
7550
|
// Fix for bug #1896577 it seems that this can not be fired while the editor is loading
|
7543
|
-
if (editor.initialized && !editor.settings.disable_nodechange && !editor.settings.readonly) {
|
7551
|
+
if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.settings.readonly) {
|
7544
7552
|
// Get start node
|
7545
7553
|
root = editor.getBody();
|
7546
7554
|
node = selection.getStart() || root;
|
@@ -10116,7 +10124,13 @@ define("tinymce/html/DomParser", [
|
|
10116
10124
|
// Leave nodes that have a name like <a name="name">
|
10117
10125
|
if (!node.attributes.map.name && !node.attributes.map.id) {
|
10118
10126
|
tempNode = node.parent;
|
10119
|
-
|
10127
|
+
|
10128
|
+
if (blockElements[node.name]) {
|
10129
|
+
node.empty().remove();
|
10130
|
+
} else {
|
10131
|
+
node.unwrap();
|
10132
|
+
}
|
10133
|
+
|
10120
10134
|
node = tempNode;
|
10121
10135
|
return;
|
10122
10136
|
}
|
@@ -14168,6 +14182,20 @@ define("tinymce/Formatter", [
|
|
14168
14182
|
}
|
14169
14183
|
}
|
14170
14184
|
|
14185
|
+
/**
|
14186
|
+
* Unregister a specific format by name.
|
14187
|
+
*
|
14188
|
+
* @method unregister
|
14189
|
+
* @param {String} name Name of the format for example "bold".
|
14190
|
+
*/
|
14191
|
+
function unregister(name) {
|
14192
|
+
if (name && formats[name]) {
|
14193
|
+
delete formats[name];
|
14194
|
+
}
|
14195
|
+
|
14196
|
+
return formats;
|
14197
|
+
}
|
14198
|
+
|
14171
14199
|
function getTextDecoration(node) {
|
14172
14200
|
var decoration;
|
14173
14201
|
|
@@ -15065,6 +15093,7 @@ define("tinymce/Formatter", [
|
|
15065
15093
|
extend(this, {
|
15066
15094
|
get: get,
|
15067
15095
|
register: register,
|
15096
|
+
unregister: unregister,
|
15068
15097
|
apply: apply,
|
15069
15098
|
remove: remove,
|
15070
15099
|
toggle: toggle,
|
@@ -15949,12 +15978,12 @@ define("tinymce/Formatter", [
|
|
15949
15978
|
child.deleteData(0, 1);
|
15950
15979
|
|
15951
15980
|
// Fix for bug #6976
|
15952
|
-
if (rng.startContainer == child) {
|
15953
|
-
rng.startOffset
|
15981
|
+
if (rng.startContainer == child && rng.startOffset > 0) {
|
15982
|
+
rng.setStart(child, rng.startOffset - 1);
|
15954
15983
|
}
|
15955
15984
|
|
15956
|
-
if (rng.endContainer == child) {
|
15957
|
-
rng.endOffset
|
15985
|
+
if (rng.endContainer == child && rng.endOffset > 0) {
|
15986
|
+
rng.setEnd(child, rng.endOffset - 1);
|
15958
15987
|
}
|
15959
15988
|
}
|
15960
15989
|
|
@@ -19950,6 +19979,10 @@ define("tinymce/ui/DomUtils", [
|
|
19950
19979
|
return DOMUtils.DOM.setStyle(elm, name, value);
|
19951
19980
|
},
|
19952
19981
|
|
19982
|
+
getRuntimeStyle: function(elm, name) {
|
19983
|
+
return DOMUtils.DOM.getStyle(elm, name, true);
|
19984
|
+
},
|
19985
|
+
|
19953
19986
|
on: function(target, name, callback, scope) {
|
19954
19987
|
return DOMUtils.DOM.bind(target, name, callback, scope);
|
19955
19988
|
},
|
@@ -22850,7 +22883,7 @@ define("tinymce/ui/Movable", [
|
|
22850
22883
|
x = pos.x;
|
22851
22884
|
y = pos.y;
|
22852
22885
|
|
22853
|
-
if (ctrl._fixed) {
|
22886
|
+
if (ctrl._fixed && DomUtils.getRuntimeStyle(document.body, 'position') == 'static') {
|
22854
22887
|
x -= viewport.x;
|
22855
22888
|
y -= viewport.y;
|
22856
22889
|
}
|
@@ -23239,6 +23272,46 @@ define("tinymce/ui/FloatPanel", [
|
|
23239
23272
|
}
|
23240
23273
|
}
|
23241
23274
|
|
23275
|
+
function addRemove(add, ctrl) {
|
23276
|
+
var i, zIndex = FloatPanel.zIndex || 0xFFFF, topModal;
|
23277
|
+
|
23278
|
+
if (add) {
|
23279
|
+
zOrder.push(ctrl);
|
23280
|
+
} else {
|
23281
|
+
i = zOrder.length;
|
23282
|
+
|
23283
|
+
while (i--) {
|
23284
|
+
if (zOrder[i] === ctrl) {
|
23285
|
+
zOrder.splice(i, 1);
|
23286
|
+
}
|
23287
|
+
}
|
23288
|
+
}
|
23289
|
+
|
23290
|
+
if (zOrder.length) {
|
23291
|
+
for (i = 0; i < zOrder.length; i++) {
|
23292
|
+
if (zOrder[i].modal) {
|
23293
|
+
zIndex++;
|
23294
|
+
topModal = zOrder[i];
|
23295
|
+
}
|
23296
|
+
|
23297
|
+
zOrder[i].getEl().style.zIndex = zIndex;
|
23298
|
+
zOrder[i].zIndex = zIndex;
|
23299
|
+
zIndex++;
|
23300
|
+
}
|
23301
|
+
}
|
23302
|
+
|
23303
|
+
var modalBlockEl = document.getElementById(ctrl.classPrefix + 'modal-block');
|
23304
|
+
|
23305
|
+
if (topModal) {
|
23306
|
+
DomUtils.css(modalBlockEl, 'z-index', topModal.zIndex - 1);
|
23307
|
+
} else if (modalBlockEl) {
|
23308
|
+
modalBlockEl.parentNode.removeChild(modalBlockEl);
|
23309
|
+
hasModal = false;
|
23310
|
+
}
|
23311
|
+
|
23312
|
+
FloatPanel.currentZIndex = zIndex;
|
23313
|
+
}
|
23314
|
+
|
23242
23315
|
var FloatPanel = Panel.extend({
|
23243
23316
|
Mixins: [Movable, Resizable],
|
23244
23317
|
|
@@ -23252,34 +23325,6 @@ define("tinymce/ui/FloatPanel", [
|
|
23252
23325
|
init: function(settings) {
|
23253
23326
|
var self = this;
|
23254
23327
|
|
23255
|
-
function reorder() {
|
23256
|
-
var i, zIndex = FloatPanel.zIndex || 0xFFFF, topModal;
|
23257
|
-
|
23258
|
-
if (zOrder.length) {
|
23259
|
-
for (i = 0; i < zOrder.length; i++) {
|
23260
|
-
if (zOrder[i].modal) {
|
23261
|
-
zIndex++;
|
23262
|
-
topModal = zOrder[i];
|
23263
|
-
}
|
23264
|
-
|
23265
|
-
zOrder[i].getEl().style.zIndex = zIndex;
|
23266
|
-
zOrder[i].zIndex = zIndex;
|
23267
|
-
zIndex++;
|
23268
|
-
}
|
23269
|
-
}
|
23270
|
-
|
23271
|
-
var modalBlockEl = document.getElementById(self.classPrefix + 'modal-block');
|
23272
|
-
|
23273
|
-
if (topModal) {
|
23274
|
-
DomUtils.css(modalBlockEl, 'z-index', topModal.zIndex - 1);
|
23275
|
-
} else if (modalBlockEl) {
|
23276
|
-
modalBlockEl.parentNode.removeChild(modalBlockEl);
|
23277
|
-
hasModal = false;
|
23278
|
-
}
|
23279
|
-
|
23280
|
-
FloatPanel.currentZIndex = zIndex;
|
23281
|
-
}
|
23282
|
-
|
23283
23328
|
self._super(settings);
|
23284
23329
|
self._eventsRoot = self;
|
23285
23330
|
|
@@ -23319,22 +23364,7 @@ define("tinymce/ui/FloatPanel", [
|
|
23319
23364
|
hasModal = true;
|
23320
23365
|
}
|
23321
23366
|
|
23322
|
-
|
23323
|
-
reorder();
|
23324
|
-
}
|
23325
|
-
});
|
23326
|
-
|
23327
|
-
self.on('close hide', function(e) {
|
23328
|
-
if (e.control == self) {
|
23329
|
-
var i = zOrder.length;
|
23330
|
-
|
23331
|
-
while (i--) {
|
23332
|
-
if (zOrder[i] === self) {
|
23333
|
-
zOrder.splice(i, 1);
|
23334
|
-
}
|
23335
|
-
}
|
23336
|
-
|
23337
|
-
reorder();
|
23367
|
+
addRemove(true, self);
|
23338
23368
|
}
|
23339
23369
|
});
|
23340
23370
|
|
@@ -23405,6 +23435,8 @@ define("tinymce/ui/FloatPanel", [
|
|
23405
23435
|
*/
|
23406
23436
|
hide: function() {
|
23407
23437
|
removeVisiblePanel(this);
|
23438
|
+
addRemove(false, this);
|
23439
|
+
|
23408
23440
|
return this._super();
|
23409
23441
|
},
|
23410
23442
|
|
@@ -23426,9 +23458,12 @@ define("tinymce/ui/FloatPanel", [
|
|
23426
23458
|
close: function() {
|
23427
23459
|
var self = this;
|
23428
23460
|
|
23429
|
-
self.fire('close')
|
23461
|
+
if (!self.fire('close').isDefaultPrevented()) {
|
23462
|
+
self.remove();
|
23463
|
+
addRemove(false, self);
|
23464
|
+
}
|
23430
23465
|
|
23431
|
-
return self
|
23466
|
+
return self;
|
23432
23467
|
},
|
23433
23468
|
|
23434
23469
|
/**
|
@@ -24207,7 +24242,9 @@ define("tinymce/WindowManager", [
|
|
24207
24242
|
}
|
24208
24243
|
}
|
24209
24244
|
|
24210
|
-
|
24245
|
+
if (!windows.length) {
|
24246
|
+
editor.focus();
|
24247
|
+
}
|
24211
24248
|
});
|
24212
24249
|
|
24213
24250
|
// Handle data
|
@@ -24228,7 +24265,9 @@ define("tinymce/WindowManager", [
|
|
24228
24265
|
win.params = params || {};
|
24229
24266
|
|
24230
24267
|
// Takes a snapshot in the FocusManager of the selection before focus is lost to dialog
|
24231
|
-
|
24268
|
+
if (windows.length === 1) {
|
24269
|
+
editor.nodeChanged();
|
24270
|
+
}
|
24232
24271
|
|
24233
24272
|
return win.renderTo().reflow();
|
24234
24273
|
};
|
@@ -24745,10 +24784,17 @@ define("tinymce/util/Quirks", [
|
|
24745
24784
|
});
|
24746
24785
|
|
24747
24786
|
// Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event
|
24748
|
-
|
24787
|
+
// Needs to be both down/up due to weird rendering bug on Chrome Windows
|
24788
|
+
dom.bind(editor.getDoc(), 'mousedown mouseup', function(e) {
|
24749
24789
|
if (e.target == editor.getDoc().documentElement) {
|
24750
24790
|
editor.getBody().focus();
|
24751
|
-
|
24791
|
+
|
24792
|
+
if (e.type == 'mousedown') {
|
24793
|
+
// Edge case for mousedown, drag select and mousedown again within selection on Chrome Windows to render caret
|
24794
|
+
selection.placeCaretAt(e.clientX, e.clientY);
|
24795
|
+
} else {
|
24796
|
+
selection.setRng(selection.getRng());
|
24797
|
+
}
|
24752
24798
|
}
|
24753
24799
|
});
|
24754
24800
|
}
|
@@ -24824,10 +24870,11 @@ define("tinymce/util/Quirks", [
|
|
24824
24870
|
|
24825
24871
|
// Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250
|
24826
24872
|
// WebKit can't even do simple things like selecting an image
|
24827
|
-
// Needs
|
24873
|
+
// Needs to be the setBaseAndExtend or it will fail to select floated images
|
24828
24874
|
if (/^(IMG|HR)$/.test(target.nodeName)) {
|
24829
24875
|
e.preventDefault();
|
24830
24876
|
selection.getSel().setBaseAndExtent(target, 0, target, 1);
|
24877
|
+
editor.nodeChanged();
|
24831
24878
|
}
|
24832
24879
|
|
24833
24880
|
if (target.nodeName == 'A' && dom.hasClass(target, 'mce-item-anchor')) {
|
@@ -25471,6 +25518,7 @@ define("tinymce/util/Quirks", [
|
|
25471
25518
|
// you bind touch events so we need to do this manually
|
25472
25519
|
// TODO: Expand to the closest word? Touble tap still works.
|
25473
25520
|
editor.selection.placeCaretAt(endTouch.clientX, endTouch.clientY);
|
25521
|
+
editor.nodeChanged();
|
25474
25522
|
}
|
25475
25523
|
});
|
25476
25524
|
});
|
@@ -28647,7 +28695,7 @@ define("tinymce/EditorManager", [
|
|
28647
28695
|
* @property minorVersion
|
28648
28696
|
* @type String
|
28649
28697
|
*/
|
28650
|
-
minorVersion: '1.
|
28698
|
+
minorVersion: '1.5',
|
28651
28699
|
|
28652
28700
|
/**
|
28653
28701
|
* Release date of TinyMCE build.
|
@@ -28655,7 +28703,7 @@ define("tinymce/EditorManager", [
|
|
28655
28703
|
* @property releaseDate
|
28656
28704
|
* @type String
|
28657
28705
|
*/
|
28658
|
-
releaseDate: '2014-
|
28706
|
+
releaseDate: '2014-09-09',
|
28659
28707
|
|
28660
28708
|
/**
|
28661
28709
|
* Collection of editor instances.
|
@@ -34023,14 +34071,30 @@ define("tinymce/ui/MenuButton", [
|
|
34023
34071
|
*/
|
34024
34072
|
renderHtml: function() {
|
34025
34073
|
var self = this, id = self._id, prefix = self.classPrefix;
|
34026
|
-
var icon = self.settings.icon
|
34074
|
+
var icon = self.settings.icon, image;
|
34075
|
+
|
34076
|
+
image = self.settings.image;
|
34077
|
+
if (image) {
|
34078
|
+
icon = 'none';
|
34079
|
+
|
34080
|
+
// Support for [high dpi, low dpi] image sources
|
34081
|
+
if (typeof image != "string") {
|
34082
|
+
image = window.getSelection ? image[0] : image[1];
|
34083
|
+
}
|
34084
|
+
|
34085
|
+
image = ' style="background-image: url(\'' + image + '\')"';
|
34086
|
+
} else {
|
34087
|
+
image = '';
|
34088
|
+
}
|
34089
|
+
|
34090
|
+
icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
|
34027
34091
|
|
34028
34092
|
self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');
|
34029
34093
|
|
34030
34094
|
return (
|
34031
34095
|
'<div id="' + id + '" class="' + self.classes() + '" tabindex="-1" aria-labelledby="' + id + '">' +
|
34032
34096
|
'<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' +
|
34033
|
-
(icon ? '<i class="' + icon + '"></i>' : '') +
|
34097
|
+
(icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
|
34034
34098
|
'<span>' + (self._text ? (icon ? '\u00a0' : '') + self.encode(self._text) : '') + '</span>' +
|
34035
34099
|
' <i class="' + prefix + 'caret"></i>' +
|
34036
34100
|
'</button>' +
|
@@ -34942,13 +35006,29 @@ define("tinymce/ui/SplitButton", [
|
|
34942
35006
|
* @return {String} HTML representing the control.
|
34943
35007
|
*/
|
34944
35008
|
renderHtml: function() {
|
34945
|
-
var self = this, id = self._id, prefix = self.classPrefix;
|
34946
|
-
var icon = self.settings.icon
|
35009
|
+
var self = this, id = self._id, prefix = self.classPrefix, image;
|
35010
|
+
var icon = self.settings.icon;
|
35011
|
+
|
35012
|
+
image = self.settings.image;
|
35013
|
+
if (image) {
|
35014
|
+
icon = 'none';
|
35015
|
+
|
35016
|
+
// Support for [high dpi, low dpi] image sources
|
35017
|
+
if (typeof image != "string") {
|
35018
|
+
image = window.getSelection ? image[0] : image[1];
|
35019
|
+
}
|
35020
|
+
|
35021
|
+
image = ' style="background-image: url(\'' + image + '\')"';
|
35022
|
+
} else {
|
35023
|
+
image = '';
|
35024
|
+
}
|
35025
|
+
|
35026
|
+
icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
|
34947
35027
|
|
34948
35028
|
return (
|
34949
35029
|
'<div id="' + id + '" class="' + self.classes() + '" role="button" tabindex="-1">' +
|
34950
35030
|
'<button type="button" hidefocus="1" tabindex="-1">' +
|
34951
|
-
(icon ? '<i class="' + icon + '"></i>' : '') +
|
35031
|
+
(icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
|
34952
35032
|
(self._text ? (icon ? ' ' : '') + self._text : '') +
|
34953
35033
|
'</button>' +
|
34954
35034
|
'<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' +
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.1.
|
1
|
+
// 4.1.5 (2014-09-09)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -7288,7 +7288,11 @@ define("tinymce/dom/DOMUtils", [
|
|
7288
7288
|
* tinymce.DOM.setStyles('mydiv', {'background-color': 'red', 'color': 'green'});
|
7289
7289
|
*/
|
7290
7290
|
setStyles: function(elm, styles) {
|
7291
|
-
this.$$(elm).css(styles);
|
7291
|
+
elm = this.$$(elm).css(styles);
|
7292
|
+
|
7293
|
+
if (this.settings.update_styles) {
|
7294
|
+
elm.attr('data-mce-style', null);
|
7295
|
+
}
|
7292
7296
|
},
|
7293
7297
|
|
7294
7298
|
/**
|
@@ -8017,7 +8021,7 @@ define("tinymce/dom/DOMUtils", [
|
|
8017
8021
|
node = node.firstChild;
|
8018
8022
|
if (node) {
|
8019
8023
|
walker = new TreeWalker(node, node.parentNode);
|
8020
|
-
elements = elements || self.schema ? self.schema.getNonEmptyElements() : null;
|
8024
|
+
elements = elements || (self.schema ? self.schema.getNonEmptyElements() : null);
|
8021
8025
|
|
8022
8026
|
do {
|
8023
8027
|
type = node.nodeType;
|
@@ -9540,7 +9544,11 @@ define("tinymce/NodeChange", [
|
|
9540
9544
|
// Fire an extra nodeChange on mouseup for compatibility reasons
|
9541
9545
|
editor.on('MouseUp', function(e) {
|
9542
9546
|
if (!e.isDefaultPrevented()) {
|
9543
|
-
|
9547
|
+
// Delay nodeChanged call for WebKit edge case issue where the range
|
9548
|
+
// isn't updated until after you click outside a selected image
|
9549
|
+
setTimeout(function() {
|
9550
|
+
editor.nodeChanged();
|
9551
|
+
}, 0);
|
9544
9552
|
}
|
9545
9553
|
});
|
9546
9554
|
|
@@ -9555,7 +9563,7 @@ define("tinymce/NodeChange", [
|
|
9555
9563
|
var selection = editor.selection, node, parents, root;
|
9556
9564
|
|
9557
9565
|
// Fix for bug #1896577 it seems that this can not be fired while the editor is loading
|
9558
|
-
if (editor.initialized && !editor.settings.disable_nodechange && !editor.settings.readonly) {
|
9566
|
+
if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.settings.readonly) {
|
9559
9567
|
// Get start node
|
9560
9568
|
root = editor.getBody();
|
9561
9569
|
node = selection.getStart() || root;
|
@@ -12131,7 +12139,13 @@ define("tinymce/html/DomParser", [
|
|
12131
12139
|
// Leave nodes that have a name like <a name="name">
|
12132
12140
|
if (!node.attributes.map.name && !node.attributes.map.id) {
|
12133
12141
|
tempNode = node.parent;
|
12134
|
-
|
12142
|
+
|
12143
|
+
if (blockElements[node.name]) {
|
12144
|
+
node.empty().remove();
|
12145
|
+
} else {
|
12146
|
+
node.unwrap();
|
12147
|
+
}
|
12148
|
+
|
12135
12149
|
node = tempNode;
|
12136
12150
|
return;
|
12137
12151
|
}
|
@@ -16183,6 +16197,20 @@ define("tinymce/Formatter", [
|
|
16183
16197
|
}
|
16184
16198
|
}
|
16185
16199
|
|
16200
|
+
/**
|
16201
|
+
* Unregister a specific format by name.
|
16202
|
+
*
|
16203
|
+
* @method unregister
|
16204
|
+
* @param {String} name Name of the format for example "bold".
|
16205
|
+
*/
|
16206
|
+
function unregister(name) {
|
16207
|
+
if (name && formats[name]) {
|
16208
|
+
delete formats[name];
|
16209
|
+
}
|
16210
|
+
|
16211
|
+
return formats;
|
16212
|
+
}
|
16213
|
+
|
16186
16214
|
function getTextDecoration(node) {
|
16187
16215
|
var decoration;
|
16188
16216
|
|
@@ -17080,6 +17108,7 @@ define("tinymce/Formatter", [
|
|
17080
17108
|
extend(this, {
|
17081
17109
|
get: get,
|
17082
17110
|
register: register,
|
17111
|
+
unregister: unregister,
|
17083
17112
|
apply: apply,
|
17084
17113
|
remove: remove,
|
17085
17114
|
toggle: toggle,
|
@@ -17964,12 +17993,12 @@ define("tinymce/Formatter", [
|
|
17964
17993
|
child.deleteData(0, 1);
|
17965
17994
|
|
17966
17995
|
// Fix for bug #6976
|
17967
|
-
if (rng.startContainer == child) {
|
17968
|
-
rng.startOffset
|
17996
|
+
if (rng.startContainer == child && rng.startOffset > 0) {
|
17997
|
+
rng.setStart(child, rng.startOffset - 1);
|
17969
17998
|
}
|
17970
17999
|
|
17971
|
-
if (rng.endContainer == child) {
|
17972
|
-
rng.endOffset
|
18000
|
+
if (rng.endContainer == child && rng.endOffset > 0) {
|
18001
|
+
rng.setEnd(child, rng.endOffset - 1);
|
17973
18002
|
}
|
17974
18003
|
}
|
17975
18004
|
|
@@ -21965,6 +21994,10 @@ define("tinymce/ui/DomUtils", [
|
|
21965
21994
|
return DOMUtils.DOM.setStyle(elm, name, value);
|
21966
21995
|
},
|
21967
21996
|
|
21997
|
+
getRuntimeStyle: function(elm, name) {
|
21998
|
+
return DOMUtils.DOM.getStyle(elm, name, true);
|
21999
|
+
},
|
22000
|
+
|
21968
22001
|
on: function(target, name, callback, scope) {
|
21969
22002
|
return DOMUtils.DOM.bind(target, name, callback, scope);
|
21970
22003
|
},
|
@@ -24865,7 +24898,7 @@ define("tinymce/ui/Movable", [
|
|
24865
24898
|
x = pos.x;
|
24866
24899
|
y = pos.y;
|
24867
24900
|
|
24868
|
-
if (ctrl._fixed) {
|
24901
|
+
if (ctrl._fixed && DomUtils.getRuntimeStyle(document.body, 'position') == 'static') {
|
24869
24902
|
x -= viewport.x;
|
24870
24903
|
y -= viewport.y;
|
24871
24904
|
}
|
@@ -25254,6 +25287,46 @@ define("tinymce/ui/FloatPanel", [
|
|
25254
25287
|
}
|
25255
25288
|
}
|
25256
25289
|
|
25290
|
+
function addRemove(add, ctrl) {
|
25291
|
+
var i, zIndex = FloatPanel.zIndex || 0xFFFF, topModal;
|
25292
|
+
|
25293
|
+
if (add) {
|
25294
|
+
zOrder.push(ctrl);
|
25295
|
+
} else {
|
25296
|
+
i = zOrder.length;
|
25297
|
+
|
25298
|
+
while (i--) {
|
25299
|
+
if (zOrder[i] === ctrl) {
|
25300
|
+
zOrder.splice(i, 1);
|
25301
|
+
}
|
25302
|
+
}
|
25303
|
+
}
|
25304
|
+
|
25305
|
+
if (zOrder.length) {
|
25306
|
+
for (i = 0; i < zOrder.length; i++) {
|
25307
|
+
if (zOrder[i].modal) {
|
25308
|
+
zIndex++;
|
25309
|
+
topModal = zOrder[i];
|
25310
|
+
}
|
25311
|
+
|
25312
|
+
zOrder[i].getEl().style.zIndex = zIndex;
|
25313
|
+
zOrder[i].zIndex = zIndex;
|
25314
|
+
zIndex++;
|
25315
|
+
}
|
25316
|
+
}
|
25317
|
+
|
25318
|
+
var modalBlockEl = document.getElementById(ctrl.classPrefix + 'modal-block');
|
25319
|
+
|
25320
|
+
if (topModal) {
|
25321
|
+
DomUtils.css(modalBlockEl, 'z-index', topModal.zIndex - 1);
|
25322
|
+
} else if (modalBlockEl) {
|
25323
|
+
modalBlockEl.parentNode.removeChild(modalBlockEl);
|
25324
|
+
hasModal = false;
|
25325
|
+
}
|
25326
|
+
|
25327
|
+
FloatPanel.currentZIndex = zIndex;
|
25328
|
+
}
|
25329
|
+
|
25257
25330
|
var FloatPanel = Panel.extend({
|
25258
25331
|
Mixins: [Movable, Resizable],
|
25259
25332
|
|
@@ -25267,34 +25340,6 @@ define("tinymce/ui/FloatPanel", [
|
|
25267
25340
|
init: function(settings) {
|
25268
25341
|
var self = this;
|
25269
25342
|
|
25270
|
-
function reorder() {
|
25271
|
-
var i, zIndex = FloatPanel.zIndex || 0xFFFF, topModal;
|
25272
|
-
|
25273
|
-
if (zOrder.length) {
|
25274
|
-
for (i = 0; i < zOrder.length; i++) {
|
25275
|
-
if (zOrder[i].modal) {
|
25276
|
-
zIndex++;
|
25277
|
-
topModal = zOrder[i];
|
25278
|
-
}
|
25279
|
-
|
25280
|
-
zOrder[i].getEl().style.zIndex = zIndex;
|
25281
|
-
zOrder[i].zIndex = zIndex;
|
25282
|
-
zIndex++;
|
25283
|
-
}
|
25284
|
-
}
|
25285
|
-
|
25286
|
-
var modalBlockEl = document.getElementById(self.classPrefix + 'modal-block');
|
25287
|
-
|
25288
|
-
if (topModal) {
|
25289
|
-
DomUtils.css(modalBlockEl, 'z-index', topModal.zIndex - 1);
|
25290
|
-
} else if (modalBlockEl) {
|
25291
|
-
modalBlockEl.parentNode.removeChild(modalBlockEl);
|
25292
|
-
hasModal = false;
|
25293
|
-
}
|
25294
|
-
|
25295
|
-
FloatPanel.currentZIndex = zIndex;
|
25296
|
-
}
|
25297
|
-
|
25298
25343
|
self._super(settings);
|
25299
25344
|
self._eventsRoot = self;
|
25300
25345
|
|
@@ -25334,22 +25379,7 @@ define("tinymce/ui/FloatPanel", [
|
|
25334
25379
|
hasModal = true;
|
25335
25380
|
}
|
25336
25381
|
|
25337
|
-
|
25338
|
-
reorder();
|
25339
|
-
}
|
25340
|
-
});
|
25341
|
-
|
25342
|
-
self.on('close hide', function(e) {
|
25343
|
-
if (e.control == self) {
|
25344
|
-
var i = zOrder.length;
|
25345
|
-
|
25346
|
-
while (i--) {
|
25347
|
-
if (zOrder[i] === self) {
|
25348
|
-
zOrder.splice(i, 1);
|
25349
|
-
}
|
25350
|
-
}
|
25351
|
-
|
25352
|
-
reorder();
|
25382
|
+
addRemove(true, self);
|
25353
25383
|
}
|
25354
25384
|
});
|
25355
25385
|
|
@@ -25420,6 +25450,8 @@ define("tinymce/ui/FloatPanel", [
|
|
25420
25450
|
*/
|
25421
25451
|
hide: function() {
|
25422
25452
|
removeVisiblePanel(this);
|
25453
|
+
addRemove(false, this);
|
25454
|
+
|
25423
25455
|
return this._super();
|
25424
25456
|
},
|
25425
25457
|
|
@@ -25441,9 +25473,12 @@ define("tinymce/ui/FloatPanel", [
|
|
25441
25473
|
close: function() {
|
25442
25474
|
var self = this;
|
25443
25475
|
|
25444
|
-
self.fire('close')
|
25476
|
+
if (!self.fire('close').isDefaultPrevented()) {
|
25477
|
+
self.remove();
|
25478
|
+
addRemove(false, self);
|
25479
|
+
}
|
25445
25480
|
|
25446
|
-
return self
|
25481
|
+
return self;
|
25447
25482
|
},
|
25448
25483
|
|
25449
25484
|
/**
|
@@ -26222,7 +26257,9 @@ define("tinymce/WindowManager", [
|
|
26222
26257
|
}
|
26223
26258
|
}
|
26224
26259
|
|
26225
|
-
|
26260
|
+
if (!windows.length) {
|
26261
|
+
editor.focus();
|
26262
|
+
}
|
26226
26263
|
});
|
26227
26264
|
|
26228
26265
|
// Handle data
|
@@ -26243,7 +26280,9 @@ define("tinymce/WindowManager", [
|
|
26243
26280
|
win.params = params || {};
|
26244
26281
|
|
26245
26282
|
// Takes a snapshot in the FocusManager of the selection before focus is lost to dialog
|
26246
|
-
|
26283
|
+
if (windows.length === 1) {
|
26284
|
+
editor.nodeChanged();
|
26285
|
+
}
|
26247
26286
|
|
26248
26287
|
return win.renderTo().reflow();
|
26249
26288
|
};
|
@@ -26760,10 +26799,17 @@ define("tinymce/util/Quirks", [
|
|
26760
26799
|
});
|
26761
26800
|
|
26762
26801
|
// Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event
|
26763
|
-
|
26802
|
+
// Needs to be both down/up due to weird rendering bug on Chrome Windows
|
26803
|
+
dom.bind(editor.getDoc(), 'mousedown mouseup', function(e) {
|
26764
26804
|
if (e.target == editor.getDoc().documentElement) {
|
26765
26805
|
editor.getBody().focus();
|
26766
|
-
|
26806
|
+
|
26807
|
+
if (e.type == 'mousedown') {
|
26808
|
+
// Edge case for mousedown, drag select and mousedown again within selection on Chrome Windows to render caret
|
26809
|
+
selection.placeCaretAt(e.clientX, e.clientY);
|
26810
|
+
} else {
|
26811
|
+
selection.setRng(selection.getRng());
|
26812
|
+
}
|
26767
26813
|
}
|
26768
26814
|
});
|
26769
26815
|
}
|
@@ -26839,10 +26885,11 @@ define("tinymce/util/Quirks", [
|
|
26839
26885
|
|
26840
26886
|
// Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250
|
26841
26887
|
// WebKit can't even do simple things like selecting an image
|
26842
|
-
// Needs
|
26888
|
+
// Needs to be the setBaseAndExtend or it will fail to select floated images
|
26843
26889
|
if (/^(IMG|HR)$/.test(target.nodeName)) {
|
26844
26890
|
e.preventDefault();
|
26845
26891
|
selection.getSel().setBaseAndExtent(target, 0, target, 1);
|
26892
|
+
editor.nodeChanged();
|
26846
26893
|
}
|
26847
26894
|
|
26848
26895
|
if (target.nodeName == 'A' && dom.hasClass(target, 'mce-item-anchor')) {
|
@@ -27486,6 +27533,7 @@ define("tinymce/util/Quirks", [
|
|
27486
27533
|
// you bind touch events so we need to do this manually
|
27487
27534
|
// TODO: Expand to the closest word? Touble tap still works.
|
27488
27535
|
editor.selection.placeCaretAt(endTouch.clientX, endTouch.clientY);
|
27536
|
+
editor.nodeChanged();
|
27489
27537
|
}
|
27490
27538
|
});
|
27491
27539
|
});
|
@@ -30662,7 +30710,7 @@ define("tinymce/EditorManager", [
|
|
30662
30710
|
* @property minorVersion
|
30663
30711
|
* @type String
|
30664
30712
|
*/
|
30665
|
-
minorVersion: '1.
|
30713
|
+
minorVersion: '1.5',
|
30666
30714
|
|
30667
30715
|
/**
|
30668
30716
|
* Release date of TinyMCE build.
|
@@ -30670,7 +30718,7 @@ define("tinymce/EditorManager", [
|
|
30670
30718
|
* @property releaseDate
|
30671
30719
|
* @type String
|
30672
30720
|
*/
|
30673
|
-
releaseDate: '2014-
|
30721
|
+
releaseDate: '2014-09-09',
|
30674
30722
|
|
30675
30723
|
/**
|
30676
30724
|
* Collection of editor instances.
|
@@ -36038,14 +36086,30 @@ define("tinymce/ui/MenuButton", [
|
|
36038
36086
|
*/
|
36039
36087
|
renderHtml: function() {
|
36040
36088
|
var self = this, id = self._id, prefix = self.classPrefix;
|
36041
|
-
var icon = self.settings.icon
|
36089
|
+
var icon = self.settings.icon, image;
|
36090
|
+
|
36091
|
+
image = self.settings.image;
|
36092
|
+
if (image) {
|
36093
|
+
icon = 'none';
|
36094
|
+
|
36095
|
+
// Support for [high dpi, low dpi] image sources
|
36096
|
+
if (typeof image != "string") {
|
36097
|
+
image = window.getSelection ? image[0] : image[1];
|
36098
|
+
}
|
36099
|
+
|
36100
|
+
image = ' style="background-image: url(\'' + image + '\')"';
|
36101
|
+
} else {
|
36102
|
+
image = '';
|
36103
|
+
}
|
36104
|
+
|
36105
|
+
icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
|
36042
36106
|
|
36043
36107
|
self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');
|
36044
36108
|
|
36045
36109
|
return (
|
36046
36110
|
'<div id="' + id + '" class="' + self.classes() + '" tabindex="-1" aria-labelledby="' + id + '">' +
|
36047
36111
|
'<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' +
|
36048
|
-
(icon ? '<i class="' + icon + '"></i>' : '') +
|
36112
|
+
(icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
|
36049
36113
|
'<span>' + (self._text ? (icon ? '\u00a0' : '') + self.encode(self._text) : '') + '</span>' +
|
36050
36114
|
' <i class="' + prefix + 'caret"></i>' +
|
36051
36115
|
'</button>' +
|
@@ -36957,13 +37021,29 @@ define("tinymce/ui/SplitButton", [
|
|
36957
37021
|
* @return {String} HTML representing the control.
|
36958
37022
|
*/
|
36959
37023
|
renderHtml: function() {
|
36960
|
-
var self = this, id = self._id, prefix = self.classPrefix;
|
36961
|
-
var icon = self.settings.icon
|
37024
|
+
var self = this, id = self._id, prefix = self.classPrefix, image;
|
37025
|
+
var icon = self.settings.icon;
|
37026
|
+
|
37027
|
+
image = self.settings.image;
|
37028
|
+
if (image) {
|
37029
|
+
icon = 'none';
|
37030
|
+
|
37031
|
+
// Support for [high dpi, low dpi] image sources
|
37032
|
+
if (typeof image != "string") {
|
37033
|
+
image = window.getSelection ? image[0] : image[1];
|
37034
|
+
}
|
37035
|
+
|
37036
|
+
image = ' style="background-image: url(\'' + image + '\')"';
|
37037
|
+
} else {
|
37038
|
+
image = '';
|
37039
|
+
}
|
37040
|
+
|
37041
|
+
icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
|
36962
37042
|
|
36963
37043
|
return (
|
36964
37044
|
'<div id="' + id + '" class="' + self.classes() + '" role="button" tabindex="-1">' +
|
36965
37045
|
'<button type="button" hidefocus="1" tabindex="-1">' +
|
36966
|
-
(icon ? '<i class="' + icon + '"></i>' : '') +
|
37046
|
+
(icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
|
36967
37047
|
(self._text ? (icon ? ' ' : '') + self._text : '') +
|
36968
37048
|
'</button>' +
|
36969
37049
|
'<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' +
|