UNPKG

pomy

Version:

Based on the concept of a project object model (POM), POMY can manage a project's build, reporting and documentation from a central piece of information.

162 lines (140 loc) 4.67 kB
var path = require('path'), request = require('request'), qs = require('querystring'), fs = require('fs'), folderDetect = require('../../../../util/folder-detect'), filters = require('../../../../util/filters'), Dropbox = require(path.resolve(__dirname, '../plugins/dropbox/dropbox.js')).Dropbox, Github = require(path.resolve(__dirname, '../plugins/github/github.js')).Github, GoogleDrive = require('../plugins/googledrive/googledrive.js').GoogleDrive, OneDrive = require('../plugins/onedrive/onedrive.js').OneDrive; diff = require('../plugins/text_diff/index'); var folder = path.join( process.env.HOME, // "var/" + global.settings.deploy[global.settings.target].domain + "/documents/" + global.settings.name + "/" + global.settings.target "var/" + (global.settings.site.domain || global.settings.site.ips[0] || "www") + "/documents/" + global.settings.name ); // Show the index page exports.index = function(req, res) { // Some flags to be set for client-side logic. var indexConfig = { isDropboxAuth: !!req.session.isDropboxSynced, isGithubAuth: !!req.session.isGithubSynced, isEvernoteAuth: !!req.session.isEvernoteSynced, isGoogleDriveAuth: !!req.session.isGoogleDriveSynced, isOneDriveAuth: !!req.session.isOneDriveSynced, isDropboxConfigured: Dropbox.isConfigured, isGithubConfigured: Github.isConfigured, isGoogleDriveConfigured: GoogleDrive.isConfigured, isOneDriveConfigured: OneDrive.isConfigured }; if (!req.session.isEvernoteSynced) { console.warn('Evernote not implemented yet.'); } if (req.session.github && req.session.github.username) { indexConfig.github_username = req.session.github.username; } return res.render('markdown/index', indexConfig); }; exports.getDocuments = function(req, res) { var type = req.query.type; var position = type ? path.join(folder, type) : folder; return res.json(folderDetect.detectAllSync(position, filters.md, function(dir) { dir.title = path.relative(position, dir.title); }).children); } exports.getDocument = function(req, res) { var pathname = folderDetect.getSync(req.params.id, folder, filters.md); var file = null; if (pathname) { var stat = fs.statSync(pathname); var body = fs.readFileSync(pathname, 'utf8'); file = { id: stat.ino, name: path.basename(pathname), title: path.relative(folder, pathname), body: body.toString(), mtime: stat.mtime.getTime() //修改时间 }; } return res.json(file); } exports.renameDocument = function(req, res) { var id = req.params.id; var name = req.body.name; var title = req.body.title; var pathname = folderDetect.getSync(id, folder, filters.md); fs.renameSync(pathname, path.join(folder, title, '..', name)); return res.json({ id: id }); } exports.updateDocument = function(req, res) { var id = req.params.id; var body = req.body.body; var pathname = folderDetect.getSync(id, folder, filters.md); /** * diff */ var mtime = fs.statSync(pathname).mtime.getTime(), diffResult = { conflict: false, value: '' }; if (req.body.mtime !== mtime) { diffResult = diff(fs.readFileSync(pathname, 'utf8'), body); body = diffResult.value; } if (body !== fs.readFileSync(pathname, 'utf8') && diffResult.conflict === false) { fs.writeFileSync(pathname, body, { flags: 'a' }); } mtime = fs.statSync(pathname).mtime.getTime(); return res.json({ id: id, mtime: mtime, body: body }); } exports.saveDocument = function(req, res) { var title = req.body.title; var name = req.body.name; var body = req.body.body; var pathname = path.join(folder, title, name); var filename = name; if (fs.existsSync(pathname)) { var i = 1; filename = name.replace(".md", "(" + i++ + ").md"); var tmp = path.resolve(pathname, '..', filename); while (fs.existsSync(tmp)) { filename = name.replace(".md", "(" + i++ + ").md"); tmp = path.resolve(pathname, '..', filename); } pathname = tmp; } fs.writeFileSync(pathname, body, { flags: 'a' }); // fs.closeSync(fd); var stat = fs.statSync(pathname); return res.json({ id: stat.ino, name: filename, title: path.relative(folder, pathname), body: body }); } exports.delDocument = function(req, res) { var pathname = folderDetect.getSync(req.params.id, folder, filters.md); if (fs.existsSync(pathname)) { fs.unlinkSync(pathname); } return res.json({ id: req.params.id }); } // Show the not implemented yet page exports.not_implemented = function(req, res) { return res.render('not-implemented'); };