├── README.md ├── main.js ├── package.json ├── index.html ├── .gitignore └── script.js /README.md: -------------------------------------------------------------------------------- 1 | ## Install 2 | 3 | * Electron 4 | * node 5 | 6 | ## Setup 7 | 8 | `npm init` 9 | `main`: `index.js` => `main.js` 10 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | var app = require('app'); 2 | var BrowserWindow = require('browser-window'); 3 | 4 | app.on('ready', function() { 5 | var mainWindow = new BrowserWindow({width: 800, height: 600}); 6 | mainWindow.loadUrl('file://' + __dirname + '/index.html'); 7 | }); 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-md-editor", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "main.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "marked": "^0.3.3", 13 | "vue": "^0.12.4" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Markdown Editor 5 | 6 | 20 | 21 | 22 |
23 | 24 |
25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io 2 | 3 | ### Node ### 4 | # Logs 5 | logs 6 | *.log 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | 13 | # Directory for instrumented libs generated by jscoverage/JSCover 14 | lib-cov 15 | 16 | # Coverage directory used by tools like istanbul 17 | coverage 18 | 19 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 20 | .grunt 21 | 22 | # node-waf configuration 23 | .lock-wscript 24 | 25 | # Compiled binary addons (http://nodejs.org/api/addons.html) 26 | build/Release 27 | 28 | # Dependency directory 29 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 30 | node_modules 31 | -------------------------------------------------------------------------------- /script.js: -------------------------------------------------------------------------------- 1 | var Vue = require("vue"); 2 | var marked = require("marked"); 3 | var fs = require("fs"); 4 | 5 | var openFile = null; 6 | 7 | var editor = new Vue({ 8 | el: '#editor', 9 | data: { 10 | input: '# hello', 11 | filename: null 12 | }, 13 | filters: { 14 | marked: marked 15 | } 16 | }); 17 | 18 | var remote = require('remote'); 19 | var dialog = remote.require("dialog"); 20 | 21 | function openFileDialog() { 22 | dialog.showOpenDialog(function (filenames) { 23 | console.log(filenames); 24 | var filename = filenames[0]; 25 | if (filename) { 26 | fs.readFile(filename, "utf8", function (err, data) { 27 | if (err) { throw err; } 28 | editor.$data.filename = filename; 29 | editor.$data.input = data; 30 | }); 31 | } 32 | }); 33 | } 34 | 35 | function saveFileDialog() { 36 | function save(filename) { 37 | fs.writeFile(filename, editor.$data.input, function (err) { 38 | if (err) { throw err; } 39 | alert("Saved!"); 40 | }); 41 | } 42 | 43 | if (editor.$data.filename) { 44 | save(editor.$data.filename); 45 | } else { 46 | dialog.showSaveDialog(function (filename) { 47 | if (filename) { 48 | save(filename); 49 | editor.$data.filename = filename; 50 | } 51 | }); 52 | } 53 | } 54 | 55 | var Menu = remote.require('menu'); 56 | var template = [ 57 | { 58 | label: 'Markdown Editor', 59 | submenu: [ 60 | { 61 | label: "Quit", 62 | accelerator: "Command+Q", 63 | selector: 'terminate:' 64 | } 65 | ] 66 | }, 67 | { 68 | label: 'File', 69 | submenu: [ 70 | { 71 | label: "Open", 72 | accelerator: "Command+O", 73 | click: openFileDialog 74 | }, 75 | { 76 | label: "Save", 77 | accelerator: "Command+S", 78 | click: saveFileDialog 79 | }, 80 | ] 81 | } 82 | ]; 83 | menu = Menu.buildFromTemplate(template); 84 | Menu.setApplicationMenu(menu); 85 | --------------------------------------------------------------------------------