From b5686e01012b5fd1b544ca16efd3cb73f8620a1c Mon Sep 17 00:00:00 2001 From: Alexandre Pretto Nunes Date: Tue, 12 Aug 2014 19:11:41 -0300 Subject: Move tagging functionality to withMailTagging mixin to clear mailView some --- web-ui/app/js/mixins/with_mail_tagging.js | 54 +++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 web-ui/app/js/mixins/with_mail_tagging.js (limited to 'web-ui/app/js/mixins') 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; + } +); -- cgit v1.2.3