Skip to content

Commit b6b8aa7

Browse files
committed
CZ : cfgopt, concept, event, handler, jsevent, objDef, resource, uibutton, uiobject, uitab, uitree
1 parent 6bfba73 commit b6b8aa7

17 files changed

Lines changed: 518 additions & 3 deletions

cs/cfgopt.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# ⚙️ Konfigurační volba
2+
3+
Konfigurační volba zastupuje ⚙️ [konfiguraci pluginů][cfgPlug] na straně kódu pluginu.
4+
5+
## Definice
6+
7+
```javascript
8+
class pConfigValuePlugin extends IPlugin {
9+
static KEY_CFG_FILENAME = 'FILENAME';
10+
11+
init() {
12+
const T = this.constructor;
13+
const TI = this;
14+
TI.DEFAULT_KEY_CFG_FILENAME = 'marked.min.js;LICENSE-marked.md';
15+
TI.cfgFileName = TI.config[T.KEY_CFG_FILENAME] || TI.DEFAULT_KEY_CFG_FILENAME;
16+
super.init();
17+
}
18+
}
19+
Plugins.catalogize(pConfigValuePlugin);
20+
```
21+
22+
### Ukázka konfiguračního souboru
23+
24+
Tato definice se napáruje na tuto definici v konfiguračním souboru:
25+
26+
```text
27+
FILENAME|README.md
28+
```
29+
30+
[Ukázka na straně prohlížeče objektů][pTRParseMd]
31+
32+
Pokud se v konfiguračním souboru nenajde klíč z konstanty **KEY_CFG_FILENAME**, použije se hodnota **DEFAULT_KEY_CFG_FILENAME**.
33+
34+
### Význam proměnných
35+
36+
- KEY_CFG_FILENAME - jméno konfiguračního klíče na straně konfigurace
37+
- DEFAULT_KEY_CFG_FILENAME - defaultní hodnota pro konfigurační klíč
38+
- ⚠️ DEFAULT_**KEY_CFG_FILENAME** a **KEY_CFG_FILENAME** se musí svým názvem objektu shodovat, aby prohlížeč objektů konfigurační volbu správně vyhodnotil a propojil název i výchozí (záložní) hodnotu.
39+
40+
41+
[cfgPlug]: pluginConfig.md "Konfigurace pluginů"
42+
[pTRParseMd]: :_inst:pTRParseMd:-md.md#h-2-1 "pTRParseMd:-md"

cs/concept.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# 🗺️ Základní přehled
2+
3+
Aplikace je postavená na **pluginech (zásuvných modulech) a přenosu událostí (zpráv) mezi nimi**.
4+
5+
V pluginech lze definovat:
6+
7+
- události (zprávy),
8+
- jejich obsluhy,
9+
- odesílání událostí,
10+
- UI prvky,
11+
- obsluhy javascript událostí,
12+
- členství v komunikační cestě (skupina příjemců)
13+
14+
Díky tomu jsou přístupy pro UI i programovou logiku jednotné napříč celou aplikací.
15+
Systém pluginů i distribuce zpráv je vyvinut od základů, bez použití cizích frameworků.
16+
17+
**Technické řešení:**
18+
19+
- komprimovaný balíček aplikačních dat (s možností běhu s rozzipovaným obsahem),
20+
- běh na klientovi, bez nutnosti serveru či backendu,
21+
- minimum pro nasazení: prohlížeč s podporou **ES2021** + místní disk (Internet není nutný) (doporučeno vypnutí CORS, byť aplikace obsahuje podporu pro upload dat ručně uživatelem)
22+
23+
**Hlavní součásti aplikace:**
24+
25+
- zavaděč (**hvdata/appmain.js + jszip.min.js**),
26+
- aplikační data (**hvdata/data.zip**), kde je uložena převážná část aplikace (asi 86 % velikosti balíčku)
27+
- nízkoúrovňový kód (v **js.lst**),
28+
- pluginový kód (v **plugins.lst**).
29+
- knihovny třetích stran (oddělené, načítané jako samostatné moduly)
30+
- soubor implementačních dat - samostatný archiv v aplikaci logicky pojmenovaný jako **STO_HELP**

cs/debug.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@
77

