diff --git a/server/handlers.go b/server/handlers.go index 5edce8f..1d060e9 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -76,13 +76,29 @@ func FolderListHandler(rw http.ResponseWriter, req *http.Request) { } } + +type UpdateFolder struct { + Title *string `json:"title,omitempty"` +} + func FolderHandler(rw http.ResponseWriter, req *http.Request) { - if req.Method == "DELETE" { - id, err := strconv.ParseInt(Vars(req)["id"], 10, 64) - if err != nil { + id, err := strconv.ParseInt(Vars(req)["id"], 10, 64) + if err != nil { + rw.WriteHeader(http.StatusBadRequest) + return + } + if req.Method == "PUT" { + var body UpdateFolder + if err := json.NewDecoder(req.Body).Decode(&body); err != nil { + log.Print(err) rw.WriteHeader(http.StatusBadRequest) return } + if body.Title != nil { + db(req).RenameFolder(id, *body.Title) + } + rw.WriteHeader(http.StatusOK) + } else if req.Method == "DELETE" { db(req).DeleteFolder(id) rw.WriteHeader(http.StatusNoContent) } diff --git a/template/static/javascripts/api.js b/template/static/javascripts/api.js index a6876ca..5781ce7 100644 --- a/template/static/javascripts/api.js +++ b/template/static/javascripts/api.js @@ -35,6 +35,9 @@ create: function(data) { return api('post', '/api/folders', data).then(json) }, + update: function(id, data) { + return api('put', '/api/folders/' + id, data) + }, delete: function(id) { return api('delete', '/api/folders/' + id) }, diff --git a/template/static/javascripts/app.js b/template/static/javascripts/app.js index f96e908..559b997 100644 --- a/template/static/javascripts/app.js +++ b/template/static/javascripts/app.js @@ -90,7 +90,12 @@ var vm = new Vue({ }) }, renameFolder: function(folder) { - + var newTitle = prompt('Enter new title', folder.title) + if (newTitle) { + api.folders.update(folder.id, {title: newTitle}).then(function() { + folder.title = newTitle + }) + } }, deleteFolder: function(folder) { var vm = this @@ -102,9 +107,11 @@ var vm = new Vue({ }, renameFeed: function(feed) { var newTitle = prompt('Enter new title', feed.title) - api.feeds.update(feed.id, {title: newTitle}).then(function() { - feed.title = newTitle - }) + if (newTitle) { + api.feeds.update(feed.id, {title: newTitle}).then(function() { + feed.title = newTitle + }) + } }, deleteFeed: function(feed) { if (confirm('Are you sure you want to delete ' + feed.title + '?')) {