资讯专栏INFORMATION COLUMN

如何将editor.md的图片上传改成七牛?

sourcenode / 2920人阅读

摘要:之前的编辑器一直用的是但是问题也不少之后觉得换成编辑器首选当然就是主要原因就是界面美观功能全面但是问题也有比如图片上传不知道为什么作者会用那么蛋疼的表单上传难道只是为了兼容看了上的维护时间最后一次维护差不多半年了想让作者来改可能性是不大了那

之前的编辑器一直用的是simditor, 但是问题也不少, 之后觉得换成markdown编辑器, 首选当然就是editor.md, 主要原因就是界面美观, 功能全面...

但是editor.md问题也有, 比如图片上传, 不知道为什么作者会用那么蛋疼的表单上传, 难道只是为了兼容IE8? 看了github上的维护时间, 最后一次维护差不多半年了, 想让作者来改, 可能性是不大了, 那么就只能自己来了...

editor.md的图片上传是以插件的形式存在的, 文件在./plugins/image-dialog/image-dialog.js, 我们就拿这个文件开刀.

另外, editor.md添加图片后, 不设置alt, 会自动跳到第二行, 只需要把cm.setCursor(cursor.line, cursor.ch + 2)注释了即可, 没有搞明白作者这段代码的用意是什么...

exports.fn.imageDialog = function () {
    var cm = this.cm
    var lang = this.lang
    var editor = this.editor
    var settings = this.settings
    var cursor = cm.getCursor()
    var selection = cm.getSelection()
    var imageLang = lang.dialog.image
    var classPrefix = this.classPrefix
    var iframeName = classPrefix + "image-iframe"
    var dialogName = classPrefix + pluginName,
        dialog
    cm.focus()
    var loading = function (show) {
        var _loading = dialog.find("." + classPrefix + "dialog-mask")
        _loading[(show) ? "show" : "hide"]()
    }
    if (editor.find("." + dialogName).length < 1) {
        var guid = new Date().getTime()
        var action = settings.imageUploadURL + (settings.imageUploadURL.indexOf("?") >= 0 ? "&" : "?") + "guid=" + guid
        if (settings.crossDomainUpload) {
            action += "&callback=" + settings.uploadCallbackURL + "&dialog_id=editormd-image-dialog-" + guid
        }
        var dialogContent = ((settings.imageUpload) ? "
" : "
") + "" + "" + (function () { return (settings.imageUpload) ? "
" + "" + "" + "
" : "" })() + "
" + "" + "" + "
" + "" + "" + "
" + ((settings.imageUpload) ? "" : "
") dialog = this.createDialog({ title: imageLang.title, width: (settings.imageUpload) ? 465 : 380, height: 254, name: dialogName, content: dialogContent, mask: settings.dialogShowMask, drag: settings.dialogDraggable, lockScreen: settings.dialogLockScreen, maskStyle: { opacity: settings.dialogMaskOpacity, backgroundColor: settings.dialogMaskBgColor }, buttons: { enter: [lang.buttons.enter, function () { var url = this.find("[data-url]").val() var alt = this.find("[data-alt]").val() var link = this.find("[data-link]").val() if (url === "") { alert(imageLang.imageURLEmpty) return false } var altAttr = (alt !== "") ? " "" + alt + """ : "" var arr_url = url.split("$$") var text = "" for (var i = 0, length = arr_url.length; i < length; i++) { if (link === "" || link === "http://") { text = text + "![" + alt + "](" + arr_url[i] + altAttr + ") " } else { text = text + "[![" + alt + "](" + arr_url[i] + altAttr + ")](" + link + altAttr + ") " } } cm.replaceSelection(text) if (alt === "") { // cm.setCursor(cursor.line, cursor.ch + 2) } this.hide().lockScreen(false).hideMask() return false }], cancel: [lang.buttons.cancel, function () { this.hide().lockScreen(false).hideMask() return false }] } }) dialog.attr("id", classPrefix + "image-dialog-" + guid) if (!settings.imageUpload) { return } var Qiniu_upload = function(files, length, i) { if (length > i) { var formdata = new FormData() formdata.append("file", files[i]) formdata.append("key", new Date().getTime() + ".jpg") formdata.append("token", "七牛账号对应的token") $.ajax({ type: "POST", url: "http://up.qiniu.com/", data: formdata, dataType: "json", contentType: false, processData: false }).then(function(json) { var oldurl = $("[data-url]").val() if (oldurl === "") { $("[data-url]").val("七牛图片服务器的域名/" + json.key) } else { oldurl = oldurl + "$$七牛图片服务器的域名/" + json.key $("[data-url]").val(oldurl) } i++ Qiniu_upload(files, length, i) }, function (err) { console.log(err) }) } else { $("[name="file"]").val("") loading(false) } } var submitHandler = function() { var files = $("[name="file"]")[0].files if (files.length > 0) { Qiniu_upload(files, files.length, 0) } return false } var fileInput = dialog.find("[name="file"]") fileInput.off("change").on("change", function() { var fileName = fileInput.val() var isImage = new RegExp("(.(" + settings.imageFormats.join("|") + "))$") // /(.(webp|jpg|jpeg|gif|bmp|png))$/ if (fileName === "") { alert(imageLang.uploadFileEmpty) return false } if (!isImage.test(fileName)) { alert(imageLang.formatNotAllowed + settings.imageFormats.join(", ")) return false } loading(true) dialog.find("[type="submit"]").off("click").on("click", submitHandler).trigger("click") }) } dialog = editor.find("." + dialogName) dialog.find("[type="text"]").val("") dialog.find("[type="file"]").val("") dialog.find("[data-link]").val("http://") this.dialogShowMask(dialog) this.dialogLockScreen() dialog.show() }

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

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

相关文章

  • Editor.md和markdown实现Sg一样截图粘贴上传

    暂时我还没有把这个做成一个插件,只是简单的几行代码。其中原理就是通过截图后,ev.clipboardData 包含了text和图片文件 数据 原文链接:http://blog.oeynet.com/post/7... showImg(https://segmentfault.com/img/remote/1460000010776970); 1.Js监听paste事件 seajs.use([edi...

    weij 评论0 收藏0
  • Editor.md和markdown实现Sg一样截图粘贴上传

    暂时我还没有把这个做成一个插件,只是简单的几行代码。其中原理就是通过截图后,ev.clipboardData 包含了text和图片文件 数据 原文链接:http://blog.oeynet.com/post/7... showImg(https://segmentfault.com/img/remote/1460000010776970); 1.Js监听paste事件 seajs.use([edi...

    jollywing 评论0 收藏0
  • 使用七牛云存储一些经验总结

    摘要:原文使用七牛云存储的一些经验总结错误处理如果在与七牛的交互中出现状态码为的错误,一句话,不要犹豫,直接联系七牛技术支持。但是笔者发现,在使用七牛云转化后的视频,这样做是无效的。 近段时间将使用七牛云存储来存放用户上传的数据,客户端通过七牛的js-sdk与七牛交互,服务端C#实现了七牛相关的接口。在这过程中多多少少遇到点问题,在这里总结一下。原文:使用七牛云存储的一些经验总结 599错...

    Lyux 评论0 收藏0
  • 利用七牛 qshell 和 Automator 打造快捷上传服务

    摘要:运行成功之后粘贴板中应该会有如下内容到这里,只剩下下载安装就大功告成这里还用到了修改权限命令,有兴趣的话可以查看我另一篇文章服务器搭建基础知识。 来源 早前订阅了一个图片上传工具 iPic,单单就图片上传这一功能来说它无疑是非常优秀的。无奈我有的时候要上传一些非图片小文件,虽然这个只是个小功能,一个小小的脚本就可以做到,但是想想用到这个功能的时候还要打开terminal,emmmm…(...

    cyqian 评论0 收藏0
  • Laravel5-Markdown-Editor 在线编辑器

    摘要:是基于封装的在线编辑器,支持项目。已集成本地七牛云阿里云文件存储。更新记录完成在线编辑器主程序,且集成本地七牛阿里云存储。 Laravel5-Markdown-Editor Laravel5-Markdown-Editor 是基于 editor.md 封装的 Markdown 在线编辑器,支持 Laravel5 项目。已集成本地、七牛云、阿里云文件存储。 更新记录 2017-11-09...

    MoAir 评论0 收藏0

发表评论

0条评论

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