Skip to content

Commit c7f4530

Browse files
committed
在topic页面增加用户关注自动判断
还有一些小更新,如更改用户排行榜样式,前20位增加不同显示
1 parent 4fa8572 commit c7f4530

14 files changed

+115
-35
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ config.js
22
node_modules
33
.naeindex
44
public/user_data
5+
6+
.monitor

History.md

3.85 MB
Binary file not shown.

app.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,6 @@ app.configure('production', function(){
6363
routes(app);
6464

6565
app.listen(config.port);
66-
//console.log("NodeClub listening on port %d in %s mode", app.address().port, app.settings.env);
66+
console.log("NodeClub listening on port %d in %s mode", app.address().port, app.settings.env);
6767
console.log("God bless love....");
68+
console.log("You can debug your app with http://localhost:"+app.address().port);

config.default.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ exports.config = {
99

1010
// site settings
1111
site_headers: [
12-
'<meta name="author" content="慕远@TaoBao" />',
12+
'<meta name="author" content="EDP@TAOBAO" />',
1313
],
1414
host: 'http://127.0.0.1', // host 结尾不要添加'/'
1515
site_logo: '', // default is `name`

controllers/site.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ exports.index = function(req,res,next){
2828
});
2929
var recent_tags = tags.slice(0,5);
3030

31-
res.render('index',{tags:all_tags,topics:topics,current_page:page,list_topic_count:limit,hot_tags:hot_tags,recent_tags:recent_tags,
31+
//res.render('index',{tags:all_tags,topics:topics,current_page:page,list_topic_count:limit,hot_tags:hot_tags,recent_tags:recent_tags,
32+
res.render('index',{tags:all_tags,topics:topics,current_page:page,list_topic_count:limit,recent_tags:recent_tags,
3233
hot_topics:hot_topics,stars:stars,tops:tops,no_reply_topics:no_reply_topics,pages:pages});
3334
};
3435

controllers/topic.js

+20-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var Tag = models.Tag;
1111
var Topic = models.Topic;
1212
var TopicTag = models.TopicTag;
1313
var TopicCollect = models.TopicCollect;
14+
var Relation = models.Relation;
1415
var check = require('validator').check;
1516
var sanitize = require('validator').sanitize;
1617
var at_ctrl = require('./at');
@@ -33,12 +34,13 @@ exports.index = function(req, res, next) {
3334
if (topic_id.length !== 24) {
3435
return res.render('notify/notify', { error: '此话题不存在或已被删除。' });
3536
}
36-
var events = [ 'topic', 'other_topics', 'no_reply_topics', '@user' ];
37-
var ep = EventProxy.create(events, function(topic, other_topics, no_reply_topics) {
37+
var events = [ 'topic', 'other_topics', 'no_reply_topics', 'get_relation', '@user' ];
38+
var ep = EventProxy.create(events, function(topic, other_topics, no_reply_topics, relation) {
3839
res.render('topic/index', {
3940
topic: topic,
4041
author_other_topics: other_topics,
41-
no_reply_topics: no_reply_topics
42+
no_reply_topics: no_reply_topics,
43+
relation : relation
4244
});
4345
});
4446
ep.on('error', function(err) {
@@ -59,6 +61,7 @@ exports.index = function(req, res, next) {
5961
return res.render('notify/notify', { error: message });
6062
}
6163

64+
6265
at_ctrl.link_at_who(topic.content, function(err, content) {
6366
if (err) return ep.emit('error', err);
6467
topic.content = content;
@@ -91,12 +94,23 @@ exports.index = function(req, res, next) {
9194
}
9295
});
9396

97+
//get author's relationship
98+
if(!req.session.user._id){
99+
ep.emit('get_relation',null);
100+
}else{
101+
102+
Relation.findOne({user_id:req.session.user._id, follow_id: topic.author_id},function(err,relation){
103+
if (err) return ep.emit('error', err);
104+
ep.emit('get_relation',relation);
105+
});
106+
}
107+
94108
// get author other topics
95109
var options = { limit: 5, sort: [ [ 'last_reply_at', 'desc' ] ]};
96110
var query = { author_id: topic.author_id, _id: { '$nin': [ topic._id ] } };
97111
get_topics_by_query(query, options, function(err,topics){
98112
if (err) return ep.emit('error', err);
99-
ep.emit('other_topics', topics);
113+
ep.emit('other_topics', topics);
100114
});
101115

102116
// get no reply topics
@@ -545,12 +559,13 @@ function get_full_topic(id,cb){
545559
return cb(null, '话题的作者丢了。');
546560
}
547561
proxy.trigger('author',author);
548-
});
562+
});
549563

550564
reply_ctrl.get_replies_by_topic_id(topic._id,function(err,replies){
551565
if(err) return cb(err);
552566
proxy.trigger('replies',replies);
553567
});
568+
554569
});
555570

556571
}

controllers/user.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var EventProxy = require('eventproxy').EventProxy;
1616

1717
var check = require('validator').check,
1818
sanitize = require('validator').sanitize;
19-
19+
2020
var crypto = require('crypto');
2121

2222
exports.index = function(req,res,next){
@@ -63,6 +63,7 @@ exports.index = function(req,res,next){
6363
}else{
6464
Relation.findOne({user_id:req.session.user._id,follow_id:user._id},function(err,doc){
6565
if(err) return next(err);
66+
6667
proxy.trigger('relation',doc);
6768
});
6869
}

views/index.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
<div id='content'>
44
<div class='panel'>
5-
<div class='moon'>
6-
<img src='/images/tag_icon&16.png' title='标签'/>
5+
<div class='moon'>
76
<% if (locals.current_user && current_user.is_admin) { %>
7+
<img src='/images/tag_icon&16.png' title='标签'/>
88
<span class='fr'><a href='/tags/edit'><img src='/images/wrench_icon&16.png' title='编辑标签' /></a></span>
99
<% } %>
1010
</div>
@@ -18,7 +18,7 @@
1818
<div class='header'>
1919
<img src='/images/spechbubble_2_icon&16.png' title='话题'/>
2020
<% if (locals.current_user) { %>
21-
<a href='/topic/create' class='fr'><button class='btn' id='create_topic_btn'>发布话题</button></a>
21+
<a href='/topic/create' class='fr'><button class='btn btn-success fr' id='create_topic_btn'>发布话题</button></a>
2222
<% } %>
2323
</div>
2424
<% if (locals.topics && topics.length > 0) { %>

views/layout.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
</div>
7676
<div class='sep10'></div>
7777
<div class='col_fade'>
78-
&copy; 2012 <br>版本: <%= config.version %> <br>
78+
&copy; 2012 <br>本社区为开源系统,版本: <%= config.version %> ,欢迎贡献代码<br>
7979
<a href='http://cnodejs.net' target='_blank'> NAE </a><%= config.name %> 提供动力
8080
</div>
8181
</div>

views/reply/reply2.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</span>
2121
<span class='fr'>
2222
<% if(locals.current_user){ %>
23-
<a href='javascript:void(0);' class='dark reply2_at_btn'>@</a>
23+
<a href='javascript:void(0);' class='dark reply2_at_btn'>@回复</a>
2424
<% } %>
2525
</span>
2626

views/sidebar.html

+20-18
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,26 @@
1616
</div>
1717
<% } %>
1818
</div>
19+
20+
<% if (locals.tops) { %>
21+
<div class='sep10'></div>
22+
<div class='panel'>
23+
<div class='header'>
24+
<span class='col_fade'>积分榜</span>
25+
</div>
26+
<div class='inner'>
27+
<% if (tops.length > 0) { %>
28+
<ol>
29+
<%- partial('user/top', { collection: tops, as: 'user' }) %>
30+
</ol>
31+
<a class='dark' href='/users/top100'>TOP 100 &gt;&gt;</a>
32+
<% } else { %>
33+
<p></p>
34+
<% } %>
35+
</div>
36+
</div>
37+
<% } %>
38+
1939
<% if (locals.hot_tags) { %>
2040
<div class='sep10'></div>
2141
<div class='panel'>
@@ -68,24 +88,6 @@
6888
</div>
6989
<% } %>
7090

71-
<% if (locals.tops) { %>
72-
<div class='sep10'></div>
73-
<div class='panel'>
74-
<div class='header'>
75-
<span class='col_fade'>积分榜</span>
76-
</div>
77-
<div class='inner'>
78-
<% if (tops.length > 0) { %>
79-
<ol>
80-
<%- partial('user/top', { collection: tops, as: 'user' }) %>
81-
</ol>
82-
<a class='dark' href='/users/top100'>Top100»</a>
83-
<% } else { %>
84-
<p></p>
85-
<% } %>
86-
</div>
87-
</div>
88-
<% } %>
8991

9092
<% if (locals.stars) { %>
9193
<div class='sep10'></div>

views/user/card.html

+42-1
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,61 @@
33
<% if(user.avatar){ %>
44
<a href='/user/<%= user.name %>'><img class='user_avatar' src='<%= user.avatar %>' title='<%= user.name %>' /></a>
55
<% }else{ %>
6-
<a href='/user/<%= user.name %>'><img class='user_avatar' src='/images/user_icon&48.png' title='<%= user.name %>' /></a>
6+
<a href='/user/<%= user.name %>'><img class='user_avatar' src='<%- config.site_static_host %>/images/user_icon&48.png' title='<%= user.name %>' /></a>
77
<% } %>
88
<span class='sp10'></span>
99
<span class='user_name'><a class='dark' href='/user/<%= user.name %>'><%= user.name %></a></span>
10+
11+
<% if (locals.current_user && current_user._id != user._id) { %>
12+
<% if (!locals.relation) { %>
13+
<button class='btn btn-success fr' id='follow_btn' action='follow'>加入关注</button>
14+
<% } else { %>
15+
<button class='btn fr' id='follow_btn' action='un_follow'>取消关注</button>
16+
<% } %>
17+
<% } %>
18+
1019
<div class='board cl'>
1120
<div class='floor'><a href='/my/tags/'><span class='big'><%= user.collect_tag_count %></span> 标签收藏</a></div>
1221
<div class='floor'><a href='/my/topics'><span class='big'><%= user.collect_topic_count %></span> 话题收藏</a></div>
1322
<div class='floor'>
1423
<a href='/my/following'><span class='big'><%= user.following_count %></span> 关注</a>
1524
<a href='/my/follower'><span class='big'><%= user.follower_count %></span> 粉丝</a>
25+
26+
27+
1628
</div>
29+
1730
<% if(user.messages_count > 0){ %>
1831
<div class='floor'><a href='/my/messages'><span class='big messages_count'><%= user.messages_count %></span> 消息</a></div>
1932
<% } %>
2033
</div>
2134
</div>
2235
</div>
36+
37+
<% if (locals.current_user) { %>
38+
<script type='text/javascript'>
39+
$(document).ready(function(){
40+
41+
$('#follow_btn').click(function(){
42+
var $me = $(this);
43+
var action = $me.attr('action');
44+
var params = {
45+
follow_id: '<%= user._id %>',
46+
_csrf: '<%- csrf %>'
47+
};
48+
$.post('/user/' + action, params, function(data) {
49+
if (data.status === 'success') {
50+
if (action === 'follow') {
51+
$me.html('取消关注');
52+
$me.attr('action','un_follow');
53+
} else {
54+
$me.html('加入关注');
55+
$me.attr('action','follow');
56+
}
57+
$me.toggleClass('btn-success');
58+
}
59+
}, 'json');
60+
});
61+
});
62+
</script>
63+
<% } %>

views/user/top100.html

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
<thead>
1515
<th>#</th>
1616
<th>用户名</th>
17+
<th>粉丝数</th>
18+
<th>文章数</th>
1719
<th>积分</th>
1820
</thead>
1921
<tbody>

views/user/top100_user.html

+17-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
<tr>
2-
<td><%= indexInCollection+1 %></td>
3-
<td><a href='/user/<%= user.name %>'><%= user.name %></a></td>
2+
<% if(indexInCollection<20) { %>
3+
<td><b><%= indexInCollection+1 %></b></td>
4+
<td>
5+
<% if(user.avatar){ %>
6+
<a href='/user/<%= user.name %>'><img class='user_avatar' src='<%= user.avatar %>' title='<%= user.name %>' /></a>
7+
<% }else{ %>
8+
<a href='/user/<%= user.name %>'><img class='user_avatar' src='<%- config.site_static_host %>/images/user_icon&48.png' title='<%= user.name %>' /></a>
9+
<% } %>
10+
<span class='sp10'></span>
11+
<a href='/user/<%= user.name %>'><%= user.name %></a></td>
12+
<% } else { %>
13+
<td><%= indexInCollection+1 %></td>
14+
<td><a href='/user/<%= user.name %>'><%= user.name %></a></td>
15+
<% } %>
16+
17+
<td><%= user.follower_count %></td>
18+
<td><%= user.topic_count %></td>
419
<td><%= user.score %></td>
520
</tr>

0 commit comments

Comments
 (0)