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

Convert markdown to slack mrkdwn (light)

Sotaro KARASAWA 10 лет назад
Родитель
Сommit
9405be2654
3 измененных файлов с 49 добавлено и 4 удалено
  1. 30 3
      lib/util/slack.js
  2. 1 1
      package.json
  3. 18 0
      test/util/slack.test.js

+ 30 - 3
lib/util/slack.js

@@ -92,15 +92,41 @@ module.exports = function(crowi) {
     });
   };
 
-  slack.prepareSlackMessage = function(page, user, channel, updateType) {
-    var config = crowi.getConfig();
-    var url = config.crowi['app:url'] || '';
+  slack.convertMarkdownToMrkdwn = function(body) {
+
+    body = body
+      .replace(/\n\*\s(.+)/g, '\n• $1')
+      .replace(/#{1,}\s?(.+)/g, '\n*$1*')
+      .replace(/(\[(.+)\]\((https?:\/\/.+)\))/g, '<$3|$2>');
+
+    return body;
+  };
 
+  slack.prepareAttachmentTextForCreate = function(page, user) {
     var body = page.revision.body;
     if (body.length > 2000) {
       body = body.substr(0, 2000) + '...';
     }
 
+    return this.convertMarkdownToMrkdwn(body);
+  };
+
+  slack.prepareAttachmentTextForUpdate = function(page, user) {
+    // create diff
+    return 'diff';
+  };
+
+  slack.prepareSlackMessage = function(page, user, channel, updateType) {
+    var config = crowi.getConfig();
+    var url = config.crowi['app:url'] || '';
+    var body = page.revision.body;
+
+    if (updateType == 'create') {
+      body = this.prepareAttachmentTextForCreate(page, user);
+    } else {
+      body = this.prepareAttachmentTextForUpdate(page, user);
+    }
+
     var attachment = {
       color: '#263a3c',
       author_name: '@' + user.username,
@@ -136,5 +162,6 @@ module.exports = function(crowi) {
 
     return text;
   };
+
   return slack;
 };

+ 1 - 1
package.json

@@ -34,7 +34,7 @@
     "bluebird": "~3.0.5",
     "body-parser": "~1.14.1",
     "bootstrap-sass": "~3.3.6",
-    "botkit": "git+https://github.com/sotarok/botkit.git#fix-undefined-function-callapiwithouttoken",
+    "botkit": "~0.1.1",
     "browserify": "~12.0.1",
     "cli": "~0.6.0",
     "connect-flash": "~0.1.1",

+ 18 - 0
test/util/slack.test.js

@@ -0,0 +1,18 @@
+var chai = require('chai')
+  , expect = chai.expect
+  , sinon = require('sinon')
+  , sinonChai = require('sinon-chai')
+  , utils = require('../utils.js')
+  ;
+chai.use(sinonChai);
+
+describe('Slack Util', function () {
+  var crowi = new (require(ROOT_DIR + '/lib/crowi'))(ROOT_DIR, process.env);
+  var slack = require(crowi.libDir + '/util/slack')(crowi);
+
+  it('convert markdown', function() {
+    var markdown = '# ほげほげ\n\n* aaa\n* bbb\n* ccc\n\n## ほげほげほげ\n\n[Yahoo! Japan](http://www.yahoo.co.jp/) is here\n**Bold** and *Italic*';
+    var markdownConverted = '\n*ほげほげ*\n\n• aaa\n• bbb\n• ccc\n\n\n*ほげほげほげ*\n\n<http://www.yahoo.co.jp/|Yahoo! Japan> is here\n**Bold** and *Italic*';
+    expect(slack.convertMarkdownToMrkdwn(markdown)).to.be.equal(markdownConverted);
+  });
+});