Skip to content

Commit ea12876

Browse files
committed
CZ : eventFilter, pluginLoad, puiButton, clarifications in other chapters
1 parent 3835586 commit ea12876

8 files changed

Lines changed: 189 additions & 5 deletions

File tree

cs/eventFilter.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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"

cs/files.lst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ implPlug.md|Implementace pluginů
1818
lists.md|Seznamy zavádění
1919
pTopicRenderer.md|pTopicRenderer
2020
pluginConfig.md|Konfigurace pluginů
21+
pluginLoad.md|Zavádění pluginů
22+
puiButton.md|puiButton
23+
eventFilter.md|Filtrování událostí v pluginech

cs/oexplorer.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Dále podporuje:
3636

3737
- vývojářské ruční definice vazeb
3838
- statická analýza (skenování kódu, který je načtený, ale neběží)
39-
- dynamická analýza (automatizované skenování běhu a zaslaných událostí během provozu)
39+
- dynamická analýza (automatizované skenování běhu a zaslaných událostí během provozu - ⚡ [DebugEventEvent][DebugEventEvent])
4040

4141
## Omezení
4242

@@ -47,3 +47,4 @@ Dále podporuje:
4747
[OEGroups]: :_/README.md "Seznam kategorií"
4848
[OETree]: :_/tree/TREE.md "Strom dědičností"
4949
[OELoadOrder]: :_/LORDER.md "Pořadí zavádění"
50+
[DebugEventEvent]: :_evt:DebugEventEvent.md "DebugEventEvent"

cs/pTopicRenderer.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Pokud aplikace běží v [debug režimu][debug], plugin průběh své činnosti
3737
Je doporučeno, aby každá fáze měla definovaný aspoň jeden plugin. Pokud v daném procesu fáze vhodná není, ale nechcete ji odebírat, definujte instanci pluginu 🖼️ [pTREmptyPlugin][pTREmptyPlugin].
3838
5. Po dokončení zpracování všech kroků (odpovídají za ně potomci 🖼️ [pTRPhasePlugin][pTRPhasePlugin]) odešle událost ⚡ [ChapterShown][ChapterShown], kterou obvykle přijímá plugin 🧩 [pAppmainNext][pAppmainNext], který je hlavním pluginem aplikace a má na tuto událost obsluhu.
3939

40-
## Aplikace
40+
## Příklady implementací
4141

4242
- Vypisování obsahu kapitoly uživateli
4343
- Příprava fulltext slovníku v případě, že není v nápovědě k dispozici předgenerovaný slovník ze CI/CD skriptu

cs/pluginConfig.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# ⚙️ Konfigurace pluginů
22

3-
Aplikace automaticky při načítání pluginů zajišťuje propis konfigurace do jednotlivých instancí pluginů při jejich zavádění.
3+
Aplikace automaticky zajišťuje propis konfigurace do jednotlivých instancí pluginů při jejich zavádění.
44

5-
Při zavádění instance pluginu je automaticky ve stejném datovém souboru z jakého pochází plugin (aplikace nebo souboru nápovědy) hledáno umístění:
5+
Ve stejném datovém souboru z jakého je načten plugin (aplikace nebo souboru nápovědy) je hledáno umístění:
66

77
- **zip/plugins-config/[jméno třídy]_[jméno instance].cfg** (v datech aplikace)
88
- **plugins-config/[jméno třídy]_[jméno instance].cfg** (ve základních datech nápovědy **Help-.zip** nebo **kořen adresáře bez jazyka**)
@@ -13,7 +13,7 @@ Pokud existuje, načte se a předá se instanci pluginu. Pokud neexistuje, hodno
1313

1414
- ⚠️ Tento formát je velmi přísný, prosím, dodržujte pravidla přesně.
1515
- Jeden řádek = jedna položka
16-
- Zalomení řádku uprostřed definice není povoleno
16+
- Zalomení řádku uprostřed definice není povoleno a to ani u hodnot
1717
- V případě shody názvů klíče se propisuje vždy poslední definovaná hodnota
1818
- V případě vícehodnotových výčtů je výčet hodnot uveden na jednom řádku a oddělovačem je obvykle **;**. Zpracování a rozdělení hodnot si zajišťuje každý plugin sám (může mít tedy vlastní oddělovač, avšak oddělovači **|** je doporučeno se vyhnout)
1919

