[FIX] web,*: phone number ltr even in rtl language

Currently there is two ways in view to have a phone number displayed in
LTR in a RTL language:

- have `widget="phone"` on a field
- have a class o_force_ltr on the field

But this is currently done very rarely and fail in list view because the
direction of data cells is used, eg.:

```
<div style="direction:rtl">
  <table><tr><td style="direction:ltr">
      <span>+1 2 3</span>
  </td></tr><tr><td>
      <span style="direction:ltr">+4 5 6</span>
  </td>/tr></table>
</div>
```

will be displayed as:

+1 2 3
6 5 4+

In this commit, we use unicode-bidi* to optionally add an additional
level of embedding so direction is taken into account by the
bidirectional algorithm.

This commit also adds o_force_ltr class or phone widget on phone fields
where it is not already defined.

*: https://drafts.csswg.org/css-writing-modes-3/#propdef-unicode-bidi

opw-2224828
closes #48425

closes odoo/odoo#48588

X-original-commit: ab067218e069f0a92610c3f0d4137e563e47755c
Signed-off-by: Nicolas Lempereur (nle) <nle@odoo.com>
This commit is contained in:
Nicolas Lempereur
2020-03-30 13:50:04 +00:00
parent 8ccdbea9a7
commit b53cf339e4
17 changed files with 30 additions and 29 deletions
+2 -2
View File
@@ -324,7 +324,7 @@
<field name="contact_name" optional="hide"/>
<field name="partner_name" optional="hide"/>
<field name="email_from" optional="show"/>
<field name="phone" optional="show"/>
<field name="phone" optional="show" class="o_force_ltr"/>
<field name="city" optional="show"/>
<field name="state_id" optional="hide"/>
<field name="country_id" optional="show"/>
@@ -602,7 +602,7 @@
<field name="name" string="Opportunity"/>
<field name="partner_id" string="Customer" optional="show"/>
<field name="email_from" optional="show"/>
<field name="phone" optional="show"/>
<field name="phone" class="o_force_ltr" optional="show"/>
<field name="city" optional="show"/>
<field name="state_id" optional="hide"/>
<field name="country_id" optional="show"/>
@@ -18,7 +18,7 @@
<field name="type"/>
<field name="contact_name"/>
<field name="email_from"/>
<field name="phone"/>
<field name="phone" class="o_force_ltr"/>
<field name="stage_id"/>
<field name="user_id"/>
<field name="team_id"/>
+2 -2
View File
@@ -553,8 +553,8 @@
<field name="partner_id" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="name"/>
<field name="email"/>
<field name="phone"/>
<field name="mobile"/>
<field name="phone" class="o_force_ltr"/>
<field name="mobile" class="o_force_ltr"/>
</group>
<group string="Event Information" name="event">
<field name="event_id" attrs="{'readonly': [('state', '!=', 'draft')]}" options="{'no_create': True}"/>
@@ -15,8 +15,8 @@
<field name="event_ticket_id" domain="[('event_id', '=', event_id)]" readonly='1' force_save="1"/>
<field name="name"/>
<field name="email"/>
<field name="mobile"/>
<field name="phone"/>
<field name="mobile" class="o_force_ltr"/>
<field name="phone" class="o_force_ltr"/>
</tree>
</field>
<footer>
+2 -2
View File
@@ -92,7 +92,7 @@
<field name="arch" type="xml">
<tree string="Employees">
<field name="name"/>
<field name="work_phone"/>
<field name="work_phone" class="o_force_ltr"/>
<field name="work_email"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="department_id"/>
@@ -137,7 +137,7 @@
<ul>
<li id="last_login"/>
<li t-if="record.work_email.raw_value"><field name="work_email" /></li>
<li t-if="record.work_phone.raw_value"><field name="work_phone" /></li>
<li t-if="record.work_phone.raw_value" class="o_force_ltr"><field name="work_phone" /></li>
</ul>
</div>
</div>
+5 -5
View File
@@ -131,7 +131,7 @@
'form_view_ref': 'base.res_partner_view_form_private'}"
options='{"always_reload": True, "highlight_first_line": True}'/>
<field name="private_email" string="Email"/>
<field name="phone" groups="hr.group_hr_user" string="Phone"/>
<field name="phone" class="o_force_ltr" groups="hr.group_hr_user" string="Phone"/>
<field name="bank_account_id" context="{'default_partner_id': address_home_id}"/>
<field name="km_home_work" groups="hr.group_hr_user"/>
</group>
@@ -154,7 +154,7 @@
</group>
<group string="Emergency">
<field name="emergency_contact"/>
<field name="emergency_phone"/>
<field name="emergency_phone" class="o_force_ltr"/>
</group>
<group string="Work Permit" name="work_permit">
<field name="visa_no"/>
@@ -203,7 +203,7 @@
<field name="arch" type="xml">
<tree string="Employees" multi_edit="1">
<field name="name" readonly="1"/>
<field name="work_phone" readonly="1"/>
<field name="work_phone" class="o_force_ltr" readonly="1"/>
<field name="work_email"/>
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
<field name="department_id"/>
@@ -250,7 +250,7 @@
<ul>
<li id="last_login"/>
<li t-if="record.work_email.raw_value" class="o_text_overflow"><field name="work_email" /></li>
<li t-if="record.work_phone.raw_value"><field name="work_phone" /></li>
<li t-if="record.work_phone.raw_value" class="o_force_ltr"><field name="work_phone" /></li>
</ul>
</div>
</div>
@@ -323,7 +323,7 @@
<field name="arch" type="xml">
<tree string="Employees">
<field name="name"/>
<field name="work_phone"/>
<field name="work_phone" class="o_force_ltr"/>
<field name="work_email"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="department_id"/>
+2 -2
View File
@@ -133,7 +133,7 @@
options='{"always_reload": True, "highlight_first_line": True}'
attrs="{'readonly': [('can_edit', '=', False)]}"/>
<field name="private_email" string="Email" attrs="{'readonly': [('can_edit', '=', False)]}"/>
<field name="employee_phone" string="Phone" attrs="{'readonly': [('can_edit', '=', False)]}" options="{'enable_sms': false}"/>
<field name="employee_phone" string="Phone" class="o_force_ltr" attrs="{'readonly': [('can_edit', '=', False)]}" options="{'enable_sms': false}"/>
<field name="employee_bank_account_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
<field name="km_home_work" attrs="{'readonly': [('can_edit', '=', False)]}"/>
</group>
@@ -161,7 +161,7 @@
</group>
<group string="Emergency">
<field name="emergency_contact" attrs="{'readonly': [('can_edit', '=', False)]}"/>
<field name="emergency_phone" attrs="{'readonly': [('can_edit', '=', False)]}" options="{'enable_sms': false}"/>
<field name="emergency_phone" widget="phone" attrs="{'readonly': [('can_edit', '=', False)]}" options="{'enable_sms': false}"/>
</group>
<group string="Work Permit" name="work_permit">
<field name="visa_no" attrs="{'readonly': [('can_edit', '=', False)]}"/>
@@ -306,7 +306,7 @@
</div>
</div>
<field name="categ_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
<t t-if="record.partner_mobile.raw_value"><i class="fa fa-mobile mr4" role="img" aria-label="Mobile" title="Mobile"/><field name="partner_mobile" widget ="phone"/><br/></t>
<t t-if="record.partner_mobile.raw_value"><i class="fa fa-mobile mr4" role="img" aria-label="Mobile" title="Mobile"/><field name="partner_mobile" widget="phone"/><br/></t>
<div class="o_kanban_record_bottom mt4">
<div class="oe_kanban_bottom_left">
<div class="float-left mr4" groups="base.group_user">
+2 -2
View File
@@ -6,7 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="phone"/>
<field name="phone" class="o_force_ltr"/>
<field name="email"/>
</tree>
</field>
@@ -39,7 +39,7 @@
<group>
<field name="active" invisible="1"/>
<field name="email" attrs="{'required': [('send_by', '=', 'mail')]}"/>
<field name="phone" attrs="{'required': [('send_by', '=', 'phone')]}"/>
<field name="phone" class="o_force_ltr" attrs="{'required': [('send_by', '=', 'phone')]}"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="responsible_id" attrs="{'required': [('send_by', '=', 'mail')]}" groups="base.group_no_one" domain="[('share', '=', False)]"/>
</group>
@@ -30,7 +30,7 @@
<field name="priority">20</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='is_blacklisted']" position="after">
<field name="mobile"/>
<field name="mobile" class="o_force_ltr"/>
<field name="phone_sanitized" invisible="1"/>
<field name="phone_sanitized_blacklisted"/>
</xpath>
@@ -63,7 +63,7 @@
<field name="inherit_id" ref="mass_mailing.mailing_contact_view_kanban"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='email']" position="after">
<field name="mobile"/>
<field name="mobile" widget="phone"/>
<field name="phone_sanitized" invisible="1"/>
</xpath>
<xpath expr="//t[@t-esc='record.email.value']" position="after">
+1
View File
@@ -92,6 +92,7 @@ span.o_force_ltr {
display: inline-block;
}
.o_force_ltr, .o_field_phone {
unicode-bidi: embed; // ensure element has level of embedding for direction
/*rtl:ignore*/
direction: ltr;
}
@@ -206,7 +206,7 @@
<field name="is_connected" invisible="1"/>
<field name="partner_id"/>
<field name="email"/>
<field name="mobile"/>
<field name="mobile" class="o_force_ltr"/>
<field name="country_id" attrs="{'invisible': [('country_id', '=', False)]}"/>
<field name="lang_id"/>
</group>
@@ -151,7 +151,7 @@
<field name="partner_id" domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]"/>
<field name="partner_name"/>
<field name="partner_email"/>
<field name="partner_phone"/>
<field name="partner_phone" class="o_force_ltr"/>
<field name="partner_biography"/>
</group>
</page>
@@ -18,7 +18,7 @@
<field name="inherit_id" ref="website.website_visitor_view_kanban"/>
<field name="arch" type="xml">
<field name="page_ids" position="after">
<field name="mobile"/>
<field name="mobile" widget="phone"/>
</field>
<xpath expr="//div[hasclass('w_visitor_kanban_actions')]" position="inside">
<button name="action_send_sms" type="object" class="btn btn-secondary"
+1 -1
View File
@@ -26,7 +26,7 @@
</div>
</group>
<group name="communication_details">
<field name="phone"/>
<field name="phone" class="o_force_ltr"/>
<field name="email" widget="email"/>
<field name="active" invisible="1"/>
</group>
+3 -3
View File
@@ -28,7 +28,7 @@
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True}'/>
</div>
<field name="phone"/>
<field name="phone" class="o_force_ltr"/>
<field name="email"/>
<field name="website" string="Website" widget="url" placeholder="e.g. https://www.odoo.com"/>
</group>
@@ -84,7 +84,7 @@
<div t-if="record.email.value" class="col-6 text-center">
<field name="email"/>
</div>
<div t-if="record.phone.value" class="col-6 text-center">
<div t-if="record.phone.value" class="col-6 text-center o_force_ltr">
<field name="phone"/>
</div>
</div>
@@ -93,7 +93,7 @@
<strong>Email:</strong>
<field name="email"/>
</div>
<div t-if="record.phone.value">
<div t-if="record.phone.value" class="o_force_ltr">
<strong>Phone:</strong>
<field name="phone"/>
</div>
+1 -1
View File
@@ -46,7 +46,7 @@
<tree string="Contacts">
<field name="display_name" string="Name"/>
<field name="function" invisible="1"/>
<field name="phone" optional="show"/>
<field name="phone" class="o_force_ltr" optional="show"/>
<field name="email" optional="show"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="city" optional="hide"/>