@arsedizioni/ars-utils 22.5.8 → 22.5.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,82 @@
1
- in application:
2
- 1) install tinymce (npm install tinymce)
3
- 1) install @tinymce/tinymce-angular (npm install @tinymce/tinymce-angular)
4
- 2) setup assets in angular.json
5
- {
6
- "glob": "**/*",
7
- "input": "node_modules/tinymce",
8
- "output": "assets/tinymce"
9
- }
10
- 3) download language from
11
- https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/src/langs/it.js and put it in
12
- "assets/tinymce/langs/it.js"
1
+ # ui.tinymce
2
+
3
+ L'editor ricco della libreria: la direttiva `[tinymceEditor]`, il caricatore a runtime e i
4
+ profili di configurazione.
5
+
6
+ Non c'e' nessun wrapper Angular di mezzo. `@tinymce/tinymce-angular` era una dipendenza in piu'
7
+ da tenere allineata ad Angular ad ogni major, e in cambio dava un componente `<editor>` che non
8
+ sa fare il `ControlValueAccessor` come lo vogliamo noi: la direttiva sta su una `<textarea>`
9
+ normale, quindi `[(ngModel)]`, `required` e lo stato pristine/dirty funzionano come su qualunque
10
+ altro controllo.
11
+
12
+ ## Nell'applicazione
13
+
14
+ 1) `npm install tinymce` (peer dependency opzionale, versione 8)
15
+
16
+ 2) pubblicare il pacchetto fra gli asset, in `angular.json`:
17
+
18
+ ```json
19
+ {
20
+ "glob": "**/*",
21
+ "input": "node_modules/tinymce",
22
+ "output": "assets/tinymce"
23
+ }
24
+ ```
25
+
26
+ 3) la lingua italiana non sta dentro il pacchetto npm: `langs/it.js` e' committato in questo
27
+ entry point, va copiato in `src/assets/tinymce/langs/it.js`.
28
+
29
+ Nient'altro: **non** serve nessun `<script>` in `index.html`. `TinymceLoaderService` inietta
30
+ `assets/tinymce/tinymce.min.js` la prima volta che un editor viene creato, risolvendo l'URL
31
+ contro il base href del documento (quindi funziona anche se l'applicazione e' servita da un
32
+ sotto-percorso), e le chiamate successive riusano lo stesso script.
33
+
34
+ ## Uso
35
+
36
+ ```html
37
+ <textarea tinymceEditor [(ngModel)]="item.text" name="text" required></textarea>
38
+ ```
39
+
40
+ Con un profilo e un uploader di immagini:
41
+
42
+ ```html
43
+ <textarea tinymceEditor
44
+ [tinymceConfig]="config"
45
+ [tinymceImageUploader]="upload"
46
+ (ready)="onReady($event)"
47
+ (failed)="onFailed($event)"
48
+ [(ngModel)]="item.text" name="text"></textarea>
49
+ ```
50
+
51
+ ```typescript
52
+ protected readonly config = TinymceUtils.TinymceCompactConfig;
53
+ protected readonly upload = (file: File) => this.api.upload(file); // torna l'URL dell'immagine
54
+ ```
55
+
56
+ `tinymceToolbarMode="inline"` edita l'elemento sul posto invece di sostituirlo: richiede un
57
+ `<div>`, non una `<textarea>`, e la direttiva lo dice esplicitamente se ci si sbaglia.
58
+
59
+ ## Profili
60
+
61
+ `TinymceUtils` espone tre configurazioni, ognuna restituita come copia fresca ad ogni lettura:
62
+
63
+ | Profilo | Per cosa |
64
+ |---|---|
65
+ | `TinymceConfig` | editor a tutta pagina, tutti i plugin open source di TinyMCE 8 |
66
+ | `TinymceCompactConfig` | campo dentro una form: cresce col testo, toolbar in basso raggruppata |
67
+ | `TinymceCompactExtendedConfig` | come sopra, piu' schermo intero, gruppo inserisci e vista sorgente |
68
+
69
+ Descrivono **cosa offre l'editor** e nient'altro: caricamento (`base_url`, `language`,
70
+ `license_key`) e tema (`skin`, `content_css`) li decidono il loader e la direttiva, che li
71
+ risolvono contro il base href e contro `ThemeService`. Anche le opzioni di upload seguono
72
+ `tinymceImageUploader`, cosi' un editor senza handler non puo' mostrare una scheda di caricamento
73
+ che non porta da nessuna parte.
74
+
75
+ I profili si passano a `[tinymceConfig]` e vincono sui default della direttiva; restano suoi
76
+ `target`, `base_url`, `inline` e `setup`, che e' quello che tiene l'editor agganciato alla form.
77
+
78
+ ## Il dialog
79
+
80
+ `TinyMceEditorComponent` e' un dialog che contiene solo un editor: riceve un testo, ne
81
+ restituisce uno modificato tramite l'output `saving`. Usa il profilo compatto esteso, con la
82
+ toolbar senza schermo intero — il dialog e' gia' tutto lo spazio disponibile.