Skip to content

Commit a2c91ba

Browse files
author
ephox
committed
Added version 5.5.0 release.
1 parent 71197b6 commit a2c91ba

File tree

122 files changed

+32902
-28499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+32902
-28499
lines changed

changelog.txt

+46
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,49 @@
1+
Version 5.5.0 (2020-09-29)
2+
Added a TypeScript declaration file to the bundle output for TinyMCE core #TINY-3785
3+
Added new `table_column_resizing` setting to control how table columns are resized when using the resize bars #TINY-6001
4+
Added the ability to remove images on a failed upload using the `images_upload_handler` failure callback #TINY-6011
5+
Added `hasPlugin` function to the editor API to determine if a plugin exists or not #TINY-766
6+
Added new `ToggleToolbarDrawer` command and query state handler to allow the toolbar drawer to be programmatically toggled and the toggle state to be checked #TINY-6032
7+
Added the ability to use `colgroup` elements in tables #TINY-6050
8+
Added a new setting `table_use_colgroups` for toggling whether colgroups are used in new tables #TINY-6050
9+
Added the ability to delete and navigate HTML media elements without the `media` plugin #TINY-4211
10+
Added `fullscreen_native` setting to the `fullscreen` plugin to enable use of the entire monitor #TINY-6284
11+
Added table related oxide variables to the Style API for more granular control over table cell selection appearance #TINY-6311
12+
Added new `toolbar_persist` setting to control the visibility of the inline toolbar #TINY-4847
13+
Added new APIs to allow for programmatic control of the inline toolbar visibility #TINY-4847
14+
Added the `origin` property to the `ObjectResized` and `ObjectResizeStart` events, to specify which handle the resize was performed on #TINY-6242
15+
Added new StyleSheetLoader `unload` and `unloadAll` APIs to allow loaded stylesheets to be removed #TINY-3926
16+
Added the `LineHeight` query command and action to the editor #TINY-4843
17+
Added the `lineheight` toolbar and menu items, and added `lineheight` to the default format menu #TINY-4843
18+
Added a new `contextmenu_avoid_overlap` setting to allow context menus to avoid overlapping matched nodes #TINY-6036
19+
Added new listbox dialog UI component for rendering a dropdown that allows nested options #TINY-2236
20+
Added back the ability to use nested items in the `image_class_list`, `link_class_list`, `link_list`, `table_class_list`, `table_cell_class_list`, and `table_row_class_list` settings #TINY-2236
21+
Changed how CSS manipulates table cells when selecting multiple cells to achieve a semi-transparent selection #TINY-6311
22+
Changed the `target` property on fired events to use the native event target. The original target for an open shadow root can be obtained using `event.getComposedPath()` #TINY-6128
23+
Changed the editor to clean-up loaded CSS stylesheets when all editors using the stylesheet have been removed #TINY-3926
24+
Changed `imagetools` context menu icon for accessing the `image` dialog to use the `image` icon #TINY-4141
25+
Changed the `editor.insertContent()` and `editor.selection.setContent()` APIs to retain leading and trailing whitespace #TINY-5966
26+
Changed the `table` plugin `Column` menu to include the cut, copy and paste column menu items #TINY-6374
27+
Changed the default table styles in the content CSS files to better support the styling options available in the `table` dialog #TINY-6179
28+
Deprecated the `Env.experimentalShadowDom` flag #TINY-6128
29+
Fixed tables with no borders displaying with the default border styles in the `preview` dialog #TINY-6179
30+
Fixed loss of whitespace when inserting content after a non-breaking space #TINY-5966
31+
Fixed the `event.getComposedPath()` function throwing an exception for events fired from the editor #TINY-6128
32+
Fixed notifications not appearing when the editor is within a ShadowRoot #TINY-6354
33+
Fixed focus issues with inline dialogs when the editor is within a ShadowRoot #TINY-6360
34+
Fixed the `template` plugin previews missing some content styles #TINY-6115
35+
Fixed the `media` plugin not saving the alternative source url in some situations #TINY-4113
36+
Fixed an issue where column resizing using the resize bars was inconsistent between fixed and relative table widths #TINY-6001
37+
Fixed an issue where dragging and dropping within a table would select table cells #TINY-5950
38+
Fixed up and down keyboard navigation not working for inline `contenteditable="false"` elements #TINY-6226
39+
Fixed dialog not retrieving `close` icon from icon pack #TINY-6445
40+
Fixed the `unlink` toolbar button not working when selecting multiple links #TINY-4867
41+
Fixed the `link` dialog not showing the "Text to display" field in some valid cases #TINY-5205
42+
Fixed the `DOMUtils.split()` API incorrectly removing some content #TINY-6294
43+
Fixed pressing the escape key not focusing the editor when using multiple toolbars #TINY-6230
44+
Fixed the `dirty` flag not being correctly set during an `AddUndo` event #TINY-4707
45+
Fixed `editor.selection.setCursorLocation` incorrectly placing the cursor outside `pre` elements in some circumstances #TINY-4058
46+
Fixed an exception being thrown when pressing the enter key inside pre elements while `br_in_pre` setting is false #TINY-4058
147
Version 5.4.2 (2020-08-17)
248
Fixed the editor not resizing when resizing the browser window in fullscreen mode #TINY-3511
349
Fixed clicking on notifications causing inline editors to hide #TINY-6058

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tinymce/tinymce",
3-
"version": "5.4.2",
3+
"version": "5.5.0",
44
"description": "Web based JavaScript HTML WYSIWYG editor control.",
55
"license": [
66
"LGPL-2.1-only"

icons/default/icons.js

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

icons/default/icons.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jquery.tinymce.js

+18-18
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
* @class tinymce.core.JqueryIntegration
1111
* @private
1212
*/
13-
!function(){var f,c,u,p,d,s=[];d="undefined"!=typeof global?global:window,p=d.jQuery;var v=function(){
13+
!function(){var f,c,u,s=[],p="undefined"!=typeof global?global:window,d=p.jQuery,v=function(){
1414
// Reference to tinymce needs to be lazily evaluated since tinymce
1515
// might be loaded through the compressor or other means
16-
return d.tinymce};p.fn.tinymce=function(o){var e,t,i,l=this,r="";
16+
return p.tinymce};d.fn.tinymce=function(o){var e,t,i,l=this,r="";
1717
// No match then just ignore the call
1818
if(!l.length)return l;
1919
// Get editor instance
2020
if(!o)return v()?v().get(l[0].id):null;l.css("visibility","hidden");// Hide textarea to avoid flicker
21-
var n=function(){var a=[],c=0;
21+
var n,a=function(){var a=[],c=0;
2222
// Apply patches to the jQuery object, only once
2323
u||(m(),u=!0),
2424
// Create an editor instance for each matched node
@@ -37,33 +37,33 @@ r&&++c==a.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:v().resolve(t
3737
t.apply(e||v(),a))}))}),
3838
// Render the editor instances in a separate loop since we
3939
// need to have the full editors array used in the onInit calls
40-
p.each(a,function(e,t){t.render()})};
40+
d.each(a,function(e,t){t.render()})};
4141
// Load TinyMCE on demand, if we need to
42-
if(d.tinymce||c||!(e=o.script_url))
42+
return p.tinymce||c||!(e=o.script_url)?
4343
// Delay the init call until tinymce is loaded
44-
1===c?s.push(n):n();else{c=1,t=e.substring(0,e.lastIndexOf("/")),
44+
1===c?s.push(a):a():(c=1,t=e.substring(0,e.lastIndexOf("/")),
4545
// Check if it's a dev/src version they want to load then
4646
// make sure that all plugins, themes etc are loaded in source mode as well
4747
-1!=e.indexOf(".min")&&(r=".min"),
4848
// Setup tinyMCEPreInit object this will later be used by the TinyMCE
4949
// core script to locate other resources like CSS files, dialogs etc
5050
// You can also predefined a tinyMCEPreInit object and then it will use that instead
51-
d.tinymce=d.tinyMCEPreInit||{base:t,suffix:r},
51+
p.tinymce=p.tinyMCEPreInit||{base:t,suffix:r},
5252
// url contains gzip then we assume it's a compressor
5353
-1!=e.indexOf("gzip")&&(i=o.language||"en",e=e+(/\?/.test(e)?"&":"?")+"js=true&core=true&suffix="+escape(r)+"&themes="+escape(o.theme||"modern")+"&plugins="+escape(o.plugins||"")+"&languages="+(i||""),
5454
// Check if compressor script is already loaded otherwise setup a basic one
55-
d.tinyMCE_GZ||(d.tinyMCE_GZ={start:function(){var n=function(e){v().ScriptLoader.markDone(v().baseURI.toAbsolute(e))};
55+
p.tinyMCE_GZ||(p.tinyMCE_GZ={start:function(){var n=function(e){v().ScriptLoader.markDone(v().baseURI.toAbsolute(e))};
5656
// Add core languages
5757
n("langs/"+i+".js"),
5858
// Add themes with languages
5959
n("themes/"+o.theme+"/theme"+r+".js"),n("themes/"+o.theme+"/langs/"+i+".js"),
6060
// Add plugins with languages
61-
p.each(o.plugins.split(","),function(e,t){t&&(n("plugins/"+t+"/plugin"+r+".js"),n("plugins/"+t+"/langs/"+i+".js"))})},end:function(){}}));var a=document.createElement("script");a.type="text/javascript",a.onload=a.onreadystatechange=function(e){e=e||window.event,2===c||"load"!=e.type&&!/complete|loaded/.test(a.readyState)||(v().dom.Event.domLoaded=1,c=2,
61+
d.each(o.plugins.split(","),function(e,t){t&&(n("plugins/"+t+"/plugin"+r+".js"),n("plugins/"+t+"/langs/"+i+".js"))})},end:function(){}})),(n=document.createElement("script")).type="text/javascript",n.onload=n.onreadystatechange=function(e){e=e||window.event,2===c||"load"!=e.type&&!/complete|loaded/.test(n.readyState)||(v().dom.Event.domLoaded=1,c=2,
6262
// Execute callback after mainscript has been loaded and before the initialization occurs
63-
o.script_loaded&&o.script_loaded(),n(),p.each(s,function(e,t){t()}))},a.src=e,document.body.appendChild(a)}return l},
63+
o.script_loaded&&o.script_loaded(),a(),d.each(s,function(e,t){t()}))},n.src=e,document.body.appendChild(n)),l},
6464
// Add :tinymce pseudo selector this will select elements that has been converted into editor instances
6565
// it's now possible to use things like $('*:tinymce') to get all TinyMCE bound elements.
66-
p.extend(p.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in d&&(t=v().get(e.id))&&t.editorManager===v())}});
66+
d.extend(d.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in p&&(t=v().get(e.id))&&t.editorManager===v())}});
6767
// This function patches internal jQuery functions so that if
6868
// you for example remove an div element containing an editor it's
6969
// automatically destroyed by the TinyMCE API
@@ -75,18 +75,18 @@ var r=function(e){
7575
// Handle set value
7676
/*jshint eqnull:true */if(null!=i)r.call(t),
7777
// Saves the contents before get/set value of textarea/div
78-
t.each(function(e,t){var n;(n=v().get(t.id))&&n.setContent(i)});else if(0<t.length&&(e=v().get(t[0].id)))return e.getContent()},l=function(e){var t=null;return e&&e.id&&d.tinymce&&(t=v().get(e.id)),t},u=function(e){return!!(e&&e.length&&d.tinymce&&e.is(":tinymce"))},s={};
78+
t.each(function(e,t){var n;(n=v().get(t.id))&&n.setContent(i)});else if(0<t.length&&(e=v().get(t[0].id)))return e.getContent()},l=function(e){var t=null;return e&&e.id&&p.tinymce&&(t=v().get(e.id)),t},u=function(e){return!!(e&&e.length&&p.tinymce&&e.is(":tinymce"))},s={};
7979
// Loads or saves contents from/to textarea if the value
8080
// argument is defined it will set the TinyMCE internal contents
8181
// Patch some setter/getter functions these will
8282
// now be able to set/get the contents of editor instances for
8383
// example $('#editorid').html('Content'); will update the TinyMCE iframe instance
84-
p.each(["text","html","val"],function(e,t){var a=s[t]=p.fn[t],c="text"===t;p.fn[t]=function(e){var t=this;if(!u(t))return a.apply(t,arguments);if(e!==f)return o.call(t.filter(":tinymce"),e),a.apply(t.not(":tinymce"),arguments),t;// return original set for chaining
85-
var i="",r=arguments;return(c?t:t.eq(0)).each(function(e,t){var n=l(t);i+=n?c?n.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):n.getContent({save:!0}):a.apply(p(t),r)}),i}}),
84+
d.each(["text","html","val"],function(e,t){var a=s[t]=d.fn[t],c="text"===t;d.fn[t]=function(e){var t=this;if(!u(t))return a.apply(t,arguments);if(e!==f)return o.call(t.filter(":tinymce"),e),a.apply(t.not(":tinymce"),arguments),t;// return original set for chaining
85+
var i="",r=arguments;return(c?t:t.eq(0)).each(function(e,t){var n=l(t);i+=n?c?n.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):n.getContent({save:!0}):a.apply(d(t),r)}),i}}),
8686
// Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe
87-
p.each(["append","prepend"],function(e,t){var n=s[t]=p.fn[t],r="prepend"===t;p.fn[t]=function(i){var e=this;return u(e)?i!==f?("string"==typeof i&&e.filter(":tinymce").each(function(e,t){var n=l(t);n&&n.setContent(r?i+n.getContent():n.getContent()+i)}),n.apply(e.not(":tinymce"),arguments),e):void 0:n.apply(e,arguments)}}),
87+
d.each(["append","prepend"],function(e,t){var n=s[t]=d.fn[t],r="prepend"===t;d.fn[t]=function(i){var e=this;return u(e)?i!==f?("string"==typeof i&&e.filter(":tinymce").each(function(e,t){var n=l(t);n&&n.setContent(r?i+n.getContent():n.getContent()+i)}),n.apply(e.not(":tinymce"),arguments),e):void 0:n.apply(e,arguments)}}),
8888
// Makes sure that the editor instance gets properly destroyed when the parent element is removed
89-
p.each(["remove","replaceWith","replaceAll","empty"],function(e,t){var n=s[t]=p.fn[t];p.fn[t]=function(){return r.call(this,t),n.apply(this,arguments)}}),s.attr=p.fn.attr,
89+
d.each(["remove","replaceWith","replaceAll","empty"],function(e,t){var n=s[t]=d.fn[t];d.fn[t]=function(){return r.call(this,t),n.apply(this,arguments)}}),s.attr=d.fn.attr,
9090
// Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents
91-
p.fn.attr=function(e,t){var n=this,i=arguments;if(!e||"value"!==e||!u(n))return s.attr.apply(n,i);if(t!==f)return o.call(n.filter(":tinymce"),t),s.attr.apply(n.not(":tinymce"),i),n;// return original set for chaining
92-
var r=n[0],a=l(r);return a?a.getContent({save:!0}):s.attr.apply(p(r),i)}}}();
91+
d.fn.attr=function(e,t){var n=this,i=arguments;if(!e||"value"!==e||!u(n))return s.attr.apply(n,i);if(t!==f)return o.call(n.filter(":tinymce"),t),s.attr.apply(n.not(":tinymce"),i),n;// return original set for chaining
92+
var r=n[0],a=l(r);return a?a.getContent({save:!0}):s.attr.apply(d(r),i)}}}();

0 commit comments

Comments
 (0)