discovery-media-player 0.1.53 → 0.1.54

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/server/handler.js +53 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discovery-media-player",
3
- "version": "0.1.53",
3
+ "version": "0.1.54",
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
@@ -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,48 @@ 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
+ // ⚠️ ET IL N Y A QU UNE SEULE CORRECTION ICI, alors que j en avais écrit deux. J avais aussi
2765
+ // ajouté le nom du fichier au cfg — chacune suffisait, donc aucune mutation ne pouvait faire
2766
+ // rougir le banc : retirer l une laissait l autre agir. Deux correctifs pour un symptôme
2767
+ // rendent un essai ininterprétable. Celle-ci est conservée parce qu elle ne change rien à ce
2768
+ // que la page reçoit ; retirer l URL d origine fait bien tomber le banc.
2769
+ function estImage(){ return Player.viewer.isImageDocument("", CFG.docUrl); }
2770
+ function chargerImage(){
2771
+ var im=new Image();
2772
+ im.onload=function(){
2773
+ total=1; ready=true; PDF={image:im};
2774
+ var tot=document.getElementById('tot'); if(tot)tot.textContent=1;
2775
+ show(1); hideLoader();
2776
+ if(!CFG.active) ended();
2777
+ };
2778
+ im.onerror=function(){ var l=document.getElementById('load'); if(l)l.querySelector('.lsub').textContent="Document indisponible."; };
2779
+ im.src=CFG.fileUrl;
2780
+ }
2729
2781
  function load(){
2782
+ if(estImage()){ chargerImage(); return; }
2730
2783
  pdfjsLib.getDocument({url:CFG.fileUrl,isEvalSupported:false}).promise.then(function(pdf){
2731
2784
  PDF=pdf; total=pdf.numPages; ready=true;
2732
2785
  var tot=document.getElementById('tot'); if(tot)tot.textContent=total;