229 lines
7.9 KiB
JavaScript
229 lines
7.9 KiB
JavaScript
app.controller('searchCtr', ['$scope', '$state', '$stateParams', '$filter', '$window', '$timeout', '$document', 'ngDialog', 'pubSubService', 'dataService', function ($scope, $state, $stateParams, $filter, $window, $timeout, $document, ngDialog, pubSubService, dataService) {
|
||
console.log("Hello searchCtr...", $stateParams);
|
||
if (dataService.smallDevice()) {
|
||
$window.location = "http://m.mybookmark.cn/#/tags";
|
||
return;
|
||
}
|
||
pubSubService.publish('Menus.active');
|
||
|
||
$scope.hoverBookmark = null;
|
||
$scope.bookmarks = []; // 书签数据
|
||
$scope.showSearch = false; //
|
||
$scope.showTags = false; //
|
||
$scope.keyword = ($stateParams && $stateParams.keyword) || ''
|
||
$scope.dateCreateBegin = '';
|
||
$scope.dateCreateEnd = '';
|
||
$scope.dateClickBegin = '';
|
||
$scope.dateClickEnd = '';
|
||
$scope.range = 'self';
|
||
$scope.bookmarkCount = 0;
|
||
$scope.tags = [];
|
||
$scope.user = [];
|
||
$scope.totalPages = 0;
|
||
$scope.currentPage = 1;
|
||
$scope.inputPage = '';
|
||
$scope.loading = false;
|
||
$scope.waitDelBookmark = {};
|
||
$scope.searchHotBookmarks = false;
|
||
|
||
var timeagoInstance = timeago();
|
||
var dialog = null;
|
||
|
||
$scope.changeCurrentPage = async function (page) {
|
||
page = parseInt(page) || 0;
|
||
if (page <= $scope.totalPages && page >= 1) {
|
||
$scope.currentPage = page;
|
||
$scope.inputPage = '';
|
||
$scope.search();
|
||
}
|
||
}
|
||
pubSubService.subscribe('Common.user', $scope, function (event, user) {
|
||
$scope.user = user;
|
||
});
|
||
|
||
get('tags').then((tags) => $scope.tags = tags)
|
||
|
||
$scope.jumpToUrl = async function (url, id) {
|
||
if (!$scope.edit) {
|
||
$window.open(url);
|
||
await post("bookmarkClick", { id });
|
||
|
||
$scope.bookmarks.forEach(function (bookmark) {
|
||
if (bookmark.id == id) {
|
||
bookmark.clickCount += 1;
|
||
bookmark.lastClick = $filter("date")(new Date(), "yyyy-MM-dd HH:mm:ss");
|
||
}
|
||
})
|
||
$timeout(function () {
|
||
timeagoInstance.cancel();
|
||
timeagoInstance.render(document.querySelectorAll('.need_to_be_rendered'), 'zh_CN');
|
||
}, 100)
|
||
}
|
||
}
|
||
|
||
$scope.delBookmark = async function (bookmark) {
|
||
$scope.waitDelBookmark = $.extend(true, {}, bookmark); // 利用jQuery执行深度拷贝
|
||
dialog = ngDialog.open({
|
||
template: './views/dialog-del-bookmark.html',
|
||
className: 'ngdialog-theme-default',
|
||
scope: $scope
|
||
});
|
||
}
|
||
|
||
$scope.confirmDelBookmark = async function (id) {
|
||
await post("bookmarkDel", { id })
|
||
$("#" + id).transition({
|
||
animation: dataService.animation(),
|
||
duration: 500,
|
||
onComplete: function () {
|
||
$("#" + id).remove();
|
||
}
|
||
});
|
||
}
|
||
|
||
$scope.editBookmark = async function (id) {
|
||
pubSubService.publish('bookmarksCtr.editBookmark', { id });
|
||
}
|
||
|
||
$scope.detailBookmark = async function (bookmark) {
|
||
pubSubService.publish('TagCtr.showBookmarkInfo', bookmark);
|
||
}
|
||
|
||
$scope.storeBookmark = async function (bookmark) {
|
||
var b = $.extend(true, {}, bookmark); // 利用jQuery执行深度拷贝
|
||
pubSubService.publish('TagCtr.storeBookmark', b);
|
||
}
|
||
|
||
$scope.favoriteBookmark = async function (bookmark) {
|
||
let id = await post("bookmarkAdd", bookmark);
|
||
bookmark = await get("bookmark", { id });
|
||
pubSubService.publish('EditCtr.inserBookmarsSuccess', bookmark);
|
||
}
|
||
|
||
$scope.copy = async function (url) {
|
||
dataService.clipboard(url);
|
||
}
|
||
|
||
$scope.search = async function () {
|
||
let params = {};
|
||
|
||
params.range = $('.js-user-range').dropdown('get value');
|
||
|
||
if (params.range == 'self') {
|
||
let tagIds = $('.js-search-tags').dropdown('get value');
|
||
if (tagIds) {
|
||
params.tagIds = tagIds;
|
||
}
|
||
}
|
||
|
||
if ($scope.keyword) {
|
||
params.keyword = $scope.keyword;
|
||
}
|
||
|
||
let createdAt = parseInt($('.js-create-date').dropdown('get value') || 0);
|
||
console.log('dateCreate = ', createdAt)
|
||
if (createdAt > 0) {
|
||
params.createdAt = dayjs(Date.now() - createdAt * 24 * 60 * 60 * 1000).format('YYYY-MM-DD HH:mm:ss') + "," + dayjs(Date.now()).format('YYYY-MM-DD HH:mm:ss');
|
||
} else if ($scope.dateCreateBegin && $scope.dateCreateEnd) {
|
||
params.createdAt = dayjs($scope.dateCreateBegin).format('YYYY-MM-DD HH:mm:ss') + "," + dayjs($scope.dateCreateEnd).format('YYYY-MM-DD HH:mm:ss');
|
||
}
|
||
|
||
let lastClick = parseInt($('.js-click-date').dropdown('get value') || 0);
|
||
console.log('lastClick = ', lastClick)
|
||
if (lastClick > 0) {
|
||
params.lastClick = dayjs(Date.now() - lastClick * 24 * 60 * 60 * 1000).format('YYYY-MM-DD HH:mm:ss') + "," + dayjs(Date.now()).format('YYYY-MM-DD HH:mm:ss');
|
||
} else if ($scope.dateClickBegin && $scope.dateClickEnd) {
|
||
params.lastClick = dayjs($scope.dateClickBegin).format('YYYY-MM-DD HH:mm:ss') + "," + dayjs($scope.dateClickEnd).format('YYYY-MM-DD HH:mm:ss');
|
||
}
|
||
|
||
params.page = $scope.currentPage || 1;
|
||
params.pageSize = 20;
|
||
console.log('params = ', params)
|
||
|
||
let reply = await get('bookmarksSearch', params);
|
||
|
||
$timeout(() => {
|
||
$scope.bookmarks = reply.data;
|
||
$scope.totalPages = reply.totalPages;
|
||
$scope.bookmarkCount = reply.count;
|
||
$scope.loading = false;
|
||
})
|
||
transition();
|
||
}
|
||
|
||
$scope.updateCreateDate = async function () {
|
||
console.log($scope.dateCreateBegin, $scope.dateCreateEnd);
|
||
if ($scope.dateCreateBegin && $scope.dateCreateEnd) {
|
||
$('.js-create-date').dropdown('hide');
|
||
$('.js-create-date').dropdown('clear');
|
||
$('.js-create-date .text').text($scope.dateCreateBegin + " 至 " + $scope.dateCreateEnd).removeClass('default');
|
||
}
|
||
}
|
||
|
||
$scope.updateClickDate = async function () {
|
||
console.log($scope.dateClickBegin, $scope.dateClickEnd);
|
||
if ($scope.dateClickBegin && $scope.dateClickEnd) {
|
||
$('.js-click-date').dropdown('hide');
|
||
$('.js-click-date').dropdown('clear');
|
||
$('.js-click-date .text').text($scope.dateClickBegin + " 至 " + $scope.dateClickEnd).removeClass('default');
|
||
}
|
||
}
|
||
|
||
$scope.updateTagsSelect = async function () {
|
||
$('.ui.dropdown.js-search-tags .text').removeClass('default');
|
||
var text = $('.ui.dropdown.js-search-tags .text').text().replace('selected', '个已选');
|
||
$('.ui.dropdown.js-search-tags .text').text(text);
|
||
}
|
||
|
||
$scope.setHoverBookmark = async function (bookmark) {
|
||
$scope.hoverBookmark = bookmark;
|
||
}
|
||
|
||
// 在输入文字的时候也会触发,所以不要用Ctrl,Shift之类的按键
|
||
$document.bind("keydown", function (event) {
|
||
$scope.$apply(function () {
|
||
var key = event.key.toUpperCase();
|
||
console.log($scope.hoverBookmark);
|
||
if ($scope.hoverBookmark && dataService.keyShortcuts()) {
|
||
if (key == 'E' && $scope.hoverBookmark.own) {
|
||
$scope.editBookmark($scope.hoverBookmark.id)
|
||
} else if (key == 'I') {
|
||
$scope.detailBookmark($scope.hoverBookmark)
|
||
} else if (key == 'D' && $scope.hoverBookmark.own) {
|
||
$scope.delBookmark($scope.hoverBookmark)
|
||
} else if (key == 'C') {
|
||
$scope.copy($scope.hoverBookmark.url)
|
||
}
|
||
}
|
||
})
|
||
});
|
||
|
||
pubSubService.subscribe('EditCtr.inserBookmarsSuccess', $scope, function (event, data) {
|
||
console.log('subscribe EditCtr.inserBookmarsSuccess', JSON.stringify(data));
|
||
$scope.bookmarks.forEach((bookmark) => {
|
||
if (bookmark.id == data.id) {
|
||
bookmark.title = data.title;
|
||
bookmark.url = data.url;
|
||
bookmark.description = data.description;
|
||
// bookmark.tags = data.tags; @todo
|
||
}
|
||
})
|
||
});
|
||
|
||
function transition() {
|
||
$timeout(function () {
|
||
timeagoInstance.cancel();
|
||
timeagoInstance.render(document.querySelectorAll('.need_to_be_rendered'), 'zh_CN');
|
||
}, 100)
|
||
var className = 'js-table-search';
|
||
$('.' + className).transition('hide');
|
||
$('.' + className).transition({
|
||
animation: dataService.animation(),
|
||
duration: 500,
|
||
});
|
||
}
|
||
|
||
$scope.search();
|
||
|
||
}]);
|