= Chat block processor
:toc:


A link:https://docs.asciidoctor.org/asciidoctor/latest/extensions/block-processor/[block processor] that adds a a dialog box style to the block.
Exclusive to the HTML backend.


== Synopsis

....
[chat, $AVATARNAME, $AVATARSTATE, $ATTRS...]
====
$CONTENT
====
....

The avatar name is the name of the folder to be retrieved from the `avatarsdir` attribute.
The directory enforces a certain structure which can be seen in <<extra-notes>>.

Both the avatar name and the state are to be converted to snake case (e.g., `El Pablo` to `el_pablo`) for the image path.


== Attributes

* `avatarsdir` is the folder containing the avatars' stickers.
This is explained in detail from the <<extra-notes>> section.

* `avatarstype` is similar to `icontype` attribute except this is used for the avatar stickers.
The default value is `webp`.

* `state` is the sticker to be retrieved from the avatars directory.
It has a default value of `default`.
You could also use this attribute instead of the `$AVATARSTATE` positional argument for whatever reason.

* `name` is the canonical name of the avatar.
This is used for titles and alts in the internal image block.
By default, this is the same as the given avatar.


[#extra-notes]
== Extra notes

This component has some prerequisites for this to fully work specifically with `avatarsdir` attribute that contains a list of avatars and their stickers.
By default, this value is at the `avatars` subdirectory of the `iconsdir` attribute.
It is recommended to set this value yourself.
+
--
This enforces a certain structure where the root directory contains a list of folders representing the avatar with each of the folder containing stickers which represents their state.
For example, here's what `avatarsdir` could contain following the expected structure.

[source]
----
./static/icons/avatars/
├── ezran/
│   ├── crisis.webp
│   ├── default.webp
│   ├── sad.webp
│   └── shocked.webp
└── foodogsquared/
    ├── crisis.webp
    ├── default.webp
    ├── sad.webp
    └── shocked.webp
----
--


== Example usage

Let's assume `avatarsdir` is set to the `static/icons/avatars` with the following file structure.

[source]
----
./static/icons/avatars/
├── ezran/
│   ├── crisis.webp
│   ├── default.webp
│   ├── sad.webp
│   └── shocked.webp
├── el-pablo/
│   ├── crisis.webp
│   ├── default.webp
│   ├── ghastly.webp
│   ├── melodramatic.webp
│   ├── sad.webp
│   └── shocked.webp
└── foodogsquared/
    ├── crisis.webp
    ├── default.webp
    ├── sad.webp
    └── shocked.webp
----

- The following block should get the default image for `foodogsquared` which is in `./static/icons/avatars/foodogsquared/default.webp`.
+
....
[chat, foodogsquared]
====
Hello there!
====
....

- The following block should contain El Pablo's melodramatic dialog state.
Take note of the resulting path for the image which is in kebab-case.
+
....
[chat, El Pablo, state=melodramatic]
====
What tragedy is happening here!
I couldn't take it.

__Please__.
====
....