实时更新点击时间与点击次数

This commit is contained in:
luchenqun 2017-03-20 11:57:37 +08:00
parent 9bebbb40fc
commit cbcc4f7e23
9 changed files with 179 additions and 94 deletions

View File

@ -564,7 +564,11 @@ db.getBookmarksTable = function(params) {
if (err) {
reject(err);
} else {
var bookmarksClickCount, bookmarksCreatedAt, bookmarksLatestClick;
var temp = [];
var bookmarks = [];
var begin = (params.currentPage - 1) * params.perPageItems;
var end = params.currentPage * params.perPageItems;
result.sort((a, b) => {
var click1 = parseInt(a.click_count);
var click2 = parseInt(b.click_count);
@ -576,19 +580,50 @@ db.getBookmarksTable = function(params) {
return 1;
}
})
bookmarksClickCount = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems);
temp = result.slice(begin, end);
temp.forEach((b1) => {
var find = false;
bookmarks.forEach((b2) => {
if (b1.id == b2.id) {
find = true;
}
})
if (!find) {
bookmarks.push(b1);
}
})
result.sort((a, b) => a.created_at >= b.created_at ? -1 : 1);
bookmarksCreatedAt = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems);
temp = result.slice(begin, end);
temp.forEach((b1) => {
var find = false;
bookmarks.forEach((b2) => {
if (b1.id == b2.id) {
find = true;
}
})
if (!find) {
bookmarks.push(b1);
}
})
result.sort((a, b) => a.last_click >= b.last_click ? -1 : 1);
bookmarksLatestClick = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems);
temp = result.slice(begin, end);
temp.forEach((b1) => {
var find = false;
bookmarks.forEach((b2) => {
if (b1.id == b2.id) {
find = true;
}
})
if (!find) {
bookmarks.push(b1);
}
})
var bookmarksData = {
totalItems: result.length,
bookmarksClickCount: bookmarksClickCount,
bookmarksCreatedAt: bookmarksCreatedAt,
bookmarksLatestClick: bookmarksLatestClick,
bookmarks: bookmarks,
}
resolve(bookmarksData);
}
@ -608,7 +643,11 @@ db.getBookmarksByTag = function(params) {
if (err) {
reject(err);
} else {
var bookmarksClickCount, bookmarksCreatedAt, bookmarksLatestClick;
var temp = [];
var bookmarks = [];
var begin = (params.currentPage - 1) * params.perPageItems;
var end = params.currentPage * params.perPageItems;
result.sort((a, b) => {
var click1 = parseInt(a.click_count);
var click2 = parseInt(b.click_count);
@ -620,19 +659,50 @@ db.getBookmarksByTag = function(params) {
return 1;
}
})
bookmarksClickCount = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems);
temp = result.slice(begin, end);
temp.forEach((b1) => {
var find = false;
bookmarks.forEach((b2) => {
if (b1.id == b2.id) {
find = true;
}
})
if (!find) {
bookmarks.push(b1);
}
})
result.sort((a, b) => a.created_at >= b.created_at ? -1 : 1);
bookmarksCreatedAt = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems);
temp = result.slice(begin, end);
temp.forEach((b1) => {
var find = false;
bookmarks.forEach((b2) => {
if (b1.id == b2.id) {
find = true;
}
})
if (!find) {
bookmarks.push(b1);
}
})
result.sort((a, b) => a.last_click >= b.last_click ? -1 : 1);
bookmarksLatestClick = result.slice((params.currentPage - 1) * params.perPageItems, params.currentPage * params.perPageItems);
temp = result.slice(begin, end);
temp.forEach((b1) => {
var find = false;
bookmarks.forEach((b2) => {
if (b1.id == b2.id) {
find = true;
}
})
if (!find) {
bookmarks.push(b1);
}
})
var bookmarksData = {
totalItems: result.length,
bookmarksClickCount: bookmarksClickCount,
bookmarksCreatedAt: bookmarksCreatedAt,
bookmarksLatestClick: bookmarksLatestClick,
bookmarks: bookmarks,
}
resolve(bookmarksData);
}

View File

@ -43,7 +43,7 @@ app.controller('bookmarkInfoCtr', ['$scope', '$state', '$timeout', '$sce', '$win
id: id
});
$scope.bookmark.click_count += 1;
$scope.bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd");
$scope.bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd HH:mm:ss");
}
}

View File

