From 07310cbc8f2788804ea447518435b9e7a7e65b04 Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Thu, 2 Jul 2020 17:47:14 +0100 Subject: [PATCH] create folder --- server/handlers.go | 21 +++++++++++++++++++++ template/index.html | 14 ++++++++------ template/static/javascripts/api.js | 3 +++ template/static/javascripts/app.js | 12 ++++++------ 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/server/handlers.go b/server/handlers.go index 9ae6cf4..dded911 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -47,11 +47,32 @@ func StatusHandler(rw http.ResponseWriter, req *http.Request) { }) } +type NewFolder struct { + Title string `json:"title"` +} + func FolderListHandler(rw http.ResponseWriter, req *http.Request) { if req.Method == "GET" { list := db(req).ListFolders() fmt.Println(list) json.NewEncoder(rw).Encode(list) + } else if req.Method == "POST" { + var body NewFolder + if err := json.NewDecoder(req.Body).Decode(&body); err != nil { + log.Print(err) + rw.WriteHeader(http.StatusBadRequest) + return + } + if len(body.Title) == 0 { + rw.WriteHeader(http.StatusBadRequest) + writeJSON(rw, map[string]string{"error": "Folder title missing."}) + return + } + folder := db(req).CreateFolder(body.Title) + rw.WriteHeader(http.StatusCreated) + json.NewEncoder(rw).Encode(folder) + } else { + rw.WriteHeader(http.StatusMethodNotAllowed) } } diff --git a/template/index.html b/template/index.html index c44a16e..4607397 100644 --- a/template/index.html +++ b/template/index.html @@ -152,13 +152,15 @@
- -
- -
- +
+ +
+ +
+ +
-
+
diff --git a/template/static/javascripts/api.js b/template/static/javascripts/api.js index 244542b..1351a49 100644 --- a/template/static/javascripts/api.js +++ b/template/static/javascripts/api.js @@ -29,6 +29,9 @@ list: function() { return api('get', '/api/folders').then(json) }, + create: function(data) { + return api('post', '/api/folders', data).then(json) + }, } } })() diff --git a/template/static/javascripts/app.js b/template/static/javascripts/app.js index 7b4eec3..f390635 100644 --- a/template/static/javascripts/app.js +++ b/template/static/javascripts/app.js @@ -27,7 +27,6 @@ var vm = new Vue({ 'items': [], 'itemSelected': null, 'settings': 'manage', - 'newFolderTitle': null, 'loading': {newfeed: 0}, } }, @@ -76,11 +75,12 @@ var vm = new Vue({ moveFeed: function(feed, folder) { feed.folder_id = folder ? folder.id : null }, - newFolderCreate: function() { - this.folders.push({ - id: Math.random() * 10000, - title: this.newFolderTitle, - is_expanded: true, + createFolder: function(event) { + var form = event.target + var data = {'title': form.querySelector('input[name=title]').value} + var vm = this + api.folders.create(data).then(function(result) { + vm.folders.push(result) }) }, renameFeed: function(feed) {