discovery-media-player 0.1.53 → 0.1.55
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 +1 -1
- package/server/handler.js +61 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discovery-media-player",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.55",
|
|
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",
|
package/server/handler.js
CHANGED
|
@@ -2625,7 +2625,7 @@ function presentHtml(pres, nonce, logoUrl, supaUrl, supaKey) {
|
|
|
2625
2625
|
const presenter = esc(pres.presenter_name || "");
|
|
2626
2626
|
const logo = esc(logoUrl || "");
|
|
2627
2627
|
const fileUrl = `/api/doc?present=${encodeURIComponent(pres.slug)}&file=1`;
|
|
2628
|
-
const cfg = JSON.stringify({ fileUrl, docUrl: pres.file_url, pdfjs: PDFJS, slug: pres.slug, page: pres.current_page || 1, active: pres.active !== false, content: pres.content || null, supaUrl, supaKey, title: pres.doc_title || pres.file_name || "Document" });
|
|
2628
|
+
const cfg = JSON.stringify({ fileUrl, docUrl: pres.file_url, pdfjs: PDFJS, slug: pres.slug, fileName: pres.file_name || "", page: pres.current_page || 1, active: pres.active !== false, content: pres.content || null, supaUrl, supaKey, title: pres.doc_title || pres.file_name || "Document" });
|
|
2629
2629
|
return `<!doctype html><html lang=fr><head><meta charset=utf-8>
|
|
2630
2630
|
<meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=3">
|
|
2631
2631
|
<meta name=robots content="noindex,nofollow">
|
|
@@ -2708,6 +2708,18 @@ function presentHtml(pres, nonce, logoUrl, supaUrl, supaKey) {
|
|
|
2708
2708
|
if(!PDF) return;
|
|
2709
2709
|
n=Math.max(1,Math.min(total||1, n||1)); cur=n;
|
|
2710
2710
|
var c=document.getElementById('cur'); if(c)c.textContent=n;
|
|
2711
|
+
// Une image tient sur une page : on la pose, ajustée au cadre, et le reste de la vue —
|
|
2712
|
+
// synchronisation, présence, chat — continue de fonctionner à l identique.
|
|
2713
|
+
if(PDF.image){
|
|
2714
|
+
var pgi=document.getElementById('page'); if(!pgi) return;
|
|
2715
|
+
var dispoW=Math.max(120, stage.clientWidth-40), dispoH=Math.max(120, stage.clientHeight-40);
|
|
2716
|
+
var ech=Math.min(dispoW/(PDF.image.naturalWidth||1), dispoH/(PDF.image.naturalHeight||1), 1);
|
|
2717
|
+
var el=PDF.image.cloneNode(false);
|
|
2718
|
+
el.style.width=Math.round((PDF.image.naturalWidth||1)*ech)+'px';
|
|
2719
|
+
el.style.height='auto'; el.style.display='block';
|
|
2720
|
+
pgi.innerHTML=''; pgi.appendChild(el);
|
|
2721
|
+
return;
|
|
2722
|
+
}
|
|
2711
2723
|
PDF.getPage(n).then(function(page){
|
|
2712
2724
|
var availW=Math.max(120, stage.clientWidth-40), availH=Math.max(120, stage.clientHeight-40);
|
|
2713
2725
|
var v1=page.getViewport({scale:1});
|
|
@@ -2726,7 +2738,55 @@ function presentHtml(pres, nonce, logoUrl, supaUrl, supaKey) {
|
|
|
2726
2738
|
pdfjsLib.GlobalWorkerOptions.workerSrc=u; load();
|
|
2727
2739
|
}).catch(function(){ window.__workerRefuse=1; var _e=document.getElementById('pg'); if(_e)_e.textContent="Document non affiche : une dependance n a pas pu etre verifiee."; });
|
|
2728
2740
|
}
|
|
2741
|
+
// ⚠️ UNE PRÉSENTATION PEUT PORTER UNE IMAGE, ET CETTE VUE NE LE SAVAIT PAS. Le bouton
|
|
2742
|
+
// Présenter s apparait sans condition sur le type de document : un présentateur qui regarde un
|
|
2743
|
+
// PNG peut donc le présenter, et son audience recevait une page qui appelait pdf.js sur une
|
|
2744
|
+
// image — « Document indisponible ». Un bouton qui mène à une page morte est pire qu un bouton
|
|
2745
|
+
// absent.
|
|
2746
|
+
//
|
|
2747
|
+
// Ce n est PAS une régression du refus de worker : ce chemin était muet bien avant, et
|
|
2748
|
+
// personne ne l avait vu parce qu on ne présente pas souvent une image. Trouvé par le second
|
|
2749
|
+
// hôte, en POSANT LA QUESTION là où nous aurions affirmé — sa vue à lui sert des images, il a
|
|
2750
|
+
// demandé si la nôtre pouvait en recevoir.
|
|
2751
|
+
// ⚠️ Évalué AU CHARGEMENT, pas à l analyse du script : posé en constante de haut niveau, il
|
|
2752
|
+
// s exécutait avant que tout soit en place et emportait le reste du bloc avec lui — le
|
|
2753
|
+
// gestionnaire d état n était plus exposé, et la couche live ne pouvait plus se brancher. Un
|
|
2754
|
+
// essai l a dit tout de suite. Une question posée au bon moment ne coûte rien ; posée trop tôt,
|
|
2755
|
+
// elle emporte ce qui vient après.
|
|
2756
|
+
// ⚠️ SUR L URL D ORIGINE, JAMAIS SUR L URL DE PROXY. Premier jet : je passais
|
|
2757
|
+
// CFG.fileUrl, qui vaut /api/doc?present=...&file=1 — aucune extension, donc la réponse était
|
|
2758
|
+
// toujours « ce n est pas une image », et la page repartait sur pdf.js avec un PNG. Pire, un
|
|
2759
|
+
// try/catch posé par prudence avalait tout : la sonde n a rien vu jusqu à ce qu on lise le
|
|
2760
|
+
// sous-titre du loader, qui disait « Document indisponible ».
|
|
2761
|
+
//
|
|
2762
|
+
// Une garde défensive qui rend faux sur erreur ne protège pas, elle CACHE. Retirée.
|
|
2763
|
+
//
|
|
2764
|
+
// ⚠️ LE NOM FAIT FOI, L URL COMPLÈTE — et j avais gardé l inverse. Deux correctifs avaient été
|
|
2765
|
+
// écrits pour un symptôme ; comme chacun suffisait, aucune mutation ne pouvait faire rougir le
|
|
2766
|
+
// banc. J en ai donc retiré un — et j ai retiré le champ AUTORITAIRE, en gardant celui que le
|
|
2767
|
+
// banc savait déjà voir. Le banc a choisi le correctif au lieu de le vérifier.
|
|
2768
|
+
//
|
|
2769
|
+
// Signalé par le second hôte, qui a compté chez lui : 4 287 documents présentables, 23 dont l
|
|
2770
|
+
// URL ne porte aucune extension, aucune image parmi ces 23. Atteignable, non peuplé. Le jour où
|
|
2771
|
+
// l un de ces liens porte un PNG, décider sur l URL seule ramène « Document indisponible ».
|
|
2772
|
+
//
|
|
2773
|
+
// La règle « un correctif à deux changements ne se prouve pas » ne dit pas LEQUEL garder. La
|
|
2774
|
+
// réponse n est jamais « celui que le banc sait voir » : on garde le champ qui fait foi, puis on
|
|
2775
|
+
// rend le banc capable de le distinguer — un cas où l URL ment et où seul le nom dit vrai.
|
|
2776
|
+
function estImage(){ return Player.viewer.isImageDocument(CFG.fileName, CFG.docUrl); }
|
|
2777
|
+
function chargerImage(){
|
|
2778
|
+
var im=new Image();
|
|
2779
|
+
im.onload=function(){
|
|
2780
|
+
total=1; ready=true; PDF={image:im};
|
|
2781
|
+
var tot=document.getElementById('tot'); if(tot)tot.textContent=1;
|
|
2782
|
+
show(1); hideLoader();
|
|
2783
|
+
if(!CFG.active) ended();
|
|
2784
|
+
};
|
|
2785
|
+
im.onerror=function(){ var l=document.getElementById('load'); if(l)l.querySelector('.lsub').textContent="Document indisponible."; };
|
|
2786
|
+
im.src=CFG.fileUrl;
|
|
2787
|
+
}
|
|
2729
2788
|
function load(){
|
|
2789
|
+
if(estImage()){ chargerImage(); return; }
|
|
2730
2790
|
pdfjsLib.getDocument({url:CFG.fileUrl,isEvalSupported:false}).promise.then(function(pdf){
|
|
2731
2791
|
PDF=pdf; total=pdf.numPages; ready=true;
|
|
2732
2792
|
var tot=document.getElementById('tot'); if(tot)tot.textContent=total;
|