diff options
Diffstat (limited to 'addons/web/static/src/xml/base.xml')
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 414 |
1 files changed, 215 insertions, 199 deletions
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 328f1ab93b5..45bd3555d69 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -6,13 +6,13 @@ <div t-name="Loading" class="o_loading"/> <t t-name="WidgetLabel.tooltip"> - <div class="oe_tooltip_string" t-if="widget.string"> + <div class="oe_tooltip_string" t-if="widget.string" role="tooltip"> <t t-esc="widget.string"/> <t t-if="debug and widget.nolabel">(nolabel)</t> </div> - <p t-if="widget.attrs.help || widget.field.help" class="oe_tooltip_help"> + <p t-if="widget.attrs.help || widget.field.help" class="oe_tooltip_help" role="tooltip"> <t t-esc="widget.attrs.help || widget.field.help"/> </p> - <ul t-if="debug" class="oe_tooltip_technical"> + <ul t-if="debug" class="oe_tooltip_technical" role="tooltip"> <li data-item="field" t-if="widget.name"> <span class="oe_tooltip_technical_title">Field:</span> <t t-esc="widget.name"/> @@ -70,7 +70,7 @@ </ul> </t> <t t-name="WidgetButton.tooltip"> - <div class="oe_tooltip_string" t-if="debug || node.attrs.string"> + <div class="oe_tooltip_string" t-if="debug || node.attrs.string" role="tooltip"> <t t-if="debug"> Button <t t-if="node.attrs.string">: </t> @@ -78,10 +78,10 @@ </t> <t t-esc="node.attrs.string"/> </div> - <p t-if="node.attrs.help" class="oe_tooltip_help"> + <p t-if="node.attrs.help" class="oe_tooltip_help" role="tooltip"> <t t-esc="node.attrs.help"/> </p> - <ul t-if="debug" class="oe_tooltip_technical"> + <ul t-if="debug" class="oe_tooltip_technical" role="tooltip"> <li data-item="object"> <span class="oe_tooltip_technical_title">Object:</span> <t t-esc="state.model"/> @@ -115,18 +115,18 @@ </t> <t t-name="Notification"> - <div t-attf-class="o_notification #{widget.className}" t-translation="off"> - <a t-if="widget.sticky" class="fa fa-times o_close" href="#"/> + <div t-attf-class="o_notification #{widget.className}" t-translation="off" role="alertdialog"> + <a t-if="widget.sticky" class="fa fa-times o_close" href="#" title="Close" aria-label="Close"/> <div class="o_notification_title"> - <span t-attf-class="o_icon fa fa-3x #{widget.icon}"/> + <span t-attf-class="o_icon fa fa-3x #{widget.icon}" role="img" t-attf-aria-label="Notification #{widget.name}" t-attf-title="Notification #{widget.name}"/> <t t-raw="widget.title"/> </div> <div class="o_notification_content" t-if="widget.message"><t t-raw="widget.message"/></div> <div t-if="widget.buttons.length" class="o_buttons"> <button t-foreach="widget.buttons" t-as="button" t-attf-class="btn btn-sm #{button.primary ? 'btn-primary' : 'btn-default'}" type="button"> <t t-if="button.icon"> - <i t-if="button.icon.indexOf('fa-') === 0" t-attf-class="fa fa-fw o_button_icon #{button.icon}"/> - <img t-else="" t-att-src="button.icon"/> + <i t-if="button.icon.indexOf('fa-') === 0" t-attf-class="fa fa-fw o_button_icon #{button.icon}" role="img" t-att-aria-label="button.name" t-att-title="button.name"/> + <img t-else="" t-att-src="button.icon" t-att-alt="button.name"/> </t> <span><t t-esc="button.text"/></span> </button> @@ -134,7 +134,7 @@ </div> </t> -<div t-name="CrashManager.warning" class="o_dialog_warning"> +<div t-name="CrashManager.warning" class="o_dialog_warning" role="alert"> <t t-js="d"> var message = (d.message !== undefined) ? d.message : d.error.data.message; d.html_error = context.engine.tools.html_escape(message).replace(/\n/g, '<br/>'); @@ -144,7 +144,7 @@ <div t-name="CrashManager.error" class="o_dialog_error"> <div class="alert alert-warning clearfix" role="alert"> <button class="btn btn-sm btn-primary pull-right ml8 o_clipboard_button"> - <i class="fa fa-clipboard mr8"/>Copy the full error to clipboard + <span class="fa fa-clipboard mr8">Copy the full error to clipboard</span> </button> <p><b>An error occurred</b></p> <p>Please use the copy button to report the error to your support service.</p> @@ -152,13 +152,13 @@ <t t-set="errUID" t-value="_.uniqueId()"/> <button class="btn btn-sm btn-link" t-att-data-target="'#o_error_detail' + errUID" data-toggle="collapse">See details</button> - <div t-att-id="'o_error_detail' + errUID" class="collapse alert alert-danger o_error_detail"> + <div t-att-id="'o_error_detail' + errUID" class="collapse alert alert-danger o_error_detail" role="alert"> <pre><t t-esc="error.message"/></pre> <pre><t t-esc="error.data.debug"/></pre> </div> </div> -<form t-name="ChangePassword" name="change_password_form" method="POST"> +<form t-name="ChangePassword" name="change_password_form" method="POST" aria-atomic="true"> <div class="o_form_view"> <table class="o_group o_inner_group o_label_nowrap"> <tr> @@ -182,23 +182,23 @@ <t t-name="ControlPanel"> <div class="o_control_panel"> - <ol class="breadcrumb"/> - <div class="o_cp_searchview"/> + <ol class="breadcrumb" role="navigation"/> + <div class="o_cp_searchview" role="search"/> <div class="o_cp_left"> - <div class="o_cp_buttons"/> - <div class="o_cp_sidebar"/> + <div class="o_cp_buttons" role="toolbar" aria-label="Control panel toolbar"/> + <aside class="o_cp_sidebar"/> </div> <div class="o_cp_right"> - <div class="btn-group o_search_options"/> - <div class="o_cp_pager"/> - <div class="btn-group btn-group-sm o_cp_switch_buttons"/> + <div class="btn-group o_search_options" role="search"/> + <nav class="o_cp_pager" role="search" aria-label="Pager"/> + <nav class="btn-group btn-group-sm o_cp_switch_buttons" role="toolbar" aria-label="View switcher"/> </div> </div> </t> <t t-name="X2ManyControlPanel"> <div class="o_x2m_control_panel"> - <div class="o_cp_buttons"/> - <div class="o_cp_pager"/> + <nav class="o_cp_buttons" aria-label="Control panel toolbar" role="toolbar"/> + <nav class="o_cp_pager" aria-label="Pager" role="toolbar"/> </div> </t> @@ -206,41 +206,41 @@ <t t-foreach="views" t-as="view"> <button type="button" t-att-accesskey="view.accessKey" t-attf-class="btn btn-icon fa fa-lg #{view.icon} o_cp_switch_#{view.type}" - t-att-aria-label="view.type" - t-att-data-view-type="view.type" t-att-title="view.label" tabindex="-1"/> + t-attf-aria-label="View #{view.type}" + t-att-data-view-type="view.type" t-attf-title="View #{view.type}" tabindex="-1"/> </t> </t> <t t-name="WebClient.DebugManager"> - <li class="o_debug_manager"> - <a href="#" title="Open Developer Tools" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1"> + <li class="o_debug_manager" role="menuitem"> + <a href="#" title="Open Developer Tools" aria-label="Open Developer Tools" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1"> <span class="fa fa-bug"/> </a> <ul class="dropdown-menu o_debug_dropdown" role="menu"/> </li> </t> <t t-name="WebClient.DebugManager.Global"> - <li><a href="#" data-action="perform_js_tests">Run JS Tests</a></li> - <li><a href="#" data-action="perform_js_mobile_tests">Run JS Mobile Tests</a></li> - <li><a href="#" data-action="select_view">Open View</a></li> + <li><a role="menuitem" href="#" data-action="perform_js_tests">Run JS Tests</a></li> + <li><a role="menuitem" href="#" data-action="perform_js_mobile_tests">Run JS Mobile Tests</a></li> + <li><a role="menuitem" href="#" data-action="select_view">Open View</a></li> <t t-if="manager._events"> - <li class="divider"/> - <li><a href="#" data-action="show_timelines">Toggle Timelines</a></li> - <li><a href="#" data-action="requests_clear">Clear Events</a></li> + <li class="divider" role="separator"/> + <li><a role="menuitem" href="#" data-action="show_timelines">Toggle Timelines</a></li> + <li><a role="menuitem" href="#" data-action="requests_clear">Clear Events</a></li> </t> - <li class="divider o_debug_leave_section"/> - <li><a href="#" data-action="split_assets">Activate Assets Debugging</a></li> - <li><a href="#" data-action="regenerateAssets">Regenerate Assets Bundles</a></li> - <li><a href="#" data-action="leave_debug_mode">Leave the Developer Tools</a></li> + <li class="divider o_debug_leave_section" role="separator"/> + <li><a role="menuitem" href="#" data-action="split_assets">Activate Assets Debugging</a></li> + <li><a role="menuitem" href="#" data-action="regenerateAssets">Regenerate Assets Bundles</a></li> + <li><a role="menuitem" href="#" data-action="leave_debug_mode">Leave the Developer Tools</a></li> </t> <t t-name="WebClient.DebugManager.Action"> <t t-if="action"> - <li class="divider"/> - <li><a href="#" data-action="edit" t-att-data-model="action.type" t-att-data-id="action.id">Edit Action</a></li> + <li class="divider" role="separator"/> + <li><a role="menuitem" href="#" data-action="edit" t-att-data-model="action.type" t-att-data-id="action.id">Edit Action</a></li> <t t-if="action.res_model"> - <li><a href="#" data-action="get_view_fields">View Fields</a></li> - <li><a href="#" data-action="manage_filters">Manage Filters</a></li> - <li><a href="#" data-action="translate">Technical Translation</a></li> + <li><a role="menuitem" href="#" data-action="get_view_fields">View Fields</a></li> + <li><a role="menuitem" href="#" data-action="manage_filters">Manage Filters</a></li> + <li><a role="menuitem" href="#" data-action="translate">Technical Translation</a></li> </t> </t> </t> @@ -248,7 +248,7 @@ <dl><t t-foreach="fields" t-as="field"> <dt><h4><t t-esc="field"/></h4></dt> <dd> - <dl><ul><li t-foreach="field_value" t-as="attribute"> + <dl><ul role="menu"><li role="menuitem" t-foreach="field_value" t-as="attribute"> <strong><t t-esc="attribute"/></strong>: <t t-esc="attribute_value"/> </li></ul></dl> @@ -257,21 +257,21 @@ </t> <t t-name="WebClient.DebugManager.View"> <t t-if="view"> - <li class="divider"/> + <li role="separator" class="divider"/> <t t-if="view.type === 'form'"> - <li><a href="#" data-action="set_defaults">Set Defaults</a></li> + <li><a role="menuitem" href="#" data-action="set_defaults">Set Defaults</a></li> <t t-if="controller.getSelectedIds().length === 1"> - <li><a href="#" data-action="get_metadata">View Metadata</a></li> + <li><a role="menuitem" href="#" data-action="get_metadata">View Metadata</a></li> </t> </t> - <li><a href="#" data-action="fvg">Fields View Get</a></li> + <li><a role="menuitem" href="#" data-action="fvg">Fields View Get</a></li> <t t-if="can_edit"> <li> - <a href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="view.fieldsView.view_id"> + <a role="menuitem" href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="view.fieldsView.view_id"> Edit View: <t t-esc="_.str.capitalize(view.type)"/> </a> </li> - <li t-if="searchview and searchview.$el.is(':visible')"><a href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="action.searchFieldsView.view_id">Edit SearchView</a></li> + <li t-if="searchview and searchview.$el.is(':visible')"><a role="menuitem" href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="action.searchFieldsView.view_id">Edit SearchView</a></li> </t> </t> </t> @@ -332,7 +332,7 @@ </a> </t> <ul class="dropdown-menu" role="menu"> - <li t-foreach="widget.items[section.name]" t-as="item" t-att-class="item.classname"> + <li role="menuitem" t-foreach="widget.items[section.name]" t-as="item" t-att-class="item.classname"> <t t-if="section.name == 'files'"> <t t-set="item.title"> <b>Attachment : </b><br/> @@ -351,10 +351,10 @@ </t> <a t-att-title="item.title or None" t-att-data-section="section.name" t-att-data-index="item_index" t-att-href="item.url or '#'"> <t t-raw="item.label"/> - <span t-if="section.name == 'files' and widget.options.editable and !item.callback" class="fa fa-trash-o o_sidebar_delete_attachment" t-att-data-id="item.id" title="Delete this attachment"/> + <span t-if="section.name == 'files' and widget.options.editable and !item.callback" class="fa fa-trash-o o_sidebar_delete_attachment" t-att-data-id="item.id" title="Delete this attachment" role="img" aria-label="Delete this attachment"/> </a> </li> - <li t-if="section.name == 'files' and widget.options.editable" class="o_sidebar_add_attachment"> + <li role="menuitem" t-if="section.name == 'files' and widget.options.editable" class="o_sidebar_add_attachment"> <t t-call="HiddenInputFile"> <t t-set="fileupload_id" t-value="widget.fileuploadId"/> <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t> @@ -371,7 +371,7 @@ </t> <t t-name="ListView.buttons"> - <div class="o_list_buttons"> + <div class="o_list_buttons" role="toolbar" aria-label="Main actions"> <t t-if="widget.is_action_enabled('create')"> <button type="button" class="btn btn-primary btn-sm o_list_button_add" accesskey="c"> Create @@ -387,7 +387,7 @@ </t> <t t-name="FormView.buttons"> - <div class="o_form_buttons_view"> + <div class="o_form_buttons_view" role="toolbar" aria-label="Main actions"> <button t-if="widget.is_action_enabled('edit')" type="button" class="btn btn-primary btn-sm o_form_button_edit" accesskey="a"> Edit @@ -397,7 +397,7 @@ Create </button> </div> - <div class="o_form_buttons_edit"> + <div class="o_form_buttons_edit" role="toolbar" aria-label="Main actions"> <button type="button" class="btn btn-primary btn-sm o_form_button_save" accesskey="s"> Save @@ -409,7 +409,7 @@ </div> </t> <t t-name="SaveCancelButton.tooltip"> - <div class="oe_tooltip_string"> + <div class="oe_tooltip_string" role="alert"> <div class="tooltip-inner"> Hit ENTER to SAVE<br/> Hit ESCAPE to DISCARD @@ -417,7 +417,7 @@ </div> </t> <t t-name="CreateButton.tooltip"> - <div class="oe_tooltip_string"> + <div class="oe_tooltip_string" role="tooltip"> <div class="tooltip-inner"> Hit ENTER to CREATE<br/> Hit DOWN to navigate to the list bellow @@ -425,14 +425,14 @@ </div> </t> <t t-name="FormButton.tooltip"> - <div class="oe_tooltip_string"> + <div class="oe_tooltip_string" role="tooltip"> <div class="tooltip-inner"> Hit ENTER to <t t-esc="title"></t> </div> </div> </t> -<form t-name="FormView.set_default"> +<form t-name="FormView.set_default" aria-atomic="true"> <t t-set="args" t-value="widget.args"/> <table style="width: 100%"> <tr> @@ -489,25 +489,25 @@ </table> </form> <t t-name="GraphView.buttons"> - <div class="btn-group btn-group-sm" role="group"> + <div class="btn-group btn-group-sm" role="toolbar" aria-label="Main actions"> <button class="btn btn-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> Measures <span class="caret"/> </button> - <ul class="dropdown-menu o_graph_measures_list"> + <ul class="dropdown-menu o_graph_measures_list" role="menu"> <li t-foreach="measures" t-as="measure" t-att-data-field="measure[0]"> - <a href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a> + <a role="menuitem" href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a> </li> - <li class="divider"></li> - <li data-field="__count__"><a href="#">Count</a></li> + <li role="separator" class="divider"></li> + <li data-field="__count__"><a role="menuitem" href="#">Count</a></li> </ul> </div> - <div class="btn-group btn-group-sm"> - <button class="btn btn-default fa fa-bar-chart-o o_graph_button" title="Bar Chart" data-mode="bar"/> - <button class="btn btn-default fa fa-line-chart o_graph_button" title="Line Chart" data-mode="line"/> - <button class="btn btn-default fa fa-pie-chart o_graph_button" title="Pie Chart" data-mode="pie"/> + <div class="btn-group btn-group-sm" role="toolbar" aria-label="Change graph"> + <button class="btn btn-default fa fa-bar-chart-o o_graph_button" title="Bar Chart" aria-label="Bar Chart" data-mode="bar"/> + <button class="btn btn-default fa fa-line-chart o_graph_button" title="Line Chart" aria-label="Line Chart" data-mode="line"/> + <button class="btn btn-default fa fa-pie-chart o_graph_button" title="Pie Chart" aria-label="Pie Chart" data-mode="pie"/> </div> </t> -<div t-name="GraphView.error" class="o_view_nocontent" > +<div t-name="GraphView.error" class="o_view_nocontent" role="alert"> <div class="o_nocontent_help"> <p class="o_view_nocontent_empty_folder"><t t-esc="title"/></p> <p><t t-esc="description"/></p> @@ -518,51 +518,51 @@ <div class="o_field_selection"/> </div> <t t-name="PivotView.buttons"> - <div class="btn-group btn-group-sm" role="group"> + <div class="btn-group btn-group-sm" role="toolbar" aria-label="Main actions"> <button class="btn btn-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> Measures <span class="caret"/> </button> - <ul class="dropdown-menu o_pivot_measures_list"> + <ul class="dropdown-menu o_pivot_measures_list" role="menu"> <li t-foreach="measures" t-as="measure" t-att-data-field="measure[0]"> - <a href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a> + <a role="menuitem" href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a> </li> - <li class="divider"></li> - <li data-field="__count"><a href="#">Count</a></li> + <li role="separator" class="divider"></li> + <li data-field="__count"><a role="menuitem" href="#">Count</a></li> </ul> </div> - <div class="btn-group btn-group-sm"> - <button class="btn btn-default fa fa-expand o_pivot_flip_button" title="Flip axis"/> - <button class="btn btn-default fa fa-arrows-alt o_pivot_expand_button" title="Expand all"/> - <button class="btn btn-default fa fa-download o_pivot_download" title="Download xls"/> + <div class="btn-group btn-group-sm" role="toolbar" aria-label="Pivot settings"> + <button class="btn btn-default fa fa-expand o_pivot_flip_button" title="Flip axis" aria-label="Flip axis"/> + <button class="btn btn-default fa fa-arrows-alt o_pivot_expand_button" title="Expand all" aria-label="Expand all"/> + <button class="btn btn-default fa fa-download o_pivot_download" title="Download xls" aria-label="Download xls"/> </div> </t> <t t-name="PivotView.FieldSelection"> <ul class="dropdown-menu o_pivot_field_menu" role="menu"> <t t-foreach="fields" t-as="field"> <t t-if="(field[1].type === 'date') || (field[1].type === 'datetime')"> - <li t-att-data-field="field[0]" t-attf-class="o_inline_dropdown#{field[2] ? ' disabled' : ''}"> + <li role="menuitem" aria-haspopup="true" t-att-data-field="field[0]" t-attf-class="o_inline_dropdown#{field[2] ? ' disabled' : ''}"> <a href="#" class="o_pivot_field_selection"> <t t-esc="field[1].string"/> </a> - <ul class="dropdown-menu"> - <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'day'">Day</a></li> - <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'week'">Week</a></li> - <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'month'">Month</a></li> - <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'quarter'">Quarter</a></li> - <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'year'">Year</a></li> + <ul class="dropdown-menu" role="menu"> + <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'day'">Day</a></li> + <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'week'">Week</a></li> + <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'month'">Month</a></li> + <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'quarter'">Quarter</a></li> + <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'year'">Year</a></li> </ul> </li> </t> <t t-else=""> <li t-att-data-field="field[0]" t-att-class="(field[2] ? 'disabled' : '')"> - <a href="#"><t t-esc="field[1].string"/></a> + <a role="menuitem" href="#"><t t-esc="field[1].string"/></a> </li> </t> </t> </ul> </t> <div t-name="PivotView.nodata"> - <div class="o_view_nocontent"> + <div class="o_view_nocontent" role="alert"> <div class="o_nocontent_help"> <p class="o_view_nocontent_empty_folder"> No data to display @@ -575,15 +575,15 @@ </div> <t t-name="FormSelection"> - <div class="btn-group o_selection"> - <a href="#" data-toggle="dropdown"><span class="o_status"/></a> + <div class="btn-group o_selection" aria-atomic="true"> + <a href="#" data-toggle="dropdown" aria-label="Dropdown menu" title="Dropdown menu"><span class="o_status"/></a> <ul class="dropdown-menu state" role="menu"> </ul> </div> </t> <t t-name="FormSelection.items"> <li t-foreach="states" t-as="rec" t-att-data-value="rec.name"> - <a href="#"> + <a role="menuitem" href="#"> <span t-att-class="'o_status ' + (rec.state_class && rec.state_class || '')"/> <t t-raw="rec.state_name"/> </a> @@ -591,34 +591,34 @@ </t> <t t-name="FieldDomain.content"> <div t-if="hasModel" class="o_field_domain_panel"> - <i class="fa fa-arrow-right"/> + <i class="fa fa-arrow-right" role="img" aria-label="Domain" title="Domain"/> <button t-if="isValid" class="btn btn-xs btn-default o_domain_show_selection_button" type="button"> <t t-esc="nbRecords"/> record(s) </button> - <span t-else="" class="text-warning"><i class="fa fa-exclamation-triangle"/> Invalid domain</span> + <span t-else="" class="text-warning" role="alert"><i class="fa fa-exclamation-triangle" role="img" aria-label="Warning" title="Warning"/> Invalid domain</span> <button t-if="inDialogEdit" class="btn btn-xs btn-primary o_field_domain_dialog_button">Edit Domain</button> </div> <div t-else="">Select a model to add a filter.</div> </t> <t t-name="DomainNode.ControlPanel"> - <div t-if="!widget.readonly && !widget.noControlPanel" class="o_domain_node_control_panel"> - <button class="btn o_domain_delete_node_button"><i class="fa fa-times"/></button> - <button class="btn o_domain_add_node_button"><i class="fa fa-plus-circle"/></button> - <button class="btn o_domain_add_node_button" data-branch="1"><i class="fa fa-ellipsis-h"/></button> + <div t-if="!widget.readonly && !widget.noControlPanel" class="o_domain_node_control_panel" role="toolbar" aria-label="Domain node"> + <button class="btn o_domain_delete_node_button" title="Delete node" aria-label="Delete node"><i class="fa fa-times"/></button> + <button class="btn o_domain_add_node_button" title="Add node" aria-label="Add node"><i class="fa fa-plus-circle"/></button> + <button class="btn o_domain_add_node_button" title="Add branch" aria-label="Add branch" data-branch="1"><i class="fa fa-ellipsis-h"/></button> </div> </t> <t t-name="DomainTree.OperatorSelector"> - <div t-if="!widget.readonly" class="btn-group o_domain_tree_operator_selector"> + <div t-if="!widget.readonly" class="btn-group o_domain_tree_operator_selector" aria-atomic="true"> <button class="btn btn-xs btn-primary o_domain_tree_operator_caret" data-toggle="dropdown"> <t t-if="widget.operator === '&'">All</t> <t t-if="widget.operator === '|'">Any</t> <t t-if="widget.operator === '!'">None</t> </button> - <ul class="dropdown-menu"> - <li><a href="#" data-operator="&">All</a></li> - <li><a href="#" data-operator="|">Any</a></li> + <ul class="dropdown-menu" role="menu"> + <li><a role="menuitem" href="#" data-operator="&">All</a></li> + <li><a role="menuitem" href="#" data-operator="|">Any</a></li> </ul> </div> <strong t-else=""> @@ -627,10 +627,10 @@ <t t-if="widget.operator === '!'">NONE</t> </strong> </t> -<div t-name="DomainSelector" t-attf-class="o_domain_node o_domain_tree o_domain_selector #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}"> +<div aria-atomic="true" t-name="DomainSelector" t-attf-class="o_domain_node o_domain_tree o_domain_selector #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}"> <t t-if="widget.children.length === 0"> <span>Match <strong>all records</strong></span> - <button t-if="!widget.readonly" class="btn btn-xs btn-primary o_domain_add_first_node_button"><i class="fa fa-plus"/> Add filter</button> + <button t-if="!widget.readonly" class="btn btn-xs btn-primary o_domain_add_first_node_button"><span class="fa fa-plus"> Add filter</span></button> </t> <t t-else=""> <div class="o_domain_tree_header"> @@ -686,12 +686,12 @@ <t t-if="_.contains(['in', 'not in'], widget.operator)"> <div class="o_domain_leaf_value_input"> <span class="badge" t-foreach="widget.displayValue" t-as="val"> - <t t-esc="val"/> <i class="o_domain_leaf_value_remove_tag_button fa fa-times" t-att-data-value="val"/> + <t t-esc="val"/> <i class="o_domain_leaf_value_remove_tag_button fa fa-times" t-att-data-value="val" role="img" aria-label="Remove tag" title="Remove tag"/> </span> </div> <div class="o_domain_leaf_value_tags"> <input placeholder="Add new value" type="text" class="o_input"/> - <button class="btn btn-xs btn-primary fa fa-plus o_domain_leaf_value_add_tag_button"/> + <button class="btn btn-xs btn-primary fa fa-plus o_domain_leaf_value_add_tag_button" aria-label="Add tag" title="Add tag"/> </div> </t> <t t-else=""> @@ -724,16 +724,16 @@ </t> </div> </div> -<div t-name="ModelFieldSelector" t-attf-class="o_field_selector#{!widget.options.readonly ? ' o_edit_mode o_input' : ''}"> +<div aria-atomic="true" t-name="ModelFieldSelector" t-attf-class="o_field_selector#{!widget.options.readonly ? ' o_edit_mode o_input' : ''}"> <div class="o_field_selector_value" tabindex="0"/> <div class="o_field_selector_controls" tabindex="0"> - <i class="fa fa-exclamation-triangle o_field_selector_warning hidden" title="Invalid field chain"/> + <i role="alert" class="fa fa-exclamation-triangle o_field_selector_warning hidden" title="Invalid field chain" aria-label="Invalid field chain"/> </div> <div t-if="!widget.options.readonly" class="o_field_selector_popover hidden" tabindex="0"> <div class="o_field_selector_popover_header text-center"> - <i class="fa fa-arrow-left o_field_selector_popover_option o_field_selector_prev_page"/> + <i class="fa fa-arrow-left o_field_selector_popover_option o_field_selector_prev_page" title="Previous" role="img" aria-label="Previous"/> <div class="o_field_selector_title"/> - <i class="fa fa-times o_field_selector_popover_option o_field_selector_close"/> + <i class="fa fa-times o_field_selector_popover_option o_field_selector_close" title="Close" role="img" aria-label="Close"/> </div> <div class="o_field_selector_popover_body"> <ul class="o_field_selector_page"/> @@ -746,7 +746,7 @@ <t t-name="ModelFieldSelector.value"> <t t-foreach="chain" t-as="fieldName"> <t t-if="fieldName_index > 0"> - <i class="fa fa-chevron-right"/> + <i class="fa fa-chevron-right" role="img" aria-label="Followed by" title="Followed by"/> </t> <span class="o_field_selector_chain_part"> <t t-set="fieldInfo" t-value="_.findWhere(pages[fieldName_index], {'name': fieldName})"/> @@ -761,13 +761,13 @@ t-att-data-name="line.name"> <t t-esc="line.string"/> <div t-if="debug" class="text-muted o_field_selector_item_title"><t t-esc="line.name"/> (<t t-esc="line.type"/>)</div> - <i t-if="relationToFollow" class="fa fa-chevron-right o_field_selector_relation_icon"/> + <i t-if="relationToFollow" class="fa fa-chevron-right o_field_selector_relation_icon" role="img" aria-label="Relation to follow" title="Relation to follow"/> </li> </t> </ul> <t t-name="web.datepicker"> <t t-set="placeholder" t-value="widget.getParent().node and widget.getParent().node.attrs.placeholder"/> - <div class="o_datepicker"> + <div class="o_datepicker" aria-atomic="true"> <input type="text" class="o_datepicker_input o_input" t-att-name="widget.name" @@ -786,7 +786,7 @@ t-att-id="widget.idForLabel"/> </t> <t t-name="FieldRadio.button"> - <div class="o_radio_item"> + <div class="o_radio_item" aria-atomic="true"> <input type="radio" class="o_radio_input" t-att-checked="checked ? true : undefined" t-att-data-value="value[0]" t-att-data-index="index" t-att-id="id"/> <label class="o_form_label" t-att-for="id"><t t-esc="value[1]"/></label> @@ -804,7 +804,7 @@ <a t-if="!widget.nodeOptions.no_open" class="o_form_uri" href="#"/> <span t-if="widget.nodeOptions.no_open"/> </t> - <div t-if="widget.mode === 'edit'" class="o_field_widget o_field_many2one"> + <div t-if="widget.mode === 'edit'" class="o_field_widget o_field_many2one" aria-atomic="true"> <div class="o_input_dropdown"> <input type="text" class="o_input" t-att-barcode_events="widget.nodeOptions.barcode_events" @@ -812,9 +812,9 @@ t-att-autofocus="widget.attrs.autofocus" t-att-placeholder="widget.attrs.placeholder" t-att-id="widget.idForLabel"/> - <span class="o_dropdown_button" draggable="false"/> + <a role="button" class="o_dropdown_button" draggable="false"/> </div> - <button type="button" t-if="!widget.nodeOptions.no_open" class="fa fa-external-link btn btn-default o_external_button" tabindex="-1" draggable="false"/> + <button type="button" t-if="!widget.nodeOptions.no_open" class="fa fa-external-link btn btn-default o_external_button" tabindex="-1" draggable="false" aria-label="External link" title="External link"/> </div> </t> <t t-name="FieldReference" t-extend="FieldMany2One"> @@ -828,23 +828,29 @@ <t t-name="FieldMany2ManyTag"> <t t-foreach="elements" t-as="el"> <t t-set="color" t-value="el[colorField] || 0"/> - <span t-attf-class="badge dropdown o_tag_color_#{color}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id"> - <span class="o_badge_text"><t t-esc="el.display_name"/></span> - <span t-if="!readonly" class="fa fa-times o_delete"/> - </span> + <t t-set="colornames" t-value="['No color', 'Red', 'Orange', 'Yellow', 'Light blue', 'Dark purple', 'Salmon pink', 'Medium blue', 'Dark blue', 'Fushia', 'Green', 'Purple']"/> + <button t-attf-class="badge dropdown o_tag_color_#{color}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id" t-attf-title="Tag color: #{colornames[color]}"> + <span class="o_badge_text"><span role="img" t-attf-aria-label="Tag color: #{colornames[color]}"/><t t-esc="el.display_name"/></span> + <a t-if="!readonly" class="fa fa-times o_delete" title="Delete" aria-label="Delete"/> + </button> </t> </t> <t t-name="FieldMany2ManyTag.colorpicker"> <div class="o_colorpicker dropdown-menu tagcolor_dropdown_menu" role="menu"> <ul> - <li t-foreach="11" t-as="color"> - <a href="#" - t-att-data-id="tag_id" - t-att-data-color="color+1" - t-attf-class="o_tag_color_#{color+1}"/> - </li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_1" data-color="1" title="Red" aria-label="Red"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_2" data-color="2" title="Orange" aria-label="Orange"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_3" data-color="3" title="Yellow" aria-label="Yellow"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_4" data-color="4" title="Light blue" aria-label="Light blue"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_5" data-color="5" title="Dark purple" aria-label="Dark purple"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_6" data-color="6" title="Salmon pink" aria-label="Salmon pink"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_7" data-color="7" title="Medium blue" aria-label="Medium blue"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_8" data-color="8" title="Dark blue" aria-label="Dark blue"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_9" data-color="9" title="Fushia" aria-label="Fushia"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_10" data-color="10" title="Green" aria-label="Green"/></li> + <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_11" data-color="11" title="Purple" aria-label="Purple"/></li> <li> <!-- checkbox for tag color 0 --> - <div class="o_hide_in_kanban" + <div role="menuitem" class="o_hide_in_kanban" t-att-data-id="tag_id" t-att-data-color="0"> <div class="o_checkbox"> @@ -857,7 +863,7 @@ </div> </t> <t t-name="ProgressBar"> - <div class="o_progressbar"> + <div class="o_progressbar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"> <div t-if="widget.title" class="o_progressbar_title"><t t-esc="widget.title"/></div><div class="o_progress"> <div class="o_progressbar_complete"/> </div><div class="o_progressbar_value"/> @@ -887,18 +893,26 @@ </t> </t> <t t-name="FieldStatus.content.button"> - <t t-set="disabled" t-value="!clickable || i.selected"/> - <button type="button" t-att-data-value="i.id" t-att-disabled="disabled ? 'disabled' : undefined" - t-attf-class="btn btn-sm o_arrow_button btn-#{i.selected ? 'primary' : 'default'}#{disabled ? ' disabled' : ''}"> - <t t-esc="i.display_name"/> + <t t-set="disabled" t-value="!clickable"/> + <button type="button" t-att-data-value="i.id" disabled="disabled" title="Current state" aria-pressed="true" + class="btn btn-sm o_arrow_button btn-primary disabled" t-if="i.selected" aria-current="step"> + <t t-esc="i.display_name" role="img" t-attf-aria-label="#{i.display_name} is current state"/> + </button> + <button type="button" t-att-data-value="i.id" disabled="disabled" title="Not active state" aria-pressed="false" + class="btn btn-sm o_arrow_button btn-default disabled" t-if="!i.selected and disabled"> + <t t-esc="i.display_name" role="img" t-attf-aria-label="#{i.display_name} is not current state"/> + </button> + <button type="button" t-att-data-value="i.id" title="Not active state, click to change it" aria-pressed="false" + class="btn btn-sm o_arrow_button btn-default" t-if="!i.selected and !disabled"> + <t t-esc="i.display_name" role="img" t-attf-aria-label="Click to change current state to #{i.display_name}"/> </button> </t> <t t-name="FieldBinaryImage"> - <div class="o_field_image"> + <div class="o_field_image" aria-atomic="true"> <t t-if="widget.mode !== 'readonly'"> <div class="o_form_image_controls"> - <span class="fa fa-pencil fa-lg pull-left o_select_file_button" title="Edit"/> - <span class="fa fa-trash-o fa-lg pull-right o_clear_file_button" title="Clear"/> + <button class="fa fa-pencil fa-lg pull-left o_select_file_button" title="Edit" aria-label="Edit"/> + <button class="fa fa-trash-o fa-lg pull-right o_clear_file_button" title="Clear" aria-label="Clear"/> <span class="o_form_binary_progress">Uploading...</span> <t t-call="HiddenInputFile"> @@ -911,6 +925,7 @@ </t> <t t-name="FieldBinaryImage-img"> <img class="img img-responsive" + alt="Binary file" t-att-src='url' t-att-border="widget.readonly ? 0 : 1" t-att-name="widget.name"/> @@ -918,7 +933,7 @@ <t t-name="FieldBinaryFile"> <a t-if="widget.mode === 'readonly'" href="javascript:void(0)" class="o_form_uri"/> - <div t-if="widget.mode !== 'readonly'" class="o_field_binary_file"> + <div t-if="widget.mode !== 'readonly'" class="o_field_binary_file" aria-atomic="true"> <input type="text" class="o_input" readonly="readonly" t-att-name="widget.name" @@ -926,8 +941,8 @@ t-att-autofocus="widget.attrs.autofocus"/> <button type="button" class="btn btn-sm btn-primary o_select_file_button" title="Select">Upload your file</button> - <button type="button" class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select"/> - <button type="button" class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear"/> + <button type="button" class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select" aria-label="Select"/> + <button type="button" class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear" aria-label="Clear"/> <span class="o_form_binary_progress">Uploading...</span> <t t-call="HiddenInputFile"> @@ -938,7 +953,7 @@ </t> <t t-name="HiddenInputFile"> - <div t-attf-class="o_hidden_input_file #{fileupload_class or ''}" t-att-style="fileupload_style"> + <div t-attf-class="o_hidden_input_file #{fileupload_class or ''}" t-att-style="fileupload_style" aria-atomic="true"> <form class="o_form_binary_form" t-att-target="fileupload_id" method="post" enctype="multipart/form-data" t-att-action="fileupload_action || '/web/binary/upload'"> <input type="hidden" name="csrf_token" t-att-value="csrf_token"/> @@ -953,12 +968,12 @@ </t> <t t-name="FieldPdfViewer"> - <div class="o_field_pdfviewer"> - <div t-if="widget.mode !== 'readonly'" class="o_form_pdf_controls mt8"> + <div class="o_field_pdfviewer" aria-atomic="true"> + <div t-if="widget.mode !== 'readonly'" class="o_form_pdf_controls mt8" role="toolbar" aria-label="PDF controls"> <span class="o_form_binary_progress">Uploading...</span> <button type="button" class="btn btn-sm btn-primary o_select_file_button" title="Select">Upload your file</button> - <button class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select" type="button"></button> - <button class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear" type="button"></button> + <button class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select" aria-label="Select" type="button"></button> + <button class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear" aria-label="Clear" type="button"></button> </div> <iframe class="o_pdfview_iframe o_field_pdfviewer"/> <t t-call="HiddenInputPDFFile"> @@ -976,10 +991,10 @@ </t> </t> -<div t-name="FieldBinaryFileUploader" t-attf-class="oe_fileupload #{widget.attrs.class ? widget.attrs.class :''}"> +<div t-name="FieldBinaryFileUploader" t-attf-class="oe_fileupload #{widget.attrs.class ? widget.attrs.class :''}" aria-atomic="true"> <div class="oe_placeholder_files"/> <div t-if="widget.mode !== 'readonly'" class="oe_add"> - <button class="btn btn-default o_attach"><span class="fa fa-paperclip"/> <t t-esc="widget.string"/></button> + <button class="btn btn-default o_attach" title="Attach"><span class="fa fa-paperclip" aria-label="Attach"/> <t t-esc="widget.string"/></button> <t t-call="HiddenInputFile"> <t t-set="fileupload_id" t-value="widget.fileupload_id"/> <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t> @@ -990,7 +1005,7 @@ </t> </div> </div> -<div t-name="FieldBinaryFileUploader.files" class="oe_attachments"> +<div t-name="FieldBinaryFileUploader.files" class="oe_attachments" aria-atomic="true"> <t t-if="widget.mode === 'readonly'"> <div t-foreach="widget.value.data" t-as="file"> <a target="_blank" t-att-href="widget.metadata[file.id].url" t-attf-title="#{(file.data.name || file.data.filename) + (file.data.date?' \n('+file.data.date+')':'' )}"><t t-raw="file.data.name || file.data.filename"/></a> @@ -1000,19 +1015,20 @@ <div t-foreach="widget.value.data" t-as="file" class="oe_attachment"> <t t-if="!file.data.upload"> <div> - <a href="#" class="fa fa-times pull-right oe_delete" title="Delete this file" t-att-data-id="file.data.id"/> + <a href="#" class="fa fa-times pull-right oe_delete" title="Delete this file" aria-label="Delete this file" t-att-data-id="file.data.id"/> <t t-raw="file.data.name || file.data.filename"/> </div> <a class="o_image" target="_blank" t-att-href="widget.metadata[file.id] ? widget.metadata[file.id].url : false" t-att-title="file.data.name" + t-att-aria-label="file.data.name" t-att-data-mimetype="file.data.mimetype" t-attf-data-src="/web/image/#{file.data.id}/100x80"/> </t> </div> <div t-foreach="widget.uploadingFiles" t-as="file" class="oe_attachment"> <div>Uploading...</div> - <a t-att-title="file.name" t-att-name="file.name" class="o_image"> - <i class="fa fa-spinner fa-spin fa-5x fa-fw"></i> + <a t-att-title="file.name" t-att-aria-label="file.name" t-att-name="file.name" class="o_image"> + <i class="fa fa-spinner fa-spin fa-5x fa-fw" role="img" aria-label="Loading, please wait..." title="Loading, please wait..."></i> </a> <div><t t-esc="file.name"/></div> </div> @@ -1087,12 +1103,12 @@ -<div t-name="SearchView" class="o_searchview"> - <span class="o_searchview_more fa" title="Advanced Search..."/> +<div t-name="SearchView" class="o_searchview" role="search" aria-autocomplete="list"> + <span class="o_searchview_more fa" title="Advanced Search..." role="img" aria-label="Advanced Search..."/> <div class="o_searchview_input_container"/> </div> <t t-name="SearchViewMobile"> - <div class="o_searchview"> + <div class="o_searchview" role="search" aria-autocomplete="list"> <button class="o_enable_searchview btn btn-sm fa fa-search"/> <div class="o_mobile_search o_hidden"> <div class="o_mobile_search_header"> @@ -1109,14 +1125,14 @@ </div> </t> -<input t-name="SearchView.InputView" type="text" class="o_searchview_input" accesskey="Q" placeholder="Search..."/> -<div t-name="SearchView.FacetView" tabindex="0" class="o_searchview_facet"> +<input t-name="SearchView.InputView" type="text" class="o_searchview_input" accesskey="Q" placeholder="Search..." role="searchbox" aria-haspopup="true"/> +<div t-name="SearchView.FacetView" tabindex="0" class="o_searchview_facet" role="img" aria-label="search"> <span t-if="widget.model.has('icon')" t-att-class="'fa ' + widget.model.get('icon') + ' o_searchview_facet_label'"/> <span t-if="!widget.model.has('icon')" class="o_searchview_facet_label"> <t t-esc="widget.model.get('category')"/> </span> <div class="o_facet_values"/> - <div class="fa fa-sm fa-remove o_facet_remove"/> + <div class="fa fa-sm fa-remove o_facet_remove" role="img" aria-label="Remove" title="Remove"/> </div> <span t-name="SearchView.FacetView.Value"> <t t-esc="widget.model.get('label') + (widget.intervalLabel ? (': ' + widget.intervalLabel) : '')"/> @@ -1129,7 +1145,7 @@ <li t-foreach="widget.filters" t-as="filter" t-if="!filter.visible || filter.visible()" t-att-title="filter.attrs.string ? filter.attrs.help : undefined" t-att-data-index="filter_index"> - <a href="#"><t t-esc="filter.attrs.string or filter.attrs.help or filter.attrs.name or 'Ω'"/></a> + <a role="menuitem" href="#"><t t-esc="filter.attrs.string or filter.attrs.help or filter.attrs.name or 'Ω'"/></a> </li> </t> <t t-name="SearchView.field"> @@ -1192,7 +1208,7 @@ </div> </t> <t t-name="SearchView.extended_search.proposition"> - <li class="o_filter_condition"> + <li role="menuitem" class="o_filter_condition"> <span class="o_or_filter">or</span> <span> <select class="o_input o_searchview_extended_prop_field"> @@ -1203,7 +1219,7 @@ </option> </t> </select> - <span class="o_searchview_extended_delete_prop fa fa-trash-o"/> + <span class="o_searchview_extended_delete_prop fa fa-trash-o" role="img" aria-label="Delete" title="Delete"/> </span> <select class="o_input o_searchview_extended_prop_op"/> <span class="o_searchview_extended_prop_value"/> @@ -1225,32 +1241,32 @@ </t> <div t-name="SearchView.FavoriteMenu" class="btn-group o_dropdown"> - <button class="o_dropdown_toggler_btn btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1"> + <button class="o_dropdown_toggler_btn btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1" aria-label="Favorites" title="Favorites"> <span class="fa fa-star"/> Favorites <span t-attf-class="#{widget.isMobile ? 'fa fa-chevron-right pull-right mt4' : 'caret'}"/> </button> <ul class="dropdown-menu o_favorites_menu" role="menu"> <li class="divider user_filter"/> <li class="divider shared_filter"/> <li class="o_save_search o_closed_menu"> - <a href="#">Save current search</a> + <a role="menuitem" href="#">Save current search</a> </li> - <li class="o_save_name"> + <li role="menuitem" class="o_save_name"> <input type="text"></input> </li> - <li class="o_save_name"> + <li role="menuitem" class="o_save_name"> <span><div class="o_checkbox"><input type="checkbox"/><span/></div> Use by default</span> </li> - <li class="o_save_name"> - <span><div class="o_checkbox"><input type="checkbox"/><span/></div> Share with all users </span><span class="fa fa-users"/> + <li role="menuitem" class="o_save_name"> + <span><div class="o_checkbox"><input type="checkbox"/><span/></div> Share with all users </span><span class="fa fa-users" role="img" aria-label="Users" title="Users"/> </li> <li class="o_save_name"> - <button type="button" class="btn btn-primary btn-sm">Save</button> + <button role="menuitem" type="button" class="btn btn-primary btn-sm">Save</button> </li> </ul> </div> <div t-name="ExportDialog" class="o_export"> - <p> + <p role="status"> This wizard will export all data that matches the current search criteria to a CSV file. You can export all data or only the fields that can be reimported after modification. </p> @@ -1293,16 +1309,16 @@ </div> </div> <p t-name="Export.DomainMessage"> - <strong t-if="!record.ids_to_export">Please pay attention that all records matching your search filter will be exported. Not only the selected ids.</strong> - <strong t-if="record.ids_to_export">Please note that only the selected ids will be exported.</strong> + <strong t-if="!record.ids_to_export" role="alert">Please pay attention that all records matching your search filter will be exported. Not only the selected ids.</strong> + <strong t-if="record.ids_to_export" role="alert">Please note that only the selected ids will be exported.</strong> </p> <div t-name="Export.TreeItems" t-foreach="fields" t-as="field" t-att-data-id="field.id" class="o_export_tree_item" - tabindex="-1"> <!-- tabindex make the div focusable --> + tabindex="-1" role="treeitem"> <!-- tabindex make the div focusable --> <span t-if="field.children && (field.id).split('/').length != 3" - class="o_expand_parent fa fa-plus"/> + class="o_expand_parent fa fa-plus" role="img" aria-label="Expand parents" title="Expand parents"/> <span class="o_tree_column" t-att-title="debug and field.id or None"><t t-esc="field.string"/></span> </div> <t t-name="Export.SaveList"> @@ -1322,14 +1338,14 @@ <t t-name="Throbber"> <div> <div class="oe_blockui_spin" style="height: 50px"> - <img src="/web/static/src/img/spin.png" style="animation: fa-spin 1s infinite steps(12);"/> + <img src="/web/static/src/img/spin.png" style="animation: fa-spin 1s infinite steps(12);" alt="Loading..."/> </div> <br /> <div class="oe_throbber_message" style="color:white"></div> </div> </t> <t t-name="Spinner"> - <div class="o_spinner"><i class="fa fa-spinner fa-spin"/></div> + <div class="o_spinner"><i class="fa fa-spinner fa-spin" role="img" aria-label="Loading, please wait..." title="Loading, please wait..."/></div> </t> <t t-name="M2ODialog"> <div> @@ -1338,7 +1354,7 @@ </div> </t> <t t-name="FieldMany2ManyCheckBoxes"> - <div> + <div aria-atomic="true"> <div t-foreach="widget.m2mValues" t-as="m2m_value"> <t t-set="id_for_label" t-value="'o_many2many_checkbox_' + _.uniqueId()"/> <div class="o_checkbox"> @@ -1354,7 +1370,7 @@ <span class="o_stat_text"><t t-esc="text"/></span> </t> <t t-name="toggle_button"> - <button type="button" class="o_icon_button" t-att-title="widget.string" t-att-aria-label="widget.string"> + <button type="button" class="o_icon_button" t-att-title="widget.string" t-att-aria-label="widget.string" aria-pressed="false"> <i class="fa fa-circle" t-att-title="widget.string"/> </button> </t> @@ -1363,14 +1379,14 @@ <span class="o_pager_counter"> <span class="o_pager_value"></span> / <span class="o_pager_limit"></span> </span> - <span class="btn-group btn-group-sm"> + <span class="btn-group btn-group-sm" aria-atomic="true"> <!-- accesskeys not wanted in X2Many widgets --> <t t-if="widget.options.withAccessKey"> <t t-set="att_prev" t-value="{'accesskey': 'p'}" /> <t t-set="att_next" t-value="{'accesskey': 'n'}" /> </t> - <button type="button" class="fa fa-chevron-left btn btn-icon o_pager_previous" t-att="att_prev" aria-label="Previous" tabindex="-1"/> - <button type="button" class="fa fa-chevron-right btn btn-icon o_pager_next" t-att="att_next" aria-label="Next" tabindex="-1"/> + <button type="button" class="fa fa-chevron-left btn btn-icon o_pager_previous" t-att="att_prev" aria-label="Previous" title="Next" tabindex="-1"/> + <button type="button" class="fa fa-chevron-right btn btn-icon o_pager_next" t-att="att_next" aria-label="Next" title="Next" tabindex="-1"/> </span> </div> @@ -1381,15 +1397,15 @@ </t> <t t-name="notification-box"> - <div t-attf-class="o_notification_box mb0 alert alert-dismissible alert-{{type}}" role="alert"> + <div t-attf-class="o_notification_box mb0 alert alert-dismissible alert-{{type}}" role="alertdialog"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> - <span aria-hidden="true" class="fa fa-times"></span> + <span class="fa fa-times"></span> </button> </div> </t> <t t-name="translation-alert"> - <div> + <div role="alertdialog"> Please update translations of : <t t-foreach="fields" t-as="field"> <strong><a class="oe_field_translate" t-att-name="field.name" href="#"><t t-esc="field.string"/><t t-if="!field_last">, </t></a></strong> @@ -1400,7 +1416,7 @@ <t t-name="UserMenu"> <li class="o_user_menu"> <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#"> - <img class="img-circle oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/user_menu_avatar.png'"/> + <img class="img-circle oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/user_menu_avatar.png'" alt="Avatar"/> <span class="oe_topbar_name"/> </a> <ul class="dropdown-menu" role="menu"> @@ -1410,17 +1426,17 @@ </t> <t t-name="UserMenu.Actions"> - <li><a href="#" data-menu="documentation">Documentation</a></li> - <li><a href="#" data-menu="support">Support</a></li> - <li class="divider"/> - <li><a href="#" data-menu="settings">Preferences</a></li> - <li><a href="#" data-menu="account">My Odoo.com account</a></li> - <li><a href="#" data-menu="logout">Log out</a></li> + <li><a role="menuitem" href="#" data-menu="documentation">Documentation</a></li> + <li><a role="menuitem" href="#" data-menu="support">Support</a></li> + <li role="separator" class="divider"/> + <li><a role="menuitem" href="#" data-menu="settings">Preferences</a></li> + <li><a role="menuitem" href="#" data-menu="account">My Odoo.com account</a></li> + <li><a role="menuitem" href="#" data-menu="logout">Log out</a></li> </t> <t t-name="SwitchCompanyMenu"> <li class="o_switch_company_menu"> - <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#"> + <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#" aria-label="Dropdown menu" title="Dropdown menu"> <span t-attf-class="#{widget.isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}"/> <span class="caret"/> </a> <ul class="dropdown-menu" role="menu"/> @@ -1428,35 +1444,35 @@ </t> <t t-name="EnterpriseUpgrade"> - <div class="row"> + <div class="row" role="status"> <div class="col-xs-6"> Get this feature and much more with Odoo Enterprise! <ul class="list-unstyled"> - <li><i class="fa fa-check"></i> Access to all Enterprise Apps</li> - <li><i class="fa fa-check"></i> New design</li> - <li><i class="fa fa-check"></i> Mobile support</li> - <li><i class="fa fa-check"></i> Upgrade to future versions</li> - <li><i class="fa fa-check"></i> Bugfixes guarantee</li> - <li><a href="http://www.odoo.com/editions" target="_blank"><i class="fa fa-plus"></i> And more</a></li> + <li><span class="fa fa-check"> Access to all Enterprise Apps</span></li> + <li><span class="fa fa-check"> New design</span></li> + <li><span class="fa fa-check"> Mobile support</span></li> + <li><span class="fa fa-check"> Upgrade to future versions</span></li> + <li><span class="fa fa-check"> Bugfixes guarantee</span></li> + <li><a href="http://www.odoo.com/editions" target="_blank"><span class="fa fa-plus"> And more</span></a></li> </ul> </div> <div class="col-xs-6"> - <img class="img-responsive" t-att-src='_s + "/web/static/src/img/enterprise_upgrade.jpg"' draggable="false"/> + <img class="img-responsive" t-att-src='_s + "/web/static/src/img/enterprise_upgrade.jpg"' draggable="false" alt="Upgrade to enterprise"/> </div> </div> </t> <t t-name="BaseSetting.Tabs"> <t t-foreach="tabItems" t-as="tab"> - <div class="tab" t-attf-data-key="#{tab.key}"> + <div class="tab" t-attf-data-key="#{tab.key}" role="tab"> <div class="icon hidden-xs" t-attf-style="background : url('#{imgurl}') no-repeat center;background-size:contain;"/> <span class="app_name"><t t-esc="tab.string"/></span> </div> </t> </t> <t t-name="BaseSetting.SearchHeader"> - <div class="settingSearchHeader o_hidden"> - <img class="icon" t-att-src="imgurl"></img> + <div class="settingSearchHeader o_hidden" role="search"> + <img class="icon" t-att-src="imgurl" alt="Search"></img> <span class="appName"><t t-esc="string"/></span> </div> </t> |
