@@ -10,6 +10,7 @@ var shortId = require('shortid');
1010var metaMarked = require ( 'meta-marked' ) ;
1111var querystring = require ( 'querystring' ) ;
1212var request = require ( 'request' ) ;
13+ var moment = require ( 'moment' ) ;
1314
1415//core
1516var config = require ( "./config.js" ) ;
@@ -322,6 +323,38 @@ function actionGist(req, res, note) {
322323 res . redirect ( "https://github.com/login/oauth/authorize?" + query ) ;
323324}
324325
326+ function actionRevision ( req , res , note ) {
327+ var actionId = req . params . actionId ;
328+ if ( actionId ) {
329+ var time = moment ( parseInt ( actionId ) ) ;
330+ if ( time . isValid ( ) ) {
331+ models . Revision . getPatchedNoteRevisionByTime ( note , time , function ( err , content ) {
332+ if ( err ) {
333+ logger . error ( err ) ;
334+ return response . errorInternalError ( res ) ;
335+ }
336+ if ( ! content ) {
337+ return response . errorNotFound ( res ) ;
338+ }
339+ res . end ( JSON . stringify ( content ) ) ;
340+ } ) ;
341+ } else {
342+ return response . errorNotFound ( res ) ;
343+ }
344+ } else {
345+ models . Revision . getNoteRevisions ( note , function ( err , data ) {
346+ if ( err ) {
347+ logger . error ( err ) ;
348+ return response . errorInternalError ( res ) ;
349+ }
350+ var out = {
351+ revision : data
352+ } ;
353+ res . end ( JSON . stringify ( out ) ) ;
354+ } ) ;
355+ }
356+ }
357+
325358function noteActions ( req , res , next ) {
326359 var noteId = req . params . noteId ;
327360 findNote ( req , res , function ( note ) {
@@ -343,6 +376,9 @@ function noteActions(req, res, next) {
343376 case "gist" :
344377 actionGist ( req , res , note ) ;
345378 break ;
379+ case "revision" :
380+ actionRevision ( req , res , note ) ;
381+ break ;
346382 default :
347383 return res . redirect ( config . serverurl + '/' + noteId ) ;
348384 break ;
0 commit comments