feat(rtl): add language switcher toolbar

This commit is contained in:
Elian Doran 2025-03-03 18:12:15 +02:00
parent b99ead6a84
commit e930ae5f40
No known key found for this signature in database
3 changed files with 83 additions and 66 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -110,19 +110,19 @@ export function buildConfig() {
} }
export function buildToolbarConfig(isClassicToolbar: boolean) { export function buildToolbarConfig(isClassicToolbar: boolean) {
const languages = JSON.parse(options.get("languages") ?? "[]") as string[];
const enableLanguageSwitcher = languages.length > 1;
if (isClassicToolbar) { if (isClassicToolbar) {
const multilineToolbar = utils.isDesktop() && options.get("textNoteEditorMultilineToolbar") === "true" const multilineToolbar = utils.isDesktop() && options.get("textNoteEditorMultilineToolbar") === "true"
return buildClassicToolbar(multilineToolbar); return buildClassicToolbar(multilineToolbar, enableLanguageSwitcher);
} else { } else {
return buildFloatingToolbar(); return buildFloatingToolbar(enableLanguageSwitcher);
} }
} }
function buildClassicToolbar(multilineToolbar: boolean) { function buildClassicToolbar(multilineToolbar: boolean, enableLanguageSwitcher: boolean) {
// For nested toolbars, refer to https://ckeditor.com/docs/ckeditor5/latest/getting-started/setup/toolbar.html#grouping-toolbar-items-in-dropdowns-nested-toolbars. const items = [
return {
toolbar: {
items: [
'heading', 'fontSize', 'heading', 'fontSize',
'|', '|',
'bold', 'italic', 'bold', 'italic',
@ -163,17 +163,25 @@ function buildClassicToolbar(multilineToolbar: boolean) {
'|', '|',
'outdent', 'indent', 'outdent', 'indent',
'|', '|',
'markdownImport', 'cuttonote', 'findAndReplace' 'markdownImport', 'cuttonote', 'findAndReplace',
], ];
if (enableLanguageSwitcher) {
items.push('|');
items.push('textPartLanguage');
}
// For nested toolbars, refer to https://ckeditor.com/docs/ckeditor5/latest/getting-started/setup/toolbar.html#grouping-toolbar-items-in-dropdowns-nested-toolbars.
return {
toolbar: {
items,
shouldNotGroupWhenFull: multilineToolbar shouldNotGroupWhenFull: multilineToolbar
} }
} }
} }
function buildFloatingToolbar() { function buildFloatingToolbar(enableLanguageSwitcher: boolean) {
return { const items = [
toolbar: {
items: [
'fontSize', 'fontSize',
'bold', 'bold',
'italic', 'italic',
@ -188,7 +196,16 @@ function buildFloatingToolbar() {
'removeFormat', 'removeFormat',
'internallink', 'internallink',
'cuttonote' 'cuttonote'
] ];
if (enableLanguageSwitcher) {
items.push('|');
items.push('textPartLanguage');
}
return {
toolbar: {
items
}, },
blockToolbar: [ blockToolbar: [