diff options
author | Alexandre Pretto Nunes <anunes@thoughtworks.com> | 2014-08-12 19:11:41 -0300 |
---|---|---|
committer | Alexandre Pretto Nunes <anunes@thoughtworks.com> | 2014-08-12 19:11:51 -0300 |
commit | b5686e01012b5fd1b544ca16efd3cb73f8620a1c (patch) | |
tree | 798ed10df762ab250df2939766410f2789d5fa50 /web-ui/app/js/mixins | |
parent | b73d55cd1d13ba8bfb7121a2049d18e329077818 (diff) |
Move tagging functionality to withMailTagging mixin to clear mailView some
Diffstat (limited to 'web-ui/app/js/mixins')
-rw-r--r-- | web-ui/app/js/mixins/with_mail_tagging.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/web-ui/app/js/mixins/with_mail_tagging.js b/web-ui/app/js/mixins/with_mail_tagging.js new file mode 100644 index 00000000..00ee3ba3 --- /dev/null +++ b/web-ui/app/js/mixins/with_mail_tagging.js @@ -0,0 +1,54 @@ +/*global Bloodhound */ +define( + ['page/events', 'features'], + function (events, features) { + function withMailTagging () { + this.updateTags = function(mail, tags) { + this.trigger(document, events.mail.tags.update, {ident: mail.ident, tags: tags}); + }; + + this.attachTagCompletion = function() { + if(!features.isEnabled('tags')) { + return; + } + + this.tagCompleter = new Bloodhound({ + datumTokenizer: function(d) { return [d.value]; }, + queryTokenizer: function(q) { return [q.trim()]; }, + remote: { + url: '/tags?q=%QUERY', + filter: function(pr) { return _.map(pr, function(pp) { return {value: pp.name}; }); } + } + }); + + this.tagCompleter.initialize(); + + this.select('newTagInput').typeahead({ + hint: true, + highlight: true, + minLength: 1 + }, { + source: this.tagCompleter.ttAdapter() + }); + }; + + this.createNewTag = function() { + if(features.isEnabled('createNewTag')) { + var tagsCopy = this.attr.mail.tags.slice(); + tagsCopy.push(this.select('newTagInput').val()); + this.tagCompleter.clear(); + this.tagCompleter.clearPrefetchCache(); + this.tagCompleter.clearRemoteCache(); + this.updateTags(this.attr.mail, _.uniq(tagsCopy)); + this.trigger(document, events.dispatchers.tags.refreshTagList); + } + }; + + this.after('displayMail', function () { + this.on(this.select('newTagInput'), 'typeahead:selected typeahead:autocompleted', this.createNewTag); + }); + }; + + return withMailTagging; + } +); |