88
- 🧩 [Prohlížeč objektů][oexplorer]
99
- 📜 Logování do DevTools konzole prohlížeče
10+
- ⚡ zaslané události jsou také zdvojeny do události [DebugEventEvent][DebugEventEvent], která je zpracována prohlížečem objektů s cílem zachytit přenosy událostí mezi celky aplikace při běhu
1011

12+
[DebugEventEvent]: :_evt:DebugEventEvent.md "DebugEventEvent"
1113
[oexplorer]: oexplorer.md "Prohlížeč objektů"

cs/event.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# ⚡ Událost
2+
3+
Událost definuje událost/zprávu aplikace.
4+
Událost je možné definovat s obsluhou nebo pouze definovat (bez obsluhy).
5+
6+
## Definice
7+
8+
1. Definujte objekt dat události nebo určete, který z již definovaných potomků ⚡ [IEvent][IEvent] se vám pro událost hodí:
9+
10+
```javascript
11+
class ClickHandlerRegister extends IEvent {
12+
constructor() {
13+
super();
14+
this.handlerId = undefined;
15+
this.handler = undefined;
16+
}
17+
}
18+
```
19+
20+
2. Definujte třídu pluginu pro událost:
21+
22+
```javascript
23+
class pEventPlugin extends IPlugin {
24+
static EVT_CLICK_HANDLER_REGISTER = 'ClickHandlerRegister';
25+
26+
init() {
27+
const T = this.constructor;
28+
const TI = this;
29+
30+
// (B)
31+
32+
super.init();
33+
}
34+
}
35+
Plugins.catalogize(pEventPlugin);
36+
```
37+
38+
3. Rozhodněte, zda můžete mít obsluhu přímo v pluginu nebo ji potřebujete mít právě mimo plugin. Podle svého případu si vyberte potřebný postup podle dalších kapitol.
39+
40+
4. Zdroj kódu kapitoly pak vždy vložte do místa komentáře **(B)**.
41+
42+
### ⚡ Událost s obsluhou
43+
44+
```javascript
45+
const h_EVT_CLICK_HANDLER_REGISTER = (reply) => {
46+
// ...
47+
reply.result = 'replyValue';
48+
}
49+
TI.eventDefinitions.push([T.EVT_CLICK_HANDLER_REGISTER, ClickHandlerRegister, h_EVT_CLICK_HANDLER_REGISTER]);
50+
```
51+
52+
### 📄⚡ Událost pouze definovaná
53+
54+
```javascript
55+
TI.eventDefinitions.push([T.EVT_CLICK_HANDLER_REGISTER, ClickHandlerRegister, null]); // outside event handlers
56+
```
57+
58+
### Význam prvků
59+
60+
- class ClickHandlerRegister - datový objekt události (je možné použít stejnou třídu u více událostí nebo dědit z kteréhokoli potomka IEvent)
61+
- ClickHandlerRegister.constructor - obsahuje výchozí hodnoty objektu zprávy. Je žádoucí, aby se hodnoty, pokud je to možné předvyplnily ideálně výchozí hodnotou podle plánovaného typu. Tato data jsou používána v [prohlížeči objektů][oexplorer] jako součást automatické dokumentace systému.
62+
- const h_EVT_CLICK_HANDLER_REGISTER - obsluha události
63+
- reply.result - standardní vlastnost události (⚡ [IEvent][IEvent]), která je automaticky aplikační logikou přebírána jako odpověď obsluhy na událost. Může to být jakýkoli objekt.
64+
- TI.eventDefinitions.push([T.EVT_CLICK_HANDLER_REGISTER, ClickHandlerRegister, null]) - vytvoří předpis definice události (jméno události, objekt dat události a obslužná metoda nebo null pokud má být událost pouze definována). O zpracování definic se stará předek 🔌 [IPlugin][IPlugin].
65+
- super.init(); - provádí standardní inicializace vazeb. Musí být posledním příkazem, aby se řádně inicializovalo vše definované.
66+
67+
## Zasílání události
68+
69+
V obslužném kódu pak můžete události vyvolávat takto:
70+
71+
```javascript
72+
const eventName = EventNames.MyNewEvent; //nebo: 'MyNewEvent'
73+
74+
sendEvent(eventName, (r) => {
75+
r.id = aliasName;
76+
r.result = loadedCount;
77+
//vyplnění dalších potřebných dat
78+
});
79+
```
80+
81+
V souboru **appmainBaseLogic.js** naleznete příklady funkcí, které podobná volání zapouzdřují.
82+
⚠️ Je doporučeno si pro svůj plugin založit podobnou sadu funkcí v odděleném souboru (který vložíte do [seznamu skriptů][jsList]). Volání metody **sendEvent** se neindexuje pro [prohlížeč objektů][oexplorer], ale tyto funkce budou indexovány.
83+
84+
[IEvent]: :_evt:IEvent.md "IEvent"
85+
[oexplorer]: oexplorer.md "Prohlížeč objektů"
86+
[IPlugin]: :_plg:IPlugin.md "IPlugin"
87+
[jsList]: js.lst.md "Seznam skriptů"

