专栏首页梦魇小栈Hexo 博客美化代码块

Hexo 博客美化代码块

最近有人问我博客的代码块是怎么做的,如下面的代码块,然后好久没有写文章了,趁着周末有时间就水一篇吧~

var arr = 'abcdaabc';

var info = arr
    .split('')
    .reduce((p, k) => (p[k]++ || (p[k] = 1), p), {});

console.log(info); //{ a: 3, b: 2, c: 2, d: 1 }

hexo 会有各种生命周期和事件,平时可能不会用到,但是能很好的利用的话,可以提高不少效率。比如文章多到一定程度之后,每次创建新文章都会被淹没在文件夹里面,在博客根目录下创建一个 scripts 文件夹,放一个 events.js 文件。这样每次通过hexo new post 创建新文章就会自动用 code 打开了~

var exec = require('child_process').exec;

// new 后自动打开编辑器
hexo.on('new', function (data) {
  console.log('code ' + data.path);
  exec('code ' + data.path);
});

又或者是在 hexo deploy 之后想做一些事情的时候也可以用到

try {
  hexo.on('deployAfter', function () { //当deploy完成后执行备份
    doSomething();
  });
} catch (e) {
  console.log("产生了一个错误<( ̄3 ̄)> !,错误详情为:" + e.toString());
}

代码块也是利用了 hexoapi,是在主题目录下面的 scripts 文件夹,我创建了一个 codeblock.js 文件。监听 after_post_render 事件,(这个事件并不是每次都触发,hexo 会做缓存,在没有缓存的情况下才会执行。)通过事件回调替换文章渲染出来的内容。

var attributes = [
  'autocomplete="off"',
  'autocorrect="off"',
  'autocapitalize="off"',
  'spellcheck="false"',
  'contenteditable="true"'
]

var attributesStr = attributes.join(' ')

hexo.extend.filter.register('after_post_render', function (data) {
  while (/<figure class="highlight ([a-zA-Z]+)">.*?<\/figure>/.test(data.content)) {
    data.content = data.content.replace(/<figure class="highlight ([a-zA-Z]+)">.*?<\/figure>/, function () {
      var language = RegExp.$1 || 'plain'
      var lastMatch = RegExp.lastMatch
      lastMatch = lastMatch.replace(/<figure class="highlight /, '<figure class="iseeu highlight /')
      return '<div class="highlight-wrap"' + attributesStr + 'data-rel="' + language.toUpperCase() + '">' + lastMatch + '</div>'
    })
  }
  return data
})

然后在 highlight.js 的基础上调整下样式,包裹上一层类 mac Panel 的效果。

blog/themes/next/source/css/_custom 目录下新建一个 .styl 的样式文件 ,文件内容如下

.highlight-wrap[data-rel] {
  position: relative;
  overflow: hidden;
  border-radius: 5px;
  box-shadow: 0 10px 30px 0px rgba(0, 0, 0, 0.4);
  margin: 35px 0;
  ::-webkit-scrollbar {
    height: 10px;
  }

  ::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
    border-radius: 10px;
  }

  ::-webkit-scrollbar-thumb {
    border-radius: 10px;
    -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
  }
  &::before {
    color: white;
    content: attr(data-rel);
    height: 38px;
    line-height: 38px;
    background: #21252b;
    color: #fff;
    font-size: 16px;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    font-family: 'Source Sans Pro', sans-serif;
    font-weight: bold;
    padding: 0px 80px;
    text-indent: 15px;
    float: left;
  }
  &::after {
    content: ' ';
    position: absolute;
    -webkit-border-radius: 50%;
    border-radius: 50%;
    background: #fc625d;
    width: 12px;
    height: 12px;
    top: 0;
    left: 20px;
    margin-top: 13px;
    -webkit-box-shadow: 20px 0px #fdbc40, 40px 0px #35cd4b;
    box-shadow: 20px 0px #fdbc40, 40px 0px #35cd4b;
    z-index: 3;
  }
}

然后在同目录 custom.styl 文件中引入新建的样式文件即可

最后修改主题的代码样式配置文件

highlight_theme: night eighties

OK,大功告成~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JQuery分析及实现part6之动画模块功能及实现

    ihoey
  • Linux常用命令笔记

    sudo vim /etc/nginx/sites-available/default

    ihoey
  • (译)NPM vs Yarn 备忘手册

    好,想必你对新的 JavaScript 包管理工具 yarn 已经有所耳闻,并已通过 npm i -g yarn 进行了安装,现在想知道怎么样使用吗?如果你了解...

    ihoey
  • 3D盒子动画

    ---------------------------------------------------------

    py3study
  • Thinkphp5.0上传图片与运行python脚本

    说明批处理文件路径与python脚本大致路径:C:\xampp\htdocs\server\public

    嘘、小点声
  • WordPress免插件仅代码实现“返回顶部、返回底部、评论”效果(样式一)

    本文所说的”返回顶部、返回底部、评论 “相信你知道是什么东东了吧?  一般你在各大网站的右下角都能看到类似的东东,但许多网站都普遍只有“返回顶部”的效果。不过就...

    Jeff
  • FF下修改美化文件域(input type=file)的样式

    有兄弟问我修改美化文件域(input type=file)在FF下的样式,暂时没看兼容.也没美化.等到了上海安定好了再好好修改下 <!DOCTYPE html ...

    练小习
  • jquery封装的时间轴

    很多时候,都会用到类似于时间轴的东西,鉴于网络资源没有那么顺手,就想着自己搞一个,在此将源码贴出来。

    lzugis
  • 实现文字底部居中

    用户3055976
  • 我的markdown样式

    剑行者

扫码关注云+社区

领取腾讯云代金券