@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.
- package/README.md +12 -5
- package/clipper.common/README.md +3 -6
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +20 -692
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +27 -774
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +23 -5
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +486 -119
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs.map +1 -1
- package/package.json +1 -5
- package/styles/ui.colors.scss +25 -23
- package/types/arsedizioni-ars-utils-clipper.common.d.ts +21 -751
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +5 -193
- package/types/arsedizioni-ars-utils-ui.shell.d.ts +15 -1
- package/types/arsedizioni-ars-utils-ui.tinymce.d.ts +240 -28
- package/ui.tinymce/README.md +82 -12
package/ui.tinymce/README.md
CHANGED
|
@@ -1,12 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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.
|