diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index d17987ce..e430d097 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -2,6 +2,7 @@ import React, { PropTypes } from 'react' import _ from 'lodash' import CodeMirror from 'codemirror' import path from 'path' +import copyImage from 'browser/main/lib/dataApi/copyImage' CodeMirror.modeURL = '../node_modules/codemirror/mode/%N/%N.js' @@ -166,9 +167,13 @@ export default class CodeEditor extends React.Component { handleDropImage (e) { e.preventDefault() - const imagePath = e.dataTransfer.files[0].path - const filename = path.basename(imagePath) - const imageMd = `![${encodeURI(filename)}](${encodeURI(imagePath)})` + let imagePath = e.dataTransfer.files[0].path + let filename = path.basename(imagePath) + const cachedStorageList = JSON.parse(localStorage.getItem('storages')) + const storagePath = _.find(cachedStorageList, {key: this.props.storageKey}) + + copyImage(imagePath, this.props.storageKey) + const imageMd = `![${encodeURI(filename)}](${storagePath.path}/images/${encodeURI(filename)})` this.insertImage(imageMd) } diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index a00a87bf..99c04e4f 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -180,7 +180,7 @@ class MarkdownEditor extends React.Component { } render () { - let { className, value, config } = this.props + let { className, value, config, storageKey } = this.props let editorFontSize = parseInt(config.editor.fontSize, 10) if (!(editorFontSize > 0 && editorFontSize < 101)) editorFontSize = 14 @@ -210,6 +210,7 @@ class MarkdownEditor extends React.Component { fontSize={editorFontSize} indentType={config.editor.indentType} indentSize={editorIndentSize} + storageKey={storageKey} onChange={(e) => this.handleChange(e)} onBlur={(e) => this.handleBlur(e)} /> diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js index 8b5a15ed..f1aff024 100644 --- a/browser/main/Detail/MarkdownNoteDetail.js +++ b/browser/main/Detail/MarkdownNoteDetail.js @@ -292,6 +292,7 @@ class MarkdownNoteDetail extends React.Component { styleName='body-noteEditor' config={config} value={this.state.note.content} + storageKey={this.state.note.storage} onChange={(e) => this.handleChange(e)} ignorePreviewPointerEvents={this.props.ignorePreviewPointerEvents} /> diff --git a/browser/main/lib/dataApi/copyImage.js b/browser/main/lib/dataApi/copyImage.js new file mode 100644 index 00000000..2a3bc65c --- /dev/null +++ b/browser/main/lib/dataApi/copyImage.js @@ -0,0 +1,27 @@ +const fs = require('fs') +const path = require('path') +const _ = require('lodash') +const sander = require('sander') + +function copyImage (filePath, storageKey) { + let targetStorage + try { + let cachedStorageList = JSON.parse(localStorage.getItem('storages')) + if (!_.isArray(cachedStorageList)) throw new Error('Target storage doesn\'t exist.') + + targetStorage = _.find(cachedStorageList, {key: storageKey}) + if (targetStorage == null) throw new Error('Target storage doesn\'t exist.') + } catch (e) { + return Promise.reject(e) + } + + //return resolveStorageData(targetStorage) + + const inputImage = fs.createReadStream(filePath) + const imageName = path.basename(filePath) + sander.mkdirSync(`${targetStorage.path}/images`) + const outputImage = fs.createWriteStream(path.join(targetStorage.path, 'images', imageName)) + inputImage.pipe(outputImage) +} + +module.exports = copyImage