program-think, motto, web development,

给你的博客加入每日格言

DolorHunter DolorHunter Follow Jul 25, 2021 · 41 mins read

给你的博客加入每日格言
Share this

每日格言似乎是中文博客标配。之前在 编程随想 的博客里闲逛时,一直觉得他的每日格言做的很有意思,这两天又跑来看看更新博客了没,无聊顺便看了下网页每日格言的代码,突发奇想何不把这部分内容不迁移到我博客里,做一个编程随想同款每日格言。

这部分的 代码 从 10756 到 11114,共 359行,其中还有两百行左右的格言,因此代码其实并不是很长很复杂,基本上就是按分类从列表里随机取一个格言,经过处理后填充到标签中。

我把这部分的原版的代码截取出来后,就在我的博客里找了个位置准备置入,选的是每篇文章的作者栏下方,因为图片尺寸的问题这里通常会流出一片区域,刚好可以拿来放每日格言。主页因为还没有找到长期空白的区域,就先保留。

每日格言位置

编程随想的格言按照文章类型分类为思考/心理、政治、历史、军事、编程、管理、经济、翻墙,共八类。不过,我的博客分类并没有那么类型,因此就把所有格言放在了一个列表中。再者,init 初始化的前部分代码感觉没必要,因此直接删去,直接从列表中随机取值选格言,之后再处理后显示。

修改后的代码大致长这样:

const arr = [
  "一个人的价值, 在于他贡献了什么, 而不在于他获得了什么!	@爱因斯坦",
  "你若喜爱你自己的价值, 你就得给世界创造价值!	@歌德",
  ...
];

// 随机取格言
var sMaxim = arr[Math.floor(Math.random() * arr.length)];

// 处理格言(*)
sMaxim = sMaxim.replaceAll(":-)", "☺")
  .replaceAll(":-(", "☹")
  ...

// 有相关博文的格言末尾,显示文章链接
if(sMaxim.endsWith(".html"))
{
  sMaxim = sMaxim.replace("<br/>/", "<br/><a href='https://program-think.blogspot.com/")
    .replace(".html", ".html' target='_blank'>编程随想的相关博文</a>");
}

// 填充标签内容,显示格言
$("div.descriptionwrapper").children("p.description").html(sMaxim);

注:其中处理格言(*)的部分,编程随想用的是 multiReplace,catch 一直报错,我猜应该是他自己写的代码,不过我找了下没找到,干脆直接改成 replaceAll 了。类似的地方还有 catch 的 reportError,这块代码只是用 console.log 呈现调整格式后的错误,只不过我觉得没必要,就直接写 log 了。

// src: view-source:https://program-think.blogspot.com/
// line: 11080
var arrPunctMap =  // map HALF width punct to FULL width
[
  [/\:\-\)/g, "&#9786;"],  [/\:\-\(/g, "&#9785;"],
  [/\</g, "&#12298;"],     [/\>/g, "&#12299;"],
  [/\(/g, "&#65288;"],     [/\)/g, "&#65289;"],
  [/\[/g, "&#12304;"],     [/\]/g, "&#12305;"],
  [/\t/g, "<br/>"],  [/@/g, "&#8212;&#8212;"],       [/ -- /g, "&#8212;&#8212;"],
  [/, /g, "&#65292;"],     [/; /g, "&#65307;"],      [/: /g, "&#65306;"],
  [/\! ?/g, "&#65281;"],   [/\? ?/g, "&#65311;"],    [/\'/g, "&#65282;"]
];
sMaxim = sMaxim.multiReplace(arrPunctMap);

有些格言的末尾带有文章的链接,以因此需要把文章链接的字符串补全,并且修改成超链接。

// src: view-source:https://program-think.blogspot.com/
// line: 10784
"一年之计 莫如树谷	十年之计 莫如树木	终身之计 莫如树人	@<管子>	/2019/12/Time-and-Life.html",
// src: view-source:https://program-think.blogspot.com/
// line: 11092
if(sMaxim.endsWith(".html"))
{
  sMaxim = sMaxim.replace("<br/>/", "<br/><a href='https://"+Url.getDomain()+"/")
    .replace(".html", ".html' target='_blank'>与该格言相关的博文</a>");
}

原版的代码使用的是 getDomain(),但是原文的域名跟我网站域名不同,因此把 href 的值做了修改。第二处替换仅仅修改了中文描述。

sMaxim = sMaxim.replace("<br/>/", "<br/><a href='https://program-think.blogspot.com/")
  .replace(".html", ".html' target='_blank'>编程随想的相关博文</a>");

最后将格言填充到标签的内容中,显示格言。此部分与编程随想原版代码相同。

$("div.descriptionwrapper").children("p.description").html(sMaxim);

标签位置,根据放置的位置放置即可。

<div class="descriptionwrapper">
  <p class="description"></h5>
</div>

Js 使用 jQuery 和 ready,并且设置try/catch方便排错。

jQuery(function($)
{
  $(document).ready(
    function()
    {
      try
      {
        ...
      }
      catch(err)
      {
        console.log("init: Catch exception:\n" + err);
      }
    }
  );
});

注:try 段的代码参照本文第一块代码块,缺省内容 arr 和 replaceAll 参照编程随想博客 代码 10756 到 11114 共 359行。

这次从想法到实现用了好几小时,主要还是 js 和 jQuery 都不太熟,报错也没认真看,所以搞了半天。编程随想似乎是徒手用 HTML,js,CSS 写的博客,用的是 jQuery 的技术,我目前做网页前端只写过裸 HTML 和 React,完全没碰过 jQuery,技术栈还差挺多的。

Join Newsletter
Get the latest news right in your inbox. We never spam!
DolorHunter
Written by DolorHunter
Developer & Independenet Blogger