From 6e4f751059d13e23ed686f5bd059bab096bc9643 Mon Sep 17 00:00:00 2001 From: Simone Rubino Date: Thu, 18 Oct 2018 08:24:08 +0200 Subject: [PATCH] [FIX] web_widget_char_switchcase: check input value (#1079) --- web_widget_char_switchcase/__manifest__.py | 2 +- .../src/js/web_widget_char_switchcase.js | 36 ++++++---- .../static/test/web_widget_char_switchcase.js | 71 +++++++++---------- 3 files changed, 57 insertions(+), 52 deletions(-) diff --git a/web_widget_char_switchcase/__manifest__.py b/web_widget_char_switchcase/__manifest__.py index b171eb2a..f1c20908 100644 --- a/web_widget_char_switchcase/__manifest__.py +++ b/web_widget_char_switchcase/__manifest__.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Web Char Switchcase Widget", - "version": "10.0.1.0.0", + "version": "10.0.1.0.1", "author": "Agile Business Group, " "Odoo Community Association (OCA)", "license": "AGPL-3", diff --git a/web_widget_char_switchcase/static/src/js/web_widget_char_switchcase.js b/web_widget_char_switchcase/static/src/js/web_widget_char_switchcase.js index b458d5c3..c26f9989 100644 --- a/web_widget_char_switchcase/static/src/js/web_widget_char_switchcase.js +++ b/web_widget_char_switchcase/static/src/js/web_widget_char_switchcase.js @@ -6,6 +6,9 @@ odoo.define('web_widget_char_switchcase', function (require) { var form_widgets = require('web.form_widgets'); form_widgets.FieldChar.include({ + events: _.extend({}, form_widgets.FieldChar.prototype.events, { + 'keyup': '_onKeyUp', + }), transformations: ['default', 'upper', 'lower', 'title', 'sentence', 'camel', 'pascal', 'snake'], init: function (field_manager, node) { this._super(field_manager, node); @@ -17,19 +20,10 @@ odoo.define('web_widget_char_switchcase', function (require) { if (!_.contains(this.transformations, this.current_transformation)) console.error(this.current_transformation + ' case unknown'); }, - initialize_content: function() { - var res = this._super(); - var self = this; - if(this.$input) { - this.$input.keyup(function(){ - var old_val = self.$input.val(); - if (!old_val) - return; - var new_val = self.current_transformation_handler(old_val); - self.$input.val(new_val); - }); - } - return res; + _onKeyUp: function (event) { + var old_val = this.$input.val(); + var new_val = this.current_transformation_handler(old_val); + this.$input.val(new_val); }, parse_value: function (val, def) { return this._super(this.current_transformation_handler(val), def); @@ -37,17 +31,25 @@ odoo.define('web_widget_char_switchcase', function (require) { format_value: function (val, def) { return this._super(this.current_transformation_handler(val), def); }, + check_val: function (val) { + return val && val.trim(); + }, get_transformation_handler: function () { switch (this.current_transformation) { case 'upper': // HELLO WORLD! - return function (val) { return val.toUpperCase(); }; + return function (val) { + if (!this.check_val(val)) return val; + return val.toUpperCase();}; case 'lower': // hello world! - return function (val) { return val.toLowerCase(); }; + return function (val) { + if (!this.check_val(val)) return val; + return val.toLowerCase();}; case 'title': // Hello World! return function (val) { + if (!this.check_val(val)) return val; return val.replace( /\w\S*/g, function(txt) { @@ -58,6 +60,7 @@ odoo.define('web_widget_char_switchcase', function (require) { case 'sentence': // Hello world! return function (val) { + if (!this.check_val(val)) return val; var first = true; return val.replace( /\w\S*/g, @@ -74,6 +77,7 @@ odoo.define('web_widget_char_switchcase', function (require) { case 'camel': // helloWorld! return function (val) { + if (!this.check_val(val)) return val; var first = true; return val.replace( /\w\S*/g, @@ -90,6 +94,7 @@ odoo.define('web_widget_char_switchcase', function (require) { case 'pascal': // HelloWorld! return function (val) { + if (!this.check_val(val)) return val; return val.replace( /\w\S*/g, function(txt) { @@ -100,6 +105,7 @@ odoo.define('web_widget_char_switchcase', function (require) { case 'snake': // hello_world! return function (val) { + if (!this.check_val(val)) return val; return val.toLowerCase().replace(' ', '_'); }; case 'default': diff --git a/web_widget_char_switchcase/static/test/web_widget_char_switchcase.js b/web_widget_char_switchcase/static/test/web_widget_char_switchcase.js index 03d3b4ee..019bf077 100644 --- a/web_widget_char_switchcase/static/test/web_widget_char_switchcase.js +++ b/web_widget_char_switchcase/static/test/web_widget_char_switchcase.js @@ -3,88 +3,87 @@ odoo.define_section('web_widget_char_switchcase', ['web.form_common', 'web.core' function createField(form_common, web_form_widgets, node) { var field_manager = new form_common.DefaultFieldManager(null, {}); - var field = new web_form_widgets.FieldChar(field_manager, node); - field.$input = $(''); - field.initialize_content(); - return field; + var fieldWidget = new web_form_widgets.FieldChar(field_manager, node); + fieldWidget.initialize_content(); + return fieldWidget; } test('Default does nothing', function(assert, form_common, core, web_form_widgets) { - this.field = createField(form_common, web_form_widgets, {'attrs': {}}); + var fieldWidget = createField(form_common, web_form_widgets, {'attrs': {}}); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), orig_val); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), orig_val); }); test('UPPER OPTION', function(assert, form_common, core, web_form_widgets) { var node = {'attrs': {'options': "{'transform': 'upper'}"}}; - this.field = createField(form_common, web_form_widgets, node); + var fieldWidget = createField(form_common, web_form_widgets, node); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), orig_val.toUpperCase()); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), orig_val.toUpperCase()); }); test('lower option', function(assert, form_common, core, web_form_widgets) { var node = {'attrs': {'options': "{'transform': 'lower'}"}}; - this.field = createField(form_common, web_form_widgets, node); + var fieldWidget = createField(form_common, web_form_widgets, node); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), orig_val.toLowerCase()); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), orig_val.toLowerCase()); }); test('Title Option', function(assert, form_common, core, web_form_widgets) { var node = {'attrs': {'options': "{'transform': 'title'}"}}; - this.field = createField(form_common, web_form_widgets, node); + var fieldWidget = createField(form_common, web_form_widgets, node); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), 'Hello World!'); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), 'Hello World!'); }); test('Sentence option', function(assert, form_common, core, web_form_widgets) { var node = {'attrs': {'options': "{'transform': 'sentence'}"}}; - this.field = createField(form_common, web_form_widgets, node); + var fieldWidget = createField(form_common, web_form_widgets, node); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), 'Hello world!'); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), 'Hello world!'); }); test('camelOption', function(assert, form_common, core, web_form_widgets) { var node = {'attrs': {'options': "{'transform': 'camel'}"}}; - this.field = createField(form_common, web_form_widgets, node); + var fieldWidget = createField(form_common, web_form_widgets, node); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), 'helloWorld!'); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), 'helloWorld!'); }); test('PascalOption', function(assert, form_common, core, web_form_widgets) { var node = {'attrs': {'options': "{'transform': 'pascal'}"}}; - this.field = createField(form_common, web_form_widgets, node); + var fieldWidget = createField(form_common, web_form_widgets, node); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), 'HelloWorld!'); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), 'HelloWorld!'); }); test('snake_option', function(assert, form_common, core, web_form_widgets) { var node = {'attrs': {'options': "{'transform': 'snake'}"}}; - this.field = createField(form_common, web_form_widgets, node); + var fieldWidget = createField(form_common, web_form_widgets, node); var orig_val = 'Hello World!'; - this.field.$input.val(orig_val); - this.field.$input.keyup(); - assert.strictEqual(this.field.$input.val(), 'hello_world!'); + fieldWidget.$input.val(orig_val); + fieldWidget.$input.trigger('keyup'); + assert.strictEqual(fieldWidget.$input.val(), 'hello_world!'); }); });