Skip to content

Commit b5179d8

Browse files
authored
Merge branch 'feature/8.4.0/DOC-3243' into feature/8/DOC-3243_TINY-13674
2 parents 2f7516f + 70558e0 commit b5179d8

14 files changed

Lines changed: 246 additions & 14 deletions

modules/ROOT/examples/live-demos/custom-view/index.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ tinymce.init({
1919
text: 'Save code',
2020
buttonType: 'primary',
2121
onAction: () => {
22-
const codeContent = document.querySelector('.tox-view__pane_panel').value;
22+
const codeContent = document.querySelector('.my-textarea').value;
2323
ed.setContent(codeContent);
2424
ed.execCommand('ToggleView', false, 'code');
2525
console.log('save');
@@ -28,12 +28,12 @@ tinymce.init({
2828
],
2929
onShow: (api) => {
3030
const editorContent = ed.getContent();
31-
api.getContainer().innerHTML = `
31+
const container = api.getContainer();
32+
container.innerHTML = `
3233
<div style="height: 100%">
33-
<textarea class="tox-view__pane_panel" style="width: 100%; height: 100%; resize: none; padding: 0.5em">
34-
${editorContent}
35-
</textarea>
36-
</div>`.replace(/\s+/g, '');
34+
<textarea class="my-textarea" style="width: 100%; height: 100%; resize: none; padding: 0.5em"></textarea>
35+
</div>`;
36+
container.querySelector('.my-textarea').value = editorContent;
3737
},
3838
onHide: (api) => {
3939
console.log('Deactivate code', api.getContainer());

modules/ROOT/pages/8.4.0-release-notes.adoc

Lines changed: 80 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ include::partial$misc/admon-releasenotes-for-stable.adoc[]
2828
* xref:known-issues[Known issues]
2929

3030

31-
[[new-premium-plugins]]
32-
== New Premium plugins
31+
[[new-premium-plugin<s>]]
32+
== New Premium plugin<s>
3333

3434
The following new Premium plugin was released alongside {productname} {release-version}.
3535

@@ -57,6 +57,21 @@ For information on the **<Open source plugin name>** plugin, see xref:<plugincod
5757

5858
The following premium plugin updates were released alongside {productname} {release-version}.
5959

60+
=== Media Optimizer
61+
62+
The {productname} {release-version} release includes an accompanying release of the **Media Optimizer** premium plugin.
63+
64+
**Media Optimizer** includes the following addition.
65+
66+
==== SVG images can now be uploaded.
67+
// #TINY-13708
68+
69+
Previously, SVG images could not be uploaded through the Media Optimizer plugin because Uploadcare placed restrictions on SVG file handling. Users who needed to include SVG graphics in content were unable to upload them directly.
70+
71+
In {productname} {release-version}, SVG images can now be uploaded through the Media Optimizer plugin. Some CDN operations may have limitations on SVG files; for details, see the link:https://uploadcare.com/docs/cdn-operations/#limits[Uploadcare documentation on CDN operation limits].
72+
73+
For information on the **Media Optimizer** plugin, see: xref:uploadcare.adoc[Media Optimizer].
74+
6075
=== Full Page HTML
6176

6277
The {productname} {release-version} release includes an accompanying release of the **Full Page HTML** premium plugin.
@@ -70,19 +85,51 @@ Previously, the Full Page HTML plugin used deprecated `+escape+` and `+unescape+
7085

7186
In {productname} {release-version}, the plugin uses modern encoding APIs instead. This aligns the implementation with current browser guidance and improves reliability for protected content handling.
7287

88+
==== Pasting an HTML document was vulnerable to XSS attacks
89+
// #TINY-13673
90+
91+
A cross-site scripting (XSS) vulnerability was discovered in the Full Page HTML plugin. Previously, malicious code within the document `<head>` was able to be executed when pasted.
92+
93+
This vulnerability has been patched in {productname} {release-version} by ensuring that content in the document `<head>` is properly encoded.
94+
95+
==== New argument `fullpagehtml` to `editor.getContent()` and `editor.setContent()` APIs to only get/set the body of the content while the full page plugin is active.
96+
// #TINY-13744
97+
98+
Previously, setting and getting the editor content while the Full Page HTML plugin was active could be troublesome due to the presence of the full HTML document on all API calls, even when not needed. Attempting to get and act only on the body content (for example, for saving) was undocumented and required workarounds.
99+
100+
In {productname} {release-version}, the `fullpagehtml` option has been added to the `editor.getContent()` and `editor.setContent()` APIs. When set to `false`, this option allows getting and setting only the body content while the Full Page HTML plugin is active, without interfering with the full document structure. The document is now more resistant to accidental changes, and content can be retrieved or updated without including the full HTML document. For details, see xref:fullpagehtml.adoc#fullpagehtml-getcontent-setcontent[`fullpagehtml` option for getContent/setContent].
101+
73102
For information on the **Full Page HTML** plugin, see: xref:fullpagehtml.adoc[Full Page HTML].
74103

75-
=== <Premium plugin name 1> <Premium plugin name 1 version>
104+
=== Comments
76105

77-
The {productname} {release-version} release includes an accompanying release of the **<Premium plugin name 1>** premium plugin.
106+
The {productname} {release-version} release includes an accompanying release of the **Comments** premium plugin.
78107

79-
**<Premium plugin name 1>** <Premium plugin name 1 version> includes the following <fixes, changes, improvements>.
108+
**Comments** includes the following fix.
80109

81-
==== <Premium plugin name 1 change 1>
110+
==== Errors when creating new comments made the save button stuck in a saving state.
111+
// #TINY-12224
82112

83-
// CCFR here.
113+
Previously, when creating or editing a comment in Comments, the save button could remain in a saving state indefinitely if the save operation failed or if the component was not replaced. The saving state had no way to reset to false except by recreating the component, which misled users into thinking the operation was still in progress.
114+
115+
In {productname} {release-version}, the save logic now resets the saving state to false after the save operation completes, whether the operation succeeds or fails. The save button no longer remains stuck in a saving state.
116+
117+
For information on the **Comments** plugin, see: xref:introduction-to-tiny-comments.adoc[Comments].
84118

85-
For information on the **<Premium plugin name 1>** plugin, see: xref:<plugincode>.adoc[<Premium plugin name 1>].
119+
=== Suggested Edits
120+
121+
The {productname} {release-version} release includes an accompanying release of the **Suggested Edits** premium plugin.
122+
123+
**Suggested Edits** includes the following improvement.
124+
125+
==== Document view rendering to reduce flickering when loading Suggested Edits.
126+
// #TINY-13135
127+
128+
Previously, the document displayed in the Review Edits view relied on the deprecated browser method `document.write`, which could cause content to appear before it was fully styled. Users could briefly see partially rendered or unstyled content when opening the review interface.
129+
130+
In {productname} {release-version}, the document loading process in the Review Edits view has been updated to remove the deprecated method. The document is now displayed only after it has fully loaded, improving browser compatibility and providing a smoother and more stable experience when reviewing suggested edits.
131+
132+
For information on the **Suggested Edits** plugin, see: xref:suggestededits.adoc[Suggested Edits].
86133

87134

88135
[[accompanying-premium-plugin-end-of-life-announcement]]
@@ -140,6 +187,17 @@ For information on using Enhanced Skins & Icon Packs, see: xref:enhanced-skins-a
140187

141188
// CCFR here.
142189

190+
=== The noneditable feature can now be disabled with the new `allow_noneditable` option.
191+
// #TINY-10121
192+
193+
Previously, the noneditable plugin was converted to a feature in core in {productname} 6. The feature was always enabled with no documented way to turn it off, which was not always desirable for integrators.
194+
195+
In {productname} {release-version}, a new xref:non-editable-content-options.adoc#allow_noneditable[`+allow_noneditable+`] option is available. It is enabled by default. When set to `+false+`, the noneditable feature is disabled, equivalent to disabling the plugin prior to {productname} 6.
196+
197+
=== New `view_show` option to display a specified view on initialization.
198+
// #TINY-11967
199+
200+
In {productname} {release-version}, the new xref:custom-view.adoc#view_show[`+view_show+`] option allows specifying which view to display when the editor is initialized. The option behaves similarly to `+sidebar_show+` but takes precedence for views; both sidebars and views can be configured to show on init.
143201

144202
[[changes]]
145203
== Changes
@@ -173,6 +231,20 @@ For information on using Enhanced Skins & Icon Packs, see: xref:enhanced-skins-a
173231

174232
// CCFR here.
175233

234+
=== Directionality of Hebrew was incorrect
235+
// #TINY-13667
236+
237+
Previously, right-to-left (RTL) directionality was not correctly set for Hebrew in the language pack. This caused the editor to render the wrong directionality when Hebrew was set as the language.
238+
239+
In {productname} {release-version}, this issue has been addressed by ensuring that the directionality is correctly set for Hebrew in the language pack.
240+
241+
=== Bundled content CSS is now loaded into preview iframes
242+
// #TINY-13190
243+
244+
Previously, when the editor content CSS was bundled, it was not loaded into preview iframes. This caused a visual mismatch between the editor content area and what users saw in the Preview dialog, Suggested Edits view and Revision History view.
245+
246+
In {productname} {release-version}, the fix checks if the content CSS is available as a bundled resource and applies it to the Preview Iframe through style tags. Bundled content CSS is now correctly loaded in the Preview Iframe.
247+
176248

177249
[[security-fixes]]
178250
== Security fixes

modules/ROOT/pages/advcode.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ include::partial$configuration/advcode_prettify_getcontent.adoc[leveloffset=+1]
6666

6767
include::partial$configuration/advcode_prettify_editor.adoc[leveloffset=+1]
6868

69+
include::partial$plugins/advcode-open-view.adoc[]
70+
6971
include::partial$misc/advcode-shortcuts.adoc[]
7072

7173
include::partial$misc/plugin-toolbar-button-id-boilerplate.adoc[]

modules/ROOT/pages/custom-view.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ To query the state of the custom view (whether it is currently visible or hidden
5757
editor.queryCommandValue('ToggleView') == 'myCustomView';
5858
----
5959

60+
== Options
61+
62+
include::partial$configuration/view_show.adoc[leveloffset=+1]
63+
6064
== Interactive example
6165

6266
This example shows how to integrate a custom view using the `addView` API.

modules/ROOT/pages/fullpagehtml.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ include::partial$configuration/fullpagehtml-default-body-style.adoc[leveloffset=
109109

110110
include::partial$configuration/fullpagehtml-hide-in-source-view.adoc[leveloffset=+1]
111111

112+
include::partial$configuration/fullpagehtml-getcontent-setcontent.adoc[leveloffset=+1]
113+
112114
include::partial$misc/plugin-toolbar-button-id-boilerplate.adoc[]
113115

114116
include::partial$toolbar-button-ids/{plugincode}-toolbar-buttons.adoc[leveloffset=+1]

modules/ROOT/pages/non-editable-content-options.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ liveDemo::editable-class-and-editable-root[]
1313
[NOTE]
1414
Visit xref:ie-template-creation.adoc[Template creation example] for a practical example of multi-root editing.
1515

16+
// allow_noneditable
17+
include::partial$configuration/allow_noneditable.adoc[]
18+
1619
// noneditable_class
1720
include::partial$configuration/noneditable_class.adoc[]
1821

modules/ROOT/pages/revisionhistory.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ include::partial$configuration/revisionhistory_css_url.adoc[leveloffset=+1]
121121

122122
include::partial$configuration/revisionhistory_diff_classes.adoc[leveloffset=+1]
123123

124+
include::partial$plugins/revisionhistory-open-view.adoc[]
125+
124126
include::partial$misc/plugin-toolbar-button-id-boilerplate.adoc[]
125127

126128
include::partial$misc/plugin-menu-item-id-boilerplate.adoc[]

modules/ROOT/pages/suggestededits.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ include::partial$configuration/suggestededits_access.adoc[leveloffset=+1]
127127

128128
include::partial$configuration/suggestededits_auto_approve.adoc[leveloffset=+1]
129129

130+
include::partial$plugins/suggestededits-open-view.adoc[]
131+
130132
include::partial$configuration/user_id.adoc[leveloffset=+1]
131133

132134
include::partial$configuration/fetch_users.adoc[leveloffset=+1]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[[allow_noneditable]]
2+
== `+allow_noneditable+`
3+
4+
This option controls whether the non-editable content feature is enabled. When set to `+false+`, the non-editable feature is disabled entirely, equivalent to disabling the `noneditable` plugin prior to {productname} 6.
5+
6+
*Type:* `+Boolean+`
7+
8+
*Default value:* `+true+`
9+
10+
=== Example: using `+allow_noneditable+`
11+
12+
[source,js]
13+
----
14+
tinymce.init({
15+
selector: 'textarea', // change this value according to your HTML
16+
allow_noneditable: false
17+
});
18+
----
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[[fullpagehtml-getcontent-setcontent]]
2+
== `+fullpagehtml+` option for `+getContent()+` and `+setContent()+`
3+
4+
When the {pluginname} plugin is active, `editor.getContent()` and `editor.setContent()` return and accept the full HTML document by default. The `fullpagehtml` option allows getting and setting only the body content when needed.
5+
6+
Pass `fullpagehtml: false` in the options object to bypass full-page processing and work with body content only:
7+
8+
* `editor.getContent({ fullpagehtml: false })` — Returns only the `<body>` content.
9+
* `editor.setContent(content, { fullpagehtml: false })` — Sets only the body content without modifying the document head.
10+
11+
This option is useful when saving or loading body content separately (for example, when storing content in a database or when integrating with systems that expect body-only HTML). Unlike `fullpagehtml_hide_in_source_view`, which affects only the source code view display, the `fullpagehtml` option affects API behavior and requires no configuration.
12+
13+
=== Example: getting and setting body content
14+
15+
[source,js]
16+
----
17+
// Get only the body content for saving
18+
const bodyContent = editor.getContent({ fullpagehtml: false });
19+
20+
// Set only the body content (preserves document head)
21+
editor.setContent(newBodyContent, { format: 'html', fullpagehtml: false });
22+
----

0 commit comments

Comments
 (0)