|
| 1 | +# ▼ Filtrování událostí v pluginech |
| 2 | + |
| 3 | +V pluginech existuje přepínač na (de)aktivaci filtru na příjem událostí podle **aliasName (id)** instance pluginu: |
| 4 | + |
| 5 | +```javascript |
| 6 | +this.eventIdStrict = true; |
| 7 | +``` |
| 8 | + |
| 9 | +Volání provádějte v konstruktoru nebo na začátku funkce init() nebo nejpozději před voláním base.init(). |
| 10 | + |
| 11 | +Filtrování událostí je dvoustupňové - podle eventIdStrict a jména obslužné funkce. V následujících podkapitolách je popsáno podrobněji. |
| 12 | + |
| 13 | +## Úvodní souhrn |
| 14 | + |
| 15 | +- Funkce **onET_(jméno události)** přijímá všechny události s eventName = (jméno události) |
| 16 | +- Funkce **onET(jméno události)** přijímá všechny události s eventName = (jméno události) a id = plugin.aliasName |
| 17 | +- **Plugin s plugin.aliasName = ''** přijímá všechny události do funkce **onET(jméno události)** nebo **onET_(jméno události)** |
| 18 | + |
| 19 | +## Diagram rozhodovacího procesu |
| 20 | + |
| 21 | +```mermaid |
| 22 | +flowchart LR |
| 23 | + Event[⚡ Událost - eventName, id] --> Check1 |
| 24 | + Plugin[🧩 Plugin - aliasName] --> Check4 |
| 25 | + Plugin --> Check5 |
| 26 | + Check1{Existuje 👂 onET_:eventName:} -->|TRUE| EndY |
| 27 | + Check1 -->|FALSE| Check2 |
| 28 | + Check2{eventIdStrict} -->|🔺 TRUE| Check3 |
| 29 | + Check2 -->|🟢 FALSE| Check5 |
| 30 | + Check3{Existuje 👂 onET:eventName:} -->|FALSE| EndN |
| 31 | + Check3 -->|TRUE| Check4 |
| 32 | + Check4{Událost.id = Plugin.aliasName} -->|TRUE| EndY |
| 33 | + Check4 -->|FALSE| Check5 |
| 34 | + Check5{Událost.id nebo Plugin.aliasName = ''} -->|TRUE| EndY |
| 35 | + Check5 -->|FALSE| EndN |
| 36 | + EndY[✔️ Předej do pluginu] |
| 37 | + EndN[⛔ Nepředávej] |
| 38 | +``` |
| 39 | + |
| 40 | +## 0. Význam hodnot aliasName (''/...) |
| 41 | + |
| 42 | +| Hodnota aliasName | Popis | |
| 43 | +|---|---| |
| 44 | +| '' | (Inicializace **třída:** v seznamu pluginů). Pokud je nastavena tato hodnota, plugin je schopný přijímat většinu zpráv systému (jsou běžně posílány s nevyplněným id). | |
| 45 | +| xxx | V případě jakkoli jinak vyplněné hodnoty o dalším zpracování rozhoduje vlastnost **eventIdStrict**. | |
| 46 | + |
| 47 | +## 1. Význam hodnot eventIdStrict (🟢/🔺) |
| 48 | + |
| 49 | +Obvyklá hodnota bývá **false**, aby plugin přijímal všechny události nezávisle na jejich id. |
| 50 | + |
| 51 | +| Hodnota eventIdStrict | Popis | |
| 52 | +|---|---| |
| 53 | +| false | 🟢 Není filtrováno id příchozích událostí. Příchozí události se filtrují pouze obsluhami na pluginu, které se jmenují **onET_(jméno události)** nebo **onET(jméno události)** | |
| 54 | +| true | 🔺 Požadována striktní shoda id v událostech. Tedy pokud **aliasName** (**id** pluginu) a **id** v události se shodují, pak je událost předána pluginu. Aby plugin událost zpracoval, musí mít navíc definovanou metodu obsluhy **onET_(jméno události)** nebo **onET(jméno události)** | |
| 55 | + |
| 56 | +Pokud je zde **false** a plugin má **aliasName (id)** prázdné (inicializace **třída:**), pak událost **je předána** ke zpracování do dalšího kroku. V případě **false** také není rozhodující jméno obsluhy **ET vs. ET_**. |
| 57 | + |
| 58 | +## 2. Jméno obslužné funkce (ET/ET_) |
| 59 | + |
| 60 | +| Jméno události | Výsledek | |
| 61 | +|---|---| |
| 62 | +| **neexistuje žádná onET funkce v pluginu** | Událost není pluginu předána ke zpracování. | |
| 63 | +| onET_(jméno události) | (onET podtržítko) Událost je pluginu předána ke zpracování **bez ohledu na shodu id události a pluginu**. ⚠️ **Jméno funkce s podtržítkem je nadřazeno nastavení eventIdStrict.** | |
| 64 | +| onET(jméno události) | (onET) Událost je pluginu předána ke zpracování **pouze když id události a pluginu se shodují**. Nezadané id pluginu je také považováno za shodu. | |
| 65 | + |
| 66 | +## Jak rozhodnout nastavení? |
| 67 | + |
| 68 | +Plugin by neměl poslouchat všechny události, ale budou se zasílat jen některé přímo jemu, proto dostane konkrétní id a eventIdStrict = true. |
| 69 | + |
| 70 | +EventIdStrict na **true** nastavte minimálně v těchto případech: |
| 71 | + |
| 72 | +- Plugin bude (nebo může) běžet ve více než jedné instanci (například 📇 slovník klíčových slov a 🔎 fulltext hledání) |
| 73 | +- Plugin bude součástí procesu (🖼️ [pTRPhasePlugin][pTRPhasePlugin] - vypisování obsahu kapitoly) |
| 74 | +- Plugin bude součástí většího funkčního celku (🔹 [pIndexFile:fulltextList][pIndexFile] - dynamické vytvoření fulltext indexu nápovědy) |
| 75 | + |
| 76 | +[pTRPhasePlugin]: pTRPhasePlugin.md "pTRPhasePlugin" |
| 77 | +[pIndexFile]: :inst:pIndexFile:fulltextList.md "pIndexFile:fulltextList" |
0 commit comments