Baris Usakli
commit 59f4b6788a

@ -35,7 +35,8 @@
"request": "~2.25.0",
"reds": "~0.2.4",
"winston": "~0.7.2",
"nodebb-plugin-mentions": "~0.1.0"
"nodebb-plugin-mentions": "~0.1.0",
"nodebb-plugin-markdown": "~0.1.0"
},
"bugs": {
"url": "https://github.com/designcreateplay/NodeBB/issues"

@ -66,27 +66,35 @@ var RDB = require('./redis.js'),
postSearch.index(content, pid);
});
posts.getPostField(pid, 'tid', function(tid) {
PostTools.isMain(pid, tid, function(isMainPost) {
if (isMainPost) {
topics.setTopicField(tid, 'title', title);
topicSearch.remove(tid, function() {
topicSearch.index(title, tid);
async.parallel([
function(next) {
posts.getPostField(pid, 'tid', function(tid) {
PostTools.isMain(pid, tid, function(isMainPost) {
if (isMainPost) {
topics.setTopicField(tid, 'title', title);
topicSearch.remove(tid, function() {
topicSearch.index(title, tid);
next(null, tid);
});
}
});
}
io.sockets.in('topic_' + tid).emit('event:post_edited', {
pid: pid,
title: title,
content: PostTools.markdownToHTML(content)
});
},
function(next) {
PostTools.toHTML(content, next);
}
], function(err, results) {
io.sockets.in('topic_' + results[0]).emit('event:post_edited', {
pid: pid,
title: title,
content: results[1]
});
});
};
PostTools.privileges(pid, uid, function(privileges) {
if (privileges.editable) {
plugins.fireHook('filter:save_post_content', content, function(parsedContent) {
plugins.fireHook('filter:post.save', content, function(parsedContent) {
content = parsedContent;
success();
});
@ -161,35 +169,28 @@ var RDB = require('./redis.js'),
});
}
PostTools.markdownToHTML = function(md, isSignature) {
var marked = require('marked'),
cheerio = require('cheerio');
PostTools.toHTML = function(raw, callback) {
plugins.fireHook('filter:post.parse', raw, function(parsed) {
var cheerio = require('cheerio');
marked.setOptions({
breaks: true
});
if (md && md.length > 0) {
var parsedContentDOM = cheerio.load(marked(md));
var domain = nconf.get('url');
if (parsed && parsed.length > 0) {
var parsedContentDOM = cheerio.load(parsed);
var domain = nconf.get('url');
parsedContentDOM('a').each(function() {
this.attr('rel', 'nofollow');
var href = this.attr('href');
parsedContentDOM('a').each(function() {
this.attr('rel', 'nofollow');
var href = this.attr('href');
if (href && !href.match(domain) && !utils.isRelativeUrl(href)) {
this.attr('href', domain + 'outgoing?url=' + encodeURIComponent(href));
if (!isSignature) this.append(' <i class="icon-external-link"></i>');
}
});
html = parsedContentDOM.html();
} else {
html = '<p></p>';
}
if (href && !href.match(domain) && !utils.isRelativeUrl(href)) {
this.attr('href', domain + 'outgoing?url=' + encodeURIComponent(href));
}
});
return html;
callback(null, parsedContentDOM.html());
} else {
callback(null, '<p></p>');
}
});
}

@ -34,28 +34,29 @@ var RDB = require('./redis.js'),
Posts.addUserInfoToPost = function(post, callback) {
user.getUserFields(post.uid, ['username', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned'], function(err, userData) {
if(err)
return callback();
post.username = userData.username || 'anonymous';
post.userslug = userData.userslug || '';
post.user_rep = userData.reputation || 0;
post.user_postcount = userData.postcount || 0;
post.user_banned = userData.banned || '0';
post.picture = userData.picture || require('gravatar').url('', {}, https=nconf.get('https'));
post.signature = postTools.markdownToHTML(userData.signature, true);
if(post.editor !== '') {
user.getUserFields(post.editor, ['username', 'userslug'], function(err, editorData) {
if(err)
return callback();
post.editorname = editorData.username;
post.editorslug = editorData.userslug;
if(err) return callback();
postTools.toHTML(userData.signature, function(err, signature) {
post.username = userData.username || 'anonymous';
post.userslug = userData.userslug || '';
post.user_rep = userData.reputation || 0;
post.user_postcount = userData.postcount || 0;
post.user_banned = userData.banned || '0';
post.picture = userData.picture || require('gravatar').url('', {}, https=nconf.get('https'));
post.signature = signature;
if(post.editor !== '') {
user.getUserFields(post.editor, ['username', 'userslug'], function(err, editorData) {
if(err) return callback();
post.editorname = editorData.username;
post.editorslug = editorData.userslug;
callback();
});
} else {
callback();
});
} else {
callback();
}
}
});
});
}
@ -64,28 +65,41 @@ var RDB = require('./redis.js'),
var posts = [];
function getPostSummary(pid, callback) {
Posts.getPostFields(pid, ['pid', 'tid', 'content', 'uid', 'timestamp', 'deleted'], function(postData) {
if(postData.deleted === '1') {
return callback(null);
}
Posts.addUserInfoToPost(postData, function() {
async.waterfall([
function(next) {
Posts.getPostFields(pid, ['pid', 'tid', 'content', 'uid', 'timestamp', 'deleted'], function(postData) {
if (postData.deleted === '1') return callback(null);
else {
postData.relativeTime = utils.relativeTime(postData.timestamp);
next(null, postData);
}
});
},
function(postData, next) {
Posts.addUserInfoToPost(postData, function() {
next(null, postData);
});
},
function(postData, next) {
topics.getTopicFields(postData.tid, ['slug', 'deleted'], function(err, topicData) {
if(err)
return callback(err);
if(topicData.deleted === '1')
return callback(null);
if (err) return callback(err);
else if (topicData.deleted === '1') return callback(null);
if(postData.content)
postData.content = utils.strip_tags(postTools.markdownToHTML(postData.content));
postData.relativeTime = utils.relativeTime(postData.timestamp);
postData.topicSlug = topicData.slug;
posts.push(postData);
callback(null);
next(null, postData);
});
});
},
function(postData, next) {
if (postData.content) {
postTools.toHTML(postData.content, function(err, content) {
if (!err) postData.content = utils.strip_tags(content);
next(err, postData);
});
} else next(null, postData);
}
], function(err, postData) {
if (!err) posts.push(postData);
callback(err);
});
}
@ -144,7 +158,7 @@ var RDB = require('./redis.js'),
Posts.getPostsByPids = function(pids, callback) {
var posts = [];
function iterator(pid, callback) {
async.eachSeries(pids, function (pid, callback) {
Posts.getPostData(pid, function(postData) {
if(postData) {
postData.relativeTime = utils.relativeTime(postData.timestamp);
@ -152,8 +166,6 @@ var RDB = require('./redis.js'),
postData['edited-class'] = postData.editor !== '' ? '' : 'none';
postData['relativeEditTime'] = postData.edited !== '0' ? utils.relativeTime(postData.edited) : '';
postData.content = postTools.markdownToHTML(postData.content);
if(postData.uploadedImages) {
try {
postData.uploadedImages = JSON.parse(postData.uploadedImages);
@ -164,13 +176,15 @@ var RDB = require('./redis.js'),
} else {
postData.uploadedImages = [];
}
posts.push(postData);
postTools.toHTML(postData.content, function(err, content) {
postData.content = content;
posts.push(postData);
callback(null);
});
}
callback(null);
});
}
async.eachSeries(pids, iterator, function(err) {
}, function(err) {
if(!err) {
callback(null, posts);
} else {
@ -329,8 +343,9 @@ var RDB = require('./redis.js'),
},
content: function(next) {
plugins.fireHook('filter:post.get', postData, function(postData) {
postData.content = postTools.markdownToHTML(postData.content, false);
next(null, postData.content);
postTools.toHTML(postData.content, function(err, content) {
next(null, content);
});
});
}
}, function(err, results) {

@ -44,7 +44,7 @@ var user = require('./../user.js'),
require('async').each(data.categories, iterator, function(err) {
data.motd_class = (meta.config.show_motd === '1' || meta.config.show_motd === undefined) ? '' : 'none';
data.motd = marked(meta.config.motd || "# NodeBB <span class='hidden-phone'>v " + pkg.version + "</span>\nWelcome to NodeBB, the discussion platform of the future.\n\n<a target=\"_blank\" href=\"http://www.nodebb.org\" class=\"btn btn-large\"><i class=\"icon-comment\"></i><span class='hidden-phone'>&nbsp;Get NodeBB</span></a> <a target=\"_blank\" href=\"https://github.com/designcreateplay/NodeBB\" class=\"btn btn-large\"><i class=\"icon-github-alt\"></i><span class='hidden-phone'>&nbsp;Fork us on Github</span></a> <a target=\"_blank\" href=\"https://twitter.com/dcplabs\" class=\"btn btn-large\"><i class=\"icon-twitter\"></i><span class='hidden-phone'>&nbsp;@dcplabs</span></a>");
data.motd = require('marked')(meta.config.motd || "# NodeBB <span class='hidden-phone'>v " + pkg.version + "</span>\nWelcome to NodeBB, the discussion platform of the future.\n\n<a target=\"_blank\" href=\"http://www.nodebb.org\" class=\"btn btn-large\"><i class=\"icon-comment\"></i><span class='hidden-phone'>&nbsp;Get NodeBB</span></a> <a target=\"_blank\" href=\"https://github.com/designcreateplay/NodeBB\" class=\"btn btn-large\"><i class=\"icon-github-alt\"></i><span class='hidden-phone'>&nbsp;Fork us on Github</span></a> <a target=\"_blank\" href=\"https://twitter.com/dcplabs\" class=\"btn btn-large\"><i class=\"icon-twitter\"></i><span class='hidden-phone'>&nbsp;@dcplabs</span></a>");
res.json(data);
});

@ -4,7 +4,6 @@ var user = require('./../user.js'),
fs = require('fs'),
utils = require('./../../public/src/utils.js'),
path = require('path'),
marked = require('marked'),
winston = require('winston');
(function(User) {
@ -353,12 +352,15 @@ var user = require('./../user.js'),
userData.posts = posts.filter(function(p) {return p.deleted !== "1";});
userData.isFollowing = isFollowing;
userData.signature = postTools.markdownToHTML(userData.signature, true);
if(!userData.profileviews)
userData.profileviews = 1;
if(callerUID !== userData.uid)
user.incrementUserFieldBy(userData.uid, 'profileviews', 1);
res.json(userData);
postTools.toHTML(userData.signature, function(err, signature) {
userData.signature = signature;
res.json(userData);
});
});
});
} else {

@ -271,7 +271,7 @@ var RDB = require('./redis.js'),
topics.getTopicField(tid, 'title', function(err, title) {
topics.getTeaser(tid, function(err, teaser) {
if (!err) {
notifications.create(teaser.username + ' has posted a reply to: "' + title + '"', null, '/topic/' + tid, 'topic:' + tid, function(nid) {
notifications.create('<strong>' + teaser.username + '</strong> has posted a reply to: "<strong>' + title + '</strong>"', null, '/topic/' + tid, 'topic:' + tid, function(nid) {
next(null, nid);
});
} else next(err);

@ -5,7 +5,6 @@ var RDB = require('./redis.js')
user = require('./user.js'),
categories = require('./categories.js'),
posts = require('./posts.js'),
marked = require('marked'),
threadTools = require('./threadTools.js'),
postTools = require('./postTools'),
async = require('async'),
@ -14,9 +13,6 @@ var RDB = require('./redis.js')
reds = require('reds'),
topicSearch = reds.createSearch('nodebbtopicsearch');
marked.setOptions({
breaks: true
});
(function(Topics) {
@ -569,15 +565,17 @@ marked.setOptions({
if(postData.content) {
stripped = postData.content.replace(/>.+\n\n/, '');
stripped = utils.strip_tags(postTools.markdownToHTML(stripped));
postTools.toHTML(stripped, function(err, stripped) {
stripped = utils.strip_tags(stripped);
callback(null, {
"text": stripped,
"username": userData.username,
"picture": userData.picture,
"timestamp" : timestamp
});
});
}
callback(null, {
"text": stripped,
"username": userData.username,
"picture": userData.picture,
"timestamp" : timestamp
});
});
});
} else callback(new Error('no-teaser-found'));

@ -5,7 +5,6 @@ var utils = require('./../public/src/utils.js'),
meta = require('./meta.js'),
emailjsServer = emailjs.server.connect(meta.config.mailer),
bcrypt = require('bcrypt'),
marked = require('marked'),
notifications = require('./notifications.js'),
topics = require('./topics.js'),
async = require('async');
@ -581,7 +580,7 @@ var utils = require('./../public/src/utils.js'),
User.getUserField(uid, 'username', function(err, username) {
RDB.smembers('followers:' + uid, function(err, followers) {
topics.getTopicField(tid, 'slug', function(err, slug) {
var message = username + ' made a new post';
var message = '<strong>' + username + '</strong> made a new post';
notifications.create(message, 5, nconf.get('url') + 'topic/' + slug + '#' + pid, 'notification_'+ Date.now(), function(nid) {
notifications.push(nid, followers);

@ -6,7 +6,6 @@ var express = require('express'),
path = require('path'),
redis = require('redis'),
redisServer = redis.createClient(nconf.get('redis:port'), nconf.get('redis:host')),
marked = require('marked'),
utils = require('../public/src/utils.js'),
pkg = require('../package.json'),
fs = require('fs'),

@ -527,7 +527,7 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
user.getUserField(uid, 'username', function(err, username) {
var finalMessage = username + ' : ' + msg;
var finalMessage = 'New message from <strong>' + username + '</strong>';
notifications.create(finalMessage, 5, '#', 'notification_' + uid + '_' + touid, function(nid) {
notifications.push(nid, [touid], function(success) {

Loading…
Cancel
Save