diff --git a/docs/api/config/image-upload-url.md b/docs/api/config/image-upload-url.md index 761b8c8..9fa2087 100644 --- a/docs/api/config/image-upload-url.md +++ b/docs/api/config/image-upload-url.md @@ -8,7 +8,19 @@ description: You can learn about the imageUploadUrl config in the documentation ### Description -@short: Optional. Specifies the URL which will be used for image upload +@short: Optional. Specifies the URL which will be used for image upload (from the toolbar, menubar, clipboard paste, or drag-and-drop) + +When the property is set, RichText uploads each inserted image to the given endpoint and inserts the URL returned by the server. + +When the property is omitted or set to a falsy value (`""`, `null`, `undefined`), RichText switches to **inline mode**: the image file is read on the client and embedded directly into the content as a base64 data URL — no server is required. Inline images larger than 1024×800 are proportionally downscaled to fit within these limits. + +:::note +Inline (base64) images are not preserved by the built-in DOCX / PDF [export](api/events/export.md). If you rely on export, supply an `imageUploadUrl` so that images reference an external location. +::: + +:::caution +Base64 encoding increases the encoded payload by roughly one third relative to the original file. A document with several large inline images grows accordingly, which affects the size of the value returned by [`getValue()`](api/methods/get-value.md), the memory footprint of the editor, and the cost of persisting or transferring the content. Prefer a server `imageUploadUrl` for documents that contain many or large images. +::: ### Usage @@ -18,16 +30,27 @@ imageUploadUrl?: string; ### Example +Upload images to a server endpoint: + ~~~jsx {3} // initialize RichText new richtext.Richtext("#root", { - imageUploadUrl: "some URL" + imageUploadUrl: "https://example.com/upload" + // other configuration properties +}); +~~~ + +Insert images inline as base64 (no server required) — omit the property or pass an empty string: + +~~~jsx {2} +new richtext.Richtext("#root", { + // imageUploadUrl is not set, images are inserted as base64 data URLs // other configuration properties }); ~~~ -**Change log:** The property was added in v2.0 +**Change log:** The property was added in v2.0. Starting with v2.1, the property is optional: when omitted, images are inserted inline as base64 data URLs. -**Related articles:** [Configuration](guides/configuration.md) +**Related articles:** [Configuration](guides/configuration.md), [Working with the server](guides/working_with_server.md) **Related sample:** [RichText. Initialization](https://snippet.dhtmlx.com/t55alxiy?tag=richtext) diff --git a/docs/api/config/locale.md b/docs/api/config/locale.md index 5a9fc14..8e68ea2 100644 --- a/docs/api/config/locale.md +++ b/docs/api/config/locale.md @@ -11,7 +11,7 @@ description: You can learn about the locale config in the documentation of the D @short: Optional. An object that includes localization labels of RichText :::info -The **locale** object needs to include all labels of RichText with the corresponding translations. +The `locale` object needs to include all labels of RichText with the corresponding translations. ::: ### Usage @@ -25,7 +25,7 @@ locale?: object; By default, RichText uses the **English** locale. You can set it to the custom locale as well. :::tip -To change the current locale dynamically, you can use the [**setLocale()**](api/methods/set-locale.md) method of RichText +To change the current locale dynamically, you can use the [`setLocale()`](api/methods/set-locale.md) method of RichText ::: ### Example diff --git a/docs/api/config/trigger-template.md b/docs/api/config/trigger-template.md new file mode 100644 index 0000000..81c83d9 --- /dev/null +++ b/docs/api/config/trigger-template.md @@ -0,0 +1,73 @@ +--- +sidebar_label: triggerTemplate +title: triggerTemplate Config +description: You can learn about the triggerTemplate config in the documentation of the DHTMLX JavaScript RichText library. Browse developer guides and API reference, try out code examples and live demos, and download a free 30-day evaluation version of DHTMLX RichText. +--- + +# triggerTemplate + +### Description + +@short: Optional. Customizes how RichText renders items in the suggestion dropdown opened by a [`triggers`](api/config/triggers.md) entry + +By default, the dropdown shows each item's `label` as plain text. Use `triggerTemplate` to render richer rows — for example, an avatar plus a name and an email. + +### Usage + +~~~jsx {} +function triggerTemplate({ data, trigger }) { + return "HTML template of the suggestion item"; +}; +~~~ + +### Parameters + +The callback function takes an object with the following parameters: + +- `data` - the current suggestion item (`{ id, label, url }`, plus any custom fields you add to the trigger's `data` source) +- `trigger` - the trigger character that opened the dropdown (`"@"`, `"#"`, etc.) + +:::tip +The dropdown default width is `160px`. If you need more space for your template, add the `.wx-editor` parent in front of the selector: + +~~~css {} +.wx-editor .wx-suggest-anchor { + width: 220px; +} +~~~ +::: + +### Example + +The following code snippet configures two triggers: `@` for mentions and `#` for tags. Use `triggerTemplate` to expand the `trigger` value to render each dropdown differently. For the `@` dropdown the template returns a custom HTML row with an avatar (`data.image`), a nickname (`data.label`), and a full name (`data.name`). For the `#` trigger the template uses the `label`: + +~~~jsx {5-6,8-15} +const { template, Richtext } = richtext; + +new Richtext("#root", { + triggers: [ + { trigger: "@", data: people }, + { trigger: "#", data: tags } + ], + triggerTemplate: template(obj => { + if (obj.trigger === "@") { + return `
Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+de localecn localeHello
", "html"); +editor.getValue("text"); +``` + +```jsx title="From 2.0" +const fromTextEncoder = richtext.text.fromText; +const fromHTMLEncoder = richtext.html.fromHTML; + +const toTextEncoder = richtext.text.toText; +const toHTMLEncoder = richtext.html.toHTML; +... +editor.setValue("Hello
", fromHTMLEncoder); +editor.getValue(toTextEncoder); +``` + +:::note[Hinweis] +Sie können `getValue()` und `setValue()` weiterhin ohne Encoder aufrufen — HTML wird standardmäßig verwendet +::: + +### - [`on`](api/internal/on.md) / [`detach`](api/internal/detach.md) {#--on--detach} + +```jsx title="Before 2.0" +editor.events.on("Change", function(action, canUndo, canRedo){ + // Ihr Code hier +}); + +editor.events.detach("Change"); +``` + +```jsx title="From 2.0" +editor.api.on("set-font-size", (obj) => { + console.log(obj.fontSize); +}, { tag: "track" }); + +editor.api.detach("track"); +``` + +### - `fire()` → [`exec()`](api/internal/exec.md) und [`intercept()`](api/internal/intercept.md) verwenden {#--fire--use-exec-and-intercept} + +```jsx title="Before 2.0" +editor.events.fire("some-event", [data]); +``` + +```jsx title="From 2.0" +editor.api.exec("some-event", obj); + +// Ausführung verhindern +editor.api.intercept("some-event", (obj) => false); +``` diff --git a/i18n/de/docusaurus-plugin-content-docs/current/news/whats_new.md b/i18n/de/docusaurus-plugin-content-docs/current/news/whats_new.md new file mode 100644 index 0000000..baf08a2 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/news/whats_new.md @@ -0,0 +1,256 @@ +--- +sidebar_label: Was ist neu +title: Was ist neu +description: Entdecken Sie die Neuigkeiten in DHTMLX RichText und die Versionshistorie in der Dokumentation der DHTMLX JavaScript-UI-Bibliothek. Lesen Sie Entwickleranleitungen und API-Referenzen, probieren Sie Code-Beispiele und Live-Demos aus und laden Sie eine kostenlose 30-Tage-Evaluierungsversion von DHTMLX RichText herunter. +--- + +## Version 2.1 {#version-21} + +Veröffentlicht am 22. Juni 2026 + +### Neue Funktionalität {#new-functionality} + +- Die [`imageUploadUrl`](api/config/image-upload-url.md) ist optional: Wird sie weggelassen, werden Bilder inline als Base64-Daten-URLs eingefügt, ohne dass ein Server erforderlich ist +- Drag-and-Drop-Bildeinfügung: Ziehen Sie eine Bilddatei direkt in den Editor-Bereich +- Markdown-Unterstützung: Inhalte des Editors als Markdown über den `markdown`-Encoder in den Methoden [`setValue()`](api/methods/set-value.md), [`getValue()`](api/methods/get-value.md) und [`insertValue()`](api/methods/insert-value.md) einlesen und ausgeben (siehe das Beispiel [RichText. Arbeiten mit verschiedenen Formaten (Markdown, HTML, Text)](https://snippet.dhtmlx.com/cne4kujn?tag=richtext)) +- Erwähnungen, Tags und benutzerdefinierte Dropdown-Trigger über die Eigenschaft [`triggers`](api/config/triggers.md): Geben Sie ein Zeichen wie `@`, `#`, `/` oder `:` ein, um ein Vorschlags-Dropdown zu öffnen und das ausgewählte Element als nicht bearbeitbares Token einzufügen (siehe Anleitung [Erwähnungen und Tags](guides/mentions_and_tags.md) und das Beispiel [RichText. Erwähnungen, Tags und asynchrone Suche](https://snippet.dhtmlx.com/nfvvfize?tag=richtext)) +- Benutzerdefinierte Darstellung von Vorschlagselementen über die Eigenschaft [`triggerTemplate`](api/config/trigger-template.md) (zum Beispiel ein Avatar mit Name und E-Mail-Adresse) (siehe das Beispiel [RichText. Benutzerdefinierte Dropdown-Vorlage pro Trigger](https://snippet.dhtmlx.com/0p3bbnhz?tag=richtext)) +- Benutzerdefinierte Aktion bei der Auswahl eines Triggers: Führen Sie eigenen Code aus (ein Emoji einfügen, einen Slash-Befehl ausführen und mehr), anstatt ein Token einzufügen (siehe die Beispiele [RichText. Emoji-Autovervollständigung](https://snippet.dhtmlx.com/g5z1d868?tag=richtext) und [RichText. Slash-Befehle](https://snippet.dhtmlx.com/e0mrmyam?tag=richtext)) +- Zwischenablagen-Unterstützung (Kopieren, Ausschneiden und Einfügen), die die Formatierung zwischen RichText-Instanzen beibehält und externen Inhalt als Klartext einfügt +- Tastenkürzel zum Löschen auf Wort- und Zeilenebene: vorheriges/nächstes Wort löschen mit `Ctrl+Backspace` / `Ctrl+Delete` (Windows/Linux) oder `Opt+Backspace` / `Opt+Delete` (macOS); vorherige/nächste visuelle Zeile löschen mit `Cmd+Backspace` / `Cmd+Delete` (nur macOS) +- Neue Tastenkürzel zum Ändern der Blockeinrückung: die Einrückung eines Blocks mit `Tab` vergrößern und mit `Shift+Tab` verringern; in Listen verschachteln dieselben Tasten Elemente oder heben sie an + +### Neue API {#new-api} + +#### Neue Eigenschaften {#new-properties} + +- [`triggers`](api/config/triggers.md) — Definiert Dropdown-Trigger für das Einfügen von Erwähnungen, Tags und anderen Tokens +- [`triggerTemplate`](api/config/trigger-template.md) — Passt die Darstellung von Elementen im Vorschlags-Dropdown an + +#### Neue Methoden {#new-methods} + +- [`insertValue()`](api/methods/insert-value.md) — Fügt Text-, Markdown- oder HTML-Inhalt an der Cursorposition ein oder ersetzt den ausgewählten Text (siehe das Beispiel [RichText. Inhalt an Cursorposition einfügen](https://snippet.dhtmlx.com/pew2g1ku?tag=richtext)) + +#### Neue Events {#new-events} + +- [`show-suggest`](api/events/show-suggest.md) — Wird ausgelöst, wenn das Vorschlags-Dropdown für einen konfigurierten Trigger geöffnet wird +- [`insert-token`](api/events/insert-token.md) — Wird ausgelöst, nachdem der Benutzer ein Vorschlagselement im Dropdown auswählt und RichText es als Token einfügt +- [`hide-suggest`](api/events/hide-suggest.md) — Wird ausgelöst, wenn das Vorschlags-Dropdown geschlossen wird + +### Fehlerbehebungen {#fixes} + +- Probleme beim Einfügen von Inline-Inhalten (einschließlich Inhalten innerhalb oder neben Inline-Elementen wie Erwähnungen und Bildern) +- Das Ablegen eines Bildes auf sich selbst löst einen Fehler aus + +## Version 2.0.6 {#version-206} + +Veröffentlicht am 28. Mai 2026 + +### Neue Funktionalität {#new-functionality-206} + +- Kontextbewusste OL/UL-Symbolleistenschaltflächen, die Listen basierend auf der Auswahl umschalten oder konvertieren +- Ändern der Listenverschachtelungsebene mit den Schaltflächen **Einzug** und **Ausrücken** +- Beenden einer Liste oder Verringern der Verschachtelung durch Drücken von Enter in einem leeren Listenelement +- Eigene Farbe für besuchte Links + +### Neue API {#new-api-206} + +#### Neue Events {#new-events-206} + +- [`toggle-list`](api/events/toggle-list.md) — Wird ausgelöst, wenn ein Benutzer eine Liste für die ausgewählten Blöcke umschaltet + +### Fehlerbehebungen {#fixes-206} + +- Falsche horizontale Ausrichtung von Listenmarkierungen +- Inkonsistenter Abstand zwischen nummerierten und nicht nummerierten Listen +- Formatierung löschen entfernt keine Eigenschaften auf Blockebene +- Falsche Gestaltung von Überschriften und Blockzitaten innerhalb von Listenelementen +- Unerwünschtes Eingabeelement in horizontalen Linien sichtbar +- Der Editor friert ein, wenn eine horizontale Linie in der Mitte oder am Ende einer Liste eingefügt wird + +## Version 2.0.5 {#version-205} + +Veröffentlicht am 6. März 2026 + +### Fehlerbehebungen {#fixes-205} + +- IME-Eingabe wird nicht korrekt verarbeitet +- Kompositionsbasierte Eingabe (z. B. Chinesisch, Japanisch, Koreanisch auf dem Desktop) wird nicht korrekt verarbeitet +- Die Eigenschaften `margin-left` und `line-height` werden beim HTML-Parsing ignoriert +- Inline-Elemente erben Eigenschaften von übergeordneten Elementen auf Blockebene +- Text zwischen zwei Editor-Instanzen kann nicht kopiert werden +- Die Auswahl wird bei zwei (oder mehr) aktiven Editor-Instanzen falsch verarbeitet +- Der Cursor wird falsch positioniert, wenn der einzige Inhalt im Absatz ein Bild ist +- Endloses Umbrechen von Tief- und Hochstellungselementen +- Beim Einfügen von Bildern werden diese inline eingefügt, anstatt sie zuerst hochzuladen +- Leere Inline-Blöcke können an bestimmten Positionen (erste oder letzte Zeile) nicht entfernt werden +- Der Editor scrollt beim Tippen nicht zum Cursor +- Eingabe auf Android wird nicht korrekt verarbeitet +- Falsche Auswahlbehandlung für HR-Elemente +- Falsche Darstellung bei leeren Anfangswerten +- Das Kopieren von Inhalten kann fehlschlagen, wenn diese selbstschließende Blöcke enthalten +- Chrome: Emojis können nicht über das Kontextmenü eingefügt werden +- Firefox: Alles auswählen (CTRL+A) wird nicht korrekt verarbeitet + +## Version 2.0.4 {#version-204} + +Veröffentlicht am 15. Oktober 2025 + +### Fehlerbehebungen {#fixes-204} + +- Falsche Bereichsauswahl für Absätze +- Link-Popups werden nicht angezeigt, wenn sie neben verknüpften Bildern stehen +- Anfängliche Symbolleistenwerte stimmen nicht mit dem tatsächlichen Inhalt überein + +## Version 2.0.3 {#version-203} + +Veröffentlicht am 27. August 2025 + +### Fehlerbehebungen {#fixes-203} + +- Ein Klick auf eine horizontale Linie verursacht einen Skriptfehler +- Die Standard-Zeilenhöhe ist falsch +- Inhaltsstile enthalten doppelte Selektoren +- Nur-Text-Blöcke ignorieren Stiländerungen beim HTML-Parsing +- Der Parser ignoriert maskierte Schriftartnamen in HTML +- Der Parser ignoriert die Eigenschaften `margin-left` und `line-height` in HTML + +## Version 2.0.2 {#version-202} + +Veröffentlicht am 4. August 2025 + +### Fehlerbehebungen {#fixes-202} + +- Paketinhalt aktualisiert + +## Version 2.0.1 {#version-201} + +Veröffentlicht am 30. Juli 2025 + +### Fehlerbehebungen {#fixes-201} + +- Typdefinitionen für die Eigenschaft `defaultStyles` aktualisiert + +## Version 2.0 {#version-20} + +Veröffentlicht am 30. Juli 2025 + +:::note[Hinweis] +Die API von v1.2 ist nicht kompatibel mit v2.0. Weitere Informationen finden Sie in der [**Migrationsanleitung**](news/migration.md). +::: + +### Neue Funktionalität {#new-functionality-20} + +- **Textdarstellung der nächsten Generation** + Erleben Sie eine flüssigere, schnellere und genauere Textdarstellung mit unserer neuen Engine + +- **Granulare Symbolleistenkonfiguration** + Übernehmen Sie die volle Kontrolle über die Symbolleiste: + - [Einzelne Symbolleisten-Steuerelemente](guides/configuration.md/#default-toolbar-controls) und ihre Reihenfolge festlegen + - [Benutzerdefinierte Steuerelemente](guides/configuration.md/#add-custom-toolbar-controls) hinzufügen + +- **Optionale [Menüleiste](api/config/menubar.md)** + Aktivieren Sie eine klassische Menüoberfläche oben im Editor + +- **Verbesserter [Dokumentenmodus](guides/configuration.md/#layout-modes)** + Unterstützung für verschiedene Dokumentgrößen hinzugefügt + +- **Bildunterstützung** + - Bilder mit [Upload-Funktionen](api/config/image-upload-url.md) einfügen + - [Bilder interaktiv skalieren](api/events/resize-image.md) + +- **Verbesserte Link-Erfahrung** + Neu gestaltete [Popup-Interaktionen](api/events/show-popup.md) für bessere Benutzerfreundlichkeit + +- **Neue Formatierungswerkzeuge** + - Textausrichtung: **Blocksatz** + - [Horizontale Linien](api/events/insert-line.md) einfügen + - [Einzug](api/events/indent.md) / [Ausrücken](api/events/outdent.md) + - [Zeilenhöhe](api/events/set-line-height.md) festlegen + - [Tiefstellung](api/events/subscript.md) / [Hochstellung](api/events/superscript.md) anwenden + +- **Listenverwaltung** + [Listen in Ihren Inhalten einfach einfügen und verwalten](api/events/insert-list.md) + +- **Import/Export & Drucken** + - [DOCX-Dateien importieren](api/events/import.md) + - Inhalte als DOCX oder PDF [exportieren](api/events/export.md) + - Dokumente direkt aus dem Editor [drucken](api/events/print.md) + +- **Tastaturkürzel** + Erweiterte Unterstützung für gängige Formatierungs- und Bearbeitungskürzel + +### Neue API {#new-api-20} + +#### Neue Eigenschaften {#new-properties-20} + +- [`fullscreenMode`](api/config/fullscreen-mode.md) +- [`imageUploadUrl`](api/config/image-upload-url.md) +- [`layoutMode`](api/config/layout-mode.md) +- [`locale`](api/config/locale.md) +- [`menubar`](api/config/menubar.md) +- [`toolbar`](api/config/toolbar.md) +- [`value`](api/config/value.md) + +#### Neue Methoden {#new-methods-20} + +- [`setConfig()`](api/methods/set-config.md) — Konfiguration dynamisch aktualisieren +- [`setLocale()`](api/methods/set-locale.md) — Sprache zur Laufzeit wechseln + +#### Neue interne Methoden {#new-internal-methods-20} + +- [`api.exec()`](api/internal/exec.md) +- [`api.intercept()`](api/internal/intercept.md) +- [`api.getReactiveState()`](api/internal/get-reactive-state.md) +- [`api.getState()`](api/internal/get-state.md) + +#### Neue Events {#new-events-20} + +Eine vollständige Liste der neuen Events ist [hier](api/overview/events_overview.md) verfügbar + +### Aktualisierte API {#updated-api} + +#### Aktualisierte Eigenschaften {#updated-properties} + +- [`defaultStyles`](api/config/default-styles.md) + +#### Aktualisierte Methoden {#updated-methods} + +- [`setValue()`](api/methods/set-value.md) +- [`getValue()`](api/methods/get-value.md) + +#### Aktualisierte interne Methoden {#updated-internal-methods} + +- [`api.detach()`](api/internal/detach.md) +- [`api.on()`](api/internal/on.md) + +## Entfernte API {#removed-api} + +:::warning[Warnung] +Verwenden Sie die entfernte API nicht in Ihren Projekten!Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+de localecn localeHello
", "html"); +editor.getValue("text"); +``` + +```jsx title="From 2.0" +const fromTextEncoder = richtext.text.fromText; +const fromHTMLEncoder = richtext.html.fromHTML; + +const toTextEncoder = richtext.text.toText; +const toHTMLEncoder = richtext.html.toHTML; +... +editor.setValue("Hello
", fromHTMLEncoder); +editor.getValue(toTextEncoder); +``` + +:::note[참고] +인코더 없이 `getValue()`와 `setValue()`를 호출할 수 있습니다. 기본값은 HTML입니다. +::: + +### - [`on`](api/internal/on.md) / [`detach`](api/internal/detach.md) {#--on--detach} + +```jsx title="Before 2.0" +editor.events.on("Change", function(action, canUndo, canRedo){ + // 여기에 코드 작성 +}); + +editor.events.detach("Change"); +``` + +```jsx title="From 2.0" +editor.api.on("set-font-size", (obj) => { + console.log(obj.fontSize); +}, { tag: "track" }); + +editor.api.detach("track"); +``` + +### - `fire()` → [`exec()`](api/internal/exec.md)와 [`intercept()`](api/internal/intercept.md) 사용 {#--fire--use-exec-and-intercept} + +```jsx title="Before 2.0" +editor.events.fire("some-event", [data]); +``` + +```jsx title="From 2.0" +editor.api.exec("some-event", obj); + +// 실행 방지 +editor.api.intercept("some-event", (obj) => false); +``` diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/news/whats_new.md b/i18n/ko/docusaurus-plugin-content-docs/current/news/whats_new.md new file mode 100644 index 0000000..0701b98 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/news/whats_new.md @@ -0,0 +1,256 @@ +--- +sidebar_label: 새로운 기능 +title: 새로운 기능 +description: DHTMLX RichText의 새로운 기능과 릴리스 히스토리를 DHTMLX JavaScript UI 라이브러리 문서에서 확인할 수 있습니다. 개발자 가이드와 API 레퍼런스를 살펴보고, 코드 예제와 라이브 데모를 체험하며, DHTMLX RichText 30일 무료 평가판을 다운로드하세요. +--- + +## 버전 2.1 {#version-21} + +2026년 6월 22일 출시 + +### 새로운 기능 {#new-functionality} + +- [`imageUploadUrl`](api/config/image-upload-url.md)는 선택 사항입니다. 생략할 경우, 이미지는 서버 없이 base64 데이터 URL 형태로 인라인 삽입됩니다 +- 드래그 앤 드롭 이미지 삽입: 이미지 파일을 에디터 영역에 직접 드롭할 수 있습니다 +- Markdown 지원: [`setValue()`](api/methods/set-value.md), [`getValue()`](api/methods/get-value.md), [`insertValue()`](api/methods/insert-value.md) 메서드의 `markdown` 인코더를 통해 에디터 콘텐츠를 Markdown으로 파싱하고 직렬화할 수 있습니다([RichText. 다양한 형식으로 작업 (Markdown, HTML, 텍스트)](https://snippet.dhtmlx.com/cne4kujn?tag=richtext) 샘플 참조) +- [`triggers`](api/config/triggers.md) 속성을 통한 멘션, 태그, 커스텀 드롭다운 트리거: `@`, `#`, `/`, `:` 등의 문자를 입력하면 제안 드롭다운이 열리고, 선택한 항목이 편집 불가능한 토큰으로 삽입됩니다([멘션과 태그](guides/mentions_and_tags.md) 가이드 및 [RichText. 멘션, 태그 및 비동기 조회](https://snippet.dhtmlx.com/nfvvfize?tag=richtext) 샘플 참조) +- [`triggerTemplate`](api/config/trigger-template.md) 속성을 통한 제안 항목의 커스텀 렌더링(예: 이름과 이메일이 포함된 아바타)([RichText. 트리거별 커스텀 드롭다운 템플릿](https://snippet.dhtmlx.com/0p3bbnhz?tag=richtext) 샘플 참조) +- 사용자가 트리거를 선택했을 때의 커스텀 동작: 토큰을 삽입하는 대신 자체 코드를 실행할 수 있습니다(이모지 삽입, 슬래시 스타일 명령 실행 등)([RichText. 이모지 자동 완성](https://snippet.dhtmlx.com/g5z1d868?tag=richtext) 및 [RichText. 슬래시 명령](https://snippet.dhtmlx.com/e0mrmyam?tag=richtext) 샘플 참조) +- RichText 인스턴스 간 서식을 유지하는 클립보드 지원(복사, 잘라내기, 붙여넣기) 및 외부 콘텐츠를 일반 텍스트로 삽입 +- 단어 및 줄 범위 삭제 단축키: `Ctrl+Backspace` / `Ctrl+Delete`(Windows/Linux) 또는 `Opt+Backspace` / `Opt+Delete`(macOS)로 이전/다음 단어 삭제; `Cmd+Backspace` / `Cmd+Delete`(macOS 전용)로 이전/다음 시각적 줄 삭제 +- 블록 들여쓰기를 변경하는 새 단축키: `Tab`으로 블록의 들여쓰기를 늘리고 `Shift+Tab`으로 줄입니다; 목록 안에서는 같은 키로 항목을 중첩하거나 해제합니다(하위 목록에서 가장 잘 보임) + +### 새로운 API {#new-api} + +#### 새로운 속성 {#new-properties} + +- [`triggers`](api/config/triggers.md) — 멘션, 태그 및 기타 토큰 삽입을 위한 드롭다운 트리거를 정의합니다 +- [`triggerTemplate`](api/config/trigger-template.md) — RichText가 제안 드롭다운에서 항목을 렌더링하는 방식을 커스터마이즈합니다 + +#### 새로운 메서드 {#new-methods} + +- [`insertValue()`](api/methods/insert-value.md) — 커서 위치에 텍스트, Markdown 또는 HTML 콘텐츠를 삽입하거나 선택된 텍스트를 대체합니다([RichText. 커서 위치에 콘텐츠 삽입](https://snippet.dhtmlx.com/pew2g1ku?tag=richtext) 샘플 참조) + +#### 새로운 이벤트 {#new-events} + +- [`show-suggest`](api/events/show-suggest.md) — 설정된 트리거에 대해 제안 드롭다운이 열릴 때 발생합니다 +- [`insert-token`](api/events/insert-token.md) — 사용자가 드롭다운에서 제안 항목을 선택하고 RichText가 이를 토큰으로 삽입한 후 발생합니다 +- [`hide-suggest`](api/events/hide-suggest.md) — 제안 드롭다운이 닫힐 때 발생합니다 + +### 수정 사항 {#fixes} + +- 인라인 콘텐츠 붙여넣기 문제(멘션, 이미지 등 인라인 요소의 내부 또는 인접 위치에 있는 콘텐츠 포함) +- 이미지를 자기 자신 위에 드롭하면 오류가 발생하는 문제 + +## 버전 2.0.6 {#version-206} + +2026년 5월 28일 출시 + +### 새로운 기능 {#new-functionality-1} + +- 선택 영역에 따라 목록을 토글하거나 변환하는 상황 인식 OL/UL 툴바 버튼 +- **들여쓰기** 및 **내어쓰기** 버튼으로 목록 중첩 수준 변경 +- 빈 목록 항목에서 Enter를 눌러 목록을 종료하거나 중첩 수준 줄이기 +- 방문한 링크에 대한 별도 색상 + +### 새로운 API {#new-api-1} + +#### 새로운 이벤트 {#new-events-1} + +- [`toggle-list`](api/events/toggle-list.md) — 사용자가 선택된 블록에서 목록을 토글할 때 발생합니다 + +### 수정 사항 {#fixes-1} + +- 목록 마커의 잘못된 수평 정렬 +- 번호 있는 목록과 번호 없는 목록 간의 일관되지 않은 패딩 +- 서식 지우기가 블록 레벨 속성을 지우지 않는 문제 +- 목록 항목 내 제목과 인용구의 잘못된 스타일링 +- 수평선 내부에 표시되는 불필요한 입력 요소 +- 목록 중간이나 끝에 수평선을 삽입할 때 에디터가 멈추는 문제 + +## 버전 2.0.5 {#version-205} + +2026년 3월 6일 출시 + +### 수정 사항 {#fixes-2} + +- IME 입력이 올바르게 처리되지 않는 문제 +- 조합 기반 입력(예: 데스크톱에서의 중국어, 일본어, 한국어)이 올바르게 처리되지 않는 문제 +- HTML 파싱 시 `margin-left` 및 `line-height` 속성이 무시되는 문제 +- 인라인 요소가 블록 레벨 부모의 속성을 상속하는 문제 +- 두 에디터 인스턴스 간에 텍스트를 복사할 수 없는 문제 +- 두 개 이상의 에디터 인스턴스가 활성화된 경우 선택 영역이 올바르게 처리되지 않는 문제 +- 단락의 유일한 콘텐츠가 이미지인 경우 커서 위치가 잘못 지정되는 문제 +- 아래 첨자 및 위 첨자 요소의 무한 중첩 문제 +- 이미지 붙여넣기 시 먼저 업로드하지 않고 인라인으로 삽입되는 문제 +- 특정 위치(첫 번째 또는 마지막 줄)에서 빈 인라인 블록을 제거할 수 없는 문제 +- 입력 시 에디터가 커서로 스크롤되지 않는 문제 +- Android에서 입력이 올바르게 처리되지 않는 문제 +- HR 요소의 잘못된 선택 처리 +- 빈 초기값으로 잘못된 렌더링 +- 자기 닫힘 블록이 포함된 경우 콘텐츠 복사가 실패할 수 있는 문제 +- Chrome: 컨텍스트 메뉴에서 이모지를 삽입할 수 없는 문제 +- Firefox: 전체 선택(CTRL+A)이 올바르게 처리되지 않는 문제 + +## 버전 2.0.4 {#version-204} + +2025년 10월 15일 출시 + +### 수정 사항 {#fixes-3} + +- 단락의 잘못된 범위 선택 +- 링크된 이미지에 인접한 경우 링크 팝업이 표시되지 않는 문제 +- 초기 툴바 값이 실제 콘텐츠와 일치하지 않는 문제 + +## 버전 2.0.3 {#version-203} + +2025년 8월 27일 출시 + +### 수정 사항 {#fixes-4} + +- 수평선을 클릭하면 스크립트 오류가 발생하는 문제 +- 기본 줄 높이가 올바르지 않은 문제 +- 콘텐츠 스타일에 중복 선택자가 포함되는 문제 +- HTML 파싱 시 일반 텍스트 블록이 스타일 변경을 무시하는 문제 +- HTML에서 파서가 이스케이프된 글꼴 이름을 무시하는 문제 +- HTML에서 파서가 `margin-left` 및 `line-height` 속성을 무시하는 문제 + +## 버전 2.0.2 {#version-202} + +2025년 8월 4일 출시 + +### 수정 사항 {#fixes-5} + +- 패키지 콘텐츠 업데이트 + +## 버전 2.0.1 {#version-201} + +2025년 7월 30일 출시 + +### 수정 사항 {#fixes-6} + +- `defaultStyles` 속성의 타입 정의 업데이트 + +## 버전 2.0 {#version-20} + +2025년 7월 30일 출시 + +:::note[참고] +v1.2의 API는 v2.0과 호환되지 않습니다. 자세한 내용은 [**마이그레이션 가이드**](news/migration.md)를 참조하세요. +::: + +### 새로운 기능 {#new-functionality-2} + +- **차세대 텍스트 렌더링** + 새로운 엔진으로 더 부드럽고, 빠르고, 정확한 텍스트 렌더링을 경험하세요 + +- **세밀한 툴바 구성** + 툴바를 완전히 제어하세요: + - [개별 툴바 컨트롤](guides/configuration.md/#default-toolbar-controls) 및 순서 정의 + - [커스텀 컨트롤](guides/configuration.md/#add-custom-toolbar-controls) 추가 + +- **선택적 [menubar](api/config/menubar.md)** + 에디터 상단에 클래식 메뉴 스타일 인터페이스를 활성화합니다 + +- **향상된 [문서 모드](guides/configuration.md/#layout-modes)** + 다양한 문서 크기 지원 추가 + +- **이미지 지원** + - [업로드 기능](api/config/image-upload-url.md)을 통한 이미지 삽입 + - 이미지를 [대화형으로 크기 조절](api/events/resize-image.md) + +- **개선된 링크 경험** + 더 나은 사용성을 위한 [팝업 인터랙션](api/events/show-popup.md) 재설계 + +- **새로운 서식 도구** + - 텍스트 정렬: **양쪽 맞춤** + - [수평선](api/events/insert-line.md) 삽입 + - [들여쓰기](api/events/indent.md) / [내어쓰기](api/events/outdent.md) + - [줄 높이](api/events/set-line-height.md) 설정 + - [아래 첨자](api/events/subscript.md) / [위 첨자](api/events/superscript.md) 적용 + +- **목록 관리** + 콘텐츠에서 [목록을 쉽게 삽입하고 관리](api/events/insert-list.md)합니다 + +- **가져오기/내보내기 및 인쇄** + - DOCX 파일 [가져오기](api/events/import.md) + - 콘텐츠를 DOCX 또는 PDF로 [내보내기](api/events/export.md) + - 에디터에서 직접 문서 [인쇄](api/events/print.md) + +- **키보드 단축키** + 일반적인 서식 지정 및 편집 단축키 지원 확대 + +### 새로운 API {#new-api-2} + +#### 새로운 속성 {#new-properties-1} + +- [`fullscreenMode`](api/config/fullscreen-mode.md) +- [`imageUploadUrl`](api/config/image-upload-url.md) +- [`layoutMode`](api/config/layout-mode.md) +- [`locale`](api/config/locale.md) +- [`menubar`](api/config/menubar.md) +- [`toolbar`](api/config/toolbar.md) +- [`value`](api/config/value.md) + +#### 새로운 메서드 {#new-methods-1} + +- [`setConfig()`](api/methods/set-config.md) — 구성을 동적으로 업데이트합니다 +- [`setLocale()`](api/methods/set-locale.md) — 즉석에서 로케일을 변경합니다 + +#### 새로운 내부 메서드 {#new-internal-methods} + +- [`api.exec()`](api/internal/exec.md) +- [`api.intercept()`](api/internal/intercept.md) +- [`api.getReactiveState()`](api/internal/get-reactive-state.md) +- [`api.getState()`](api/internal/get-state.md) + +#### 새로운 이벤트 {#new-events-2} + +새로운 이벤트 전체 목록은 [여기](api/overview/events_overview.md)에서 확인할 수 있습니다 + +### 업데이트된 API {#updated-api} + +#### 업데이트된 속성 {#updated-properties} + +- [`defaultStyles`](api/config/default-styles.md) + +#### 업데이트된 메서드 {#updated-methods} + +- [`setValue()`](api/methods/set-value.md) +- [`getValue()`](api/methods/get-value.md) + +#### 업데이트된 내부 메서드 {#updated-internal-methods} + +- [`api.detach()`](api/internal/detach.md) +- [`api.on()`](api/internal/on.md) + +## 제거된 API {#removed-api} + +:::warning[경고] +프로젝트에서 제거된 API를 사용하지 마세요!Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+de localecn localeHello
", "html"); +editor.getValue("text"); +``` + +```jsx title="From 2.0" +const fromTextEncoder = richtext.text.fromText; +const fromHTMLEncoder = richtext.html.fromHTML; + +const toTextEncoder = richtext.text.toText; +const toHTMLEncoder = richtext.html.toHTML; +... +editor.setValue("Hello
", fromHTMLEncoder); +editor.getValue(toTextEncoder); +``` + +:::note[Примечание] +Вы по-прежнему можете вызывать `getValue()` и `setValue()` без энкодера — по умолчанию используется HTML +::: + +### - [`on`](api/internal/on.md) / [`detach`](api/internal/detach.md) + +```jsx title="Before 2.0" +editor.events.on("Change", function(action, canUndo, canRedo){ + // ваш код здесь +}); + +editor.events.detach("Change"); +``` + +```jsx title="From 2.0" +editor.api.on("set-font-size", (obj) => { + console.log(obj.fontSize); +}, { tag: "track" }); + +editor.api.detach("track"); +``` + +### - `fire()` → Используйте [`exec()`](api/internal/exec.md) и [`intercept()`](api/internal/intercept.md) {#--fire--use-exec-and-intercept} + +```jsx title="Before 2.0" +editor.events.fire("some-event", [data]); +``` + +```jsx title="From 2.0" +editor.api.exec("some-event", obj); + +// Предотвращение выполнения +editor.api.intercept("some-event", (obj) => false); +``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/news/whats_new.md b/i18n/ru/docusaurus-plugin-content-docs/current/news/whats_new.md new file mode 100644 index 0000000..2710dbe --- /dev/null +++ b/i18n/ru/docusaurus-plugin-content-docs/current/news/whats_new.md @@ -0,0 +1,256 @@ +--- +sidebar_label: Что нового +title: Что нового +description: Ознакомьтесь с новыми возможностями DHTMLX RichText и историей выпусков в документации библиотеки DHTMLX JavaScript UI. Изучайте руководства для разработчиков и справочник АПИ, пробуйте примеры кода и живые демо, а также загрузите бесплатную 30-дневную ознакомительную версию DHTMLX RichText. +--- + +## Версия 2.1 {#version-21} + +Выпущена 22 июня 2026 года + +### Новые возможности {#new-functionality} + +- [`imageUploadUrl`](api/config/image-upload-url.md) является необязательным: если параметр не указан, изображения вставляются встроенно в виде base64 data URL без необходимости в сервере +- Вставка изображений перетаскиванием: переносите файл изображения прямо в область редактора +- Поддержка Markdown: разбор и сериализация содержимого редактора в Markdown через кодировщик `markdown` в методах [`setValue()`](api/methods/set-value.md), [`getValue()`](api/methods/get-value.md) и [`insertValue()`](api/methods/insert-value.md) (см. пример [RichText. Работа с различными форматами (Markdown, HTML, текст)](https://snippet.dhtmlx.com/cne4kujn?tag=richtext)) +- Упоминания, теги и пользовательские триггеры выпадающего списка через свойство [`triggers`](api/config/triggers.md): введите символ `@`, `#`, `/` или `:`, чтобы открыть выпадающий список подсказок и вставить выбранный элемент как нередактируемый токен (см. руководство [Упоминания и теги](guides/mentions_and_tags.md) и пример [RichText. Упоминания, теги и асинхронный поиск](https://snippet.dhtmlx.com/nfvvfize?tag=richtext)) +- Пользовательский рендеринг элементов подсказок через свойство [`triggerTemplate`](api/config/trigger-template.md) (например, аватар с именем и адресом электронной почты) (см. пример [RichText. Пользовательский шаблон выпадающего списка для каждого триггера](https://snippet.dhtmlx.com/0p3bbnhz?tag=richtext)) +- Пользовательское действие при выборе триггера: выполните собственный код (вставьте эмодзи, запустите команду в стиле slash и другое) вместо вставки токена (см. примеры [RichText. Автодополнение эмодзи](https://snippet.dhtmlx.com/g5z1d868?tag=richtext) и [RichText. Slash-команды](https://snippet.dhtmlx.com/e0mrmyam?tag=richtext)) +- Поддержка буфера обмена (копирование, вырезание и вставка) с сохранением форматирования между экземплярами RichText и вставкой внешнего содержимого как простого текста +- Горячие клавиши удаления слова и строки: удаление предыдущего/следующего слова с помощью `Ctrl+Backspace` / `Ctrl+Delete` (Windows/Linux) или `Opt+Backspace` / `Opt+Delete` (macOS); удаление предыдущей/следующей визуальной строки с помощью `Cmd+Backspace` / `Cmd+Delete` (только macOS) +- Новые горячие клавиши изменения отступа блока: увеличить отступ блока с помощью `Tab` и уменьшить с помощью `Shift+Tab`; внутри списков те же клавиши вкладывают и поднимают элементы списка + +### Новый АПИ {#new-api} + +#### Новые свойства {#new-properties} + +- [`triggers`](api/config/triggers.md) — определяет триггеры выпадающего списка для вставки упоминаний, тегов и других токенов +- [`triggerTemplate`](api/config/trigger-template.md) — настраивает отображение элементов в выпадающем списке подсказок RichText + +#### Новые методы {#new-methods} + +- [`insertValue()`](api/methods/insert-value.md) — вставляет текст, Markdown или HTML-содержимое в позицию курсора или заменяет выделенный текст (см. пример [RichText. Вставка содержимого в позицию курсора](https://snippet.dhtmlx.com/pew2g1ku?tag=richtext)) + +#### Новые события {#new-events} + +- [`show-suggest`](api/events/show-suggest.md) — срабатывает при открытии выпадающего списка подсказок для настроенного триггера +- [`insert-token`](api/events/insert-token.md) — срабатывает после того, как пользователь выбирает элемент подсказки в выпадающем списке и RichText вставляет его как токен +- [`hide-suggest`](api/events/hide-suggest.md) — срабатывает при закрытии выпадающего списка подсказок + +### Исправления {#fixes} + +- Проблемы со вставкой встроенного содержимого (в том числе содержимого, расположенного внутри или рядом со встроенными элементами, такими как упоминания и изображения) +- Перетаскивание изображения на себя вызывает ошибку + +## Версия 2.0.6 {#version-206} + +Выпущена 28 мая 2026 года + +### Новые возможности {#new-functionality-206} + +- Контекстные кнопки панели инструментов OL/UL, которые переключают или преобразуют списки в зависимости от выделения +- Изменение уровня вложенности списка с помощью кнопок **Увеличить отступ** и **Уменьшить отступ** +- Выход из списка или уменьшение его вложенности нажатием Enter в пустом элементе списка +- Отдельный цвет для посещённых ссылок + +### Новый АПИ {#new-api-206} + +#### Новые события {#new-events-206} + +- [`toggle-list`](api/events/toggle-list.md) — срабатывает, когда пользователь переключает список на выбранных блоках + +### Исправления {#fixes-206} + +- Некорректное горизонтальное выравнивание маркеров списка +- Непоследовательные отступы между нумерованными и маркированными списками +- Очистка форматирования не сбрасывает свойства уровня блока +- Некорректное оформление заголовков и цитат внутри элементов списка +- Посторонний элемент input, видимый внутри горизонтальных линий +- Редактор зависает при вставке горизонтальной линии в середину или конец списка + +## Версия 2.0.5 {#version-205} + +Выпущена 6 марта 2026 года + +### Исправления {#fixes-205} + +- Ввод через IME обрабатывается некорректно +- Ввод на основе композиции (например, китайский, японский, корейский на компьютере) обрабатывается некорректно +- Свойства `margin-left` и `line-height` игнорируются при разборе HTML +- Встроенные элементы наследуют свойства родительских блочных элементов +- Невозможно скопировать текст между двумя экземплярами редактора +- Выделение обрабатывается некорректно при активных двух (или более) экземплярах редактора +- Курсор располагается некорректно, когда единственным содержимым абзаца является изображение +- Бесконечное оборачивание элементов нижнего и верхнего индекса +- При вставке изображений они вставляются встроенно вместо предварительной загрузки +- Пустые встроенные блоки не могут быть удалены в определённых позициях (первая или последняя строка) +- Редактор не прокручивается до курсора при наборе текста +- Ввод на Android обрабатывается некорректно +- Некорректная обработка выделения для элементов HR +- Некорректный рендеринг с пустыми начальными значениями +- Копирование содержимого может завершаться ошибкой, если оно содержит самозакрывающиеся блоки +- Chrome: невозможно вставить эмодзи из контекстного меню +- Firefox: выделение всего текста (CTRL+A) обрабатывается некорректно + +## Версия 2.0.4 {#version-204} + +Выпущена 15 октября 2025 года + +### Исправления {#fixes-204} + +- Некорректное выделение диапазона для абзацев +- Всплывающие окна ссылок не отображаются рядом с изображениями-ссылками +- Начальные значения панели инструментов не соответствуют фактическому содержимому + +## Версия 2.0.3 {#version-203} + +Выпущена 27 августа 2025 года + +### Исправления {#fixes-203} + +- Нажатие на горизонтальную линию вызывает ошибку скрипта +- Межстрочный интервал по умолчанию задан некорректно +- Стили содержимого содержат дублирующиеся селекторы +- Блоки простого текста игнорируют изменения стилей при разборе HTML +- Парсер игнорирует экранированные названия шрифтов в HTML +- Парсер игнорирует свойства `margin-left` и `line-height` в HTML + +## Версия 2.0.2 {#version-202} + +Выпущена 4 августа 2025 года + +### Исправления {#fixes-202} + +- Обновлено содержимое пакета + +## Версия 2.0.1 {#version-201} + +Выпущена 30 июля 2025 года + +### Исправления {#fixes-201} + +- Обновлены определения типов для свойства `defaultStyles` + +## Версия 2.0 {#version-20} + +Выпущена 30 июля 2025 года + +:::note[Примечание] +АПИ версии v1.2 несовместим с v2.0. Дополнительную информацию смотрите в [**руководстве по миграции**](news/migration.md). +::: + +### Новые возможности {#new-functionality-20} + +- **Рендеринг текста нового поколения** + Более плавный, быстрый и точный рендеринг текста на основе нового движка + +- **Гибкая настройка панели инструментов** + Полный контроль над панелью инструментов: + - Задайте [отдельные элементы управления панели инструментов](guides/configuration.md/#default-toolbar-controls) и их порядок + - Добавьте [пользовательские элементы управления](guides/configuration.md/#add-custom-toolbar-controls) + +- **Необязательная [строка меню](api/config/menubar.md)** + Включите классический интерфейс в стиле меню в верхней части редактора + +- **Улучшенный [режим документа](guides/configuration.md/#layout-modes)** + Добавлена поддержка различных размеров документа + +- **Поддержка изображений** + - Вставляйте изображения с [возможностью загрузки](api/config/image-upload-url.md). + - [Изменяйте размер изображений](api/events/resize-image.md) интерактивно + +- **Улучшенная работа со ссылками** + Переработанные [всплывающие взаимодействия](api/events/show-popup.md) для повышения удобства использования + +- **Новые инструменты форматирования** + - Выравнивание текста: **по ширине** + - Вставка [горизонтальных линий](api/events/insert-line.md) + - [Увеличение отступа](api/events/indent.md) / [уменьшение отступа](api/events/outdent.md) + - Установка [межстрочного интервала](api/events/set-line-height.md) + - Применение [нижнего индекса](api/events/subscript.md) / [верхнего индекса](api/events/superscript.md) + +- **Управление списками** + Удобная [вставка списков и управление ими](api/events/insert-list.md) в содержимом + +- **Импорт/экспорт и печать** + - [Импорт файлов DOCX](api/events/import.md) + - [Экспорт](api/events/export.md) содержимого в DOCX или PDF + - [Печать](api/events/print.md) документов прямо из редактора + +- **Горячие клавиши** + Расширенная поддержка распространённых сочетаний клавиш для форматирования и редактирования + +### Новый АПИ {#new-api-20} + +#### Новые свойства {#new-properties-20} + +- [`fullscreenMode`](api/config/fullscreen-mode.md) +- [`imageUploadUrl`](api/config/image-upload-url.md) +- [`layoutMode`](api/config/layout-mode.md) +- [`locale`](api/config/locale.md) +- [`menubar`](api/config/menubar.md) +- [`toolbar`](api/config/toolbar.md) +- [`value`](api/config/value.md) + +#### Новые методы {#new-methods-20} + +- [`setConfig()`](api/methods/set-config.md) — динамически обновляет конфигурацию +- [`setLocale()`](api/methods/set-locale.md) — изменяет локаль на лету + +#### Новые внутренние методы {#new-internal-methods-20} + +- [`api.exec()`](api/internal/exec.md) +- [`api.intercept()`](api/internal/intercept.md) +- [`api.getReactiveState()`](api/internal/get-reactive-state.md) +- [`api.getState()`](api/internal/get-state.md) + +#### Новые события {#new-events-20} + +Полный список новых событий доступен [здесь](api/overview/events_overview.md) + +### Обновлённый АПИ {#updated-api} + +#### Обновлённые свойства {#updated-properties} + +- [`defaultStyles`](api/config/default-styles.md) + +#### Обновлённые методы {#updated-methods} + +- [`setValue()`](api/methods/set-value.md) +- [`getValue()`](api/methods/get-value.md) + +#### Обновлённые внутренние методы {#updated-internal-methods} + +- [`api.detach()`](api/internal/detach.md) +- [`api.on()`](api/internal/on.md) + +## Удалённый АПИ {#removed-api} + +:::warning[Предупреждение] +Не используйте удалённый АПИ в своих проектах!Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+Repository at https://git.webix.io/xbs/richtext
+de localecn localeHello
", "html"); +editor.getValue("text"); +``` + +```jsx title="From 2.0" +const fromTextEncoder = richtext.text.fromText; +const fromHTMLEncoder = richtext.html.fromHTML; + +const toTextEncoder = richtext.text.toText; +const toHTMLEncoder = richtext.html.toHTML; +... +editor.setValue("Hello
", fromHTMLEncoder); +editor.getValue(toTextEncoder); +``` + +:::note[注意] +您仍然可以不带编码器调用 `getValue()` 和 `setValue()`——默认使用 HTML 格式 +::: + +### - [`on`](api/internal/on.md) / [`detach`](api/internal/detach.md) {#--on--detach} + +```jsx title="Before 2.0" +editor.events.on("Change", function(action, canUndo, canRedo){ + // 你的代码 +}); + +editor.events.detach("Change"); +``` + +```jsx title="From 2.0" +editor.api.on("set-font-size", (obj) => { + console.log(obj.fontSize); +}, { tag: "track" }); + +editor.api.detach("track"); +``` + +### - `fire()` → 使用 [`exec()`](api/internal/exec.md) 和 [`intercept()`](api/internal/intercept.md) {#--fire--use-exec-and-intercept} + +```jsx title="Before 2.0" +editor.events.fire("some-event", [data]); +``` + +```jsx title="From 2.0" +editor.api.exec("some-event", obj); + +// 阻止执行 +editor.api.intercept("some-event", (obj) => false); +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/news/whats_new.md b/i18n/zh/docusaurus-plugin-content-docs/current/news/whats_new.md new file mode 100644 index 0000000..a68d129 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/news/whats_new.md @@ -0,0 +1,256 @@ +--- +sidebar_label: 最新动态 +title: 最新动态 +description: 您可以在 DHTMLX JavaScript UI 库文档中了解 DHTMLX RichText 的最新功能及版本历史。浏览开发者指南和 API 参考,试用代码示例和在线演示,并下载 DHTMLX RichText 的 30 天免费评估版本。 +--- + +## 版本 2.1 {#version-21} + +发布于 2026 年 6 月 22 日 + +### 新功能 {#new-functionality} + +- [`imageUploadUrl`](api/config/image-upload-url.md) 现为可选项:省略时,图片将以 base64 数据 URL 的形式内联插入,无需服务器支持 +- 拖放图片插入:将图片文件直接拖入编辑器区域即可插入 +- Markdown 支持:通过 [`setValue()`](api/methods/set-value.md)、[`getValue()`](api/methods/get-value.md) 和 [`insertValue()`](api/methods/insert-value.md) 方法中的 `markdown` 编码器,解析和序列化编辑器内容为 Markdown 格式(参见 [RichText. 使用不同格式(Markdown、HTML、纯文本)](https://snippet.dhtmlx.com/cne4kujn?tag=richtext) 示例) +- 通过 [`triggers`](api/config/triggers.md) 属性支持提及、标签和自定义下拉触发器:输入 `@`、`#`、`/` 或 `:` 等字符可打开建议下拉框,并将所选项作为不可编辑的 token 插入(参见[提及与标签](guides/mentions_and_tags.md)指南和 [RichText. 提及、标签与异步查询](https://snippet.dhtmlx.com/nfvvfize?tag=richtext) 示例) +- 通过 [`triggerTemplate`](api/config/trigger-template.md) 属性自定义建议项的渲染方式(例如,显示头像、姓名和邮箱)(参见 [RichText. 每个触发器的自定义下拉模板](https://snippet.dhtmlx.com/0p3bbnhz?tag=richtext) 示例) +- 用户选择触发器时的自定义操作:执行自定义代码(插入 emoji、触发斜杠命令等),而非插入 token(参见 [RichText. Emoji 自动补全](https://snippet.dhtmlx.com/g5z1d868?tag=richtext) 和 [RichText. 斜杠命令](https://snippet.dhtmlx.com/e0mrmyam?tag=richtext) 示例) +- 剪贴板支持(复制、剪切和粘贴):在 RichText 实例之间保留格式,将外部内容以纯文本形式插入 +- 按词和按行删除快捷键:使用 `Ctrl+Backspace` / `Ctrl+Delete`(Windows/Linux)或 `Opt+Backspace` / `Opt+Delete`(macOS)删除前一个/后一个单词;使用 `Cmd+Backspace` / `Cmd+Delete`(仅 macOS)删除前一个/后一个可视行 +- 用于更改块缩进的新快捷键:使用 `Tab` 增加块的缩进,使用 `Shift+Tab` 减少缩进;在列表中,相同的按键可嵌套或提升列表项(在子列表中最为明显) + +### 新增 API {#new-api} + +#### 新增属性 {#new-properties} + +- [`triggers`](api/config/triggers.md) — 定义用于插入提及、标签和其他 token 的下拉触发器 +- [`triggerTemplate`](api/config/trigger-template.md) — 自定义 RichText 在建议下拉框中渲染条目的方式 + +#### 新增方法 {#new-methods} + +- [`insertValue()`](api/methods/insert-value.md) — 在光标位置插入文本、Markdown 或 HTML 内容,或替换选中的文本(参见 [RichText. 在光标处插入内容](https://snippet.dhtmlx.com/pew2g1ku?tag=richtext) 示例) + +#### 新增事件 {#new-events} + +- [`show-suggest`](api/events/show-suggest.md) — 当已配置触发器的建议下拉框打开时触发 +- [`insert-token`](api/events/insert-token.md) — 用户在下拉框中选择建议项且 RichText 将其作为 token 插入后触发 +- [`hide-suggest`](api/events/hide-suggest.md) — 当建议下拉框关闭时触发 + +### 修复 {#fixes} + +- 粘贴内联内容时出现的问题(包括放置在提及、图片等内联元素内部或附近的内容) +- 将图片拖放到其自身上时抛出错误 + +## 版本 2.0.6 {#version-206} + +发布于 2026 年 5 月 28 日 + +### 新功能 {#new-functionality-1} + +- 上下文感知的 OL/UL 工具栏按钮,可根据选区切换或转换列表类型 +- 通过**增加缩进**和**减少缩进**按钮更改列表嵌套级别 +- 在空列表项中按 Enter 键可退出列表或减少其嵌套级别 +- 已访问链接显示独特颜色 + +### 新增 API {#new-api-1} + +#### 新增事件 {#new-events-1} + +- [`toggle-list`](api/events/toggle-list.md) — 用户切换所选块的列表时触发 + +### 修复 {#fixes-1} + +- 列表标记的水平对齐不正确 +- 有序列表与无序列表之间的内边距不一致 +- 清除格式时未清除块级属性 +- 列表项内的标题和块引用样式不正确 +- 水平线内可见多余的 input 元素 +- 在列表中间或末尾插入水平线时编辑器卡死 + +## 版本 2.0.5 {#version-205} + +发布于 2026 年 3 月 6 日 + +### 修复 {#fixes-2} + +- IME 输入未被正确处理 +- 基于组合输入法的输入(例如,桌面端的中文、日文、韩文)未被正确处理 +- 解析 HTML 时忽略 `margin-left` 和 `line-height` 属性 +- 内联元素从块级父元素继承属性 +- 无法在两个编辑器实例之间复制文本 +- 两个(或更多)编辑器实例同时激活时选区处理不正确 +- 段落中唯一内容为图片时光标定位不正确 +- 上标和下标元素无限嵌套 +- 粘贴图片时内联插入而非先上传 +- 在特定位置(首行或末行)无法移除空内联块 +- 输入时编辑器未滚动至光标位置 +- Android 上的输入未被正确处理 +- HR 元素的选区处理不正确 +- 初始值为空时渲染不正确 +- 内容包含自闭合块时复制可能失败 +- Chrome:无法从右键菜单插入 emoji +- Firefox:全选(CTRL+A)未被正确处理 + +## 版本 2.0.4 {#version-204} + +发布于 2025 年 10 月 15 日 + +### 修复 {#fixes-3} + +- 段落的范围选区不正确 +- 与链接图片相邻时链接弹出框不显示 +- 工具栏初始值与实际内容不一致 + +## 版本 2.0.3 {#version-203} + +发布于 2025 年 8 月 27 日 + +### 修复 {#fixes-4} + +- 点击水平线导致脚本错误 +- 默认行高不正确 +- 内容样式包含重复选择器 +- 解析 HTML 时纯文本块忽略样式更改 +- 解析器忽略 HTML 中转义的字体名称 +- 解析器忽略 HTML 中的 `margin-left` 和 `line-height` 属性 + +## 版本 2.0.2 {#version-202} + +发布于 2025 年 8 月 4 日 + +### 修复 {#fixes-5} + +- 更新了软件包内容 + +## 版本 2.0.1 {#version-201} + +发布于 2025 年 7 月 30 日 + +### 修复 {#fixes-6} + +- 更新 `defaultStyles` 属性的类型定义 + +## 版本 2.0 {#version-20} + +发布于 2025 年 7 月 30 日 + +:::note[注意] +v1.2 的 API 与 v2.0 不兼容。请参阅[**迁移指南**](news/migration.md)获取更多信息。 +::: + +### 新功能 {#new-functionality-2} + +- **新一代文本渲染** + 全新渲染引擎带来更流畅、更快速、更精准的文本渲染体验 + +- **精细化工具栏配置** + 全面掌控工具栏: + - 定义[单个工具栏控件](guides/configuration.md/#default-toolbar-controls)及其顺序 + - 添加[自定义控件](guides/configuration.md/#add-custom-toolbar-controls) + +- **可选的[菜单栏](api/config/menubar.md)** + 在编辑器顶部启用经典菜单栏界面 + +- **增强的[文档模式](guides/configuration.md/#layout-modes)** + 新增对不同文档尺寸的支持 + +- **图片支持** + - 插入带[上传功能](api/config/image-upload-url.md)的图片 + - 交互式[调整图片大小](api/events/resize-image.md) + +- **改进的链接体验** + 重新设计的[弹出框交互](api/events/show-popup.md),提升可用性 + +- **新增格式化工具** + - 文本对齐:**两端对齐** + - 插入[水平线](api/events/insert-line.md) + - [增加缩进](api/events/indent.md) / [减少缩进](api/events/outdent.md) + - 设置[行高](api/events/set-line-height.md) + - 应用[下标](api/events/subscript.md) / [上标](api/events/superscript.md) + +- **列表管理** + 在内容中轻松[插入和管理列表](api/events/insert-list.md) + +- **导入/导出与打印** + - [导入 DOCX](api/events/import.md) 文件 + - 将内容[导出](api/events/export.md)为 DOCX 或 PDF + - 直接从编辑器[打印](api/events/print.md)文档 + +- **键盘快捷键** + 扩展了对常用格式化和编辑快捷键的支持 + +### 新增 API {#new-api-2} + +#### 新增属性 {#new-properties-1} + +- [`fullscreenMode`](api/config/fullscreen-mode.md) +- [`imageUploadUrl`](api/config/image-upload-url.md) +- [`layoutMode`](api/config/layout-mode.md) +- [`locale`](api/config/locale.md) +- [`menubar`](api/config/menubar.md) +- [`toolbar`](api/config/toolbar.md) +- [`value`](api/config/value.md) + +#### 新增方法 {#new-methods-1} + +- [`setConfig()`](api/methods/set-config.md) — 动态更新配置 +- [`setLocale()`](api/methods/set-locale.md) — 动态切换语言 + +#### 新增内部方法 {#new-internal-methods} + +- [`api.exec()`](api/internal/exec.md) +- [`api.intercept()`](api/internal/intercept.md) +- [`api.getReactiveState()`](api/internal/get-reactive-state.md) +- [`api.getState()`](api/internal/get-state.md) + +#### 新增事件 {#new-events-2} + +完整的新增事件列表请参见[此处](api/overview/events_overview.md) + +### 更新的 API {#updated-api} + +#### 更新的属性 {#updated-properties} + +- [`defaultStyles`](api/config/default-styles.md) + +#### 更新的方法 {#updated-methods} + +- [`setValue()`](api/methods/set-value.md) +- [`getValue()`](api/methods/get-value.md) + +#### 更新的内部方法 {#updated-internal-methods} + +- [`api.detach()`](api/internal/detach.md) +- [`api.on()`](api/internal/on.md) + +## 已移除的 API {#removed-api} + +:::warning[警告] +请勿在您的项目中使用已移除的 API!