Loading conllusvg/Sutra.html 0 → 100644 +282 −0 Original line number Diff line number Diff line <!DOCTYPE html><head><meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>Universal Dependencies on 漢譯佛典</title> <script src="conllusvgview.js"></script> <script src="conllusvgload.js"></script> <script> var Sutra=new Object(); Sutra.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/"; Sutra.init=function(){ var t=document.getElementById("top").cloneNode(true); t.style.position="static"; t.style.visibility="hidden"; document.body.appendChild(t); Sutra.svg=new Array(); Sutra.pre=new Array(); Sutra.timer=setTimeout("clearTimeout(Sutra.timer);Sutra.checkview()",200); Sutra.volchange(); } Sutra.checkview=function(){ var t,r,b,i,x; Sutra.timer=setTimeout("clearTimeout(Sutra.timer);Sutra.checkview()",200); if(Sutra.curr==null) return; if(Sutra.svg[Sutra.curr]==null||Sutra.pre[Sutra.curr]==null){ Sutra.buildup(Sutra.curr); Sutra.lastTop=null; return; } if(Sutra.svg[Sutra.curr].style.position=="absolute"){ Sutra.svg[Sutra.curr].style.position="static"; Sutra.svg[Sutra.curr].style.visibility="visible"; } conllusvg.rewrite("pre"+Sutra.curr); r=Sutra.svg[Sutra.curr].getBoundingClientRect(); t=r.top; b=r.bottom; r=document.getElementById("top").getBoundingClientRect().bottom; x=Sutra.curr; if(t-r>20){ while(t-r>0){ i=Sutra.svg[Sutra.curr-1]; if(i==null) break; if(i.style.position=="absolute") break; Sutra.curr--; if(Sutra.curr==0) break; t=i.getBoundingClientRect().top; } } else if(b<r){ while(b<r){ i=Sutra.svg[Sutra.curr+1]; if(i==null) break; if(i.style.position=="absolute") break; Sutra.curr++; if(Sutra.curr==Sutra.currmax) break; b=i.getBoundingClientRect().bottom; } } if(Sutra.curr!=x){ if(Sutra.retrytimes>0){ Sutra.retrytimes--; Sutra.curr=parseInt(document.getElementById("count").value,10); t=Sutra.svg[Sutra.curr].getBoundingClientRect().top; if(Math.abs(t-r)>5){ if(document.scrollingElement==null) document.documentElement.scrollTop+=t-r; else document.scrollingElement.scrollTop+=t-r; } } else document.getElementById("count").value=Sutra.curr; } else if(Sutra.retrytimes>0) Sutra.retrytimes--; Sutra.lastTop=Sutra.svg[Sutra.curr].getBoundingClientRect().top; for(i=Sutra.curr+1;i<=Sutra.currmax;i++){ if(Sutra.svg[i]==null||Sutra.pre[i]==null){ Sutra.buildup(i); break; } if(Sutra.svg[i].style.position=="absolute"){ Sutra.svg[i].style.position="static"; Sutra.svg[i].style.visibility="visible"; } conllusvg.rewrite("pre"+i); r=Sutra.svg[i].getBoundingClientRect(); if(r.top-window.innerHeight-1000>0) break; } for(i=Sutra.curr-1;i>=0;i--){ if(Sutra.svg[i]==null||Sutra.pre[i]==null){ Sutra.buildup(i); break; } if(Sutra.svg[i].style.position=="absolute"){ if(Sutra.pre[i].textContent>""){ Sutra.svg[i].style.position="static"; Sutra.svg[i].style.visibility="visible"; } else break; } conllusvg.rewrite("pre"+i); r=Sutra.svg[Sutra.curr].getBoundingClientRect().top; if(Math.abs(r-Sutra.lastTop)>5){ if(document.scrollingElement==null) document.documentElement.scrollTop+=r-Sutra.lastTop; else document.scrollingElement.scrollTop+=r-Sutra.lastTop; Sutra.lastTop=r; } r=Sutra.svg[i].getBoundingClientRect(); if(parseInt(r.bottom,10)<-300) break; } } Sutra.buildup=function(x){ var t,i; if(Sutra.svg[x]==null){ t=document.createElementNS("http://www.w3.org/2000/svg","svg"); for(i=parseInt(x,10)+1;i<=Sutra.currmax;i++){ if(Sutra.svg[i]!=null) break; } t.style.position="absolute"; t.style.visibility="hidden"; if(i>Sutra.currmax) document.body.appendChild(t); else document.body.insertBefore(t,Sutra.svg[i]); Sutra.svg[x]=t; t.addEventListener("mousedown",Sutra.onmousedown); t.addEventListener("touchstart",Sutra.onmousedown); } if(Sutra.pre[x]==null){ t=document.createElement("pre"); t.style.display="none"; t.setAttribute("id","pre"+x); document.body.appendChild(t); Sutra.pre[x]=t; if(conllusvg.main["pre"+x]==null) conllusvg.view(Sutra.svg[x],"pre"+x); i=Sutra.volpath+"/"+("000"+x).slice(-3)+".txt"; conllusvg.loadRemote("pre"+x,Sutra.url+"files/"+encodeURIComponent(i)+"/raw?ref=master"); } } Sutra.volchange=function(){ var s,x; Sutra.clearSVG(); for(s in Sutra.pre){ if(Sutra.pre[s]!=null){ document.body.removeChild(Sutra.pre[s]); } Sutra.pre[s]=null; } s=document.getElementById("vol"); Sutra.volpath=s.options[s.selectedIndex].value; if(Sutra.tail==null) Sutra.tail=new Array(); if(Sutra.tail[Sutra.volpath]==null) Sutra.gettree(); else Sutra.writeSVG(); } Sutra.gettree=function(){ var p; if(Sutra.request==null){ Sutra.request=new XMLHttpRequest(); Sutra.request.onload=Sutra.ongettree; } if(Sutra.tail[Sutra.volpath]==null) p=1; else p=Math.floor(parseInt(Sutra.tail[Sutra.volpath],10)/100)+2; Sutra.request.open("GET",Sutra.url+"tree?per_page=100&path="+Sutra.volpath+"&page="+p); Sutra.request.send(); } Sutra.ongettree=function(e){ var i,s; if(Sutra.request.status==200){ s=Sutra.request.responseText; i=s.lastIndexOf('.txt"'); if(i<0) Sutra.writeSVG(); else{ Sutra.tail[Sutra.volpath]=s.substring(i-3,i); Sutra.gettree(); } } } Sutra.goto=function(){ Sutra.retrytimes=3; Sutra.writeSVG(); } Sutra.writeSVG=function(){ var c=document.getElementById("count"); Sutra.clearSVG(); Sutra.currmax=parseInt(Sutra.tail[Sutra.volpath],10); Sutra.curr=parseInt(c.value,10); if(Sutra.curr<0) Sutra.curr=0; if(Sutra.curr>Sutra.currmax) Sutra.curr=Sutra.currmax; c.value=Sutra.curr; Sutra.lastTop=null; } Sutra.clearSVG=function(){ var x; Sutra.curr=Sutra.lastTop=null; if(Sutra.svg!=null){ for(x in Sutra.svg){ if(Sutra.svg[x]!=null){ Sutra.svg[x].style.position="absolute"; Sutra.svg[x].style.visibility="hidden"; } } } if(document.scrollingElement==null) document.documentElement.scrollTop=0; else document.scrollingElement.scrollTop=0; } Sutra.onmousedown=function(e){ var x,y; if(Sutra.lastX==null){ Sutra.lastX=e.clientX; Sutra.lastY=e.clientY; return; } x=e.clientX-Sutra.lastX; y=e.clientY-Sutra.lastY; if(x*x+y*y>9){ Sutra.lastX=e.clientX; Sutra.lastY=e.clientY; return; } Sutra.lastX=null; x=e.currentTarget; for(y in Sutra.svg){ if(Sutra.svg[y]==x){ x=Sutra.volpath+"/"+("000"+y).slice(-3)+".txt"; window.open("editor-kanbun.html#"+Sutra.url+"files/"+encodeURIComponent(x)+"/raw?ref=master"); break; } } } Sutra.reload=function(){ var i,r; for(i=Sutra.curr;i<=Sutra.currmax;i++){ if(Sutra.svg[i]==null||Sutra.pre[i]==null) return; r=Sutra.svg[i].getBoundingClientRect(); if(r.top>window.innerHeight||r.bottom<0) return; r=Sutra.volpath+"/"+("000"+i).slice(-3)+".txt"; conllusvg.loadRemote("pre"+i,Sutra.url+"files/"+encodeURIComponent(r)+"/raw?ref=master"); } } Sutra.gitlab=function(){ var r=Sutra.volpath+"/"+("000"+Sutra.curr).slice(-3)+".txt"; window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r); } </script> <body onload="Sutra.init()"> <div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white"> <font size="+3"><b>楚辭</b></font> <font size="+3"><b>Universal Dependencies on 漢譯佛典</b></font> <select id="vol" onchange="Sutra.volchange()"> <option value="kanripo/kR6f0082/001" selected>佛說阿彌陀經</option> </select> <input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Sutra.goto()" /> <input type="button" value="GitLab" onclick="Sutra.gitlab()" /> <input type="button" value="Reload" onclick="Sutra.reload()" /> </div> </body> Loading
conllusvg/Sutra.html 0 → 100644 +282 −0 Original line number Diff line number Diff line <!DOCTYPE html><head><meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>Universal Dependencies on 漢譯佛典</title> <script src="conllusvgview.js"></script> <script src="conllusvgload.js"></script> <script> var Sutra=new Object(); Sutra.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/"; Sutra.init=function(){ var t=document.getElementById("top").cloneNode(true); t.style.position="static"; t.style.visibility="hidden"; document.body.appendChild(t); Sutra.svg=new Array(); Sutra.pre=new Array(); Sutra.timer=setTimeout("clearTimeout(Sutra.timer);Sutra.checkview()",200); Sutra.volchange(); } Sutra.checkview=function(){ var t,r,b,i,x; Sutra.timer=setTimeout("clearTimeout(Sutra.timer);Sutra.checkview()",200); if(Sutra.curr==null) return; if(Sutra.svg[Sutra.curr]==null||Sutra.pre[Sutra.curr]==null){ Sutra.buildup(Sutra.curr); Sutra.lastTop=null; return; } if(Sutra.svg[Sutra.curr].style.position=="absolute"){ Sutra.svg[Sutra.curr].style.position="static"; Sutra.svg[Sutra.curr].style.visibility="visible"; } conllusvg.rewrite("pre"+Sutra.curr); r=Sutra.svg[Sutra.curr].getBoundingClientRect(); t=r.top; b=r.bottom; r=document.getElementById("top").getBoundingClientRect().bottom; x=Sutra.curr; if(t-r>20){ while(t-r>0){ i=Sutra.svg[Sutra.curr-1]; if(i==null) break; if(i.style.position=="absolute") break; Sutra.curr--; if(Sutra.curr==0) break; t=i.getBoundingClientRect().top; } } else if(b<r){ while(b<r){ i=Sutra.svg[Sutra.curr+1]; if(i==null) break; if(i.style.position=="absolute") break; Sutra.curr++; if(Sutra.curr==Sutra.currmax) break; b=i.getBoundingClientRect().bottom; } } if(Sutra.curr!=x){ if(Sutra.retrytimes>0){ Sutra.retrytimes--; Sutra.curr=parseInt(document.getElementById("count").value,10); t=Sutra.svg[Sutra.curr].getBoundingClientRect().top; if(Math.abs(t-r)>5){ if(document.scrollingElement==null) document.documentElement.scrollTop+=t-r; else document.scrollingElement.scrollTop+=t-r; } } else document.getElementById("count").value=Sutra.curr; } else if(Sutra.retrytimes>0) Sutra.retrytimes--; Sutra.lastTop=Sutra.svg[Sutra.curr].getBoundingClientRect().top; for(i=Sutra.curr+1;i<=Sutra.currmax;i++){ if(Sutra.svg[i]==null||Sutra.pre[i]==null){ Sutra.buildup(i); break; } if(Sutra.svg[i].style.position=="absolute"){ Sutra.svg[i].style.position="static"; Sutra.svg[i].style.visibility="visible"; } conllusvg.rewrite("pre"+i); r=Sutra.svg[i].getBoundingClientRect(); if(r.top-window.innerHeight-1000>0) break; } for(i=Sutra.curr-1;i>=0;i--){ if(Sutra.svg[i]==null||Sutra.pre[i]==null){ Sutra.buildup(i); break; } if(Sutra.svg[i].style.position=="absolute"){ if(Sutra.pre[i].textContent>""){ Sutra.svg[i].style.position="static"; Sutra.svg[i].style.visibility="visible"; } else break; } conllusvg.rewrite("pre"+i); r=Sutra.svg[Sutra.curr].getBoundingClientRect().top; if(Math.abs(r-Sutra.lastTop)>5){ if(document.scrollingElement==null) document.documentElement.scrollTop+=r-Sutra.lastTop; else document.scrollingElement.scrollTop+=r-Sutra.lastTop; Sutra.lastTop=r; } r=Sutra.svg[i].getBoundingClientRect(); if(parseInt(r.bottom,10)<-300) break; } } Sutra.buildup=function(x){ var t,i; if(Sutra.svg[x]==null){ t=document.createElementNS("http://www.w3.org/2000/svg","svg"); for(i=parseInt(x,10)+1;i<=Sutra.currmax;i++){ if(Sutra.svg[i]!=null) break; } t.style.position="absolute"; t.style.visibility="hidden"; if(i>Sutra.currmax) document.body.appendChild(t); else document.body.insertBefore(t,Sutra.svg[i]); Sutra.svg[x]=t; t.addEventListener("mousedown",Sutra.onmousedown); t.addEventListener("touchstart",Sutra.onmousedown); } if(Sutra.pre[x]==null){ t=document.createElement("pre"); t.style.display="none"; t.setAttribute("id","pre"+x); document.body.appendChild(t); Sutra.pre[x]=t; if(conllusvg.main["pre"+x]==null) conllusvg.view(Sutra.svg[x],"pre"+x); i=Sutra.volpath+"/"+("000"+x).slice(-3)+".txt"; conllusvg.loadRemote("pre"+x,Sutra.url+"files/"+encodeURIComponent(i)+"/raw?ref=master"); } } Sutra.volchange=function(){ var s,x; Sutra.clearSVG(); for(s in Sutra.pre){ if(Sutra.pre[s]!=null){ document.body.removeChild(Sutra.pre[s]); } Sutra.pre[s]=null; } s=document.getElementById("vol"); Sutra.volpath=s.options[s.selectedIndex].value; if(Sutra.tail==null) Sutra.tail=new Array(); if(Sutra.tail[Sutra.volpath]==null) Sutra.gettree(); else Sutra.writeSVG(); } Sutra.gettree=function(){ var p; if(Sutra.request==null){ Sutra.request=new XMLHttpRequest(); Sutra.request.onload=Sutra.ongettree; } if(Sutra.tail[Sutra.volpath]==null) p=1; else p=Math.floor(parseInt(Sutra.tail[Sutra.volpath],10)/100)+2; Sutra.request.open("GET",Sutra.url+"tree?per_page=100&path="+Sutra.volpath+"&page="+p); Sutra.request.send(); } Sutra.ongettree=function(e){ var i,s; if(Sutra.request.status==200){ s=Sutra.request.responseText; i=s.lastIndexOf('.txt"'); if(i<0) Sutra.writeSVG(); else{ Sutra.tail[Sutra.volpath]=s.substring(i-3,i); Sutra.gettree(); } } } Sutra.goto=function(){ Sutra.retrytimes=3; Sutra.writeSVG(); } Sutra.writeSVG=function(){ var c=document.getElementById("count"); Sutra.clearSVG(); Sutra.currmax=parseInt(Sutra.tail[Sutra.volpath],10); Sutra.curr=parseInt(c.value,10); if(Sutra.curr<0) Sutra.curr=0; if(Sutra.curr>Sutra.currmax) Sutra.curr=Sutra.currmax; c.value=Sutra.curr; Sutra.lastTop=null; } Sutra.clearSVG=function(){ var x; Sutra.curr=Sutra.lastTop=null; if(Sutra.svg!=null){ for(x in Sutra.svg){ if(Sutra.svg[x]!=null){ Sutra.svg[x].style.position="absolute"; Sutra.svg[x].style.visibility="hidden"; } } } if(document.scrollingElement==null) document.documentElement.scrollTop=0; else document.scrollingElement.scrollTop=0; } Sutra.onmousedown=function(e){ var x,y; if(Sutra.lastX==null){ Sutra.lastX=e.clientX; Sutra.lastY=e.clientY; return; } x=e.clientX-Sutra.lastX; y=e.clientY-Sutra.lastY; if(x*x+y*y>9){ Sutra.lastX=e.clientX; Sutra.lastY=e.clientY; return; } Sutra.lastX=null; x=e.currentTarget; for(y in Sutra.svg){ if(Sutra.svg[y]==x){ x=Sutra.volpath+"/"+("000"+y).slice(-3)+".txt"; window.open("editor-kanbun.html#"+Sutra.url+"files/"+encodeURIComponent(x)+"/raw?ref=master"); break; } } } Sutra.reload=function(){ var i,r; for(i=Sutra.curr;i<=Sutra.currmax;i++){ if(Sutra.svg[i]==null||Sutra.pre[i]==null) return; r=Sutra.svg[i].getBoundingClientRect(); if(r.top>window.innerHeight||r.bottom<0) return; r=Sutra.volpath+"/"+("000"+i).slice(-3)+".txt"; conllusvg.loadRemote("pre"+i,Sutra.url+"files/"+encodeURIComponent(r)+"/raw?ref=master"); } } Sutra.gitlab=function(){ var r=Sutra.volpath+"/"+("000"+Sutra.curr).slice(-3)+".txt"; window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r); } </script> <body onload="Sutra.init()"> <div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white"> <font size="+3"><b>楚辭</b></font> <font size="+3"><b>Universal Dependencies on 漢譯佛典</b></font> <select id="vol" onchange="Sutra.volchange()"> <option value="kanripo/kR6f0082/001" selected>佛說阿彌陀經</option> </select> <input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Sutra.goto()" /> <input type="button" value="GitLab" onclick="Sutra.gitlab()" /> <input type="button" value="Reload" onclick="Sutra.reload()" /> </div> </body>