diff options
Diffstat (limited to 'addons/web/static/src/xml/base.xml')
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 1867 |
1 files changed, 1867 insertions, 0 deletions
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml new file mode 100644 index 00000000..e18890ac --- /dev/null +++ b/addons/web/static/src/xml/base.xml @@ -0,0 +1,1867 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates id="template" xml:space="preserve"> + +<!-- Owl Templates --> + +<t t-name="web.ControlPanel" owl="1"> + <div class="o_control_panel"> + <div class="o_cp_top"> + <div class="o_cp_top_left"> + <ol t-if="props.withBreadcrumbs" class="breadcrumb" role="navigation"> + <li t-foreach="props.breadcrumbs" t-as="bc" t-key="bc.controllerID" + class="breadcrumb-item" + t-att-class="{ o_back_button: bc_index === props.breadcrumbs.length - 1 }" + t-att-accesskey="bc_last and 'b'" + t-on-click.prevent="trigger('breadcrumb-clicked', { controllerID: bc.controllerID })" + > + <a t-if="bc.title" href="#" t-esc="bc.title"/> + <em t-else="" class="text-warning">Unnamed</em> + </li> + <li class="breadcrumb-item active"> + <t t-if="props.title" t-esc="props.title"/> + <em t-else="" class="text-warning">Unnamed</em> + </li> + </ol> + </div> + <div class="o_cp_top_right"> + <div class="o_cp_searchview" + role="search" + t-ref="searchView" + > + <div t-if="props.withSearchBar" class="o_searchview" role="search" aria-autocomplete="list" > + <i class="o_searchview_icon fa fa-search" + title="Search..." + role="img" + aria-label="Search..." + /> + <SearchBar t-if="props.withSearchBar" fields="fields"/> + </div> + </div> + </div> + </div> + <div class="o_cp_bottom"> + <div class="o_cp_bottom_left"> + <div class="o_cp_buttons" role="toolbar" aria-label="Control panel buttons" t-ref="buttons"> + <t t-slot="buttons"/> + </div> + <ActionMenus t-if="props.actionMenus and props.actionMenus.items" + t-props="props.actionMenus" + /> + </div> + <div class="o_cp_bottom_right"> + <div class="btn-group o_search_options position-static" + role="search" + t-ref="searchViewButtons" + > + <t t-if="props.withSearchBar"> + <FilterMenu t-if="props.searchMenuTypes.includes('filter')" + class="o_filter_menu" + fields="fields" + /> + <GroupByMenu t-if="props.searchMenuTypes.includes('groupBy')" + class="o_group_by_menu" + fields="fields" + /> + <ComparisonMenu t-if="props.searchMenuTypes.includes('comparison') and model.get('filters', f => f.type === 'comparison').length" + class="o_comparison_menu" + /> + <FavoriteMenu t-if="props.searchMenuTypes.includes('favorite')" + class="o_favorite_menu" + /> + </t> + </div> + <div class="o_cp_pager" role="search" t-ref="pager"> + <Pager t-if="props.pager and props.pager.limit" t-props="props.pager"/> + </div> + <nav t-if="props.views.length gt 1" class="btn-group o_cp_switch_buttons" role="toolbar" aria-label="View switcher"> + <t t-foreach="props.views" t-as="view" t-key="view.type"> + <t t-call="web.ViewSwitcherButton"/> + </t> + </nav> + </div> + </div> + </div> +</t> + +<t t-name="web.ControlPanelX2Many" owl="1"> + <div class="o_x2m_control_panel"> + <div class="o_cp_buttons" role="toolbar" aria-label="Control panel buttons" t-ref="buttons"> + <t t-slot="buttons"/> + </div> + <div class="o_cp_pager" role="search" t-ref="pager"> + <Pager t-if="_shouldShowPager()" t-props="props.pager"/> + </div> + </div> +</t> + +<t t-name="web.CustomCheckbox" owl="1"> + <div class="custom-control custom-checkbox"> + <input + t-att-id="props.id or _id" + type="checkbox" + class="custom-control-input" + t-att-disabled="props.disabled" + t-att-checked="props.value" + /> + <label t-att-for="props.id or _id" class="custom-control-label"> + <t t-esc="props.text or '​'"/> + </label> + </div> +</t> + +<t t-name="web.CustomFileInput" owl="1"> + <span class="o_file_input" aria-atomic="true"> + <span class="o_file_input_trigger" t-on-click.prevent="_onTriggerClicked"> + <t t-slot="default"> + <button class="btn btn-primary">Choose File</button> + </t> + </span> + <input type="file" name="ufile" class="o_input_file d-none" + t-att="{multiple: props.multi_upload, accept: props.accepted_file_extensions}" + t-ref="file-input" + t-on-change="_onFileInputChange" + /> + </span> +</t> + +<t t-name="web.DatePicker" owl="1"> + <div class="o_datepicker" aria-atomic="true" t-att-id="datePickerId" data-target-input="nearest"> + <input type="text" class="o_datepicker_input o_input datetimepicker-input" autofocus="" + t-att-name="props.name" + t-att-placeholder="props.placeholder" + t-attf-data-target="#{{ datePickerId }}" + t-att-readonly="props.readonly" + t-ref="input" + t-on-change="_onInputChange" + t-on-click="_onInputClick" + /> + <span t-if="props.warn_future and state.warning" class="fa fa-exclamation-triangle o_tz_warning o_datepicker_warning"> + <t>This date is on the future. Make sure it is what you expected.</t> + </span> + <span class="o_datepicker_button"/> + </div> +</t> + +<t t-name="web.DialogButton.tooltip" owl="1"> + <div class="oe_tooltip_string" role="tooltip"> + <div class="tooltip-inner"> + <t>Hit ENTER to <t t-esc="title"/></t> + </div> + </div> +</t> + +<t t-name="web.DropdownMenu" owl="1"> + <div class="btn-group o_dropdown" t-att-class="{ show: state.open }"> + <button type="button" + class="o_dropdown_toggler_btn btn btn-secondary" + t-att-aria-expanded="state.open ? 'true' : 'false'" + tabindex="-1" + t-on-click="state.open = !state.open" + t-on-keydown="_onButtonKeydown" + > + <i t-if="icon" t-att-class="icon"/> + <span class="o_dropdown_title" t-esc="title"/> + <i t-if="displayCaret" t-attf-class="o_dropdown_caret fa fa-caret-{{ state.open ? 'down' : 'right' }}"/> + <i t-elif="displayChevron" t-attf-class="fa fa-chevron-{{ state.open ? 'down' : 'right' }} float-right mt4"/> + </button> + <ul t-if="state.open" class="o_dropdown_menu dropdown-menu show" role="menu" + t-on-item-selected="_onItemSelected" + > + <t t-set="currentGroup" t-value="null"/> + <t t-foreach="items" t-as="item" t-key="item.key || item.id || ('item-' + item_index)"> + <li t-if="currentGroup !== null and currentGroup !== item.groupNumber" class="dropdown-divider" role="separator"/> + <t t-if="item.Component" t-component="item.Component" t-props="item.props"/> + <DropdownMenuItem t-else="" t-props="item"/> + <t t-set="currentGroup" t-value="item.groupNumber"/> + </t> + </ul> + </div> +</t> + +<t t-name="web.FavoriteMenu" t-inherit="web.DropdownMenu" t-inherit-mode="primary" owl="1"> + <xpath expr="//DropdownMenuItem" position="attributes"> + <attribute name="t-on-remove-item.stop">_onItemRemoved</attribute> + </xpath> + <xpath expr="//div[1]" position="inside"> + <Dialog t-if="state.deletedFavorite" + title="'Warning'" + size="'medium'" + t-on-dialog-closed="state.deletedFavorite = false" + > + <t t-if="state.deletedFavorite.userId">Are you sure that you want to remove this filter?</t> + <t t-else="">This filter is global and will be removed for everybody if you continue.</t> + <t t-set="buttons"> + <button type="button" class="btn btn-primary" t-on-click="_onRemoveFavorite"> + <t>Ok</t> + </button> + <button type="button" class="btn btn-secondary" t-on-click.stop="state.deletedFavorite = false"> + <t>Cancel</t> + </button> + </t> + </Dialog> + </xpath> +</t> + +<t t-name="web.FilterMenu" t-inherit="web.DropdownMenu" t-inherit-mode="primary" owl="1"> + <xpath expr="//ul[@role='menu']" position="inside"> + <li t-if="items.length" class="dropdown-divider" role="separator"/> + <CustomFilterItem fields="props.fields"/> + </xpath> +</t> + +<t t-name="web.GroupByMenu" t-inherit="web.DropdownMenu" t-inherit-mode="primary" owl="1"> + <xpath expr="//ul[@role='menu']" position="inside"> + <t t-if="fields.length"> + <li t-if="items.length" class="dropdown-divider" role="separator"/> + <CustomGroupByItem fields="fields"/> + </t> + </xpath> +</t> + +<t t-name="web.DropdownMenuItem" owl="1"> + <li class="o_menu_item" role="menuitem" t-on-keydown="_onKeydown"> + <t t-if="canBeOpened"> + <a class="o_menu_item_parent dropdown-item" + t-att-class="{ selected: props.isActive }" + t-att-aria-checked="props.isActive ? 'true' : 'false'" + role="menuitemcheckbox" + href="#" + t-ref="fallback-focus" + t-on-click.prevent="state.open = !state.open" + > + <t t-esc="props.description"/> + <i t-attf-class="o_icon_right fa fa-caret-{{ state.open ? 'down' : 'right' }}"/> + </a> + <ul t-if="state.open" class="o_menu_item_options"> + <t t-set="currentGroup" t-value="null"/> + <t t-foreach="props.options" t-as="option" t-key="option_index"> + <li t-if="currentGroup !== null and currentGroup !== option.groupNumber" + class="dropdown-divider" + role="separator" + /> + <li class="o_item_option" role="menuitem"> + <a class="dropdown-item pl-5" + t-att-class="{ selected: option.isActive }" + t-att-aria-checked="option.isActive ? 'true' : 'false'" + role="menuitemcheckbox" + t-att-href="option.url or '#'" + t-esc="option.description" + t-on-click.prevent="trigger('item-selected', { item: props, option: option })" + /> + </li> + <t t-set="currentGroup" t-value="option.groupNumber"/> + </t> + </ul> + </t> + <a t-else="" class="dropdown-item" + t-att-class="{ selected: props.isActive, [props.className]: props.className }" + t-att-aria-checked="props.isActive ? 'true' : 'false'" + role="menuitemcheckbox" + t-att-href="props.url or '#'" + t-on-click.prevent="trigger('item-selected', { item: props })" + > + <t t-esc="props.description"/> + <i t-if="props.removable" + class="o_icon_right fa fa-trash-o" + title="Delete item" + t-on-click.stop.prevent="trigger('remove-item', { item: props })" + /> + </a> + </li> +</t> + +<t t-name="web.CustomFavoriteItem" owl="1"> + <li class="o_menu_item o_add_favorite" role="menuitem"> + <button type="button" + class="dropdown-item" + t-ref="fallback-focus" + t-on-click="state.open = !state.open" + > + <t>Save current search</t> + </button> + <div t-if="state.open" class="dropdown-item-text"> + <div role="menuitem" class="dropdown-item-text"> + <input type="text" + class="o_input" + autofocus="" + t-ref="description" + t-model.trim="state.description" + t-on-keydown="_onInputKeydown" + /> + </div> + <div class="custom-control custom-checkbox"> + <input type="checkbox" + t-att-id="useByDefaultId" + class="custom-control-input" + t-att-checked="state.isDefault" + t-on-change="_onCheckboxChange" + /> + <label class="custom-control-label" t-att-for="useByDefaultId"> + <t>Use by default</t> + </label> + </div> + <div class="custom-control custom-checkbox"> + <input type="checkbox" + t-att-id="shareAllUsersId" + class="custom-control-input" + t-att-checked="state.isShared" + t-on-change="_onCheckboxChange" + /> + <label class="custom-control-label" t-att-for="shareAllUsersId"> + <t>Share with all users</t> + <i class="fa fa-users" role="img" aria-label="Users" title="Users"/> + </label> + </div> + <div class="dropdown-item-text"> + <button type="button" class="o_save_favorite btn btn-primary" t-on-click="_saveFavorite">Save</button> + </div> + </div> + </li> +</t> + +<t t-name="web.CustomFilterItem" owl="1"> + <div class="o_generator_menu"> + <button type="button" + class="o_add_custom_filter dropdown-item" + aria-expanded="false" + t-ref="fallback-focus" + t-on-click="state.open = !state.open" + t-on-keydown="_onKeydown" + > + <t>Add Custom Filter</t> + </button> + <t t-if="state.open"> + <div t-foreach="state.conditions" t-as="condition" t-key="condition_index" + class=" o_filter_condition dropdown-item-text" + > + <t t-set="fieldType" t-value="fields[condition.field].type"/> + <t t-set="selectedOperator" t-value="OPERATORS[FIELD_TYPES[fieldType]][condition.operator]"/> + <span t-if="!condition_first" class="o_or_filter">or</span> + <select class="o_input o_generator_menu_field" + t-on-change="_onFieldSelect(condition)" + > + <option t-foreach="fields" t-as="field" t-key="field_index" + t-att-value="field.name" + t-att-selected="field_index === condition.field" + t-esc="field.string" + /> + </select> + <select class="o_input o_generator_menu_operator" + t-on-change="_onOperatorSelect(condition)" + > + <option t-foreach="OPERATORS[FIELD_TYPES[fieldType]]" t-as="operator" t-key="operator_index" + t-att-value="operator.symbol" + t-att-selected="operator_index === condition.operator" + t-esc="operator.description" + /> + </select> + <span t-if="!('value' in selectedOperator)" class="o_generator_menu_value"> + <t t-if="fieldType === 'date'"> + <DatePicker + date="condition.value[0]" + t-on-datetime-changed="_onDateChanged(condition, 0)" + /> + <DatePicker t-if="selectedOperator.symbol === 'between'" + date="condition.value[1]" + t-on-datetime-changed="_onDateChanged(condition, 1)" + /> + </t> + <t t-elif="fieldType === 'datetime'"> + <DateTimePicker + date="condition.value[0]" + t-on-datetime-changed="_onDateChanged(condition, 0)" + /> + <DateTimePicker t-if="selectedOperator.symbol === 'between'" + date="condition.value[1]" + t-on-datetime-changed="_onDateChanged(condition, 1)" + /> + </t> + <select t-elif="fieldType === 'selection'" class="o_input" + t-on-change="_onValueInput(condition)" + > + <option t-foreach="fields[condition.field].selection" t-as="option" t-key="option_index" + t-att-value="option[0]" + t-esc="option[1]" + /> + </select> + <input t-elif="fieldType === 'float'" + class="o_input" + step="0.01" + t-att-type="DECIMAL_POINT === '.' ? 'number' : 'text'" + t-attf-title="Number using {{ DECIMAL_POINT }} as decimal separator." + t-attf-pattern="[0-9]+([\\{{ DECIMAL_POINT }}][0-9]+)?" + t-att-value="condition.displayedValue" + t-on-input="_onValueInput(condition)" + /> + <input t-elif="['integer', 'id'].includes(fieldType)" + class="o_input" + step="1" + type="number" + t-att-value="condition.displayedValue" + t-on-input="_onValueInput(condition)" + /> + <input t-else="" + type="text" + class="o_input" + t-att-value="condition.displayedValue" + t-on-input="_onValueInput(condition)" + /> + </span> + <i t-if="state.conditions.length gt 1" + class="fa fa-trash-o o_generator_menu_delete" + role="image" + aria-label="Delete" + title="Delete" + t-on-click="_onRemoveCondition(condition_index)" + /> + </div> + <div class="o_add_filter_menu dropdown-item-text"> + <button type="button" class="btn btn-primary o_apply_filter" t-on-click="_onApply"> + <t>Apply</t> + </button> + <button type="button" + class="btn btn-secondary o_add_condition" + t-on-click="_addDefaultCondition" + > + <i class="fa fa-plus-circle"/> + <t>Add a condition</t> + </button> + </div> + </t> + </div> +</t> + +<t t-name="web.CustomGroupByItem" owl="1"> + <div class="o_generator_menu"> + <button type="button" + class="o_add_custom_group_by dropdown-item" + aria-expanded="false" + t-ref="fallback-focus" + t-on-click="state.open = !state.open" + t-on-keydown="_onKeydown" + > + <t>Add Custom Group</t> + </button> + <div t-if="state.open" class="dropdown-item-text"> + <select class="w-auto o_input o_group_by_selector" t-model="state.fieldName"> + <option t-foreach="props.fields" t-as="field" t-key="field.name" + t-att-value="field.name" + t-esc="field.string" + /> + </select> + </div> + <div t-if="state.open" class="o_add_group_by_menu dropdown-item-text"> + <button type="button" class="btn btn-primary o_apply_group_by" t-on-click="_onApply"> + <t>Apply</t> + </button> + </div> + </div> +</t> + +<t t-name="web.OwlDialog" owl="1"> + <Portal target="'body'"> + <div class="o_dialog" t-on-focus="_onFocus" t-on-click="_onClick"> + <div role="dialog" class="modal" + tabindex="-1" + t-att-class="{ o_technical_modal: props.technical, o_modal_full: props.fullscreen }" + t-att-data-backdrop="'' + props.backdrop" + t-ref="modal" + t-on-close_dialog.stop="_close" + t-on-click="_onBackdropClick" + > + <div class="modal-dialog" t-att-class="size"> + <div class="modal-content" t-att-class="props.contentClass"> + <header t-if="props.renderHeader" class="modal-header"> + <h4 class="modal-title"> + <t t-esc="props.title"/> + <span t-if="props.subtitle" class="o_subtitle text-muted small" t-esc="props.subtitle"/> + </h4> + <button type="button" class="close" aria-label="Close" tabindex="-1" t-on-click="_close">×</button> + </header> + <main class="modal-body"> + <t t-slot="default"/> + </main> + <footer t-if="props.renderFooter" class="modal-footer" t-ref="modal-footer"> + <t t-slot="buttons"> + <button class="btn btn-primary" t-on-click.prevent="_close"> + <t>Ok</t> + </button> + </t> + </footer> + </div> + </div> + </div> + </div> + </Portal> +</t> + +<t t-name="Popover" owl="1"> + <div t-att-class="{ 'o_is_open': state.displayed }" t-on-click="_onClick" t-on-o-popover-compute="_onPopoverCompute" t-on-o-popover-close="_onPopoverClose"> + <t t-slot="default"/> + <Portal t-if="state.displayed" target="'body'"> + <div role="tooltip" class="o_popover" t-ref="popover"> + <div class="arrow"/> + <h3 t-if="props.title" class="o_popover_header"><t t-esc="props.title"/></h3> + <div class="popover-body"> + <t t-slot="opened"/> + </div> + </div> + </Portal> + </div> +</t> + +<t t-name="web.Pager" owl="1"> + <nav class="o_pager" aria-label="Pager"> + <span class="o_pager_counter" t-on-click.stop=""> + <input t-if="state.editing" type="text" + class="o_pager_value o_input" + autofocus="" + t-att-value="value" + t-on-blur="state.editing = false" + t-on-change="_onValueChange" + t-on-keydown.stop="_onValueKeydown" + /> + <span t-else="" + class="o_pager_value" + t-esc="value" + t-on-click="_onEdit" + /> + <span> / </span> + <span class="o_pager_limit" t-esc="props.size"/> + </span> + <span class="btn-group" aria-atomic="true"> + <!-- accesskeys not wanted in X2Many widgets --> + <button type="button" + class="fa fa-chevron-left btn btn-secondary o_pager_previous" + t-att-disabled="state.disabled || singlePage" + t-att-accesskey="props.withAccessKey ? 'p' : false" + aria-label="Previous" + title="Previous" + tabindex="-1" + t-on-click="_changeSelection(-1)" + /> + <button type="button" + class="fa fa-chevron-right btn btn-secondary o_pager_next" + t-att-disabled="state.disabled || singlePage" + t-att-accesskey="props.withAccessKey ? 'n' : false" + aria-label="Next" + title="Next" + tabindex="-1" + t-on-click="_changeSelection(1)" + /> + </span> + </nav> +</t> + +<t t-name="web.SearchBar" owl="1"> + <div class="o_searchview_input_container"> + <div t-foreach="model.get('facets')" t-as="facet" t-key="facet_index" + tabindex="0" + class="o_searchview_facet" + role="img" + aria-label="search" + t-on-keydown="_onFacetKeydown(facet, facet_index)" + > + <span t-if="facet.icon" t-attf-class="o_searchview_facet_label {{ facet.icon }}"/> + <span t-else="" class="o_searchview_facet_label" t-esc="facet.title"/> + <div class="o_facet_values"> + <t t-foreach="facet.values" t-as="facetValue" t-key="facetValue_index"> + <span t-if="!facetValue_first" class="o_facet_values_sep" t-esc="facet.separator"/> + <span class="o_facet_value" t-esc="facetValue"/> + </t> + </div> + <i class="fa fa-sm fa-remove o_facet_remove" + role="img" + aria-label="Remove" + title="Remove" + t-on-click="_onFacetRemove(facet)" + /> + </div> + <input type="text" + class="o_searchview_input" + autofocus="" + accesskey="Q" + placeholder="Search..." + role="searchbox" + t-ref="search-input" + t-on-keydown="_onSearchKeydown" + t-on-input="_onSearchInput" + /> + <ul t-if="state.sources.length" class="o_dropdown_menu o_searchview_autocomplete dropdown-menu show" role="menu"> + <li t-foreach="state.sources" t-as="src" t-key="src.id" + t-att-id="src.id" + class="o_menu_item" + t-att-class="{ o_indent: src.parent, o_selection_focus: src_index === state.focusedItem }" + t-on-click="_selectSource(src)" + t-on-mousemove="_onSourceMousemove(src_index)" + > + <a t-if="src.expand" + href="#" + class="o_expand" + t-on-click.stop.prevent="_expandSource(src, !src.expanded)" + > + <i t-attf-class="fa fa-caret-{{ src.expanded ? 'down' : 'right' }}"/> + </a> + <a href="#" t-on-click.prevent=""> + <t t-if="src.label" t-esc="src.label"/> + <t t-elif="['date', 'datetime'].includes(src.type)"> + <t>Search <em t-esc="src.description"/> at: <strong t-esc="state.inputValue"/></t> + </t> + <t t-else="">Search <em t-esc="src.description"/> for: <strong t-esc="state.inputValue"/></t> + </a> + </li> + </ul> + </div> +</t> + +<t t-name="web.ActionMenus" owl="1"> + <div class="o_cp_action_menus" t-on-item-selected.stop="_onItemSelected"> + <DropdownMenu t-if="printItems.length" + title="env._t('Print')" + items="printItems" + icon="'fa fa-print'" + /> + <DropdownMenu t-if="actionItems.length" + title="env._t('Action')" + items="actionItems" + icon="'fa fa-cog'" + closeOnSelected="true" + /> + </div> +</t> + +<t t-name="web.ViewSwitcherButton" owl="1"> + <t t-set="buttonLabel">View %s</t> + <button type="button" + t-att-accesskey="view.accessKey" + t-attf-class="btn btn-secondary fa fa-lg o_switch_view o_{{ view.type }} {{ view.icon }}" + t-att-class="{ active: env.view.type === view.type }" + t-att-aria-label="sprintf(buttonLabel.toString(), view.type)" + t-att-title="sprintf(buttonLabel.toString(), view.type)" + data-toggle="tooltip" + tabindex="-1" + t-on-click="trigger('switch-view', { view_type: view.type })" + /> +</t> + +<!-- Legacy Templates --> + +<div t-name="EmptyComponent"/> + +<div t-name="Loading" class="o_loading"/> + +<t t-name="WidgetLabel.tooltip"> + <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="help" class="oe_tooltip_help" role="tooltip"> + <t t-esc="help"/> + </p> + <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"/> + </li> + <li data-item="object"> + <span class="oe_tooltip_technical_title">Object:</span> + <t t-esc="widget.model"/> + </li> + <li data-item="type"> + <span class="oe_tooltip_technical_title">Type:</span> + <t t-esc="widget.field.type"/> + </li> + <li t-if="widget.attrs.widget" data-item="widget"> + <span class="oe_tooltip_technical_title">Widget:</span> + <t t-set="description" t-value="widget.attrs.Widget.prototype.description"/> + <t t-if="description"> + <t t-esc="description"/> (<t t-esc="widget.attrs.widget"/>) + </t> + <t t-else="1"> + <t t-esc="widget.attrs.widget"/> + </t> + </li> + <li t-if="widget.attrs.size || widget.field.size" data-item="size"> + <span class="oe_tooltip_technical_title">Size:</span> + <t t-esc="widget.attrs.size || widget.field.size"/> + </li> + <li t-if="widget.attrs.context || widget.field.context" data-item="context"> + <span class="oe_tooltip_technical_title">Context:</span> + <t t-esc="widget.attrs.context || JSON.stringify(widget.field.context)"/> + </li> + <li t-if="widget.attrs.domain || widget.field.domain" data-item="domain"> + <span class="oe_tooltip_technical_title">Domain:</span> + <t t-esc="widget.attrs.domain || JSON.stringify(widget.field.domain)"/> + </li> + <li t-if="widget.attrs.modifiers and !_.isEmpty(widget.attrs.modifiers)" data-item="modifiers"> + <span class="oe_tooltip_technical_title">Modifiers:</span> + <t t-esc="JSON.stringify(widget.attrs.modifiers)"/> + </li> + <li t-if="widget.field and widget.field.change_default" data-item="change_default"> + <span class="oe_tooltip_technical_title">Change default:</span> + Yes + </li> + <li t-if="widget.attrs.on_change" data-item="on_change"> + <span class="oe_tooltip_technical_title">On change:</span> + <t t-esc="widget.attrs.on_change"/> + </li> + <li t-if="widget.field and widget.field.relation" data-item="relation"> + <span class="oe_tooltip_technical_title">Relation:</span> + <t t-esc="widget.field.relation"/> + </li> + <li t-if="widget.field and widget.field.selection" data-item="selection"> + <span class="oe_tooltip_technical_title">Selection:</span> + <ul class="oe_tooltip_technical"> + <li t-foreach="widget.field.selection" t-as="option"> + [<t t-esc="option[0]"/>] + <t t-if="option[1]"> - </t> + <t t-esc="option[1]"/> + </li> + </ul> + </li> + </ul> +</t> +<t t-name="WidgetButton.tooltip"> + <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> + <t t-if="!node.attrs.string"> (no string)</t> + </t> + <t t-esc="node.attrs.string"/> + </div> + <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" role="tooltip"> + <li data-item="object"> + <span class="oe_tooltip_technical_title">Object:</span> + <t t-esc="state.model"/> + </li> + <li t-if="node.attrs.context" data-item="context"> + <span class="oe_tooltip_technical_title">Context:</span> + <t t-esc="node.attrs.context || widget.field.context"/> + </li> + <li t-if="node.attrs.modifiers and !_.isEmpty(node.attrs.modifiers)" data-item="modifiers"> + <span class="oe_tooltip_technical_title">Modifiers:</span> + <t t-esc="JSON.stringify(node.attrs.modifiers)"/> + </li> + <li t-if="node.attrs.special" data-item="special"> + <span class="oe_tooltip_technical_title">Special:</span> + <t t-esc="node.attrs.special"/> + </li> + <t t-set="button_type" t-value="node.attrs.type"/> + <li t-if="button_type" data-item="button_type"> + <span class="oe_tooltip_technical_title">Button Type:</span> + <t t-esc="button_type"/> + </li> + <li t-if="button_type === 'object'" data-item="button_method"> + <span class="oe_tooltip_technical_title">Method:</span> + <t t-esc="node.attrs.name"/> + </li> + <li t-if="button_type === 'action'" data-item="button_action"> + <span class="oe_tooltip_technical_title">Action ID:</span> + <t t-esc="node.attrs.name"/> + </li> + </ul> +</t> + +<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> + <td class="o_td_label"><label for="old_pwd" class="o_form_label">Old Password</label></td> + <td width="100%"><input type="password" class="o_field_widget o_input" name="old_pwd" minlength="1" autofocus="autofocus" autocomplete="current-password"/></td> + </tr> + <tr> + <td class="o_td_label"><label for="new_password" class="o_form_label">New Password</label></td> + <td width="100%"><input type="password" class="o_field_widget o_input" name="new_password" minlength="1" autocomplete="new-password"/></td> + </tr> + <tr> + <td class="o_td_label"><label for="confirm_pwd" class="o_form_label">Confirm New Password</label></td> + <td width="100%"><input type="password" class="o_field_widget o_input" name="confirm_pwd" minlength="1" autocomplete="new-password"/></td> + </tr> + </table> + </div> + <button type="button" class="btn btn-primary oe_form_button">Change Password</button> + <button type="button" class="btn btn-secondary oe_form_button oe_form_button_cancel" href="javascript:void(0)">Cancel</button> +</form> + +<div t-name="Action" class="o_action"> + <div class="o_content"/> +</div> + +<div t-name="web.NoContentHelper" class="o_view_nocontent" role="alert" owl="1"> + <div class="o_nocontent_help"> + <p class="o_view_nocontent_empty_folder"> + <t t-if="title" t-esc="title"/> + <t t-else="1">No data to display</t> + </p> + <p> + <t t-if="description" t-esc="description"/> + <t t-else="1">Try to add some records, or make sure that there is no + active filter in the search bar.</t> + </p> + </div> +</div> + +<div t-name="web.ActionHelper" class="o_view_nocontent" owl="1"> + <div class="o_nocontent_help"> + <t t-raw="noContentHelp"/> + </div> +</div> + +<t t-name="ListView.buttons"> + <div class="o_list_buttons" role="toolbar" aria-label="Main actions"> + <button type="button" class="btn btn-primary o_list_button_save" accesskey="s"> + Save + </button> + <button type="button" class="btn btn-secondary o_list_button_discard" accesskey="j"> + Discard + </button> + <t t-if="widget.is_action_enabled('create')"> + <button type="button" class="btn btn-primary o_list_button_add" accesskey="c"> + Create + </button> + </t> + <t t-if="widget.is_action_enabled('export_xlsx') and widget.isExportEnable"> + <button type="button" class="btn btn-secondary fa fa-download o_list_export_xlsx" title="Export All" aria-label="Export All"/> + </t> + </div> +</t> + +<t t-name="ListView.selection"> + <div class="o_list_selection_box"> + <t t-if="isDomainSelected">All <t t-esc="nbTotal"/> selected</t> + <t t-else=""> + <t t-esc="nbSelected"/> selected + <a t-if="isPageSelected and nbTotal > nbSelected" href="#" class="o_list_select_domain"> + <i class="fa fa-arrow-right"/> Select all <t t-esc="nbTotal"/> + </a> + </t> + </div> +</t> + +<t t-name="ListView.confirmModal"> + <main role="alert"> + <p> + <t t-if="changes.isDomainSelected">This update will only consider the records of the current page.<br/><br/></t> + <t t-if="changes.nbRecords != changes.nbValidRecords"> + Among the <t t-esc="changes.nbRecords"/> selected records, + <t t-esc="changes.nbValidRecords"/> are valid for this update.<br/> + </t> + Are you sure you want to perform the following update on those <t t-esc="changes.nbValidRecords"/> records ? + </p> + <div class="table-responsive"> + <table class="o_modal_changes"> + <tbody> + <tr> + <td>Field:</td> + <td><t t-esc="changes.fieldLabel"/></td> + </tr> + <tr> + <td>Update to:</td> + <td> + <div class="o_changes_widget"/> + </td> + </tr> + </tbody> + </table> + </div> + </main> +</t> + +<t t-name="FormView.buttons"> + <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 o_form_button_edit" accesskey="a"> + Edit + </button> + <button t-if="widget.is_action_enabled('create')" type="button" + class="btn btn-secondary o_form_button_create" accesskey="c"> + Create + </button> + </div> + <div class="o_form_buttons_edit" role="toolbar" aria-label="Main actions"> + <button type="button" + class="btn btn-primary o_form_button_save" accesskey="s"> + Save + </button> + <button type="button" + class="btn btn-secondary o_form_button_cancel" accesskey="j"> + Discard + </button> + </div> +</t> +<t t-name="SaveCancelButton.tooltip"> + <div class="oe_tooltip_string" role="alert"> + <div class="tooltip-inner"> + Hit ENTER to SAVE<br/> + Hit ESCAPE to DISCARD + </div> + </div> +</t> +<t t-name="CreateButton.tooltip"> + <div class="oe_tooltip_string" role="tooltip"> + <div class="tooltip-inner"> + Hit ENTER to CREATE<br/> + Hit DOWN to navigate to the list below + </div> + </div> +</t> +<t t-name="FormButton.tooltip"> + <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" aria-atomic="true"> + <t t-set="args" t-value="widget.args"/> + <table style="width: 100%"> + <tr> + <td> + <label for="formview_default_fields" + class="oe_label oe_align_right"> + Default: + </label> + </td> + <td class="oe_form_required"> + <select id="formview_default_fields" class="o_input"> + <option value=""/> + <option t-foreach="args.fields" t-as="field" + t-att-value="field.name"> + <t t-esc="field.string"/> = <t t-esc="field.displayed"/> + </option> + </select> + </td> + </tr> + <tr t-if="args.conditions.length"> + <td> + <label for="formview_default_conditions" + class="oe_label oe_align_right"> + Condition: + </label> + </td> + <td> + <select id="formview_default_conditions" class="o_input"> + <option value=""/> + <option t-foreach="args.conditions" t-as="cond" + t-att-value="cond.name + '=' + cond.value"> + <t t-esc="cond.string"/>=<t t-esc="cond.displayed"/> + </option> + </select> + </td> + </tr> + <tr> + <td colspan="2"> + <input type="radio" id="formview_default_self" + value="self" name="scope" checked="checked"/> + <label for="formview_default_self" class="oe_label" + style="display: inline;"> + Only you + </label> + <br/> + <input type="radio" id="formview_default_all" + value="all" name="scope"/> + <label for="formview_default_all" class="oe_label" + style="display: inline;"> + All users + </label> + </td> + </tr> + </table> +</form> +<t t-name="GraphView.buttons"> + <div class="btn-group" role="toolbar" aria-label="Main actions"/> + <div class="btn-group" role="toolbar" aria-label="Change graph"> + <button class="btn btn-secondary fa fa-bar-chart-o o_graph_button" title="Bar Chart" aria-label="Bar Chart" data-mode="bar"/> + <button class="btn btn-secondary fa fa-area-chart o_graph_button" title="Line Chart" aria-label="Line Chart" data-mode="line"/> + <button class="btn btn-secondary fa fa-pie-chart o_graph_button" title="Pie Chart" aria-label="Pie Chart" data-mode="pie"/> + </div> + <div class="btn-group" role="toolbar" aria-label="Change graph"> + <button class="btn btn-secondary fa fa-database o_graph_button" title="Stacked" aria-label="Stacked" data-mode="stack"/> + </div> + <div class="btn-group" role="toolbar" aria-label="Sort graph"> + <button class="btn btn-secondary fa fa-sort-amount-desc o_graph_button" title="Descending" aria-label="Descending" data-order="desc"/> + <button class="btn btn-secondary fa fa-sort-amount-asc o_graph_button" title="Ascending" aria-label="Ascending" data-order="asc"/> + </div> +</t> + +<div t-name="GraphView.CustomTooltip" class="o_graph_custom_tooltip"> + <table> + <thead> + <tr> + <th class="o_measure"><t t-esc="measure"/></th> + </tr> + </thead> + <tbody> + <tr t-foreach="tooltipItems" t-as="tooltipItem"> + <td> + <span class="o_square" t-att-style="'background-color: ' + tooltipItem.boxColor"/> + <span class="o_label" t-att-style="'max-width: ' + maxWidth"> <t t-esc="tooltipItem.label" /> </span> + </td> + <td class="o_value"> + <t t-esc="tooltipItem.value"/> + </td> + </tr> + </tbody> + </table> +</div> + +<t t-name="PivotView.buttons"> + <div class="btn-group" role="toolbar" aria-label="Main actions"> + <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> + Measures + </button> + <div class="dropdown-menu o_pivot_measures_list" role="menu"> + <t t-foreach="measures" t-as="measure"> + <a role="menuitem" href="#" class="dropdown-item" t-att-data-field="measure[0]"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a> + </t> + <div role="separator" class="dropdown-divider"/> + <a role="menuitem" href="#" class="dropdown-item" data-field="__count">Count</a> + </div> + </div> + <div class="btn-group" role="toolbar" aria-label="Pivot settings"> + <button class="btn btn-secondary fa fa-exchange o_pivot_flip_button" title="Flip axis" aria-label="Flip axis"/> + <button class="btn btn-secondary fa fa-arrows o_pivot_expand_button" title="Expand all" aria-label="Expand all"/> + <button class="btn btn-secondary fa fa-download o_pivot_download" title="Download xlsx" aria-label="Download xlsx"/> + </div> +</t> + +<t t-name="FormSelection"> + <div class="btn-group o_selection" aria-atomic="true"> + <a href="#" data-toggle="dropdown" aria-expanded="false" role="button" title="Dropdown menu"><span class="o_status"/></a> + <div class="dropdown-menu state" role="menu"/> + </div> +</t> +<t t-name="FormSelection.items"> + <t t-foreach="states" t-as="rec"> + <a role="menuitem" href="#" class="dropdown-item" t-att-data-value="rec.name"> + <span t-att-class="'o_status ' + (rec.state_class && rec.state_class || '')"/> + <t t-raw="rec.state_name"/> + </a> + </t> +</t> +<t t-name="FieldDomain.content"> + <div t-if="hasModel" class="o_field_domain_panel"> + <i class="fa fa-arrow-right" role="img" aria-label="Domain" title="Domain"/> + + <button t-if="isValid" class="btn btn-sm btn-secondary o_domain_show_selection_button" type="button"> + <t t-esc="nbRecords"/> record(s) + </button> + <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-sm 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" 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" aria-atomic="true"> + <button class="btn btn-sm 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> + <div class="dropdown-menu" role="menu"> + <a role="menuitem" href="#" class="dropdown-item" data-operator="&">All</a> + <a role="menuitem" href="#" class="dropdown-item" data-operator="|">Any</a> + </div> + </div> + <strong t-else=""> + <t t-if="widget.operator === '&'">ALL</t> + <t t-if="widget.operator === '|'">ANY</t> + <t t-if="widget.operator === '!'">NONE</t> + </strong> +</t> +<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-sm btn-primary o_domain_add_first_node_button"><i class="fa fa-plus"/> Add filter</button> + </t> + <t t-else=""> + <div class="o_domain_tree_header"> + <t t-if="widget.children.length === 1">Match records with the following rule:</t> + <t t-else=""> + <span>Match records with</span> + <t t-call="DomainTree.OperatorSelector"/> + <span>of the following rules:</span> + </t> + </div> + + <div class="o_domain_node_children_container"/> + </t> + <label t-if="widget.debug && !widget.readonly" class="o_domain_debug_container"> + <span class="small"># Code editor</span> + <input type="text" class="o_domain_debug_input"/> + </label> +</div> +<div t-name="DomainTree" class="o_domain_node o_domain_tree"> + <div class="o_domain_tree_header o_domain_selector_row"> + <t t-call="DomainNode.ControlPanel"/> + <t t-call="DomainTree.OperatorSelector"/> + <span class="ml4">of:</span> + </div> + + <div class="o_domain_node_children_container"/> +</div> +<div t-name="DomainLeaf" t-attf-class="o_domain_node o_domain_leaf o_domain_selector_row #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}"> + <t t-call="DomainNode.ControlPanel"/> + + <div t-if="!widget.readonly" class="o_domain_leaf_edition"> + <!-- field selector will be instantiated here --> + <div> <!-- used for flex stretching --> + <select class="o_domain_leaf_operator_select o_input"> + <option t-foreach="widget.operators" t-as="key" + t-att-value="key" + t-att-selected="widget.displayOperator === key ? 'selected' : None"> + <t t-esc="key_value"/> + </option> + </select> + </div> + <div t-attf-class="o_ds_value_cell#{_.contains(['set', 'not set'], widget.displayOperator) ? ' d-none' : ''}"> + <t t-if="widget.selectionChoices !== null"> + <select class="o_domain_leaf_value_input o_input"> + <option t-foreach="widget.selectionChoices" t-as="val" + t-att-value="val[0]" + t-att-selected="_.contains(val, widget.displayValue) ? 'selected' : None"> + <t t-esc="val[1]"/> + </option> + </select> + </t> + <t t-else=""> + <t t-if="_.contains(['in', 'not in'], widget.operator)"> + <div class="o_domain_leaf_value_input"> + <span class="badge badge-pill" 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" 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-sm btn-primary fa fa-plus o_domain_leaf_value_add_tag_button" aria-label="Add tag" title="Add tag"/> + </div> + </t> + <t t-else=""> + <input class="o_domain_leaf_value_input o_input" type="text" t-att-value="widget.displayValue"/> + </t> + </t> + </div> + </div> + <div t-else="" class="o_domain_leaf_info"> + <!-- field selector will be instantiated here --> + <t t-if="_.isString(widget.value)"> + <span class="o_domain_leaf_operator"><t t-esc="widget.operator_mapping[widget.operator]"/></span> + <span class="o_domain_leaf_value text-primary">"<t t-esc="widget.value"/>"</span> + </t> + <t t-if="_.isArray(widget.value)"> + <span class="o_domain_leaf_operator"><t t-esc="widget.operator_mapping[widget.operator]"/></span> + <t t-foreach="widget.value" t-as="v"> + <span class="o_domain_leaf_value text-primary">"<t t-esc="v"/>"</span> + <t t-if="!v_last"> or </t> + </t> + </t> + <t t-if="_.isNumber(widget.value)"> + <span class="o_domain_leaf_operator"><t t-esc="widget.operator_mapping[widget.operator]"/></span> + <span class="o_domain_leaf_value text-primary"><t t-esc="widget.value"></t></span> + </t> + <t t-if="_.isBoolean(widget.value)"> + is + <t t-if="widget.operator === '=' && widget.value === false || widget.operator === '!=' && widget.value === true">not</t> + set + </t> + </div> +</div> +<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 role="alert" class="fa fa-exclamation-triangle o_field_selector_warning d-none" title="Invalid field chain" aria-label="Invalid field chain"/> + </div> + <div t-if="!widget.options.readonly" class="o_field_selector_popover d-none" 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" 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" title="Close" role="img" aria-label="Close"/> + <div t-if="widget.options.showSearchInput" class="o_field_selector_search mt-2"> + <input type="text" placeholder='Search...' class="o_input"/> + </div> + </div> + <div class="o_field_selector_popover_body"> + <ul class="o_field_selector_page"/> + </div> + <div t-if="widget.options.debugMode" class="o_field_selector_popover_footer"> + <input type="text" class="o_input o_field_selector_debug"/> + </div> + </div> +</div> +<t t-name="ModelFieldSelector.value"> + <t t-foreach="chain" t-as="fieldName"> + <t t-if="fieldName_index > 0"> + <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-if="fieldName === '1'"> + <t t-esc="fieldName"/> + </t> + <t t-elif="fieldName === '0'"> + <t t-esc="fieldName"/> + </t> + <t t-else=""> + <t t-set="fieldInfo" t-value="_.findWhere(pages[fieldName_index], {'name': fieldName})"/> + <t t-esc="fieldInfo && fieldInfo.string || '?'"/> + </t> + </span> + </t> +</t> +<ul t-name="ModelFieldSelector.page" class="o_field_selector_page"> + <t t-foreach="lines" t-as="line"> + <t t-set="relationToFollow" t-value="followRelations(line) && line.relation"/> + <li t-attf-class="o_field_selector_item #{relationToFollow and 'o_field_selector_next_page' or 'o_field_selector_select_button'}#{line_index == 0 and ' active' or ''}" + 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" 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"/> + <t t-set="datepickerID" t-value="_.uniqueId('datepicker')"/> + <div class="o_datepicker" aria-atomic="true" t-att-id="datepickerID" data-target-input="nearest"> + <input type="text" + class="o_datepicker_input o_input datetimepicker-input" + t-att-name="widget.name" + t-att-placeholder="placeholder" + t-attf-data-target="##{datepickerID}" + autocomplete="off"/> + <span class="o_datepicker_button"/> + </div> +</t> +<t t-name="FieldSelection"> + <span t-if="widget.mode === 'readonly'"/> + + <select t-if="widget.mode !== 'readonly'" + class="o_input" + t-att-name="widget.name" + t-att-tabindex="widget.attrs.tabindex" + t-att-autofocus="widget.attrs.autofocus" + t-att-id="widget.idForLabel"/> +</t> +<t t-name="FieldRadio.button"> + <div class="custom-control custom-radio o_radio_item" aria-atomic="true"> + <input type="radio" class="custom-control-input o_radio_input" t-att-checked="checked ? true : undefined" + t-att-name="name" t-att-data-value="value[0]" t-att-data-index="index" t-att-id="id"/> + <label class="custom-control-label o_form_label" t-att-for="id"><t t-esc="value[1]"/></label> + </div> +</t> + +<t t-name="FieldSelectionBadge"> + <span t-foreach="values" t-as="value" t-attf-class="o_selection_badge #{value[0] == current_value ? 'active' : ''}" t-att-data-index="value_index"> + <t t-esc="value[1]"/> + </span> +</t> + +<t t-name="FieldMany2One"> + <t t-if="widget.mode === 'readonly'"> + <a t-if="!widget.noOpen" t-att-tabindex="widget.attrs.tabindex" class="o_form_uri" href="#"/> + <span t-if="widget.noOpen"/> + </t> + <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" + t-att-tabindex="widget.attrs.tabindex" + t-att-autofocus="widget.attrs.autofocus" + t-att-placeholder="widget.attrs.placeholder" + t-att-id="widget.idForLabel"/> + <a role="button" class="o_dropdown_button" draggable="false"/> + </div> + <button type="button" t-if="!widget.noOpen" class="fa fa-external-link btn btn-secondary o_external_button" tabindex="-1" draggable="false" aria-label="External link" title="External link"/> + </div> +</t> + +<t t-name="web.Many2OneAvatar"> + <img t-att-src="url" t-att-alt="value" class="o_m2o_avatar"/> + <span t-esc="value"/> +</t> + +<t t-name="FieldReference" t-extend="FieldMany2One"> + <t t-jquery=".o_input_dropdown" t-operation="before"> + <select t-att-class="'o_input o_field_widget' + (widget.nodeOptions.hide_model and ' d-none' or '')"> + <option/> + <option t-foreach="widget.field.selection" t-as="model" t-att-value="model[0]"><t t-esc="model[1]"/></option> + </select> + </t> +</t> +<t t-name="FieldMany2ManyTag"> + <t t-foreach="elements" t-as="el"> + <t t-set="color" t-value="el[colorField] || 0"/> + <t t-set="colornames" t-value="['No color', 'Red', 'Orange', 'Yellow', 'Light blue', 'Dark purple', 'Salmon pink', 'Medium blue', 'Dark blue', 'Fushia', 'Green', 'Purple']"/> + <div t-attf-class="badge badge-pill #{hasDropdown ? '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]}"> + <t t-set="_badge_text"> + <span class="o_badge_text" t-att-title="el.display_name"><span role="img" t-attf-aria-label="Tag color: #{colornames[color]}"/><t t-esc="el.display_name"/></span> + </t> + <t t-if="hasDropdown"> + <a role="button" href="#" class="dropdown-toggle o-no-caret" data-toggle="dropdown" aria-expanded="false"> + <t t-raw="_badge_text"/> + </a> + </t> + <t t-else=""> + <t t-raw="_badge_text"/> + </t> + <a t-if="!readonly" href="#" class="fa fa-times o_delete" title="Delete" aria-label="Delete"/> + </div> + </t> +</t> +<t t-name="FieldMany2ManyTagAvatar" t-extend="FieldMany2ManyTag"> + <t t-jquery="span:first" t-operation="prepend"> + <img t-attf-src="/web/image/#{avatarModel}/#{el.id}/#{avatarField}" class="rounded-circle"/> + </t> +</t> +<t t-name="FieldMany2ManyTag.colorpicker"> + <div class="o_colorpicker dropdown-menu tagcolor_dropdown_menu" role="menu"> + <ul> + <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 role="menuitem" class="o_hide_in_kanban" + t-att-data-id="tag_id" + t-att-data-color="0"> + <div class="custom-control custom-checkbox"> + <input type="checkbox" id="o_hide_in_kanban_checkbox" class="custom-control-input"/> + <label for="o_hide_in_kanban_checkbox" class="custom-control-label">Hide in Kanban</label> + </div> + </div> + </li> + </ul> + </div> +</t> +<t t-name="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"/> + </div> +</t> +<t t-name="FieldPercentPie"> + <div class="o_field_percent_pie"> + <div class="o_pie"> + <div class="o_mask"/> + <div class="o_mask"/> + <div class="o_pie_value"/> + </div> + <span t-if="widget.string"><t t-esc="widget.string"/></span> + </div> +</t> +<t t-name="FieldStatus.content"> + <t t-if="selection_folded.length"> + <button type="button" class="btn o_arrow_button btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">More</button> + <div class="dropdown-menu" role="menu"> + <t t-foreach="selection_folded" t-as="i"> + <t t-call="FieldStatus.content.button"> + <t t-set="is_dropdown" t-value="true"/> + </t> + </t> + </div> + </t> + <t t-foreach="selection_unfolded.reverse()" t-as="i"> + <t t-call="FieldStatus.content.button"/> + </t> +</t> +<t t-name="FieldStatus.content.button"> + <t t-set="disabled" t-value="!clickable"/> + <button type="button" t-att-data-value="i.id" disabled="disabled" title="Current state" aria-checked="true" + t-att-role="is_dropdown ? 'menuitemradio': 'radio'" + t-attf-class="btn o_arrow_button btn-primary disabled #{is_dropdown ? 'dropdown-item bg-primary text-white': ''}" 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-checked="false" + t-att-role="is_dropdown ? 'menuitemradio': 'radio'" + t-attf-class="btn o_arrow_button btn-secondary disabled #{is_dropdown ? 'dropdown-item': ''}" 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-checked="false" + t-att-role="is_dropdown ? 'menuitemradio': 'radio'" + t-attf-class="btn o_arrow_button btn-secondary #{is_dropdown ? 'dropdown-item': ''}" 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" aria-atomic="true"> + <t t-if="widget.mode !== 'readonly'"> + <div class="o_form_image_controls"> + <button class="fa fa-pencil fa-lg float-left o_select_file_button" title="Edit" aria-label="Edit"/> + <button class="fa fa-trash-o fa-lg float-right o_clear_file_button" title="Clear" aria-label="Clear"/> + + <span class="o_form_binary_progress">Uploading...</span> + <t t-call="HiddenInputFile"> + <t t-set="fileupload_id" t-value="widget.fileupload_id"/> + </t> + </div> + </t> + </div> +</t> +<t t-name="FieldBinaryImage-img"> + <img class="img img-fluid" + alt="Binary file" + t-att-src='url' + t-att-border="widget.readonly ? 0 : 1" + t-att-name="widget.name"/> +</t> +<t t-name="CopyClipboardText"> + <button class="btn btn-sm btn-primary o_clipboard_button o_btn_text_copy"> + <span class="fa fa-clipboard"></span><span> Copy Text</span> + </button> +</t> +<t t-name="CopyClipboardChar"> + <button class="btn btn-sm btn-primary o_clipboard_button o_btn_char_copy"> + <span class="fa fa-clipboard"></span><span> Copy Text</span> + </button> +</t> +<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" aria-atomic="true"> + <input type="text" class="o_input" + readonly="readonly" + t-att-name="widget.name" + t-att-tabindex="widget.attrs.tabindex" + t-att-autofocus="widget.attrs.autofocus"/> + + <button type="button" class="btn btn-primary o_select_file_button" title="Select">Upload your file</button> + <button type="button" class="btn btn-secondary fa fa-pencil o_select_file_button" title="Select" aria-label="Select"/> + <button type="button" class="btn btn-secondary 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"> + <t t-set="fileupload_id" t-value="widget.fileupload_id"/> + <t t-set="fileupload_style" t-translation="off">overflow-x: hidden</t> + </t> + </div> +</t> + +<t t-name="HiddenInputFile"> + <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"/> + <input type="hidden" name="callback" t-att-value="fileupload_id"/> + <input type="file" class="o_input_file" name="ufile" + t-att="{'multiple': multi_upload ? 'multiple' : null, 'accept': widget.accepted_file_extensions || '*'}"/> + <t t-raw="0"/> + </form> + <iframe t-att-id="fileupload_id" t-att-name="fileupload_id" style="display: none"/> + </div> +</t> + +<t t-name="FieldBinarySignature-img"> + <img class="o_signature img img-fluid" + alt="Binary file" + t-att-src='url' + t-att-border="1" + t-att-name="widget.name"/> +</t> + +<div t-name="FieldBinarySignature"> + <div class="o_sign_signature_draw panel panel-default mt16 mb0"> + <div class="card-header"> + <a role="button" class="o_sign_select_style float-right btn btn-link">Select Signature Style</a> + <a role="button" class="o_sign_clean float-right btn btn-link">Clear Signature</a> + <a data-mode="draw" class="o_sign_mode o_sign_mode_draw btn btn-primary" role="button">Draw</a> + <a data-mode="auto" class="o_sign_mode o_sign_mode_auto btn" role="button">Auto</a> + <a data-mode="load" class="o_sign_mode o_sign_mode_load btn" role="button">Load</a> + <input type="file" name="files[]" class="o_sign_load btn btn-link" role="button"/> + </div> + <div class="o_sign_signature card-body"/> + </div> + <div class="mt16 small">By clicking Adopt and Sign, I agree that the chosen signature/initials will be a valid electronic representation of my hand-written signature/initials for all purposes when it is used on documents, including legally binding contracts.</div> + + <div class="o_sign_font_dialog card"> + <div class="card-header">Styles</div> + <div class="o_sign_font_selection card-body"/> + </div> +</div> + +<t t-name="SignatureSvgText" name="SVG Signature Text"> + <svg t-att-width="width" t-att-height="height"> + <defs> + <style type="text/css"> + @font-face { + font-family: "font_sign"; + src: url(data:font/ttf;base64,<t t-esc="font"/>) format("woff"); + font-weight: normal; + font-style: normal; + } + </style> + </defs> + <text x="50%" t-att-y="height*4/5" t-att-font-size="height*4/5" t-att-textLength="width * 4 / 5 * Math.min(1, text.length / 7)" lengthAdjust="spacingAndGlyphs" style="font-family:'font_sign'" fill="black" text-anchor="middle"><t t-esc="text"/></text> + </svg> +</t> + +<t t-name="FieldPdfViewer"> + <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-primary o_select_file_button" title="Select">Upload your file</button> + <button class="btn btn-secondary fa fa-pencil o_select_file_button" title="Select" aria-label="Select" type="button"></button> + <button class="btn btn-secondary 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="HiddenInputFile"> + <t t-set="fileupload_id" t-value="widget.fileupload_id"/> + <t t-set="fileupload_style" t-translation="off">overflow-x: hidden</t> + </t> + </div> +</t> + +<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-secondary 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> + <t t-set="multi_upload" t-value="true"/> + <input type="hidden" name="model" t-att-value="widget.model"/> + <input type="hidden" name="id" value="0"/> + </t> + </div> +</div> + +<t t-name="FieldBinaryFileUploader.attachment_preview"> + <t t-set="url" t-value="widget.metadata[file.id] ? widget.metadata[file.id].url : false"/> + <t t-if="file.data" t-set="file" t-value="file.data"/> + <t t-set="editable" t-value="widget.mode === 'edit'"/> + <t t-if="file.mimetype" t-set="mimetype" t-value="file.mimetype"/> + <div t-attf-class="o_attachment o_attachment_many2many #{ editable ? 'o_attachment_editable' : '' } #{upload ? 'o_attachment_uploading' : ''}" t-att-title="file.name"> + <div class="o_attachment_wrap"> + <t t-set="ext" t-value="file.name.replace(/^.*\./, '')"/> + <div class="o_image_box float-left" t-att-data-id="file.id"> + <a t-att-href="url" t-att-title="'Download ' + file.name" aria-label="Download"> + <span class="o_image o_hover" t-att-data-mimetype="mimetype" t-att-data-ext="ext" role="img"/> + </a> + </div> + + <div class="caption"> + <a class="ml4" t-att-href="url" t-att-title="'Download ' + file.name"><t t-esc='file.name'/></a> + </div> + <div class="caption small"> + <a class="ml4 small text-uppercase" t-att-href="url" t-att-title="'Download ' + file.name"><b><t t-esc='ext'/></b></a> + <div t-if="editable" class="progress o_attachment_progress_bar"> + <div class="progress-bar progress-bar-striped active" style="width: 100%">Uploading</div> + </div> + </div> + + <div t-if="editable" class="o_attachment_uploaded"><i class="text-success fa fa-check" role="img" aria-label="Uploaded" title="Uploaded"/></div> + <div t-if="editable" class="o_attachment_delete" t-att-data-id="file.id"><span class="text-white" role="img" aria-label="Delete" title="Delete">×</span></div> + </div> + </div> +</t> + +<div t-name="FieldBinaryFileUploader.files" class="o_attachments" aria-atomic="true"> + <!-- uploaded files --> + <t t-foreach="widget.value.data" t-as="file"> + <t t-if="!file.data.upload" t-call="FieldBinaryFileUploader.attachment_preview"/> + </t> + <!-- uploading files --> + <t t-foreach="widget.uploadingFiles" t-as="file"> + <t t-set="upload" t-value="true"/> + <t t-call="FieldBinaryFileUploader.attachment_preview"/> + </t> +</div> + +<div t-name="ExportDialog" class="o_export"> + <div class="row o-export-panel no-gutters"> + <div class="col-6 d-flex o_left_panel"> + <div class="form-check o_import_compat"> + <input class="form-check-input" id="o-update-data" type="checkbox"/> + <label class="form-check-label" for="o-update-data"> + I want to update data (import-compatible export) + </label> + </div> + <div class="mt-3"> + <h4>Available fields</h4> + </div> + <div class="input-group mb-3"> + <input type="search" class="form-control o_export_search_input" id="o-export-search-filter" placeholder="Search" /> + </div> + <div class="border o_left_field_panel"/> + </div> + <div class="col-6 d-flex o_right_panel"> + <div class="o_export_format"> + <strong>Export Format:</strong> + </div> + <div class="mt-3"> + <h4>Fields to export</h4> + </div> + <div class="o_save_list"> + <t t-call="Export.SaveList"/> + </div> + <div class="o_exported_lists"/> + <div class="border o_right_field_panel"> + <ul class="o_fields_list list-unstyled"/> + </div> + </div> + </div> +</div> +<t t-name="Export.TreeItems"> + <t t-foreach="fields" t-as="field"> + <t t-set="has_child" t-value="field.children && (field.id).split('/').length != 3" /> + <div t-att-data-id="field.id" t-attf-class="o_export_tree_item #{has_child ? 'haschild o_expand' : ''}" tabindex="-1" role="treeitem"> <!-- tabindex make the div focusable --> + <span t-if="has_child" class="o_expand_parent fa fa-chevron-right" role="img" aria-label="Show sub-fields" title="Show sub-fields"/> + <div t-attf-class="o_tree_column" t-att-title="debug and field.id or None"> + <t t-esc="field.string"/> + <span title="Select field" class="fa fa-plus pull-right m-1 o_add_field"/> + </div> + </div> + </t> +</t> +<t t-name="Export.SaveList"> + <div class="input-group mb-3"> + <label class="pt-2 font-weight-bold">Save as : </label> + <input class="form-control ml-4 o_save_list_name" + placeholder="New template"/> + <button type="button" class="btn btn-secondary ml-1 o_save_list_btn"><i class="fa fa-floppy-o"/></button> + <button type="button" class="btn btn-secondary ml-1 o_cancel_list_btn"><i class="fa fa-times"/></button> + </div> +</t> +<t t-name="Export.SavedList"> + <div class="input-group mb-3"> + <label class="pt-2 mb-0 font-weight-bold">Template: </label> + <select class="form-control ml-4 o_exported_lists_select"> + <option></option> + <option class="font-italic" value="new_template">New template</option> + <t t-foreach="existing_exports" t-as="export"> + <option t-att-value="export.id"> + <t t-esc="export.name"/> + </option> + </t> + </select> + <button type="button" class="btn btn-secondary d-none ml-1 o_delete_exported_list"> + <i class="fa fa-trash"/> + </button> + </div> +</t> + +<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);" 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" role="img" aria-label="Loading, please wait..." title="Loading, please wait..."/></div> +</t> +<t t-name="M2ODialog"> + <div> + Do you want to create <strong t-esc="widget.value"/> as a new <t t-esc="widget.name"/>? + </div> +</t> +<t t-name="FieldMany2ManyCheckBoxes"> + <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="custom-control custom-checkbox"> + <input type="checkbox" t-att-id="id_for_label" class="custom-control-input" t-att-data-record-id="JSON.stringify(m2m_value[0])"/> + <label t-att-for="id_for_label" class="custom-control-label o_form_label"><t t-esc="m2m_value[1]"/></label> + </div> + </div> + </div> +</t> +<t t-name="StatInfo"> + <span class="o_stat_value"><t t-esc="value"/></span> + <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" aria-pressed="false"> + <i class="fa fa-circle" t-att-title="widget.string"/> + </button> +</t> + +<t t-name="AceEditor"> + <div class="oe_form_field o_ace_view_editor oe_ace_open"> + <div class="ace-view-editor"/> + </div> +</t> + +<t t-name="notification-box"> + <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 class="fa fa-times"></span> + </button> + </div> +</t> + +<t t-name="translation-alert"> + <div role="alertdialog"> + Please update translations of : + <t t-foreach="fields" t-as="field"> + <strong><a class="oe_field_translate" t-att-name="field" href="#"><t t-esc="field_value.string"/><t t-if="field_index < _.size(fields)-1">, </t></a></strong> + </t> + </div> +</t> + +<t t-name="UserMenu"> + <li class="o_user_menu"> + <a role="button" class="dropdown-toggle o-no-caret" data-toggle="dropdown" data-display="static" aria-expanded="false" href="#"> + <img class="rounded-circle oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/user_menu_avatar.png'" alt="User"/> + <span class="oe_topbar_name"/> + </a> + <div class="dropdown-menu dropdown-menu-right" role="menu"> + <t t-call="UserMenu.Actions"/> + </div> + </li> +</t> + +<t t-name="UserMenu.Actions"> + <a role="menuitem" href="#" data-menu="documentation" class="dropdown-item">Documentation</a> + <a role="menuitem" href="#" data-menu="support" class="dropdown-item">Support</a> + <div role="separator" class="dropdown-divider"/> + <a role="menuitem" href="#" data-menu="settings" class="dropdown-item">Preferences</a> + <a role="menuitem" href="#" data-menu="account" class="dropdown-item">My Odoo.com account</a> + <a role="menuitem" href="#" data-menu="logout" class="dropdown-item">Log out</a> +</t> + +<t t-name="SwitchCompanyMenu"> + <li class="o_switch_company_menu"> + <a role="button" class="dropdown-toggle o-no-caret" data-toggle="dropdown" data-display="static" aria-expanded="false" href="#" title="Dropdown menu"> + <span t-attf-class="#{widget.isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}"> + <t t-if="!widget.isMobile"><t t-esc="widget.current_company_name"/></t> + </span> + </a> + <div class="dropdown-menu dropdown-menu-right" role="menu"> + <t t-foreach="widget.user_companies" t-as="company"> + <div class="dropdown-item d-flex py-0 px-0" data-menu="company" t-att-data-company-id="company[0]"> + <t t-set="is_allowed" t-value="widget.allowed_company_ids.includes(company[0])"/> + <t t-set="is_current" t-value="company[0] === widget.current_company"/> + <div role="menuitemcheckbox" t-att-aria-checked="is_allowed" t-att-aria-label="company[1]" tabindex="0" class="ml-auto pl-3 pr-3 border border-top-0 border-left-0 border-bottom-0 toggle_company o_py"> + <span style="height: 2rem;"> + <t t-if="is_allowed"> + <i class="fa fa-fw fa-check-square pt-2"></i> + </t> + <t t-if="!is_allowed"> + <i class="fa fa-fw fa-square-o pt-2"></i> + </t> + </span> + </div> + <div role="button" t-att-aria-pressed="is_current" aria-label="Switch to this company" tabindex="0" class="d-flex flex-grow-1 align-items-center py-0 log_into pl-3 o_py" t-att-style="is_current ? 'background-color: lightgrey;' : ''"> + <t t-if="is_allowed"> + <span class='mr-3 company_label'> + <t t-esc="company[1]"/> + </span> + </t> + <t t-if="!is_allowed"> + <span class='mr-3 company_label text-muted'> + <t t-esc="company[1]"/> + </span> + </t> + </div> + </div> + </t> + </div> + </li> +</t> + +<t t-name="EnterpriseUpgrade"> + <div class="row" role="status"> + <div class="col-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?utm_source=db&utm_medium=enterprise" target="_blank"><i class="fa fa-plus"></i> And more</a></li> + </ul> + </div> + <div class="col-6"> + <img class="img-fluid" 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}" role="tab"> + <div class="icon d-none d-md-block" 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" role="search"> + <img class="icon" t-att-src="imgurl" alt="Search"></img> + <span class="appName"><t t-esc="string"/></span> + </div> +</t> + +<t t-name="AttachDocument"> + <button t-attf-class="btn o_attachment_button #{widget.node.attrs.highlight?'btn-primary':'btn-secondary'}"> + <span class="o_attach_document"><t t-esc="widget.node.attrs.string"/></span> + <span class="d-none"> + <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> + <t t-set="multi_upload" t-value="true"/> + <input type="hidden" name="model" t-att-value="widget.res_model"/> + <input type="hidden" name="id" t-att-value="widget.res_id"/> + </t> + </span> + </button> +</t> + +<t t-name="FieldColor"> + <div> + <button class="o_field_color" t-attf-tabindex="#{widget.mode === 'edit' ? 0 : -1}"></button> + </div> +</t> + +<t t-name="ColorPicker"> + <div class="o_field_color_picker"> + <ul/> + </div> +</t> +<t t-name="ColorPickerReadonly"> + <div class="o_field_color_picker_preview"> + <li> + <a href="#" role="menuitem" t-att-class="'oe_kanban_color_'+active_color" t-att-data-color="active_color" t-att-aria-label="name_color" t-att-title="name_color"/> + </li> + </div> +</t> + +<t t-name="SignButton"> + <button t-attf-class="btn o_sign_button #{widget.node.attrs.highlight?'btn-primary':'btn-secondary'}"> + <span class="o_sign_label"><t t-esc="widget.node.attrs.string"/></span> + </button> +</t> + +<t t-name="web.IframeWrapper"> + <div class="o_preview_iframe_wrapper"> + <i class="o_iframe_wrapper_spinner fa fa-spinner fa-spin fa-4x" style="color: #875a7b; z-index: 2"/> + <!--suppress CheckTagEmptyBody --> + <iframe src="about:blank" class="o_preview_iframe" style="display:none"></iframe> + </div> +</t> + +</templates> |
