Release notes · September 20, 2026

RichTextEditor 2.11.0

Uploads you can cancel and retry, images already in the content uploaded for you, file_upload_url for uploads without writing JavaScript, and config.autoSavefixed — it had never run in an earlier release. Also a size limit for uploads and a Border collapse option. Core build 2.6.3 (607,899 bytes).

2.11.0

Uploads without writing JavaScript

config.file_upload_url = "/imageupload.ashx"is the whole setup. The response may be TinyMCE’s {"location": ...}, CKEditor’s {"url": ...} or {"urls": {"default": ...}}, or our own READY: text, so an existing backend works unchanged. Options cover the form field name, a base path, cross-origin credentials, keeping the original file name and extra headers. See Upload files.

Cancel, retry, and images already in the content

A handler may return { abort }; the editor aborts when the image is deleted mid-upload, on destroy() and on cancelUploads(), and ignores a cancelled upload’s result. uploadRetryCount retries a failed upload before the user sees an error. uploadEmbeddedImages() uploads base64 images that arrived through setHTMLCode, a paste or a draft, and automaticUploads does it for you.

config.autoSave works

It had been dead in every earlier release: its initialisation ran before the API it used existed, threw, and a silent catch discarded the error. It now starts, retries a failed save on its own and when the browser comes back online, and reports through autosaved and autosavefailed events. Every optional feature now records whether it started, in editor.__initRan and editor.__initFailures.

A file can now be refused before it is read

config.maxUploadFileSize (bytes; 0, the default, means no limit) refuses an oversized file on every route into the document — the image dialog, the document dialog, paste and drag-and-drop — before the editor reads it.

This matters most when no upload handler is configured, which is the case that used to fail quietly. Without a handler the editor embeds the file in the document as a base64 data:URL, so a 3 MB photo becomes roughly 4 MB of text in the saved HTML and the database write fails with an error that names the column, not the cause. A failed upload does the same thing: if your handler reports an error, the image is still embedded rather than dropped. Setting the limit to whatever your endpoint enforces stops both.

The message is text_uploadtoobig ({0} the file size, {1} the limit), and the uploadtoobig customdialog hook replaces the alert with your own dialog.

Table Properties: Border collapse

Tables can now choose Collapse or Separate explicitly. Choosing Collapse clears the cell spacing; choosing Separate uses it. Leaving it unset keeps the previous behaviour, where a cell spacing implied separate borders, so existing documents are unchanged.

Upload messages a reader can act on

Two messages were written for whoever wrote the code. “Uploading feature not available. miss file_upload_handler.” is now “This file cannot be attached, because file uploads are not set up on this site.” and a failed upload reads “The file could not be uploaded.” with the error code in brackets rather than after a comma. Both go through the language files (text_uploadnothandler, text_uploadfailed), so they can be translated; the English text is the fallback when a language file lacks the key.

Install or upgrade

Grab the latest via npm:

npm install @richscripts/richtexteditor@latest

Feedback & issues: support@richtexteditor.com