diff --git a/database/db.js b/database/db.js index 6d852d9..12c6d43 100644 --- a/database/db.js +++ b/database/db.js @@ -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); } diff --git a/public/scripts/controllers/bookmark-info-controller.js b/public/scripts/controllers/bookmark-info-controller.js index 9ca14c3..6d7f494 100644 --- a/public/scripts/controllers/bookmark-info-controller.js +++ b/public/scripts/controllers/bookmark-info-controller.js @@ -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"); } } diff --git a/public/scripts/controllers/bookmarks-controller.js b/public/scripts/controllers/bookmarks-controller.js index bf8302e..af45c7a 100644 --- a/public/scripts/controllers/bookmarks-controller.js +++ b/public/scripts/controllers/bookmarks-controller.js @@ -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; + } + } }]); diff --git a/public/scripts/controllers/search-controller.js b/public/scripts/controllers/search-controller.js index ff95ac0..514db59 100644 --- a/public/scripts/controllers/search-controller.js +++ b/public/scripts/controllers/search-controller.js @@ -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'; diff --git a/public/scripts/controllers/tags-controller.js b/public/scripts/controllers/tags-controller.js index e0cdb92..8269213 100644 --- a/public/scripts/controllers/tags-controller.js +++ b/public/scripts/controllers/tags-controller.js @@ -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; + } + } }]); diff --git a/public/views/bookmarks.html b/public/views/bookmarks.html index 0ce4c18..c12d842 100644 --- a/public/views/bookmarks.html +++ b/public/views/bookmarks.html @@ -106,7 +106,7 @@ - +
diff --git a/public/views/search.html b/public/views/search.html index f1f2c5c..f0f9529 100644 --- a/public/views/search.html +++ b/public/views/search.html @@ -157,7 +157,7 @@ - +
diff --git a/public/views/tags.html b/public/views/tags.html index d85b944..e953704 100644 --- a/public/views/tags.html +++ b/public/views/tags.html @@ -76,7 +76,7 @@ - +
diff --git a/routes/api.js b/routes/api.js index 9eeb86a..181fd36 100644 --- a/routes/api.js +++ b/routes/api.js @@ -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)) });