cs/files.lst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,15 @@ eventFilterD.md|Detaily o filtrování událostí v pluginech
2525
appendix.md|Přílohy
2626
puiButtonTab.md|puiButtonTab
2727
puiButtonTabTree.md|puiButtonTabTree
28+
objDef.md|Definice objektů v pluginech
29+
debug.md|Režim ladění
30+
cfgopt.md|Konfigurační volba
31+
event.md|Událost
32+
concept.md|Základní přehled
33+
handler.md|Obsluha události
34+
jsevent.md|Zpracování javascript události
35+
uiobject.md|UI prvky
36+
uibutton.md|Tlačítko
37+
uitab.md|Karta
38+
uitree.md|Strom
39+
resource.md|Zdroj/Balíček

cs/firstPlugin.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class pMinPlugin extends IPlugin {
3737
}
3838

3939
init() {
40+
//const T = this.constructor;
41+
//const TI = this;
42+
4043
super.init();
4144
}
4245

@@ -49,7 +52,10 @@ Plugins.catalogize(pMinPlugin);
4952

5053
```
5154

52-
Volání **Plugins.catalogize(pMinPlugin);** je povinné, protože provede zavedení pluginu do katalogu načtených pluginů. Následně na základě znalosti jména pluginu je možné si vyžádat jeho instance. Na základě dat v **plugins.lst** toto udělá aplikace sama.
55+
- Volání **Plugins.catalogize(pMinPlugin);** je povinné, protože provede zavedení pluginu do katalogu načtených pluginů. Následně na základě znalosti jména pluginu je možné si vyžádat jeho instance. Na základě dat v **plugins.lst** toto udělá aplikace sama.
56+
- Volání **super.** by mělo být první u konstruktoru a u init a deinit poslední. Zajišťují aplikaci obecné spoelčné logiky.
57+
- const T a TI jsou zkratky pro přístup k this a ke třídě. Je to napříč systémem doporučená koncepce psaní.
58+
- V případě, že máte ve funkci pouze volání super. , můžete funkci odebrat zcela. Zde v ukázce je vše uvedeno pro rychlý obecný přehled.
5359

5460
## Základní pluginy
5561

cs/handler.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# 👂 Obsluha události
2+
3+
Obsluha definuje reakci systému na konkrétní událost.
4+
5+
Pokud jste ⚡ [událost definovali s obsluhou][eventWH], tento postup pro vás již nemá v rámci jednoho pluginu smysl.
6+
7+
## Definice
8+
9+
1. Uvnitř jiného pluginu definujte funkci:
10+
11+
```javascript
12+
onET_ClickHandlerRegister(evt) {
13+
}
14+
```
15+
16+
- evt bude obsahovat instanci třídy **ClickHandlerRegister** s daty události.
17+
18+
## Význam jména funkce
19+
20+
- onET_ClickHandlerRegister (podtržítko) - příjímá události **ClickHandlerRegister** pro jakékoli id pluginu a to i když bude definováno 🔺 [filtrování][filter].
21+
- onETClickHandlerRegister - příjímá události **ClickHandlerRegister** s [id][IEvent-ID], které se shoduje s **plugin.aliasName**.
22+
23+
### Další informace
24+
25+
- Struktura události ⚡ [IEvent][IEvent]
26+
- 🔺 [Filtrování][filter] událostí na straně pluginu
27+
- Podrobnější popis k 🔺 [filtrování událostí][filter2]
28+
29+
[IEvent]: :_evt:IEvent.md "IEvent"
30+
[IEvent-ID]: :_evt:IEvent.md#h-4-4 "IEvent id"
31+
[eventWH]: event.md#h-3-0 "Událost s obsluhou"
32+
[filter]: eventFilter.md "Filtrování"
33+
[filter2]: eventFilterD.md "Podrobnosti k filtrování"

cs/jsevent.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# ⭐ Zpracování javascript události
2+
3+
Zpracování javascript události slouží k napojení pluginu na systémovou javascript událost.
4+
5+
## Definice
6+
7+
### pConvertSysEventToEvent a konfigurace
8+
9+
Pokud je to možné, upřednostněte instanci pluginu 🔌 [pConvertSysEventToEvent][pConvertSysEventToEvent], kterou upravíte konfigurací. Výsledkem tohoto postupu je přeložená událost systému, kterou si může zachytit kterýkoli plugin prostřednictvím 👂 [obsluhy události][handler].
10+
11+
### Definice uvnitř vlastního pluginu
12+
13+
```javascript
14+
class pSysEventHandling extends IPlugin {
15+
constructor(aliasName, data) {
16+
super(aliasName, data);
17+
}
18+
19+
init() {
20+
const T = this.constructor;
21+
const TI = this;
22+
23+
TI.SEVT_POPSTATE = new SystemEventHandler('', undefined, window, 'popstate', this._handlePopstate);
24+
TI.SEVT_POPSTATE.init();
25+
26+
super.init();
27+
}
28+
29+
_handlePopstate(e) {
30+
}
31+
}
32+
Plugins.catalogize(pSysEventHandling);
33+
```
34+
35+
### Význam prvků
36+
37+
- TI.SEVT_POPSTATE - obsahuje instanci 🔌 [SystemEventHandler][SystemEventHandler], pluginu, který zajišťuje párování na javascript systémovou událost. Zde je ukázka párování na objekt **window**, událost **popstate**.
38+
- _handlePopstate - obsluha při zachycení události **popstate**
39+
- e - objekt javascript systémové události
40+
41+
#### Parametry konstruktoru SystemEventHandler
42+
43+
| Parametr | Popis |
44+
|---|---|
45+
| aliasName | id pluginu (může zůstat '') |
46+
| data | objekt s konfiguračními daty (může zůstat undefined) |
47+
| target | cílový systémový objekt na který se má plugin napojit |
48+
| eventName | jméno javascript systémové události |
49+
| handler | handler pro událost na straně aplikace |
50+
51+
Dokumentace konfigurace pluginu 🔌 [pConvertSysEventToEvent][pConvertSysEventToEvent] je platná i zde.
52+
53+
### Další informace
54+
55+
Pro více informací k javascript systémovým událostem si projděte dokumentaci javascript standardu **ES2021** (**ECMA script**).
56+
Úvod na [geeksforgeeks][geeksforgeeks1] Vám může pomoci získat základní přehled.
57+
58+
[pConvertSysEventToEvent]: pConvertSysEventToEvent.md "pConvertSysEventToEvent"
59+
[handler]: handler.md "Obsluha události"
60+
[SystemEventHandler]: :_plg:SystemEventHandler.md "SystemEventHandler"
61+
[geeksforgeeks1]: https://www.geeksforgeeks.org/javascript/javascript-events/ "JavaScript Events"

cs/objDef.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# 🧾 Definice objektů
2+
3+
Pro složitější práci pluginů je někdy nutné definovat podpůrné objekty. Některé pluginy sice zapouzdřují běžné prvky aplikace (např. UI komponenty nebo obsluha javascriptových událostí), ale nemusí to pokrývat všechny scénáře.
4+
5+
Tato kapitola proto popisuje [dostupné typy objektů][OEGroups] a způsob jejich definice tak, aby je bylo možné automaticky indexovat v [prohlížeči objektů][oexplorer].
6+
7+
[oexplorer]: oexplorer.md "Prohlížeč objektů"
8+
[OEGroups]: :_/README.md#h-2-1 "Seznam objektů"

cs/oexplorer.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Dále podporuje:
4242

4343
1. Plugin je dostupný pouze v **DEBUG** režimu z důvodu ochrany produkčních prostředí.
4444
2. ⚠️ Pro úplný seznam objektů je nutné, aby byla daná funkcionalita v rámci relace alespoň jednou provedena.
45+
3. Indexovány jsou pouze pojmenované funkce a objekty, které plugin vystavuje přes **this**.
4546

4647
[PlgsList]: plugins.lst.md "Seznam pluginů"
4748
[OEGroups]: :_/README.md "Seznam kategorií"

0 commit comments

Comments
 (0)