summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-06-07 08:28:00 +0200
committerAaron Bohy <aab@odoo.com>2017-06-07 09:25:48 +0200
commit5aa1cf189039f4bbfdb5f6f66a1c1604c8bb243b (patch)
tree19eaf4afade99337d4a76aa0005dba462db2ea4a /addons
parentcb9a8bdc79ef6bd6a9fbd43afc73e14825bc3923 (diff)
[FIX] web: re-introduce wow effect
When clicking on buttons with classname o_wow (e.g. when marking an opportunity as won).
Diffstat (limited to 'addons')
-rw-r--r--addons/web/static/src/js/chrome/abstract_web_client.js17
-rw-r--r--addons/web/static/src/js/views/form/form_controller.js6
-rw-r--r--addons/web/static/src/js/views/form/form_renderer.js2
-rw-r--r--addons/web/static/tests/views/form_tests.js35
4 files changed, 55 insertions, 5 deletions
diff --git a/addons/web/static/src/js/chrome/abstract_web_client.js b/addons/web/static/src/js/chrome/abstract_web_client.js
index 155690f9663..9efb2a3c937 100644
--- a/addons/web/static/src/js/chrome/abstract_web_client.js
+++ b/addons/web/static/src/js/chrome/abstract_web_client.js
@@ -81,6 +81,7 @@ var AbstractWebClient = Widget.extend(mixins.ServiceProvider, {
}
});
},
+ show_wow: '_onShowWow',
},
init: function (parent) {
this.client_options = {};
@@ -313,6 +314,22 @@ var AbstractWebClient = Widget.extend(mixins.ServiceProvider, {
this.notification_manager.warn(e.data.title, e.data.message, e.data.sticky);
}
},
+ /**
+ * Displays a thumb up, heart or peace image (randomly) for a moment (e.g.
+ * used when an opportunity is won)
+ *
+ * @private
+ */
+ _onShowWow: function () {
+ var className = 'o_wow_thumbs';
+ if (Math.random() > 0.9) {
+ var otherClasses = ['o_wow_peace', 'o_wow_heart'];
+ className = otherClasses[Math.floor(Math.random()*otherClasses.length)];
+ }
+ var $body = $('body');
+ $body.addClass(className);
+ setTimeout($body.removeClass.bind($body, className), 1000);
+ },
});
return AbstractWebClient;
diff --git a/addons/web/static/src/js/views/form/form_controller.js b/addons/web/static/src/js/views/form/form_controller.js
index 464cd06e44d..27d85778431 100644
--- a/addons/web/static/src/js/views/form/form_controller.js
+++ b/addons/web/static/src/js/views/form/form_controller.js
@@ -380,10 +380,8 @@ var FormController = BasicController.extend({
});
}
- if (event.data.show_wow) {
- def.then(function () {
- self.show_wow();
- });
+ if (event.data.showWow) {
+ def.then(this.trigger_up.bind(this, 'show_wow'));
}
def.always(this._enableButtons.bind(this));
diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js
index b15e6b80131..2eda699c5d3 100644
--- a/addons/web/static/src/js/views/form/form_renderer.js
+++ b/addons/web/static/src/js/views/form/form_renderer.js
@@ -206,7 +206,7 @@ var FormRenderer = BasicRenderer.extend({
self.trigger_up('button_clicked', {
attrs: node.attrs,
record: self.state,
- show_wow: self.$el.hasClass('o_wow'), // TODO: implement this (in view)
+ showWow: $el.hasClass('o_wow'),
});
});
},
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 2d23f4a9cb4..5643b2c92ca 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -4895,5 +4895,40 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('wow effect', function (assert) {
+ assert.expect(3);
+
+ this.data.partner.fields.model_name = { string: "Model name", type: "char" };
+
+ var clickCount = 0;
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<button name="test" string="Mark Won" type="object" class="o_wow"/>' +
+ '</form>',
+ intercepts: {
+ execute_action: function (event) {
+ if (clickCount === 0) {
+ event.data.on_success();
+ } else {
+ event.data.on_fail();
+ }
+ clickCount++;
+ },
+ show_wow: function () {
+ assert.step('wow');
+ },
+ },
+ });
+
+ form.$('button.o_wow').click();
+ assert.verifySteps(['wow']);
+ form.$('button.o_wow').click();
+ assert.verifySteps(['wow']);
+
+ form.destroy();
+ });
});
});