Browse Source

add unit test and got one fix

+ update doc
pull/236/head
Pierre Verkest 9 years ago
parent
commit
bfb5a0686f
  1. 37
      web_widget_boolean_switch/README.rst
  2. 139
      web_widget_boolean_switch/__openerp__.py
  3. 9
      web_widget_boolean_switch/static/src/js/web_widget_boolean_switch.js
  4. 139
      web_widget_boolean_switch/static/test/web_widget_boolean_switch.js

37
web_widget_boolean_switch/README.rst

@ -7,7 +7,8 @@ Web widget boolean switch
=========================
This module add a widget ``boolean_switch`` to render boolean fields. One
of it's main features is to quick edit that field without enter in edit mode.
of it's main features is to quick edit that field without enter in edit mode
from list view or form view.
Configuration
@ -24,7 +25,7 @@ Example
widget="boolean_switch"
attrs="{'readonly': [('login', '=', 'admin')]}"
context="{'fake_parameter': 'foo'}"
options="{'quick_edit': True, 'extra': {'onText': 'Yes', 'offText': 'No' }}"/>
options="{'quick_edit': True, 'extra': {'onText': 'Yes', 'offText': 'No'}}"/>
```
Options
@ -40,31 +41,39 @@ extra
*Available options*:
* **size**: The checkbox size - default: `null` - values: null, 'mini', 'small', 'normal', 'large'
* **size**: The checkbox size - default: `null` - values: null, 'mini',
'small', 'normal', 'large'
* **animate**: Animate the switch - default: `true`
* **indeterminate**: Indeterminate state - default: `false`
* **inverse**: Inverse switch direction - default: `false`
* **onColor**: Color of the left side of the switch - default: `"primary"` - values: 'primary', 'info', 'success', 'warning', 'danger', 'default'
* **offColor**: Color of the right side of the switch - default: `default` - values: 'primary', 'info', 'success', 'warning', 'danger', 'default'
* **onColor**: Color of the left side of the switch - default: `"primary"` -
values: 'primary', 'info', 'success', 'warning', 'danger', 'default'
* **offColor**: Color of the right side of the switch - default: `default` -
values: 'primary', 'info', 'success', 'warning', 'danger', 'default'
* **onText**: Text of the left side of the switch - default: `"ON"`
* **offText**: Text of the right side of the switch - default: `"OFF"`,
* **labelText**: Text of the center handle of the switch - default: `" "`,
* **handleWidth**: Width of the left and right sides in pixels - default: `"auto"`,
* **labelWidth**: Width of the center handle in pixels - default: `"auto"`,
* **baseClass**: Global class prefix - default: `"bootstrap-switch"`,
* **wrapperClass**: Container element class(es) - default: `"wrapper"`,
* **offText**: Text of the right side of the switch - default: `"OFF"`
* **labelText**: Text of the center handle of the switch - default:
`" "`,
* **handleWidth**: Width of the left and right sides in pixels - default:
`"auto"`,
* **labelWidth**: Width of the center handle in pixels - default: `"auto"`
* **baseClass**: Global class prefix - default: `"bootstrap-switch"`
* **wrapperClass**: Container element class(es) - default: `"wrapper"`
.. warning::
Those parameters are overwritten by this module or highly discouraged:
* **radioAllOff**: Allow this radio button to be unchecked by the user - default: `false`
* **radioAllOff**: Allow this radio button to be unchecked by the user -
default: `false`
* **state**: The checkbox state - default: `true`
* **disabled**: Disable state - default: `false`
* **readonly**: Readonly state - default: `false`
* **onInit**: Callback function to execute on initialization - default: `function() {}`,
* **onSwitchChange**: Callback function to execute on switch state change - default: `function() {}`
* **onInit**: Callback function to execute on initialization - default:
`function() {}`,
* **onSwitchChange**: Callback function to execute on switch state change -
default: `function() {}`
attrs
-----

139
web_widget_boolean_switch/__openerp__.py

@ -25,6 +25,9 @@
'static/lib/bootstrap-switch/bootstrap-switch.js',
'static/src/js/web_widget_boolean_switch.js',
],
'test': [
'static/test/web_widget_boolean_switch.js',
],
"css": [
'static/lib/bootstrap-switch/bootstrap-switch.css',
],
@ -34,5 +37,139 @@
"demo": [
'demo/res_users_view.xml',
],
'description': """""", # TODO: copy README.rst
'description': """
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
=========================
Web widget boolean switch
=========================
This module add a widget ``boolean_switch`` to render boolean fields. One
of it's main features is to quick edit that field without enter in edit mode
from list view or form view.
Configuration
=============
In the view (test on tree view and form view), you can declare any boolean
field using this widget.
Example
-------
```
<field name="active"
widget="boolean_switch"
attrs="{'readonly': [('login', '=', 'admin')]}"
context="{'fake_parameter': 'foo'}"
options="{'quick_edit': True, 'extra': {'onText': 'Yes', 'offText': 'No'}}"/>
```
Options
-------
quick_edit
~~~~~~~~~~
extra
~~~~~
``extra`` is used to set
`bootstrap-switch <http://www.bootstrap-switch.org/options.html>`_ options.
*Available options*:
* **size**: The checkbox size - default: `null` - values: null, 'mini',
'small', 'normal', 'large'
* **animate**: Animate the switch - default: `true`
* **indeterminate**: Indeterminate state - default: `false`
* **inverse**: Inverse switch direction - default: `false`
* **onColor**: Color of the left side of the switch - default: `"primary"` -
values: 'primary', 'info', 'success', 'warning', 'danger', 'default'
* **offColor**: Color of the right side of the switch - default: `default` -
values: 'primary', 'info', 'success', 'warning', 'danger', 'default'
* **onText**: Text of the left side of the switch - default: `"ON"`
* **offText**: Text of the right side of the switch - default: `"OFF"`
* **labelText**: Text of the center handle of the switch - default:
`"&nbsp;"`,
* **handleWidth**: Width of the left and right sides in pixels - default:
`"auto"`,
* **labelWidth**: Width of the center handle in pixels - default: `"auto"`
* **baseClass**: Global class prefix - default: `"bootstrap-switch"`
* **wrapperClass**: Container element class(es) - default: `"wrapper"`
.. warning::
Those parameters are overwritten by this module or highly discouraged:
* **radioAllOff**: Allow this radio button to be unchecked by the user -
default: `false`
* **state**: The checkbox state - default: `true`
* **disabled**: Disable state - default: `false`
* **readonly**: Readonly state - default: `false`
* **onInit**: Callback function to execute on initialization - default:
`function() {}`,
* **onSwitchChange**: Callback function to execute on switch state change -
default: `function() {}`
attrs
-----
This attribute is supported as expected!
context
-------
``context`` is sent to the ``write`` method of the field model in case of
special needs with the quick edition.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/162/7.0
Known issues / Roadmap
======================
* Manage Null values
*
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and
welcomed feedback `here <https://github.com/OCA/web/issues/new?body=module:%20
web_widget_boolean_switch%0Aversion:%207.0%0A%0A**Steps%20to%20reproduce**%0A-
%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Pierre Verkest <pverkest@anybox.fr>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.
""",
}

9
web_widget_boolean_switch/static/src/js/web_widget_boolean_switch.js

@ -18,22 +18,21 @@ openerp.web_widget_boolean_switch = function(instance){
var switchOptions = options.hasOwnProperty('extra') ?
options.extra : {};
_.extend(switchOptions, {
'disabled': options.hasOwnProperty('disabled') ?
options.disabled : !this.quick_edit,
});
if(options.hasOwnProperty('onSwitchChange')){
switchOptions.onSwitchChange = options.onSwitchChange;
}
this.checkboxes.bootstrapSwitch(switchOptions);
this.set_disabled(options.hasOwnProperty('disabled') ?
options.disabled : !this.quick_edit);
if(this.quick_edit && quick_edit_callback){
this.checkboxes.on('switchChange.bootstrapSwitch',
quick_edit_callback);
}
},
set_value: function(value){
// the third parameter tell if we should skip to fire evnets
// the third parameter tell if we should skip to fire events
// and force change the state whatever it's readonly or disabled
this.checkboxes.bootstrapSwitch('state', value, true);
},
set_readonly: function(value){

139
web_widget_boolean_switch/static/test/web_widget_boolean_switch.js

@ -0,0 +1,139 @@
openerp.testing.section('web_widget_boolean_switch',
{'dependences': ['web.web_widget_boolean_switch'],
}, function(test){
"use strict";
var check_values = function (scratchpad, value, readonly, disabled,
message){
var $container = scratchpad.children();
var $input = $container.find('input');
strictEqual($input[0].checked, value, message + " - Input value");
strictEqual($input[0].readOnly && $input[0].readOnly ? true : false,
readonly, message + " - Input readonly");
strictEqual($input[0].disabled && $input[0].disabled ? true : false, disabled,
message + " - Input disabled");
var prefix = 'bootstrap-switch-';
ok($container[0].classList.contains(prefix + (value ? 'on' : 'off')),
message + " - Bootstrap-switch value class");
strictEqual($container[0].classList.contains(prefix + "readonly"),
readonly, message + " - Bootstrap-switch readonly class");
strictEqual($container[0].classList.contains(prefix + "disabled"),
disabled, message + " - Bootstrap-switch disabled class");
};
var init_check_values = function(instance, scratchpad, html, options,
checked, readonly, disabled, message){
scratchpad.html(html);
var widget = new instance.web.BooleanSwitchWidget(
scratchpad.find('input'), options, null);
check_values(scratchpad, checked, readonly, disabled, message);
return widget;
};
test('BooleanSwitchWidget Class test method', function(instance, $scratchpad){
var numTest = 1;
var widget = init_check_values(
instance, $scratchpad, '<input type="checkbox" disabled/>', {},
false, false, true, numTest++ + " - init values");
ok($scratchpad.children()[0].classList.contains('bootstrap-switch'),
"Basic bootstrap-switch init using BooleanSwitchWidget class");
widget.set_disabled(false);
check_values($scratchpad, false, false, false,
numTest++ + " - Enable");
widget.set_value(true);
check_values($scratchpad, true, false, false,
numTest++ + " - Set true");
widget.set_readonly(true);
check_values($scratchpad, true, true, false,
numTest++ + " - Set readonly");
widget.set_disabled(true);
check_values($scratchpad, true, true, true,
numTest++ + " - Disabled");
widget.set_value(false);
check_values($scratchpad, false, true, true,
numTest++ + " - set value whatever its Disabled and readonly");
widget.set_readonly(false);
widget.set_value(true);
check_values($scratchpad, true, false, true,
numTest++ + " - set value whatever its Disabled");
widget.set_disabled(false);
widget.set_readonly(true);
widget.set_value(false);
check_values($scratchpad, false, true, false,
numTest++ + " - set value whatever its readonly");
});
test('BooleanSwitchWidget Class test init', function(instance, $scratchpad){
var numTest = 1;
init_check_values(instance, $scratchpad,
'<input type="checkbox" disabled readonly checked/>',
{}, true, true, true,
numTest++ + " - init values disabled readonly checked");
init_check_values(instance, $scratchpad,
'<input type="checkbox" disabled readonly/>',
{}, false, true, true,
numTest++ + " - init values disabled readonly");
init_check_values(instance, $scratchpad,
'<input type="checkbox" disabled checked/>',
{}, true, false, true,
numTest++ + " - init values disabled checked");
init_check_values(instance, $scratchpad,
'<input type="checkbox" checked readonly/>',
{'disabled': false}, true, true, false,
numTest++ + " - init values checked readonly");
init_check_values(instance, $scratchpad,
'<input type="checkbox"/>',
{}, false, false, true,
numTest++ + " - By default input is disabled without any parameter");
init_check_values(instance, $scratchpad,
'<input type="checkbox" checked/>',
{'disabled': false}, true, false, false,
numTest++ + " - init values checked");
init_check_values(instance, $scratchpad,
'<input type="checkbox" readonly/>',
{'disabled': false, 'quick_edit': true},
false, true, false,
numTest++ + " - init values disabled readonly");
init_check_values(instance, $scratchpad,
'<input type="checkbox"/>',
{'disabled': false}, false, false, false,
numTest++ + " - every thing is false");
init_check_values(instance, $scratchpad,
'<input type="checkbox" checked/>',
{'quick_edit': true}, true, false, false,
numTest++ + " - quick edit enable widget");
init_check_values(instance, $scratchpad,
'<input type="checkbox" checked disabled/>',
{'quick_edit': true}, true, false, false,
numTest++ + " - quick edit enable widget case initial element is disabled");
init_check_values(instance, $scratchpad,
'<input type="checkbox" checked/>',
{}, true, false, true,
numTest++ + " - By default widget is disabled test with checked");
init_check_values(instance, $scratchpad,
'<input type="checkbox" checked readonly/>',
{}, true, true, true,
numTest++ + " - By default widget is disabled test with checked and readonly");
});
});
Loading…
Cancel
Save