Просмотр исходного кода

Only diff text post when updated

Sotaro KARASAWA 10 лет назад
Родитель
Сommit
5104a9bb40
2 измененных файлов с 23 добавлено и 7 удалено
  1. 3 2
      lib/routes/page.js
  2. 20 5
      lib/util/slack.js

+ 3 - 2
lib/routes/page.js

@@ -183,7 +183,6 @@ module.exports = function(crowi, app) {
     Page.findPage(path, req.user, req.query.revision)
     .then(function(page) {
       debug('Page found', page._id, page.path);
-      debug(page);
 
       if (isMarkdown) {
         res.set('Content-Type', 'text/plain');
@@ -228,6 +227,7 @@ module.exports = function(crowi, app) {
     var redirectPath = encodeURI(path);
     var pageData = {};
     var updateOrCreate;
+    var previousRevision = false;
 
     // set to render
     res.locals.pageForm = pageForm;
@@ -254,6 +254,7 @@ module.exports = function(crowi, app) {
       }
 
       if (data) {
+        previousRevision = data.revision;
         // update existing page
         var newRevision = Revision.prepareRevision(data, body, req.user);
         updateOrCreate = 'update';
@@ -277,7 +278,7 @@ module.exports = function(crowi, app) {
 
           if (crowi.slack) {
             notify.slack.channel.split(',').map(function(chan) {
-              var message = crowi.slack.prepareSlackMessage(pageData, req.user, chan, updateOrCreate);
+              var message = crowi.slack.prepareSlackMessage(pageData, req.user, chan, updateOrCreate, previousRevision);
               crowi.slack.post(message).then(function(){}).catch(function(){});
             });
           }

+ 20 - 5
lib/util/slack.js

@@ -111,12 +111,27 @@ module.exports = function(crowi) {
     return this.convertMarkdownToMrkdwn(body);
   };
 
-  slack.prepareAttachmentTextForUpdate = function(page, user) {
-    // create diff
-    return 'diff';
+  slack.prepareAttachmentTextForUpdate = function(page, user, previousRevision) {
+    var diff = require('diff');
+    var diffText = ''
+
+    diff.diffLines(previousRevision.body, page.revision.body).forEach(function(line) {
+      debug('diff line', line)
+      if (line.added) {
+        diffText += '+' + line.value.replace(/\n/g, '\n+ ');
+      } else if (line.removed) {
+        diffText += '-' + line.value.replace(/\n/g, '\n- ');
+      } else {
+        diffText += '...\n';
+      }
+    });
+
+    debug('diff is', diffText)
+
+    return diffText;
   };
 
-  slack.prepareSlackMessage = function(page, user, channel, updateType) {
+  slack.prepareSlackMessage = function(page, user, channel, updateType, previousRevision) {
     var config = crowi.getConfig();
     var url = config.crowi['app:url'] || '';
     var body = page.revision.body;
@@ -124,7 +139,7 @@ module.exports = function(crowi) {
     if (updateType == 'create') {
       body = this.prepareAttachmentTextForCreate(page, user);
     } else {
-      body = this.prepareAttachmentTextForUpdate(page, user);
+      body = this.prepareAttachmentTextForUpdate(page, user, previousRevision);
     }
 
     var attachment = {