From 2a194720b2d2221e9bb66c2684f68bb1ba3889ff Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Mon, 22 Sep 2014 00:16:16 +0200 Subject: [PATCH] Enabled tags. --- .../app/controllers/widget/tag.js.coffee | 86 ++++++++++++------- .../javascripts/app/views/widget/tag.jst.eco | 24 ++---- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/app/assets/javascripts/app/controllers/widget/tag.js.coffee b/app/assets/javascripts/app/controllers/widget/tag.js.coffee index c8af24e8d..30059d13c 100644 --- a/app/assets/javascripts/app/controllers/widget/tag.js.coffee +++ b/app/assets/javascripts/app/controllers/widget/tag.js.coffee @@ -1,11 +1,21 @@ class App.WidgetTag extends App.Controller + elements: + '.js-newTagLabel': 'newTagLabel' + '.js-newTagInput': 'newTagInput' + + events: + 'click .js-newTagLabel': 'showInput' + 'blur .js-newTagInput': 'hideInput' + 'click .js-newTagInput': 'onAddTag' + 'submit form': 'onAddTag' + 'click .js-delete': 'onRemoveTag' + constructor: -> super - - @attribute_id = 'tags_' + @object.id + '_' + @object_type - tags = App.Store.get( "tags::#{@attribute_id}" ) - if tags - @render( tags ) + @cacheKey = "tags::#{@object_type}::#{@object.id}" + @tagList = App.Store.get( @cacheKey ) || [] + @render() + if !_.isEmpty(@tagList) @delay( => @fetch() @@ -17,7 +27,7 @@ class App.WidgetTag extends App.Controller fetch: => @ajax( - id: @attribute_id + id: @cacheKey type: 'GET' url: @apiPath + '/tags' data: @@ -25,29 +35,38 @@ class App.WidgetTag extends App.Controller o_id: @object.id processData: true success: (data, status, xhr) => - App.Store.write( "tags::#{@attribute_id}", data.tags ) - @render(data.tags) + @tagList = data.tags + App.Store.write( @cacheKey, @tagList ) + @render() ) - render: (tags) => - - # insert data + render: -> @html App.view('widget/tag')( - tags: tags || [], - tag_id: @attribute_id + tags: @tagList || [], ) - @el.find('#' + @attribute_id ).tokenfield().on( - 'tokenfield:createtoken' - (e) => - @onAddTag( e.token.value ) - ).on( - 'tokenfield:removetoken' - (e) => - @onRemoveTag( e.token.value ) - ) - @el.find('#' + @attribute_id ).parent().css('height', 'auto') - onAddTag: (item) => + showInput: (e) -> + e.preventDefault() + @newTagLabel.addClass('hide') + @newTagInput.removeClass('hide').focus() + + hideInput: (e) -> + e.preventDefault() + @newTagLabel.removeClass('hide') + @newTagInput.addClass('hide') + + onAddTag: (e) => + e.preventDefault() + item = @$('[name="new_tag"]').val() + return if !item + + if _.contains(@tagList, item) + @render() + return + + @tagList.push item + @render() + @ajax( type: 'GET', url: @apiPath + '/tags/add', @@ -57,13 +76,17 @@ class App.WidgetTag extends App.Controller item: item processData: true, success: (data, status, xhr) => - tags = @el.find('#' + @attribute_id ).val() - if tags - tags = tags.split(',') - App.Store.write( "tags::#{@attribute_id}", tags ) + @fetch() ) - onRemoveTag: (item) => + onRemoveTag: (e) => + e.preventDefault() + item = $(e.target).parents('li').find('.tag').text() + return if !item + + @tagList = _.filter(@tagList, (tagItem) -> return tagItem if tagItem isnt item ) + @render() + @ajax( type: 'GET' url: @apiPath + '/tags/remove' @@ -73,8 +96,5 @@ class App.WidgetTag extends App.Controller item: item processData: true success: (data, status, xhr) => - tags = @el.find('#' + @attribute_id ).val() - if tags - tags = tags.split(',') - App.Store.write( "tags::#{@attribute_id}", tags ) + @fetch() ) diff --git a/app/assets/javascripts/app/views/widget/tag.jst.eco b/app/assets/javascripts/app/views/widget/tag.jst.eco index f9a7699ce..ace320311 100644 --- a/app/assets/javascripts/app/views/widget/tag.jst.eco +++ b/app/assets/javascripts/app/views/widget/tag.jst.eco @@ -1,25 +1,17 @@
- -
+ <%- @T('Add Tag') %>
+
+ <%- @T('Add Tag') %>
+
+ +