aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2024-03-08 01:47:25 -0500
committerGravatar Chris Xiong <chirs241097@gmail.com> 2024-03-08 01:47:25 -0500
commit33b8f27d45619c4cb03423cd77d30fe8566a7e18 (patch)
tree0bbb960beabdbf7d30b0e0a2872ae11247253a9d
parent23325bdab3108c42f0157625f995b532a13096c7 (diff)
downloadsbs-master.tar.xz
Add support for substitution in title and certain meta tags.HEADmaster
-rw-r--r--generator/postrenderer.js16
-rw-r--r--templates/list_template36
-rw-r--r--templates/post_template40
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, "&lt;")
+ .replace(/>/g, "&gt;")
+ .replace(/&/g, "&amp;")
+ .replace(/"/g, "&quot;")
+ .replace(/'/g, "&#39;");
+}
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#&quot;%t&quot;)</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;">