var versionPdf = 2; var urlSite="https://chinginfo.fr"; var local = false; function chap_affExo(){ console.log("chap_affExo"); /* ev.preventDefault(); ev.stopPropagation(); //=== Enonce ou correction var e; if(ev.currentTarget.getAttribute('affEnonce')==null){ e=0; } else{ e=1; } //=== Affiche le div var num = ev.currentTarget.getAttribute("numexo"); */ //Affiche l'exercice var elt = document.getElementById('chap_exo'); elt.style.display='block'; //blur le body document.querySelector("#aff").style.filter="blur(2px)"; document.querySelector("#navigation").style.filter="blur(2px)"; //document.querySelector("#navPlus").style.filter="blur(2px)"; //Lance l'animation elt.style.animation = "2s linear 0s correcExo_anim_in" elt.style.left="50%" //=== Stoppe le defilement du mpdfPrinc //pdfPrinc.scrollOff = true; //=== Ancien pdfCorrec= new mpdf("chap_exoAff",true); //mpdf.col=sd_getCol; pdfCorrec.col = 1; pdfCorrec.zoomStrict = true; pdfCorrec.preparePdf(); var e = 1; pdfCorrec.chargePdf(urlSite+'/chap_exoAff.php?n='+exoNum+'&e='+e) /* var num = ev.currentTarget.getAttribute("numcorrec") var elt = document.createElement('a'); elt.setAttribute('href',urlSite+'/exercice.php?n='+num) elt.setAttribute('download',"ChingInfo-"+num+".pdf") document.body.appendChild(elt) elt.click() document.body.removeChild(elt) return false; */ } function chap_affCorrec(ev){ console.log("chap_affCorrec"); ev.preventDefault(); ev.stopPropagation(); //=== Enonce ou correction var e; if(ev.currentTarget.getAttribute('affEnonce')==null){ e=0; } else{ e=1; } //=== Affiche le div var num = ev.currentTarget.getAttribute("numexo"); //Affiche l'exercice var elt = document.getElementById('chap_exo'); elt.style.display='block'; //blur le body document.querySelector("#aff").style.filter="blur(2px)"; document.querySelector("#navigation").style.filter="blur(2px)"; //document.querySelector("#navPlus").style.filter="blur(2px)"; //Lance l'animation elt.style.animation = "2s linear 0s correcExo_anim_in" elt.style.left="50%" //=== Stoppe le defilement du mpdfPrinc //pdfPrinc.scrollOff = true; //=== Ancien pdfCorrec= new mpdf("chap_exoAff",true); //mpdf.col=sd_getCol; pdfCorrec.col = 1; pdfCorrec.zoomStrict = true; pdfCorrec.preparePdf(); pdfCorrec.chargePdf(urlSite+'/chap_exoAff.php?n='+num+'&e='+e) /* var num = ev.currentTarget.getAttribute("numcorrec") var elt = document.createElement('a'); elt.setAttribute('href',urlSite+'/exercice.php?n='+num) elt.setAttribute('download',"ChingInfo-"+num+".pdf") document.body.appendChild(elt) elt.click() document.body.removeChild(elt) return false; */ } function chap_exoFerme(){ console.log("chap_correcFerme"); /* if(mpdfPrinc == null) return; mpdfPrinc.scrollOff = false; */ //blur le body document.querySelector("#aff").style.filter="none"; document.querySelector("#navigation").style.filter="none"; //Ferme la fenetre d'exercice var elt = document.getElementById('chap_exo'); elt.style.animation = "1s linear 0s correcExo_anim_out" elt.style.left="-150%" }function exo_aff(ev){ ev.preventDefault(); var elt = ev.currentTarget; num=elt.getAttribute('num'); // ==== Affichage du block document.querySelector('#affExo').style.display="block" // ==== Chargement du pdf pdfExo.affichePdf('e'+num); }var pdfChap = null; var pdfExo; var pdfCorrec; var classeNum = 0; var chapNum = 0; var exoNum = 0; var correcNum = 0; console.log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); var pdfDownload = null; window.exoSacAdos = [] function loadMyPdf(){ console.log("loadMyPdf") //Rejout le style de Aff var elt = document.querySelector("#aff"); elt.style.width="auto" elt.style.borderWidth="2px" //Demarre les deux pdf pdfChap = new mpdfInfo("aff",true); pdfChap.zoomStrict=true; pdfChap.col=1; pdfCorrec = new mpdfInfo("chap_exoAff",true); pdfCorrec.zoomStrict = true; pdfExo = new mpdfInfo("affExo",true); pdfSacados = new mpdfInfo("aff",true); } function loadInit() { console.log('loadInit'); navBouton(); //Fermeture du div pour affichage exo/correc var elt = document.querySelector('#affExo'); if (elt != null) { elt.addEventListener('click', function (ev) { ev.currentTarget.style.display = "none"; }); } //==== Ouvre une classe if(classeNum != 0){ classeAff(classeNum); } //==== Ouvre un chapitre if (chapNum != 0) { console.log('Ouvre un chapitre : '+chapNum+' '+chapUrl) chapitreAff(chapNum,chapUrl); } //==== Ouvre la correction if(correcNum!=0){ console.log("YUUUUUUUUUUUUUUUUUUUUUU correctyion"); var obj = new Object(); obj.preventDefault = function(){}; obj.stopPropagation = function(){}; var div = document.createElement("div1"); div.setAttribute("numcorrec",correcNum); div.setAttribute("affEnonce",1); obj.currentTarget = div; chap_affCorrec(obj);//"resultat/compilation/chap" + chapNum + ".pdf") } //==== Ouvre un exercice if(exoNum!=0){ console.log("YUUUUUUUUUUUUUUUUUUUUUU exercuce"); /* var obj = new Object(); obj.preventDefault = function(){}; obj.stopPropagation = function(){}; var div = document.createElement("div1"); div.setAttribute("numcorrec",exoNum); div.setAttribute("affEnonce",1); obj.currentTarget = div; */ chap_affExo();//"resultat/compilation/chap" + chapNum + ".pdf") } //==== Bouton download var elt = document.querySelector("#downloadPdf"); if(elt!=null){ elt.addEventListener('click',download_pdf) elt.querySelector(':nth-child(1)').src = image_pdf elt.querySelector(':nth-child(2)').src = image_direction1 } //==== Double-clic pour fermer le dialogue var elt = document.querySelector('#chap_exo') if(elt != undefined){ elt.addEventListener('dblclick',chap_exoFerme); } } var g_diagTimeout=null; function diagMessage(x){ var elt = document.getElementById('diagMessage'); if(x.substring(0,7)=="Erreur:"){ x = x.substring(7); elt.style.backgroundColor="lightcoral"; } else{ elt.style.backgroundColor="mediumturquoise"; } elt.innerHTML=x; elt.style.display="block"; g_diagTimeout = setTimeout(diagMessage_out,3000); } function diagMessage_out(){ if(g_diagTimeout!=null){ document.getElementById('diagMessage').style.display="none"; g_diagTimeout = null; } } function download_pdf(e){ console.log("download_pdf") //=== Aucun fichier à télécharger if(pdfDownload==null){ diagMessage("Erreur:Aucun fichier à télécharger"); return; } //=== Téléchargement du fichier var elt = document.createElement('a'); elt.setAttribute('href',urlSite+'/download_pdf.php?d='+pdfDownload) elt.setAttribute('download',null) document.body.appendChild(elt) elt.click() document.body.removeChild(elt) /* var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4){ if (xhr.status === 200) { if(xhr.responseText.substring(0,7)=="Erreur:"){ diagMessage(xhr.responseText); return; } var elt = document.createElement('a'); } } } xhr.open('POST', urlSite+'/download_pdf.php', false); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send("d="+pdfDownload); */ } window.addEventListener('load', loadInit); zoomListe = [400,500,600,700,800,900,1000,1100,1200,1300,1400,1500] zoomNum = 4 function affZoomChange(delta){ console.log("affZoomChange"); if(pdfChap==null){ return; } zoomNum += delta; if(zoomNum<0){ zoomNum = 0; } if(zoomNum>=zoomListe.length){ zoomNum = zoomListe.length-1; } document.querySelector("#supAff").style.maxWidth=zoomListe[zoomNum]+"px" pdfChap.resizeWindow() } /*================ SCript jx de ChingAtome =================*/ window.jx = function (url, cible, arg = {}) { //Construction de l'history console.log("jx " + url + " " + cible + " " + arg); if ((url.indexOf('.php') == -1) && (cible == "sousAff") && (arg["noHistory"] == undefined)) { urlHistory = url.replace('/cl/', '/classe/'); urlHistory = urlHistory.replace('/ch/', '/chapitre/'); urlHistory = urlHistory.replace('/info/', '/informatique/'); urlHistory = urlHistory.replace('/apropos/', '/a_propos/'); urlHistory = urlHistory.replace('/sacados/', '/sac-a-dos/'); urlHistory = urlHistory.replace('/divers/', '/divers-info/'); urlHistory = urlHistory.replace('/exo/', '/'); urlHistory = urlHistory.replace('/rsrc', '/ressource'); urlHistory = urlHistory.replace('/espaceProf/', '/espace/'); if (urlHistory.indexOf("vos-feuilles?af=") != -1) { y = urlHistory.split("?af"); urlHistory = y[0] } history.pushState(url, null, urlHistory); //history.replaceState(null,null,urlHistory); } //Affichage spécial "#sousAff" if (cible == 'sousAff') { //document.getElementById("navPlus").innerHTML=""; //document.getElementById("navPlus").style.height="initial"; document.getElementById('aff').scrollTo(0, 0); } //xmlhttprequest var xhr_object = null; if (window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else if (window.ActiveXObject) // Internet Explorer xhr_object = new ActiveXObject('Microsoft.XMLHTTP'); else { // XMLHttpRequest non supporté par le navigateur alert('Votre navigateur ne supporte pas les objets XMLHTTPRequest...'); return; } xhr_object.onreadystatechange = function () { if ((cible == null) || (typeof document.getElementById(cible) == undefined)) return; //if((xhr_object.readyState == 4) && (xhr_object.status===200)){ if ((xhr_object.readyState == 4) && (xhr_object.status !== 2)) { //document.title=this.url if (cible == 'ssssssssousAff') { clearInterval(boucleChargement); window.scrollTo(0, 0); //Desactive vielle feuille style a = document.styleSheets for (i = 2; i < a.length; i++) { a[i].disabled = true; } } setInnerHTML(document.getElementById(cible), xhr_object.responseText) //document.getElementById(cible).innerHTML=xhr_object.responseText //=== Arg option if (arg["scrollTo"] != undefined) { document.getElementById('sousAff').scroll(0, arg["scrollTo"]); } } } //Invocation de l'ajax xhr_object.url = url; //console.log("xxxxxxxx "+url) //url="https://chinginfo.fr/dossier/weblinux/index.php"; xhr_object.open('GET', url, true); //xhr_object.setRequestHeader('Content-Type', 'text/xml; charset=UTF-8'); xhr_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr_object.send(); } function insertScript($script, callback) { var s = document.createElement('script') s.type = 'text/javascript' if ($script.src) { s.onload = callback s.onerror = callback s.src = $script.src } else { s.textContent = $script.innerText } // re-insert the script tag so it executes. document.head.appendChild(s) // clean-up $script.parentNode.removeChild($script) // run the callback immediately for inline scripts if (!$script.src) { callback() } } function runScripts($container) { // get scripts tags from a node var $scripts = $container.querySelectorAll('script') var runList = [] var typeAttr [].forEach.call($scripts, function ($script) { typeAttr = $script.getAttribute('type') // only run script tags without the type attribute // or with a javascript mime attribute value if (!typeAttr || runScriptTypes.indexOf(typeAttr) !== -1) { runList.push(function (callback) { insertScript($script, callback) }) } }) // insert the script tags sequentially // to preserve execution order if (runList.length != 0) { seq(runList, scriptsDone) } } // trigger DOMContentLoaded function scriptsDone() { var DOMContentLoadedEvent = document.createEvent('Event') DOMContentLoadedEvent.initEvent('DOMContentLoaded', true, true) document.dispatchEvent(DOMContentLoadedEvent) } // runs an array of async functions in sequential order function seq(arr, callback, index) { // first call, without an index if (typeof index === 'undefined') { index = 0 } arr[index](function () { index++ if (index === arr.length) { callback() } else { seq(arr, callback, index) } }) } var runScriptTypes = [ 'application/javascript', 'application/ecmascript', 'application/x-ecmascript', 'application/x-javascript', 'text/ecmascript', 'text/javascript', 'text/javascript1.0', 'text/javascript1.1', 'text/javascript1.2', 'text/javascript1.3', 'text/javascript1.4', 'text/javascript1.5', 'text/jscript', 'text/livescript', 'text/x-ecmascript', 'text/x-javascript' ] // setInnerHTML Sécurisé function setInnerHTML(divContent, HTML) { divContent.innerHTML = HTML; runScripts(divContent) }var sac_a_dos = "data:image/png;base64,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"; var image_direction1 = "data:image/png;base64,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" var image_pdf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAK5UlEQVR42q1YC3BU1Rn+zt7dbEKyCRAIKCnZEIIk4ZEHGpLYRqMOMhVfLYwODFTr6GAr1cH6wBHF0YrUsRatoqij4mNUBFGwOBoRtCLlTTCAkIRHIO8HbF67d/eefv/NTQiO1cR2Z07uveeee853vv//v/8/UejH79ChQ3cGg0Gf1tq0LEvxqsPhcBSbwdeafa6uri4l9+xTpmkq9ulIJGLw3j1kyJCVcXFxhz/44IPYefPmtXMMJk+e/INrqb3Z2cgYORKe4cOdHs7b2QkEg9h2//2YWVwct7Wi4kjEshK5clhGEA84qVuAcFHBp3gFn3ub9LMpAg0HQ6FPEhMTlxDQjtmzZyt+q8+cOYNBgwYhLy/vXEC7CSh92DDEDh16tlcAmSbUxo3yNLKuufk7t9vtgyztAJJF5RoRAAJG+vqC4n2YoEKdnaqupgaJw4Y1HK2qujkzM3O9bObaa68NP/fcc5g+ffq5gA7n5Nwd7XYv8Hg8cJEdJQzxJwsE3W5YXV2GMXjwSC6gIgKgeyGEQyH7XvpMeeYGpC/U855zdASDypubqxMefjgcamz0ZE2c2FVXVzeXgN+jC7jr6+vDycnJyM/PPwtoz+TJfx2dkHB3fGxst7lcLmjZKSdHIACTprN3zncmaY6QPdsk3ECEY8zTp2HSJyKyCcOwwfBLmGwB+lRgyhSV/PLL+lR5eaS4pMTd3NxstrS0/N7v969qb29XfNYCaOvWrSgoKIDalpm51B8Xd098TAy0MMRJ6SBAXBzUpZdCEaC5ezfMb79VRnGxxogRKnziBNrXrwfi4+EtKYHi2K5jx9D89tuwyGpI2OJcAYJrys/X4157DSf5/S8vuSRC06uqqiqdkJBwc1tb2+sdHR0GAUU2b96M4uJiqE+Sk5eO9fnuTYyOhiWUCaCODrgyMhC3ahUiBw5A0fk6XnoJ0XPmQPO9ioqCeegQWpctw4g1axCqqEDb55+j5sEHYZG5kJiT404TUOPUqcgh0ONlZTo7L0+df/75FiMP5eXlLrIzlwBXcVmDzh+JJgb1ts/3RAYZGkGGLIch3dYGT04OhtDpGq66ColvvQWzrAyG348zK1bArK1FEgE2Ll6MYY88guqbbkLg668R4ULiT6b4Gpk9TdM2FRaiaPVqnCwvR5j9XFRL83q94qzBQCAwMyYmZr3ICdnS6hmlnpg8aNA9o4guQkAu8SEyFDVpEpIZZcH9+22/aiYbQ8lAy/LlCHz6KZLffRcdX32F+Ouvtxlr5djvbr0VmmNDEmUOQ01FRZi+bh1aaNLjJ0/q48eP2wzGxsbqoUOHuoYPH15HSbiGfdvIklstAZ7IUeqe0bS9OKbBCS06cgwBjfnsM9Q88ABOv/MOjIQEpG7YgFN8jhBw6quvovKWW5BCFg/fdhta9uyB2dRks2A6Dt5KQKcJaNbHH6OrsREh+iajC1xYn5ZgME1yoNy8bpwxY8Z1vO9S9wKPTwD+PEomYXM518EElPvNN9g+bhwC1dUuX1qayt60SVuBgALB13KRUytXonDfPnxJ89bTpG6CMCUCybQAaiGgjosvxs1kz2xtted1FFyREUoawnx208n/NW3atBJ5Vn8CnkoD7hKd1g4g+XkoAwm5uQjs3IkuMuJmn48i6klKQpjh30Cw4gRDGKpN27ejk7u3nM1EnDma5c9FF+EumjbY0mJHMRxQkmIEAPXPOHLkyOdFRUWXU2gNtQBYGA3corux2EoMBxz1RLPTk5ia6qdGucy2Nk3HFUeDMWSIrUdBgjMY/nQMik6ge1GqviKLnWQonYB+R/OafCc616Pykj5oIgHkqaioKGXodwPiulFsMWxeZ4Pd2/B6oYPBEHUobd/Bg18wMnyWCLgAF9iW1a2s8hH9y/3hh3BTAiJXXIHwZZeBoWSPiaNk+Hjvogkt5xu5SugTUIh4oiorKz+bMmXKFQTkVgu5gI/N47DSw84ptr2U/X27dvmrm5t3US/ihWo7ufaiFvtEoAUQtcZ44w0EKYLiYxA9c5K1y7kXdnoYkrQj1QPn9dCHSnNzc3sZ+q8/osaOHTtSqBVldnK159R2cu1eS9lpRtPfDEqB8eabCN13HxTzk4S/SIg66zfo+a4vII6xAeXk5FxuM/RjgC688EJs377dT0D7DMPwOeSd+40sRLMo6pV7yRJoKnP49tvtxZWja33Z6WnfB5Sdnf3TgByG/Mw5NqDu6kPWUb2LKFlAFuUCnnnzoOns4eeft50czjjVx5n7siWA+M5DH+ofQ1I87dy50wYkJhMfEjR9TWY7OBcXx/bceaedB80XXwTzgJ2Ye5gSEH2B9QUkDLGCHBhDjIZehnp26dDUzQR1yDN/PlxU8yCTrfiVS8Y4oHWfefuA6gU0adKk/gNi3XIOoB6G7MkJRHzIReU23n8fmnmNtSnMp56CixoFZn8blOQ3Yetcn+o12cSJEwcGKCoqqtepexwTTgcIws18FqYGWTNmIIp1VOSOOxC+8UYoCqJtKuqaCKqYVwm47urUBiTCOGHChP4DYlnww4DkSgbUli0wnnwSJhkScGANZSxcCOvKKxFZsKDb35jlFcsai5IghZ3U7VzcJGM2oKysrP4D6uzs3NejQz1RZgOS0OXOjVmzYDHzW6z4UF1tm0exPDGefhpITbU/0ikp0FI7t7fbwhkWoG63yei1AbH4H5jJvMKQBBgLKfEJHr5gsahzsTRRr7wC/eij0FVVUKWl0GPHwpLjDSsG7N0L45lnoOXAQFOKqotf6UsIPinJdIVMT9XRo6Xjx48fICCv1z4GSWUnidP2B1aOLinKrr7aBoGsLER4vuudVBxexsqP5YnatKk7CV9wAUKpY+Hyek3vmBRP5eHDpRdkZPwMH6IO0WcU6uuhWFKoL76ATkyEfughe7zLaZaw50SUXWPwWZNNw7F5mH/OzJkP79yZpm9aiafywMHScZkDBUQfIhitdu9WWLtWXkI9+ywsmkzz1GHQb7roU2Xf7sd4MuCL86H6ZLXdCvML5LyNLXT+uNhByMnJlaoRnuhoO8qO0mTp6ekDNBnLD9TUaLVggbJmz4aLRb6WUwYLNM3Jo1hilB88gNnz5uD55f/A1PypWLtuLSoqK/HH+X+whfBvy/9uR+YD9y+yj0qNjQ3myBEjPceOHSsdM2bMABmKifHpgwe1a9kyZfsGj8CaOiNHbtahoNNj3foPsWbtGlw5bTrdqxYbNqxHYVGhbaYTDPv0senY/OUW5OXkoYCAV7z0gnnT3HmegosKSkenjB5Y2HvEZIah0drKUrwL+rzzoFiwyzlN/pshZ6rHlv4Fe/buoVnikJaWhpzJ2Vix8gWeSAt5eFBYveZ9LF60GB9t+Ai19bUC0PSn+D3X/Prq0hR/ys/UIcPoDXvt6BG1hDm1Aw8+vFiON9i5aye4EPz+VGz79zfIGJ+BTm6ibH8ZCqcWgCaC4TaQNibN/M1113tiomNKU1L6AcjJ9ilMrrsZZfECSHTIzvJO0pRoIlicqqnBxk/+iRtm3YB3V7+HhoYGHDtxHMW/+hW6qMq1dXWYkDUBGz7egMtLLkNmZhZef+N1c+ZvZ3pGJo0oHTVq1LT+Vox+DqzE9wuz/+OP4L9OSkoq+kmGxA8o66OWLl36OM32CzIT+TFgZxMuNQh9ijh17r0zTmorixWjQYY3L1q06DH2Wf3ZtZxGRrANRt9Tyf/+66lhZL46gmySDf8HHHHZbUYJSdkAAAAASUVORK5CYII=" function navBouton() { //Active les boutons de classedivCon var liste = document.querySelectorAll('#navigation > div'); for (var i = 0; i < liste.length; i++) { console.log(liste[i].parentNode.getAttribute('cl')) console.log(liste[i].parentNode) if (liste[i].getAttribute('cl') == null) continue; liste[i].addEventListener('click', classeClick); } //Active les boutons de chapitre var liste = document.querySelectorAll("#navigation > div > :nth-child(2) > div"); for (var i = 0; i < liste.length; i++) { liste[i].addEventListener('click', chapitreClick); } //Affiche le sac à dos : var elt = document.querySelector('#navigation > :nth-child(16)'); if (elt != null) { console.log("kk") elt.firstChild.src = sac_a_dos elt.addEventListener('click', sacAdos_aff) } } function classeClick(ev) { var cl = ev.currentTarget.getAttribute('cl'); console.log('classeClick ' + cl); classeAff(cl) } function classeAff(cl) { // Formate la page document.querySelector('#aff').style = "" displayPdfTools(false) lienAccueil(true); //Recupere le contenu de la classe var content; if ((chapitre[cl] == undefined) || (chapitre[cl].length == 0)) { content = 'Aucun chapitre pour le moment'; } else { var chap = chapitre[cl]; //==== Titre content = '
' + chap[0][1] + '
' //==== content += ''; history.replaceState(null, null, urlSite + "/classe/" + chap[0][2]); } //Ecriture du corps document.querySelector('#aff').innerHTML = content; activeClasse(); // Changement url } function activeClasse() { console.log("activeClasse A FAIRE") var liste = document.querySelectorAll('#navChap > li') for (var i = 0; i < liste.length; i++) { liste[i].addEventListener('click', chapitreClick) } } function chapitreClick(ev) { var url = ev.currentTarget.getAttribute('url') var num = ev.currentTarget.getAttribute('num') console.log('chapitreClick ',url); if (url == null) { console.log('chapitreClick /dossier - ',url); //=== Ouverture du dossier var elt = document.createElement('a'); elt.setAttribute('href','https://' + ev.currentTarget.getAttribute('dossier') + '.chinginfo.'+(local?'local':'fr')); elt.target='chinginfo' elt.style.display = "none"; document.body.appendChild(elt) elt.click() //document.body.removeChild(elt) } else { console.log('chapitreClick / chapitre - ',url); chapitreAff(num, url); } } function chapitreAff(chapNum, url) { console.log("chapitreAff " + chapNum + " " + url) //Formatage de la page document.querySelector('#aff').style.borderWidth = "2px" displayPdfTools(true) lienAccueil(false); //Ajoute dans l'historique //var url = urlSite + '/chap/' + url; history.pushState(null, null, urlSite + '/chapitre/' + url); if (pdfChap == null) { loadMyPdf(); } //Ouvre le chap var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (this.readyState == 4) { if (xhr.status === 200) { if (xhr.responseText.substring(0, 7) == "Erreur:") { diagMessage(xhr.responseText); } else { pdfChap.preparePdf(); pdfChap.chargePdf(urlSite + '/resultat/cache/chap' + chapNum + '-0.b64'); pdfChap.scrollY = 0; pdfChap.counterdown = "chap" pdfDownload = '/resultat/cache/chap' + chapNum + '.pdf' } //document.location="" } } } xhr.open('POST', urlSite + '/compil_chap.php', false); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send("chap=" + chapNum); } function displayPdfTools(bol) { var liste = ['downloadPdf ', 'zoomPdf']; for (var i = 0; i < liste.length; i++) { var elt = document.querySelector('#' + liste[i]); if (bol) { elt.style.display = "block" } else { elt.style.display = "none" } } } function lienAccueil(bol) { console.log("lienAccueil " + bol) var elt = document.querySelector('#lienAccueil'); if (bol) { elt.style.display = "block" } else { elt.style.display = "none" } } function affPresentation() { document.querySelector('#aff').innerHTML = `

ChingInfo.fr

Le site ChingInfo rassemble le travail de 8 ans d'enseignement en ISN, ICN, NSI et d'ateliers informatiques.

N'hésitez pas à proposer des améliorations à ces exercices via l'adresse castanet@chingatome.fr

Quelques projets liés à l'enseignement de l'informatique: `; }var sacAdos_liste=[] function chap_sacAdosAdd(ev){ console.log("chap_sacAdosAdd "+sacAdos_liste.length+" "+sacAdos_liste) var elt = ev.currentTarget; var num = elt.getAttribute('num'); //Ajoute ou enlève l'exercice du sac à dos if((pos=sacAdos_liste.indexOf(num))!==-1){ console.log("aaaaaaaaa "+pos) sacAdos_liste.splice(pos,1) } else{ sacAdos_liste.push(num) } //Affiche le cadre rouge if(sac_isExoSelect(num)){ elt.style.backgroundColor="red"; } else{ elt.style.backgroundColor="transparent"; } //Actualise le compteur sac_actualiseCompteur() } function sac_isExoSelect(num){ console.log("sac_isExoSelect "+num); if(sacAdos_liste.indexOf(num)!=-1){ return true; } else{ return false; } } function sac_actualiseCompteur(){ console.log("sac_actualise"); //Mise à jour du numéro d'exercice var compteur = document.querySelector("#navigation > :nth-child(16) > :nth-child(2)"); if((num=sacAdos_liste.length) == 0){ compteur.innerHTML=''; compteur.style.display="none" } else{ compteur.innerHTML=num; compteur.style.display="block" } console.log(compteur+" "+num); } function sacAdos_aff(){ console.log("sacAdos_aff "+sacAdos_liste.length) //Envoi la compilation var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4){ if (xhr.status === 200) { //Affiche la compilation console.log(xhr.responseText); if(xhr.responseText.substring(0,7)=="Erreur:"){ diagMessage(xhr.responseText); return; } pdfChap.preparePdf(); pdfChap.chargePdf(urlSite+'/resultat/compilation/'+xhr.responseText+'.b64'); pdfChap.scrollY=0; pdfDownload = '/resultat/compilation/'+xhr.responseText+'.pdf'; //document.location="" } } } xhr.open('POST', urlSite+'/compil_sacAdos.php', false); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send("l="+sacAdos_liste.join(",")); //Ferme les autres fenêtres nav_fermeChap() document.querySelector("#affExo").style.display="none" }class mpdf { constructor(idContain, isMobile) { console.log("constructor " + isMobile); //==== Existence du div if (document.getElementById(idContain) == null) return; //=== Entregistre valeur this.idContain = idContain this.isMobile = isMobile; //===== Variable if (isMobile) { this.col = 1; } else { this.col = 2; } this.navPlus = null; this.url = null; this.loadRapide = true; this.pdfDocDoc = null; this.loadRapide = true; this.mobile = false; this.scrollDelta = 0; this.scrollY = null; this.scrollYmin = 0; this.scrollYmax = 0; this.scrollYContinous = 0; this.barreScroll = null; this.maxContain = 3 this.bScrollBody = false; this.bLiftScroll = false; this.liftScroll = null; this.boutonScrollActive = false; this.scrollOff = false; this.bMouseScroll = false; this.chargeClone = false; this.pageNumNext = 0 this.pageLoaded = []; this.renderWait = false; this.heightPdfTotal = 0; this.liftScrollCoeff = 0 this.renderAll = false this.navFirefox = false; this.zoomStrict = false; this.zoomStrictSuper = false; this.idResize = null; this.navPlusHeight = 0; this.vignette = false; this.callBackAfterCharge = null; this.titre = ""; this.enonceDate = null; this.correctionDate = null; this.exoPublie = null; this.timezone = null; this.touchMoveY = null; this.mouseMoveY = null; this.continueMoveY = [0, 0, 0, 0]; this.lastWheel = 0; this.loadTask; this.counterdown = "" } mySelector(x) { //console.log('#' + this.idContain + ' ' + x); return document.querySelector('#' + this.idContain + ' ' + x); } mySelectorAll(x) { return document.querySelectorAll('#' + this.idContain + ' ' + x); } preparePdf() { console.log("preparePdf " + this); this.timeDebut = Date.now(); this.divContain = document.getElementById(this.idContain); //console.log("aaaaaaaa " + this.divContain); //===== Efface le div var range = document.createRange(); range.selectNodeContents(this.divContain); range.deleteContents(); //this.divContain.innerHTML=""; //===== Vérifie l'existence des contains this.maxContain = (this.chargeClone ? 3 : 1); var contain = []; for (var i = 0; i < this.maxContain; i++) { //pdfContain var idContain = 'pdfContain' + i; var holder; if (this.mySelector('#' + idContain) == null) { contain[i] = document.createElement("div"); contain[i].id = idContain; contain[i].style.position = "relative" contain[i].style.alignSelf = "start" } else { contain[i] = this.mySelector('#' + idContain); } //Place à prendre if (i < this.col) { contain[i].style.display = "block"; contain[i].style.flex = "1"; } else { //contain.style.display="none"; contain[i].style.flex = "0"; } } //=====Ajoute la barre de séparation var barre = []; for (var i = 0; i < 2; i++) { barre[i] = document.createElement("div"); //barre.style.position = "absolute"; barre[i].style.width = "1px"; barre[i].style.height = "100%"; barre[i].style.left = ((i + 1) * 100 / this.col) + "%"; barre[i].style.backgroundColor = "black"; barre[i].style.zIndex = "10"; barre[i].id = "barreVertical" + i; } //====== Ajoute tout le monde this.divContain.appendChild(contain[0]); if(this.maxContain>1){ this.divContain.appendChild(barre[0]); this.divContain.appendChild(contain[1]); } if(this.maxContain>2){ this.divContain.appendChild(barre[1]); this.divContain.appendChild(contain[2]); } //=== gestion des paramètre this.pdfContain0 = this.mySelector("#pdfContain0") this.pdfContain1 = this.mySelector("#pdfContain1") this.pdfContain2 = this.mySelector("#pdfContain2") //===== Formatage du div if (!this.vignette) { //this.divContain.style.position="relative"; //this.divContain.style.flex="1"; this.divContain.style.display = "flex"; } this.divContain.style.overflow = "hidden"; this.divContain.style.margin = "0px auto"; //===== Evenement du div //lié à la souris var scope = this this.eventA = this.eventB = (e) => { this.scrollTouchStop(e); } this.eventC = (e) => { this.resizeWindow(e); } this.eventD = (e) => { this.scrollKey(e); } this.divContain.addEventListener("mousedown", (e) => { this.scrollMouseDown(e); }, { passive: false }); this.divContain.addEventListener("mouseleave", (e) => { this.scrollMouseOut(e); }, false); this.divContain.addEventListener("mouseup", (e) => { this.scrollMouseUp(e); }), { passive: false }; this.divContain.addEventListener("mousemove", (e) => { this.scrollMouseMove(e); }, { passive: false }); this.divContain.addEventListener("wheel", (e) => { this.scrollWheel(e); }, { passive: false }); //lié au toucher this.divContain.addEventListener("touchstart", (e) => { this.scrollTouchStart(e); }, { passive: false }); this.divContain.addEventListener("touchmove", (e) => { this.scrollTouchMove(e); }, { passive: false }); this.divContain.addEventListener("touchend", (e) => { this.scrollTouchEnd(e); }, { passive: false }); //lié à la fenêtre window.addEventListener("resize", this.eventC, { passive: false }); //lié aux touche document.addEventListener('keydown', this.eventD, false, { passive: false }); } /*======== ================== ============== ============== */ scrollMove(mvt, coef) { if (mvt != 0) { //console.log("scrollinfo "+mvt+" "+this.scrollDelta+" "+this.heightPdf); //Continuite defilement : pas pour wheel this.continueMoveY.push(mvt * coef); this.continueMoveY = this.continueMoveY.slice(-4); this.changeScroll(-mvt); } } scrollMouseDown(ev) { console.log("ooooooooooo 1"); this.bMouseScroll = true; this.mouseMoveY = ev.clientY; this.continueMoveY = [0, 0, 0, 0]; this.scrollYContinous = 0; } scrollMouseOut(ev) { console.log("ooooooooooo 2 "); this.bMouseScroll = false; this.bLiftScroll = false; } scrollMouseUp(ev) { console.log("ooooooooooo 3"); this.bMouseScroll = false; this.bLiftScroll = false this.scrollContinue(1); } scrollMouseMove(ev) { if (this.bMouseScroll) { var mvt = 0; mvt = this.mouseMoveY - ev.clientY; this.mouseMoveY = ev.clientY; //console.log("ooooooooooo 33"+mvt); // Scroll this.scrollMove(mvt, 1); } if (this.bLiftScroll) { //console.log("ooooooooooo 34"); this.scrollY -= ev.movementY / this.liftScrollCoeff; //console.log("ooooooooooopppppppppppppp "+this.liftScrollCoeff); this.updateScroll() } } scrollWheel(ev) { //this.actualiseAffichage() //console.log("wheel ............"+ev.deltaY+" "+ev.detail); var mvt; if (ev.deltaY < 0) mvt = -100; else mvt = 100; mvt = Math.max(-1, Math.min(1, ev.deltaY)) * 25 if (this.lastWheel + 40 < Date.now()) { //console.log("zzzz") if (this.lastWheel + 400 > Date.now()) { mvt = mvt * 4 } this.lastWheel = Date.now() } else { mvt = 0 } this.changeScroll(-mvt); } scrollTouchStart(ev) { //ev.preventDefault(); //ev.stopPropagation(); console.log("ooooooooooo 4"); this.touchMoveY = ev.touches[0].clientY; this.continueMoveY = [0, 0, 0, 0]; this.scrollYContinous = 0; } scrollTouchMove(ev) { ev.preventDefault(); ev.stopPropagation(); var mvt = this.touchMoveY - ev.touches[0].clientY; this.touchMoveY = ev.touches[0].clientY; this.scrollMove(mvt, 6); } scrollTouchEnd(ev) { console.log("ooooooooooo 6"); this.scrollMouseUp(ev) } scrollLiftDown(ev) { console.log("ll"); this.bLiftScroll = true; ev.preventDefault(); ev.stopPropagation(); } scrollKey(ev) { console.log("xxxxxxxxH " + this.divContain) if (this.scrollOff) return; console.log('scrollKey ' + ev.keyCode + ' ' + this.heightContaint); switch (ev.keyCode) { case 33: this.changeScroll(this.heightContaint); break; case 34: this.changeScroll(-this.heightContaint); break; case 38: this.changeScroll(40); break; case 40: this.changeScroll(-40); break; } } /*======== ================== ============== ============== */ resizeWindow() { console.log("resizeWindow"); if (this.idResize != null) { clearTimeout(this.idResize); } this.miseAjourParametre(); this.idResize = setTimeout((e) => { this.updateScroll(); this.annotationsPosition(e); }, 500); } miseAjourParametre() { console.log("miseAjourParametre()") this.heightContaint = parseInt(this.divContain.offsetHeight) this.heightPdf = parseInt(this.pdfContain0.offsetHeight); this.heightPdfTotal = this.heightPdf / (this.pageNumNext - 1) * this.pdfNumPages; //==== //==== Scroll //Definition de certaines constantes pour le scroll if (this.zoomStrict) { console.log("zoomStrict heightContaint:" + this.heightContaint + " heightPdf:" + this.heightPdf); //Ne permet pas au pdf de déborder if (this.heightContaint * this.col > this.heightPdf) { //Pdf plus petit que page console.log("pdf plus petite que la page " + this.heightContaint + " " + this.heightPdf + " " + this.col); this.scrollYmin = 0 this.scrollYmax = this.heightContaint * this.col - this.heightPdf; if (this.zoomStrictSuper) { this.scrollYmin = 0; } } else { this.scrollYmin = this.heightContaint * this.col - this.heightPdf; this.scrollYmax = 0; console.log("pdf plus grand que la page " + this.heightContaint + " " + this.heightPdf + " " + this.col + " " + this.scrollYmin + " " + this.scrollYmax); } } else { console.log("????????") this.scrollYmin = -this.heightContaint / this.heightPdf * this.col + 20 / this.heightPdf; this.scrollYmax = 1 - 20 / this.heightPdf; } if (this.scrollYmin == 0) { this.liftScrollCoeff = 0; } else { this.liftScrollCoeff = (this.heightContaint - 25) / (this.scrollYmin); } this.updateScroll(); //console.log("eee a " + this.heightContaint + " " + this.heightPdf + " " + this.scrollYmin + " " + this.scrollYmax + " " + this.col+" "+this.liftScrollCoeff) } /*======== ================== ============== ============== xxxxxxx */ chargeNextPage() { console.log("chargeNextPage "+this.pageNumNext+" "+this.pdfNumPages+" "+this.renderWait+" "+this.pageLoaded) if ((this.pageNumNext <= this.pdfNumPages) && (!this.renderWait)) { console.log("chargeNextPage A") if (this.pageLoaded.indexOf(this.pageNumNext) != false) { console.log("chargeNextPage B") this.renderWait = true this.pageLoaded.push(this.pageNumNext) this.pdfDocDoc.getPage(this.pageNumNext).then((resolve, reject) => { this.renderPage(resolve); }); } } } updateScroll() { //Verifie si le scroll est bloque console.log("updateScroll " + this.divContain +" "+this.scrollY + " " + this.scrollYmin) if (this.scrollOff) return; //Gère le scroll min et max if (this.scrollY <= this.scrollYmin) { this.scrollY = this.scrollYmin this.chargeNextPage() } if (this.scrollY > this.scrollYmax) { this.scrollY = this.scrollYmax; } //Gère l'affichage d'un bout de page manquant if(-scrollY+this.heightPdf 1) { this.pdfContain1.style.top = (this.scrollY - this.heightContaint) + "px"; //console.log("eeee bbbb "+this.scrollY+" "+this.heightContaint+" "+this.pdfContain1.style.top) } if (this.col > 2) { this.pdfContain2.style.top = (this.scrollY - 2 * this.heightContaint) + "px"; } //Affichage de navPlus if (this.navPlus != null) { if (this.scrollY == 0) { if (parseInt(this.navPlus.style.height) == 0) { requestAnimationFrame(() => { this.navPlus.style.height = '0px'; this.navPlus.style.transition = ''; requestAnimationFrame(() => { this.navPlus.style.height = this.navPlusHeight + 'px'; this.navPlus.style.transition = 'height 0.3s ease-out'; }); }); } } else { if (parseInt(this.navPlus.style.height) != 0) { requestAnimationFrame(() => { this.navPlus.style.height = this.navPlusHeight + 'px'; this.navPlus.style.transition = ''; requestAnimationFrame(() => { this.navPlus.style.transition = 'height 0.3s ease-out'; }); }); } } } if (Math.abs(this.scrollYContinous) > 1) { //console.log("scrollYContinous "+this.scrollYContinous); this.scrollYContinous = 0.9 * this.scrollYContinous; setTimeout(() => { this.changeScroll(this.scrollYContinous) }, 10); } //Actualise la position de l'ascenseur / lift //console.log("ffffffff "+ ((this.heightPdf - this.scrollY) / this.heightPdf)); this.liftScroll.style.top = (this.scrollY * this.liftScrollCoeff) + "px"; //Action différentiée pour le changement de scroll this.callbackScroll(); } callbackScroll() { } changeScrollPage(ev) { console.log("changeScrollPage B " + this.divContain) if (this.scrollOff) return; console.log("changeScrollPage"); var exoNum = ev.target.getAttribute("exercice"); this.scrollY = posExo[exoNum]; this.updateScroll(); } changeScroll(scrollAdd) { //console.log("changeScroll A "+this.divContain+" "+scrollAdd+" "+this.scrollDelta) if (this.scrollOff) return; //console.log("changeScroll B"); if (this.pdfContain0 == null) return; //console.log("changeScroll C"); this.scrollY = this.scrollY - scrollAdd * 2 * this.scrollDelta; this.scrollY += scrollAdd; //console.log("mpdfchangeScroll " + scrollAdd + " " + this.scrollY); this.updateScroll(); } scrollContinue(coef) { //console.log("scrollContinue D " + this.divContain) if (this.scrollOff) return; //Scroll continue var mean = (this.continueMoveY[0] + this.continueMoveY[1] + this.continueMoveY[2] + this.continueMoveY[3]) / 4; this.continueMoveY = [0, 0, 0, 0]; //console.log("eeeeeeeeeeeeeeee "+mean); if (Math.abs(mean) > 10) { console.log("scrollcontinue : " + this.continueMoveY + " " + mean); this.scrollYContinous = -coef * mean; this.changeScroll(0); } } //======================= annotationsSearch(pdfPage, div, viewport, scale) { console.log("annotationsSearch " + pdfPage + " " + div.id + " " + viewport + " " + scale) var result; pdfPage.getAnnotations().then((annotations) => { var view = pdfPage.view; div.setAttribute("viewWidth", pdfPage.view[2]); //console.log("a"+pdfPage.pageIndex); //console.log(annotations) for (var i = 0; i < annotations.length; i++) { //console.log("kkkkkkkkkkkkk " + annotations[i].url) var el = null; if (annotations[i].url == null) { el = document.createElement("div"); el.style.display = "inline-block"; el.className = "annotation" var commentaire = annotations[i]["contents"]; commentaire = commentaire.replace(/'/g, " "); for (var j = 0; j < 32; j++) { commentaire = commentaire.replace(String.fromCharCode(j), ""); } //Creation de l'action var re = /sacados\/([0-9]+)$/; var num = commentaire.match(re); if ((num != null) && (num.length == 2)) { //===Sac a dos el.className = "annotation global_lienSacAdos" //En rouge si déjà sélectionné var regexp = new RegExp('^[0-9]+-' + num[1] + '$'); for (var j = 0; j < window.exoSacAdos.length; j++) { if (regexp.test(window.exoSacAdos[j])) { el.style.backgroundColor = "red"; } } //Evenemennt el.setAttribute('num', num[1]); el.setAttribute("myClick", 'sacAdos'); } else { //==Siimp le commentaire var c = commentaire.replace(/\n/g, "
"); var c = c.replace(/\r/g, "
"); el.setAttribute("myClick", "diagMessage"); el.setAttribute("diagMessage", c); } } else { //Lien vers une page web var url = annotations[i].url; if ((result = /\/exercice\/([0-9]+)$/.exec(url)) != null) { //Ouvre un lien exercice dans chingatome url = url.replace('/exercice/', '/exo/'); el = document.createElement("span"); el.className = "annotation global_lienCorrection" el.setAttribute("alt", "correction " + result[1]) el.setAttribute("myClick", "affExoCorrec") el.setAttribute('numExo', result[1]); //el.setAttribute("href", url); //el.innerHTML="a" } else if ((result = /\/e([0-9]+)-([0-9]+)-([0-9]+)/.exec(url)) != null) { //Ouvre un lien exercice dans le sous domaine el = document.createElement("span"); el.className = "annotation global_lienCorrection" el.setAttribute("alt", "aff correction") el.setAttribute('p', result[1]); el.setAttribute('c', result[2]); el.setAttribute('e', result[3]); //el.setAttribute("href", url); el.setAttribute('myClick', 'sd_affCorrec'); } else if ((result = /\/q([0-9]+)-([0-9]+)-([0-9]+)/.exec(url)) != null) { //Ouvre un lien exercice dans le sous domaine el = document.createElement("span"); el.className = "annotation global_lienCorrection" el.setAttribute("alt", "aff correction") el.setAttribute('p', result[1]); el.setAttribute('c', result[2]); el.setAttribute('e', result[3]); //el.setAttribute("href", url); el.setAttribute('myClick', 'sd_qrcodeCorrec'); } else if ((result = /\/info-([0-9]+)-(.*)$/.exec(url)) != null) { //Ouvre un lien exercice dans le sous domaine el = document.createElement("span"); el.className = "annotation global_lienInfo" el.setAttribute('n', result[1]); el.setAttribute('f', result[2]); //el.setAttribute("href", url); el.setAttribute('myClick', 'info_lien'); } else { if ((result = /signalezErreur-([0-9]+)$/.exec(url)) != null) { el = document.createElement("span"); el.className = "annotation" //Ouvre la boite à dialogue pour signaler erreur el.setAttribute('numExo', result[1]); el.setAttribute('myclick', 'ex_mailBlock'); } else { el = document.createElement("a"); el.className = "annotation" el.setAttribute("href", url); } } } el.setAttribute("target", "chingatome"); var r = annotations[i].rect; el.style.position = "absolute"; var rect = pdfjsLib.Util.normalizeRect([ r[0], view[3] - r[1] + view[1], r[2], view[3] - r[3] + view[1]]); el.setAttribute("annWidth", rect[2] - rect[0]); el.setAttribute("annHeight", rect[3] - rect[1]); el.setAttribute("annLeft", r[0]); el.setAttribute("annTop", 1 * r[3]); el.setAttribute("annId", div.id); //Nouveau el.setAttribute("annWidth", r[2] - r[0]); el.setAttribute("annHeight", r[3] - r[1]); el.setAttribute("annLeft", r[0]); el.setAttribute("annTop", view[3] - r[1]); el.setAttribute("annPdfWidth", view[2]); //Copie dans les colonnes if (this.chargeClone) { var listeHolder = [this.pdfContain0, this.pdfContain1, this.pdfContain2] for (var k = 1; k < 3; k++) { var eltClone = el.cloneNode(false) listeHolder[k].querySelector("#div" + pdfPage._pageIndex).appendChild(eltClone); } } /* var transform = viewport.transform; //var transformStr = 'matrix(' + transform.join(',') + ')'; //el.style.transform=transformStr; var transformOriginStr = -rect[0] + 'px ' + -rect[1] + 'px'; //el.style.transformOrigin=transformOriginStr; */ div.appendChild(el); } this.annotationsActive(pdfPage._pageIndex) this.annotationsPosition(pdfPage._pageIndex) }); } annotationsActive(numPage) { console.log("annotationsActive "+this.maxContain) var listeContain = [this.pdfContain0, this.pdfContain1, this.pdfContain2]; for (var j = 0; j < this.maxContain; j++) { var liste = listeContain[j].querySelectorAll("#div" + numPage + " .annotation"); for (var i = 0; i < liste.length; i++) { var result; if ((result = liste[i].getAttribute('myClick')) != null) { if (result == 'sd_affCorrec') { //Creation du lien liste[i].addEventListener('click', sd_affCorrec); //liste[i].addEventListener('touchstart',sd_affCorrec); } if (result == 'affExoCorrec') { liste[i].addEventListener('click', chap_affExoCorrec, true); } if (result == 'sd_qrcodeCorrec') { liste[i].addEventListener('click', sd_qrcodeCorrec, true); } if (result == 'sacAdos') { liste[i].addEventListener('click', chap_sacAdosAdd); } if (result == 'ex_mailBlock') { liste[i].addEventListener('click', ex_mailBlock); } if (result == "diagMessage") { const msg = liste[i].getAttribute('diagMessage') liste[i].addEventListener('click', () => { diagMessage(msg); }); } } } } } annotationsPosition(numPage) { console.log("annotationsPosition " + numPage); //scale=div.clientWidth/pdfPage.view[2]; //Repositionne chaque annotation var listeContain = [this.pdfContain0, this.pdfContain1, this.pdfContain2] for (var j = 0; j < this.maxContain; j++) { var liste = listeContain[j].querySelectorAll("#div" + numPage + " .annotation"); var liste = listeContain[j].querySelectorAll(".annotation"); var divVal = {}; //console.log("kkkkkkkkkkkkkkaaaaa " + liste.length); for (var i = 0; i < liste.length; i++) { var idDiv = liste[i].getAttribute("annId"); if (true || divVal[idDiv + "ViewWidth"] == undefined) { divVal[idDiv + "ViewWidth"] = this.mySelector('#' + idDiv).getAttribute("viewWidth"); divVal[idDiv + "ClientWidth"] = this.mySelector('#' + idDiv).clientWidth; divVal[idDiv + "ClientHeight"] = this.mySelector('#' + idDiv).clientHeight; divVal[idDiv + "Scale"] = divVal[idDiv + "ClientWidth"] / liste[i].getAttribute('annPdfWidth'); } //console.log(divVal) var scale = divVal[idDiv + "Scale"]; var myClick = liste[i].getAttribute('myclick'); if ((myClick == 'affExoCorrec') || (myClick == 'sacAdos') || (myClick == 'sd_affCorrec')) { var zoom = 1.4; } else { var zoom = 1; } var w = liste[i].getAttribute("annWidth") * scale; var h = liste[i].getAttribute("annHeight") * scale; liste[i].style.width = (w * zoom) + "px"; liste[i].style.height = (h * zoom) + "px"; //console.log("Taille annotation : "+liste[i].getAttribute("annWidth")+" "+liste[i].style.height); liste[i].style.left = (liste[i].getAttribute("annLeft") * scale - w * ((zoom - 1) / 2)) + "px"; liste[i].style.top = (divVal[idDiv + "ClientHeight"] - liste[i].getAttribute("annTop") * scale - h * ((zoom - 1) / 2)) + "px"; liste[i].style.top = (liste[i].getAttribute("annTop") * scale - h) + "px"; //Nouveau var w = liste[i].getAttribute("annWidth") * scale; //liste[i].style.top = liste[i].getAttribute('annTop') * divVal[idDiv + "Scale"] - h - h * ((zoom - 1) / 2); } } //Extra parametre if (this.callBackAfterCharge != null) { this.callBackAfterCharge(); } } //======================= chargeInfoExercice() { console.log("chargeInfoExercice"); var xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { //Efface toutes les images si nécessaires var myNode = this.mySelector('#domNavExo'); if (myNode !== null) { while (myNode.firstChild) { myNode.removeChild(myNode.firstChild); } el = myNode.nextSibling; } //Crée les nouvelles images a = xhr.response; for (var b in a) { if (a.hasOwnProperty(b)) { var img = document.createElement("img"); img.src = racineUrl + "/image/sousDomaine/nombre" + b + ".png"; console.log("A VERIFIER L UTILITE DE CE CODE") img.style.width = "30px"; img.style.marginLeft = "30px"; img.style.cursor = "pointer"; img.setAttribute("exercice", b); img.addEventListener("click", (e) => { this.changeScrollPage(e); }); posExo[b] = a[b]; myNode.appendChild(img); } } } else { document.title = "Error code " + xhr.status; } } } xhr.open("GET", racineUrl + "/sousDomaineAffExo-scroll.php?p=" + getProf + "&f=" + getFeuille + "&t=" + getType); xhr.send(null); } chargePdf(url,cache=false) { console.log("chargePdf " + url + " " + this.col + " " + this.maxContain); this.url = url; this.pageLoaded = [] //=== Vide tous les holders var liste = [this.pdfContain0, this.pdfContain1, this.pdfContain2]; for (var i = 0; i < this.maxContain; i++) { var myNode = liste[i]; if (myNode == null) continue; var range = document.createRange(); range.selectNodeContents(myNode); range.deleteContents(); } //=== Ajoute la barre du scroll if (this.mySelector('#myPdfLiftScroll') == null) { //console.log("aaaaaaaa " + this.isMobile) this.barreScroll = document.createElement("div"); this.barreScroll.id = "myPdfBarreScroll"; this.divContain.appendChild(this.barreScroll); this.liftScroll = document.createElement("div"); this.liftScroll.id = "myPdfLiftScroll"; this.liftScroll.style.top = "0px"; this.barreScroll.appendChild(this.liftScroll); this.liftScroll.addEventListener("mousedown", (e) => { this.scrollLiftDown(e) }); } //==== Ajoute le counterdown if (false) { var elt = document.createElement('div'); elt.id = "counterdownDiv_" + this.counterdown; elt.className = "myPdf_counterdownDiv" elt.style.display = "none" elt.innerHTML = ''; this.divContain.appendChild(elt) } //=== Chargement du nouveau PDF if (this.scrollY === null) { this.scrollY = 0; } //=== charge le pdf var xhr = new XMLHttpRequest(); var scope = this; pdfjsLib.GlobalWorkerOptions.workerSrc = urlSite + "/pdfjs-" + versionPdf + "/pdf.worker.js" xhr.onreadystatechange = () => { if (xhr.readyState == 4) { if (xhr.status == 200) { console.log("chargePdf - fin " + xhr); //==== Rattrape des headers pour suite du java var tmp = xhr.getResponseHeader('myPdf-enonccommenteDate'); if (tmp != null) scope.enonceDate = tmp tmp = xhr.getResponseHeader('myPdf-correctionDate'); if (tmp != null) scope.correctionDate = tmp tmp = xhr.getResponseHeader('myPdf-exoPublie'); if (tmp != null) scope.exoPubliee = tmp tmp = xhr.getResponseHeader('myPdf-timezone'); if (tmp != null) scope.timezone = tmp //console.log('enonceDate:' + scope.enonceDate + " correctionDate" + scope.correctionDate); //==== Chargement du pdf if (xhr.responseText.substring(0, 4) == "MSG:") { console.log("Gestion message erreur"); diagMessage(xhr.responseText.substring(4)); scope.loadTask = pdfjsLib.getDocument('/image/sousDomaine/accueil-orig.pdf'); } else if (xhr.responseText.substring(0, 7) == "Erreur:") { this.divContain.innerHTML = xhr.responseText.substring(7) return; } else { var myData; try{ myData = atob(xhr.responseText) } catch(error){ setTimeout(() => {scope.chargePdf(url,true)},4000); console.log(error) return; } scope.loadTask = pdfjsLib.getDocument({ data: myData, disableFontFace: false, disableRange: true, disableStream: true, disableAutoFetch: true }); } scope.loadTask.promise.then((resolve, reject) => { scope.pdfLoad(resolve); })//.catch(scope.errorPdf); } } }; //rajoute le drapeau b64 //url = url + (url.indexOf('?') == -1 ? "?" : "&") + 'b64=1&error-cache=1'; if(cache){ url = url + (url.indexOf('?') == -1 ? "?" : "&") + 'error=yes'; } console.log("chargePdf - url - " + url) //Ouverture xhr.open("GET", url, true); if(cache){ xhr.setRequestHeader('Cache-Control', 'no-cache'); } xhr.send(); //console.log("aaaaaaaaaa "+this.url); //var loadTask = pdfjsLib.getDocument({url:this.url,disableFontFace:true}); } errorPdf(error) { console.log("errorPdf") window.alert("Erreur de chargement du fichier pdf.\nContactez l'administrateur du site " + error); } pdfLoad(pdfDoc) { console.log('pdfDoc ' + this); console.log('pdfDoc ' + this + " " + this.enonceDate); /* NE PAS EFFACER - A GARDER pdfDoc.getMetadata().then(function(stuff) { if(stuff.info != null){ this.titre=stuff.info.Title; this.keywords=stuff.info.Keywords }}); */ //== Ouvre le countdown if (false && this.counterdown != "") { document.querySelector('#counterdownDiv_' + this.counterdown).style.display = 'block'; } //console.log("eeeeeeeeeeee yyyyyyy"+pdfDoc.getMetadata(); //S'éxécute asynchrone lors fin téléchargement. console.log("pdfLoad " + pdfDoc.numPages); this.pdfDocDoc = pdfDoc; //Efface toutes les pages pdf this.pagePdf = new Array(); this.pdfNumPages = pdfDoc.numPages; //Charge chaque page du pdf if (this.loadRapide) { pdfDoc.getPage(1).then((resolve, reject) => { this.renderPage(resolve); }); } else { for (var num = 1; num <= pdfDoc.numPages; num++) { pdfDoc.getPage(num).then(renderPage).catch(errorRenderPage); } } } errorRenderPage(error) { window.alert("Erreur: " + error); } renderPage(page) { //if(page.pageIndex!=1) return; var numPage = page._pageIndex; console.log("renderPage " + page + " " + numPage); //Charge la page suivante this.pageNumNext = parseInt(page._pageIndex) + 2; //S'éxécute de manière asynchrone après récupération d'une page /* if(pagePdf[page.pageIndex]==null){ pagePdf[page.pageIndex]=page; } */ //==== Chargement containPdf0 var idDiv = "div" + numPage; if (this.mySelector('#' + idDiv) == null) { var div = document.createElement('div'); div.id = idDiv; div.style.position = "relative"; //div.style.width="50%" this.pdfContain0.appendChild(div); } var eltCanvas = this.mySelector('#canvas-' + numPage); if (eltCanvas == null) { //Crée le conteneur eltCanvas = document.createElement('canvas'); eltCanvas.id = 'canvas-' + numPage; eltCanvas.style.width = "100%"; this.mySelector('#' + idDiv).appendChild(eltCanvas); //Ajoute trait entre page var trait = document.createElement('div'); if (this.col == 1) { trait.className = "myPdfSeparation"; } else { trait.className = "myPdfTrait"; } this.pdfContain0.appendChild(trait); } //==== Charge le pdf dans le premier canevas div = this.mySelector("#div" + numPage); var viewport = page.getViewport({ scale: 1 }); // Autre //var scale=canvas.width/viewport.width*0.9; var scale = document.body.clientWidth / viewport.width * 1.5; //Prend body car div pas chargé pour 1er page/pdf if (scale < 1.8) scale = 1.8; if (scale > 2.5) scale = 2.5; var viewport = page.getViewport({ scale: scale }); var ctx = eltCanvas.getContext('2d'); eltCanvas.width = viewport.width; eltCanvas.height = viewport.height; console.log("bbbbbbb " + eltCanvas.height) var renderContext = { canvasContext: ctx, viewport: viewport, enableWebGl: true }; var renderTask = page.render(renderContext); renderTask.promise.then( () => { console.log("RenderTask " + page._pageIndex + " : " + (Date.now() - this.timeDebut) + "s"); //Fin de chargement de la page var canvasOld = this.mySelector('#canvas-' + page._pageIndex); var div = this.mySelector('#div' + page._pageIndex); if (div == null) return; //Copie dans le cas de l'affichage multi-colonne if (this.chargeClone) { //console.log("mmmmmmmddddddddd "+page._pageIndex+" "+canvasOld+" "+div); var liste = [this.pdfContain0, this.pdfContain1, this.pdfContain2] for (var i = 1; i < 3; i++) { //console.log(i) var clone = div.cloneNode(true); var can = clone.firstChild; //console.log(can) can.getContext('2d').drawImage(canvasOld, 0, 0); liste[i].appendChild(clone); } } //Actualise les dimensions du pdf this.renderWait = false; this.miseAjourParametre(); this.updateScroll(); //Affiche les annotations / liens this.annotationsSearch(page, div, viewport, scale); //=== Première page : /* if (page._pageIndex == 0) { //Fonctionne que pour la 1er page : décalage style.top if (this.chargeClone) { var decal = parseInt(this.mySelector('#pdfContain0').clientHeight); console.log("mmmmmmmm"); //this.pdfContain1.style.top = "-" + decal + "px"; this.pdfContain2.style.top = "-" + (2 * decal) + "px" } } */ //RenderAll if (this.renderAll) { if (this.pageNumNext - 1 != this.pdfNumPages) { this.renderWait = true this.pageLoaded.push(mpdfPrinc.pageNumNext) this.pdfDocDoc.getPage(mpdfPrinc.pageNumNext).then((resolve, reject) => { mpdfPrinc.renderPage(resolve); }); } else { this.scrollY = -this.renderAll * mpdfPrinc.heightPdfTotal; this.updateScroll(); } } return; if (this.loadRapide) { //console.log('fffffffff'+page._pageIndex+" "+(this.pdfDocDoc)); if (page._pageIndex < this.pdfDocDoc.numPages - 1) { console.log("Lit la prochaine page " + page._pageIndex); //pdfDocDoc.getPage(2).then(renderPage); this.pdfDocDoc.getPage(parseInt(page._pageIndex) + 2) .then((resolve, reject) => { this.renderPage(resolve); }); } } //Verifie la fin du chargement this.pdfNumPages--; //document.title+=" - "+pdfNumPages+" "+page.pageIndex; this.heightContaint = this.mySelector('#pdfContain0').offsetHeight; if (this.pdfNumPages == 0) { console.log("Durée chargement pdf : " + (Date.now() - this.timeDebut)); console.log("RenderTask Fin"); //Fin de chargement de toutes les pages this.actualiseAffichage(); this.changeScroll(this.scrollY);//xxxxxxxxxx this.activeAnnotations(); //Actualise les dimensions du pdf this.heightPdf = this.mySelector('#pdfContain0').offsetHeight; console.log("Durée chargement pdf : " + (Date.now() - this.timeDebut)); //Femer le countdown if (this.countdown != "") { var elt = document.getElementById('counterdownDiv_' + this.counterdown) elt.style.display = "none"; var elt = document.getElementById('counter_down_' + this.counterdown) elt.style.animation = "none"; } //Extra parametre if (this.callBackAfterCharge != null) { this.callBackAfterCharge(); } } else { //Page intermédiaire } } ); } actualiseAffichage() { console.log("actualiseAffichage " + this.col + " " + (this.bActualisePdf ? "oui" : "non")); for (var i = 0; i < this.maxContain; i++) { if (i < this.col) { this.mySelector('#pdfContain' + i).style.flex = "1"; } else { this.mySelector('#pdfContain' + i).style.flex = "0"; } /* document.getElementById("pdfContain"+i).style.width=(100/this.col)+"%"; document.getElementById("pdfContain"+i).style.left=(i*100/this.col)+"%"; */ } //Gestion des barres de séparation var barreVertical0 = this.mySelector('#barreVertical0').style; var barreVertical1 = this.mySelector('#barreVertical1').style; switch (this.col) { case 1: barreVertical0.left = "120%"; barreVertical1.left = "120%"; break; case 2: barreVertical0.left = "50%"; barreVertical1.left = "120%"; break; case 3: barreVertical0.left = "33.3333%"; barreVertical1.left = "66.6666%"; break; } /* //Render des pdf for(j=0;j { diagMessage(msg); }); } } else{ if(liste[i].getAttribute('target')!=null){ liste[i].className="annotation lienExterne" } } } } } }