为markdown创建一个引文标记符


title: 为markdown创建一个新标记符
date: 2019-08-04 17:18:42
categories: 编程/nodejs/hexo
tags: markdown javascript quote hexo next
site: www.exobrain.online
type: nodejs

问题的由来

当我们在编写markdown文件的时候会经常从网页上ctr+c其他人的文字,而我们标注作者和文章的来源不是特别方便,这会导致许多时候我们不去标注作者和文章的来源。引文规范对于问题追溯和文明发展相当重要,与其道德说教来让大家遵守引文规范,不如提供更方便的方式来让大家遵守,因此,本文抛砖引玉出一种新的高效的规范和工具。

复制时天生携带引文信息

将下面的javascript语句放到网页的head处

<script type="text/javascript">
    document.addEventListener("copy", copy);
    function copy(oEvent){
        var selection = window.getSelection();
        var quoteMagic = "<!-- It's convenient in markdown file. -->\n";
        quoteMagic += "<!-- More information: https://www.exobrain.online/2019/08/04/%E4%B8%BAmarkdown%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%BC%95%E6%96%87%E6%A0%87%E8%AE%B0%E7%AC%A6/#more -->\n";
        quoteMagic += "<!-- quote(start){ author: authorname, site: www.sitename.com, location: ";
        quoteMagic += document.location.href;
        quoteMagic += "} -->\n";
        var copytext = quoteMagic + selection + "\n<!-- quote(end) -->";
        oEvent.preventDefault();
        oEvent.clipboardData.setData("text", copytext);
    }
</script>

示例如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<script type="text/javascript">
    document.addEventListener("copy", copy);
    function copy(oEvent){
        var selection = window.getSelection();
        var quoteMagic = "<!-- It's convenient in markdown file. -->\n";
        quoteMagic += "<!-- More information: https://www.exobrain.online/2019/08/04/%E4%B8%BAmarkdown%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%BC%95%E6%96%87%E6%A0%87%E8%AE%B0%E7%AC%A6/#more -->\n";
        quoteMagic += "<!-- quote(start){ author: authorname, site: www.sitename.com, location: ";
        quoteMagic += document.location.href;
        quoteMagic += "} -->\n";
        var copytext = quoteMagic + selection + "\n<!-- quote(end) -->";
        oEvent.preventDefault();
        oEvent.clipboardData.setData("text", copytext);
    }
</script>
</head>
<body>
测试1<br>
测试2
</body>
</html>

当我们运行网页,复制网页中内容后,将其粘贴到mardown文件,会得到下面的结果

[外链图片转存失败(img-cAxOktRh-1564982212462)(为markdown创建一个引文标记符/1.png)]
而其(在vscode+MarkDownPreview中)渲染成html的显示效果如下图
[外链图片转存失败(img-V1mqDHCZ-1564982212464)(为markdown创建一个引文标记符/2.png)]
这样我们就可以在不影响显示的情况下保留其引文信息。当然,html中保留引文信息的工作需要在markdown文件转换为html文件的过程中完成,转换工具和规范这里不做讨论,先留下个坑,或者其他人来完成吧,?。

hexo的next主题下复制时附加引文信息

找到hexo项目根目录,我的根目录是/blog
在 …/blog/themes/next/layout/_partials/head目录下找到custom-head.swig文件,将下面的代码添加到文末就可以了。

<script type="text/javascript">
    document.addEventListener("copy", copy);
    function copy(oEvent){
        var selection = window.getSelection();
        var quoteMagic = "<!-- It's convenient in markdown file. -->\n";
        quoteMagic += "<!-- More information: https://www.exobrain.online/2019/08/04/%E4%B8%BAmarkdown%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%BC%95%E6%96%87%E6%A0%87%E8%AE%B0%E7%AC%A6/#more -->\n";
        quoteMagic += "<!-- quote(start){ author: authorname, site: www.sitename.com, location: ";
        quoteMagic += document.location.href;
        quoteMagic += "} -->\n";
        var copytext = quoteMagic + selection + "\n<!-- quote(end) -->";
        oEvent.preventDefault();
        oEvent.clipboardData.setData("text", copytext);
    }
</script>

将hexo-next下的文末出处去掉

将文件…/blog/themes/next/_config.yml(blog为我的hexo根目录)中的post_copyright项下的enable的值从true改为false

# Declare license on posts
post_copyright:
  enable: true
  license: CC BY-NC-SA 3.0
  license_url: https://creativecommons.org/licenses/by-nc-sa/3.0/

改完后为

# Declare license on posts
post_copyright:
  enable: false
  license: CC BY-NC-SA 3.0
  license_url: https://creativecommons.org/licenses/by-nc-sa/3.0/

之后文章末尾就不会再出现下图的情形了
[外链图片转存失败(img-5BMZnZE1-1564982212465)(为markdown创建一个引文标记符/3.png)]

如果使用了代码复制功能怎么改

当使用代码复制功能的时候,我们希望复制到干净的代码,却不想得到引用信息;而在复制文章内容的时候,我们希望得到引文信息。

笔者使用的是这个链接下实现的代码复制功能,
https://yfzhou.coding.me/2018/08/27/Hexo-Next搭建个人博客(代码块复制功能)/

我的办法是:
将clipboard-use.js文件的代码进行了一下升级,加了if语句。
可以理解成将custom-head.swig文件里的那个添加引用的代码整合到了clipboard-use.js文件里。

  /*页面载入完成后,创建复制按钮*/
var btnCopyEmpty = true;
document.addEventListener("copy", copy);
function copy(oEvent){
    var selection = window.getSelection();
    if(btnCopyEmpty){
        console.log(btnCopyEmpty)
        var quoteMagic = "<!-- It's convenient in markdown file. -->\n";
        quoteMagic += "<!-- More information: https://www.exobrain.online/2019/08/04/%E4%B8%BAmarkdown%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%BC%95%E6%96%87%E6%A0%87%E8%AE%B0%E7%AC%A6/#more -->\n";
        quoteMagic += "<!-- quote(start){ author: authorname, site: www.sitename.com, location: ";
        quoteMagic += document.location.href;
        quoteMagic += "} -->\n";
        var copytext = quoteMagic + selection + "\n<!-- quote(end) -->";    
    }else{
        var copytext = selection;   
    }
    oEvent.preventDefault();
    oEvent.clipboardData.setData("text", copytext);
};

!function (e, t, a) { 
/* code */
var initCopyCode = function(){
    var copyHtml = '';
    copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
    //fa fa-globe可以去字体库替换自己想要的图标
copyHtml += '  <i class="fa fa-clipboard"></i><span>copy</span>';
    copyHtml += '</button>';
    $(".highlight .code pre").before(copyHtml);
    new ClipboardJS('.btn-copy', {
        target: function(trigger) {
            btnCopyEmpty = false;
            return trigger.nextElementSibling;
        }
    });
    // clipboard.on('success', function(e){
    //     btnCopyEmpty = false;
    // });
}
initCopyCode();
}(window, document);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值