add AI engines
[uweb.git] / zh / searchurl / txt / markdeep.html
blobc5a1f15701a8115e268eaa782659a736d1464bb7
1 <head>
2 <script>window.markdeepOptions = {mode: 'script'};</script>
3 <script src="https://morgan3d.github.io/markdeep/latest/markdeep.min.js"></script>
4 <script id="MathJax-script" async src="https://fastly.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
5 <script>
6 function absFile(url) {
7 this.name=url;
8 this.slice = async(offset, length) =>{
9 const headers = new Headers();
10 headers.append('range', 'bytes=' + offset + '-' + ( offset + length -1).toString());
12 const opts = {
13 credentials: 'include',
14 headers : headers
17 const resp = await fetch( this.name, opts );
18 return await resp.arrayBuffer();
19 //alert(JSON.stringify(resp.headers));
20 //return await resp.text();
24 var file;
25 var blocksize = 20480;
26 function loadSlice(){
27 function render(u8array){
28 document.body.innerHTML = window.markdeep.format(new TextDecoder().decode(u8array),true);
29 MathJax.typesetPromise();
31 function setPageUrl(pageurl){
32 let a = document.createElement('a');
33 a.href = "i:5c"+pageurl;
34 a.click();
37 var url;
38 var page = 1;
39 var extrasize = blocksize; //extrasize should <= blocksize
40 let lhash = location.hash;
41 if(lhash){
42 if("p"!==lhash.charAt(1)){//#offset=&[len]
43 let iAmpersand = lhash.indexOf('&',8);
44 let offset = parseInt(lhash.substring(8,iAmpersand));
45 let len = parseInt(lhash.substring(iAmpersand+1));
46 {//update urlInc() url
47 let href = location.href;
48 let iHash = href.indexOf('#');
49 href=href.substring(0,iHash)+"#page="+Math.floor((offset+len)/blocksize);
50 setPageUrl(href);
52 file.slice(offset,len).then((buffer)=>{
53 let u8 = new Uint8Array(buffer);
54 render(u8);
55 });
56 return;
58 //#page=
59 page = parseInt(lhash.substring(6));
60 }else
61 setPageUrl(location.href+"#page=1");
62 file.slice(blocksize*(page-1),blocksize+extrasize).then((buffer)=>{
63 let u8 = new Uint8Array(buffer);
64 let u8len = u8.length;
65 let iStart = 0;
66 let limit = Math.min(u8len,extrasize);
67 if(1!=page){
68 for(let i=1;i<limit;i=i+2){
69 if(10==u8[i] && 10==u8[i-1]) {
70 iStart = i+1;
71 break;
75 let iEnd = Math.min(u8len,blocksize);
76 limit = Math.min(u8len,blocksize+extrasize);
77 for(let i=blocksize+1;i<limit;i=i+2){
78 if(10==u8[i] && 10==u8[i-1]) {
79 iEnd = i+1;
80 break;
83 render(u8.slice(iStart,iEnd));
84 });
87 //?url=#offset=&[len]&page=
88 file = new absFile(location.search.substring(5));
89 window.addEventListener('hashchange',loadSlice);
90 </script>
91 </head>
92 <body>
93 <script>loadSlice();</script>
94 </body>