*= website, website_livechat, website_rating ///// Tracking Product ///// Now when a user browse products in eCommerce, we keep track of the products he looked at. We use the website_visitor to store the products viewed. A cookie is added with a TTl of 30 min it will prevent the RPC for that time. We track the page only if the product view is tracked. The recently viewed products are displayed as a snippet but also with the customize option in product pages of website_sale. Products that are in cart will not be returned as recently viewed. It is possible to add a recently viewed product to the cart directly from the carousel, it will not redirect to the cart. If we are on the cart page, the product is displayed in the cart. The Visitor page in website now references products viewed ///// Tracking Page ///// Feature to track a view was remove in: https://github.com/odoo/enterprise/pull/4834 That feature is now reintroduced and will use website_track instead of leads to be stored. The track field is now on the view instead of the page. url field is added to website.track, it will store the url for pages and views The Visitor page in website now references urls viewed Add some tests task-1984575 closes odoo/odoo#35810 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
1205 lines
60 KiB
XML
1205 lines
60 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<odoo>
|
||
<!-- Assets -->
|
||
<template id="_assets_primary_variables" inherit_id="portal._assets_primary_variables">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/primary_variables.scss"/>
|
||
|
||
<!-- Those files will be automatically edited by users -->
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/options/user_values.scss"/>
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/options/colors/user_color_palette.scss"/>
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/options/colors/user_theme_color_palette.scss"/>
|
||
</xpath>
|
||
</template>
|
||
<template id="_assets_secondary_variables" inherit_id="web_editor._assets_secondary_variables">
|
||
<xpath expr="//link" position="before">
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/secondary_variables.scss"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="assets_tests" name="Website Assets Tests" inherit_id="web.assets_tests">
|
||
<xpath expr="." position="inside">
|
||
<script type="text/javascript" src="/website/static/tests/tours/reset_password.js"></script>
|
||
<script type="text/javascript" src="/website/static/tests/tours/rte.js"/>
|
||
<script type="text/javascript" src="/website/static/tests/tours/html_editor.js"/>
|
||
<script type="text/javascript" src="/website/static/tests/tours/restricted_editor.js"/>
|
||
<script type="text/javascript" src="/website/static/tests/tours/dashboard_tour.js"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="assets_backend" inherit_id="web.assets_backend" name="Website Backend Assets (used in backend interface)">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.backend.scss"/>
|
||
</xpath>
|
||
<xpath expr="//script[last()]" position="after">
|
||
<script type="text/javascript" src="/website/static/src/js/backend/button.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/backend/dashboard.js"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="qunit_suite" inherit_id="web.qunit_suite">
|
||
<xpath expr="//script[last()]" position="after">
|
||
<script type="text/javascript" src="/website/static/tests/website_tests.js"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="_assets_frontend_helpers" inherit_id="portal._assets_frontend_helpers">
|
||
<xpath expr="//link" position="before">
|
||
<!-- Custom empty file for user custom bootstrap override -->
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/user_custom_bootstrap_overridden.scss"/>
|
||
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/bootstrap_overridden.scss"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="assets_frontend" inherit_id="portal.assets_frontend" name="Website Assets">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.scss"/>
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.ui.scss"/>
|
||
|
||
<!-- Custom empty file for user custom rules -->
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/user_custom_rules.scss"/>
|
||
</xpath>
|
||
<xpath expr="//script[@src='/web/static/src/js/public/public_root_instance.js']" position="replace">
|
||
<script type="text/javascript" src="/website/static/src/js/content/website_root_instance.js"/>
|
||
</xpath>
|
||
<xpath expr="//script[last()]" position="after">
|
||
<script type="text/javascript" src="/website/static/src/js/set_view_track.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/utils.js"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/content/website_root.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/content/compatibility.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/content/lazy_template_call.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/content/menu.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/content/snippets.animation.js"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/menu/navbar.js"/>
|
||
|
||
<!-- Custom empty file for user javascript -->
|
||
<script type="text/javascript" src="/website/static/src/js/user_custom_javascript.js"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="assets_frontend_compatibility_for_12_0" inherit_id="website.assets_frontend" active="False">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/compatibility/bs3_for_12_0.scss"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="website.compiled_assets_wysiwyg" name="Website Editor Assets (used in website editor)">
|
||
<t t-call-assets="website.assets_wysiwyg"/>
|
||
</template>
|
||
|
||
<template id="website.assets_wysiwyg" name="Website Editor Assets (used in website editor)">
|
||
<t t-call="web._assets_helpers">
|
||
<link rel="stylesheet" type="text/scss" href="/web_editor/static/src/scss/bootstrap_overridden.scss"/>
|
||
</t>
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.wysiwyg.scss"/>
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.edit_mode.scss"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/editor/editor.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/editor/rte.summernote.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/editor/snippets.options.js"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/editor/wysiwyg_multizone.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/editor/wysiwyg_multizone_translate.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/editor/widget_link.js"/>
|
||
</template>
|
||
|
||
<template id="website.assets_editor" name="Website Editor Assets (used in website editor)">
|
||
<t t-call="web._assets_helpers"/>
|
||
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.editor.ui.scss"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/editor/editor_menu.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/editor/editor_menu_translate.js"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/menu/content.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/menu/customize.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/menu/debug_manager.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/menu/edit.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/menu/mobile_view.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/menu/new_content.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/menu/seo.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/menu/translate.js"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/tours/banner.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/tours/customize.js"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/widgets/ace.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/widgets/theme.js"/>
|
||
</template>
|
||
|
||
<!-- Layout -->
|
||
<template id="submenu" name="Submenu">
|
||
<t t-set="has_visible_submenu" t-value="(submenu.is_mega_menu and submenu.is_visible) or submenu.child_id.filtered(lambda menu: menu.is_visible)"/>
|
||
<li t-if="submenu.is_visible and not has_visible_submenu" t-attf-class="#{item_class or ''}">
|
||
<a t-att-href="submenu.clean_url()"
|
||
t-attf-class="#{link_class or ''} #{'active' if submenu.clean_url() and unslug_url(request.httprequest.path) == unslug_url(submenu.clean_url()) else ''}"
|
||
role="menuitem"
|
||
t-ignore="true"
|
||
t-att-target="'_blank' if submenu.new_window else None">
|
||
<span t-field="submenu.name"/>
|
||
</a>
|
||
</li>
|
||
<li t-if="has_visible_submenu" t-attf-class="#{item_class or ''} dropdown #{
|
||
(submenu.clean_url() and submenu.clean_url() != '/' and any([request.httprequest.path == child.url for child in submenu.child_id if child.url]) or
|
||
(submenu.clean_url() and request.httprequest.path == submenu.clean_url())) and 'active'
|
||
} #{submenu.is_mega_menu and 'position-static'}">
|
||
<a t-attf-class="#{link_class or ''} dropdown-toggle #{submenu.is_mega_menu and 'o_mega_menu_toggle'}" data-toggle="dropdown" href="#">
|
||
<span t-field="submenu.name"/>
|
||
</a>
|
||
<div t-if="submenu.is_mega_menu"
|
||
t-attf-class="dropdown-menu o_mega_menu #{submenu.mega_menu_classes}"
|
||
data-name="Mega Menu"
|
||
t-field="submenu.mega_menu_content"/>
|
||
<ul t-else="" class="dropdown-menu" role="menu">
|
||
<t t-foreach="submenu.child_id" t-as="submenu">
|
||
<t t-call="website.submenu">
|
||
<t t-set="item_class" t-value="None"/>
|
||
<t t-set="link_class" t-value="'dropdown-item'"/>
|
||
</t>
|
||
</t>
|
||
</ul>
|
||
</li>
|
||
</template>
|
||
|
||
<template id="layout" name="Main layout" inherit_id="portal.frontend_layout">
|
||
<xpath expr="//html" position="before">
|
||
<t t-set="html_data" t-value="{
|
||
'lang': lang and lang.replace('_', '-'),
|
||
'data-website-id': website.id if website else None,
|
||
'data-editable': '1' if editable else None,
|
||
'data-translatable': '1' if translatable else None,
|
||
'data-edit_translations': '1' if edit_translations else None,
|
||
'data-view-xmlid': xmlid if editable or translatable else None,
|
||
'data-viewid': viewid if editable or translatable else None,
|
||
'data-main-object': repr(main_object) if editable or translatable else None,
|
||
'data-seo-object': repr(seo_object) if seo_object else None,
|
||
'data-oe-company-name': res_company.name,
|
||
}"/>
|
||
</xpath>
|
||
<xpath expr="//head" position="before">
|
||
<t t-if="not title">
|
||
<t t-if="not additional_title and main_object and 'name' in main_object">
|
||
<t t-set="additional_title" t-value="main_object.name"/>
|
||
</t>
|
||
<t t-set="default_title"> <t t-if="additional_title"><t t-raw="additional_title"/> | </t><t t-raw="(website or res_company).name"/> </t>
|
||
<t t-set="seo_object" t-value="seo_object or main_object"/>
|
||
<t t-if="seo_object and 'website_meta_title' in seo_object and seo_object.website_meta_title">
|
||
<t t-set="title" t-value="seo_object.website_meta_title"/>
|
||
</t>
|
||
<t t-else="">
|
||
<t t-set="title" t-value="default_title"></t>
|
||
</t>
|
||
</t>
|
||
<t t-set="x_icon" t-value="website.image_url(website, 'favicon')"/>
|
||
</xpath>
|
||
<xpath expr="//head/meta[last()]" position="after">
|
||
<meta name="generator" content="Odoo"/>
|
||
<t t-set="website_meta" t-value="seo_object and seo_object.get_website_meta() or {}"/>
|
||
<meta name="default_title" t-att-content="default_title" groups="website.group_website_designer"/>
|
||
<meta t-if="main_object and 'website_indexed' in main_object
|
||
and not main_object.website_indexed" name="robots" content="noindex"/>
|
||
<t t-set="seo_object" t-value="seo_object or main_object"/>
|
||
<t t-set="meta_description" t-value="seo_object and 'website_meta_description' in seo_object
|
||
and seo_object.website_meta_description or website_meta_description or website_meta.get('meta_description', '')"/>
|
||
<t t-set="meta_keywords" t-value="seo_object and 'website_meta_keywords' in seo_object
|
||
and seo_object.website_meta_keywords or website_meta_keywords"/>
|
||
<meta t-if="meta_description or editable" name="description" t-att-content="meta_description"/>
|
||
<meta t-if="meta_keywords or editable" name="keywords" t-att-content="meta_keywords"/>
|
||
<t t-if="seo_object">
|
||
<meta name="default_description" t-att-content="website_meta_description or website_meta.get('meta_description')" groups="website.group_website_designer"/>
|
||
<!-- OpenGraph tags for Facebook sharing -->
|
||
<t t-set="opengraph_meta" t-value="website_meta.get('opengraph_meta')"/>
|
||
<t t-if="opengraph_meta">
|
||
<t t-foreach="opengraph_meta" t-as="property">
|
||
<t t-if="isinstance(opengraph_meta[property], list)">
|
||
<t t-foreach="opengraph_meta[property]" t-as="meta_content">
|
||
<meta t-att-property="property" t-att-content="meta_content"/>
|
||
</t>
|
||
</t>
|
||
<t t-else="">
|
||
<meta t-att-property="property" t-att-content="opengraph_meta[property]"/>
|
||
</t>
|
||
</t>
|
||
</t>
|
||
<!-- Twitter tags for sharing -->
|
||
<t t-set="twitter_meta" t-value="website_meta.get('twitter_meta')"/>
|
||
<t t-if="opengraph_meta">
|
||
<t t-foreach="twitter_meta" t-as="t_meta">
|
||
<meta t-att-name="t_meta" t-att-content="twitter_meta[t_meta]"/>
|
||
</t>
|
||
</t>
|
||
</t>
|
||
|
||
<t t-if="request and request.is_frontend_multilang and website">
|
||
<t t-set="alternate_languages" t-value="website._get_alternate_languages(canonical_params=canonical_params)"/>
|
||
<t t-foreach="alternate_languages" t-as="lg">
|
||
<link rel="alternate" t-att-hreflang="lg['hreflang']" t-att-href="lg['href']"/>
|
||
</t>
|
||
</t>
|
||
<link t-if="request and website" rel="canonical" t-att-href="website._get_canonical_url(canonical_params=canonical_params)"/>
|
||
</xpath>
|
||
|
||
<xpath expr="//head/t[@t-js='false'][last()]" position="after">
|
||
<t t-call-assets="website.assets_editor" t-js="false" groups="website.group_website_publisher"/>
|
||
</xpath>
|
||
<xpath expr="//head/t[@t-css='false'][last()]" position="after">
|
||
<t t-call-assets="website.assets_editor" t-css="false" groups="website.group_website_publisher" lazy_load="True"/>
|
||
</xpath>
|
||
|
||
<xpath expr="//header" position="attributes">
|
||
<attribute name="data-name">Header</attribute>
|
||
</xpath>
|
||
<xpath expr="//header//a[hasclass('navbar-brand')]" position="replace">
|
||
<a class="navbar-brand" href="/" t-if="website" t-field="website.name">My Website</a>
|
||
</xpath>
|
||
<xpath expr="//header//ul[@id='top_menu']" position="attributes">
|
||
<attribute name="class" separator=" " add="o_menu_loading"/>
|
||
</xpath>
|
||
<xpath expr="//header//ul[@id='top_menu']/li[hasclass('divider')]" position="attributes">
|
||
<attribute name="t-if">website.user_id != user_id</attribute>
|
||
</xpath>
|
||
<xpath expr="//header//ul[@id='top_menu']/li[hasclass('dropdown')]" position="attributes">
|
||
<attribute name="t-if">website.user_id != user_id</attribute>
|
||
</xpath>
|
||
<xpath expr="//header//ul[@id='top_menu']/li[hasclass('divider')]" position="before">
|
||
<t t-foreach="website.menu_id.child_id" t-as="submenu">
|
||
<t t-call="website.submenu">
|
||
<t t-set="item_class" t-value="'nav-item'"/>
|
||
<t t-set="link_class" t-value="'nav-link'"/>
|
||
</t>
|
||
</t>
|
||
</xpath>
|
||
|
||
<xpath expr="//div[hasclass('o_footer_copyright')]//span[@t-field='res_company.name']" position="after">
|
||
<t t-call="website.language_selector"/>
|
||
</xpath>
|
||
<xpath expr="//t[@t-call='web.brand_promotion']/.." position="attributes">
|
||
<attribute name="class" add="o_not_editable" separator=" "/>
|
||
<attribute name="t-if">not editable</attribute>
|
||
</xpath>
|
||
|
||
<xpath expr="//div[@id='wrapwrap']" position="after">
|
||
<script id='tracking_code' t-if="website and website.google_analytics_key and not editable">
|
||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||
|
||
ga('create', _.str.trim('<t t-esc="website.google_analytics_key"/>'), 'auto');
|
||
ga('send','pageview');
|
||
</script>
|
||
</xpath>
|
||
|
||
<!-- Page options -->
|
||
<xpath expr="//div[@id='wrapwrap']" position="before">
|
||
<t groups="website.group_website_publisher">
|
||
<t t-foreach="['header_overlay', 'header_color']" t-as="optionName">
|
||
<input t-if="optionName in main_object" type="hidden" class="o_page_option_data" t-att-name="optionName" t-att-value="main_object[optionName]"/>
|
||
</t>
|
||
</t>
|
||
</xpath>
|
||
<xpath expr="//div[@id='wrapwrap']" position="attributes">
|
||
<attribute name="t-attf-class" add="#{'o_header_overlay' if 'header_overlay' in main_object and main_object.header_overlay else ''}" separator=" "/>
|
||
</xpath>
|
||
<xpath expr="//header" position="attributes">
|
||
<attribute name="t-attf-class" add="#{main_object.header_color if 'header_color' in main_object else ''}" separator=" "/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="brand_promotion" inherit_id="web.brand_promotion" name="Brand Promotion">
|
||
<xpath expr="//t[@t-call='web.brand_promotion_message']" position="replace">
|
||
<t t-call="web.brand_promotion_message">
|
||
<t t-set="_message">
|
||
Create a <a target="_blank" href="http://www.odoo.com/page/website-builder?utm_source=db&utm_medium=website">free website</a>
|
||
</t>
|
||
<t t-set="_utm_medium">website</t>
|
||
</t>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="layout_logo_show" inherit_id="website.layout" name="Show Logo">
|
||
<xpath expr="//header//a[hasclass('navbar-brand')]" position="replace">
|
||
<a href="/" class="navbar-brand logo">
|
||
<span t-field="website.logo" t-options="{'widget': 'image'}" role="img" t-att-aria-label="'Logo of %s' % website.name" t-att-title="website.name" />
|
||
</a>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="affix_top_menu" inherit_id="website.layout" name="Fixed Top Menu">
|
||
<xpath expr="//header" position="attributes">
|
||
<attribute name="t-attf-class" add="#{'o_affix_enabled'}" separator=" "/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="no_autohide_menu" inherit_id="website.layout" active="False">
|
||
<xpath expr="//header" position="attributes">
|
||
<attribute name="t-attf-class" add="#{'o_no_autohide_menu'}" separator=" "/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<!-- Features template -->
|
||
<template id="login_layout" inherit_id="web.login_layout" name="Website Login Layout" priority="20">
|
||
<xpath expr="t" position="replace">
|
||
<t t-call="website.layout">
|
||
<div class="oe_website_login_container" t-raw="0"/>
|
||
</t>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="footer_custom" inherit_id="website.layout" name="Footer">
|
||
<xpath expr="//div[@id='footer']" position="replace">
|
||
<div id="footer" class="oe_structure oe_structure_solo" t-ignore="true" t-if="not no_footer">
|
||
<section class="s_text_block pt16 pb8">
|
||
<div class="container">
|
||
<div class="row">
|
||
<div class="col-lg-4">
|
||
<h5>Our Products & Services</h5>
|
||
<ul class="list-unstyled">
|
||
<li><a href="/">Home</a></li>
|
||
</ul>
|
||
</div>
|
||
<div class="col-lg-4" id="connect">
|
||
<h5>Connect with us</h5>
|
||
<ul class="list-unstyled">
|
||
<li><a href="/contactus">Contact us</a></li>
|
||
<li><i class="fa fa-phone"/> <span class="o_force_ltr" t-field="res_company.phone"/></li>
|
||
<li><i class="fa fa-envelope"/> <span t-field="res_company.email"/></li>
|
||
</ul>
|
||
<p>
|
||
<a t-if="website.social_facebook" t-att-href="website.social_facebook" class="btn btn-sm btn-link"><i class="fa fa-2x fa-facebook-square"/></a>
|
||
<a t-if="website.social_twitter" t-att-href="website.social_twitter" class="btn btn-sm btn-link"><i class="fa fa-2x fa-twitter"/></a>
|
||
<a t-if="website.social_linkedin" t-att-href="website.social_linkedin" class="btn btn-sm btn-link"><i class="fa fa-2x fa-linkedin"/></a>
|
||
<a t-if="website.social_youtube" t-att-href="website.social_youtube" class="btn btn-sm btn-link"><i class="fa fa-2x fa-youtube-play"/></a>
|
||
<a t-if="website.social_googleplus" t-att-href="website.social_googleplus" class="btn btn-sm btn-link" rel="publisher"><i class="fa fa-2x fa-google-plus-square"/></a>
|
||
<a t-if="website.social_github" t-att-href="website.social_github" class="btn btn-sm btn-link"><i class="fa fa-2x fa-github"/></a>
|
||
<a t-if="website.social_instagram" t-att-href="website.social_instagram" class="btn btn-sm btn-link"><i class="fa fa-2x fa-instagram"/></a>
|
||
</p>
|
||
</div>
|
||
<div class="col-lg-4">
|
||
<h5>
|
||
<span t-field="res_company.name"/>
|
||
<small> - <a href="/aboutus">About us</a></small>
|
||
</h5>
|
||
<p>
|
||
We are a team of passionate people whose goal is to improve everyone's
|
||
life through disruptive products. We build great products to solve your
|
||
business problems.
|
||
</p>
|
||
<p>
|
||
Our products are designed for small to medium size companies willing to optimize
|
||
their performance.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="language_selector">
|
||
<ul class="js_language_selector mb0 list-inline" t-if="(request and request.is_frontend_multilang and len(languages) > 1) or (website and (editable or translatable))">
|
||
<li class="list-inline-item">
|
||
<div class="dropup">
|
||
<button class="btn btn-sm btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||
<span t-esc="list(filter(lambda lg : lg[0] == lang, languages))[0][2].split('/').pop()"/>
|
||
<span class="caret ml4"/>
|
||
</button>
|
||
<div class="dropdown-menu" role="menu">
|
||
<t t-foreach="languages" t-as="lg">
|
||
<a t-att-href="url_for(request.httprequest.path + '?' + keep_query(), lang_code=lg[0])"
|
||
class="dropdown-item js_change_lang"
|
||
t-att-data-url_code="lg[1]">
|
||
<t t-esc="lg[2].split('/').pop()"/>
|
||
</a>
|
||
</t>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
<li groups="website.group_website_publisher" class="list-inline-item">
|
||
<t t-set="url_return" t-value="quote_plus(url_for('', '[lang]') + '?' + keep_query())"/>
|
||
<a class="d-none d-sm-block" t-attf-href="/web#action=base.action_view_base_language_install&website_id=#{website.id if website else ''}&url_return=#{url_return}">
|
||
<i class="fa fa-plus-circle"/>
|
||
Add a language...
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</template>
|
||
|
||
<!-- Util template -->
|
||
<template id="publish_management">
|
||
<div groups="website.group_website_publisher" t-ignore="true" class="float-right css_editable_mode_hidden" t-att-style="style or None">
|
||
<div t-attf-class="btn-group #{btn_class} js_publish_management #{object.website_published and 'css_published' or 'css_unpublished'}" t-att-data-id="object.id" t-att-data-object="object._name" t-att-data-controller="publish_controller">
|
||
<button class="btn btn-danger js_publish_btn">Unpublished</button>
|
||
<button class="btn btn-success js_publish_btn">Published</button>
|
||
<button type="button" t-attf-class="btn btn-default dropdown-toggle dropdown-toggle-split" t-att-id="'dopprod-%s' % object.id" data-toggle="dropdown"/>
|
||
<div class="dropdown-menu" role="menu" t-att-aria-labelledby="'dopprod-%s' % object.id">
|
||
<t t-raw="0"/>
|
||
<a role="menuitem" t-attf-href="/web#return_label=Website&view_type=form&model=#{object._name}&id=#{object.id}&action=#{action}&menu_id=#{menu or object.env.ref('website.menu_website_configuration').id}"
|
||
title='Edit in backend' class="dropdown-item" t-if="publish_edit">Edit</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="publish_short">
|
||
<t groups="website.group_website_publisher" t-ignore="true">
|
||
<div t-attf-class="float-right js_publish_management #{object.website_published and 'css_published' or 'css_unpublished'}" t-att-data-id="object.id" t-att-data-object="object._name" t-att-data-controller="publish_controller">
|
||
<button class="btn btn-danger js_publish_btn">Unpublished</button>
|
||
<button class="btn btn-success js_publish_btn">Published</button>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="pager" name="Pager" inherit_id="portal.pager">
|
||
</template>
|
||
|
||
<!--
|
||
XML template to be processed for theme customization modal.
|
||
|
||
Allowed tags in the root <div/> elements:
|
||
|
||
<content>: Declares a new set of options (a tab pane in the dialog)
|
||
-> string = tab's nav text
|
||
-> title = tab's heading
|
||
|
||
In the <content/> elements:
|
||
|
||
<opt>: Declares a new toggle option
|
||
-> id (optional) = an ID to associate to the option
|
||
|
||
-> string (optional) = option's text
|
||
-> data-icon (optional) = an image URL to set as option's background
|
||
-> data-font (optional) = indicates which fonts to use to style the
|
||
option and adds default sample text if no 'string' is specified
|
||
(see $o-theme-fonts in scss)
|
||
-> data-col (optional, default 6) = bootstrap column size for the option
|
||
(ignored for options in a <list/>)
|
||
|
||
-> data-xmlid (optional) = template(s) to enable if the input is
|
||
checked (list of comma-separated xml ids)
|
||
-> data-enable (optional) = enable other options (list of
|
||
comma-separated option ids)
|
||
-> data-disable (optional) = disable other options (list of
|
||
comma-separated option ids)
|
||
-> data-reload (optional) = force the reloading of the page if the url
|
||
matches the value. Otherwise, only the main assets are reloaded
|
||
|
||
-> data-widget (optional) = indicates which widget to use (available
|
||
widgets are: color_palette)
|
||
|
||
<list>: Declares a subset of options showed as a list
|
||
-> string = list's title
|
||
-> data-col (optional, default 6) = bootstrap column size for the list
|
||
|
||
<selection>: Declares a subset of options showed as a selection (dropdown)
|
||
-> data-col (optional, default 6) = bootstrap column size for the option
|
||
(ignored for options in a <list/>)
|
||
|
||
Other elements will be ignored and their children will be processed as if
|
||
that element was omitted, except that those children will be considered as
|
||
in a new set of option. That allows to wrap an option in a fake element to
|
||
indicate it is a standalone option for example.
|
||
|
||
Note: if an option is the only one of its group, a toggle element will be
|
||
rendered.
|
||
-->
|
||
<template id="theme_customize">
|
||
<div>
|
||
<!-- Color options -->
|
||
<content id="theme_customize_content_colors" string="Colors" title="Choose the theme colors">
|
||
<list string="Main">
|
||
<opt data-widget="color" data-color-type="theme" data-color="primary" string="Primary"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="secondary" string="Secondary"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="alpha" string="Primary"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="beta" string="Secondary"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="gamma" string="Extra Color"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="delta" string="Extra Color"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="epsilon" string="Extra Color"/>
|
||
</list>
|
||
<list string="Status">
|
||
<opt data-widget="color" data-color-type="theme" data-color="success" string="Success"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="info" string="Info"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="warning" string="Warning"/>
|
||
<opt data-widget="color" data-color-type="theme" data-color="danger" string="Error"/>
|
||
</list>
|
||
<list string="Text">
|
||
<opt data-widget="color" data-color="text" string="Text"/>
|
||
<opt data-widget="color" data-color="h1" string="Headings 1"/>
|
||
<opt data-widget="color" data-color="h2" string="Headings 2"/>
|
||
<opt data-widget="color" data-color="h3" string="Headings 3"/>
|
||
<opt data-widget="color" data-color="h4" string="Headings 4"/>
|
||
<opt data-widget="color" data-color="h5" string="Headings 5"/>
|
||
<opt data-widget="color" data-color="h6" string="Headings 6"/>
|
||
</list>
|
||
<list string="Background">
|
||
<opt data-widget="color" data-color="body" string="Body"/>
|
||
<opt data-widget="color" data-color="menu" string="Menus"/>
|
||
<opt data-widget="color" data-color="footer" string="Footer"/>
|
||
</list>
|
||
</content>
|
||
|
||
<!-- Menu options -->
|
||
<content id="theme_customize_content_navbar" string="Navbar" title="Choose your navbar">
|
||
<list string="Main Layout">
|
||
<checkbox><opt data-xmlid="website.affix_top_menu" data-reload="/"/></checkbox>
|
||
<checkbox><opt data-xmlid="portal.portal_show_sign_in" data-reload="/"/></checkbox>
|
||
<opt data-widget="input" data-unit="rem" data-variable="header-font-size" string="Font Size"/>
|
||
</list>
|
||
<list string="Logo">
|
||
<checkbox><opt data-xmlid="website.layout_logo_show" data-reload="/"/></checkbox>
|
||
<opt data-widget="input" data-unit="rem" data-variable="logo-height" string="Logo Height"/>
|
||
</list>
|
||
</content>
|
||
|
||
<!-- Layout Options -->
|
||
<content id="theme_customize_content_layout" string="Layout" title="Choose your layout">
|
||
<list string="Body">
|
||
<opt string="Full" data-xmlid="" data-icon="/website/static/src/img/options/layout-full.png"/>
|
||
<opt id="option_layout_boxed" string="Boxed" data-xmlid="website.option_layout_boxed_variables" data-icon="/website/static/src/img/options/layout-boxed.png"/>
|
||
</list>
|
||
<list string="Background">
|
||
<opt id="option_no_background" string="None" data-xmlid=""/>
|
||
<opt string="Choose an image" data-xmlid="website.option_custom_body_image"/>
|
||
<opt string="Choose a pattern" data-xmlid="website.option_custom_body_image, website.option_custom_body_pattern"/>
|
||
</list>
|
||
</content>
|
||
|
||
<!-- Font options -->
|
||
<content id="theme_customize_content_fonts" string="Fonts" title="Choose your fonts">
|
||
<list string="Title">
|
||
<fontselection data-variable="headings-font-number"/>
|
||
</list>
|
||
<list string="Body">
|
||
<fontselection data-variable="font-number"/>
|
||
</list>
|
||
<list string="Button">
|
||
<fontselection data-variable="buttons-font-number"/>
|
||
</list>
|
||
<list string="Navbar">
|
||
<fontselection data-variable="navbar-font-number"/>
|
||
</list>
|
||
</content>
|
||
</div>
|
||
</template>
|
||
|
||
<!-- Layout options -->
|
||
<template id="option_layout_boxed_variables" inherit_id="website._assets_primary_variables" active="False">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/options/layout/option_layout_boxed_variables.scss"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="option_custom_body_image" inherit_id="website.assets_frontend" active="False">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<style>
|
||
<!-- Patched by JS option -->
|
||
</style>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="option_custom_body_pattern" inherit_id="website.assets_frontend" active="False">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/options/layout/option_custom_body_pattern.scss"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="kanban">
|
||
<t t-set="step"><t t-esc="step or 0"/></t>
|
||
<t t-set="scope"><t t-esc="scope or 0"/></t>
|
||
<t t-set="orderby"><t t-esc="orderby or 'name'"/></t>
|
||
<t t-raw="website.kanban(model, domain, column, template, step=step, scope=scope, orderby=orderby)"/>
|
||
</template>
|
||
|
||
<template id="kanban_contain">
|
||
<table class="table js_kanban">
|
||
<thead>
|
||
<tr>
|
||
<t t-set="width" t-valuef="{{ round(100.0 / (len(objects) if objects else 1), 2) }}%"/>
|
||
<t t-foreach="objects" t-as="obj">
|
||
<th t-att-width="width">
|
||
<div t-field="obj['column_id'].name" class="text-center"></div>
|
||
</th>
|
||
</t>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<t t-foreach="objects" t-as="obj">
|
||
<td class="js_kanban_col" t-att-data-template="template"
|
||
t-att-data-domain="obj['domain']"
|
||
t-att-data-page_count="obj['page_count']"
|
||
t-att-data-model="obj['model']"
|
||
t-att-data-step="obj['step']"
|
||
t-att-data-orderby="obj['orderby']">
|
||
<t t-foreach="obj['object_ids']" t-as="object_id">
|
||
<t t-call="#{ template }"></t>
|
||
</t>
|
||
<!-- pager -->
|
||
<div t-if="1 != obj['page_end']" class="pagination pagination-centered"><!-- FIXME -->
|
||
<ul>
|
||
<li t-attf-class="prev #{'active' if obj['page'] == 1 else '' }">
|
||
<a t-att-href=" '%s,%s-%s' % (obj['kanban_url'], obj['column_id'].id, (obj['page'] > 1 and obj['page']-1 or 1)) ">Prev</a></li>
|
||
<t t-foreach="range(obj['page_start'], obj['page_end']+1)" t-as="p">
|
||
<li t-att-class=" 'active' if obj['page'] == p else None ">
|
||
<a t-att-href=" '%s,%s-%s' % (obj['kanban_url'], obj['column_id'].id, p)" t-esc="p"></a></li>
|
||
</t>
|
||
<li t-attf-class="next #{'active' if obj['page'] == obj['page_end'] else '' }">
|
||
<a t-att-href=" '%s,%s-%s' % (obj['kanban_url'], obj['column_id'].id, (obj['page'] < obj['page_end'] and obj['page']+1 or obj['page_end']) )">Next</a></li>
|
||
</ul>
|
||
</div>
|
||
</td>
|
||
</t>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</template>
|
||
|
||
<!-- Error and special pages -->
|
||
<template id="website_info" name="Odoo Information">
|
||
<t t-call="website.layout">
|
||
<div id="wrap"/>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="show_website_info" inherit_id="website.website_info" customize_show="True" name="Show Odoo Information">
|
||
<xpath expr="//div[@id='wrap']" position="inside">
|
||
<div class="oe_structure">
|
||
<section class="container">
|
||
<t t-if="not version">
|
||
<meta http-equiv="refresh" content="0;URL='/website/info'" />
|
||
</t>
|
||
<t t-if="version">
|
||
<h1><t t-esc="res_company.name"/>
|
||
<small>Odoo Version <t t-raw="version.get('server_version')"/></small>
|
||
</h1>
|
||
<p>
|
||
Information about the <t t-esc="res_company.name"/> instance of Odoo, the <a target="_blank" href="https://www.odoo.com">Open Source ERP</a>.
|
||
</p>
|
||
|
||
<div class="alert alert-warning alert-dismissable mt16" groups="website.group_website_publisher" role="status">
|
||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">&times;</button>
|
||
<p>
|
||
Note: To hide this page, uncheck it from the top Customize menu.
|
||
</p>
|
||
</div>
|
||
<h2>Installed Applications</h2>
|
||
<dl class="dl-horizontal" t-foreach="apps" t-as="app">
|
||
<dt>
|
||
<a t-att-href="app.website" t-if="app.website">
|
||
<t t-raw="app.shortdesc"/>
|
||
</a>
|
||
<span t-raw="app.shortdesc" t-if="not app.website"/>
|
||
</dt>
|
||
<dd>
|
||
<span t-raw="app.summary"/>
|
||
</dd><dd class="text-muted" groups='base.group_no_one'>
|
||
Technical name: <span t-field="app.name"/>, updated: <span t-field="app.write_date"/>, author: <span t-field="app.author"/>
|
||
</dd>
|
||
</dl>
|
||
|
||
<div groups='base.group_no_one'>
|
||
<h2>Installed Modules</h2>
|
||
<dl class="dl-horizontal">
|
||
<t t-foreach="modules" t-as="app">
|
||
<dt>
|
||
<span t-raw="app.shortdesc"/>
|
||
</dt>
|
||
<dd t-if="app.summary">
|
||
<span t-raw="app.summary"/>
|
||
</dd><dd>
|
||
Technical name: <span t-field="app.name"/>,
|
||
updated: <span t-field="app.write_date"/>
|
||
<t t-if="app.author">
|
||
, author: <span t-field="app.author"/>
|
||
</t>
|
||
</dd>
|
||
</t>
|
||
</dl>
|
||
</div>
|
||
</t>
|
||
</section>
|
||
</div>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="default_page">
|
||
<t t-call="website.layout">
|
||
<div id="wrap" class="oe_structure oe_empty"/>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="default_js">
|
||
<script type="text/javascript">
|
||
if (0 > 1) {
|
||
let it_cant_be = false;
|
||
}
|
||
</script>
|
||
</template>
|
||
<template id="default_xml">
|
||
<?xml version="1.0" encoding="utf-8"?>
|
||
</template>
|
||
<template id="default_css">
|
||
<style type="text/css">
|
||
div#wrap div > h1{
|
||
color: #875A7B;
|
||
}
|
||
</style>
|
||
</template>
|
||
<template id="default_less">
|
||
<style type="text/less">
|
||
div#wrap div > h1 {
|
||
color: @o-brand-odoo;
|
||
}
|
||
</style>
|
||
</template>
|
||
<template id="default_scss">
|
||
<style type="text/scss">
|
||
div#wrap div > h1 {
|
||
color: $o-brand-odoo;
|
||
}
|
||
</style>
|
||
</template>
|
||
<template id="default_csv">
|
||
1,2,3
|
||
</template>
|
||
|
||
<template id="page_404">
|
||
<t t-call="website.404">
|
||
<div class="container">
|
||
<div class="alert alert-info mt32">
|
||
<p>This page does not exist, but you can create it as you are administrator of this site.</p>
|
||
<a role="button" class="btn btn-primary js_disable_on_click" t-attf-href="/website/add/#{ path }#{ from_template and '?template=%s' % from_template }">Create Page</a>
|
||
</div>
|
||
<div class="text-center text-muted">Edit the content below this line to adapt the default "page not found" page.</div>
|
||
</div>
|
||
<hr/>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="http_error">
|
||
<t t-call="website.layout">
|
||
<div id="wrap">
|
||
<div class="oe_structure">
|
||
<h1 class="container mt32"><t t-esc="status_code"/>: <t t-esc="status_message"/></h1>
|
||
</div>
|
||
<t t-if="editable or debug">
|
||
<t t-call="website.http_error_debug"/>
|
||
</t>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="error_message">
|
||
<p t-if="error_message">
|
||
<strong>Error message:</strong>
|
||
<pre t-esc="error_message"/>
|
||
</p>
|
||
</template>
|
||
|
||
<template id="http_error_debug">
|
||
<div class="container accordion mb32 mt32" id="debug_infos">
|
||
<div class="card" t-if="error_message">
|
||
<h4 class="card-header">
|
||
<a data-toggle="collapse" href="#error_main">Error</a>
|
||
</h4>
|
||
<div id="error_main" class="collapse show">
|
||
<div class="card-body">
|
||
<t t-call="website.error_message"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="card" t-if="qweb_exception">
|
||
<h4 class="card-header">
|
||
<a data-toggle="collapse" href="#error_qweb">QWeb</a>
|
||
</h4>
|
||
<div id="error_qweb" class="collapse show">
|
||
<div class="card-body">
|
||
<p t-if="exception.message">
|
||
<strong>Error message:</strong>
|
||
<pre t-esc="exception.message"/>
|
||
</p>
|
||
<p>
|
||
The error occured while rendering the template <code t-esc="qweb_exception.name"/>
|
||
<t t-if="qweb_exception.html">and evaluating the following expression: <code t-esc="qweb_exception.html"/></t>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="card" t-if="traceback">
|
||
<h4 class="card-header">
|
||
<a data-toggle="collapse" href="#error_traceback">Traceback</a>
|
||
</h4>
|
||
<div id="error_traceback" t-attf-class="collapse #{not error_message and not qweb_exception and 'show'}">
|
||
<div class="card-body">
|
||
<pre id="exception_traceback" t-esc="traceback"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="400">
|
||
<t t-call="website.layout">
|
||
<div id="wrap">
|
||
<div class="container">
|
||
<h1 class="mt-5">Something went wrong.</h1>
|
||
<p>Take a look at the error message below.</p>
|
||
</div>
|
||
<t t-if="editable or request.session.debug">
|
||
<t t-call="website.http_error_debug"/>
|
||
</t>
|
||
<t t-else="">
|
||
<div class="container">
|
||
<t t-call="website.error_message"/>
|
||
</div>
|
||
</t>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="403">
|
||
<t t-call="website.layout">
|
||
<div id="wrap">
|
||
<div class="container">
|
||
<h1 class="mt-5">403: Forbidden</h1>
|
||
<p>The page you were looking for could not be authorized.</p>
|
||
</div>
|
||
<t t-if="editable or request.session.debug">
|
||
<t t-call="website.http_error_debug"/>
|
||
</t>
|
||
<t t-else="">
|
||
<div class="container">
|
||
<t t-call="website.error_message"/>
|
||
</div>
|
||
</t>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="404">
|
||
<t t-call="website.layout">
|
||
<div id="wrap">
|
||
<t t-raw="0"/>
|
||
<div class="oe_structure oe_empty">
|
||
<div class="container">
|
||
<h1 class="mt-5">404: Page not found!</h1>
|
||
<p>
|
||
The page you were looking for could not be found; it is possible you have
|
||
typed the address incorrectly, but it has most probably been removed due
|
||
to the recent website reorganisation.
|
||
</p>
|
||
<p>Maybe you were looking for one of these popular pages ?</p>
|
||
<ul>
|
||
<li><a href="/">Homepage</a></li>
|
||
<li><a href="/contactus">Contact Us</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="500">
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- This template should not use any variable except those provided by website.ir_http._handle_exception -->
|
||
<!-- no request.crsf_token, no theme style, no assets, ... cursor can be broken during rendering ! -->
|
||
<!-- see test_05_reset_specific_view_controller_broken_request -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<html>
|
||
<head>
|
||
<title t-esc="status_message">Internal Server Error</title>
|
||
<t t-set="debug" t-value="True"/>
|
||
|
||
<link rel="stylesheet" href="/web/static/lib/bootstrap/css/bootstrap.css"/>
|
||
<script src="/web/static/lib/jquery/jquery.js" type="text/javascript"/>
|
||
<script type="text/javascript" src="/web/static/lib/bootstrap/js/util.js"/>
|
||
<script type="text/javascript" src="/web/static/lib/bootstrap/js/collapse.js"/>
|
||
<script type="text/javascript" src="/web/static/lib/bootstrap/js/modal.js"/>
|
||
<style>
|
||
html {
|
||
font-size: 14px;
|
||
}
|
||
</style>
|
||
|
||
<t t-if='view'>
|
||
<script>
|
||
$(document).ready(function() {
|
||
var button = $('.reset_templates_button');
|
||
button.click(function() {
|
||
$('#reset_templates_mode').val($(this).data('mode'));
|
||
var dialog = $('#reset_template_confirmation').modal('show');
|
||
var input = dialog.find('input[type="text"]').val('').focus();
|
||
var dialog_form = dialog.find('form');
|
||
dialog_form.submit(function() {
|
||
if (input.val() == dialog.find('.confirm_word').text()) {
|
||
dialog.modal('hide');
|
||
button.prop('disabled', true).text('Working...');
|
||
$('#reset_templates_form').attr('action', '/website/reset_template');
|
||
$('#reset_templates_form').trigger('submit');
|
||
} else {
|
||
input.val('').focus();
|
||
}
|
||
return false;
|
||
});
|
||
return false;
|
||
});
|
||
});
|
||
</script>
|
||
</t>
|
||
</head>
|
||
<body>
|
||
<div t-if="view" role="dialog" id="reset_template_confirmation" class="modal" tabindex="-1" t-ignore="true">
|
||
<div class="modal-dialog">
|
||
<form role="form">
|
||
<div class="modal-content">
|
||
<header class="modal-header">
|
||
<h4 class="modal-title">Reset templates</h4>
|
||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
|
||
</header>
|
||
<main class="modal-body">
|
||
<div class="form-group row mb0">
|
||
<label for="page-name" class="col-md-12 col-form-label">
|
||
<p>The selected templates will be reset to their factory settings.</p>
|
||
</label>
|
||
</div>
|
||
<div class="form-group row mb0">
|
||
<label for="page-name" class="col-md-9 col-form-label">
|
||
<p>Type '<i class="confirm_word">yes</i>' in the box below if you want to confirm.</p>
|
||
</label>
|
||
<div class="col-md-3 mt16">
|
||
<input type="text" id="page-name" class="form-control" required="required" placeholder="yes"/>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
<footer class="modal-footer">
|
||
<button type="button" class="btn" data-dismiss="modal" aria-label="Cancel">Cancel</button>
|
||
<input type="submit" value="Confirm" class="btn btn-primary"/>
|
||
</footer>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="wrapwrap">
|
||
<header>
|
||
<div class="navbar navbar-expand-md navbar-light bg-light">
|
||
<div class="container">
|
||
<div class="collapse navbar-collapse navbar-top-collapse">
|
||
<ul class="navbar-nav ml-auto" id="top_menu">
|
||
<li class="nav-item"><a href="/" class="nav-link">Home</a></li>
|
||
<li class="nav-item"><a href="javascript: window.history.back()" class="nav-link">Back</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<main>
|
||
<div class="oe_structure">
|
||
<h2 class="container mt32"><t t-esc="status_code"/>: <t t-esc="status_message"/></h2>
|
||
</div>
|
||
<div class="container" t-if="view and editable">
|
||
<div class="alert alert-danger" t-if="debug" role="alert">
|
||
<h4>Template fallback</h4>
|
||
<p>An error occured while rendering the template <code t-esc="qweb_exception.name"/>.</p>
|
||
<p>If this error is caused by a change of yours in the templates, you have the possibility to reset the template to its <strong>factory settings</strong>.</p>
|
||
<form action="#" method="post" id="reset_templates_form">
|
||
<ul>
|
||
<li>
|
||
<label>
|
||
<t t-esc="view.name"/>
|
||
</label>
|
||
</li>
|
||
</ul>
|
||
<input type="hidden" name="redirect" t-att-value="request.httprequest.path"/>
|
||
<input type="hidden" id="reset_templates_view_id" name="view_id" t-att-value="view.id"/>
|
||
<input type="hidden" id="reset_templates_mode" name="mode"/>
|
||
<button data-mode="soft" class="reset_templates_button btn btn-info">Restore previous version (soft reset).</button>
|
||
<button t-if="view.arch_fs" data-mode="hard" class="reset_templates_button btn btn-outline-danger">Reset to initial version (hard reset).</button>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<t t-if="editable or debug">
|
||
<t t-call="website.http_error_debug"/>
|
||
</t>
|
||
</main>
|
||
</div>
|
||
</body>
|
||
</html>
|
||
</template>
|
||
|
||
<template id="robots">
|
||
User-agent: *
|
||
Sitemap: <t t-esc="url_root"/>sitemap.xml
|
||
</template>
|
||
|
||
<template id="sitemap_locs">
|
||
<url t-foreach="locs" t-as="page">
|
||
<loc><t t-esc="url_root"/><t t-esc="page['loc']"/></loc><t t-if="page.get('lastmod', False)">
|
||
<lastmod t-esc="page['lastmod']"/></t><t t-if="page.get('priority', False)">
|
||
<priority t-esc="page['priority']"/></t><t t-if="page.get('changefreq', False)">
|
||
<changefreq t-esc="page['changefreq']"/></t>
|
||
</url>
|
||
</template>
|
||
|
||
<template id="sitemap_xml"><?xml version="1.0" encoding="UTF-8"?>
|
||
<urlset t-attf-xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||
<t t-raw="content"/>
|
||
</urlset>
|
||
</template>
|
||
|
||
<template id="sitemap_index_xml"><?xml version="1.0" encoding="UTF-8"?>
|
||
<sitemapindex t-attf-xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||
<sitemap t-translation="off" t-foreach="pages" t-as="page">
|
||
<loc><t t-esc="url_root"/>sitemap-<t t-esc="page"/>.xml</loc>
|
||
</sitemap>
|
||
</sitemapindex>
|
||
</template>
|
||
|
||
<template id="company_description" name="Company Description">
|
||
<address itemscope="itemscope" itemtype="http://schema.org/Organization">
|
||
<!-- TODO widget contact must add itemprop attributes -->
|
||
<div t-field="res_company.partner_id" t-options='{
|
||
"widget": "contact",
|
||
"fields": ["name", "address", "phone", "mobile", "email"]}'/>
|
||
<t t-if="not res_company.google_map_img()">
|
||
<span class="fa fa-map-marker fa-fw mt16" role="img" aria-label="Address" title="Address"/> <a t-att-href="res_company.google_map_link()" target="_BLANK"> Google Maps</a>
|
||
</t>
|
||
</address>
|
||
<t t-if="res_company.google_map_img()">
|
||
<a t-att-href="res_company.google_map_link()" target="_BLANK">
|
||
<img class="img-fluid" t-att-src="res_company.google_map_img()" alt="Google Maps"/>
|
||
</a>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="website_search_box" name="Website Searchbox">
|
||
<div class="input-group">
|
||
<input type="text" name="search" class="search-query form-control oe_search_box" placeholder="Search..." t-att-value="search"/>
|
||
<div class="input-group-append">
|
||
<button type="submit" class="btn btn-primary oe_search_button" aria-label="Search" title="Search"><i class="fa fa-search"/></button>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="index_management">
|
||
<t groups="website.group_website_publisher" t-ignore="true">
|
||
<div t-attf-class="float-right js_index_management #{object.website_indexed and 'css_published' or 'css_unpublished'}" t-att-data-id="object.id" t-att-data-object="object._name">
|
||
<button class="btn btn-danger js_index_btn">Unindexed</button>
|
||
<button class="btn btn-success js_index_btn">Indexed</button>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="list_website_pages" name="Website Pages Management">
|
||
<t t-call="website.layout">
|
||
<div id="wrap">
|
||
<div class="container" id="list_website_pages">
|
||
<form class="mt8 float-right" role="search" t-attf-action="/website/pages" method="get">
|
||
<t t-call="website.website_search_box"/>
|
||
</form>
|
||
<div t-if="searchbar_sortings" class="dropdown float-right mt8 mr8">
|
||
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown">
|
||
<span class="fa fa-sort fa-lg" role="img" aria-label="Sort" title="Sort"/>
|
||
<span class="d-none d-xl-inline" t-esc="searchbar_sortings[sortby].get('label', 'Newest')"/>
|
||
</button>
|
||
<div class="dropdown-menu" aria-labelledby="portal_searchbar_sortby" role="menu">
|
||
<t t-foreach="searchbar_sortings" t-as="option">
|
||
<a role="menuitem"
|
||
t-att-href="request.httprequest.path + '?' + keep_query('*', sortby=option)"
|
||
t-attf-class="dropdown-item#{sortby == option and ' active' or ''}">
|
||
<span t-esc="searchbar_sortings[option].get('label')"/>
|
||
</a>
|
||
</t>
|
||
</div>
|
||
</div>
|
||
<h3 class="mt16">Manage Your Pages</h3>
|
||
<t t-if="not pages">
|
||
<div t-if="search" class="alert alert-warning mt8" role="alert">
|
||
Your search '<t t-esc="search" />' did not match any pages.
|
||
</div>
|
||
<div t-else="" class="alert alert-warning mt8" role="alert">
|
||
There are currently no pages for your website.
|
||
</div>
|
||
</t>
|
||
<div t-if="pages" class="table-responsive">
|
||
<table class="table table-hover">
|
||
<thead>
|
||
<tr>
|
||
<th>Name</th>
|
||
<th>Url</th>
|
||
<th class="text-center"><i title="Is the page included in the main menu?" class="fa fa-thumb-tack"></i></th>
|
||
<th class="text-center"><i title="Is the page published?" class="fa fa-eye"></i></th>
|
||
<th class="text-center"><i title="Is the page indexed by search engines?" class="fa fa-globe"></i></th>
|
||
<th class="text-center"><i title="Is the page SEO optimized?" class="fa fa-search"></i></th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<t t-set='prev_page' t-value='False' />
|
||
<t t-set='page' t-value='pages[0]' />
|
||
<t t-foreach="pages[1:]" t-as="next_page">
|
||
<t t-call='website.one_page_line'/>
|
||
<t t-set='prev_page' t-value='page' />
|
||
<t t-set='page' t-value='next_page' />
|
||
</t>
|
||
|
||
<t t-set='next_page' t-value='False'/>
|
||
<t t-call='website.one_page_line' />
|
||
</table>
|
||
</div>
|
||
<div t-if="pager" class="o_portal_pager text-center">
|
||
<t t-call="website.pager"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="one_page_line">
|
||
<t t-set='specific_page' t-value="page.website_id"/>
|
||
<t t-set='final_page' t-value="(next_page and page.url != next_page.url) or not next_page or specific_page"/>
|
||
<tr t-att-style='not final_page and "color:#999"'>
|
||
<td>
|
||
<t groups="website.group_multi_website">
|
||
<i t-if='specific_page and prev_page and prev_page.url == page.url and not prev_page.website_id' class="fa fa-level-up fa-rotate-90 ml32 mr4"/>
|
||
<i t-else="1" class="fa fa-globe mr4" t-att-style="'visibility:hidden;' if specific_page else ''"/>
|
||
</t>
|
||
<i t-if="page.is_homepage" class="fa fa-home" title="Home"/> <span t-esc="page.name"/>
|
||
</td>
|
||
<td>
|
||
<a t-if='final_page' t-att-href="page.url"><t t-esc="page.url"/></a>
|
||
</td>
|
||
<td class="text-center">
|
||
<i t-if="page.menu_ids" class="fa fa-check" title="In main menu"/>
|
||
<i t-else="" class="fa fa-times text-muted" title="Not in main menu"/>
|
||
</td>
|
||
<td class="text-center">
|
||
<t t-set='date_formatted'><t t-options='{"widget": "date"}' t-esc="page.date_publish"/></t>
|
||
<i t-if="page.is_visible" class="fa fa-check" title="Visible"/>
|
||
<i t-elif="page.website_published" class="fa fa-eye-slash" t-attf-title="This page will be visible on {{ date_formatted }}"/>
|
||
<i t-else="" class="fa fa-times text-muted" title="Not visible"/>
|
||
</td>
|
||
<td class="text-center">
|
||
<i t-if="page.website_indexed" class="fa fa-check" title="Indexed"/>
|
||
<i t-else="" class="fa fa-times text-muted" title="Not indexed"/>
|
||
</td>
|
||
<td class="text-center">
|
||
<i t-if="page.is_seo_optimized" class="fa fa-check" title="SEO optimized"/>
|
||
<i t-else="" class="fa fa-times text-muted" title="Not SEO optimized"/>
|
||
</td>
|
||
<td class="text-right" style="white-space:nowrap;">
|
||
<a class="mr4 fa fa-cog js_page_properties" href="#" t-att-data-id="page.id" title="Manage this page"/>
|
||
<a class="mr4 fa fa-search" t-attf-href="{{ page.url}}?enable_seo" title="Optimize SEO of this page"/>
|
||
<a groups="base.group_no_one" class="mr4 fa fa-bug" t-attf-href="/web#id=#{page.view_id.id}&view_type=form&model=ir.ui.view" title="Edit code in backend"/>
|
||
<a class="mr4 fa fa-clone js_clone_page" t-att-data-id="page.id" href="#" title="Clone this page"/>
|
||
<a class="fa fa-trash js_delete_page" t-att-data-id="page.id" href="#" title="Delete this page"/>
|
||
</td>
|
||
</tr>
|
||
</template>
|
||
|
||
</odoo>
|