diff options
author | Chris Xiong <chirs241097@gmail.com> | 2024-03-08 01:47:25 -0500 |
---|---|---|
committer | Chris Xiong <chirs241097@gmail.com> | 2024-03-08 01:47:25 -0500 |
commit | 33b8f27d45619c4cb03423cd77d30fe8566a7e18 (patch) | |
tree | 0bbb960beabdbf7d30b0e0a2872ae11247253a9d | |
parent | 23325bdab3108c42f0157625f995b532a13096c7 (diff) | |
download | sbs-33b8f27d45619c4cb03423cd77d30fe8566a7e18.tar.xz |
Add support for substitution in title and certain meta tags.
-rw-r--r-- | generator/postrenderer.js | 16 | ||||
-rw-r--r-- | templates/list_template | 36 | ||||
-rw-r--r-- | templates/post_template | 40 |
3 files changed, 23 insertions, 69 deletions
diff --git a/generator/postrenderer.js b/generator/postrenderer.js index 80991a0..cc29b08 100644 --- a/generator/postrenderer.js +++ b/generator/postrenderer.js @@ -148,6 +148,14 @@ function _style_to_header(doc) for (let s of styles) head.appendChild(s); } +function htmlescape(s) +{ + return s.replace(/</g, "<") + .replace(/>/g, ">") + .replace(/&/g, "&") + .replace(/"/g, """) + .replace(/'/g, "'"); +} async function _render(inf,outf,np,pp) { const postcont=fs.readFileSync(inf,'utf8'); @@ -192,6 +200,14 @@ async function _render(inf,outf,np,pp) else trd.getElementById('article').innerHTML=contsplit.join('\n'); + //title and meta description + const titlee = trd.querySelector('title'); + titlee.innerHTML = titlee.innerHTML.replace( + /%t/, htmlescape(meta[0].trim()) + ); + const metade = trd.querySelector('meta[name="description"]'); + metade.setAttribute('content', metade.getAttribute('content').replace(/%t/, meta[0].trim())); + //async images trd.getElementById('article').querySelectorAll('img').forEach( (i)=>{if(!i.getAttribute('decoding'))i.setAttribute('decoding','async');} diff --git a/templates/list_template b/templates/list_template index 033dfbd..453a951 100644 --- a/templates/list_template +++ b/templates/list_template @@ -6,6 +6,7 @@ <meta name="theme-color" content="#000000"> <title>Chrisoft::Blog</title> <script type="text/javascript" src="/panel.js"></script> +<script type="text/javascript" src="/themer.js"></script> <link rel="stylesheet" type="text/css" href="/common.css"> <link rel="stylesheet" type="text/css" href="/panel.css"> <link rel="stylesheet" type="text/css" href="/theme0a.css" id="theme0a"> @@ -27,41 +28,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i<document.styleSheets.length;++i) - { - if(R.exec(document.styleSheets[i].ownerNode.id)!==null&&document.styleSheets[i].ownerNode.id!=ent) - document.styleSheets[i].disabled=true; - else document.styleSheets[i].disabled=false; - } - var thmcolor=""; - switch(thm[0]) - { - case '0':thmcolor=thm[1]=='a'?'#f59dda':'#2f0933';break; - case '1':thmcolor=thm[1]=='a'?'#9df59d':'#090933';break; - case '2':thmcolor=thm[1]=='a'?'#edb47b':'#1f1205';break; - case '3':thmcolor=thm[1]=='a'?'#a0cdfa':'#051933';break; - } - document.querySelector("meta[name=theme-color]").setAttribute('content',thmcolor); -} -loadTheme(); </script> </head> <body onload="ol()" style="overflow-x:hidden;"> diff --git a/templates/post_template b/templates/post_template index 10a93fa..caa87b5 100644 --- a/templates/post_template +++ b/templates/post_template @@ -4,8 +4,11 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="theme-color" content="#000000"> -<title>Chrisoft::Blog</title> +<title>Chrisoft::Blog(r#"%t")</title> +<meta name="description" content="«%t» de spelunca ursae visere"> +<meta name="author" content="Chris Xiong"> <script type="text/javascript" src="/panel.js"></script> +<script type="text/javascript" src="/themer.js"></script> <script type="text/javascript" src="/blog/footnoter.js"></script> <script type="text/javascript" src="/blog/aes-js.js"></script> <script type="text/javascript" src="/blog/scrypt.js"></script> @@ -32,42 +35,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i<document.styleSheets.length;++i) - { - if(R.exec(document.styleSheets[i].ownerNode.id)!==null&&document.styleSheets[i].ownerNode.id!=ent) - document.styleSheets[i].disabled=true; - else document.styleSheets[i].disabled=false; - } - var thmcolor=""; - switch(thm[0]) - { - case '0':thmcolor=thm[1]=='a'?'#f59dda':'#2f0933';break; - case '1':thmcolor=thm[1]=='a'?'#9df59d':'#090933';break; - case '2':thmcolor=thm[1]=='a'?'#edb47b':'#1f1205';break; - case '3':thmcolor=thm[1]=='a'?'#a0cdfa':'#051933';break; - } - document.querySelector("meta[name=theme-color]").setAttribute('content',thmcolor); -} -loadTheme(); </script> </head> <body onload="ol()" style="overflow-x:hidden;"> |