hexo脚本编写指南(三)

过滤器(Filter)

官方地址

过滤器分注册和执行两个函数
注册过滤器的function参数可以是多个,如果是hexo钩子 那么data的值与page一致
执行过滤器的第二个参数为带入值data,第三个值是args
以下是官网的一个小demo 讲的还是比较清晰的

hexo.extend.filter.register('test', function(data, arg1, arg2){
 // data === 'some data'
 // arg1 === 'foo'
 // arg2 === 'bar'
 
 return 'something';
});
hexo.extend.filter.register('test', function(data, arg1, arg2){
 // data === 'something'
});
hexo.extend.filter.exec('test', 'some data', {
 args: ['foo', 'bar']
});

小例子1

如果data.content里面有#fn,那么插入一个js

hexo.extend.filter.register('after_post_render',function(data){

    if(data.content.indexOf("#fn") != -1){
        data.content += "<script src=\"js/footnote.js\" type=\"text/javascript\"></script>";
    }

    return data;
});

小例子2

选择性生成css或js
比如,我在主题的source/js文件夹下放了duoshuo.min.js这个多说本地化脚本,当设置里没启用多说的时候这个js文件还是会跟着生成,跟着发布到你的博客服务器上,浪费流量。该怎么办呢?

把如下js放进主题的scripts文件夹下(文件名随意):

'use strict';

hexo.extend.filter.register('after_generate',function(){
    var duoshuo = hexo.theme.config.duoshuo_shortname;

    if(!duoshuo || duoshuo.length == 0){
        hexo.route.remove('js/duoshuo.min.js');
    }
});

其中duoshuo_shortname是主题设置里的一个条目。

这样,当duoshuo_shortname为空时,duoshuo.min.js不会跟着生成,从而减少所需加载量。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,469评论 0 9
  • title: hexo 安装与配置 categories: 工具 tags: [Hexo,GitHub,多说评论]...
    卞泽阅读 3,259评论 8 25
  • 原文链接:https://docs.spring.io/spring-boot/docs/1.4.x/refere...
    pseudo_niaonao阅读 4,768评论 0 9
  • 与教材相结合,与课堂活动相结合,与支架结合,输入与输出相结合。我做得到吗?其实我更多的是空谈!今天下午的课就是我一...
    雨儿123阅读 196评论 0 0
  • 1、官网下载地址https://dev.mysql.com/downloads/mysql/5.7.html#do...
    雪_豹阅读 272评论 0 0