diff --git a/database/db.js b/database/db.js index c224f47..79a5b40 100644 --- a/database/db.js +++ b/database/db.js @@ -38,6 +38,72 @@ db.addBookmark = function(user_id, bookmark) { }); }; +db.delBookmark = function(id){ + var sql = "DELETE FROM `bookmarks` WHERE (`id`='"+ id +"')"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result.affectedRows); + } + }); + }); +} + +db.updateBookmark = function(bookmark){ + var sql = "UPDATE `bookmarks` SET `title`='"+ bookmark.title +"', `description`='"+ bookmark.description+"', `url`='"+ bookmark.url +"', `public`='"+ bookmark.public +"' WHERE (`id`='"+ bookmark.id +"')"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result.affectedRows); + } + }); + }); +} + +db.getBookmark = function(id){ + var sql ="SELECT * FROM `bookmarks` WHERE `id` = '"+ id +"'"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result[0]); + } + }); + }); +} + +db.getBookmarkTags = function(bookmard_id){ + var sql ="SELECT tag_id FROM `tags_bookmarks` WHERE `bookmark_id` = '"+ bookmard_id +"'"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + var tags = result.map((item) => item.tag_id); + resolve(tags); + } + }); + }); +} + +db.delBookmarkTags = function(bookmard_id) { + var sql = "DELETE FROM `tags_bookmarks` WHERE (`bookmark_id`='"+ bookmard_id +"')"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result.affectedRows); + } + }); + }); +} + db.addTagsBookmarks = function(tags, bookmard_id) { sql = "INSERT INTO `tags_bookmarks` (`tag_id`, `bookmark_id`) VALUES"; for (var i = 0; i < tags.length; i++) { diff --git a/public/css/style.css b/public/css/style.css index 1c6c1ff..ec83843 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -2,10 +2,40 @@ body { padding: 50px; font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; } +.bookmark{ + white-space:nowrap; + text-overflow:ellipsis; + -o-text-overflow:ellipsis; + overflow: hidden; + color:#212121; + border:1px solid transparent; +} + +.bookmarkNormalHover { + white-space:nowrap; + text-overflow:ellipsis; + -o-text-overflow:ellipsis; + overflow: hidden; + color:#212121; -.divHover { background:#F5F5F5; cursor:pointer; + border:1px solid transparent; +} + +.bookmarkOperaterHover { + cursor:pointer; +} + +.bookmarkEditHover { + white-space:nowrap; + text-overflow:ellipsis; + -o-text-overflow:ellipsis; + overflow: hidden; + color:#212121; + + cursor:move; + border:1px dashed #3388FF; } .img-fixed-size{ @@ -13,13 +43,7 @@ body { height:16px; } -.js-navigate-bookmark{ - white-space:nowrap; - text-overflow:ellipsis; - -o-text-overflow:ellipsis; - overflow: hidden; - color:#212121; -} + .wrap{ white-space:nowrap; text-overflow:ellipsis; diff --git a/public/images/back.png b/public/images/back.png new file mode 100644 index 0000000..3a26836 Binary files /dev/null and b/public/images/back.png differ diff --git a/public/images/delete-hover.png b/public/images/delete-hover.png new file mode 100644 index 0000000..d5b6bd6 Binary files /dev/null and b/public/images/delete-hover.png differ diff --git a/public/images/delete.png b/public/images/delete.png new file mode 100644 index 0000000..491131b Binary files /dev/null and b/public/images/delete.png differ diff --git a/public/images/edit-bookmark-hover.png b/public/images/edit-bookmark-hover.png new file mode 100644 index 0000000..e0cead7 Binary files /dev/null and b/public/images/edit-bookmark-hover.png differ diff --git a/public/images/edit-bookmark.png b/public/images/edit-bookmark.png new file mode 100644 index 0000000..7ab3a07 Binary files /dev/null and b/public/images/edit-bookmark.png differ diff --git a/public/images/edit.png b/public/images/edit.png new file mode 100644 index 0000000..7322052 Binary files /dev/null and b/public/images/edit.png differ diff --git a/public/scripts/controllers/bookmarks-controller.js b/public/scripts/controllers/bookmarks-controller.js index 5f80ee7..4b5f992 100644 --- a/public/scripts/controllers/bookmarks-controller.js +++ b/public/scripts/controllers/bookmarks-controller.js @@ -2,7 +2,8 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' console.log("Hello bookmarksCtr...", $stateParams); $scope.bookmarks = []; // 书签数据 $scope.showSearch = false; // 书签数据 - $scope.hoverItem = false; + $scope.bookmarkNormalHover = false; + $scope.bookmarkEditHover = false; $scope.showStyle = 'navigate'; // 显示风格'navigate', 'card', 'table' $scope.edit = false; semanticInit(); @@ -12,11 +13,38 @@ app.controller('bookmarksCtr', ['$scope', '$state', '$stateParams', '$filter', ' } $scope.jumpToUrl = function(url, id) { - $window.open(url, '_blank'); - bookmarkService.clickBookmark({ - id: id + if(!$scope.edit){ + $window.open(url, '_blank'); + bookmarkService.clickBookmark({ + id: id + }); + } + } + $scope.toggleMode = function(){ + console.log('toggleMode..........'); + $scope.edit = !$scope.edit + }; + $scope.delBookmark = function(bookmarkId){ + var params = { + id:bookmarkId + } + bookmarkService.delBookmark(params).then( + function(data) { + console.log(data); + $("#"+bookmarkId).remove(); + }, + function(data) { + console.log(data); + } + ); + + } + $scope.editBookmark = function(bookmarkId){ + pubSubService.publish('bookmarksCtr.editBookmark', { + 'bookmarkId': bookmarkId }); } + getBookmarks(params); pubSubService.subscribe('MenuCtr.bookmarks', $scope, function(event, params) { console.log('subscribe MenuCtr.bookmarks', params); diff --git a/public/scripts/controllers/edit-controller.js b/public/scripts/controllers/edit-controller.js index 4dc318d..773da97 100644 --- a/public/scripts/controllers/edit-controller.js +++ b/public/scripts/controllers/edit-controller.js @@ -8,18 +8,20 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'p $timeout(function() { $scope.urlError = $scope.url == '' && $('.ui.modal.js-add-bookmark').modal('is active'); }); - $scope.title = ""; - if (/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(newUrl)) { - var params = { - url: newUrl, + if ($scope.add) { + $scope.title = ""; + if (/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(newUrl)) { + var params = { + url: newUrl, + } + bookmarkService.getTitle(params).then( + function(data) { + console.log(JSON.stringify(data)); + $scope.title = data.title; + }, + function(errorMsg) {} + ); } - bookmarkService.getTitle(params).then( - function(data) { - console.log(JSON.stringify(data)); - $scope.title = data.title; - }, - function(errorMsg) {} - ); } }); @@ -81,33 +83,53 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'p $scope.titleError = $scope.title == ''; $scope.tagsError = (selectedTags.length == 0 || selectedTags.length > maxSelections); var params = { + id: $scope.id, url: $scope.url, title: $scope.title, public: '1', tags: selectedTags, description: $scope.description } - - bookmarkService.addBookmark(params).then( - function(data) { - console.log(data); - $('.ui.modal.js-add-bookmark').modal('hide'); - $state.go('bookmarks', { - foo: 'i love you', - bar: 'hello world' - }); - pubSubService.publish('EditCtr.inserBookmarsSuccess', { - show: 'navigate' - }); - }, - function(errorMsg) { - console.log(errorMsg); - } - ); + if ($scope.add) { + bookmarkService.addBookmark(params).then( + function(data) { + console.log(data); + $('.ui.modal.js-add-bookmark').modal('hide'); + $state.go('bookmarks', { + foo: 'i love you', + bar: 'hello world' + }); + pubSubService.publish('EditCtr.inserBookmarsSuccess', { + show: 'navigate' + }); + }, + function(errorMsg) { + console.log(errorMsg); + } + ); + } else { + console.log('updateBookmark...........', params) + bookmarkService.updateBookmark(params).then( + function(data) { + console.log(data); + $('.ui.modal.js-add-bookmark').modal('hide'); + $state.go('bookmarks', { + foo: 'i love you', + bar: 'hello world' + }); + pubSubService.publish('EditCtr.inserBookmarsSuccess', { + show: 'navigate' + }); + }, + function(errorMsg) { + console.log(errorMsg); + } + ); + } } pubSubService.subscribe('MenuCtr.showAddBookmarkMoadl', $scope, function(event, params) { - console.log('subscribe MenuCtr.MenuCtr.showAddBookmarkMoadl', params); + console.log('subscribe MenuCtr.showAddBookmarkMoadl', params); $('.ui.modal.js-add-bookmark').modal({ closable: false, }).modal('show'); @@ -120,6 +142,42 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'p getTags(params); }); + pubSubService.subscribe('bookmarksCtr.editBookmark', $scope, function(event, params) { + console.log('subscribe bookmarksCtr.editBookmark', params); + $('.ui.modal.js-add-bookmark').modal({ + closable: false, + }).modal('show'); + $('.ui.modal.js-add-bookmark .ui.dropdown').dropdown('clear'); + $('.ui.modal.js-add-bookmark .ui.dropdown').addClass('loading'); + bookmarkService.getBookmark(params).then( + function(data) { + var bookmark = data.bookmark; + $scope.add = false; + + $scope.id = (bookmark && bookmark.id) || ''; + $scope.url = (bookmark && bookmark.url) || ''; + $scope.title = (bookmark && bookmark.title) || ''; + $scope.description = (bookmark && bookmark.description) || ''; + // $scope.newTags = bookmark && bookmark.url && ''; + $scope.tags = data.tags; + + $timeout(function() { + data.bookmarkTags.forEach((tagId) => { + $('.ui.fluid.search.dropdown').dropdown('set selected', tagId); + }); + }); + + $scope.public = '1'; + + console.log(data); + $('.ui.modal.js-add-bookmark .ui.dropdown').removeClass('loading'); + }, + function(errorMsg) { + console.log(errorMsg); + } + ); + }); + function getTags(params) { bookmarkService.getTags(params).then( function(data) { @@ -149,6 +207,8 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'p } function init() { + $scope.add = true; + $scope.id = ''; $scope.url = ''; $scope.title = ''; $scope.description = ''; diff --git a/public/scripts/services/bookmark-service.js b/public/scripts/services/bookmark-service.js index ba64c17..b949c11 100644 --- a/public/scripts/services/bookmark-service.js +++ b/public/scripts/services/bookmark-service.js @@ -88,6 +88,20 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { }); return def.promise; }, + getBookmark: function(params) { + var def = $q.defer(); + + $http.get('/api/bookmark/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data, status) { + console.log('Error: ' + data, status); + }); + return def.promise; + }, addBookmark: function(params) { var def = $q.defer(); $http.post('/api/addBookmark/', { @@ -102,10 +116,36 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { }); return def.promise; }, - delBookmark: function() { - + updateBookmark: function(params) { + console.log('service updateBookmark') + var def = $q.defer(); + $http.post('/api/updateBookmark/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data) { + console.log('Error: ' + data); + def.reject('Failed to get todos'); + }); + return def.promise; }, - editBookmark: function() { + delBookmark: function(params) { + var def = $q.defer(); + $http.delete('/api/delBookmark/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data) { + console.log('Error: ' + data); + def.reject('delBookmark fail'); + }); + return def.promise; + }, + editBookmark: function(params) { }, /** diff --git a/public/views/bookmarks.html b/public/views/bookmarks.html index bed48a9..cc1b30c 100644 --- a/public/views/bookmarks.html +++ b/public/views/bookmarks.html @@ -1,5 +1,5 @@
+
+ 