我选择自建笔记系统,最主要的考虑有四个:

  1. 我需要内链以连接零碎的知识点,第三方笔记软件对此支持均不太好;
  2. 我希望以文本形式编辑内容,不在格式、排版上消耗过多时间,第三方笔记软件虽然有对 MarkDown 的支持,但速度太慢;
  3. 随着时间的推移,内容的增加,自设义设置必不可少,第三方笔记软件只会按产品经理的节奏升级;
  4. 我也担心部分笔记内容被监管和谐;

我对 DokuWiki 的定位几经调整,最终决定用来记录论文和文摘,作为通读全书的补充,因为 DokuWiki 有个很好的设计,词条的 URL 和 标题可分别定义,既能保持 URL 的简洁,又能保证标题的完整,相对 MediaWiki 有优势。

但是 DokuWiki 的默认样式,对屏幕阅读不太友好,很难兼顾 PC 和 WAP。这是默认字体设置:

body {
    font: normal 87.5%/1.4 Arial,sans-serif;
    -webkit-text-size-adjust: 100%;
}

查询 Mozilla 文档,87.5% 是相对父级元素的字体大小,1.4 是行高。


/* Set the font size to 12px and the line height to 14px.
   Set the font family to sans-serif */
p {
  font: 12px/14px sans-serif;
}

/* Set the font size to 80% of the parent element
   or default value (if no parent element present).
   Set the font family to sans-serif */
p {
  font: 80% sans-serif;
}

87.5% 这个字号相当于 14PX,在 PC 上阅读体验尚可,但到了 WAP,就显得太小了。如果统一调整字号为 20PX,PC 上又太大了。这是第一个问题。

第二个问题,即使提升字号到 17PX,读中文没什么问题,英文还是显小。

怎么解决这两个问题?

第一部分 调整移动字号

DokuWiki 不像 MediaWiki 一样支持 Common.cssMobile.css 分别设置,只能通过 JavaScript 检测操作系统,为 WAP 调大字号。

在《怎样给 DokuWiki 添加备案号》我已经详细介绍了如何配置 DokuWiki,下面一步一步来。

检测操作系统,可以自己写 JavaScript 代码,但更好的方法是借助第三方 JavaScript 库,推荐 jQuery 插件 jQuery.depend:

vim lib/tpl/dokuwiki/footer.html
<script src="https://chenzixin.com/ivy/text/js/jquery/plugins/jquery.depend.min.js"></script>
vim conf/userscript.js
alert(jQuery.platform.original);

系统提示:jQuery is not defined. 可是查看 DokuWiki 的源码,有 jQuery 啊!

<!-- jQuery v3.5.1 -->
<script src="/lib/exe/jquery.php?tseed=34a552433bc33cc9c3bc32527289a0b2" defer="defer"></script>

不重要,先略过,可能是 defer="defer" 的影响,我先编辑 footer.html 自己引入 jQuery:

<script src="https://cdn.chenzixin.com/jquery/jquery-3.5.1.min.js"></script>
<script src="https://chenzixin.com/ivy/text/js/jquery/plugins/jquery.depend.min.js"></script>

此时,手机访问 DokuWiki,已经可以识别 androidiphone,有了之前为 MediaWiki 调整字号的经验,接下来的编码非常简单:

function itfs( size ) {
    var fs = size;
    if ( !fs ) {
        // some_variable is either null, undefined, 0, NaN, false, or an empty string
        fs = 17;
    }
    const sheet = new CSSStyleSheet();
    sheet.replaceSync( 'div.page p { font-size: ' + fs + 'px !important; }' );
    document.adoptedStyleSheets = [sheet];
}

var os = $.platform.original;

if ( os == "android" || os == "iphone"){
    itfs(20);
}

第二部分 手动增加字号

针对英文字体太小的问题,也可以借鉴 MediaWiki 的经验,调整字号的函数可以复用。

vim lib/tpl/dokuwiki/footer.html
<a href="#" onclick="itfs(22);">Increase Font Size</a>

实测 22PX 字体,阅读英文已经没那么吃力了。

收工。

最后修改:2023 年 11 月 06 日
如果觉得我的文章对你有用,请随意赞赏