|
| 1 | +# 🔌 pConvertSysEventToEvent |
| 2 | + |
| 3 | +## Účel pluginu |
| 4 | + |
| 5 | +Plugin převádí definovanou javascript událost na událost aplikace, která může být zachycena jiným pluginem. |
| 6 | + |
| 7 | +## Implementace |
| 8 | + |
| 9 | +### 1) Konfiguračně s automatickým odesláním ConvertedSystemEvent |
| 10 | + |
| 11 | +1. V souboru **plugins.lst** zaveďte řádek: |
| 12 | + pConvertSysEventToEvent:[instanceid] |
| 13 | +2. V souboru **plugins-config/pConvertSysEventToEvent_[instanceid].cfg** definujte například: |
| 14 | + |
| 15 | +```text |
| 16 | +SYSEVENTNAME|click |
| 17 | +SYSOBJECT|body |
| 18 | +EVENTBUSEVENT|ClickedEvent |
| 19 | +EVENTBUSEVENTID| |
| 20 | +``` |
| 21 | + |
| 22 | +| Název | Popis | |
| 23 | +|---|---| |
| 24 | +| SYSEVENTNAME | Jméno javascript systémové událostí (addEventListener). | |
| 25 | +| SYSOBJECT | Systémový objekt na který se má plugin navázat. Hodnoty: window, document, body, #xxx = HTML prvek s konkrétním id | |
| 26 | +| EVENTBUSEVENT | Jméno události na straně aplikace. | |
| 27 | +| EVENTBUSEVENTID | Vlastnost id odesílané zkonvertované události. Podle této vlastnosti se uvnitř systému může filtrovat doručení do všech (🟢) nebo do konkrétních pluginů, které mají id shodné jako zpráva (🔺). | |
| 28 | + |
| 29 | +Javascript událost bude automaticky přeložena do události ⚡ [ConvertedSystemEvent][ConvertedSystemEvent] a ta bude zaslána s **id** odpovídajícím **EVENTBUSEVENTID** a **eventName** bude shodné s hodnotou **EVENTBUSEVENT**. |
| 30 | + |
| 31 | +### 2) Programové řešení s vlastní konverzí do jiného objektu události |
| 32 | + |
| 33 | +1. Proveďte kroky v kapitole 1. |
| 34 | +2. Připravte v souboru **plugins/[název pluginu].js** například následující kód: |
| 35 | + |
| 36 | +```javascript |
| 37 | +class ClickedEvent extends IEvent { |
| 38 | + constructor() { |
| 39 | + super(); |
| 40 | + this.elementId = ''; |
| 41 | + this.elementIdRoot = ''; |
| 42 | + this.elementIdVal = ''; |
| 43 | + this.target = null; |
| 44 | + this.event = null; |
| 45 | + this.forwarded = false; |
| 46 | + } |
| 47 | +} |
| 48 | + |
| 49 | +ClickedEvent.register(); |
| 50 | + |
| 51 | +class pClickConverter extends pConvertSysEventToEvent { |
| 52 | + constructor(aliasName, data) { |
| 53 | + super(aliasName, data); |
| 54 | + |
| 55 | + this.DEFAULT_KEY_CFG_SYSEVENTNAME = 'click'; |
| 56 | + this.DEFAULT_KEY_CFG_SYSOBJECT = 'body'; |
| 57 | + this.DEFAULT_KEY_CFG_EVENTBUSEVENT = 'ClickedEvent'; |
| 58 | + } |
| 59 | + |
| 60 | + _fillEventObject(d, evt) { |
| 61 | + d.event = evt; |
| 62 | + d.target = d.event?.target; |
| 63 | + d.elementId = d.target?.id |
| 64 | + const splits = d.elementId?.replace('-', '|').split('|').filter(Boolean) ?? []; |
| 65 | + d.elementIdRoot = splits[0]; |
| 66 | + d.elementIdVal = splits[1]; |
| 67 | + } |
| 68 | +} |
| 69 | + |
| 70 | +Plugins.catalogize(pClickConverter); |
| 71 | +``` |
| 72 | +
|
| 73 | +- ClickedEvent je objekt cílové události na straně aplikace. |
| 74 | +- **ClickedEvent.register()** provede registraci objektu události do katalogu (informaci o tomto zápisu najdete v **puiButtonObjectExplorer** v **Strom dědičnosti**, kapitola **Odkaz**). Toto je nutné z důvodu nemožnosti javascriptu provádět rozšířenou detekci objektů podle jmen. Toto jméno musíte mít také uvedeno v konfiguraci v **EVENTBUSEVENT**. |
| 75 | +- Řádky **this.DEFAULT_KEY_CFG_** buďto v kódu ponechte nebo je můžete zcela odebrat. Konfigurace z bodu 1 je přepisuje. |
| 76 | +- Funkce _fillEventObject(d, evt) provádí samotnou konverzi evt (javascript systémové události) na d (cílová událost na straně aplikace). |
| 77 | +- Volání **Plugins.catalogize(pMinPlugin);** je povinné. Provede zavedení pluginu do katalogu načtených pluginů. |
| 78 | +
|
| 79 | +Výsledkem jednoho zpracování bude událost ⚡ ClickedEvent s obsahem typu třídy ClickedEvent z ukázky. |
| 80 | +
|
| 81 | +### ClickedEvent.register() |
| 82 | +
|
| 83 | +Funkce IEvent.register() zajišťuje zavedení třídy události do katalogu, aby mohla být později propojena se jménem v konfiguraci. |
| 84 | +
|
| 85 | +| Parametr | Povinnost | Popis | |
| 86 | +|---|---|---| |
| 87 | +| evtName | Ne | Jméno události, pokud chcete konkrétní třídu svázat s jiným jménem události. Zadání (jiného) jména je určitou náhradou dědičnosti tříd. V případě potřeby můžete vícekrát logicky propojit jednu třídu s více jmény událostí. | |
| 88 | +| convertMethod | Ne | Funkce v předpisu (x, e), kde x znamená cílová instance události aplikace, e znamená javascript systémovou událost. | |
| 89 | +
|
| 90 | +## Příklady implementací |
| 91 | +
|
| 92 | +- 🔌 [pClickConverter][pClickConverter] |
| 93 | +
|
| 94 | +[pClickConverter]: :inst:pClickConverter:.md "pClickConverter" |
| 95 | +[ConvertedSystemEvent]: :_evt:ConvertedSystemEvent.md "ConvertedSystemEvent" |
0 commit comments