@easy-cookie/policy 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +182 -2
- package/dist/chunk-HDY2VYU4.js +23 -0
- package/dist/chunk-HDY2VYU4.js.map +1 -0
- package/dist/chunk-P3F5NQPR.js +224 -0
- package/dist/chunk-P3F5NQPR.js.map +1 -0
- package/dist/client.cjs +50 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.cts +51 -0
- package/dist/client.d.ts +51 -0
- package/dist/client.js +13 -0
- package/dist/client.js.map +1 -0
- package/dist/easy-cookie-legal.css +129 -0
- package/dist/index.cjs +1075 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +91 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.js +804 -0
- package/dist/index.js.map +1 -0
- package/dist/legal-document.cjs +72 -0
- package/dist/legal-document.cjs.map +1 -0
- package/dist/legal-document.js +48 -0
- package/dist/legal-document.js.map +1 -0
- package/dist/react.cjs +219 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +49 -0
- package/dist/react.d.ts +49 -0
- package/dist/react.js +80 -0
- package/dist/react.js.map +1 -0
- package/dist/render-DYrvn1cT.d.cts +115 -0
- package/dist/render-DYrvn1cT.d.ts +115 -0
- package/package.json +67 -3
package/dist/index.js
ADDED
|
@@ -0,0 +1,804 @@
|
|
|
1
|
+
import {
|
|
2
|
+
POLICY_LABELS,
|
|
3
|
+
autoClearRules,
|
|
4
|
+
buildPolicyModel,
|
|
5
|
+
escapeHtml,
|
|
6
|
+
formatPolicyDate,
|
|
7
|
+
matchesRule,
|
|
8
|
+
policyRows,
|
|
9
|
+
prettyCookiePattern,
|
|
10
|
+
renderPolicyHtml,
|
|
11
|
+
renderPolicyMarkdown
|
|
12
|
+
} from "./chunk-P3F5NQPR.js";
|
|
13
|
+
import {
|
|
14
|
+
LEGAL_KINDS,
|
|
15
|
+
fetchLegalDocument,
|
|
16
|
+
isLegalKind,
|
|
17
|
+
legalDocumentUrl
|
|
18
|
+
} from "./chunk-HDY2VYU4.js";
|
|
19
|
+
|
|
20
|
+
// src/legal.ts
|
|
21
|
+
import { findCatalogEntry } from "@easy-cookie/core/catalog";
|
|
22
|
+
import { localize, resolveConfig } from "@easy-cookie/core/shared";
|
|
23
|
+
import MarkdownIt from "markdown-it";
|
|
24
|
+
var LEGAL_LABELS = {
|
|
25
|
+
it: {
|
|
26
|
+
updated: "Ultimo aggiornamento",
|
|
27
|
+
preferences: "Modifica le preferenze sui cookie",
|
|
28
|
+
privacyPolicy: "Informativa privacy",
|
|
29
|
+
category: "Categoria",
|
|
30
|
+
transfer: "Trasferimento dei dati",
|
|
31
|
+
noServices: "Nessun servizio di terze parti dichiarato.",
|
|
32
|
+
noConfig: "L\u2019elenco dei cookie sar\xE0 disponibile dopo la pubblicazione del banner."
|
|
33
|
+
},
|
|
34
|
+
en: {
|
|
35
|
+
updated: "Last updated",
|
|
36
|
+
preferences: "Change your cookie preferences",
|
|
37
|
+
privacyPolicy: "Privacy policy",
|
|
38
|
+
category: "Category",
|
|
39
|
+
transfer: "Data transfer",
|
|
40
|
+
noServices: "No third-party services declared.",
|
|
41
|
+
noConfig: "The list of cookies will be available once the banner is published."
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var labelsFor = (lang) => LEGAL_LABELS[lang] ?? LEGAL_LABELS.en;
|
|
45
|
+
var PLACEHOLDER_RE = /\[\[([^[\]\n]+?)\]\]/g;
|
|
46
|
+
function countPlaceholders(content) {
|
|
47
|
+
let n = 0;
|
|
48
|
+
for (const t of Object.values(content?.translations ?? {})) {
|
|
49
|
+
n += (String(t?.title ?? "").match(PLACEHOLDER_RE) ?? []).length;
|
|
50
|
+
n += (String(t?.body ?? "").match(PLACEHOLDER_RE) ?? []).length;
|
|
51
|
+
}
|
|
52
|
+
return n;
|
|
53
|
+
}
|
|
54
|
+
function fillSiteVariables(text, site) {
|
|
55
|
+
return text.replace(/\{\{\s*site\.(name|domain)\s*\}\}/g, (all, key) => site[key] ?? all);
|
|
56
|
+
}
|
|
57
|
+
function pickLegalLanguage(content, lang, defaultLang) {
|
|
58
|
+
const langs = Object.keys(content?.translations ?? {});
|
|
59
|
+
if (lang && langs.includes(lang)) return lang;
|
|
60
|
+
if (lang) {
|
|
61
|
+
const base = lang.toLowerCase().split("-")[0];
|
|
62
|
+
const hit = langs.find((l) => l.toLowerCase() === base);
|
|
63
|
+
if (hit) return hit;
|
|
64
|
+
}
|
|
65
|
+
if (defaultLang && langs.includes(defaultLang)) return defaultLang;
|
|
66
|
+
return langs[0];
|
|
67
|
+
}
|
|
68
|
+
function legalContentError(value) {
|
|
69
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return "Must be an object";
|
|
70
|
+
const tr = value.translations;
|
|
71
|
+
if (typeof tr !== "object" || tr === null || Array.isArray(tr)) return "translations: must be an object";
|
|
72
|
+
for (const [lang, t] of Object.entries(tr)) {
|
|
73
|
+
if (!/^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/.test(lang)) return `translations.${lang}: invalid language code`;
|
|
74
|
+
if (typeof t !== "object" || t === null) return `translations.${lang}: must be { title, body }`;
|
|
75
|
+
const { title, body } = t;
|
|
76
|
+
if (typeof title !== "string" || title.length > 300) return `translations.${lang}.title: string (max 300)`;
|
|
77
|
+
if (typeof body !== "string" || body.length > 2e5) return `translations.${lang}.body: string (max 200000)`;
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
var BLOCK_DIRECTIVES = /* @__PURE__ */ new Set(["cookie-table", "services-list", "preferences-link", "last-updated"]);
|
|
82
|
+
var INLINE_DIRECTIVES = /* @__PURE__ */ new Set(["preferences-link", "last-updated", "site.name", "site.domain"]);
|
|
83
|
+
var INLINE_RE = /\{\{\s*([a-z.-]+)\s*\}\}|\[\[([^[\]\n]+?)\]\]/g;
|
|
84
|
+
function isSafeLegalUrl(url) {
|
|
85
|
+
const u = url.trim();
|
|
86
|
+
let probe = u;
|
|
87
|
+
try {
|
|
88
|
+
probe = decodeURIComponent(u);
|
|
89
|
+
} catch {
|
|
90
|
+
}
|
|
91
|
+
probe = probe.replace(/[\u0000-\u001f\u007f\s]/g, "").toLowerCase();
|
|
92
|
+
if (/^[a-z][a-z0-9+.-]*:/.test(probe)) return /^(https?|mailto):/.test(probe);
|
|
93
|
+
return !probe.startsWith("\\");
|
|
94
|
+
}
|
|
95
|
+
function createMarkdown() {
|
|
96
|
+
const md = new MarkdownIt({ html: false, linkify: true, typographer: false });
|
|
97
|
+
md.validateLink = isSafeLegalUrl;
|
|
98
|
+
md.block.ruler.before(
|
|
99
|
+
"paragraph",
|
|
100
|
+
"ec_directive",
|
|
101
|
+
(state, startLine, _endLine, silent) => {
|
|
102
|
+
if (state.sCount[startLine] - state.blkIndent >= 4) return false;
|
|
103
|
+
const line = state.src.slice(state.bMarks[startLine] + state.tShift[startLine], state.eMarks[startLine]).trim();
|
|
104
|
+
const m = /^\{\{\s*([a-z.-]+)\s*\}\}$/.exec(line);
|
|
105
|
+
if (!m || !BLOCK_DIRECTIVES.has(m[1])) return false;
|
|
106
|
+
if (silent) return true;
|
|
107
|
+
const token = state.push("ec_directive", "", 0);
|
|
108
|
+
token.meta = { name: m[1] };
|
|
109
|
+
token.block = true;
|
|
110
|
+
token.map = [startLine, startLine + 1];
|
|
111
|
+
state.line = startLine + 1;
|
|
112
|
+
return true;
|
|
113
|
+
},
|
|
114
|
+
{ alt: ["paragraph"] }
|
|
115
|
+
);
|
|
116
|
+
md.core.ruler.before("linkify", "ec_inline", (state) => {
|
|
117
|
+
for (const block of state.tokens) {
|
|
118
|
+
if (block.type !== "inline" || !block.children) continue;
|
|
119
|
+
const joined = [];
|
|
120
|
+
for (const tok of block.children) {
|
|
121
|
+
const prev = joined[joined.length - 1];
|
|
122
|
+
if (tok.type === "text" && prev?.type === "text") prev.content += tok.content;
|
|
123
|
+
else joined.push(tok);
|
|
124
|
+
}
|
|
125
|
+
const out = [];
|
|
126
|
+
let inLink = 0;
|
|
127
|
+
for (const tok of joined) {
|
|
128
|
+
if (tok.type === "link_open") inLink++;
|
|
129
|
+
if (tok.type === "link_close") inLink--;
|
|
130
|
+
if (tok.type !== "text" || !/\{\{|\[\[/.test(tok.content)) {
|
|
131
|
+
out.push(tok);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
let last = 0;
|
|
135
|
+
const text = tok.content;
|
|
136
|
+
for (const m of text.matchAll(INLINE_RE)) {
|
|
137
|
+
const isDirective = m[1] !== void 0;
|
|
138
|
+
if (isDirective && (!INLINE_DIRECTIVES.has(m[1]) || inLink && m[1] === "preferences-link")) continue;
|
|
139
|
+
if (m.index > last) {
|
|
140
|
+
const t2 = new state.Token("text", "", 0);
|
|
141
|
+
t2.content = text.slice(last, m.index);
|
|
142
|
+
out.push(t2);
|
|
143
|
+
}
|
|
144
|
+
const t = new state.Token(isDirective ? "ec_inline_directive" : "ec_todo", "", 0);
|
|
145
|
+
t.meta = { name: m[1] };
|
|
146
|
+
t.content = isDirective ? m[0] : m[2];
|
|
147
|
+
out.push(t);
|
|
148
|
+
last = m.index + m[0].length;
|
|
149
|
+
}
|
|
150
|
+
if (last === 0) {
|
|
151
|
+
out.push(tok);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (last < text.length) {
|
|
155
|
+
const t = new state.Token("text", "", 0);
|
|
156
|
+
t.content = text.slice(last);
|
|
157
|
+
out.push(t);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
block.children = out;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
md.renderer.rules.ec_directive = (tokens, idx, _o, env) => env.render(tokens[idx].meta.name, true) + "\n";
|
|
164
|
+
md.renderer.rules.ec_inline_directive = (tokens, idx, _o, env) => env.render(tokens[idx].meta.name, false);
|
|
165
|
+
md.renderer.rules.ec_todo = (tokens, idx) => `<mark class="ec-legal__todo">${escapeHtml(tokens[idx].content)}</mark>`;
|
|
166
|
+
const linkOpen = md.renderer.rules.link_open ?? ((tokens, idx, options, _env, self) => self.renderToken(tokens, idx, options));
|
|
167
|
+
md.renderer.rules.link_open = (tokens, idx, options, env, self) => {
|
|
168
|
+
const href = tokens[idx].attrGet("href") ?? "";
|
|
169
|
+
if (/^https?:\/\//i.test(href)) tokens[idx].attrSet("rel", "noopener noreferrer");
|
|
170
|
+
return linkOpen(tokens, idx, options, env, self);
|
|
171
|
+
};
|
|
172
|
+
return md;
|
|
173
|
+
}
|
|
174
|
+
var markdown;
|
|
175
|
+
var getMarkdown = () => markdown ?? (markdown = createMarkdown());
|
|
176
|
+
function isoDay(value) {
|
|
177
|
+
const d = value === void 0 ? /* @__PURE__ */ new Date() : new Date(value);
|
|
178
|
+
return Number.isNaN(d.getTime()) ? (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) : d.toISOString().slice(0, 10);
|
|
179
|
+
}
|
|
180
|
+
function formatDay(day, lang) {
|
|
181
|
+
try {
|
|
182
|
+
return new Intl.DateTimeFormat(lang, { dateStyle: "long", timeZone: "UTC" }).format(/* @__PURE__ */ new Date(`${day}T00:00:00Z`));
|
|
183
|
+
} catch {
|
|
184
|
+
return day;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function regionName(code, lang) {
|
|
188
|
+
try {
|
|
189
|
+
return new Intl.DisplayNames([lang, "en"], { type: "region" }).of(code) ?? code;
|
|
190
|
+
} catch {
|
|
191
|
+
return code;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function servicesList(config, lang, L) {
|
|
195
|
+
const resolved = resolveConfig(config);
|
|
196
|
+
const fallback = resolved.language.default;
|
|
197
|
+
const l = (v) => localize(v, lang, fallback);
|
|
198
|
+
const categoryTitle = new Map(resolved.resolvedCategories.map((c) => [c.id, l(c.title)]));
|
|
199
|
+
const e = escapeHtml;
|
|
200
|
+
const items = Object.entries(config.services ?? {}).filter(([, s]) => s && typeof s === "object" && s.provider).map(([id, s]) => {
|
|
201
|
+
const transfer = s.from ? findCatalogEntry(s.from)?.transfer : void 0;
|
|
202
|
+
const meta = [];
|
|
203
|
+
const cat = categoryTitle.get(s.category);
|
|
204
|
+
if (cat) meta.push(`${e(L.category)}: ${e(cat)}`);
|
|
205
|
+
if (transfer?.countries.length) {
|
|
206
|
+
const where = transfer.countries.map((c) => regionName(c, lang)).join(", ");
|
|
207
|
+
const how = transfer.safeguard ? ` (${l(transfer.safeguard)})` : "";
|
|
208
|
+
meta.push(`${e(L.transfer)}: ${e(where + how)}`);
|
|
209
|
+
}
|
|
210
|
+
if (s.privacyUrl && isSafeLegalUrl(s.privacyUrl) && /^(https?:|mailto:|\/)/i.test(s.privacyUrl.trim()))
|
|
211
|
+
meta.push(`<a href="${e(s.privacyUrl)}" rel="noopener noreferrer">${e(L.privacyPolicy)}</a>`);
|
|
212
|
+
const purpose = l(s.purpose);
|
|
213
|
+
return `<li class="ec-legal__service" data-service="${e(id)}"><p class="ec-legal__service-name"><strong>${e(s.label ? l(s.label) : id)}</strong> \xB7 ${e(s.provider)}</p>` + (purpose ? `<p class="ec-legal__service-purpose">${e(purpose)}</p>` : "") + (meta.length ? `<p class="ec-legal__service-meta">${meta.join(" \xB7 ")}</p>` : "") + "</li>";
|
|
214
|
+
});
|
|
215
|
+
if (!items.length) return `<p class="ec-legal__empty">${e(L.noServices)}</p>`;
|
|
216
|
+
return `<ul class="ec-legal__services">
|
|
217
|
+
${items.join("\n")}
|
|
218
|
+
</ul>`;
|
|
219
|
+
}
|
|
220
|
+
function renderLegalDocument(content, lang, opts = {}) {
|
|
221
|
+
const config = opts.config ?? null;
|
|
222
|
+
const shown = pickLegalLanguage(content, lang, config?.language?.default) ?? lang;
|
|
223
|
+
const tr = content?.translations?.[shown] ?? { title: "", body: "" };
|
|
224
|
+
const L = labelsFor(shown);
|
|
225
|
+
const e = escapeHtml;
|
|
226
|
+
const day = isoDay(opts.publishedAt);
|
|
227
|
+
const site = opts.site ?? {};
|
|
228
|
+
const render = (name, block) => {
|
|
229
|
+
switch (name) {
|
|
230
|
+
case "cookie-table":
|
|
231
|
+
if (!config) return `<p class="ec-legal__notice">${e(L.noConfig)}</p>`;
|
|
232
|
+
return renderPolicyHtml(buildPolicyModel(config, shown), { headingLevel: 3, meta: false });
|
|
233
|
+
case "services-list":
|
|
234
|
+
if (!config) return `<p class="ec-legal__notice">${e(L.noConfig)}</p>`;
|
|
235
|
+
return servicesList(config, shown, L);
|
|
236
|
+
case "preferences-link": {
|
|
237
|
+
const href = opts.preferencesHref && isSafeLegalUrl(opts.preferencesHref) ? opts.preferencesHref : void 0;
|
|
238
|
+
const a = href ? `<a href="${e(href)}" class="ec-legal__preferences">${e(L.preferences)}</a>` : `<a href="#" class="ec-legal__preferences" data-ec-open-preferences>${e(L.preferences)}</a>`;
|
|
239
|
+
return block ? `<p>${a}</p>` : a;
|
|
240
|
+
}
|
|
241
|
+
case "last-updated": {
|
|
242
|
+
const time = `<time datetime="${day}">${e(formatDay(day, shown))}</time>`;
|
|
243
|
+
return block ? `<p class="ec-legal__updated">${e(L.updated)}: ${time}</p>` : time;
|
|
244
|
+
}
|
|
245
|
+
case "site.name":
|
|
246
|
+
case "site.domain": {
|
|
247
|
+
const v = site[name === "site.name" ? "name" : "domain"];
|
|
248
|
+
return e(v ?? `{{${name}}}`);
|
|
249
|
+
}
|
|
250
|
+
default:
|
|
251
|
+
return e(`{{${name}}}`);
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
const env = { lang: shown, labels: L, render };
|
|
255
|
+
const body = getMarkdown().render(tr.body ?? "", env);
|
|
256
|
+
const titleText = fillSiteVariables(tr.title ?? "", site);
|
|
257
|
+
const titleHtml = titleText.replace(
|
|
258
|
+
/[^[]+|\[\[([^[\]\n]+?)\]\]|\[/g,
|
|
259
|
+
(m, todo) => todo !== void 0 ? `<mark class="ec-legal__todo">${e(todo)}</mark>` : e(m)
|
|
260
|
+
);
|
|
261
|
+
const heading = opts.heading === false || !titleText ? "" : `<h1 class="ec-legal__title">${titleHtml}</h1>
|
|
262
|
+
`;
|
|
263
|
+
const version = opts.version ? ` data-version="${e(opts.version)}"` : "";
|
|
264
|
+
return {
|
|
265
|
+
lang: shown,
|
|
266
|
+
title: titleText.replace(PLACEHOLDER_RE, "$1"),
|
|
267
|
+
html: `<div class="ec-legal" lang="${e(shown)}"${version}>
|
|
268
|
+
${heading}${body}</div>`
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// src/templates/cookie.ts
|
|
273
|
+
var cookie = {
|
|
274
|
+
it: {
|
|
275
|
+
title: "Cookie policy",
|
|
276
|
+
body: `[[BOZZA: questo testo \xE8 un modello generico, non \xE8 una consulenza legale. Completa i campi evidenziati, verifica che l\u2019elenco dei cookie corrisponda a quello che il sito usa davvero e fallo controllare da un professionista prima di pubblicarlo. Poi elimina questa riga.]]
|
|
277
|
+
|
|
278
|
+
Questa pagina spiega quali cookie e strumenti simili usa {{site.domain}}, a cosa servono e come puoi gestire il tuo consenso.
|
|
279
|
+
|
|
280
|
+
## Cosa sono i cookie
|
|
281
|
+
|
|
282
|
+
I cookie sono piccoli file di testo che un sito salva nel tuo browser per ricordare informazioni sulla tua visita. Strumenti simili, come il local storage, i pixel e gli script di terze parti, funzionano in modo analogo: in questa pagina li chiamiamo tutti \xABcookie\xBB.
|
|
283
|
+
|
|
284
|
+
I cookie possono essere **di prima parte**, se li imposta questo sito, o **di terze parti**, se li impostano altri servizi, ad esempio un video incorporato o uno strumento di statistica.
|
|
285
|
+
|
|
286
|
+
## Come li usiamo
|
|
287
|
+
|
|
288
|
+
Secondo l\u2019art. 122 del Codice privacy e le linee guida del Garante per la protezione dei dati personali del 10 giugno 2021:
|
|
289
|
+
|
|
290
|
+
- i **cookie tecnici** (necessari) sono usati senza il tuo consenso, perch\xE9 servono a far funzionare il sito e a ricordare le tue scelte;
|
|
291
|
+
- tutti gli **altri cookie** sono attivati solo dopo il tuo consenso. Fino ad allora sono bloccati.
|
|
292
|
+
|
|
293
|
+
Chiudere il banner con la X equivale a rifiutare i cookie non necessari.
|
|
294
|
+
|
|
295
|
+
## Categorie
|
|
296
|
+
|
|
297
|
+
- **Necessari**: servono al funzionamento del sito, ad esempio per la sessione e per ricordare la tua scelta sui cookie. Non si possono disattivare.
|
|
298
|
+
- **Funzionalit\xE0**: abilitano funzioni aggiuntive come la chat di assistenza o le preferenze salvate.
|
|
299
|
+
- **Esperienza**: permettono di mostrare contenuti di terze parti incorporati, come video e mappe.
|
|
300
|
+
- **Misurazione**: ci aiutano a capire come viene usato il sito, con statistiche sulle visite.
|
|
301
|
+
- **Marketing**: servono a misurare le campagne pubblicitarie e a mostrarti annunci pi\xF9 pertinenti, anche su altri siti.
|
|
302
|
+
|
|
303
|
+
Il sito usa solo le categorie elencate nella tabella qui sotto.
|
|
304
|
+
|
|
305
|
+
## Cookie usati su questo sito
|
|
306
|
+
|
|
307
|
+
{{cookie-table}}
|
|
308
|
+
|
|
309
|
+
I cookie di terze parti sono gestiti dai rispettivi fornitori: per sapere come trattano i dati consulta le loro informative, collegate nella tabella.
|
|
310
|
+
|
|
311
|
+
## Come gestire il consenso
|
|
312
|
+
|
|
313
|
+
Alla prima visita un banner ti chiede di scegliere: puoi accettare tutti i cookie, rifiutarli tutti o scegliere categoria per categoria. Ricordiamo la tua scelta per [[Durata del consenso, ad esempio 6 mesi]], poi te la chiediamo di nuovo. Te la chiediamo di nuovo anche se cambiano in modo rilevante i cookie che usiamo.
|
|
314
|
+
|
|
315
|
+
Puoi cambiare idea in qualsiasi momento: {{preferences-link}}. Quando revochi il consenso, i cookie della categoria vengono cancellati, dove tecnicamente possibile.
|
|
316
|
+
|
|
317
|
+
## Impostazioni del browser
|
|
318
|
+
|
|
319
|
+
Puoi anche bloccare o cancellare i cookie dalle impostazioni del browser. Bloccare i cookie necessari pu\xF2 impedire ad alcune parti del sito di funzionare.
|
|
320
|
+
|
|
321
|
+
- [Google Chrome](https://support.google.com/chrome/answer/95647)
|
|
322
|
+
- [Mozilla Firefox](https://support.mozilla.org/kb/clear-cookies-and-site-data-firefox)
|
|
323
|
+
- [Apple Safari](https://support.apple.com/guide/safari/manage-cookies-sfri11471/mac)
|
|
324
|
+
- [Microsoft Edge](https://support.microsoft.com/microsoft-edge/delete-cookies-in-microsoft-edge-63947406-40ac-c3b8-57b9-2a946a29ae09)
|
|
325
|
+
|
|
326
|
+
## Titolare del trattamento
|
|
327
|
+
|
|
328
|
+
Il titolare del trattamento \xE8 [[Ragione sociale o nome e cognome del titolare]], [[Indirizzo completo]], [[Indirizzo email di contatto]]. Per sapere come trattiamo i dati personali e come esercitare i tuoi diritti leggi l\u2019informativa sulla privacy: [[Link all\u2019informativa sulla privacy]].
|
|
329
|
+
|
|
330
|
+
## Ultimo aggiornamento
|
|
331
|
+
|
|
332
|
+
{{last-updated}}
|
|
333
|
+
`
|
|
334
|
+
},
|
|
335
|
+
en: {
|
|
336
|
+
title: "Cookie policy",
|
|
337
|
+
body: `[[DRAFT: this text is a generic template, not legal advice. Fill in the highlighted fields, check that the list of cookies matches what the site really uses and have it reviewed by a professional before publishing it. Then delete this line.]]
|
|
338
|
+
|
|
339
|
+
This page explains which cookies and similar technologies {{site.domain}} uses, what they are for and how you can manage your consent.
|
|
340
|
+
|
|
341
|
+
## What cookies are
|
|
342
|
+
|
|
343
|
+
Cookies are small text files that a site stores in your browser to remember information about your visit. Similar technologies, such as local storage, pixels and third-party scripts, work in a similar way: on this page we call them all \u201Ccookies\u201D.
|
|
344
|
+
|
|
345
|
+
Cookies can be **first-party**, when this site sets them, or **third-party**, when other services set them, for example an embedded video or an analytics tool.
|
|
346
|
+
|
|
347
|
+
## How we use them
|
|
348
|
+
|
|
349
|
+
In line with the ePrivacy Directive and, in Italy, the guidelines of the Italian Data Protection Authority (Garante) of 10 June 2021:
|
|
350
|
+
|
|
351
|
+
- **technical** (necessary) cookies are used without your consent, because the site needs them to work and to remember your choices;
|
|
352
|
+
- all **other cookies** are turned on only after you consent. Until then they are blocked.
|
|
353
|
+
|
|
354
|
+
Closing the banner with the X counts as rejecting non-essential cookies.
|
|
355
|
+
|
|
356
|
+
## Categories
|
|
357
|
+
|
|
358
|
+
- **Necessary**: required for the site to work, for example for the session and to remember your cookie choice. They cannot be turned off.
|
|
359
|
+
- **Functionality**: enable extra features such as the support chat or saved preferences.
|
|
360
|
+
- **Experience**: allow embedded third-party content such as videos and maps.
|
|
361
|
+
- **Measurement**: help us understand how the site is used, through visit statistics.
|
|
362
|
+
- **Marketing**: measure advertising campaigns and show you more relevant ads, including on other sites.
|
|
363
|
+
|
|
364
|
+
The site uses only the categories listed in the table below.
|
|
365
|
+
|
|
366
|
+
## Cookies used on this site
|
|
367
|
+
|
|
368
|
+
{{cookie-table}}
|
|
369
|
+
|
|
370
|
+
Third-party cookies are managed by their providers: to learn how they process data, read their policies, linked in the table.
|
|
371
|
+
|
|
372
|
+
## Managing your consent
|
|
373
|
+
|
|
374
|
+
On your first visit a banner asks you to choose: you can accept all cookies, reject them all or choose category by category. We remember your choice for [[Consent duration, for example 6 months]], then we ask again. We also ask again if the cookies we use change significantly.
|
|
375
|
+
|
|
376
|
+
You can change your mind at any time: {{preferences-link}}. When you withdraw consent, the cookies of that category are deleted where technically possible.
|
|
377
|
+
|
|
378
|
+
## Browser settings
|
|
379
|
+
|
|
380
|
+
You can also block or delete cookies in your browser settings. Blocking necessary cookies may stop parts of the site from working.
|
|
381
|
+
|
|
382
|
+
- [Google Chrome](https://support.google.com/chrome/answer/95647)
|
|
383
|
+
- [Mozilla Firefox](https://support.mozilla.org/kb/clear-cookies-and-site-data-firefox)
|
|
384
|
+
- [Apple Safari](https://support.apple.com/guide/safari/manage-cookies-sfri11471/mac)
|
|
385
|
+
- [Microsoft Edge](https://support.microsoft.com/microsoft-edge/delete-cookies-in-microsoft-edge-63947406-40ac-c3b8-57b9-2a946a29ae09)
|
|
386
|
+
|
|
387
|
+
## Data controller
|
|
388
|
+
|
|
389
|
+
The data controller is [[Company name or full name of the controller]], [[Full address]], [[Contact email]]. To learn how we process personal data and how to exercise your rights, read the privacy policy: [[Link to the privacy policy]].
|
|
390
|
+
|
|
391
|
+
## Last updated
|
|
392
|
+
|
|
393
|
+
{{last-updated}}
|
|
394
|
+
`
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
// src/templates/privacy.ts
|
|
399
|
+
var privacy = {
|
|
400
|
+
it: {
|
|
401
|
+
title: "Informativa sulla privacy",
|
|
402
|
+
body: `[[BOZZA: questo testo \xE8 un modello generico, non \xE8 una consulenza legale. Completa i campi evidenziati, adattalo a come tratti davvero i dati e fallo verificare da un professionista prima di pubblicarlo. Poi elimina questa riga.]]
|
|
403
|
+
|
|
404
|
+
Questa informativa spiega come {{site.name}} tratta i dati personali di chi visita {{site.domain}} e di chi usa i suoi servizi, ai sensi degli articoli 13 e 14 del Regolamento (UE) 2016/679 (\xABGDPR\xBB) e del Codice in materia di protezione dei dati personali (d.lgs. 196/2003).
|
|
405
|
+
|
|
406
|
+
## 1. Titolare del trattamento
|
|
407
|
+
|
|
408
|
+
Il titolare del trattamento \xE8 [[Ragione sociale o nome e cognome del titolare]], con sede in [[Indirizzo completo]], P. IVA / C.F. [[Partita IVA o codice fiscale]] (di seguito \xABTitolare\xBB).
|
|
409
|
+
|
|
410
|
+
Puoi contattare il Titolare scrivendo a [[Indirizzo email per la privacy]].
|
|
411
|
+
|
|
412
|
+
[[Se hai nominato un Responsabile della protezione dei dati (DPO), indica qui il nome e il contatto; altrimenti elimina questa riga.]]
|
|
413
|
+
|
|
414
|
+
## 2. Quali dati trattiamo
|
|
415
|
+
|
|
416
|
+
- **Dati di navigazione.** I sistemi che fanno funzionare il sito raccolgono automaticamente alcuni dati, come l\u2019indirizzo IP, il tipo di browser e di dispositivo, le pagine richieste, la data e l\u2019ora della richiesta. Servono a far funzionare il sito e a proteggerlo.
|
|
417
|
+
- **Dati che ci fornisci.** Quando ci scrivi, compili un modulo, ti registri o acquisti, trattiamo i dati che inserisci, ad esempio nome, cognome, indirizzo email e [[Altri dati raccolti, ad esempio telefono, indirizzo di fatturazione]].
|
|
418
|
+
- **Cookie e strumenti simili.** Li descriviamo nella cookie policy: [[Link alla cookie policy]].
|
|
419
|
+
- [[Altre categorie di dati che tratti, ad esempio dati di pagamento o dati dell\u2019account. Elimina questa voce se non serve.]]
|
|
420
|
+
|
|
421
|
+
[[Conferma o modifica:]] Non chiediamo dati appartenenti a categorie particolari (art. 9 GDPR), come dati sulla salute. Ti chiediamo di non inviarceli.
|
|
422
|
+
|
|
423
|
+
## 3. Finalit\xE0 e basi giuridiche
|
|
424
|
+
|
|
425
|
+
| Finalit\xE0 | Base giuridica (art. 6 GDPR) |
|
|
426
|
+
| --- | --- |
|
|
427
|
+
| Rispondere alle tue richieste di contatto | Misure precontrattuali richieste da te (art. 6.1.b) o nostro legittimo interesse a rispondere (art. 6.1.f) |
|
|
428
|
+
| Fornire il servizio o il prodotto richiesto e gestire il contratto | Esecuzione di un contratto (art. 6.1.b) |
|
|
429
|
+
| Adempiere agli obblighi di legge, ad esempio fiscali e contabili | Obbligo legale (art. 6.1.c) |
|
|
430
|
+
| Garantire la sicurezza del sito e prevenire abusi | Legittimo interesse (art. 6.1.f) |
|
|
431
|
+
| Statistiche, contenuti incorporati e marketing tramite cookie non tecnici | Consenso (art. 6.1.a), che puoi revocare in ogni momento |
|
|
432
|
+
| [[Altra finalit\xE0, ad esempio l\u2019invio della newsletter]] | [[Base giuridica, ad esempio il consenso (art. 6.1.a)]] |
|
|
433
|
+
|
|
434
|
+
Quando la base giuridica \xE8 il legittimo interesse, puoi opporti al trattamento in qualsiasi momento (vedi la sezione \xABI tuoi diritti\xBB).
|
|
435
|
+
|
|
436
|
+
## 4. Natura del conferimento
|
|
437
|
+
|
|
438
|
+
I dati di navigazione sono necessari per usare il sito. Il conferimento degli altri dati \xE8 facoltativo, ma senza i dati richiesti come obbligatori non possiamo rispondere alla tua richiesta o fornire il servizio.
|
|
439
|
+
|
|
440
|
+
## 5. Modalit\xE0 del trattamento e conservazione
|
|
441
|
+
|
|
442
|
+
Trattiamo i dati con strumenti elettronici e con misure tecniche e organizzative adeguate a proteggerli. Li conserviamo solo per il tempo necessario:
|
|
443
|
+
|
|
444
|
+
- richieste di contatto: [[Periodo di conservazione, ad esempio 12 mesi dall\u2019ultima comunicazione]];
|
|
445
|
+
- dati relativi al contratto e alla fatturazione: per la durata del contratto e poi per il tempo previsto dalla legge per gli obblighi fiscali e contabili ([[Periodo, di norma 10 anni]]);
|
|
446
|
+
- dati di navigazione (log tecnici): [[Periodo di conservazione dei log]];
|
|
447
|
+
- prova del consenso ai cookie: [[Periodo di conservazione della prova del consenso]];
|
|
448
|
+
- cookie: per la durata indicata nella cookie policy.
|
|
449
|
+
|
|
450
|
+
Al termine li cancelliamo o li rendiamo anonimi.
|
|
451
|
+
|
|
452
|
+
## 6. Destinatari dei dati
|
|
453
|
+
|
|
454
|
+
I dati possono essere comunicati a:
|
|
455
|
+
|
|
456
|
+
- fornitori che li trattano per nostro conto come responsabili del trattamento (art. 28 GDPR), ad esempio i servizi di hosting, di posta elettronica e [[Altri fornitori]];
|
|
457
|
+
- professionisti e consulenti che ci assistono, ad esempio [[Commercialista, consulente legale]];
|
|
458
|
+
- autorit\xE0 pubbliche, quando la legge lo richiede.
|
|
459
|
+
|
|
460
|
+
I dati non vengono diffusi. L\u2019elenco aggiornato dei responsabili \xE8 disponibile su richiesta.
|
|
461
|
+
|
|
462
|
+
### Servizi di terze parti usati dal sito
|
|
463
|
+
|
|
464
|
+
{{services-list}}
|
|
465
|
+
|
|
466
|
+
## 7. Trasferimento dei dati fuori dallo Spazio economico europeo
|
|
467
|
+
|
|
468
|
+
Alcuni fornitori possono trattare dati al di fuori dello Spazio economico europeo (SEE). In questi casi il trasferimento avviene solo sulla base di una decisione di adeguatezza della Commissione europea (art. 45 GDPR), come l\u2019EU-US Data Privacy Framework per le societ\xE0 statunitensi certificate, oppure con garanzie adeguate come le clausole contrattuali standard approvate dalla Commissione (art. 46 GDPR). I paesi e le garanzie, quando noti, sono indicati nell\u2019elenco dei servizi qui sopra. Puoi chiedere una copia delle garanzie scrivendo a [[Indirizzo email per la privacy]].
|
|
469
|
+
|
|
470
|
+
## 8. I tuoi diritti
|
|
471
|
+
|
|
472
|
+
In qualsiasi momento puoi esercitare i diritti previsti dagli articoli 15\u201322 del GDPR:
|
|
473
|
+
|
|
474
|
+
- **accesso** ai tuoi dati e alle informazioni sul trattamento (art. 15);
|
|
475
|
+
- **rettifica** dei dati inesatti o incompleti (art. 16);
|
|
476
|
+
- **cancellazione** dei dati (art. 17);
|
|
477
|
+
- **limitazione** del trattamento (art. 18);
|
|
478
|
+
- **portabilit\xE0** dei dati che ci hai fornito, in un formato strutturato e leggibile da dispositivo automatico (art. 20);
|
|
479
|
+
- **opposizione** al trattamento basato sul legittimo interesse e, sempre, al marketing diretto (art. 21);
|
|
480
|
+
- non essere sottoposto a **decisioni basate unicamente su un trattamento automatizzato** che producono effetti giuridici o incidono in modo analogo significativamente sulla tua persona (art. 22).
|
|
481
|
+
|
|
482
|
+
Quando il trattamento si basa sul consenso, puoi **revocarlo** in qualsiasi momento, senza pregiudicare la liceit\xE0 del trattamento svolto prima della revoca (art. 7.3). Per i cookie: {{preferences-link}}.
|
|
483
|
+
|
|
484
|
+
Per esercitare i diritti scrivi a [[Indirizzo email per la privacy]]. Rispondiamo senza ingiustificato ritardo e comunque entro un mese, prorogabile di due mesi nei casi previsti dall\u2019art. 12.3 GDPR.
|
|
485
|
+
|
|
486
|
+
[[Conferma o modifica: il Titolare non adotta processi decisionali automatizzati, compresa la profilazione, che producano effetti giuridici sugli interessati.]]
|
|
487
|
+
|
|
488
|
+
## 9. Reclamo all\u2019autorit\xE0 di controllo
|
|
489
|
+
|
|
490
|
+
Se ritieni che il trattamento violi il GDPR, hai il diritto di proporre reclamo al Garante per la protezione dei dati personali (www.garanteprivacy.it) o all\u2019autorit\xE0 di controllo dello Stato membro in cui risiedi, lavori o in cui \xE8 avvenuta la presunta violazione (art. 77 GDPR).
|
|
491
|
+
|
|
492
|
+
## 10. Modifiche a questa informativa
|
|
493
|
+
|
|
494
|
+
Possiamo aggiornare questa informativa, ad esempio per cambiamenti normativi o dei servizi che usiamo. La versione in vigore \xE8 sempre pubblicata su questa pagina, con la data dell\u2019ultimo aggiornamento.
|
|
495
|
+
|
|
496
|
+
## 11. Contatti
|
|
497
|
+
|
|
498
|
+
[[Ragione sociale o nome e cognome del titolare]] \xB7 [[Indirizzo completo]] \xB7 [[Indirizzo email per la privacy]]
|
|
499
|
+
|
|
500
|
+
{{last-updated}}
|
|
501
|
+
`
|
|
502
|
+
},
|
|
503
|
+
en: {
|
|
504
|
+
title: "Privacy policy",
|
|
505
|
+
body: `[[DRAFT: this text is a generic template, not legal advice. Fill in the highlighted fields, adapt it to how you actually process data and have it reviewed by a professional before publishing it. Then delete this line.]]
|
|
506
|
+
|
|
507
|
+
This policy explains how {{site.name}} processes the personal data of people who visit {{site.domain}} and use its services, under Articles 13 and 14 of Regulation (EU) 2016/679 (\u201CGDPR\u201D).
|
|
508
|
+
|
|
509
|
+
## 1. Data controller
|
|
510
|
+
|
|
511
|
+
The data controller is [[Company name or full name of the controller]], located at [[Full address]], VAT / tax number [[VAT or tax number]] (the \u201CController\u201D).
|
|
512
|
+
|
|
513
|
+
You can contact the Controller at [[Privacy contact email]].
|
|
514
|
+
|
|
515
|
+
[[If you have appointed a Data Protection Officer (DPO), give their name and contact here; otherwise delete this line.]]
|
|
516
|
+
|
|
517
|
+
## 2. Data we process
|
|
518
|
+
|
|
519
|
+
- **Browsing data.** The systems that run the site automatically collect some data, such as the IP address, the type of browser and device, the pages requested, and the date and time of the request. We need it to run and protect the site.
|
|
520
|
+
- **Data you give us.** When you write to us, fill in a form, sign up or buy, we process the data you enter, for example your name, email address and [[Other data collected, for example phone number, billing address]].
|
|
521
|
+
- **Cookies and similar technologies.** They are described in the cookie policy: [[Link to the cookie policy]].
|
|
522
|
+
- [[Other categories of data you process, for example payment or account data. Delete this item if not needed.]]
|
|
523
|
+
|
|
524
|
+
[[Confirm or change:]] We do not ask for special categories of data (Article 9 GDPR), such as health data. Please do not send them to us.
|
|
525
|
+
|
|
526
|
+
## 3. Purposes and legal bases
|
|
527
|
+
|
|
528
|
+
| Purpose | Legal basis (Article 6 GDPR) |
|
|
529
|
+
| --- | --- |
|
|
530
|
+
| Replying to your contact requests | Pre-contractual steps you asked for (Art. 6(1)(b)) or our legitimate interest in replying (Art. 6(1)(f)) |
|
|
531
|
+
| Providing the service or product you asked for and managing the contract | Performance of a contract (Art. 6(1)(b)) |
|
|
532
|
+
| Meeting legal obligations, for example tax and accounting | Legal obligation (Art. 6(1)(c)) |
|
|
533
|
+
| Keeping the site secure and preventing abuse | Legitimate interest (Art. 6(1)(f)) |
|
|
534
|
+
| Statistics, embedded content and marketing through non-essential cookies | Consent (Art. 6(1)(a)), which you can withdraw at any time |
|
|
535
|
+
| [[Other purpose, for example sending the newsletter]] | [[Legal basis, for example consent (Art. 6(1)(a))]] |
|
|
536
|
+
|
|
537
|
+
Where the legal basis is legitimate interest, you can object to the processing at any time (see \u201CYour rights\u201D).
|
|
538
|
+
|
|
539
|
+
## 4. Whether you must provide data
|
|
540
|
+
|
|
541
|
+
Browsing data is needed to use the site. Providing other data is optional, but without the data marked as required we cannot answer your request or provide the service.
|
|
542
|
+
|
|
543
|
+
## 5. How we process and keep data
|
|
544
|
+
|
|
545
|
+
We process data electronically, with technical and organisational measures appropriate to protect it. We keep it only as long as needed:
|
|
546
|
+
|
|
547
|
+
- contact requests: [[Retention period, for example 12 months after the last message]];
|
|
548
|
+
- contract and billing data: for the duration of the contract, then for the period the law requires for tax and accounting obligations ([[Period, usually 10 years in Italy]]);
|
|
549
|
+
- browsing data (technical logs): [[Log retention period]];
|
|
550
|
+
- proof of cookie consent: [[Retention period of the consent proof]];
|
|
551
|
+
- cookies: for the duration shown in the cookie policy.
|
|
552
|
+
|
|
553
|
+
Afterwards we delete or anonymise it.
|
|
554
|
+
|
|
555
|
+
## 6. Recipients
|
|
556
|
+
|
|
557
|
+
Data may be shared with:
|
|
558
|
+
|
|
559
|
+
- providers that process it on our behalf as processors (Article 28 GDPR), for example hosting, email and [[Other providers]];
|
|
560
|
+
- professionals and advisers who assist us, for example [[Accountant, legal adviser]];
|
|
561
|
+
- public authorities, when the law requires it.
|
|
562
|
+
|
|
563
|
+
Data is not made public. The current list of processors is available on request.
|
|
564
|
+
|
|
565
|
+
### Third-party services used by the site
|
|
566
|
+
|
|
567
|
+
{{services-list}}
|
|
568
|
+
|
|
569
|
+
## 7. Transfers outside the European Economic Area
|
|
570
|
+
|
|
571
|
+
Some providers may process data outside the European Economic Area (EEA). In that case the transfer takes place only on the basis of a European Commission adequacy decision (Article 45 GDPR), such as the EU-US Data Privacy Framework for certified US companies, or with appropriate safeguards such as the standard contractual clauses approved by the Commission (Article 46 GDPR). Countries and safeguards, when known, are listed with the services above. You can ask for a copy of the safeguards at [[Privacy contact email]].
|
|
572
|
+
|
|
573
|
+
## 8. Your rights
|
|
574
|
+
|
|
575
|
+
At any time you can exercise the rights in Articles 15\u201322 GDPR:
|
|
576
|
+
|
|
577
|
+
- **access** to your data and to information about the processing (Art. 15);
|
|
578
|
+
- **rectification** of inaccurate or incomplete data (Art. 16);
|
|
579
|
+
- **erasure** of your data (Art. 17);
|
|
580
|
+
- **restriction** of processing (Art. 18);
|
|
581
|
+
- **portability** of the data you gave us, in a structured, machine-readable format (Art. 20);
|
|
582
|
+
- **objection** to processing based on legitimate interest and, always, to direct marketing (Art. 21);
|
|
583
|
+
- not to be subject to **decisions based solely on automated processing** that produce legal effects concerning you or similarly significantly affect you (Art. 22).
|
|
584
|
+
|
|
585
|
+
Where processing is based on consent, you can **withdraw** it at any time, without affecting the lawfulness of processing before the withdrawal (Art. 7(3)). For cookies: {{preferences-link}}.
|
|
586
|
+
|
|
587
|
+
To exercise your rights, write to [[Privacy contact email]]. We reply without undue delay and in any case within one month, which may be extended by two months in the cases set out in Article 12(3) GDPR.
|
|
588
|
+
|
|
589
|
+
[[Confirm or change: the Controller does not use automated decision-making, including profiling, that produces legal effects on data subjects.]]
|
|
590
|
+
|
|
591
|
+
## 9. Complaints to a supervisory authority
|
|
592
|
+
|
|
593
|
+
If you believe the processing infringes the GDPR, you have the right to lodge a complaint with the Italian Data Protection Authority (Garante per la protezione dei dati personali, www.garanteprivacy.it) or with the supervisory authority of the Member State where you live, work or where the alleged infringement took place (Article 77 GDPR).
|
|
594
|
+
|
|
595
|
+
## 10. Changes to this policy
|
|
596
|
+
|
|
597
|
+
We may update this policy, for example when the law or the services we use change. The current version is always published on this page, with the date of the last update.
|
|
598
|
+
|
|
599
|
+
## 11. Contact
|
|
600
|
+
|
|
601
|
+
[[Company name or full name of the controller]] \xB7 [[Full address]] \xB7 [[Privacy contact email]]
|
|
602
|
+
|
|
603
|
+
{{last-updated}}
|
|
604
|
+
`
|
|
605
|
+
}
|
|
606
|
+
};
|
|
607
|
+
|
|
608
|
+
// src/templates/terms.ts
|
|
609
|
+
var terms = {
|
|
610
|
+
it: {
|
|
611
|
+
title: "Termini e condizioni",
|
|
612
|
+
body: `[[BOZZA: questo testo \xE8 uno schema generico, non \xE8 una consulenza legale. Termini e condizioni dipendono molto dall\u2019attivit\xE0: completa i campi evidenziati, elimina le sezioni che non ti riguardano e fallo verificare da un professionista prima di pubblicarlo. Poi elimina questa riga.]]
|
|
613
|
+
|
|
614
|
+
## 1. Oggetto
|
|
615
|
+
|
|
616
|
+
Questi termini regolano l\u2019uso del sito {{site.domain}} e dei servizi offerti da {{site.name}} (di seguito \xABServizio\xBB). Usando il Servizio accetti questi termini. Se non li accetti, non usare il Servizio.
|
|
617
|
+
|
|
618
|
+
## 2. Chi siamo
|
|
619
|
+
|
|
620
|
+
Il Servizio \xE8 gestito da [[Ragione sociale o nome e cognome]], con sede in [[Indirizzo completo]], P. IVA [[Partita IVA]], email [[Indirizzo email di contatto]], [[PEC, se disponibile]].
|
|
621
|
+
|
|
622
|
+
## 3. Descrizione del Servizio
|
|
623
|
+
|
|
624
|
+
[[Descrivi in modo semplice cosa offre il sito o il servizio, a chi si rivolge e se \xE8 gratuito o a pagamento.]]
|
|
625
|
+
|
|
626
|
+
## 4. Uso consentito
|
|
627
|
+
|
|
628
|
+
Ti impegni a usare il Servizio nel rispetto della legge e di questi termini. In particolare non puoi:
|
|
629
|
+
|
|
630
|
+
- usarlo per attivit\xE0 illecite o per violare diritti altrui;
|
|
631
|
+
- tentare di accedere senza autorizzazione a sistemi, account o dati;
|
|
632
|
+
- comprometterne il funzionamento, ad esempio con attacchi automatizzati o carichi eccessivi;
|
|
633
|
+
- [[Altri divieti specifici del tuo Servizio]].
|
|
634
|
+
|
|
635
|
+
## 5. Account
|
|
636
|
+
|
|
637
|
+
[[Se il Servizio prevede un account: requisiti per registrarsi (ad esempio l\u2019et\xE0 minima), responsabilit\xE0 per la custodia delle credenziali, modalit\xE0 di chiusura dell\u2019account. Altrimenti elimina questa sezione.]]
|
|
638
|
+
|
|
639
|
+
## 6. Prezzi e pagamenti
|
|
640
|
+
|
|
641
|
+
[[Se il Servizio \xE8 a pagamento: prezzi (IVA inclusa o esclusa), modalit\xE0 di pagamento, rinnovi e disdetta, fatturazione. Altrimenti elimina questa sezione.]]
|
|
642
|
+
|
|
643
|
+
## 7. Diritto di recesso
|
|
644
|
+
|
|
645
|
+
[[Se vendi a consumatori a distanza: indica le condizioni del diritto di recesso previsto dal Codice del consumo (d.lgs. 206/2005), di regola 14 giorni, e le eventuali esclusioni. Altrimenti elimina questa sezione.]]
|
|
646
|
+
|
|
647
|
+
## 8. Propriet\xE0 intellettuale
|
|
648
|
+
|
|
649
|
+
Testi, immagini, marchi, loghi, software e altri contenuti del Servizio appartengono a [[Ragione sociale o nome e cognome]] o ai rispettivi titolari e sono protetti dalla legge. Non puoi copiarli, modificarli o distribuirli senza autorizzazione scritta, salvo i casi consentiti dalla legge.
|
|
650
|
+
|
|
651
|
+
## 9. Contenuti degli utenti
|
|
652
|
+
|
|
653
|
+
[[Se gli utenti possono pubblicare contenuti: chi ne resta titolare, quale licenza ci concedono, regole sui contenuti vietati e come li rimuoviamo. Altrimenti elimina questa sezione.]]
|
|
654
|
+
|
|
655
|
+
## 10. Link a siti di terzi
|
|
656
|
+
|
|
657
|
+
Il Servizio pu\xF2 contenere link a siti di terzi. Non controlliamo questi siti e non siamo responsabili dei loro contenuti o delle loro pratiche sulla privacy.
|
|
658
|
+
|
|
659
|
+
## 11. Disponibilit\xE0 e modifiche del Servizio
|
|
660
|
+
|
|
661
|
+
Facciamo il possibile perch\xE9 il Servizio sia disponibile e funzioni correttamente, ma potrebbe essere interrotto per manutenzione, aggiornamenti o cause indipendenti dalla nostra volont\xE0. Possiamo modificare o sospendere il Servizio, dandone [[Modalit\xE0 e tempi di preavviso]] quando la modifica ti riguarda in modo rilevante.
|
|
662
|
+
|
|
663
|
+
## 12. Responsabilit\xE0
|
|
664
|
+
|
|
665
|
+
Nei limiti consentiti dalla legge, non siamo responsabili per danni indiretti derivanti dall\u2019uso o dall\u2019impossibilit\xE0 di usare il Servizio. Nulla in questi termini esclude o limita la responsabilit\xE0 che per legge non pu\xF2 essere esclusa o limitata, n\xE9 i diritti che la legge riconosce ai consumatori.
|
|
666
|
+
|
|
667
|
+
[[Eventuali limitazioni ulteriori, da verificare con un professionista.]]
|
|
668
|
+
|
|
669
|
+
## 13. Privacy
|
|
670
|
+
|
|
671
|
+
Trattiamo i dati personali come descritto nell\u2019informativa sulla privacy: [[Link all\u2019informativa sulla privacy]].
|
|
672
|
+
|
|
673
|
+
## 14. Modifiche ai termini
|
|
674
|
+
|
|
675
|
+
Possiamo aggiornare questi termini. La versione in vigore \xE8 sempre pubblicata su questa pagina, con la data dell\u2019ultimo aggiornamento. Se le modifiche sono rilevanti te lo comunicheremo [[Come: ad esempio via email o con un avviso sul sito]].
|
|
676
|
+
|
|
677
|
+
## 15. Legge applicabile e foro competente
|
|
678
|
+
|
|
679
|
+
Questi termini sono regolati dalla [[Legge applicabile, ad esempio la legge italiana]]. Se sei un consumatore, per le controversie \xE8 competente il giudice del luogo in cui risiedi o hai il domicilio. Negli altri casi \xE8 competente in via esclusiva il foro di [[Citt\xE0]].
|
|
680
|
+
|
|
681
|
+
## 16. Contatti
|
|
682
|
+
|
|
683
|
+
Per domande su questi termini scrivi a [[Indirizzo email di contatto]].
|
|
684
|
+
|
|
685
|
+
{{last-updated}}
|
|
686
|
+
`
|
|
687
|
+
},
|
|
688
|
+
en: {
|
|
689
|
+
title: "Terms and conditions",
|
|
690
|
+
body: `[[DRAFT: this text is a generic skeleton, not legal advice. Terms depend heavily on the business: fill in the highlighted fields, delete the sections that do not apply and have it reviewed by a professional before publishing it. Then delete this line.]]
|
|
691
|
+
|
|
692
|
+
## 1. Scope
|
|
693
|
+
|
|
694
|
+
These terms govern the use of the site {{site.domain}} and of the services offered by {{site.name}} (the \u201CService\u201D). By using the Service you accept these terms. If you do not accept them, do not use the Service.
|
|
695
|
+
|
|
696
|
+
## 2. Who we are
|
|
697
|
+
|
|
698
|
+
The Service is run by [[Company name or full name]], located at [[Full address]], VAT number [[VAT number]], email [[Contact email]].
|
|
699
|
+
|
|
700
|
+
## 3. The Service
|
|
701
|
+
|
|
702
|
+
[[Describe in plain words what the site or service offers, who it is for and whether it is free or paid.]]
|
|
703
|
+
|
|
704
|
+
## 4. Acceptable use
|
|
705
|
+
|
|
706
|
+
You agree to use the Service lawfully and in line with these terms. In particular you must not:
|
|
707
|
+
|
|
708
|
+
- use it for unlawful activities or to infringe the rights of others;
|
|
709
|
+
- try to access systems, accounts or data without authorisation;
|
|
710
|
+
- disrupt it, for example with automated attacks or excessive load;
|
|
711
|
+
- [[Other restrictions specific to your Service]].
|
|
712
|
+
|
|
713
|
+
## 5. Accounts
|
|
714
|
+
|
|
715
|
+
[[If the Service has accounts: sign-up requirements (for example a minimum age), responsibility for keeping credentials safe, how to close the account. Otherwise delete this section.]]
|
|
716
|
+
|
|
717
|
+
## 6. Prices and payments
|
|
718
|
+
|
|
719
|
+
[[If the Service is paid: prices (including or excluding VAT), payment methods, renewals and cancellation, invoicing. Otherwise delete this section.]]
|
|
720
|
+
|
|
721
|
+
## 7. Right of withdrawal
|
|
722
|
+
|
|
723
|
+
[[If you sell to consumers at a distance: state the conditions of the statutory right of withdrawal (in the EU, usually 14 days) and any exceptions. Otherwise delete this section.]]
|
|
724
|
+
|
|
725
|
+
## 8. Intellectual property
|
|
726
|
+
|
|
727
|
+
Texts, images, trademarks, logos, software and other content of the Service belong to [[Company name or full name]] or to their respective owners and are protected by law. You may not copy, modify or distribute them without written permission, except where the law allows it.
|
|
728
|
+
|
|
729
|
+
## 9. User content
|
|
730
|
+
|
|
731
|
+
[[If users can publish content: who keeps ownership, which licence they grant you, rules on prohibited content and how you remove it. Otherwise delete this section.]]
|
|
732
|
+
|
|
733
|
+
## 10. Third-party links
|
|
734
|
+
|
|
735
|
+
The Service may link to third-party sites. We do not control those sites and are not responsible for their content or privacy practices.
|
|
736
|
+
|
|
737
|
+
## 11. Availability and changes to the Service
|
|
738
|
+
|
|
739
|
+
We do our best to keep the Service available and working, but it may be interrupted for maintenance, updates or causes beyond our control. We may change or suspend the Service, giving [[Notice period and how]] when a change affects you significantly.
|
|
740
|
+
|
|
741
|
+
## 12. Liability
|
|
742
|
+
|
|
743
|
+
To the extent permitted by law, we are not liable for indirect damages arising from the use of, or the inability to use, the Service. Nothing in these terms excludes or limits any liability that cannot be excluded or limited by law, or the rights the law gives to consumers.
|
|
744
|
+
|
|
745
|
+
[[Any further limitations, to be checked with a professional.]]
|
|
746
|
+
|
|
747
|
+
## 13. Privacy
|
|
748
|
+
|
|
749
|
+
We process personal data as described in the privacy policy: [[Link to the privacy policy]].
|
|
750
|
+
|
|
751
|
+
## 14. Changes to these terms
|
|
752
|
+
|
|
753
|
+
We may update these terms. The current version is always published on this page, with the date of the last update. If the changes are significant we will tell you [[How: for example by email or with a notice on the site]].
|
|
754
|
+
|
|
755
|
+
## 15. Governing law and jurisdiction
|
|
756
|
+
|
|
757
|
+
These terms are governed by [[Governing law, for example Italian law]]. If you are a consumer, the courts of the place where you live have jurisdiction, and you keep the protection of the mandatory rules of your country of residence. Otherwise the courts of [[City]] have exclusive jurisdiction.
|
|
758
|
+
|
|
759
|
+
## 16. Contact
|
|
760
|
+
|
|
761
|
+
For questions about these terms, write to [[Contact email]].
|
|
762
|
+
|
|
763
|
+
{{last-updated}}
|
|
764
|
+
`
|
|
765
|
+
}
|
|
766
|
+
};
|
|
767
|
+
|
|
768
|
+
// src/templates/index.ts
|
|
769
|
+
var LEGAL_TEMPLATES = { cookie, privacy, terms };
|
|
770
|
+
var LEGAL_TEMPLATE_LANGUAGES = ["it", "en"];
|
|
771
|
+
function legalTemplate(kind, lang, site) {
|
|
772
|
+
const base = lang.toLowerCase().split("-")[0];
|
|
773
|
+
const t = LEGAL_TEMPLATES[kind][base] ?? LEGAL_TEMPLATES[kind].en;
|
|
774
|
+
if (!site) return { ...t };
|
|
775
|
+
return { title: fillSiteVariables(t.title, site), body: fillSiteVariables(t.body, site) };
|
|
776
|
+
}
|
|
777
|
+
export {
|
|
778
|
+
LEGAL_KINDS,
|
|
779
|
+
LEGAL_LABELS,
|
|
780
|
+
LEGAL_TEMPLATES,
|
|
781
|
+
LEGAL_TEMPLATE_LANGUAGES,
|
|
782
|
+
PLACEHOLDER_RE,
|
|
783
|
+
POLICY_LABELS,
|
|
784
|
+
autoClearRules,
|
|
785
|
+
buildPolicyModel,
|
|
786
|
+
countPlaceholders,
|
|
787
|
+
escapeHtml,
|
|
788
|
+
fetchLegalDocument,
|
|
789
|
+
fillSiteVariables,
|
|
790
|
+
formatPolicyDate,
|
|
791
|
+
isLegalKind,
|
|
792
|
+
isSafeLegalUrl,
|
|
793
|
+
legalContentError,
|
|
794
|
+
legalDocumentUrl,
|
|
795
|
+
legalTemplate,
|
|
796
|
+
matchesRule,
|
|
797
|
+
pickLegalLanguage,
|
|
798
|
+
policyRows,
|
|
799
|
+
prettyCookiePattern,
|
|
800
|
+
renderLegalDocument,
|
|
801
|
+
renderPolicyHtml,
|
|
802
|
+
renderPolicyMarkdown
|
|
803
|
+
};
|
|
804
|
+
//# sourceMappingURL=index.js.map
|