From ff099ddb1c080f426424eb011354b7d07d2746e8 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 3 Mar 2015 18:52:33 +0900 Subject: [PATCH] Allow displaying and adding of categories via ajax --- client/scripts/profile.js | 58 +++++++++++++++++++-------------------- server/search.js | 23 +++++++++++----- 2 files changed, 45 insertions(+), 36 deletions(-) diff --git a/client/scripts/profile.js b/client/scripts/profile.js index 6bcdf5d..c70f47a 100644 --- a/client/scripts/profile.js +++ b/client/scripts/profile.js @@ -23,40 +23,48 @@ (function(categories) { 'use strict'; - function guid() { - function s4() { - return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); - } - - return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); - } - function transmitCategories() { console.log(categories); } - function displayCategories() { + function displayCategories(categories) { var template = Handlebars.compile($('#template').html()); - $('#categories').empty(); $('#categories').append(template({categories: categories})); - $('#categories input:radio').change(function() { categories[$(this).attr('categoryId')].value = parseInt(this.value); transmitCategories(); }); } + function clearCategories() { + $('#categories').empty(); + } + function addCategory(description) { - description = description.trim(); - if (!description) { - return; - } + $.getJSON('/learn', {description: description}, function(results) { + if (results.success) { + var categories = {}; + categories[results.id] = {description: results.description, value: 0}; + displayCategories(categories); + } + }); + } - categories[guid()] = {description: description, value: 0}; + function refreshCategories() { + $.getJSON('/categories', function(results) { + var categories = {}; + for (var i = 0, length = results.length; i < length; ++i) { + var result = results[i]; + categories[result.id] = { + description: result.description, + value: 0 + }; + } - transmitCategories(); - displayCategories(); + clearCategories(); + displayCategories(categories); + }); } function onReady() { @@ -64,18 +72,10 @@ return new Handlebars.SafeString(value == this.value ? 'checked' : ''); }); - $.getJSON('/query', _ctx.query, function(results) { - var profile = {}; - for (var i = 0, length = results.length; i < length; ++i) { - var result = results[i]; - profile[result.id] = {description: result.description, value: 0}; - } + refreshCategories(); - $('#addCategory').click(function() { - addCategory($('#newCategory').val()); - }); - - displayCategories(); + $('#addCategory').click(function() { + addCategory($('#newCategory').val()); }); } diff --git a/server/search.js b/server/search.js index 6173cba..1f5ac5c 100644 --- a/server/search.js +++ b/server/search.js @@ -225,16 +225,25 @@ function getCategories(callback) { } function addCategory(query, callback) { - var description = query.description; + var description = query.description.trim(); var id = uuid.v1(); - pool.query('INSERT INTO categories(description, id) VALUES(?, ?)', [description, id], function(err, rows) { - if (err) { - throw err; - } + if (description) { + pool.query('INSERT INTO categories(description, id) VALUES(?, ?)', [description, id], function(err, rows) { + if (err) { + throw err; + } - callback({id: id, description: description}); - }); + callback({ + id: id, + description: description, + success: true + }); + }); + } + else { + callback({success: false}); + } } function execQuery(query, callback) {