cs/pluginLoad.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# 📑 Zavádění pluginů
2+
3+
Zavést instanci pluginu je v aplikaci možné dvěma způsoby:
4+
5+
1. Definicí v [seznamu pluginů][plugins]. Při spouštění aplikace nebo načítání nápovědy zavedení provede aplikace sama.
6+
2. Voláním funkce kdekoli v kódu aplikace
7+
8+
## Dynamické zavedení pluginu
9+
10+
```javascript
11+
const pluginName = 'puiButtonObjectExplorer';
12+
const pluginId = '-load';
13+
await loadPlugin(pluginName, loadPluginListBasePath(pluginName));
14+
await activatePlugin(pluginName, pluginId);
15+
```
16+
17+
| Definice | Popis |
18+
|---|---|
19+
| pluginName | Jméno třídy pluginu |
20+
| loadPlugin | Zajistí načtení třídy pluginu, pokud zatím načtena nebyla. |
21+
| loadPluginListBasePath(pluginName) | Funkce, která zajistí sestavení správné cesty k souboru pluginu uvnitř balíku dat. Předpokládá, že se soubor pluginu bude nacházet v **plugins/(pluginName).js** |
22+
| activatePlugin | Zajistí vytvoření nové instance pluginu **pluginName** s id **pluginId** |
23+
24+
## Odebrání pluginu za běhu
25+
26+
Plugin odeberete následujícím způsobem:
27+
28+
```javascript
29+
const pluginName = 'puiButtonObjectExplorer';
30+
const pluginId = '-load';
31+
await deactivatePlugin(pluginName, pluginId);
32+
```
33+
34+
⚠️ Tato operace dovolí ze systému odebrat jakýkoli plugin.
35+
Pokud odeberete klíčový plugin systému, je možné, že aplikace v rámci dané relace:
36+
37+
- přestane částečně či zcela fungovat (nebude reagovat na důležitou událost ze systému nebo javascriptu)
38+
- se bude častěji restartovat
39+
- bude nadměrně překreslovat celé své uživatelské rozhraní
40+
41+
## Akce správy pluginů
42+
43+
Tyto akce správy pluginů provádí buďto základní funkce aplikace nebo plugin 🔌 [pPluginManagement][pPluginManagement], pokud je zaveden (je v základní systémové konfiguraci ve standardním distribučním balíčku). Plugin pPluginManagement poskytuje zapouzdření základních funkcí pro práci s pluginy a zasílání událostí dovnitř systému, pokud dojde ke změně v aktivních pluginech (načtení, inicializace, odebrání, chyba operace načtení/inicializace/odebrání).
44+
45+
[plugins]: plugins.lst.md "Seznam pluginů"
46+
[pPluginManagement]: :_inst:pPluginManagement:.md "pPluginManagement"

cs/puiButton.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 🖥️ puiButton
2+
3+
## Účel pluginu
4+
5+
Tento plugin je vhodný pro zajištění jednoduchého 🔘 tlačítka s akcí pro uživatelské rozhraní.
6+
7+
## Konfigurace
8+
9+
1. Připravte konfiguraci s hodnotami:
10+
11+
| Název | Popis |
12+
|---|---|
13+
| ID | Id nového tlačítka. Musí být jedinečné napříč systémem, aby tlačítko nebylo propojeno s jinou akcí a nebo plugin jinou akci nepřepsal. |
14+
| CAPTION | Titulek nebo ikonka pro tlačítko. Pokud **ID** tlačítka je definované jako klíč v lokalizaci, data se přepíší hodnotou překladového klíče. |
15+
| TARGET | Cílový slot pro tlačítko. Obvyklé hodnoty: sidebar (boční panel), header (horní panel nad textem kapitoly). Hodnota může být jakákoli, avšak cílový plugin (páruje se podle ID pluginu) musí být schopen zpracovat událost ⚡ [ButtonSend][ButtonSend] jinak se tlačítko nikde nezobrazí. |
16+
17+
## Implementace
18+
19+
2. Nový plugin vždy bude mít [puiButton][puiButton] jako svou bázovou třídu.
20+
21+
```javascript
22+
class puiButtonFullScreen extends puiButton {
23+
constructor(aliasName, data) {
24+
super(aliasName, data);
25+
26+
this.DEFAULT_KEY_CFG_ID = 'downP-ToggleFS';
27+
this.DEFAULT_KEY_CFG_CAPTION = '🔲';
28+
this.DEFAULT_KEY_CFG_TARGET = UI_PLUGIN_SIDEBAR;
29+
}
30+
31+
_buttonAction(evt) {
32+
document.fullscreenElement
33+
? document.exitFullscreen()
34+
: document.documentElement.requestFullscreen();
35+
}
36+
}
37+
38+
Plugins.catalogize(puiButtonFullScreen);
39+
```
40+
41+
- Řádky **this.DEFAULT_KEY_CFG_** mohou být odebrány, pokud chcete spoléhat pouze na konfiguraci ze souboru. S ohledem na automatickou dokumentaci objektů v pluginu však doporučuji je ponechat.
42+
43+
## Popis funkčnosti
44+
45+
- Funkce **_buttonAction**(evt) představuje handler pro obsluhu kliknutí na tlačítko.
46+
- **evt** představuje ⚡ [ClickedEvent][ClickedEvent]
47+
48+
## Příklady implementací
49+
50+
- Potomci třídy 🖥️ [puiButton][puiButton]
51+
52+
[ButtonSend]: :_evt:ButtonSend.md "ButtonSend"
53+
[ClickedEvent]: :_evt:ClickedEvent.md "ClickedEvent"
54+
[puiButton]: :_plg:puiButton.md "puiButton"

cs/tree.lst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ Seznamy|Seznamy||lists.md
88
🐞 Debug režim|Debug režim||debug.md
99
🧩 Prohlížeč objektů|Prohlížeč objektů||oexplorer.md
1010
🧩 První plugin|První plugin||firstPlugin.md
11+
📑 Zavádění pluginů|Zavádění pluginů||pluginLoad.md
1112
⚙️ Konfigurace pluginů|Konfigurace pluginů||pluginConfig.md
13+
▼ Filtrování událostí|Filtrování událostí v pluginech||eventFilter.md
1214
Implementace pluginů|Implementace pluginů||implPlug.md
15+
🖥️ puiButton|puiButton||puiButton.md
1316
🔌 pConvertSysEventToEvent|pConvertSysEventToEvent||pConvertSysEventToEvent.md
1417
🖼️ pTRPhasePlugin|pTRPhasePlugin||pTRPhasePlugin.md
1518
🖼️ pTopicRenderer|pTopicRenderer||pTopicRenderer.md

0 commit comments

Comments
 (0)