Skip to content

Commit d0596e8

Browse files
committed
Merge pull request #1 from lanceli/master
update: merge from lanceli
2 parents 8f9ceb3 + 7c0e2f1 commit d0596e8

File tree

14 files changed

+171
-9
lines changed

14 files changed

+171
-9
lines changed

app/css/app/_topic.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,8 @@
4040
background: rgba(0, 0, 0, 0);
4141
}
4242
}
43+
.bar.bar-header {
44+
.topic-collected {
45+
color: $node-green;
46+
}
47+
}

app/css/app/_topics.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
background-color: $node-green;
3131
color: #fff;
3232
}
33+
.item {
34+
left: 0;
35+
right: 0;
36+
}
3337
}
3438
.topic-content {
3539
img {

app/css/modules/_items.scss

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
.item {
2-
left: 0;
3-
right: 0;
4-
}
51
.item-divider {
62
color: #555;
73
font-weight: normal;

app/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
<script src="js/controllers/topics.js"></script>
4141
<script src="js/controllers/topic.js"></script>
4242
<script src="js/controllers/user.js"></script>
43+
<script src="js/controllers/user_collections.js"></script>
4344
<script src="js/controllers/messages.js"></script>
4445
<script src="js/controllers/settings.js"></script>
4546
<script src="js/services/tabs.js"></script>

app/js/app.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,15 @@ angular.module('cnodejs', [
110110
}
111111
}
112112
})
113+
.state('app.user_collections', {
114+
url: '/user/:loginname/collections',
115+
views: {
116+
'menuContent': {
117+
templateUrl: 'templates/user_collections.html',
118+
controller: 'UserCollectionsCtrl'
119+
}
120+
}
121+
})
113122
.state('app.messages', {
114123
url: '/my/messages',
115124
views: {

app/js/controllers/topic.js

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,19 @@
99
*/
1010

1111
angular.module('cnodejs.controllers')
12-
.controller('TopicCtrl', function($scope, $rootScope, $stateParams, $timeout, $ionicLoading, $ionicActionSheet, $ionicScrollDelegate, $log, Topics, Topic, User) {
12+
.controller('TopicCtrl', function(
13+
$scope,
14+
$rootScope,
15+
$stateParams,
16+
$timeout,
17+
$ionicLoading,
18+
$ionicActionSheet,
19+
$ionicScrollDelegate,
20+
$log,
21+
Topics,
22+
Topic,
23+
User
24+
) {
1325
$log.debug('topic ctrl', $stateParams);
1426
var id = $stateParams.id;
1527
var topic = Topics.getById(id);
@@ -42,6 +54,15 @@ angular.module('cnodejs.controllers')
4254
};
4355
$scope.loadTopic();
4456

57+
// detect if user has collected this topic
58+
var currentUser = User.getCurrentUser();
59+
$scope.isCollected = false;
60+
angular.forEach(currentUser.collect_topics, function(topics) {
61+
if (topics.id === id) {
62+
$scope.isCollected = true;
63+
}
64+
});
65+
4566
// do refresh
4667
$scope.doRefresh = function() {
4768
return $scope.loadTopic(true).then(function(response) {
@@ -119,4 +140,23 @@ angular.module('cnodejs.controllers')
119140
}
120141
});
121142
};
143+
144+
// collect topic
145+
$scope.collectTopic = function () {
146+
if ($scope.isCollected) {
147+
Topic.deCollectTopic(id).$promise.then(function(response) {
148+
if (response.success) {
149+
$scope.isCollected = false;
150+
User.deCollectTopic(id);
151+
}
152+
});
153+
} else {
154+
Topic.collectTopic(id).$promise.then(function(response) {
155+
if (response.success) {
156+
$scope.isCollected = true;
157+
User.collectTopic(id);
158+
}
159+
});
160+
}
161+
};
122162
});

app/js/controllers/user.js

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,34 @@ angular.module('cnodejs.controllers')
1919
if (window.analytics) {
2020
window.analytics.trackView('user view');
2121
}
22-
});
2322

24-
User.getByLoginName(loginName).$promise.then(function(response) {
25-
$scope.user = response.data;
23+
// load user data
24+
$scope.loadUser(true);
2625
});
2726

27+
// load user data
28+
$scope.loadUser = function(reload) {
29+
var userResource;
30+
if (reload === true) {
31+
userResource = User.get(loginName);
32+
} else {
33+
userResource = User.getByLoginName(loginName);
34+
}
35+
return userResource.$promise.then(function(response) {
36+
$scope.user = response.data;
37+
});
38+
};
39+
40+
// do refresh
41+
$scope.doRefresh = function() {
42+
return $scope.loadUser(true).then(function(response) {
43+
$log.debug('do refresh complete');
44+
}, function() {
45+
}).finally(function() {
46+
$scope.$broadcast('scroll.refreshComplete');
47+
});
48+
};
49+
2850
// reload user info from server if is current user view
2951
var currentUser = User.getCurrentUser();
3052
if (loginName === currentUser.loginname) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict';
2+
3+
/**
4+
* @ngdoc function
5+
* @name cnodejs.controllers:UserCollectionsCtrl
6+
* @description
7+
* # UserCollectionsCtrl
8+
* Main Controller of the cnodejs app
9+
*/
10+
11+
angular.module('cnodejs.controllers')
12+
.controller('UserCollectionsCtrl', function($scope, $rootScope, $log, $stateParams, $state, User) {
13+
$log.log('user ctrl');
14+
var loginName = $stateParams.loginname;
15+
16+
// before enter view event
17+
$scope.$on('$ionicView.beforeEnter', function() {
18+
// track view
19+
if (window.analytics) {
20+
window.analytics.trackView('user collections view');
21+
}
22+
});
23+
24+
$scope.user = User.getCurrentUser();
25+
});

app/js/services/topic.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ angular.module('cnodejs.services')
1414
var resource = $resource(ENV.api + '/topic/:id', {
1515
id: '@id',
1616
}, {
17+
collect: {
18+
method: 'post',
19+
url: ENV.api + '/topic/collect'
20+
},
21+
deCollect: {
22+
method: 'post',
23+
url: ENV.api + '/topic/de_collect'
24+
},
1725
reply: {
1826
method: 'post',
1927
url: ENV.api + '/topic/:topicId/replies'
@@ -73,6 +81,20 @@ angular.module('cnodejs.services')
7381
}
7482
}
7583
);
84+
},
85+
collectTopic: function(topicId) {
86+
var currentUser = User.getCurrentUser();
87+
return resource.collect({
88+
topic_id: topicId,
89+
accesstoken: currentUser.accesstoken
90+
});
91+
},
92+
deCollectTopic: function(topicId) {
93+
var currentUser = User.getCurrentUser();
94+
return resource.deCollect({
95+
topic_id: topicId,
96+
accesstoken: currentUser.accesstoken
97+
});
7698
}
7799
};
78100
});

