discovery-media-player 0.1.172 → 0.1.173
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/package.json +7 -7
- package/server/gabarit-legal.js +40 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discovery-media-player",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.173",
|
|
4
4
|
"description": "Self-hosted document viewer: per-recipient tracked links, reading analytics, live presentation. The core knows nothing about the application hosting it — everything it borrows arrives through an injected context.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pdf-viewer",
|
|
@@ -83,22 +83,22 @@
|
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@eslint/js": "^10.0.1",
|
|
86
|
-
"@vitest/coverage-v8": "^
|
|
86
|
+
"@vitest/coverage-v8": "^5.0.2",
|
|
87
87
|
"ajv": "8.20.0",
|
|
88
88
|
"axe-core": "^4.13.0",
|
|
89
89
|
"dockerfile-ast": "0.7.1",
|
|
90
90
|
"esbuild": "^0.28.2",
|
|
91
91
|
"eslint": "^10.8.1",
|
|
92
|
-
"fast-check": "4.
|
|
93
|
-
"jsdom": "^30.
|
|
92
|
+
"fast-check": "4.10.2",
|
|
93
|
+
"jsdom": "^30.1.2",
|
|
94
94
|
"playwright-core": "^1.62.1",
|
|
95
95
|
"semver": "^7.8.5",
|
|
96
96
|
"typescript": "^5.5.4",
|
|
97
97
|
"typescript-eslint": "^8.46.4",
|
|
98
|
-
"vitest": "^
|
|
99
|
-
"yaml": "2.9.
|
|
98
|
+
"vitest": "^5.0.2",
|
|
99
|
+
"yaml": "2.9.1"
|
|
100
100
|
},
|
|
101
101
|
"dependencies": {
|
|
102
|
-
"pdfjs-dist": "6.
|
|
102
|
+
"pdfjs-dist": "6.3.289"
|
|
103
103
|
}
|
|
104
104
|
}
|
package/server/gabarit-legal.js
CHANGED
|
@@ -30,18 +30,51 @@ function legalFooter({ tracked, sansExpediteur }) {
|
|
|
30
30
|
const texte = sansExpediteur ? (L.trackingNoticeAnonymous || L.trackingNotice) : L.trackingNotice;
|
|
31
31
|
const mesure = tracked ? `<span class=lgl-note>${esc(texte)}</span>` : "";
|
|
32
32
|
if (!liens && !mesure) return "";
|
|
33
|
-
|
|
33
|
+
// ⚠️ UNE PASTILLE REPLIÉE, PLUS UNE BARRE (06/10/2026, à la demande d'un hôte). La barre noire
|
|
34
|
+
// pleine largeur recouvrait le bas de chaque page pour redire trois choses qu'on ne lit qu'une
|
|
35
|
+
// fois. Repliée, la pastille garde VISIBLE ce qui doit l'être sans geste — « Lecture mesurée »,
|
|
36
|
+
// le résumé de la mention due au lecteur — et la phrase exacte comme les liens (le code source
|
|
37
|
+
// que l'AGPL doit à l'utilisateur) restent dans la page, à un clic. Rien n'est retiré du HTML :
|
|
38
|
+
// seule la présentation change.
|
|
39
|
+
//
|
|
40
|
+
// ⚠️ `<details>`, SANS SCRIPT : la page tourne sous une CSP à nonce, et un pied qui aurait besoin
|
|
41
|
+
// de JavaScript pour s'ouvrir resterait fermé — mention comprise — le jour où son script ne
|
|
42
|
+
// passerait pas.
|
|
43
|
+
//
|
|
44
|
+
// ⚠️ « Informations » quand on ne mesure pas (aperçu interne) : écrire « Lecture mesurée » sur
|
|
45
|
+
// une page qui ne mesure rien serait faux dans l'autre sens.
|
|
46
|
+
const resume = tracked ? "Lecture mesurée" : "Informations";
|
|
47
|
+
return `<details class=lgl><summary class=lgl-pill>${ICONE_INFO}<span>${resume}</span></summary>`
|
|
48
|
+
+ `<div class=lgl-panel>${mesure}${liens ? `<span class=lgl-links>${liens}</span>` : ""}</div></details>`;
|
|
34
49
|
}
|
|
35
50
|
|
|
51
|
+
// Un « i » cerclé, décoratif : le mot à côté suffit à un lecteur d'écran.
|
|
52
|
+
const ICONE_INFO = `<svg aria-hidden=true viewBox="0 0 24 24" width=13 height=13 fill=none stroke=currentColor stroke-width=2 stroke-linecap=round><circle cx=12 cy=12 r=9.5 /><path d="M12 11v5.5M12 7.6v.1"/></svg>`;
|
|
53
|
+
|
|
36
54
|
const LEGAL_CSS = `
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
.lgl
|
|
55
|
+
/* ⚠️ EN BAS À GAUCHE, PAS À DROITE : le coin droit est déjà pris par la bulle de l'assistant,
|
|
56
|
+
celle du chat en direct et « Propulsé par » — trois occupants qu'une pastille de plus
|
|
57
|
+
viendrait chevaucher. Au-dessus des pages (z-index 5), sous le tiroir de vignettes (7). */
|
|
58
|
+
.lgl{position:fixed;left:calc(10px + env(safe-area-inset-left));bottom:calc(10px + env(safe-area-inset-bottom));
|
|
59
|
+
z-index:5;max-width:min(92vw,420px);font-size:11px;line-height:1.4;color:rgba(255,255,255,.94)}
|
|
60
|
+
/* La colonne de vignettes, ouverte en grand écran, pousse le document : la pastille la suit
|
|
61
|
+
au lieu de se poser sur la dernière vignette. */
|
|
62
|
+
@media (min-width:861px){ body.vign-on .lgl{left:calc(178px + env(safe-area-inset-left))} }
|
|
63
|
+
.lgl-pill{display:inline-flex;align-items:center;gap:5px;padding:4px 9px 4px 7px;border-radius:999px;
|
|
64
|
+
background:rgba(20,18,14,.74);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
|
|
65
|
+
cursor:pointer;list-style:none;user-select:none}
|
|
66
|
+
/* ⚠️ DISCRÈTE PAR LA TAILLE, JAMAIS PAR L'OPACITÉ : la pastille flotte sur la page du
|
|
67
|
+
document, souvent blanche, et un texte atténué y passerait sous le contraste exigé. Le fond
|
|
68
|
+
à .74 garde le blanc à ~7:1 même sur une page blanche. */
|
|
69
|
+
.lgl-pill::-webkit-details-marker{display:none}
|
|
70
|
+
.lgl-pill:hover,.lgl[open] .lgl-pill{background:rgba(20,18,14,.88)}
|
|
71
|
+
.lgl-pill:focus-visible{outline:2px solid #fff;outline-offset:2px}
|
|
72
|
+
.lgl-panel{display:flex;flex-direction:column;gap:5px;margin-top:6px;padding:9px 11px;border-radius:10px;
|
|
73
|
+
background:rgba(20,18,14,.86);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
|
|
74
|
+
.lgl a{color:inherit;text-decoration:underline;text-underline-offset:2px}
|
|
41
75
|
.lgl a:hover{color:#fff}
|
|
42
76
|
.lgl-sep{margin:0 6px;opacity:.8}
|
|
43
|
-
.lgl-
|
|
44
|
-
@media (max-width:640px){ .lgl{font-size:10px;padding:4px 10px} }
|
|
77
|
+
@media (max-width:640px){ .lgl{font-size:10.5px} }
|
|
45
78
|
`;
|
|
46
79
|
|
|
47
80
|
module.exports = { init, legalFooter, LEGAL_CSS };
|