summaryrefslogtreecommitdiff
path: root/web-ui/app/js/mixins
diff options
context:
space:
mode:
authorAlexandre Pretto Nunes <anunes@thoughtworks.com>2014-08-12 19:11:41 -0300
committerAlexandre Pretto Nunes <anunes@thoughtworks.com>2014-08-12 19:11:51 -0300
commitb5686e01012b5fd1b544ca16efd3cb73f8620a1c (patch)
tree798ed10df762ab250df2939766410f2789d5fa50 /web-ui/app/js/mixins
parentb73d55cd1d13ba8bfb7121a2049d18e329077818 (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.js54
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;
+ }
+);