资讯专栏INFORMATION COLUMN

Markcook 1.2,超轻的开源markdown编辑器

BlackMass / 1147人阅读

摘要:更新历史修复了无法导出中文文件的,增加了拖拽导入文件的功能。把编码对象作为参数传入,就可以生成一个可供下载的链接,下载的内容是完美的中文字符其他种类字符同样支持,代码如下保存为格式以上就是两个关键新功能的实现原理。

Markcook 1.2

项目地址:https://github.com/jrainlau/markcook
在线体验:http://jrainlau.github.io/markcook/
客户端下载:https://github.com/jrainlau/markcook/releases

介绍 Markcook 1.2--简洁、高效的markdown编辑器

使用了vue.js+webpack进行开发和构建。

非常的简单,高效,没有多余的东西。

她的优点有很多:

实时预览,所见即所得,无需担心排版问题。

提供了齐全的快捷按钮,无需查阅markdown语法即可进行排版。

完全离线的单页应用,可以把gh-pages分支的文件clone下来,作为本地客户端使用。

提供本地缓存功能,防止重要内容丢失。

拖拽导入文件,编辑本地文件方便快捷。

支持文件导出,编写完毕可直接保存。

更新历史

Markcook 1.2:修复了无法导出中文文件的bug,增加了拖拽导入文件的功能。

Markcook 1.1:增加了文件导出功能,可以导出.html.md格式文件。

Markcook 1.0:基础版本,仅有同步编译markdown语法功能。

功能展示

快捷插入markdown符号

拖拽上传文件

缓存与下载

客户端

开发过程

距离1.0版本的推出已经三个多月了,当时的1.0版本还是非常原始的,也没打算继续维护。后来在机缘巧合之下,觉得应该为它完善基本功能,起码得支持导入导出吧。同时也因为临近毕业,闲得慌,所以就把它重新拿出来,添加了一些实用的功能。

拖拽上传主要使用了HTML5新增的file API,能够读取本地文件。通过file API,实现真正的backend free,不需要后台也能够上传文件进行编辑了!具体代码如下(包括拖拽上传功能):

--- html ---


--- javascript ---
(function () {
      var dropbox;
      dropbox = document.getElementById("inputter");
      dropbox.addEventListener("dragenter", dragenter, false);
      dropbox.addEventListener("dragover", dragover, false);
      dropbox.addEventListener("drop", drop, false);
      function dragenter(e) {
        e.stopPropagation();
        e.preventDefault();
      }

      function dragover(e) {
        e.stopPropagation();
        e.preventDefault();
      }

      function drop(e) {
        e.stopPropagation();
        e.preventDefault();

        var dt = e.dataTransfer;
        var files = dt.files;

        var fileReader = new FileReader();
        fileReader.readAsText(files[0], "UTF-8");
        fileReader.onloadend = function (e) {
          console.log(e.target.result) // 输出文件内容
        }
      }
    })()

为了提供文件导出功能,查了蛮多资料,也在sf社区提了问题:js生成的html模版如何提供下载?
感谢@cool_zjy 的回答,使用data URL确实是一种方式,但是最大的缺点是base64编码不支持中文字符,若通过第三方库转码,则下载的内容也是转码字符,不符合要求。后来经过研究,采用了另外一个方法,也是HTML5提供的API,Blob()URL.createObjectURL()
Blob()接收一个数组作为参数,然后生成编码对象。把编码对象作为参数传入URL.createObjectURL(),就可以生成一个可供下载的链接,下载的内容是完美的中文字符(其他种类字符同样支持),代码如下:

--- html ---
保存为.md格式

--- javascript(vue.js) ---
createUrl: function (mode) {
              var self = this
              var val = ""
              if (mode == 0) {
                val = self.article
                var blobObj = new Blob([val])
                var objectURL = URL.createObjectURL(blobObj)
                self.mdDataUrl = objectURL
              } else {
                val = self.outputHtml
                var blobObj = new Blob([val])
                var objectURL = URL.createObjectURL(blobObj)
                self.htmlDataUrl = objectURL
              }
            }

以上就是两个关键新功能的实现原理。除了提供上传与下载以外,HTML5的file API还有很多好玩强大的功能,值得深入研究。

最后通过electron打包,生成全平台适用的桌面程序,在我的github release中已经上传了Windows 64位版本和OSX mas版本的,稍后将传上OSX和Linux版本的。以下是Windows版截图:

通过开发Markcook,我发现vuejs+webpack生成的项目非常适合通过electron移植为桌面应用,因为经过webpack生成的vuejs项目只有一个index.html入口文件,其余均是js文件,只需要简单地修改一下文件目录结构,就可以通过electron直接生成桌面应用了,超级方便。在此感谢@远程智力英雄 的文章从零开始使用Electron + jQuery开发桌面应用 (一) HelloWorld,很详细地介绍electron的基本使用方法。

写在最后

接下来看心情维护,可能会在后面调整LOGO和UI,因为现在其实挺简陋的。同时因为懒,所以没有做成响应式,以后重构再说……
如果觉得我的作品还可以的话,欢迎follow,也期待您的PR。虽然是一个简单的作品,但仍希望能够得到各位大牛的指点,谢谢大家!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79206.html

相关文章

  • Markcook2.0,使用Vue2.0和Vuex2.0进行完全重构升级

    摘要:新版本允许多任务操作,这意味着你可以通过同时打开多个文件,在侧边栏中可以方便地进行切换你可以通过拖拽文件的方式把文件直接添加到的工作空间当中最大的变化,在于工具栏的升级。 showImg(https://segmentfault.com/img/bVDNjH?w=513&h=170); 随着Vue2.0的正式推出,我也正好籍此机会对我的开源项目Markcook进行重构。这一次重构既打发...

    mrcode 评论0 收藏0
  • 采用vue+webpack构建的单页应用——私人博客MintloG诞生记

    摘要:我采用原生编写后台,因为感觉增删改查的功能很简单,就懒得用框架了其实是不会。浏览模式它也有一个,用来切换文章列表和文章详情,也就是和编辑模式它加载了作为工具栏,然后可以进行文章的撰写与修改。 介绍 项目地址:https://github.com/jrainlau/MintloG (特别乱,参考就好-_-|||)showImg(https://segmentfault.com/img/b...

    Terry_Tai 评论0 收藏0
  • 程序员的一些常用技能点

    摘要:其他笔记还有一些其他的主流云笔记软件,像印象笔记,为知笔记,等,由于没有多做尝试,就不加以评价年最好用的云笔记软件推荐介绍是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。 目录: [TOC] Git Git介绍: Git是目前世界上最先进的分布式版本控制系统(没有之一),简单来说,Git 是一个管理你的「代码的历史记录」的工具。 Gi...

    baishancloud 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<