@ -30,6 +30,7 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '
clicked: false,
name: '最多使用'
}]
var timeagoInstance = timeago();
updateShowStyle();
getBookmarks();
@ -58,7 +59,9 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '
$scope.bookmarks.forEach(function(bookmark) {
if (bookmark.id == id) {
bookmark.click_count += 1;
bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd");
bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd HH:mm:ss");
$("#time"+bookmark.id).attr('data-timeago', bookmark.last_click);
timeagoInstance.render(document.querySelectorAll("#time"+bookmark.id), 'zh_CN');
}
})
}
@ -109,15 +112,10 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '
var bookmark = $.extend(true, {}, b); // 利用jQuery执行深度拷贝
bookmark.own = true;
if ($scope.showStyle == 'navigate') {
bookmark.last_click = bookmark.last_click.substring(0, 10);
bookmark.created_at = bookmark.created_at.substring(0, 10);
bookmark.tags = [{
id: bookmark.tag_id,
name: bookmark.tag_name
}];
} else if ($scope.showStyle == 'card') {
bookmark.last_click = bookmark.last_click.substring(0, 10);
bookmark.created_at = bookmark.created_at.substring(0, 10);
}
pubSubService.publish('TagCtr.showBookmarkInfo', bookmark);
bookmarkService.clickBookmark({
@ -183,16 +181,21 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '
}
$scope.order = $scope.order.map(() => false);
$scope.order[index] = true;
var begin = ($scope.currentPage - 1) * perPageItems;
var end = $scope.currentPage * perPageItems;
if ($scope.order[0]) {
$scope.bookmarks = $scope.bookmarkData.bookmarksClickCount;
$scope.bookmarkData.bookmarks.sort(clickCmp)
$scope.bookmarks = $scope.bookmarkData.bookmarks.slice(begin, end);
} else if ($scope.order[1]) {
$scope.bookmarks = $scope.bookmarkData.bookmarksCreatedAt;
$scope.bookmarkData.bookmarks.sort((a, b) => a.created_at >= b.created_at ? -1 : 1);
$scope.bookmarks = $scope.bookmarkData.bookmarks.slice(begin, end);
} else {
$scope.bookmarks = $scope.bookmarkData.bookmarksLatestClick;
$scope.bookmarkData.bookmarks.sort((a, b) => a.last_click >= b.last_click ? -1 : 1);
$scope.bookmarks = $scope.bookmarkData.bookmarks.slice(begin, end);
}
$timeout(function() {
var timeagoInstance = timeago();
timeagoInstance.cancel();
timeagoInstance.render(document.querySelectorAll('.need_to_be_rendered'), 'zh_CN');
}, 100)
}
@ -209,17 +212,7 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '
} else if (index == 1) {
$scope.bookmarkData.sort((a, b) => a.created_at >= b.created_at ? -1 : 1);
} else {
$scope.bookmarkData.sort((a, b) => {
var click1 = parseInt(a.click_count);
var click2 = parseInt(b.click_count);
if (click1 > click2) {
return -1;
} else if (click1 == click2) {
return a.created_at >= b.created_at ? -1 : 1;
} else {
return 1;
}
})
$scope.bookmarkData.sort(clickCmp)
}
$scope.bookmarks = $scope.bookmarkData.slice(0, 68);
}
@ -248,7 +241,7 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '
if (!params.showStyle) {
bookmarkService.userInfo({})
.then((user) => {
$scope.showStyle = user && user.show_style;
$scope.showStyle = (user && user.show_style) || 'navigate';
updateShowStyle();
getBookmarks(); // 拿到默认显示风格了,继续取获取书签
})
@ -363,4 +356,16 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', '
}
}
}
function clickCmp(a, b){
var click1 = parseInt(a.click_count);
var click2 = parseInt(b.click_count);
if (click1 > click2) {
return -1;
} else if (click1 == click2) {
return a.created_at >= b.created_at ? -1 : 1;
} else {
return 1;
}
}
}]);

View File

