添加图片从 Atom 窗体外拖拽图片文件到文库中 (#17)
This commit is contained in:
parent
581ae5d82f
commit
43f99462d1
|
|
@ -0,0 +1,67 @@
|
|||
/**
|
||||
* @desc amWiki 工作端·文件拖拽模块
|
||||
* @author Tevin
|
||||
*/
|
||||
|
||||
var fs = require("fs");
|
||||
var directories = require('./directories');
|
||||
var pasterImg = require('./pasterImg');
|
||||
|
||||
module.exports = {
|
||||
//拖拽图片
|
||||
_dropImg: function (files, paths, editor) {
|
||||
pasterImg.createDirectory(paths.creatDirPath, function () {
|
||||
for (var i = 0, file; file = files[i]; i++) {
|
||||
fs.createReadStream(file.path).pipe(fs.createWriteStream(paths.writePath + file.name));
|
||||
editor.insertText("", editor);
|
||||
}
|
||||
});
|
||||
},
|
||||
//监听拖拽
|
||||
listenDrop: function () {
|
||||
var that = this;
|
||||
atom.document.getElementsByClassName('item-views')[0].addEventListener('drop', function (e) {
|
||||
//文件验证,包含非图片文件跳过不工作
|
||||
var files = e.dataTransfer.files;
|
||||
var allImg = true;
|
||||
for (var i = 0, file; file = files[i]; i++) {
|
||||
if (file.type.indexOf('image/') != 0) {
|
||||
allImg = false;
|
||||
}
|
||||
}
|
||||
if (!allImg) {
|
||||
return;
|
||||
}
|
||||
//编辑器状态验证,非markdown不工作
|
||||
var editor = atom.workspace.getActiveTextEditor();
|
||||
var grammar;
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
grammar = editor.getGrammar();
|
||||
if (!grammar) {
|
||||
return;
|
||||
}
|
||||
if (grammar.scopeName !== 'source.gfm' && grammar.scopeName !== 'text.md') {
|
||||
return;
|
||||
}
|
||||
var editorPath = editor.getPath();
|
||||
if (editorPath.substr(-3) !== '.md') {
|
||||
return;
|
||||
}
|
||||
var paths = pasterImg.getPaths(editorPath);
|
||||
if (!paths) {
|
||||
return;
|
||||
}
|
||||
//验证路径,非amWiki不工作
|
||||
if (!directories.isAmWiki(editorPath)) {
|
||||
return;
|
||||
}
|
||||
//条件匹配,阻止默认动作
|
||||
e.stopPropagation();
|
||||
//拖拽图片
|
||||
that._dropImg(files, paths, editor);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -22,6 +22,8 @@ var pasterImg = require('./pasterImg');
|
|||
var webServer = require('./webServer');
|
||||
//项目导出模块
|
||||
var exportGithub = require('./export.github');
|
||||
//文件拖拽模块
|
||||
var fileDrop = require('./fileDrop');
|
||||
|
||||
module.exports = {
|
||||
//订阅
|
||||
|
|
@ -77,6 +79,7 @@ module.exports = {
|
|||
automatic.onLibrariesChange = function () {
|
||||
webServer.updateMap(that._state.libraryList);
|
||||
};
|
||||
fileDrop.listenDrop();
|
||||
//window.amWikiState = state;
|
||||
},
|
||||
//当atom即将关闭,终止所有监听
|
||||
|
|
|
|||
|
|
@ -33,13 +33,30 @@ module.exports = {
|
|||
if (img.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var paths = this.getPaths(editor.getPath());
|
||||
if (!paths) {
|
||||
return;
|
||||
}
|
||||
//文件保存
|
||||
var md5 = crypto.createHash('md5');
|
||||
var imgbuffer = img.toPng();
|
||||
md5.update(imgbuffer);
|
||||
var filename = "" + (paths.mdFile.getBaseName().replace(/\.\w+$/, '').replace(/\s+/g, '').split(/-|_/)[0]) +
|
||||
"-" + (md5.digest('hex').slice(0, 8)) + ".png";
|
||||
this.createDirectory(paths.creatDirPath, function () {
|
||||
fs.writeFile(paths.writePath + filename, imgbuffer, 'binary', function () {
|
||||
editor.insertText("", editor);
|
||||
});
|
||||
});
|
||||
},
|
||||
getPaths: function (editorPath) {
|
||||
//路径计算
|
||||
var assetsDirPath, //项目assets文件夹地址
|
||||
creatDirPath, //本次创建图片地址
|
||||
insertPath, //插入文档的图片引用路径
|
||||
writePath; //图片输出路径
|
||||
var mdFile = new File(editor.getPath());
|
||||
var mdFile = new File(editorPath);
|
||||
var parentDir;
|
||||
//library直接子级
|
||||
if (mdFile.getParent().getBaseName() === 'library') {
|
||||
assetsDirPath = mdFile.getParent().getParent().getPath() + "/assets";
|
||||
|
|
@ -65,20 +82,15 @@ module.exports = {
|
|||
}
|
||||
//其他目录
|
||||
else {
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
mdFile: mdFile,
|
||||
assetsDirPath: assetsDirPath,
|
||||
creatDirPath: creatDirPath,
|
||||
insertPath: insertPath,
|
||||
writePath: writePath
|
||||
}
|
||||
|
||||
//文件保存
|
||||
var md5 = crypto.createHash('md5');
|
||||
var imgbuffer = img.toPng();
|
||||
md5.update(imgbuffer);
|
||||
var filename = "" + (mdFile.getBaseName().replace(/\.\w+$/, '').replace(/\s+/g, '').split(/-|_/)[0]) +
|
||||
"-" + (md5.digest('hex').slice(0, 8)) + ".png";
|
||||
this.createDirectory(creatDirPath, function () {
|
||||
fs.writeFile(writePath + filename, imgbuffer, 'binary', function () {
|
||||
editor.insertText("", editor);
|
||||
});
|
||||
});
|
||||
},
|
||||
createDirectory: function (dirPath, callback) {
|
||||
var that = this;
|
||||
|
|
@ -88,7 +100,6 @@ module.exports = {
|
|||
if (!existed) {
|
||||
assetsDir.create().then(function (created) {
|
||||
if (created) {
|
||||
//console.log('Success Create dir');
|
||||
callback();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue