|
4 | 4 |
|
5 | 5 | Tento plugin definuje základní rozhraní pro export zobrazeného textu kapitoly. |
6 | 6 |
|
7 | | -Odvozený plugin je obvykle zapouzdřením mezi: |
| 7 | +Odvozený plugin je obvykle zapouzdřením mezi: |
8 | 8 |
|
9 | 9 | - **HelpViewer** (🖥️ [puiButtonExport][puiButtonExport]) a |
10 | 10 | - převodníkem z **HTML** na požadovaný formát, který je obvykle řešen externím skriptem. |
@@ -68,16 +68,57 @@ ID za dvojtečkou (zde NEW) se nabídne ve výběrovém seznamu tlačítka 📥 |
68 | 68 | - Obsluha exportu převezme výsledek převodu a provolá **evt.output.file('name.txt', result);**, pro zápis do ZIP výstupu |
69 | 69 | - Obsluha exportu nakonec provolá **evt.doneHandler();**. Tímto vydá ZIP soubor uživateli do prohlížeče pro standardní stažení |
70 | 70 |
|
| 71 | +## Předexportní konverze |
| 72 | +
|
| 73 | +V případě některých pluginů (konvence pro pojmenování v systému **pExtension**\* - například: 🧩 [pExtensionMarkedAdmonitions][pExtensionMarkedAdmonitions]) lze předpokládat, že provádějí transformaci do HTML kódu, kterou obecné **HTMLTo**\* (**HTMLToMD**, **HTMLToTeX**) převodníky nerozpoznají. |
| 74 | +
|
| 75 | +### Postup |
| 76 | +
|
| 77 | +1. V odvozené třídě **pExport**\* v **onETPrepareExport** bude definována proměnná **corrections** (pole), která bude evidovat budoucí změny v DOM struktuře textu kapitoly. |
| 78 | +2. Spustíte událost ⚡ [PreExportCorrection][PreExportCorrection] s tím, že **x.temporaryObjects** budou propojeny na **corrections** |
| 79 | +3. Proběhnou provolání **onET_PreExportCorrection** na pluginech a konverze výstupů z **pExtension**\* pluginů podle typu exportního formátu, který se připravuje - extension plugin znovu transformuje svou konverzi do zjednodušeného výstupu pro **HTMLTo**\* převodník. |
| 80 | +4. V **corrections** budou obsaženy prvky, které konverzí vznikly |
| 81 | +5. Provolá se samotná konverze z HTML na požadovaný formát |
| 82 | +6. **corrections** projdete v cyklu a smažete všechny obsažené prvky - dočasné úpravy se vyčistí z viditelného vstupu. |
| 83 | +
|
| 84 | +### Ukázková implementace |
| 85 | +
|
| 86 | +```javascript |
| 87 | + //... |
| 88 | + async onETPrepareExport(evt) { |
| 89 | + //... |
| 90 | + promise = promise.then(async() => { |
| 91 | + //... |
| 92 | + const corrections = []; |
| 93 | + sendEvent(EventNames.PreExportCorrection, (x) => { |
| 94 | + x.exportType = this.aliasName; |
| 95 | + x.parent = evt.parent; |
| 96 | + x.temporaryObjects = corrections; |
| 97 | + }); |
| 98 | + |
| 99 | + const converted = HTMLTONEW(evt.parent, ctx); |
| 100 | + corrections.forEach(x => x.remove()); |
| 101 | + //... |
| 102 | + } |
| 103 | + } |
| 104 | +``` |
| 105 | +
|
| 106 | +Událost ⚡ [PreExportCorrection][PreExportCorrection] má obsluhu na straně 🧩 [pExtension][pExtension]\*, která zajistí bod 3 [Postupu][H30]. |
| 107 | +
|
71 | 108 | ## Příklady implementací |
72 | 109 |
|
73 | 110 | - 🖼️ [pExportHTM][pExportHTM] a další potomci třídy 🖼️ [pExport][pExport], kteří svým jménem začínají na **pExport**. |
74 | 111 | - Převodníky: [HTMLToTeX][HTMLToTeX], [HTMLToMD][HTMLToMD] |
75 | 112 |
|
76 | 113 | [puiButtonExport]: :_plg:puiButtonExport.md "puiButtonExport" |
77 | 114 | [pExportHTM]: :_plg:pExportHTM.md "pExportHTM" |
| 115 | +[pExtension]: pExtension.md#h-3-0 "pExtension" |
| 116 | +[pExtensionMarkedAdmonitions]: :_plg:pExtensionMarkedAdmonitions.md "pExtensionMarkedAdmonitions" |
78 | 117 | [PrepareExport]: :_evt:PrepareExport.md "PrepareExport" |
| 118 | +[PreExportCorrection]: :_evt:PreExportCorrection.md "PreExportCorrection" |
79 | 119 | [pExport]: :_plg:pExport.md "pExport" |
80 | 120 | [resource]: resource.md "Zdroj" |
81 | 121 | [pluginslst]: plugins.lst.md "Seznam pluginů (plugins.lst)" |
82 | 122 | [HTMLToTeX]: https://github.com/HelpViewer/HTMLToTeX "HTML -> TeX" |
83 | 123 | [HTMLToMD]: https://github.com/HelpViewer/HTMLToMD "HTML -> md" |
| 124 | +[H30]: #h-3-0 "Postup" |
0 commit comments