Редактор Odoo

Odoo Editor - це власний текстовий редактор Odoo. Його вихідні коди можна знайти в каталозі odoo-editor.

Powerbox

Powerbox - це елемент інтерфейсу користувача, який містить команди, організовані в категорії. Він відображається після натискання / у редакторі. Команди можна фільтрувати, коли користувач вводить текст, і переміщатися між ними за допомогою клавіш зі стрілками.

Powerbox відкрився після натискання "/".

Модифікація Powerbox

Одночасно має бути створено лише один екземпляр Powerbox, і це завдання виконує сам редактор. Його екземпляр Powerbox можна знайти у змінній екземпляра powerbox. Щоб змінити вміст та параметри Powerbox, змініть параметри, передані редактору, перш ніж його буде створено.

Важливо

Ніколи не створюйте екземпляр Powerbox самостійно. Завжди використовуйте власний екземпляр поточного редактора.

Example

Припустимо, ми хочемо додати нову команду Document до Powerbox, лише для модуля mass_mailing. Ми хочемо додати її до нової категорії під назвою Documentation, і ми хочемо, щоб вона розміщувалася у верхній частині Powerbox.

mass_mailing розширюється web_editor Wysiwyg class, який створює екземпляр редактора у своєму методі start. Перед цим він викликає власний метод _getPowerboxOptions, який зручно перевизначити для додавання наших нових команд.

Оскільки mass_mailing вже перевизначає _getPowerboxOptions, давайте просто додамо до нього нашу нову команду:

_getPowerboxOptions: function () {
    const options = this._super();
    // (existing code before the return statement)
    options.categories.push({
        name: _t('Documentation'),
        priority: 300,
    });
    options.commands.push({
        name: _t('Document'),
        category: _t('Documentation'),
        description: _t("Add this text to your mailing's documentation"),
        fontawesome: 'fa-book',
        priority: 1, // This is the only command in its category anyway.
    });
    return options;
}

Важливо

Щоб назви та описи ваших команд і категорій можна було перекласти, обов’язково обгорніть їх у функцію _t.

Порада

Щоб уникнути неконтрольованих ескалацій, не використовуйте випадкові числа для своїх пріоритетів: перевірте, які інші пріоритети вже існують, і виберіть своє значення відповідно (як ви б це зробили для z-index).

Відкриття власного Powerbox

Можна відкрити Powerbox за допомогою власного набору категорій та команд, обходячи всі існуючі. Для цього викличте метод open Powerbox та передайте йому ваші власні команди та категорії.

Powerbox відкривався з користувацькими категоріями та командами під час вставки URL-адреси зображення.

Example

Нам потрібен поточний екземпляр Powerbox, який можна знайти в поточному редакторі. У класі Wysiwyg ви знайдете його як this.odooEditor.powerbox.

Тепер, щоб відкрити його за допомогою нашої власної команди «Документ» у власній категорії «Документація»:

this.odooEditor.powerbox.open(
    [{
        name: _t('Document'),
        category: _t('Documentation'),
        description: _t("Add this text to your mailing's documentation"),
        fontawesome: 'fa-book',
        priority: 1, // This is the only command in its category anyway.
    }],
    [{
        name: _t('Documentation'),
        priority: 300,
    }]
);

Команди фільтрації

Існує три способи фільтрації команд:

  1. Через параметр powerboxFilters Powerbox.

  2. Через заданий запис команда’s isDisabled.

  3. Користувач може фільтрувати команди, просто ввівши текст після відкриття Powerbox. Програма нечітко зіставить цей текст з назвами категорій та команд.

Powerbox з його командами, відфільтрованими за допомогою слова "head".

Референс

Категорія

Name

Тип

Опис

name

string

назва категорії

priority

number

використовується для впорядкування категорії: категорія з вищим пріоритетом відображається вище в Powerbox (категорії з однаковим пріоритетом упорядковані в алфавітному порядку)

Примітка

Якщо існує кілька категорій з однаковою назвою, вони будуть об’єднані в одну. Її пріоритет буде визначений у версії категорії, яка була оголошена останньою.

Команда

Name

Тип

Опис

name

string

назва команди

category

string

назва категорії, до якої належить команда

description

string

короткий текст для опису команди

fontawesome

string

назва Шрифта Awesome, який слугуватиме піктограмою команди

priority

number

використовується для впорядкування команди: команда з вищим пріоритетом відображається вище в Powerbox (команди з однаковим пріоритетом упорядковані в алфавітному порядку)

callback

function (() => void)

функція, яка виконується при виборі команди (може бути асинхронною)

isDisabled (необов’язково)

function (() => void)

функція, яка використовується для вимкнення команди за певних умов (коли вона повертає true, команда буде вимкнена)

Примітка

Якщо команда вказує на категорію, якої ще не існує, ця категорія буде створена та додана в кінець Powerbox.

Параметри

Наступні параметри можна передати до OdooEditor, які потім будуть передані до екземпляра Powerbox:

Name

Тип

Опис

commands

array of commands

команди для додавання до значення за замовчуванням, визначеного редактором

categories

array of categories

категорії, які потрібно додати до стандартних, визначених редактором

powerboxFilters

array of functions (commands => commands)

функції, що використовуються для фільтрації команд, що відображаються в Powerbox

getContextFromParentRect

function (() => DOMRect)

функція, яка повертає DOMRect предка редактора (може бути корисною, коли редактор знаходиться в iframe)