app/js/services/user.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,20 @@ angular.module('cnodejs.services')
7272
Storage.set(storageKey, user);
7373
}
7474
});
75+
},
76+
collectTopic: function(topicId) {
77+
user.collect_topics.push({
78+
id: topicId
79+
});
80+
Storage.set(storageKey, user);
81+
},
82+
deCollectTopic: function(topicId) {
83+
angular.forEach(user.collect_topics, function(topic, key) {
84+
if (topic.id === topicId) {
85+
user.collect_topics.splice(key, 1);
86+
}
87+
});
88+
Storage.set(storageKey, user);
7589
}
7690
};
7791
});

app/templates/topic.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
<ion-view view-title="详情">
2+
<ion-nav-buttons side="right">
3+
<button class="button button-icon icon ion-star" ng-class="{'topic-collected': isCollected}" ng-click="collectTopic()"></button>
4+
</ion-nav-buttons>
25
<ion-content class="has-header">
36
<ion-refresher pulling-text="下拉刷新..." on-refresh="doRefresh()" refreshing-icon="ion-loading-c">
47
</ion-refresher>

app/templates/user.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
<button ng-if="user.loginname == loginName" class="button button-clear" ng-click="logout()">退出</button>
44
</ion-nav-buttons>
55
<ion-content class="has-header user">
6+
<ion-refresher pulling-text="下拉刷新..." on-refresh="doRefresh()" refreshing-icon="ion-loading-c">
7+
</ion-refresher>
68
<ion-list>
79
<ion-item class="item-divider item-gap">
810
</ion-item>
@@ -13,6 +15,9 @@
1315
<p>
1416
注册于:{{user.create_at | amDateFormat:'YYYY-MM-DD hh:mm:ss'}}
1517
</p>
18+
<p>
19+
<a href="#/user/{{user.loginname}}/collections">{{user.collect_topics.length}}话题收藏</a>
20+
</p>
1621
</ion-item>
1722
<ion-item class="item-divider">
1823
最近主题

app/templates/user_collections.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<ion-view view-title="话题收藏">
2+
<ion-content class="has-header user-collections">
3+
<ion-list>
4+
<ion-item ng-repeat="topic in user.collect_topics" href="#/topic/{{topic.id}}">
5+
<h2>{{topic.title}}</h2>
6+
<p>
7+
{{topic.author.loginname}}
8+
<span class="item-note" am-time-ago="topic.last_reply_at">
9+
</span>
10+
</p>
11+
</ion-item>
12+
</ion-list>
13+
</ion-content>
14+
</ion-view>

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
"https://github.com/katzer/cordova-plugin-badge.git",
6060
"org.apache.cordova.dialogs",
6161
"https://github.com/katzer/cordova-plugin-email-composer.git",
62-
"https://github.com/danwilson/google-analytics-plugin.git"
62+
"https://github.com/danwilson/google-analytics-plugin.git",
63+
"https://github.com/lanceli/jpush-phonegap-plugin",
64+
"org.apache.cordova.device"
6365
]
6466
}

0 commit comments

Comments
 (0)