summaryrefslogtreecommitdiff
path: root/web-ui/app
diff options
context:
space:
mode:
Diffstat (limited to 'web-ui/app')
-rw-r--r--web-ui/app/js/features/features.js18
-rw-r--r--web-ui/app/js/lib/features.js5
-rw-r--r--web-ui/app/js/mail_view/data/mail_sender.js9
-rw-r--r--web-ui/app/js/mail_view/ui/mail_view.js21
-rw-r--r--web-ui/app/js/mail_view/ui/reply_section.js5
-rw-r--r--web-ui/app/js/main.js3
-rw-r--r--web-ui/app/js/mixins/with_feature_toggle.js9
7 files changed, 44 insertions, 26 deletions
diff --git a/web-ui/app/js/features/features.js b/web-ui/app/js/features/features.js
new file mode 100644
index 00000000..74efdd07
--- /dev/null
+++ b/web-ui/app/js/features/features.js
@@ -0,0 +1,18 @@
+define([], function() {
+ var disabledFeatures;
+
+ function getFeatures() {
+ disabledFeatures = disabledFeatures || fetchDisabledFeatures();
+ return disabledFeatures;
+ }
+
+ function fetchDisabledFeatures() {
+ return ['saveDraft', 'createNewTag', 'replySection'];
+ }
+
+ return {
+ isEnabled: function(featureName) {
+ return ! _.contains(getFeatures(), featureName);
+ }
+ };
+});
diff --git a/web-ui/app/js/lib/features.js b/web-ui/app/js/lib/features.js
deleted file mode 100644
index deacc8fe..00000000
--- a/web-ui/app/js/lib/features.js
+++ /dev/null
@@ -1,5 +0,0 @@
-define([], function() {
- return {
-
- };
-});
diff --git a/web-ui/app/js/mail_view/data/mail_sender.js b/web-ui/app/js/mail_view/data/mail_sender.js
index 7440f5a7..0dba1a02 100644
--- a/web-ui/app/js/mail_view/data/mail_sender.js
+++ b/web-ui/app/js/mail_view/data/mail_sender.js
@@ -2,9 +2,10 @@ define(
[
'flight/lib/component',
'mail_view/data/mail_builder',
- 'page/events'
+ 'page/events',
+ 'features'
],
- function (defineComponent, mailBuilder, events) {
+ function (defineComponent, mailBuilder, events, features) {
'use strict';
return defineComponent(mailSender);
@@ -67,7 +68,9 @@ define(
this.after('initialize', function () {
this.on(events.mail.send, this.sendMail);
- this.on(events.mail.saveDraft, this.saveDraft);
+ if(features.isEnabled('saveDraft')) {
+ this.on(events.mail.saveDraft, this.saveDraft);
+ }
this.on(document, events.mail.save, this.saveMailWithCallback);
});
}
diff --git a/web-ui/app/js/mail_view/ui/mail_view.js b/web-ui/app/js/mail_view/ui/mail_view.js
index 1e27c879..9114fa2e 100644
--- a/web-ui/app/js/mail_view/ui/mail_view.js
+++ b/web-ui/app/js/mail_view/ui/mail_view.js
@@ -12,10 +12,11 @@ define(
'helpers/view_helper',
'mixins/with_hide_and_show',
'page/events',
- 'views/i18n'
+ 'views/i18n',
+ 'features'
],
- function (defineComponent, templates, mailActions, viewHelpers, withHideAndShow, events, i18n) {
+ function (defineComponent, templates, mailActions, viewHelpers, withHideAndShow, events, i18n, features) {
return defineComponent(mailView, mailActions, withHideAndShow);
@@ -148,13 +149,15 @@ define(
};
this.createNewTag = function() {
- var tagsCopy = this.attr.mail.tags.slice();
- tagsCopy.push(this.select('newTagInput').val());
- this.attr.tagCompleter.clear();
- this.attr.tagCompleter.clearPrefetchCache();
- this.attr.tagCompleter.clearRemoteCache();
- this.trigger(document, events.mail.tags.update, { ident: this.attr.mail.ident, tags: _.uniq(tagsCopy)});
- this.trigger(document, events.dispatchers.tags.refreshTagList);
+ if(features.isEnabled('createNewTag')) {
+ var tagsCopy = this.attr.mail.tags.slice();
+ tagsCopy.push(this.select('newTagInput').val());
+ this.attr.tagCompleter.clear();
+ this.attr.tagCompleter.clearPrefetchCache();
+ this.attr.tagCompleter.clearRemoteCache();
+ this.trigger(document, events.mail.tags.update, { ident: this.attr.mail.ident, tags: _.uniq(tagsCopy)});
+ this.trigger(document, events.dispatchers.tags.refreshTagList);
+ }
};
this.handleKeyDown = function(event) {
diff --git a/web-ui/app/js/mail_view/ui/reply_section.js b/web-ui/app/js/mail_view/ui/reply_section.js
index 866a255a..80781842 100644
--- a/web-ui/app/js/mail_view/ui/reply_section.js
+++ b/web-ui/app/js/mail_view/ui/reply_section.js
@@ -5,13 +5,14 @@ define(
'mail_view/ui/reply_box',
'mail_view/ui/forward_box',
'mixins/with_hide_and_show',
+ 'mixins/with_feature_toggle',
'page/events'
],
- function (defineComponent, templates, ReplyBox, ForwardBox, withHideAndShow, events) {
+ function (defineComponent, templates, ReplyBox, ForwardBox, withHideAndShow, withFeatureToggle, events) {
'use strict';
- return defineComponent(replySection, withHideAndShow);
+ return defineComponent(replySection, withHideAndShow, withFeatureToggle('replySection'));
function replySection() {
this.defaultAttrs({
diff --git a/web-ui/app/js/main.js b/web-ui/app/js/main.js
index 22a11c3a..665416fc 100644
--- a/web-ui/app/js/main.js
+++ b/web-ui/app/js/main.js
@@ -20,7 +20,8 @@ requirejs.config({
'search': 'js/search',
'foundation': 'js/foundation',
'i18next': 'bower_components/i18next/i18next.amd',
- 'quoted-printable': 'bower_components/quoted-printable'
+ 'quoted-printable': 'bower_components/quoted-printable',
+ 'features': 'js/features/features'
}
});
diff --git a/web-ui/app/js/mixins/with_feature_toggle.js b/web-ui/app/js/mixins/with_feature_toggle.js
index 3a484388..2b071e68 100644
--- a/web-ui/app/js/mixins/with_feature_toggle.js
+++ b/web-ui/app/js/mixins/with_feature_toggle.js
@@ -1,15 +1,12 @@
-define(['lib/features'],
+define(['features'],
function(features) {
function withFeatureToggle(componentName) {
return function() {
- var defaultToggle = {enabled: true};
-
this.around('initialize', function(basicInitialize) {
- var featureToggle = features[componentName] || defaultToggle;
- if(featureToggle.enabled) {
- basicInitialize(arguments[1], arguments[2]);
+ if(features.isEnabled(componentName)) {
+ return basicInitialize(arguments[1], arguments[2]);
}
});
};