@ -21,6 +21,7 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
$scope.loading = false;
$scope.waitDelBookmark = {};
$scope.searchHotBookmarks = false;
var timeagoInstance = timeago();
$scope.changeCurrentPage = function(currentPage) {
currentPage = parseInt(currentPage) || 0;
@ -62,9 +63,11 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
id: id
});
$scope.bookmarks.forEach(function(bookmark) {
if (bookmark.id == id) {
if (bookmark.id == id && bookmark.own) {
bookmark.click_count += 1;
bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd");
bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd HH:mm:ss");
$("#time"+bookmark.id).attr('data-timeago', bookmark.last_click);
timeagoInstance.render(document.querySelectorAll("#time"+bookmark.id), 'zh_CN');
}
})
}
@ -274,7 +277,6 @@ app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$wi
function transition() {
$timeout(function() {
var timeagoInstance = timeago();
timeagoInstance.render(document.querySelectorAll('.need_to_be_rendered'), 'zh_CN');
}, 100)
var className = 'js-table-search';

View File

@ -22,6 +22,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim
$scope.waitDelTag = {};
$scope.waitDelBookmark = {};
$scope.bookmarkData = {};
var timeagoInstance = timeago();
pubSubService.subscribe('MenuCtr.tags', $scope, function(event, data) {
console.log('subscribe MenuCtr.tags', data);
@ -34,15 +35,21 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim
}
$scope.order = $scope.order.map(() => false);
$scope.order[index] = true;
var begin = ($scope.currentPage - 1) * perPageItems;
var end = $scope.currentPage * perPageItems;
if ($scope.order[0]) {
$scope.bookmarks = $scope.bookmarkData.bookmarksClickCount;
$scope.bookmarkData.bookmarks.sort(clickCmp)
$scope.bookmarks = $scope.bookmarkData.bookmarks.slice(begin, end);;
} else if ($scope.order[1]) {
$scope.bookmarks = $scope.bookmarkData.bookmarksCreatedAt;
$scope.bookmarkData.bookmarks.sort((a, b) => a.created_at >= b.created_at ? -1 : 1);
$scope.bookmarks = $scope.bookmarkData.bookmarks.slice(begin, end);;
} else {
$scope.bookmarks = $scope.bookmarkData.bookmarksLatestClick;
$scope.bookmarkData.bookmarks.sort((a, b) => a.last_click >= b.last_click ? -1 : 1);
$scope.bookmarks = $scope.bookmarkData.bookmarks.slice(begin, end);;
}
$timeout(function() {
var timeagoInstance = timeago();
timeagoInstance.cancel();
timeagoInstance.render(document.querySelectorAll('.need_to_be_rendered'), 'zh_CN');
}, 100)
}
@ -104,10 +111,12 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim
bookmarkService.clickBookmark({
id: id
});
$scope.bookmarks.forEach(function(bookmark) {
$scope.bookmarks.forEach(function(bookmark, index) {
if (bookmark.id == id) {
bookmark.click_count += 1;
bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd");
bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd HH:mm:ss");
$("#time"+bookmark.id).attr('data-timeago', bookmark.last_click);
timeagoInstance.render(document.querySelectorAll("#time"+bookmark.id), 'zh_CN');
}
})
}
@ -469,4 +478,16 @@ app.controller('tagsCtr', ['$scope', '$filter', '$window', '$stateParams', '$tim
duration: 500,
});
}
function clickCmp(a, b){
var click1 = parseInt(a.click_count);
var click2 = parseInt(b.click_count);
if (click1 > click2) {
return -1;
} else if (click1 == click2) {
return a.created_at >= b.created_at ? -1 : 1;
} else {
return 1;
}
}
}]);

View File

@ -106,7 +106,7 @@
<span title="{{bookmark.created_at}}" class="need_to_be_rendered" data-timeago="{{bookmark.created_at}}"></span>
</td>
<td>
<span title="{{bookmark.last_click}}" class="need_to_be_rendered" data-timeago="{{bookmark.last_click}}"></span>
<span id="time{{bookmark.id}}" title="{{bookmark.last_click}}" class="need_to_be_rendered" data-timeago="{{bookmark.last_click}}"></span>
</td>
<td>
<div class="ui label" ng-repeat="tag in bookmark.tags" tag-id="{{ tag.id }}" ng-click="jumpToTags(tag.id)">

View File

@ -157,7 +157,7 @@
<span title="{{bookmark.created_at}}" class="need_to_be_rendered" data-timeago="{{bookmark.created_at}}"></span>
</td>
<td>
<span title="{{bookmark.last_click}}" class="need_to_be_rendered" data-timeago="{{bookmark.last_click}}"></span>
<span id="time{{bookmark.id}}" title="{{bookmark.last_click}}" class="need_to_be_rendered" data-timeago="{{bookmark.last_click}}"></span>
</td>
<td>
<div class="ui label" ng-repeat="tag in bookmark.tags" tag-id="{{ tag.id }}" ng-if="!searchHotBookmarks">

View File

@ -76,7 +76,7 @@
<span title="{{bookmark.created_at}}" class="need_to_be_rendered" data-timeago="{{bookmark.created_at}}"></span>
</td>
<td>
<span title="{{bookmark.last_click}}" class="need_to_be_rendered" data-timeago="{{bookmark.last_click}}"></span>
<span id="time{{bookmark.id}}" title="{{bookmark.last_click}}" class="need_to_be_rendered" data-timeago="{{bookmark.last_click}}"></span>
</td>
<td>
<div class="ui label" ng-repeat="tag in bookmark.tags" tag-id="{{ tag.id }}" ng-click="getBookmarks(tag.id, 1)">

