discovery-media-player 0.1.125 → 0.1.126
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/page-visionneuse.js +45 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discovery-media-player",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.126",
|
|
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",
|
|
@@ -322,6 +322,11 @@ ${LEGAL_CSS}
|
|
|
322
322
|
var taches={}; // n -> RenderTask, pour pouvoir ANNULER
|
|
323
323
|
var enCours={}; // n -> 1 tant que la page n a pas abouti
|
|
324
324
|
var MARGE_PAGES=2; // on garde la page courante et deux de chaque cote
|
|
325
|
+
// ATTENTION : UNE GENERATION PAR PAGE. La generation globale (renderGen) ne bouge qu au build ;
|
|
326
|
+
// une page liberee PENDANT que son rendu ou sa couche texte est en vol gardait donc la meme
|
|
327
|
+
// generation, et le resultat tardif se posait sur une page remise en reserve. On incremente
|
|
328
|
+
// donc a chaque liberation, et chaque callback verifie SA page.
|
|
329
|
+
var genPage=Object.create(null);
|
|
325
330
|
var DPR_MAX=2; // au-dela, le gain visuel est nul et le cout quadratique
|
|
326
331
|
var PIXELS_MAX=4e6; // plafond par canvas : ~4 M pixels = ~16 Mo de tampon
|
|
327
332
|
var onePage=false, soloOffered=false; // mode « une seule page » (présentation guidée) + offre de découverte solo
|
|
@@ -754,6 +759,7 @@ ${LEGAL_CSS}
|
|
|
754
759
|
// Rend une page a l etat de reserve : on retire le canvas et la couche texte, on remet la boite
|
|
755
760
|
// avec sa hauteur estimee. Le defilement ne bouge pas, et la page se re-rendra si on y revient.
|
|
756
761
|
function libererPage(n){
|
|
762
|
+
genPage[n]=(genPage[n]||0)+1; // invalide tout callback en vol pour CETTE page
|
|
757
763
|
var el=pagesEl.querySelector('.page[data-p="'+n+'"]'); if(!el)return;
|
|
758
764
|
if(taches[n]){ try{ taches[n].cancel(); }catch(e){} delete taches[n]; }
|
|
759
765
|
var w=Math.round(targetWidth());
|
|
@@ -766,10 +772,25 @@ ${LEGAL_CSS}
|
|
|
766
772
|
// passer le cas qui fait tomber l onglet. On garde donc la fenetre courante, et on evince
|
|
767
773
|
// au-dela — le nombre de canvas reste borne quel que soit le parcours du document.
|
|
768
774
|
function evincerLoin(centre){
|
|
769
|
-
|
|
770
|
-
|
|
775
|
+
// ATTENTION : LE MODE UNE-PAGE EVINCAIT ZERO, ET MON COMMENTAIRE DISAIT POURQUOI — A TORT.
|
|
776
|
+
//
|
|
777
|
+
// Il portait « une seule page affichee : rien a evincer ». Une seule est AFFICHEE, mais
|
|
778
|
+
// showPage() rend la page courante ET la suivante a chaque navigation, et toutes les
|
|
779
|
+
// precedentes restent dans le DOM. Une presentation guidee de 100 pages finissait donc avec
|
|
780
|
+
// pres de 100 canvas — exactement le defaut que la fenetre glissante ferme ailleurs.
|
|
781
|
+
// Un raisonnement faux ecrit avec assurance fait passer un defaut pour une intention.
|
|
782
|
+
// (Releve par un audit externe.)
|
|
783
|
+
var marge = onePage ? 1 : MARGE_PAGES; // une-page : courante, suivante, precedente
|
|
784
|
+
// ATTENTION : ON PARCOURT L UNION DES TROIS REGISTRES. rendered seul ignore ce qui est EN
|
|
785
|
+
// VOL : une page eloignee dont le getPage n est pas resolu continuait a travailler, et sa
|
|
786
|
+
// couche texte pouvait se poser plus tard sur une page deja liberee.
|
|
787
|
+
var vus = Object.create(null);
|
|
788
|
+
for(var a in rendered) vus[a]=1;
|
|
789
|
+
for(var b in enCours) vus[b]=1;
|
|
790
|
+
for(var c in taches) vus[c]=1;
|
|
791
|
+
for(var k in vus){
|
|
771
792
|
var n=+k;
|
|
772
|
-
if(n<centre-
|
|
793
|
+
if(n<centre-marge || n>centre+marge) libererPage(n);
|
|
773
794
|
}
|
|
774
795
|
}
|
|
775
796
|
function renderPage(n,el){
|
|
@@ -778,7 +799,7 @@ ${LEGAL_CSS}
|
|
|
778
799
|
// donc un echec de getPage ou de render laissait la page marquee pour toujours : elle ne se
|
|
779
800
|
// retentait jamais et restait vide. On distingue « en cours » de « aboutie ».
|
|
780
801
|
enCours[n]=1;
|
|
781
|
-
var gen=renderGen;
|
|
802
|
+
var gen=renderGen, monGenPage=genPage[n]||0;
|
|
782
803
|
if(IS_IMG){
|
|
783
804
|
var w=Math.round(targetWidth());
|
|
784
805
|
var im=document.createElement('img');
|
|
@@ -791,17 +812,28 @@ ${LEGAL_CSS}
|
|
|
791
812
|
return;
|
|
792
813
|
}
|
|
793
814
|
pdfDoc.getPage(n).then(function(page){
|
|
794
|
-
|
|
815
|
+
// Un build() est passe (generation globale), ou CETTE page a ete liberee entre-temps.
|
|
816
|
+
if(gen!==renderGen || monGenPage!==(genPage[n]||0)){ delete enCours[n]; return; }
|
|
795
817
|
// ATTENTION : LE DPR N ETAIT PAS PLAFONNE. Sur un ecran ×3, une page de 900 px de large fait
|
|
796
818
|
// pres de 10 M pixels, soit environ 39 Mo de tampon pour UNE page — le gain visuel au-dela de
|
|
797
819
|
// ×2 est nul, le cout est quadratique. On plafonne le DPR, puis on plafonne le NOMBRE DE
|
|
798
820
|
// PIXELS du canvas : deux bornes, parce que le zoom peut faire grandir la page independamment
|
|
799
821
|
// de la densite de l ecran.
|
|
800
|
-
var dpr=Math.min(DPR_MAX, window.devicePixelRatio||1);
|
|
801
822
|
var scale=Math.min(5,targetWidth()/page.getViewport({scale:1}).width);
|
|
802
823
|
var v=page.getViewport({scale:scale});
|
|
803
|
-
|
|
804
|
-
|
|
824
|
+
// ATTENTION : LE PLANCHER A 1 CREVAIT LE BUDGET, ET LE BUDGET ETAIT ANNONCE.
|
|
825
|
+
//
|
|
826
|
+
// L ancienne formule reduisait le DPR sans jamais le laisser descendre SOUS 1. Or au zoom
|
|
827
|
+
// maximal la taille CSS a elle seule depasse le budget : a 300 %, une page de 4110×5319 CSS
|
|
828
|
+
// faisait 21,9 M pixels — soit ×5,5 le plafond annonce, environ 83 Mo de tampon pour UNE
|
|
829
|
+
// page. Le plancher visait la nettete ; il annulait la borne exactement quand elle servait.
|
|
830
|
+
//
|
|
831
|
+
// Le facteur se calcule donc depuis la taille CSS, borne par trois choses a la fois : le
|
|
832
|
+
// plafond de densite, la densite REELLE de l ecran (ne jamais sur-rendre), et le budget de
|
|
833
|
+
// pixels — qui peut le faire descendre sous 1. Verifie par calcul sur cinq configurations
|
|
834
|
+
// avant d etre ecrit. (Releve par un audit externe.)
|
|
835
|
+
var pixelsCss=Math.max(1, v.width*v.height);
|
|
836
|
+
var dpr=Math.min(DPR_MAX, window.devicePixelRatio||1, Math.sqrt(PIXELS_MAX/pixelsCss));
|
|
805
837
|
var c=document.createElement('canvas');
|
|
806
838
|
c.setAttribute('role','img'); c.setAttribute('aria-label','Page '+n);
|
|
807
839
|
c.width=Math.floor(v.width*dpr); c.height=Math.floor(v.height*dpr); // backing store HD → net comme du natif
|
|
@@ -811,7 +843,7 @@ ${LEGAL_CSS}
|
|
|
811
843
|
taches[n]=tache;
|
|
812
844
|
tache.promise.then(function(){
|
|
813
845
|
if(taches[n]===tache) delete taches[n];
|
|
814
|
-
if(gen!==renderGen){ delete enCours[n]; return; }
|
|
846
|
+
if(gen!==renderGen || monGenPage!==(genPage[n]||0)){ delete enCours[n]; return; }
|
|
815
847
|
delete enCours[n]; rendered[n]=1; // AVEREE, pas seulement demandee
|
|
816
848
|
hideLoader(); if(n===cur)setTimeout(vsplitTint,60);
|
|
817
849
|
},function(){
|
|
@@ -822,6 +854,10 @@ ${LEGAL_CSS}
|
|
|
822
854
|
// Couche texte (sélection). En pdf.js v3, les spans utilisent font-size:calc(var(--scale-factor)*Npx)
|
|
823
855
|
// → SANS --scale-factor, taille nulle = pas de sélection. On le pose sur le conteneur.
|
|
824
856
|
try{ page.getTextContent().then(function(tc){
|
|
857
|
+
// ATTENTION : LA COUCHE TEXTE ARRIVE APRES, ET SE POSAIT SUR UNE PAGE LIBEREE. Elle
|
|
858
|
+
// ressuscitait alors une page remise en reserve — visible comme un bloc de texte
|
|
859
|
+
// selectionnable flottant sur un cadre vide.
|
|
860
|
+
if(gen!==renderGen || monGenPage!==(genPage[n]||0)) return;
|
|
825
861
|
var tl=document.createElement('div'); tl.className='textLayer';
|
|
826
862
|
tl.style.width=v.width+'px'; tl.style.height=v.height+'px'; tl.style.setProperty('--scale-factor', scale);
|
|
827
863
|
el.appendChild(tl);
|