diff --git a/addons/hr/views/hr_views.xml b/addons/hr/views/hr_views.xml
index 7e29db54ca1..cf3b08e03a2 100644
--- a/addons/hr/views/hr_views.xml
+++ b/addons/hr/views/hr_views.xml
@@ -62,8 +62,8 @@
options='{"always_reload": True, "highlight_first_line": True}'/>
-
-
+
+
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index 061345683b6..67e5f9b559c 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -8,7 +8,6 @@ odoo.define('web.basic_fields', function (require) {
*/
var AbstractField = require('web.AbstractField');
-var config = require('web.config');
var core = require('web.core');
var crash_manager = require('web.crash_manager');
var datepicker = require('web.datepicker');
@@ -973,72 +972,22 @@ var FieldPhone = FieldEmail.extend({
className: 'o_field_phone',
prefix: 'tel',
- /**
- * The phone widget is an extension of email, with the distinction that, in
- * some cases, we do not want to show a clickable widget in readonly.
- * In particular, we only want to make it clickable if the device can call
- * this particular number. This is controlled by the _canCall function.
- *
- * @override
- */
- init: function () {
- this._super.apply(this, arguments);
- if (this.mode === 'readonly' && !this._canCall()) {
- this.tagName = 'span';
- }
- },
- /**
- * Returns the associated link only if there is one.
- *
- * @override
- */
- getFocusableElement: function () {
- if (this.mode !== 'readonly' || this._canCall()) {
- return this._super.apply(this, arguments);
- }
- return $();
- },
-
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
- * In readonly, we only make the widget clickable if the device can call it.
- * Additionally, we obfuscate the phone number to prevent Skype from seeing it.
- *
* @override
* @private
*/
_renderReadonly: function () {
this._super();
- if (this._canCall()) {
- // Split phone number into two to prevent Skype app from finding it
- var text = this.$el.text();
- var part1 = _.escape(text.substr(0, text.length/2));
- var part2 = _.escape(text.substr(text.length/2));
- this.$el.html(part1 + "" + part2);
- } else {
- this.$el.removeClass('o_form_uri');
- }
+
// This class should technically be there in case of a very very long
// phone number, but it breaks the o_row mechanism, which is more
// important right now.
this.$el.removeClass('o_text_overflow');
},
-
- /**
- * Phone fields are clickable in readonly on small screens ~= on phones.
- * This can be overriden by call-capable modules to display a clickable
- * link in different situations, like always regardless of screen size,
- * or only allow national calls for example.
- *
- * @override
- * @private
- */
- _canCall: function () {
- return config.device.isMobile;
- }
});
var UrlWidget = InputField.extend({
diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js
index 9f2e30d8529..11f39bc8147 100644
--- a/addons/web/static/tests/fields/basic_fields_tests.js
+++ b/addons/web/static/tests/fields/basic_fields_tests.js
@@ -3061,8 +3061,8 @@ QUnit.module('basic_fields', {
var $phoneLink = form.$('a.o_form_uri.o_field_widget');
assert.strictEqual($phoneLink.length, 1,
"should have a anchor with correct classes");
- assert.strictEqual($phoneLink.text(), 'y\u00ADop',
- "value should be displayed properly as text with the skype obfuscation");
+ assert.strictEqual($phoneLink.text(), 'yop',
+ "value should be displayed properly");
assert.strictEqual($phoneLink.attr('href'), 'tel:yop',
"should have proper tel prefix");
@@ -3079,8 +3079,8 @@ QUnit.module('basic_fields', {
// save
form.$buttons.find('.o_form_button_save').click();
$phoneLink = form.$('a.o_form_uri.o_field_widget');
- assert.strictEqual($phoneLink.text(), 'n\u00ADew',
- "new value should be displayed properly as text with the skype obfuscation");
+ assert.strictEqual($phoneLink.text(), 'new',
+ "new value should be displayed properly");
assert.strictEqual($phoneLink.attr('href'), 'tel:new',
"should still have proper tel prefix");
@@ -3104,8 +3104,8 @@ QUnit.module('basic_fields', {
assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').length, 5,
"should have 5 cells");
- assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').first().text(), 'y\u00ADop',
- "value should be displayed properly as text with the skype obfuscation");
+ assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').first().text(), 'yop',
+ "value should be displayed properly");
var $phoneLink = list.$('a.o_form_uri.o_field_widget');
assert.strictEqual($phoneLink.length, 5,
@@ -3125,7 +3125,7 @@ QUnit.module('basic_fields', {
list.$buttons.find('.o_list_button_save').click();
$cell = list.$('tbody td:not(.o_list_record_selector)').first();
assert.ok(!$cell.parent().hasClass('o_selected_row'), 'should not be in edit mode anymore');
- assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').first().text(), 'n\u00ADew',
+ assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').first().text(), 'new',
"value should be properly updated");
$phoneLink = list.$('a.o_form_uri.o_field_widget');
assert.strictEqual($phoneLink.length, 5,
@@ -3137,14 +3137,6 @@ QUnit.module('basic_fields', {
});
QUnit.test('phone field in form view on normal screens', function (assert) {
- // The behavior of this widget is completely altered by voip so this
- // test is irrelevant and fails if voip is installed. The enterprise
- // module is responsible for testing its own behavior in its own tests.
- if ('voip.user_agent' in odoo.__DEBUG__.services) {
- assert.expect(0);
- return;
- }
-
assert.expect(5);
var form = createView({
@@ -3166,11 +3158,11 @@ QUnit.module('basic_fields', {
},
});
- var $phone = form.$('span.o_field_widget:not(.o_form_uri)');
+ var $phone = form.$('a.o_field_widget.o_form_uri');
assert.strictEqual($phone.length, 1,
- "should have a simple span rather than a link");
+ "should have rendered the phone number as a link with correct classes");
assert.strictEqual($phone.text(), 'yop',
- "value should be displayed properly as text without skype obfuscation");
+ "value should be displayed properly");
// switch to edit mode and check the result
form.$buttons.find('.o_form_button_edit').click();
@@ -3184,21 +3176,13 @@ QUnit.module('basic_fields', {
// save
form.$buttons.find('.o_form_button_save').click();
- assert.strictEqual(form.$('span.o_field_widget:not(.o_form_uri)').text(), 'new',
- "new value should be displayed properly as text without skype obfuscation");
+ assert.strictEqual(form.$('a.o_field_widget.o_form_uri').text(), 'new',
+ "new value should be displayed properly");
form.destroy();
});
QUnit.test('phone field in editable list view on normal screens', function (assert) {
- // The behavior of this widget is completely altered by voip so this
- // test is irrelevant and fails if voip is installed. The enterprise
- // module is responsible for testing its own behavior in its own tests.
- if ('voip.user_agent' in odoo.__DEBUG__.services) {
- assert.expect(0);
- return;
- }
-
assert.expect(8);
var list = createView({
@@ -3216,10 +3200,10 @@ QUnit.module('basic_fields', {
assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').length, 5,
"should have 5 cells");
assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').first().text(), 'yop',
- "value should be displayed properly as text without skype obfuscation");
+ "value should be displayed properly");
- assert.strictEqual(list.$('span.o_field_widget:not(.o_form_uri)').length, 5,
- "should have spans with correct classes");
+ assert.strictEqual(list.$('a.o_field_widget.o_form_uri').length, 5,
+ "should have the correct classnames");
// Edit a line and check the result
var $cell = list.$('tbody td:not(.o_list_record_selector)').first();
@@ -3235,8 +3219,8 @@ QUnit.module('basic_fields', {
assert.ok(!$cell.parent().hasClass('o_selected_row'), 'should not be in edit mode anymore');
assert.strictEqual(list.$('tbody td:not(.o_list_record_selector)').first().text(), 'new',
"value should be properly updated");
- assert.strictEqual(list.$('span.o_field_widget:not(.o_form_uri)').length, 5,
- "should still have spans with correct classes");
+ assert.strictEqual(list.$('a.o_field_widget.o_form_uri').length, 5,
+ "should still have links with correct classes");
list.destroy();
});
@@ -3271,7 +3255,7 @@ QUnit.module('basic_fields', {
// save
form.$buttons.find('.o_form_button_save').click();
- assert.strictEqual(form.$('.o_field_widget').text().split('\u00AD').join(''), val,
+ assert.strictEqual(form.$('.o_field_widget').text(), val,
"value should have been correctly escaped");
form.destroy();
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index bd1e5d0ffea..d3b21d265d7 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -3818,14 +3818,6 @@ QUnit.module('Views', {
});
QUnit.test('navigation with tab key in readonly form view', function (assert) {
- // The behavior of the phone widget is completely altered by voip so
- // this test fails if voip is installed. The enterprise module is
- // responsible for testing its own behavior in its own tests.
- if ('voip.user_agent' in odoo.__DEBUG__.services) {
- assert.expect(0);
- return;
- }
-
assert.expect(3);
this.data.partner.records[1].product_id = 37;
@@ -3851,15 +3843,19 @@ QUnit.module('Views', {
// focus first field, trigger tab
form.$('[name="trululu"]').focus();
form.$('[name="trululu"]').trigger($.Event('keydown', {which: $.ui.keyCode.TAB}));
+ form.$('[name="foo"]').trigger($.Event('keydown', {which: $.ui.keyCode.TAB}));
assert.strictEqual(form.$('[name="product_id"]')[0], document.activeElement,
"product_id should be focused");
form.$('[name="product_id"]').trigger($.Event('keydown', {which: $.ui.keyCode.TAB}));
+ form.$('[name="foo"]:eq(1)').trigger($.Event('keydown', {which: $.ui.keyCode.TAB}));
assert.strictEqual(form.$('[name="display_name"]')[0], document.activeElement,
- "display_name should be focused (emails are focusable but phone aren't)");
+ "display_name should be focused");
// simulate shift+tab on active element
$(document.activeElement).trigger($.Event('keydown', {which: $.ui.keyCode.TAB, shiftKey: true}));
$(document.activeElement).trigger($.Event('keydown', {which: $.ui.keyCode.TAB, shiftKey: true}));
+ $(document.activeElement).trigger($.Event('keydown', {which: $.ui.keyCode.TAB, shiftKey: true}));
+ $(document.activeElement).trigger($.Event('keydown', {which: $.ui.keyCode.TAB, shiftKey: true}));
assert.strictEqual(document.activeElement, form.$('[name="trululu"]')[0],
"first many2one should be focused");