From 390126a28ab697d28513422a1a2a287b20298365 Mon Sep 17 00:00:00 2001 From: Antoine Guenet Date: Fri, 22 Jul 2022 16:43:31 +0000 Subject: [PATCH] [ADD] frontend: documentation for the editor's Powerbox This adds a simple documentation for the editor's Powerbox and creates the base for the editor's own documentation in general. closes odoo/documentation#2586 Signed-off-by: Antoine Guenet (age) --- content/developer/reference/frontend.rst | 1 + .../reference/frontend/odoo_editor.rst | 231 ++++++++++++++++++ .../frontend/odoo_editor/powerbox-custom.png | Bin 0 -> 7765 bytes .../odoo_editor/powerbox-filtered.png | Bin 0 -> 5913 bytes .../frontend/odoo_editor/powerbox.png | Bin 0 -> 10019 bytes 5 files changed, 232 insertions(+) create mode 100644 content/developer/reference/frontend/odoo_editor.rst create mode 100644 content/developer/reference/frontend/odoo_editor/powerbox-custom.png create mode 100644 content/developer/reference/frontend/odoo_editor/powerbox-filtered.png create mode 100644 content/developer/reference/frontend/odoo_editor/powerbox.png diff --git a/content/developer/reference/frontend.rst b/content/developer/reference/frontend.rst index 162193ab7..2f38ff717 100644 --- a/content/developer/reference/frontend.rst +++ b/content/developer/reference/frontend.rst @@ -19,4 +19,5 @@ JavaScript framework frontend/javascript_reference frontend/mobile frontend/qweb + frontend/odoo_editor frontend/icons_library diff --git a/content/developer/reference/frontend/odoo_editor.rst b/content/developer/reference/frontend/odoo_editor.rst new file mode 100644 index 000000000..c4add43b1 --- /dev/null +++ b/content/developer/reference/frontend/odoo_editor.rst @@ -0,0 +1,231 @@ +=========== +Odoo Editor +=========== + +Odoo Editor is Odoo's own rich text editor. Its sources can be found in the +`odoo-editor directory +<{GITHUB_PATH}/addons/web_editor/static/src/js/editor/odoo-editor>`_. + +Powerbox +======== + +The Powerbox is a piece of user interface that contains +:ref:`commands ` organized +into :ref:`categories `. It +appears when typing `/` in the editor. The commands can be filtered when the +user inputs text, and navigated with the arrow keys. + +.. image:: odoo_editor/powerbox.png + :align: center + :alt: The Powerbox opened after typing "/". + +Modifying the Powerbox +---------------------- + +Only one Powerbox should be instantiated at the time, and that job is done by +the editor itself. Its Powerbox instance can be found in its `powerbox` instance +variable. +To change the Powerbox's contents and options, change the options passed to the +editor before it gets instantiated. + +.. important:: + Never instantiate the Powerbox yourself. Always use the current editor's own + instance instead. + +.. example:: + Say we want to add a new command `Document` to the Powerbox, just for the + `mass_mailing` module. We want to add it to a new category called + `Documentation` and we want it all the way at the top of the Powerbox. + + `mass_mailing` `extends + <{GITHUB_PATH}/addons/mass_mailing/static/src/js/wysiwyg.js>`_ + `web_editor`'s `Wysiwyg class + <{GITHUB_PATH}/addons/web_editor/static/src/js/wysiwyg/wysiwyg.js>`_, which + instantiates the editor in its `start` method. Before doing so, it + calls its own `_getPowerboxOptions` method, which can conveniently be + overridden to add our new commands. + + Since `mass_mailing` already overrides `_getPowerboxOptions`, let's just add + our new command to it: + + .. code-block:: javascript + + _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; + } + + .. important:: + In order to allow the names and descriptions of your commands and + categories to be translated, make sure to wrap them in the `_t` function. + + .. tip:: + To avoid out-of-control escalations, don't use random numbers for your + priorities: look at which other priorities already exist and choose your + value accordingly (like you would do for a `z-index`). + +Opening a custom Powerbox +------------------------- + +It is possible to open the Powerbox with a custom set of categories and +commands, bypassing all pre-existing ones. To do that, call the `open` method of +the Powerbox and pass it your custom commands and categories. + +.. image:: odoo_editor/powerbox-custom.png + :align: center + :alt: The Powerbox opened with custom categories and commands when pasting an + image URL. + +.. example:: + We need the current instance of the Powerbox, which can be found in the + current editor. In the `Wysiwyg class + <{GITHUB_PATH}/addons/web_editor/static/src/js/wysiwyg/wysiwyg.js>`_, you + will find it as `this.odooEditor.powerbox`. + + Now to open it with our custom "Document" command in a custom + "Documentation" category: + + .. code-block:: javascript + + 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, + }] + ); + +Filtering commands +------------------ + +There are three ways to filter commands: + +#. Via the `powerboxFilters` + :ref:`Powerbox option `. +#. Via a given + :ref:`command `'s + `isDisabled` entry. +#. The user can filter commands by simply typing text after opening the + Powerbox. It will fuzzy-match that text with the names of the categories and + commands. + +.. image:: odoo_editor/powerbox-filtered.png + :align: center + :alt: The Powerbox with its commands filtered using the word "head". + +Reference +--------- + +.. _reference/frontend/odoo_editor/powerbox/category: + +Category +~~~~~~~~ + +.. list-table:: + :widths: 20 20 60 + :header-rows: 1 + + * - Name + - Type + - Description + * - `name` + - `string` + - the name of the category + * - `priority` + - `number` + - used to order the category: a category with a higher priority is + displayed higher into the Powerbox (categories with the same priority + are ordered alphabetically) + +.. note:: + If several categories exist with the same name, they will be grouped into + one. Its priority will be that defined in the version of the category that + was declared last. + +.. _reference/frontend/odoo_editor/powerbox/command: + +Command +~~~~~~~ + +.. list-table:: + :widths: 20 20 60 + :header-rows: 1 + + * - Name + - Type + - Description + * - `name` + - `string` + - the name of the command + * - `category` + - `string` + - the name of the category the command belongs to + * - `description` + - `string` + - a short text to describe the command + * - `fontawesome` + - `string` + - the name of a *Font Awesome* that will serve as the command's icon + * - `priority` + - `number` + - used to order the command: a command with a higher priority is displayed + higher into the Powerbox (commands with the same priority are ordered + alphabetically) + * - `callback` + - `function` (`() => void`) + - the function to execute when the command is picked (can be asynchronous) + * - `isDisabled` (optional) + - `function` (`() => void`) + - a function used to disable the command under certain conditions (when it + returns `true`, the command will be disabled) + +.. note:: + If the command points to a category that doesn't exist yet, that category + will be created and appended at the end of the Powerbox. + +.. _reference/frontend/odoo_editor/powerbox/options: + +Options +~~~~~~~ + +The following options can be passed to OdooEditor, that will then be passed to +the instance of the Powerbox: + +.. list-table:: + :widths: 20 20 60 + :header-rows: 1 + + * - Name + - Type + - Description + * - `commands` + - `array of commands` + - commands to add to the default defined by the editor + * - `categories` + - `array of categories` + - categories to add to the default defined by the editor + * - `powerboxFilters` + - `array of functions` (`commands => commands`) + - functions used to filter commands displayed in the Powerbox + * - `getContextFromParentRect` + - `function` (`() => DOMRect`) + - a function that returns the `DOMRect` of an ancestor of the editor (can + be useful when the editor is in an iframe) diff --git a/content/developer/reference/frontend/odoo_editor/powerbox-custom.png b/content/developer/reference/frontend/odoo_editor/powerbox-custom.png new file mode 100644 index 0000000000000000000000000000000000000000..e81152e327cc796698cf2098973c9e75da0eb3d8 GIT binary patch literal 7765 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 IZt?Yh0pEwBumAu6 literal 0 HcmV?d00001 diff --git a/content/developer/reference/frontend/odoo_editor/powerbox-filtered.png b/content/developer/reference/frontend/odoo_editor/powerbox-filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..8732e4462984dce3fe54835d9a760a6257770662 GIT binary patch literal 5913 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 eWn%ST;$jtj6_FRjtdEUtXmZlZQWX*gKmG?