View File

@ -315,6 +315,8 @@ api.get('/bookmarks', function(req, res) {
tag.bookmarks = [];
}
tag.click += bookmark.click_count;
bookmark.created_at = new Date(bookmark.created_at).format("yyyy-MM-dd hh:mm:ss");
bookmark.last_click = new Date(bookmark.last_click).format("yyyy-MM-dd hh:mm:ss");
tag.bookmarks.push(bookmark);
});
if (result && result.length > 0) {
@ -367,19 +369,14 @@ api.get('/bookmarks', function(req, res) {
var tagsBookmarks = [];
var sendData = {
totalItems: 0,
bookmarksClickCount: [],
bookmarksCreatedAt: [],
bookmarksLatestClick: [],
bookmarks: [],
}
params.userId = userId;
db.getBookmarksTable(params)
.then((bookmarksData) => {
sendData = bookmarksData;
var bookmarkIds = []
.concat(sendData.bookmarksClickCount.map((bookmark) => bookmark.id))
.concat(sendData.bookmarksCreatedAt.map((bookmark) => bookmark.id))
.concat(sendData.bookmarksLatestClick.map((bookmark) => bookmark.id))
var bookmarkIds = sendData.bookmarks.map((bookmark) => bookmark.id)
return db.getTagsBookmarks(bookmarkIds);
})
.then((tbs) => {
@ -387,22 +384,20 @@ api.get('/bookmarks', function(req, res) {
return db.getTags(userId);
})
.then((tags) => {
var objectName = ['bookmarksClickCount', 'bookmarksCreatedAt', 'bookmarksLatestClick'];
objectName.forEach((name) => {
sendData[name].forEach(function(bookmark, index) {
var bookmarkTags = [];
tagsBookmarks.forEach(function(tb) {
if (tb.bookmark_id == bookmark.id) {
tags.forEach(function(tag) {
if (tb.tag_id == tag.id) {
bookmarkTags.push(tag)
}
})
}
});
sendData[name][index].tags = bookmarkTags;
})
sendData.bookmarks.forEach(function(bookmark, index) {
var bookmarkTags = [];
tagsBookmarks.forEach(function(tb) {
if (tb.bookmark_id == bookmark.id) {
tags.forEach(function(tag) {
if (tb.tag_id == tag.id) {
bookmarkTags.push(tag)
}
})
}
});
sendData.bookmarks[index].tags = bookmarkTags;
})
res.json(sendData);
})
.catch((err) => console.log('bookmarks table or card err', err))
@ -440,17 +435,12 @@ api.get('/bookmarksByTag', function(req, res) {
var totalItems = 0;
var sendData = {
totalItems: 0,
bookmarksClickCount: [],
bookmarksCreatedAt: [],
bookmarksLatestClick: [],
bookmarks: [],
}
db.getBookmarksByTag(params)
.then((bookmarksData) => {
sendData = bookmarksData;
var bookmarkIds = []
.concat(sendData.bookmarksClickCount.map((bookmark) => bookmark.id))
.concat(sendData.bookmarksCreatedAt.map((bookmark) => bookmark.id))
.concat(sendData.bookmarksLatestClick.map((bookmark) => bookmark.id))
var bookmarkIds = sendData.bookmarks.map((bookmark) => bookmark.id)
return db.getTagsBookmarks(bookmarkIds);
})
.then((tbs) => {
@ -459,25 +449,22 @@ api.get('/bookmarksByTag', function(req, res) {
})
.then((tags) => {
// 获取每个书签的所有分类标签
var objectName = ['bookmarksClickCount', 'bookmarksCreatedAt', 'bookmarksLatestClick'];
objectName.forEach((name) => {
sendData[name].forEach(function(bookmark, index) {
var bookmarkTags = [];
tagsBookmarks.forEach(function(tb) {
if (tb.bookmark_id == bookmark.id) {
tags.forEach(function(tag) {
if (tb.tag_id == tag.id) {
bookmarkTags.push(tag)
}
})
}
});
sendData[name][index].tags = bookmarkTags;
})
sendData.bookmarks.forEach(function(bookmark, index) {
var bookmarkTags = [];
tagsBookmarks.forEach(function(tb) {
if (tb.bookmark_id == bookmark.id) {
tags.forEach(function(tag) {
if (tb.tag_id == tag.id) {
bookmarkTags.push(tag)
}
})
}
});
sendData.bookmarks[index].tags = bookmarkTags;
})
res.json(sendData);
})
.catch((err) => console.log('bookmarks table or card err', err))
.catch((err) => console.log('getBookmarksByTag err', err))
});