tinymce-rails 4.0.6 → 4.0.7
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 +110 -49
- data/app/assets/source/tinymce/tinymce.js +110 -49
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/contextmenu/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/fullpage/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/importcss/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/media/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/searchreplace/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/spellchecker/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/skins/lightgray/content.inline.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/lightgray/content.min.css +1 -1
- 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/themes/modern/theme.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.jquery.js +9 -9
- data/vendor/assets/javascripts/tinymce/tinymce.js +10 -10
- metadata +2 -2
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.0.
|
1
|
+
// 4.0.7 (2013-10-02)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -822,7 +822,6 @@ define("tinymce/dom/EventUtils", [], function() {
|
|
822
822
|
callbackList.nativeHandler = nativeHandler;
|
823
823
|
|
824
824
|
eventMap[name] = callbackList;
|
825
|
-
callbackList.splice(ci, 1);
|
826
825
|
}
|
827
826
|
}
|
828
827
|
}
|
@@ -19991,6 +19990,13 @@ define("tinymce/ui/FloatPanel", [
|
|
19991
19990
|
visiblePanels.splice(i, 1);
|
19992
19991
|
}
|
19993
19992
|
}
|
19993
|
+
|
19994
|
+
i = zOrder.length;
|
19995
|
+
while (i--) {
|
19996
|
+
if (zOrder[i] === panel) {
|
19997
|
+
zOrder.splice(i, 1);
|
19998
|
+
}
|
19999
|
+
}
|
19994
20000
|
}
|
19995
20001
|
|
19996
20002
|
return FloatPanel;
|
@@ -20653,7 +20659,7 @@ define("tinymce/ui/Window", [
|
|
20653
20659
|
items.push(ctrl.getEl('inp'));
|
20654
20660
|
|
20655
20661
|
if (ctrl.getEl('open')) {
|
20656
|
-
items.push(ctrl.getEl('open')
|
20662
|
+
items.push(ctrl.getEl('open'));
|
20657
20663
|
}
|
20658
20664
|
} else {
|
20659
20665
|
items.push(ctrl.getEl());
|
@@ -20708,12 +20714,6 @@ define("tinymce/ui/Window", [
|
|
20708
20714
|
* @return {Object} Event arguments object.
|
20709
20715
|
*/
|
20710
20716
|
submit: function() {
|
20711
|
-
// Blur current control so a onchange is fired before submit
|
20712
|
-
var ctrl = this.getParentCtrl(document.activeElement);
|
20713
|
-
if (ctrl) {
|
20714
|
-
ctrl.blur();
|
20715
|
-
}
|
20716
|
-
|
20717
20717
|
return this.fire('submit', {data: this.toJSON()});
|
20718
20718
|
},
|
20719
20719
|
|
@@ -20872,6 +20872,7 @@ define("tinymce/ui/MessageBox", [
|
|
20872
20872
|
buttons = [
|
20873
20873
|
{type: "button", text: "Ok", subtype: "primary", onClick: function(e) {
|
20874
20874
|
e.control.parents()[1].close();
|
20875
|
+
callback(true);
|
20875
20876
|
}}
|
20876
20877
|
];
|
20877
20878
|
break;
|
@@ -21093,7 +21094,9 @@ define("tinymce/WindowManager", [
|
|
21093
21094
|
*/
|
21094
21095
|
self.alert = function(message, callback, scope) {
|
21095
21096
|
MessageBox.alert(message, function() {
|
21096
|
-
callback
|
21097
|
+
if (callback) {
|
21098
|
+
callback.call(scope || this);
|
21099
|
+
}
|
21097
21100
|
});
|
21098
21101
|
};
|
21099
21102
|
|
@@ -22393,6 +22396,14 @@ define("tinymce/util/Observable", [
|
|
22393
22396
|
}
|
22394
22397
|
|
22395
22398
|
return self;
|
22399
|
+
},
|
22400
|
+
|
22401
|
+
hasEventListeners: function(name) {
|
22402
|
+
var bindings = this[bindingsName];
|
22403
|
+
|
22404
|
+
name = name.toLowerCase();
|
22405
|
+
|
22406
|
+
return !(!bindings || !bindings[name] || bindings[name].length === 0);
|
22396
22407
|
}
|
22397
22408
|
};
|
22398
22409
|
});
|
@@ -22589,7 +22600,7 @@ define("tinymce/Editor", [
|
|
22589
22600
|
var extend = Tools.extend, each = Tools.each, explode = Tools.explode;
|
22590
22601
|
var inArray = Tools.inArray, trim = Tools.trim, resolve = Tools.resolve;
|
22591
22602
|
var Event = EventUtils.Event;
|
22592
|
-
var isGecko = Env.gecko, ie = Env.ie
|
22603
|
+
var isGecko = Env.gecko, ie = Env.ie;
|
22593
22604
|
|
22594
22605
|
function getEventTarget(editor, eventName) {
|
22595
22606
|
if (eventName == 'selectionchange' || eventName == 'drop') {
|
@@ -22826,6 +22837,7 @@ define("tinymce/Editor", [
|
|
22826
22837
|
// Add hidden input for non input elements inside form elements
|
22827
22838
|
if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(self.getElement().nodeName)) {
|
22828
22839
|
DOM.insertAfter(DOM.create('input', {type: 'hidden', name: id}), id);
|
22840
|
+
self.hasHiddenInput = true;
|
22829
22841
|
}
|
22830
22842
|
|
22831
22843
|
// Pass submit/reset from form to editor instance
|
@@ -23115,11 +23127,6 @@ define("tinymce/Editor", [
|
|
23115
23127
|
return self.initContentBody();
|
23116
23128
|
}
|
23117
23129
|
|
23118
|
-
// User specified a document.domain value
|
23119
|
-
if (document.domain && location.hostname != document.domain) {
|
23120
|
-
self.editorManager.relaxedDomain = document.domain;
|
23121
|
-
}
|
23122
|
-
|
23123
23130
|
self.iframeHTML = settings.doctype + '<html><head>';
|
23124
23131
|
|
23125
23132
|
// We only need to override paths if we have to
|
@@ -23157,13 +23164,14 @@ define("tinymce/Editor", [
|
|
23157
23164
|
self.iframeHTML += '</head><body id="' + bodyId + '" class="mce-content-body ' + bodyClass + '" ' +
|
23158
23165
|
'onload="window.parent.tinymce.get(\'' + self.id + '\').fire(\'load\');"><br></body></html>';
|
23159
23166
|
|
23160
|
-
|
23161
|
-
|
23162
|
-
|
23163
|
-
|
23164
|
-
|
23165
|
-
|
23166
|
-
|
23167
|
+
var domainRelaxUrl = 'javascript:(function(){'+
|
23168
|
+
'document.open();document.domain="' + document.domain + '";' +
|
23169
|
+
'var ed = window.parent.tinymce.get("' + self.id + '");document.write(ed.iframeHTML);' +
|
23170
|
+
'document.close();ed.initContentBody(true);})()';
|
23171
|
+
|
23172
|
+
// Domain relaxing is required since the user has messed around with document.domain
|
23173
|
+
if (document.domain != location.hostname) {
|
23174
|
+
url = domainRelaxUrl;
|
23167
23175
|
}
|
23168
23176
|
|
23169
23177
|
// Create iframe
|
@@ -23184,6 +23192,16 @@ define("tinymce/Editor", [
|
|
23184
23192
|
}
|
23185
23193
|
});
|
23186
23194
|
|
23195
|
+
// Try accessing the document this will fail on IE when document.domain is set to the same as location.hostname
|
23196
|
+
// Then we have to force domain relaxing using the domainRelaxUrl approach very ugly!!
|
23197
|
+
if (ie) {
|
23198
|
+
try {
|
23199
|
+
self.getDoc();
|
23200
|
+
} catch (e) {
|
23201
|
+
n.src = url = domainRelaxUrl;
|
23202
|
+
}
|
23203
|
+
}
|
23204
|
+
|
23187
23205
|
self.contentAreaContainer = o.iframeContainer;
|
23188
23206
|
|
23189
23207
|
if (o.editorContainer) {
|
@@ -23193,7 +23211,7 @@ define("tinymce/Editor", [
|
|
23193
23211
|
DOM.get(self.id).style.display = 'none';
|
23194
23212
|
DOM.setAttrib(self.id, 'aria-hidden', true);
|
23195
23213
|
|
23196
|
-
if (!
|
23214
|
+
if (!url) {
|
23197
23215
|
self.initContentBody();
|
23198
23216
|
}
|
23199
23217
|
|
@@ -23207,7 +23225,7 @@ define("tinymce/Editor", [
|
|
23207
23225
|
* @method initContentBody
|
23208
23226
|
* @private
|
23209
23227
|
*/
|
23210
|
-
initContentBody: function() {
|
23228
|
+
initContentBody: function(skipWrite) {
|
23211
23229
|
var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), body, contentCssText;
|
23212
23230
|
|
23213
23231
|
// Restore visibility on target element
|
@@ -23216,14 +23234,10 @@ define("tinymce/Editor", [
|
|
23216
23234
|
}
|
23217
23235
|
|
23218
23236
|
// Setup iframe body
|
23219
|
-
if (
|
23237
|
+
if (!skipWrite && !settings.content_editable) {
|
23220
23238
|
doc.open();
|
23221
23239
|
doc.write(self.iframeHTML);
|
23222
23240
|
doc.close();
|
23223
|
-
|
23224
|
-
if (self.editorManager.relaxedDomain) {
|
23225
|
-
doc.domain = self.editorManager.relaxedDomain;
|
23226
|
-
}
|
23227
23241
|
}
|
23228
23242
|
|
23229
23243
|
if (settings.content_editable) {
|
@@ -24524,12 +24538,18 @@ define("tinymce/Editor", [
|
|
24524
24538
|
* @method remove
|
24525
24539
|
*/
|
24526
24540
|
remove: function() {
|
24527
|
-
var self = this
|
24541
|
+
var self = this;
|
24528
24542
|
|
24529
24543
|
if (!self.removed) {
|
24530
24544
|
self.removed = 1; // Cancels post remove event execution
|
24531
24545
|
|
24546
|
+
// Remove any hidden input
|
24547
|
+
if (self.hasHiddenInput) {
|
24548
|
+
DOM.remove(self.getElement().nextSibling);
|
24549
|
+
}
|
24550
|
+
|
24532
24551
|
// Fixed bug where IE has a blinking cursor left from the editor
|
24552
|
+
var doc = self.getDoc();
|
24533
24553
|
if (ie && doc) {
|
24534
24554
|
doc.execCommand('SelectAll');
|
24535
24555
|
}
|
@@ -24546,6 +24566,7 @@ define("tinymce/Editor", [
|
|
24546
24566
|
Event.unbind(self.getDoc());
|
24547
24567
|
}
|
24548
24568
|
|
24569
|
+
var elm = self.getContainer();
|
24549
24570
|
Event.unbind(self.getBody());
|
24550
24571
|
Event.unbind(elm);
|
24551
24572
|
|
@@ -24597,6 +24618,13 @@ define("tinymce/Editor", [
|
|
24597
24618
|
return;
|
24598
24619
|
}
|
24599
24620
|
|
24621
|
+
// If user manually calls destroy and not remove
|
24622
|
+
// Users seems to have logic that calls destroy instead of remove
|
24623
|
+
if (!automatic && !self.removed) {
|
24624
|
+
self.remove();
|
24625
|
+
return;
|
24626
|
+
}
|
24627
|
+
|
24600
24628
|
// We must unbind on Gecko since it would otherwise produce the pesky "attempt
|
24601
24629
|
// to run compile-and-go script on a cleared scope" message
|
24602
24630
|
if (automatic && isGecko) {
|
@@ -24999,7 +25027,7 @@ define("tinymce/EditorManager", [
|
|
24999
25027
|
* @property minorVersion
|
25000
25028
|
* @type String
|
25001
25029
|
*/
|
25002
|
-
minorVersion : '0.
|
25030
|
+
minorVersion : '0.7',
|
25003
25031
|
|
25004
25032
|
/**
|
25005
25033
|
* Release date of TinyMCE build.
|
@@ -25007,7 +25035,7 @@ define("tinymce/EditorManager", [
|
|
25007
25035
|
* @property releaseDate
|
25008
25036
|
* @type String
|
25009
25037
|
*/
|
25010
|
-
releaseDate: '2013-
|
25038
|
+
releaseDate: '2013-10-02',
|
25011
25039
|
|
25012
25040
|
/**
|
25013
25041
|
* Collection of editor instances.
|
@@ -26992,12 +27020,24 @@ define("tinymce/ui/PanelButton", [
|
|
26992
27020
|
showPanel: function() {
|
26993
27021
|
var self = this, settings = self.settings;
|
26994
27022
|
|
26995
|
-
settings.panel.popover = true;
|
26996
|
-
settings.panel.autohide = true;
|
26997
27023
|
self.active(true);
|
26998
27024
|
|
26999
27025
|
if (!self.panel) {
|
27000
|
-
|
27026
|
+
var panelSettings = settings.panel;
|
27027
|
+
|
27028
|
+
// Wrap panel in grid layout if type if specified
|
27029
|
+
// This makes it possible to add forms or other containers directly in the panel option
|
27030
|
+
if (panelSettings.type) {
|
27031
|
+
panelSettings = {
|
27032
|
+
layout: 'grid',
|
27033
|
+
items: panelSettings
|
27034
|
+
};
|
27035
|
+
}
|
27036
|
+
|
27037
|
+
panelSettings.popover = true;
|
27038
|
+
panelSettings.autohide = true;
|
27039
|
+
|
27040
|
+
self.panel = new FloatPanel(panelSettings).on('hide', function() {
|
27001
27041
|
self.active(false);
|
27002
27042
|
}).parent(self).renderTo(self.getContainerElm());
|
27003
27043
|
self.panel.fire('show');
|
@@ -27006,7 +27046,7 @@ define("tinymce/ui/PanelButton", [
|
|
27006
27046
|
self.panel.show();
|
27007
27047
|
}
|
27008
27048
|
|
27009
|
-
self.panel.moveRel(self.getEl(), settings.popoverAlign || 'bc-tc');
|
27049
|
+
self.panel.moveRel(self.getEl(), settings.popoverAlign || ['bc-tl', 'bc-tc']);
|
27010
27050
|
},
|
27011
27051
|
|
27012
27052
|
/**
|
@@ -27289,11 +27329,11 @@ define("tinymce/ui/ComboBox", [
|
|
27289
27329
|
disabled: function(state) {
|
27290
27330
|
var self = this;
|
27291
27331
|
|
27292
|
-
self.
|
27293
|
-
|
27294
|
-
if (self._rendered) {
|
27332
|
+
if (self._rendered && typeof(state) != 'undefined') {
|
27295
27333
|
self.getEl('inp').disabled = state;
|
27296
27334
|
}
|
27335
|
+
|
27336
|
+
return self._super(state);
|
27297
27337
|
},
|
27298
27338
|
|
27299
27339
|
/**
|
@@ -27387,7 +27427,7 @@ define("tinymce/ui/ComboBox", [
|
|
27387
27427
|
return (
|
27388
27428
|
'<div id="' + id + '" class="' + self.classes() + '">' +
|
27389
27429
|
'<input id="' + id + '-inp" class="' + prefix + 'textbox ' + prefix + 'placeholder" value="' +
|
27390
|
-
value + '" hidefocus="true">' +
|
27430
|
+
value + '" hidefocus="true"' + (self.disabled() ? ' disabled="disabled"' : '') + '>' +
|
27391
27431
|
openBtnHtml +
|
27392
27432
|
'</div>'
|
27393
27433
|
);
|
@@ -27811,12 +27851,6 @@ define("tinymce/ui/Form", [
|
|
27811
27851
|
* @return {Object} Event arguments object.
|
27812
27852
|
*/
|
27813
27853
|
submit: function() {
|
27814
|
-
// Blur current control so a onchange is fired before submit
|
27815
|
-
var ctrl = this.getParentCtrl(document.activeElement);
|
27816
|
-
if (ctrl) {
|
27817
|
-
ctrl.blur();
|
27818
|
-
}
|
27819
|
-
|
27820
27854
|
return this.fire('submit', {data: this.toJSON()});
|
27821
27855
|
},
|
27822
27856
|
|
@@ -29937,6 +29971,10 @@ define("tinymce/ui/MenuItem", [
|
|
29937
29971
|
settings.icon = 'selected';
|
29938
29972
|
}
|
29939
29973
|
|
29974
|
+
if (!settings.preview && !settings.selectable) {
|
29975
|
+
self.addClass('menu-item-normal');
|
29976
|
+
}
|
29977
|
+
|
29940
29978
|
self.on('mousedown', function(e) {
|
29941
29979
|
e.preventDefault();
|
29942
29980
|
});
|
@@ -30616,7 +30654,7 @@ define("tinymce/ui/TabPanel", [
|
|
30616
30654
|
"tinymce/ui/Panel",
|
30617
30655
|
"tinymce/ui/DomUtils"
|
30618
30656
|
], function(Panel, DomUtils) {
|
30619
|
-
"use
|
30657
|
+
"use strict";
|
30620
30658
|
|
30621
30659
|
return Panel.extend({
|
30622
30660
|
lastIdx: 0,
|
@@ -30723,7 +30761,9 @@ define("tinymce/ui/TabPanel", [
|
|
30723
30761
|
initLayoutRect: function() {
|
30724
30762
|
var self = this, rect, minW, minH;
|
30725
30763
|
|
30726
|
-
minW =
|
30764
|
+
minW = self.getEl('head').offsetWidth;
|
30765
|
+
minW = minW < 0 ? 0 : minW;
|
30766
|
+
minH = 0;
|
30727
30767
|
self.items().each(function(item, i) {
|
30728
30768
|
minW = Math.max(minW, item.layoutRect().minW);
|
30729
30769
|
minH = Math.max(minH, item.layoutRect().minH);
|
@@ -30822,6 +30862,23 @@ define("tinymce/ui/TextBox", [
|
|
30822
30862
|
}
|
30823
30863
|
},
|
30824
30864
|
|
30865
|
+
/**
|
30866
|
+
* Getter/setter function for the disabled state.
|
30867
|
+
*
|
30868
|
+
* @method value
|
30869
|
+
* @param {Boolean} [state] State to be set.
|
30870
|
+
* @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation.
|
30871
|
+
*/
|
30872
|
+
disabled: function(state) {
|
30873
|
+
var self = this;
|
30874
|
+
|
30875
|
+
if (self._rendered && typeof(state) != 'undefined') {
|
30876
|
+
self.getEl().disabled = state;
|
30877
|
+
}
|
30878
|
+
|
30879
|
+
return self._super(state);
|
30880
|
+
},
|
30881
|
+
|
30825
30882
|
/**
|
30826
30883
|
* Getter/setter function for the control value.
|
30827
30884
|
*
|
@@ -30922,6 +30979,10 @@ define("tinymce/ui/TextBox", [
|
|
30922
30979
|
extraAttrs += ' type="' + settings.subtype + '"';
|
30923
30980
|
}
|
30924
30981
|
|
30982
|
+
if (self.disabled()) {
|
30983
|
+
extraAttrs += ' disabled="disabled"';
|
30984
|
+
}
|
30985
|
+
|
30925
30986
|
if (settings.multiline) {
|
30926
30987
|
return (
|
30927
30988
|
'<textarea id="' + id + '" class="' + self.classes() + '" ' +
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.0.
|
1
|
+
// 4.0.7 (2013-10-02)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -486,7 +486,6 @@ define("tinymce/dom/EventUtils", [], function() {
|
|
486
486
|
callbackList.nativeHandler = nativeHandler;
|
487
487
|
|
488
488
|
eventMap[name] = callbackList;
|
489
|
-
callbackList.splice(ci, 1);
|
490
489
|
}
|
491
490
|
}
|
492
491
|
}
|
@@ -22610,6 +22609,13 @@ define("tinymce/ui/FloatPanel", [
|
|
22610
22609
|
visiblePanels.splice(i, 1);
|
22611
22610
|
}
|
22612
22611
|
}
|
22612
|
+
|
22613
|
+
i = zOrder.length;
|
22614
|
+
while (i--) {
|
22615
|
+
if (zOrder[i] === panel) {
|
22616
|
+
zOrder.splice(i, 1);
|
22617
|
+
}
|
22618
|
+
}
|
22613
22619
|
}
|
22614
22620
|
|
22615
22621
|
return FloatPanel;
|
@@ -23272,7 +23278,7 @@ define("tinymce/ui/Window", [
|
|
23272
23278
|
items.push(ctrl.getEl('inp'));
|
23273
23279
|
|
23274
23280
|
if (ctrl.getEl('open')) {
|
23275
|
-
items.push(ctrl.getEl('open')
|
23281
|
+
items.push(ctrl.getEl('open'));
|
23276
23282
|
}
|
23277
23283
|
} else {
|
23278
23284
|
items.push(ctrl.getEl());
|
@@ -23327,12 +23333,6 @@ define("tinymce/ui/Window", [
|
|
23327
23333
|
* @return {Object} Event arguments object.
|
23328
23334
|
*/
|
23329
23335
|
submit: function() {
|
23330
|
-
// Blur current control so a onchange is fired before submit
|
23331
|
-
var ctrl = this.getParentCtrl(document.activeElement);
|
23332
|
-
if (ctrl) {
|
23333
|
-
ctrl.blur();
|
23334
|
-
}
|
23335
|
-
|
23336
23336
|
return this.fire('submit', {data: this.toJSON()});
|
23337
23337
|
},
|
23338
23338
|
|
@@ -23491,6 +23491,7 @@ define("tinymce/ui/MessageBox", [
|
|
23491
23491
|
buttons = [
|
23492
23492
|
{type: "button", text: "Ok", subtype: "primary", onClick: function(e) {
|
23493
23493
|
e.control.parents()[1].close();
|
23494
|
+
callback(true);
|
23494
23495
|
}}
|
23495
23496
|
];
|
23496
23497
|
break;
|
@@ -23712,7 +23713,9 @@ define("tinymce/WindowManager", [
|
|
23712
23713
|
*/
|
23713
23714
|
self.alert = function(message, callback, scope) {
|
23714
23715
|
MessageBox.alert(message, function() {
|
23715
|
-
callback
|
23716
|
+
if (callback) {
|
23717
|
+
callback.call(scope || this);
|
23718
|
+
}
|
23716
23719
|
});
|
23717
23720
|
};
|
23718
23721
|
|
@@ -25012,6 +25015,14 @@ define("tinymce/util/Observable", [
|
|
25012
25015
|
}
|
25013
25016
|
|
25014
25017
|
return self;
|
25018
|
+
},
|
25019
|
+
|
25020
|
+
hasEventListeners: function(name) {
|
25021
|
+
var bindings = this[bindingsName];
|
25022
|
+
|
25023
|
+
name = name.toLowerCase();
|
25024
|
+
|
25025
|
+
return !(!bindings || !bindings[name] || bindings[name].length === 0);
|
25015
25026
|
}
|
25016
25027
|
};
|
25017
25028
|
});
|
@@ -25208,7 +25219,7 @@ define("tinymce/Editor", [
|
|
25208
25219
|
var extend = Tools.extend, each = Tools.each, explode = Tools.explode;
|
25209
25220
|
var inArray = Tools.inArray, trim = Tools.trim, resolve = Tools.resolve;
|
25210
25221
|
var Event = EventUtils.Event;
|
25211
|
-
var isGecko = Env.gecko, ie = Env.ie
|
25222
|
+
var isGecko = Env.gecko, ie = Env.ie;
|
25212
25223
|
|
25213
25224
|
function getEventTarget(editor, eventName) {
|
25214
25225
|
if (eventName == 'selectionchange' || eventName == 'drop') {
|
@@ -25445,6 +25456,7 @@ define("tinymce/Editor", [
|
|
25445
25456
|
// Add hidden input for non input elements inside form elements
|
25446
25457
|
if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(self.getElement().nodeName)) {
|
25447
25458
|
DOM.insertAfter(DOM.create('input', {type: 'hidden', name: id}), id);
|
25459
|
+
self.hasHiddenInput = true;
|
25448
25460
|
}
|
25449
25461
|
|
25450
25462
|
// Pass submit/reset from form to editor instance
|
@@ -25734,11 +25746,6 @@ define("tinymce/Editor", [
|
|
25734
25746
|
return self.initContentBody();
|
25735
25747
|
}
|
25736
25748
|
|
25737
|
-
// User specified a document.domain value
|
25738
|
-
if (document.domain && location.hostname != document.domain) {
|
25739
|
-
self.editorManager.relaxedDomain = document.domain;
|
25740
|
-
}
|
25741
|
-
|
25742
25749
|
self.iframeHTML = settings.doctype + '<html><head>';
|
25743
25750
|
|
25744
25751
|
// We only need to override paths if we have to
|
@@ -25776,13 +25783,14 @@ define("tinymce/Editor", [
|
|
25776
25783
|
self.iframeHTML += '</head><body id="' + bodyId + '" class="mce-content-body ' + bodyClass + '" ' +
|
25777
25784
|
'onload="window.parent.tinymce.get(\'' + self.id + '\').fire(\'load\');"><br></body></html>';
|
25778
25785
|
|
25779
|
-
|
25780
|
-
|
25781
|
-
|
25782
|
-
|
25783
|
-
|
25784
|
-
|
25785
|
-
|
25786
|
+
var domainRelaxUrl = 'javascript:(function(){'+
|
25787
|
+
'document.open();document.domain="' + document.domain + '";' +
|
25788
|
+
'var ed = window.parent.tinymce.get("' + self.id + '");document.write(ed.iframeHTML);' +
|
25789
|
+
'document.close();ed.initContentBody(true);})()';
|
25790
|
+
|
25791
|
+
// Domain relaxing is required since the user has messed around with document.domain
|
25792
|
+
if (document.domain != location.hostname) {
|
25793
|
+
url = domainRelaxUrl;
|
25786
25794
|
}
|
25787
25795
|
|
25788
25796
|
// Create iframe
|
@@ -25803,6 +25811,16 @@ define("tinymce/Editor", [
|
|
25803
25811
|
}
|
25804
25812
|
});
|
25805
25813
|
|
25814
|
+
// Try accessing the document this will fail on IE when document.domain is set to the same as location.hostname
|
25815
|
+
// Then we have to force domain relaxing using the domainRelaxUrl approach very ugly!!
|
25816
|
+
if (ie) {
|
25817
|
+
try {
|
25818
|
+
self.getDoc();
|
25819
|
+
} catch (e) {
|
25820
|
+
n.src = url = domainRelaxUrl;
|
25821
|
+
}
|
25822
|
+
}
|
25823
|
+
|
25806
25824
|
self.contentAreaContainer = o.iframeContainer;
|
25807
25825
|
|
25808
25826
|
if (o.editorContainer) {
|
@@ -25812,7 +25830,7 @@ define("tinymce/Editor", [
|
|
25812
25830
|
DOM.get(self.id).style.display = 'none';
|
25813
25831
|
DOM.setAttrib(self.id, 'aria-hidden', true);
|
25814
25832
|
|
25815
|
-
if (!
|
25833
|
+
if (!url) {
|
25816
25834
|
self.initContentBody();
|
25817
25835
|
}
|
25818
25836
|
|
@@ -25826,7 +25844,7 @@ define("tinymce/Editor", [
|
|
25826
25844
|
* @method initContentBody
|
25827
25845
|
* @private
|
25828
25846
|
*/
|
25829
|
-
initContentBody: function() {
|
25847
|
+
initContentBody: function(skipWrite) {
|
25830
25848
|
var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), body, contentCssText;
|
25831
25849
|
|
25832
25850
|
// Restore visibility on target element
|
@@ -25835,14 +25853,10 @@ define("tinymce/Editor", [
|
|
25835
25853
|
}
|
25836
25854
|
|
25837
25855
|
// Setup iframe body
|
25838
|
-
if (
|
25856
|
+
if (!skipWrite && !settings.content_editable) {
|
25839
25857
|
doc.open();
|
25840
25858
|
doc.write(self.iframeHTML);
|
25841
25859
|
doc.close();
|
25842
|
-
|
25843
|
-
if (self.editorManager.relaxedDomain) {
|
25844
|
-
doc.domain = self.editorManager.relaxedDomain;
|
25845
|
-
}
|
25846
25860
|
}
|
25847
25861
|
|
25848
25862
|
if (settings.content_editable) {
|
@@ -27143,12 +27157,18 @@ define("tinymce/Editor", [
|
|
27143
27157
|
* @method remove
|
27144
27158
|
*/
|
27145
27159
|
remove: function() {
|
27146
|
-
var self = this
|
27160
|
+
var self = this;
|
27147
27161
|
|
27148
27162
|
if (!self.removed) {
|
27149
27163
|
self.removed = 1; // Cancels post remove event execution
|
27150
27164
|
|
27165
|
+
// Remove any hidden input
|
27166
|
+
if (self.hasHiddenInput) {
|
27167
|
+
DOM.remove(self.getElement().nextSibling);
|
27168
|
+
}
|
27169
|
+
|
27151
27170
|
// Fixed bug where IE has a blinking cursor left from the editor
|
27171
|
+
var doc = self.getDoc();
|
27152
27172
|
if (ie && doc) {
|
27153
27173
|
doc.execCommand('SelectAll');
|
27154
27174
|
}
|
@@ -27165,6 +27185,7 @@ define("tinymce/Editor", [
|
|
27165
27185
|
Event.unbind(self.getDoc());
|
27166
27186
|
}
|
27167
27187
|
|
27188
|
+
var elm = self.getContainer();
|
27168
27189
|
Event.unbind(self.getBody());
|
27169
27190
|
Event.unbind(elm);
|
27170
27191
|
|
@@ -27216,6 +27237,13 @@ define("tinymce/Editor", [
|
|
27216
27237
|
return;
|
27217
27238
|
}
|
27218
27239
|
|
27240
|
+
// If user manually calls destroy and not remove
|
27241
|
+
// Users seems to have logic that calls destroy instead of remove
|
27242
|
+
if (!automatic && !self.removed) {
|
27243
|
+
self.remove();
|
27244
|
+
return;
|
27245
|
+
}
|
27246
|
+
|
27219
27247
|
// We must unbind on Gecko since it would otherwise produce the pesky "attempt
|
27220
27248
|
// to run compile-and-go script on a cleared scope" message
|
27221
27249
|
if (automatic && isGecko) {
|
@@ -27618,7 +27646,7 @@ define("tinymce/EditorManager", [
|
|
27618
27646
|
* @property minorVersion
|
27619
27647
|
* @type String
|
27620
27648
|
*/
|
27621
|
-
minorVersion : '0.
|
27649
|
+
minorVersion : '0.7',
|
27622
27650
|
|
27623
27651
|
/**
|
27624
27652
|
* Release date of TinyMCE build.
|
@@ -27626,7 +27654,7 @@ define("tinymce/EditorManager", [
|
|
27626
27654
|
* @property releaseDate
|
27627
27655
|
* @type String
|
27628
27656
|
*/
|
27629
|
-
releaseDate: '2013-
|
27657
|
+
releaseDate: '2013-10-02',
|
27630
27658
|
|
27631
27659
|
/**
|
27632
27660
|
* Collection of editor instances.
|
@@ -29611,12 +29639,24 @@ define("tinymce/ui/PanelButton", [
|
|
29611
29639
|
showPanel: function() {
|
29612
29640
|
var self = this, settings = self.settings;
|
29613
29641
|
|
29614
|
-
settings.panel.popover = true;
|
29615
|
-
settings.panel.autohide = true;
|
29616
29642
|
self.active(true);
|
29617
29643
|
|
29618
29644
|
if (!self.panel) {
|
29619
|
-
|
29645
|
+
var panelSettings = settings.panel;
|
29646
|
+
|
29647
|
+
// Wrap panel in grid layout if type if specified
|
29648
|
+
// This makes it possible to add forms or other containers directly in the panel option
|
29649
|
+
if (panelSettings.type) {
|
29650
|
+
panelSettings = {
|
29651
|
+
layout: 'grid',
|
29652
|
+
items: panelSettings
|
29653
|
+
};
|
29654
|
+
}
|
29655
|
+
|
29656
|
+
panelSettings.popover = true;
|
29657
|
+
panelSettings.autohide = true;
|
29658
|
+
|
29659
|
+
self.panel = new FloatPanel(panelSettings).on('hide', function() {
|
29620
29660
|
self.active(false);
|
29621
29661
|
}).parent(self).renderTo(self.getContainerElm());
|
29622
29662
|
self.panel.fire('show');
|
@@ -29625,7 +29665,7 @@ define("tinymce/ui/PanelButton", [
|
|
29625
29665
|
self.panel.show();
|
29626
29666
|
}
|
29627
29667
|
|
29628
|
-
self.panel.moveRel(self.getEl(), settings.popoverAlign || 'bc-tc');
|
29668
|
+
self.panel.moveRel(self.getEl(), settings.popoverAlign || ['bc-tl', 'bc-tc']);
|
29629
29669
|
},
|
29630
29670
|
|
29631
29671
|
/**
|
@@ -29908,11 +29948,11 @@ define("tinymce/ui/ComboBox", [
|
|
29908
29948
|
disabled: function(state) {
|
29909
29949
|
var self = this;
|
29910
29950
|
|
29911
|
-
self.
|
29912
|
-
|
29913
|
-
if (self._rendered) {
|
29951
|
+
if (self._rendered && typeof(state) != 'undefined') {
|
29914
29952
|
self.getEl('inp').disabled = state;
|
29915
29953
|
}
|
29954
|
+
|
29955
|
+
return self._super(state);
|
29916
29956
|
},
|
29917
29957
|
|
29918
29958
|
/**
|
@@ -30006,7 +30046,7 @@ define("tinymce/ui/ComboBox", [
|
|
30006
30046
|
return (
|
30007
30047
|
'<div id="' + id + '" class="' + self.classes() + '">' +
|
30008
30048
|
'<input id="' + id + '-inp" class="' + prefix + 'textbox ' + prefix + 'placeholder" value="' +
|
30009
|
-
value + '" hidefocus="true">' +
|
30049
|
+
value + '" hidefocus="true"' + (self.disabled() ? ' disabled="disabled"' : '') + '>' +
|
30010
30050
|
openBtnHtml +
|
30011
30051
|
'</div>'
|
30012
30052
|
);
|
@@ -30430,12 +30470,6 @@ define("tinymce/ui/Form", [
|
|
30430
30470
|
* @return {Object} Event arguments object.
|
30431
30471
|
*/
|
30432
30472
|
submit: function() {
|
30433
|
-
// Blur current control so a onchange is fired before submit
|
30434
|
-
var ctrl = this.getParentCtrl(document.activeElement);
|
30435
|
-
if (ctrl) {
|
30436
|
-
ctrl.blur();
|
30437
|
-
}
|
30438
|
-
|
30439
30473
|
return this.fire('submit', {data: this.toJSON()});
|
30440
30474
|
},
|
30441
30475
|
|
@@ -32556,6 +32590,10 @@ define("tinymce/ui/MenuItem", [
|
|
32556
32590
|
settings.icon = 'selected';
|
32557
32591
|
}
|
32558
32592
|
|
32593
|
+
if (!settings.preview && !settings.selectable) {
|
32594
|
+
self.addClass('menu-item-normal');
|
32595
|
+
}
|
32596
|
+
|
32559
32597
|
self.on('mousedown', function(e) {
|
32560
32598
|
e.preventDefault();
|
32561
32599
|
});
|
@@ -33235,7 +33273,7 @@ define("tinymce/ui/TabPanel", [
|
|
33235
33273
|
"tinymce/ui/Panel",
|
33236
33274
|
"tinymce/ui/DomUtils"
|
33237
33275
|
], function(Panel, DomUtils) {
|
33238
|
-
"use
|
33276
|
+
"use strict";
|
33239
33277
|
|
33240
33278
|
return Panel.extend({
|
33241
33279
|
lastIdx: 0,
|
@@ -33342,7 +33380,9 @@ define("tinymce/ui/TabPanel", [
|
|
33342
33380
|
initLayoutRect: function() {
|
33343
33381
|
var self = this, rect, minW, minH;
|
33344
33382
|
|
33345
|
-
minW =
|
33383
|
+
minW = self.getEl('head').offsetWidth;
|
33384
|
+
minW = minW < 0 ? 0 : minW;
|
33385
|
+
minH = 0;
|
33346
33386
|
self.items().each(function(item, i) {
|
33347
33387
|
minW = Math.max(minW, item.layoutRect().minW);
|
33348
33388
|
minH = Math.max(minH, item.layoutRect().minH);
|
@@ -33441,6 +33481,23 @@ define("tinymce/ui/TextBox", [
|
|
33441
33481
|
}
|
33442
33482
|
},
|
33443
33483
|
|
33484
|
+
/**
|
33485
|
+
* Getter/setter function for the disabled state.
|
33486
|
+
*
|
33487
|
+
* @method value
|
33488
|
+
* @param {Boolean} [state] State to be set.
|
33489
|
+
* @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation.
|
33490
|
+
*/
|
33491
|
+
disabled: function(state) {
|
33492
|
+
var self = this;
|
33493
|
+
|
33494
|
+
if (self._rendered && typeof(state) != 'undefined') {
|
33495
|
+
self.getEl().disabled = state;
|
33496
|
+
}
|
33497
|
+
|
33498
|
+
return self._super(state);
|
33499
|
+
},
|
33500
|
+
|
33444
33501
|
/**
|
33445
33502
|
* Getter/setter function for the control value.
|
33446
33503
|
*
|
@@ -33541,6 +33598,10 @@ define("tinymce/ui/TextBox", [
|
|
33541
33598
|
extraAttrs += ' type="' + settings.subtype + '"';
|
33542
33599
|
}
|
33543
33600
|
|
33601
|
+
if (self.disabled()) {
|
33602
|
+
extraAttrs += ' disabled="disabled"';
|
33603
|
+
}
|
33604
|
+
|
33544
33605
|
if (settings.multiline) {
|
33545
33606
|
return (
|
33546
33607
|
'<textarea id="' + id + '" class="' + self.classes() + '" ' +
|