@massimo-cassandro/minimo 1.19.0 → 1.19.1
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/design-tokens/README.md +195 -0
- package/design-tokens/tokens/src/components/unsplash-page/unsplash-page.minimo.tokens.jsonc +69 -31
- package/design-tokens/{utilities/tokens-config-sample.mjs → tokens-config-sample.mjs} +10 -10
- package/dev-tools/starter-kit/starter-install.sh +1 -1
- package/package.json +6 -2
- package/snippets/error-pages/error-pages.js +3 -2
- package/src/components/unsplash-page/unsplash-page.minimo.tokens.mjs +78 -39
- package/src/components/unsplash-page/unsplash-page.module.css +25 -6
- package/src/custom-properties.css +8 -1
- package/src/minimo.css +1 -1
- package/src/web-components/s-datatable-component/s-datatable-component.js +4 -1
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/index.js +0 -92
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/hbars.js +0 -356
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/pie.js +0 -245
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/radial-bars.js +0 -177
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/rating-display.js +0 -835
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile-src/costruzione-assi.js +0 -212
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile-src/costruzione-linee.js +0 -101
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile-src/defaults.js +0 -185
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile-src/display-current.js +0 -27
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile-src/grid-areas.js +0 -129
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile-src/parse-opts.js +0 -64
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile-src/paths-setup.js +0 -73
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/settimanale-mensile.js +0 -126
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/charts/signal-bars.js +0 -290
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/src/week-utils.js +0 -122
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/browser-test/src/hbars-test.js +0 -52
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/browser-test/src/mcn-test.js +0 -74
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/browser-test/src/pie-test.js +0 -16
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/browser-test/src/radial-bars-test.js +0 -48
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/browser-test/src/settimanale-mensile-dati-settimanale.js +0 -426
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/browser-test/src/settimanale-mensile-test.js +0 -260
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/browser-test/src/signal-bars-test.js +0 -64
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/node-test.mjs +0 -86
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/src/hBars-node-test.mjs +0 -40
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/src/lines-node-test.mjs +0 -73
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/src/mcn-node-test.mjs +0 -64
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/src/pie-node-test.mjs +0 -12
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/src/radialsBar-node-test.mjs +0 -44
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/src/settimanale-mensile-node-test.mjs +0 -258
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/node-test/src/signalBars-node-test.mjs +0 -36
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/test-readme.md +0 -24
- package/charts/TODO charts/1a-vers DA RIFATTORIZZARE/test/textToPath-test.mjs +0 -14
- package/charts/TODO charts/???/InfoBox.js +0 -456
- package/charts/TODO charts/???/README-upg OLD/342/206/222NEW.md" +0 -53
- package/charts/TODO charts/???/README.md +0 -1
- package/charts/TODO charts/???/TODO.md +0 -39
- package/charts/TODO charts/???/base-cfg.js +0 -66
- package/charts/TODO charts/???/rating-displayOLD.js +0 -837
- package/charts/TODO charts/docs/TODO.md +0 -1
- package/charts/TODO charts/docs/costruzione display rating.md +0 -145
- package/charts/TODO charts/test/node-test.mjs +0 -92
- package/charts/TODO charts/test/test-readme.md +0 -23
- package/charts/TODO charts/test/test-src/rating-display-extra-test.js +0 -132
- package/charts/TODO charts/test/test-src/rating-display-test.js +0 -155
- package/charts/TODO charts/test/textToPath-test.mjs +0 -14
- package/charts/TODO.md +0 -7
- package/charts/src/node-helpers/TODO.md +0 -2
- package/dev-tools/starter-kit/TODO.md +0 -135
- package/src/components/TODO form-multiselect/form-multiselect.css +0 -40
- package/src/components/TODO form-multiselect/form-multiselect.js +0 -83
- package/src/components/TODO vanilla-cookie-consent/cookie-consent.css +0 -20
- package/src/components/TODO vanilla-cookie-consent/cookie-consent.js +0 -76
- package/src/components/TODO vanilla-cookie-consent/render-cookie-list.js +0 -32
- package/src/components/TODO vanilla-cookie-consent/src/cookie-list.js +0 -85
- package/src/components/TODO vanilla-cookie-consent/src/it-translation.js +0 -38
- package/src/components/TODO vanilla-cookie-consent/src/run-analytics.js +0 -54
- package/src/components/TODO vanilla-cookie-consent/src/run-recaptcha.js +0 -71
- package/src/components/autocomplete/TODO.md +0 -4
- package/src/web-components/TODO json-table/README.md +0 -67
- package/src/web-components/TODO json-table/TODO.md +0 -12
- package/src/web-components/TODO json-table/_work/OLD/docs/custom-props-list.md +0 -69
- package/src/web-components/TODO json-table/_work/OLD/script/create-css-custom-props-doc.mjs +0 -113
- package/src/web-components/TODO json-table/_work/OLD/script/src/custom-props-end.md +0 -4
- package/src/web-components/TODO json-table/_work/OLD/script/src/custom-props-start.md +0 -30
- package/src/web-components/TODO json-table/_work/OLD/src/css/icons.module.css +0 -22
- package/src/web-components/TODO json-table/_work/OLD/src/css/info.module.css +0 -42
- package/src/web-components/TODO json-table/_work/OLD/src/css/main-wrapper.module.css +0 -4
- package/src/web-components/TODO json-table/_work/OLD/src/css/table.module.css +0 -154
- package/src/web-components/TODO json-table/_work/OLD/src/css/utility.module.css +0 -9
- package/src/web-components/TODO json-table/_work/OLD/src/icons/false.svg +0 -1
- package/src/web-components/TODO json-table/_work/OLD/src/icons/search-arrows.svg +0 -1
- package/src/web-components/TODO json-table/_work/OLD/src/icons/true.svg +0 -1
- package/src/web-components/TODO json-table/_work/OLD/src/index.js +0 -56
- package/src/web-components/TODO json-table/_work/OLD/src/js/default-columns-data-types.js +0 -172
- package/src/web-components/TODO json-table/_work/OLD/src/js/defaults.js +0 -156
- package/src/web-components/TODO json-table/_work/OLD/src/js/info-section.js +0 -31
- package/src/web-components/TODO json-table/_work/OLD/src/js/listeners.js +0 -17
- package/src/web-components/TODO json-table/_work/OLD/src/js/main-builder.js +0 -26
- package/src/web-components/TODO json-table/_work/OLD/src/js/parse-params.js +0 -121
- package/src/web-components/TODO json-table/_work/OLD/src/js/set-column-classname.js +0 -22
- package/src/web-components/TODO json-table/_work/OLD/src/js/table-builder.js +0 -64
- package/src/web-components/TODO json-table/_work/OLD/src/js/table-foot.js +0 -8
- package/src/web-components/TODO json-table/_work/OLD/src/js/table-head.js +0 -47
- package/src/web-components/TODO json-table/_work/OLD/src/js/table-row.js +0 -83
- package/src/web-components/TODO json-table/_work/OLD/src/js/utilities.js +0 -5
- package/src/web-components/TODO json-table/_work/__json-table-react/index.js +0 -4
- package/src/web-components/TODO json-table/_work/__json-table-react/src/build-page-array.js +0 -73
- package/src/web-components/TODO json-table/_work/__json-table-react/src/columns-data-types.js +0 -73
- package/src/web-components/TODO json-table/_work/__json-table-react/src/defaults.js +0 -50
- package/src/web-components/TODO json-table/_work/__json-table-react/src/download-excel.js +0 -156
- package/src/web-components/TODO json-table/_work/__json-table-react/src/set-className.js +0 -19
- package/src/web-components/TODO json-table/_work/__json-table-react/src/set-download-filename.js +0 -17
- package/src/web-components/TODO json-table/_work/__json-table-react/src/table-to-csv.js +0 -48
- package/src/web-components/TODO json-table/_work/archived/table-to-csv.js +0 -48
- package/src/web-components/TODO json-table/_work/arrow.svg +0 -3
- package/src/web-components/TODO json-table/_work/da decidere/get-cell-data.js +0 -18
- package/src/web-components/TODO json-table/_work/download-button.js +0 -29
- package/src/web-components/TODO json-table/_work/download-excel.js +0 -155
- package/src/web-components/TODO json-table/_work/pagination-array-builder.js +0 -73
- package/src/web-components/TODO json-table/_work/pagination.js +0 -37
- package/src/web-components/TODO json-table/_work/set-download-filename.js +0 -19
- package/src/web-components/TODO json-table/_work/table-info.js +0 -24
- package/src/web-components/TODO json-table/demo/README.md +0 -66
- package/src/web-components/TODO json-table/demo/assets/link-simple.svg +0 -1
- package/src/web-components/TODO json-table/demo/demo-data/json-static-table-demo-data.js +0 -512
- package/src/web-components/TODO json-table/demo/demo.css +0 -32
- package/src/web-components/TODO json-table/demo/demo.js +0 -24
- package/src/web-components/TODO json-table/demo/js/demo-ajax-table.js +0 -165
- package/src/web-components/TODO json-table/demo/js/demo-static-table.js +0 -180
- package/src/web-components/TODO json-table/demo/webpack-modules/css-rules.mjs +0 -122
- package/src/web-components/TODO json-table/demo/webpack-modules/get-jsConfig-aliases.mjs +0 -33
- package/src/web-components/TODO json-table/demo/webpack-modules/svg-rules.mjs +0 -108
- package/src/web-components/TODO json-table/demo/webpack-modules/svgo.config.mjs +0 -26
- package/src/web-components/TODO json-table/demo/webpack.config.mjs +0 -333
- package/src/web-components/TODO json-table/docs/custom-props-list.md +0 -74
- package/src/web-components/TODO json-table/docs-builder/create-css-custom-props-doc.mjs +0 -157
- package/src/web-components/TODO json-table/docs-builder/src/custom-props-end.md +0 -6
- package/src/web-components/TODO json-table/docs-builder/src/custom-props-start.md +0 -29
- package/src/web-components/TODO json-table/src/TODO.md +0 -1
- package/src/web-components/TODO json-table/src/__json-table-react/build-page-array.js +0 -73
- package/src/web-components/TODO json-table/src/__json-table-react/columns-data-types.js +0 -73
- package/src/web-components/TODO json-table/src/__json-table-react/defaults.js +0 -50
- package/src/web-components/TODO json-table/src/__json-table-react/download-excel.js +0 -156
- package/src/web-components/TODO json-table/src/__json-table-react/set-className.js +0 -19
- package/src/web-components/TODO json-table/src/__json-table-react/set-download-filename.js +0 -17
- package/src/web-components/TODO json-table/src/__json-table-react/table-to-csv.js +0 -48
- package/src/web-components/TODO json-table/src/css/custom-media.css +0 -16
- package/src/web-components/TODO json-table/src/css/icons.module.css +0 -22
- package/src/web-components/TODO json-table/src/css/info-section.module.css +0 -78
- package/src/web-components/TODO json-table/src/css/main-builder.module.css +0 -6
- package/src/web-components/TODO json-table/src/css/table.module.css +0 -172
- package/src/web-components/TODO json-table/src/css/utility.module.css +0 -9
- package/src/web-components/TODO json-table/src/icons/arrow-down-bold.svg +0 -1
- package/src/web-components/TODO json-table/src/icons/false.svg +0 -1
- package/src/web-components/TODO json-table/src/icons/true.svg +0 -1
- package/src/web-components/TODO json-table/src/index.js +0 -125
- package/src/web-components/TODO json-table/src/js/default-columns-data-types.js +0 -172
- package/src/web-components/TODO json-table/src/js/defaults.js +0 -510
- package/src/web-components/TODO json-table/src/js/get-ajax-data.js +0 -72
- package/src/web-components/TODO json-table/src/js/info-section.js +0 -39
- package/src/web-components/TODO json-table/src/js/init-ajax-table.js +0 -30
- package/src/web-components/TODO json-table/src/js/init-static-table.js +0 -18
- package/src/web-components/TODO json-table/src/js/main-builder.js +0 -87
- package/src/web-components/TODO json-table/src/js/parse-data-row.js +0 -123
- package/src/web-components/TODO json-table/src/js/parse-params.js +0 -118
- package/src/web-components/TODO json-table/src/js/set-search-listener.js +0 -62
- package/src/web-components/TODO json-table/src/js/set-sort-listeners.js +0 -115
- package/src/web-components/TODO json-table/src/js/static-data-sorting.js +0 -23
- package/src/web-components/TODO json-table/src/js/table-builder.js +0 -45
- package/src/web-components/TODO json-table/src/js/table-row.js +0 -43
- package/src/web-components/TODO json-table/src/js/table-tfoot.js +0 -9
- package/src/web-components/TODO json-table/src/js/table-thead.js +0 -91
- package/src/web-components/TODO json-table/src/js/update-info.js +0 -42
- package/src/web-components/TODO json-table/src/js/utilities.js +0 -5
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
# TODO — Starter kit: config come punto di regia, moduli autonomi
|
|
2
|
-
|
|
3
|
-
## Obiettivo
|
|
4
|
-
|
|
5
|
-
`webpack.config.mjs` deve diventare **solo** un punto di impostazione di scelte e
|
|
6
|
-
parametri (in piccolo già lo è: `useSass`, `useSvgo`, `purgeCSSDebug`, ecc.).
|
|
7
|
-
Tutta la logica deve migrare nei moduli di `webpack-modules/`, che devono diventare
|
|
8
|
-
**completamente autonomi e indipendenti dalle impostazioni e dal layout del progetto**:
|
|
9
|
-
in questo modo potranno essere aggiornati/sovrascritti in qualsiasi progetto senza
|
|
10
|
-
danni, perché il timone resta sempre nel config del progetto.
|
|
11
|
-
|
|
12
|
-
## Contratto dei moduli (da rispettare in ogni intervento)
|
|
13
|
-
|
|
14
|
-
1. **Nessun percorso di progetto hardcodato** nei moduli: tutti i path (sorgenti,
|
|
15
|
-
node_modules, template, ecc.) arrivano come parametri dal config.
|
|
16
|
-
2. Ogni modulo esporta **factory pure** (funzioni che ricevono opzioni e
|
|
17
|
-
restituiscono rules/plugin/config): nessun side effect a import time.
|
|
18
|
-
3. Ogni parametro ha un **default sensato** e JSDoc: il modulo deve funzionare
|
|
19
|
-
anche senza opzioni, e un'opzione nuova non deve mai rompere un config vecchio.
|
|
20
|
-
4. **Niente dipendenze implicite tra moduli**: se un modulo ha bisogno di un altro
|
|
21
|
-
(es. css-rules → postcss config), il collegamento avviene via parametro passato
|
|
22
|
-
dal config, non con import/path interni.
|
|
23
|
-
5. Aggiornare un modulo non deve mai richiedere modifiche al config esistente,
|
|
24
|
-
se non per adottare volontariamente opzioni nuove.
|
|
25
|
-
6. **Import opzionali = import dinamici**: i pacchetti usati solo quando una
|
|
26
|
-
scelta li attiva (es. sass-loader con `useSass`, responsive-loader, svgo)
|
|
27
|
-
non vanno importati staticamente: con la nuova struttura ogni import
|
|
28
|
-
condizionato da un flag va fatto con `await import(...)` dentro la factory
|
|
29
|
-
(come già avviene per `svgo.config.mjs` nel config), così un pacchetto non
|
|
30
|
-
installato non rompe il caricamento del config/modulo se la relativa
|
|
31
|
-
funzionalità è disattivata.
|
|
32
|
-
|
|
33
|
-
## Stato attuale (inventario del coupling)
|
|
34
|
-
|
|
35
|
-
| Modulo | Stato | Problemi |
|
|
36
|
-
|---|---|---|
|
|
37
|
-
| `get-jsConfig-aliases.mjs` | ✅ autonomo | riceve il path del jsconfig dal config |
|
|
38
|
-
| `purgecss-variables-safelist.mjs` | ✅ autonomo | tutti i glob/seeds arrivano dal config |
|
|
39
|
-
| `svgo.config.mjs` | ✅ autonomo | nessun riferimento al progetto |
|
|
40
|
-
| `mini-svg-data-uri-loader.cjs` | ✅ autonomo | loader puro |
|
|
41
|
-
| `svg-rules.mjs` | ⚠️ quasi | parametrico, ma da riverificare rispetto al contratto (default, JSDoc) |
|
|
42
|
-
| `css-rules.mjs` | ⚠️ quasi | parametrico, ma riceve `postcssConfig_path` (file di config esterno invece di opzioni); scelte come `localIdentName` non sovrascrivibili dal config |
|
|
43
|
-
| `postcss.config.mjs` | ❌ accoppiato | **hardcoda** `../src/css/custom-media.css` (layout del progetto): non aggiornabile senza danni |
|
|
44
|
-
| `webpack.config.mjs` | ❌ contiene logica | blocchi che sono logica, non scelte: sezione PurgeCSS (opzioni comuni + 2 istanze + log debug), test del cacheGroup `shared`, rules asset (js/ejs/html/img/font/video/favicon), BannerPlugin |
|
|
45
|
-
|
|
46
|
-
## Piano d'azione
|
|
47
|
-
|
|
48
|
-
### 1. Oggetto `settings` unico nel config
|
|
49
|
-
Raggruppare in testa al config un unico oggetto di scelte e percorsi
|
|
50
|
-
(flag attuali + tutti i path oggi sparsi: sorgenti js/css, template twig/php,
|
|
51
|
-
node_modules di minimo, glob shadow-DOM, seeds, favicons, output...).
|
|
52
|
-
Le factory dei moduli ricevono ciò che serve da qui. Il config diventa:
|
|
53
|
-
`settings` → chiamate alle factory → oggetto `config`.
|
|
54
|
-
|
|
55
|
-
### 2. `postcss.config.mjs` → factory senza path hardcodati
|
|
56
|
-
- Trasformarlo in una factory (es. `postcssPlugins({ globalDataFiles, preserveCustomMedia })`)
|
|
57
|
-
che riceve i file per `postcss-global-data` dal config.
|
|
58
|
-
- `css-rules.mjs` non riceve più `postcssConfig_path` (file caricato da
|
|
59
|
-
postcss-loader) ma direttamente l'oggetto `postcssOptions` (o la factory + le sue
|
|
60
|
-
opzioni) costruito nel config: sparisce l'ultimo path relativo al layout progetto.
|
|
61
|
-
- Attenzione a preservare il comportamento attuale di `loaderContext.mode`.
|
|
62
|
-
- **DA CONTROLLARE E VALUTARE — eliminazione del file postcss config**: verificare
|
|
63
|
-
la possibilità di eliminare del tutto il file di config postcss e sostituirlo
|
|
64
|
-
con regole definite direttamente nel webpack config (plugin postcss dichiarati
|
|
65
|
-
inline in `postcssOptions`). Considerare però che in certi casi postcss
|
|
66
|
-
necessita di impostazioni ad hoc per progetto (è il motivo per cui oggi esiste
|
|
67
|
-
il parametro `postcssConfig_path`): in quel caso la strada è mantenere la
|
|
68
|
-
possibilità di override — es. default inline nel config + parametro opzionale
|
|
69
|
-
per un file/oggetto di impostazioni custom. Tenere conto anche degli altri
|
|
70
|
-
consumatori del file: un postcss config a livello di progetto può servire ad
|
|
71
|
-
altri tool (stylelint, editor/IDE, CLI postcss) oltre che a postcss-loader.
|
|
72
|
-
|
|
73
|
-
### 3. Sezione PurgeCSS → `webpack-modules/purgecss-plugins.mjs`
|
|
74
|
-
Factory (es. `purgecssPlugins({ contentGlobs, safelist, variablesSafelistOptions, debug })`)
|
|
75
|
-
che incapsula: opzioni comuni, safelist base (deep `m_`, greedy `&`), le due istanze
|
|
76
|
-
(critical + generale) e il mini-plugin di log `purgedStats`.
|
|
77
|
-
Restituisce l'array di plugin pronto per lo spread nel config.
|
|
78
|
-
Nel config restano SOLO: i glob dei contenuti, le safelist specifiche del progetto
|
|
79
|
-
(standard/seeds), il flag `purgeCSSDebug`. I commenti "strutturali" (problemi a/b/c)
|
|
80
|
-
migrano nel modulo; nel config restano i commenti sulle scelte.
|
|
81
|
-
|
|
82
|
-
### 4. Rules asset generiche → `webpack-modules/asset-rules.mjs`
|
|
83
|
-
Estrarre js/babel, ejs, html, immagini/pdf, font, video, favicons in una factory
|
|
84
|
-
parametrica con on/off per gruppo (es. `assetRules({ favicons_path_regexp, useVideo, ... })`).
|
|
85
|
-
Le parti oggi commentate nel config (responsive-loader, video) diventano opzioni
|
|
86
|
-
documentate del modulo.
|
|
87
|
-
|
|
88
|
-
### 5. splitChunks
|
|
89
|
-
Valutare una piccola factory (es. `sharedCacheGroup({ pathsRegexp })`) che incapsuli
|
|
90
|
-
l'esclusione dei moduli css (`module.type !== 'css/mini-extract'`, requisito PurgeCSS)
|
|
91
|
-
lasciando nel config solo l'elenco dei path. In alternativa lasciarla nel config ma
|
|
92
|
-
con l'esclusione css delegata a una helper del modulo purgecss (è un suo requisito).
|
|
93
|
-
|
|
94
|
-
### 6. `starter-install.sh`
|
|
95
|
-
- Aggiornare l'array `FILES` con i nuovi moduli.
|
|
96
|
-
- Distinguere due categorie nel flusso di copia:
|
|
97
|
-
- `webpack-modules/` = aggiornabili sempre (una volta autonomi, la copia
|
|
98
|
-
NEW- può diventare sovrascrittura diretta o diff);
|
|
99
|
-
- `webpack.config.mjs` e template = mai sovrascritti (proprietà del progetto).
|
|
100
|
-
- **Audit delle dipendenze installate**: verificare la corrispondenza tra i
|
|
101
|
-
pacchetti degli `npm i -D` dello script e quelli effettivamente usati da
|
|
102
|
-
config, moduli e template, per evitare installazioni inutili. Da controllare
|
|
103
|
-
in entrambe le direzioni:
|
|
104
|
-
- installati ma (forse) mai usati: es. `postcss-preset-env` (assente dal
|
|
105
|
-
postcss config), `responsive-loader` (solo in blocchi commentati),
|
|
106
|
-
`style-dictionary` (riguarda i design token, non la build webpack);
|
|
107
|
-
- usati ma non installati: es. `file-loader` (referenziato dalla rule video
|
|
108
|
-
del config) e `sass-loader`/`sass` (necessari con `useSass: true`).
|
|
109
|
-
- i pacchetti legati a funzionalità opzionali (sass, responsive-loader,
|
|
110
|
-
video, svgr...) escono dall'installazione di default: o vengono installati
|
|
111
|
-
su richiesta dallo script (prompt/flag) o documentati come "da installare
|
|
112
|
-
quando si attiva l'opzione X" — coerentemente con la regola degli import
|
|
113
|
-
dinamici del contratto (punto 6).
|
|
114
|
-
|
|
115
|
-
### 7. Versionamento dei moduli
|
|
116
|
-
Aggiungere in testa a ogni modulo un commento con versione (o data) per capire a
|
|
117
|
-
colpo d'occhio, nei progetti, quale revisione è installata.
|
|
118
|
-
|
|
119
|
-
### 8. Documentazione
|
|
120
|
-
README dello starter kit con la mappa: cosa si imposta nel config (e solo lì),
|
|
121
|
-
cosa fa ogni modulo, come aggiornare i moduli in un progetto esistente.
|
|
122
|
-
|
|
123
|
-
## Ordine consigliato
|
|
124
|
-
|
|
125
|
-
2 → 3 → 4 → 5 (refactor moduli, uno per volta, build demo di verifica dopo ognuno)
|
|
126
|
-
→ 1 (consolidamento `settings`) → 6 → 7 → 8.
|
|
127
|
-
|
|
128
|
-
## Note
|
|
129
|
-
|
|
130
|
-
- `merge-jsonc` è già stato spostato in `src/merge-jsonc.mjs` (convertito in ESM):
|
|
131
|
-
la dir `src/` ospita le utility interne dell'installer, NON copiate nei progetti;
|
|
132
|
-
`webpack-modules/` resta la dir dei moduli copiati nei progetti.
|
|
133
|
-
- Criterio di "fatto": si deve poter copiare l'intera `webpack-modules/` aggiornata
|
|
134
|
-
in un progetto esistente senza toccare il suo `webpack.config.mjs` e ottenere
|
|
135
|
-
una build identica (o migliorata) senza errori.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// multiselect, requires BS 5 (or 4)
|
|
2
|
-
// TODO remove bs dependencies, switch to custom props
|
|
3
|
-
|
|
4
|
-
.form-multiselect {
|
|
5
|
-
&, button {
|
|
6
|
-
width: 100%;
|
|
7
|
-
max-width: 100%;
|
|
8
|
-
}
|
|
9
|
-
.btn {
|
|
10
|
-
display: flex;
|
|
11
|
-
align-items: center;
|
|
12
|
-
justify-content: flex-start;
|
|
13
|
-
|
|
14
|
-
&::after {
|
|
15
|
-
position: absolute;
|
|
16
|
-
top: 50%;
|
|
17
|
-
right: $input-btn-padding-y;
|
|
18
|
-
transform: translateY(-50%);
|
|
19
|
-
}
|
|
20
|
-
&.btn-multiselect {
|
|
21
|
-
@include button-variant($input-bg, $input-border-color);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
.dropdown-menu {
|
|
25
|
-
top: calc(100% + 2px);
|
|
26
|
-
width: 100%;
|
|
27
|
-
padding-right: $dropdown-padding-y;
|
|
28
|
-
padding-left: $dropdown-padding-y;
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.form-multiselect-placeholder {
|
|
34
|
-
display: inline-block;
|
|
35
|
-
max-width: 100%;
|
|
36
|
-
min-height: 1em * $input-line-height;
|
|
37
|
-
padding-right: $input-btn-padding-y * 3;
|
|
38
|
-
@extend .text-truncate;
|
|
39
|
-
text-align: left;
|
|
40
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
This file must be included in projects that implement the
|
|
3
|
-
`bs*_form_layout.html.twig` template, if you are using the multiselect option
|
|
4
|
-
|
|
5
|
-
https://github.com/massimo-cassandro/symfony-bootstrap-form-theme
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
ES6:
|
|
9
|
-
-------------------------
|
|
10
|
-
import { formMultiselect } from '@massimo-cassandro/js-utilities';
|
|
11
|
-
|
|
12
|
-
formMultiselect();
|
|
13
|
-
|
|
14
|
-
NB: this version dropped the dependance from bootstrap 5 Dropdown JS Element
|
|
15
|
-
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
// multiselect widget
|
|
19
|
-
// import { createPopper } from '@popperjs/core/dist/esm/popper-lite';
|
|
20
|
-
// import flip from '@popperjs/core/dist/esm/modifiers/flip';
|
|
21
|
-
// import preventOverflow from '@popperjs/core/dist/esm/modifiers/preventOverflow';
|
|
22
|
-
|
|
23
|
-
export function formMultiselect(container=document) {
|
|
24
|
-
|
|
25
|
-
const multiselects = container.querySelectorAll('.form-multiselect'),
|
|
26
|
-
setMultiselectPlaceholder = multiselect_item => {
|
|
27
|
-
let selected_labels = [];
|
|
28
|
-
multiselect_item.querySelectorAll('[type="checkbox"]:checked, [type="radio"]:checked')
|
|
29
|
-
.forEach( checked_el => {
|
|
30
|
-
selected_labels.push(
|
|
31
|
-
checked_el.closest ('.form-check').querySelector('label').innerText.trim()
|
|
32
|
-
);
|
|
33
|
-
});
|
|
34
|
-
multiselect_item
|
|
35
|
-
.querySelector('.form-multiselect-placeholder').innerText =
|
|
36
|
-
selected_labels.length? selected_labels.join(', ') : '—';
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
multiselects.forEach( item => {
|
|
40
|
-
|
|
41
|
-
const btn = item.querySelector('.btn'),
|
|
42
|
-
drpdown = item.querySelector('.dropdown-menu'),
|
|
43
|
-
closeOnClick = item.hasAttribute('data-close-on-click');
|
|
44
|
-
|
|
45
|
-
item.addEventListener('click', e => {
|
|
46
|
-
|
|
47
|
-
if(['checkbox', 'radio'].indexOf(e.target.type) !== -1) {
|
|
48
|
-
setMultiselectPlaceholder(item);
|
|
49
|
-
if(closeOnClick) {
|
|
50
|
-
btn.click();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
}, false);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
btn.addEventListener('click', () => {
|
|
58
|
-
drpdown.classList.toggle('show');
|
|
59
|
-
let menu_on = drpdown.classList.contains('show');
|
|
60
|
-
btn.classList.toggle('show', menu_on);
|
|
61
|
-
btn.setAttribute('aria-expanded', menu_on);
|
|
62
|
-
}, false);
|
|
63
|
-
|
|
64
|
-
// click outside
|
|
65
|
-
document.body.addEventListener('click', e => {
|
|
66
|
-
|
|
67
|
-
if(drpdown.classList.contains('show') && e.target.closest('.form-multiselect') !== item) {
|
|
68
|
-
btn.click();
|
|
69
|
-
setMultiselectPlaceholder(item);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
}, false);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// createPopper(btn, drpdown, {
|
|
76
|
-
// // placement: 'bottom',
|
|
77
|
-
// modifiers: [flip, preventOverflow]
|
|
78
|
-
// });
|
|
79
|
-
|
|
80
|
-
setMultiselectPlaceholder(item);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/* stylelint-disable selector-max-id */
|
|
2
|
-
@import 'vanilla-cookieconsent/dist/cookieconsent.css';
|
|
3
|
-
|
|
4
|
-
/* stylelint-disable declaration-no-important */
|
|
5
|
-
#cc-main {
|
|
6
|
-
h2 {
|
|
7
|
-
line-height: 1.3 !important;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.btn-link {
|
|
11
|
-
font-weight: var(--font-weight-semibold);
|
|
12
|
-
|
|
13
|
-
@media (hover: hover) {
|
|
14
|
-
&:hover {
|
|
15
|
-
text-decoration: underline;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/* stylelint-enable declaration-no-important */
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import './cookie-consent.css';
|
|
2
|
-
import * as CookieConsent from 'vanilla-cookieconsent';
|
|
3
|
-
import { it_translation } from './src/it-translation.js';
|
|
4
|
-
// import { run_analytics } from './src/run-analytics.js';
|
|
5
|
-
import { run_recaptcha, disableRecaptcha } from './src/run-recaptcha.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// https://cookieconsent.orestbida.com/essential/getting-started.html
|
|
9
|
-
CookieConsent.run({
|
|
10
|
-
hideFromBots: !(new URLSearchParams(document.location.search).get('cc-list-parser') !== null), // abilita il parsing dei cookie da cookies-list
|
|
11
|
-
categories: {
|
|
12
|
-
necessary: {
|
|
13
|
-
enabled: true,
|
|
14
|
-
readOnly: true
|
|
15
|
-
},
|
|
16
|
-
functionality: {
|
|
17
|
-
enabled: true,
|
|
18
|
-
},
|
|
19
|
-
analytics: {
|
|
20
|
-
enabled: true,
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
guiOptions: {
|
|
24
|
-
consentModal: {
|
|
25
|
-
layout: 'box',
|
|
26
|
-
position: 'bottom right',
|
|
27
|
-
flipButtons: false,
|
|
28
|
-
equalWeightButtons: false
|
|
29
|
-
},
|
|
30
|
-
preferencesModal: {
|
|
31
|
-
layout: 'box',
|
|
32
|
-
// position: 'left right',
|
|
33
|
-
flipButtons: false,
|
|
34
|
-
equalWeightButtons: true
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
language: {
|
|
38
|
-
default: 'it',
|
|
39
|
-
translations: it_translation
|
|
40
|
-
},
|
|
41
|
-
onConsent: ({cookie}) => {
|
|
42
|
-
// if(cookie.categories.indexOf('analytics') !== -1) {
|
|
43
|
-
// run_analytics();
|
|
44
|
-
// }
|
|
45
|
-
if(cookie.categories.indexOf('functionality') !== -1) {
|
|
46
|
-
run_recaptcha();
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
// https://cookieconsent.orestbida.com/reference/configuration-reference.html#onchange
|
|
50
|
-
onChange: ({/* cookie, */changedCategories/* , changedServices */}) => {
|
|
51
|
-
if(changedCategories.includes('functionality')){
|
|
52
|
-
|
|
53
|
-
// caso in cui si cambia l'intera categoria
|
|
54
|
-
if(CookieConsent.acceptedCategory('functionality')){
|
|
55
|
-
run_recaptcha();
|
|
56
|
-
} else {
|
|
57
|
-
disableRecaptcha();
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// TODO caso in cui si cambia il solo recaptcha (se ce ne fossero anche altri)
|
|
61
|
-
// console.log(cookie);
|
|
62
|
-
// console.log(changedServices);
|
|
63
|
-
// console.log(CookieConsent.acceptedService('_GRECAPTCHA', 'functionality'));
|
|
64
|
-
|
|
65
|
-
// if(changedServices['functionality'].includes('Google Analytics')){
|
|
66
|
-
// if(CookieConsent.acceptedService('Google Analytics', 'analytics')){
|
|
67
|
-
// // Google Analytics was just enabled
|
|
68
|
-
// }else{
|
|
69
|
-
// // Google Analytics was just disabled
|
|
70
|
-
// }
|
|
71
|
-
// }
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// lista dei cookie per visualizzazione nella pagina della privacy policy
|
|
2
|
-
// questo file è importato direttamente nella pagina privacy policy
|
|
3
|
-
|
|
4
|
-
import { cookie_list } from './src/cookie-list';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export function render_cookie_list(target) {
|
|
8
|
-
|
|
9
|
-
const list = document.createDocumentFragment()
|
|
10
|
-
.appendChild(document.createElement('ul'));
|
|
11
|
-
|
|
12
|
-
cookie_list
|
|
13
|
-
.filter(i => i.cookieTable !== undefined)
|
|
14
|
-
.forEach(tab => {
|
|
15
|
-
const section = list.appendChild(document.createElement('li'));
|
|
16
|
-
section.appendChild(document.createElement('span'));
|
|
17
|
-
section.querySelector(':scope > span').classList.add('cookie-list-section');
|
|
18
|
-
section.querySelector(':scope > span').appendChild(document.createTextNode(tab.title));
|
|
19
|
-
const sublist = section.appendChild(document.createElement('ul'));
|
|
20
|
-
|
|
21
|
-
tab.cookieTable.body.forEach(cookie => {
|
|
22
|
-
const li = sublist.appendChild(document.createElement('li'));
|
|
23
|
-
li.appendChild(document.createElement('strong'))
|
|
24
|
-
.appendChild(document.createTextNode(cookie.name + ': '));
|
|
25
|
-
li.appendChild(document.createTextNode(`${cookie.description} (dur. ${cookie.expiration})`));
|
|
26
|
-
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// console.log(list);
|
|
31
|
-
target.appendChild(list);
|
|
32
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
// elenco da cookie nel formato utilizzato da cookie consent e da `render-cookie-list.js`
|
|
2
|
-
// per visualizzazione nella pagina privacy
|
|
3
|
-
|
|
4
|
-
// https://cookieconsent.orestbida.com/reference/configuration-reference.html
|
|
5
|
-
export const cookie_list = [
|
|
6
|
-
{
|
|
7
|
-
title: 'Cookie strettamente necessari',
|
|
8
|
-
description: 'I cookie necessari sono indispensabili per il corretto funzionamento del sito web. Questi cookie garantiscono le funzionalità di base e le caratteristiche di sicurezza del sito web, in modo anonimo.',
|
|
9
|
-
linkedCategory: 'necessary',
|
|
10
|
-
cookieTable: {
|
|
11
|
-
headers: {
|
|
12
|
-
name: 'Cookie',
|
|
13
|
-
domain: 'Impostato da',
|
|
14
|
-
description: 'Descrizione',
|
|
15
|
-
expiration: 'Durata',
|
|
16
|
-
},
|
|
17
|
-
body: [
|
|
18
|
-
{
|
|
19
|
-
name: 'cc_cookie',
|
|
20
|
-
domain: 'Questo sito',
|
|
21
|
-
description: 'Registra la tua scelta sui cookie',
|
|
22
|
-
expiration: '6 mesi'
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
name: 'PHPSESSID',
|
|
26
|
-
domain: 'Questo sito',
|
|
27
|
-
description: 'Identifica la sessione corrente in modo anonimo in modo di poter eseguire alcune azioni.',
|
|
28
|
-
expiration: 'sessione'
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
title: 'Cookie per funzionalità aggiuntive',
|
|
36
|
-
description: 'Questi cookie sono necessari per l’abilitazione di alcune funzionalità aggiuntive. In mancanza della loro attivazione, alcune funzionalità non saranno disponibili',
|
|
37
|
-
linkedCategory: 'functionality',
|
|
38
|
-
cookieTable: {
|
|
39
|
-
headers: {
|
|
40
|
-
name: 'Cookie',
|
|
41
|
-
domain: 'Impostato da',
|
|
42
|
-
description: 'Descrizione',
|
|
43
|
-
expiration: 'Durata',
|
|
44
|
-
},
|
|
45
|
-
body: [
|
|
46
|
-
{
|
|
47
|
-
name: '_GRECAPTCHA',
|
|
48
|
-
domain: 'google.com',
|
|
49
|
-
description: 'Questo cookie è impostato dal servizio recaptcha di Google per identificare i bot e proteggere il sito da attacchi di spam dannosi.<br>'+
|
|
50
|
-
'Se questa opzione viene disattivata non sarà possibile utilizzare il form di contatto a fondo pagina',
|
|
51
|
-
expiration: 'Circa 6 mesi'
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
// {
|
|
58
|
-
// title: 'Cookie analitici',
|
|
59
|
-
// description: 'I cookie analitici vengono utilizzati per capire come i visitatori interagiscono con il sito web. Questi cookie aiutano a fornire informazioni sulle metriche del numero di visitatori, frequenza di rimbalzo, fonte di traffico, ecc.',
|
|
60
|
-
// linkedCategory: 'analytics',
|
|
61
|
-
// cookieTable: {
|
|
62
|
-
// headers: {
|
|
63
|
-
// name: 'Cookie',
|
|
64
|
-
// domain: 'Impostato da',
|
|
65
|
-
// description: 'Descrizione',
|
|
66
|
-
// expiration: 'Durata',
|
|
67
|
-
// },
|
|
68
|
-
// body: [
|
|
69
|
-
// {
|
|
70
|
-
// name: '_ga',
|
|
71
|
-
// domain: 'Questo sito',
|
|
72
|
-
// description: 'Cookie utilizzato da Google Analytics',
|
|
73
|
-
// expiration: '2 anni'
|
|
74
|
-
// },
|
|
75
|
-
// {
|
|
76
|
-
// name: '_ga_NBCMZ18740',
|
|
77
|
-
// domain: 'Questo sito',
|
|
78
|
-
// description: 'Cookie utilizzato da Google Analytics',
|
|
79
|
-
// expiration: '1 minuto'
|
|
80
|
-
// },
|
|
81
|
-
|
|
82
|
-
// ]
|
|
83
|
-
// }
|
|
84
|
-
// }
|
|
85
|
-
];
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { cookie_list } from './cookie-list.js';
|
|
2
|
-
|
|
3
|
-
export const it_translation = {
|
|
4
|
-
'it': {
|
|
5
|
-
consentModal: {
|
|
6
|
-
title: 'Utilizziamo i cookie per offrirti la migliore esperienza di navigazione ricordando le tue preferenze.',
|
|
7
|
-
description: 'Scegliendo l’opzione <strong>“Accetta tutti i cookie”</strong>, acconsenti all’uso di <strong>tutti</strong> i cookie.<br>' +
|
|
8
|
-
'Il pulsante <strong>“Gestisci le tue preferenze”</strong>, permette di selezionare singole categorie di cookies ed avere informazioni più dettagliate.<br>' +
|
|
9
|
-
'Tieni presente che alcune funzionalità potrebbero non essere disponibili se si accettano solo i cookie essenziali.<br>' +
|
|
10
|
-
'Per ulteriori informazioni vai alla pagina sulla <a href="/privacy-policy">Privacy e Cookie Policy</a>',
|
|
11
|
-
acceptAllBtn: 'Accetta tutti i cookie',
|
|
12
|
-
acceptNecessaryBtn: 'Accetta solo quelli essenziali',
|
|
13
|
-
showPreferencesBtn: 'Gestisci le tue preferenze'
|
|
14
|
-
},
|
|
15
|
-
preferencesModal: {
|
|
16
|
-
title: 'Gestici le tue preferenze sui cookie',
|
|
17
|
-
acceptAllBtn: 'Accetta tutti i cookie',
|
|
18
|
-
acceptNecessaryBtn: 'Accetta solo i cookie essenziali',
|
|
19
|
-
savePreferencesBtn: 'Salva le tue preferenze',
|
|
20
|
-
closeIconLabel: 'Chiudi',
|
|
21
|
-
sections: [
|
|
22
|
-
{
|
|
23
|
-
title: 'Utilizzo dei cookie',
|
|
24
|
-
description: 'Questo sito web utilizza i cookie per migliorare la tua esperienza di navigazione.<br>' +
|
|
25
|
-
'I cookie classificati come <em>strettamente necessari</em> vengono memorizzati nel browser in quanto sono essenziali per il funzionamento del sito.<br>' +
|
|
26
|
-
'Utilizziamo anche cookie di terze parti che ci aiutano ad analizzare e capire come utilizzi il portale. Questi cookie verranno memorizzati nel tuo browser solo con il tuo consenso. '+
|
|
27
|
-
'Hai la possibilità di disattivare questi cookie, tuttavia, la loro disattivazione potrebbe influire sulla tua esperienza di navigazione.'
|
|
28
|
-
},
|
|
29
|
-
...cookie_list,
|
|
30
|
-
{
|
|
31
|
-
title: 'Altre informazioni',
|
|
32
|
-
// description: 'Per ulteriori informazioni, consulta la pagina relativa a Privacy e Cookie Policy'
|
|
33
|
-
description: 'Per ulteriori informazioni, consulta la pagina relativa a <button class="btn-link" data-content="privacy" type="button" aria-haspopup="dialog">Privacy e Cookie Policy</button>'
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// imposta lo script analytics GA4 (se l'utente ha dato il consenso)
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export function run_analytics() {
|
|
5
|
-
|
|
6
|
-
const analytics_id = 'G-NBCMZ18740';
|
|
7
|
-
|
|
8
|
-
// purchase_data_element = document.getElementById('ga-purchase-data'); // deinito in landing-acquisti
|
|
9
|
-
// let purchase_obj = null;
|
|
10
|
-
// if(purchase_data_element) {
|
|
11
|
-
// purchase_obj = JSON.parse(purchase_data_element.dataset.d);
|
|
12
|
-
// }
|
|
13
|
-
|
|
14
|
-
let script = document.createElement('script');
|
|
15
|
-
|
|
16
|
-
// <script async src="https://www.googletagmanager.com/gtag/js?id={{ GA_id }}"></script>
|
|
17
|
-
// <script>
|
|
18
|
-
// window.dataLayer = window.dataLayer || [];
|
|
19
|
-
// function gtag(){dataLayer.push(arguments);}
|
|
20
|
-
// gtag('js', new Date());
|
|
21
|
-
// gtag('config', '{{ GA_id }}');
|
|
22
|
-
// </script>
|
|
23
|
-
|
|
24
|
-
script.onload = function() {
|
|
25
|
-
window.dataLayer = window.dataLayer || [];
|
|
26
|
-
function gtag() {
|
|
27
|
-
window.dataLayer.push(arguments);
|
|
28
|
-
}
|
|
29
|
-
gtag('js', new Date());
|
|
30
|
-
gtag('config', analytics_id);
|
|
31
|
-
|
|
32
|
-
// if(purchase_obj) {
|
|
33
|
-
// gtag('event', 'purchase', purchase_obj);
|
|
34
|
-
// }
|
|
35
|
-
|
|
36
|
-
// console.log('GA4 onLoad');
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
script.classList.add('ga');
|
|
40
|
-
script.src = `https://www.googletagmanager.com/gtag/js?id=${analytics_id}`;
|
|
41
|
-
document.head.appendChild(script);
|
|
42
|
-
|
|
43
|
-
// console.log('Google Analytics ON');
|
|
44
|
-
// console.log(document.head.querySelector('script.ga'));
|
|
45
|
-
// console.groupCollapsed('Impostazioni analytics');
|
|
46
|
-
// console.log(`analytics_id: ${analytics_id}`);
|
|
47
|
-
// // if(purchase_obj) {
|
|
48
|
-
// // console.log('purchase:');
|
|
49
|
-
// // console.log(purchase_obj);
|
|
50
|
-
// // }
|
|
51
|
-
// console.log($wt.cookie.get('cck1'));
|
|
52
|
-
// console.groupEnd();
|
|
53
|
-
|
|
54
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// TODO rivedere, uso anche al di fuori di cookie consent?
|
|
2
|
-
// TODO spostare nella dir recaptcha
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { recaptcha_key } from '@src/pages/recaptcha-params.js';
|
|
6
|
-
|
|
7
|
-
const form_wrapper = document.querySelector('.recaptcha-form-wrapper');
|
|
8
|
-
|
|
9
|
-
export function addRecaptchaScript(callback) {
|
|
10
|
-
|
|
11
|
-
if (!document.head.querySelector('script.recaptcha')) {
|
|
12
|
-
const script = document.createElement('script');
|
|
13
|
-
|
|
14
|
-
if(callback != null && typeof callback === 'function') {
|
|
15
|
-
script.onload = callback;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
script.async = true;
|
|
19
|
-
script.defer = true;
|
|
20
|
-
script.className = 'recaptcha';
|
|
21
|
-
script.src = `https://www.google.com/recaptcha/api.js?render=${recaptcha_key}`;
|
|
22
|
-
document.head.appendChild(script);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// imposta lo script analytics GA4 (se l'utente ha dato il consenso)
|
|
28
|
-
export function run_recaptcha() {
|
|
29
|
-
|
|
30
|
-
if(recaptcha_key) {
|
|
31
|
-
addRecaptchaScript(() => form_wrapper.classList.remove('disabled'));
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function disableRecaptcha() {
|
|
37
|
-
document.head.querySelector('script.recaptcha')?.remove();
|
|
38
|
-
form_wrapper?.classList.add('disabled');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// funzione da richiamare al submit del form con recaptcha
|
|
42
|
-
/*
|
|
43
|
-
|
|
44
|
-
loadRecaptchaAsync('TUO_SITE_KEY', () => {
|
|
45
|
-
|
|
46
|
-
grecaptcha.ready(function() {
|
|
47
|
-
grecaptcha.execute('TUO_SITE_KEY', {action: 'submit'}).then(function(token) {
|
|
48
|
-
// Usa il token
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
*/
|
|
53
|
-
|
|
54
|
-
export function loadRecaptchaAsync(siteKey, callback) {
|
|
55
|
-
|
|
56
|
-
function waitForGrecaptcha(cb) {
|
|
57
|
-
|
|
58
|
-
if (window.grecaptcha && typeof window.grecaptcha.execute === 'function') {
|
|
59
|
-
window.grecaptcha.ready(cb);
|
|
60
|
-
} else {
|
|
61
|
-
setTimeout(() => waitForGrecaptcha(cb), 100);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (document.querySelector('script.recaptcha')) {
|
|
66
|
-
waitForGrecaptcha(callback);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
addRecaptchaScript(() => waitForGrecaptcha(callback));
|
|
71
|
-
}
|