From 7b7e5f1a6fd5926670917af735b2eda75fa332ee Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Mon, 18 Aug 2014 14:58:22 -0300 Subject: Duda/Patrick #8: reseting tag shortcuts before loading them again --- web-ui/app/js/page/events.js | 5 +- web-ui/app/js/tags/ui/tag_list.js | 7 +++ web-ui/app/js/tags/ui/tag_shortcut.js | 13 ++++-- web-ui/test/spec/tags/ui/tag_list.spec.js | 67 +++++++++++++++++++++++---- web-ui/test/spec/tags/ui/tag_shortcut.spec.js | 19 ++++++++ 5 files changed, 99 insertions(+), 12 deletions(-) (limited to 'web-ui') diff --git a/web-ui/app/js/page/events.js b/web-ui/app/js/page/events.js index 6b39096c..c5c239e5 100644 --- a/web-ui/app/js/page/events.js +++ b/web-ui/app/js/page/events.js @@ -114,7 +114,10 @@ define(function () { tags: { want: 'tags:want', received: 'tags:received', - teardown: 'tags:teardown' + teardown: 'tags:teardown', + shortcuts: { + teardown: 'tags:shortcuts:teardown' + } }, route: { toUrl: 'route:toUrl' diff --git a/web-ui/app/js/tags/ui/tag_list.js b/web-ui/app/js/tags/ui/tag_list.js index 02eee7f8..22b1e77b 100644 --- a/web-ui/app/js/tags/ui/tag_list.js +++ b/web-ui/app/js/tags/ui/tag_list.js @@ -56,13 +56,20 @@ define( this.trigger(list, events.tags.teardown); list.empty(); }.bind(this)); + } + this.resetShortcuts = function () { + $('#tags-shortcuts').empty(); + this.trigger(document, events.tags.shortcuts.teardown); + }; + this.renderTagList = function(tags) { var defaultList = this.select('defaultTagList'); var customList = this.select('customTagList'); resetTagList.bind(this, [defaultList, customList]).call(); + this.resetShortcuts(); tags.forEach(function (tag) { renderTag.bind(this, tag, defaultList, customList).call(); diff --git a/web-ui/app/js/tags/ui/tag_shortcut.js b/web-ui/app/js/tags/ui/tag_shortcut.js index 6e5c6960..59556794 100644 --- a/web-ui/app/js/tags/ui/tag_shortcut.js +++ b/web-ui/app/js/tags/ui/tag_shortcut.js @@ -3,10 +3,11 @@ define( 'flight/lib/component', 'views/templates', 'page/events', - 'tags/ui/tag_base' + 'tags/ui/tag_base', + 'flight/lib/utils' ], - function (describeComponent, templates, events, tagBase) { + function (describeComponent, templates, events, tagBase, utils) { var TagShortcut = describeComponent(tagShortcut, tagBase); @@ -20,7 +21,6 @@ define( function tagShortcut() { - this.renderAndAttach = function (parent, options) { var linkTo = options.linkTo; @@ -58,9 +58,16 @@ define( this.$node.addClass('selected'); }; + this.doTeardown = function () { + if (!jQuery.contains(document, this.$node[0])) { + this.teardown(); + } + }; + this.after('initialize', function () { this.on('click', function () { this.attr.trigger.triggerSelect(); }); this.on(document, events.ui.tag.select, this.selectTag); + this.on(document, events.tags.shortcuts.teardown, this.doTeardown); }); } diff --git a/web-ui/test/spec/tags/ui/tag_list.spec.js b/web-ui/test/spec/tags/ui/tag_list.spec.js index f39fbf36..5c33f36e 100644 --- a/web-ui/test/spec/tags/ui/tag_list.spec.js +++ b/web-ui/test/spec/tags/ui/tag_list.spec.js @@ -1,48 +1,55 @@ describeComponent('tags/ui/tag_list', function () { 'use strict'; + var tagsShortcutsContainer; - var tag = function(name, ident, def) { + var tag = function (name, ident, def) { def = def || false; return {name: name, counts: {read: 0, total: 0, replied: 0, starred: 0}, ident: ident, default: def}; }; - describe('post initialization', function() { + describe('post initialization', function () { beforeEach(function () { setupComponent(); + tagsShortcutsContainer = $('