1004 lines
49 KiB
XML
1004 lines
49 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<flectra>
|
||
<!-- Assets -->
|
||
<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" href="/website/static/src/less/website.backendDashboard.less"/>
|
||
</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"/>
|
||
<script type="text/javascript" src="/website/static/src/js/tours/rte.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" inherit_id="web.assets_frontend" name="Website Assets">
|
||
<xpath expr="//link[last()]" position="after">
|
||
<link rel="stylesheet" type="text/less" href="/website/static/src/less/website.ui.components.less"/>
|
||
<link rel="stylesheet" type="text/less" href="/website/static/src/less/website.snippets.less"/>
|
||
<link rel="stylesheet" type="text/less" href="/website/static/src/less/website.zoomflectra.less"/>
|
||
</xpath>
|
||
<xpath expr="//script[last()]" position="after">
|
||
<script type="text/javascript" src="/website/static/src/js/utils.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/website.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/snippets.animation.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/content/website_root.js"/>
|
||
<script type="text/javascript" src="/website/static/src/js/content/zoomflectra.js"/>
|
||
|
||
<script type="text/javascript" src="/website/static/src/js/menu/navbar.js"/>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="website.assets_editor" name="Website Editor Assets (used in website editor)">
|
||
<t t-call="web.less_helpers"/>
|
||
|
||
<link rel="stylesheet" type="text/less" href="/website/static/src/less/website.edit_mode.less"/>
|
||
|
||
<script type="text/javascript" src="/website/static/lib/jQuery.transfo.js"/>
|
||
|
||
<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/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/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/planner.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/rte.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">
|
||
<li t-if="submenu.is_visible and not submenu.child_id.filtered(lambda menu: menu.is_visible)" t-att-class="
|
||
'active' if submenu.clean_url() and unslug_url(request.httprequest.path) == unslug_url(submenu.clean_url()) else None
|
||
">
|
||
<a t-att-href="submenu.clean_url()" t-ignore="true" t-att-target="'_blank' if submenu.new_window else None">
|
||
<span t-field="submenu.name"/>
|
||
</a>
|
||
</li>
|
||
<li t-if="submenu.is_visible and submenu.child_id.filtered(lambda menu: menu.is_visible)" t-attf-class="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'
|
||
}">
|
||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||
<span t-field="submenu.name"/> <span class="caret" t-ignore="true"></span>
|
||
</a>
|
||
<ul class="dropdown-menu" role="menu">
|
||
<t t-foreach="submenu.child_id" t-as="submenu">
|
||
<t t-call="website.submenu"/>
|
||
</t>
|
||
</ul>
|
||
</li>
|
||
</template>
|
||
|
||
<template id="layout" name="Main layout" inherit_id="portal.frontend_layout">
|
||
<xpath expr="//t[@t-set='head_website']" 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-main-object': repr(main_object) if editable or translatable else None,
|
||
'data-oe-company-name': res_company.name
|
||
}"/>
|
||
<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-if="main_object and 'website_meta_title' in main_object and main_object.website_meta_title">
|
||
<t t-set="title" t-value="main_object.website_meta_title"/>
|
||
</t>
|
||
<t t-else="">
|
||
<t t-set="title"><t t-if="additional_title"><t t-raw="additional_title"/> | </t><t t-raw="(website or res_company).name"/></t>
|
||
</t>
|
||
</t>
|
||
<t t-set="x_icon" t-value="'/web/image/website/%s/favicon/' % website.id"/>
|
||
</xpath>
|
||
<xpath expr="//t[@t-set='head_website']" position="replace">
|
||
<t t-set="head_website">
|
||
<meta t-if="main_object and 'website_indexed' in main_object
|
||
and not main_object.website_indexed" name="robots" content="noindex"/>
|
||
<meta name="description" t-att-content="main_object and 'website_meta_description' in main_object
|
||
and main_object.website_meta_description or website_meta_description"/>
|
||
<meta name="keywords" t-att-content="main_object and 'website_meta_keywords' in main_object
|
||
and main_object.website_meta_keywords or website_meta_keywords"/>
|
||
<meta name="generator" content="Flectra"/>
|
||
|
||
<!-- OpenGraph tags for Facebook sharing -->
|
||
<meta property="og:title" t-att-content="additional_title" />
|
||
<meta property="og:site_name" t-att-content="res_company.name" />
|
||
<t t-if="main_object and 'plain_content' in main_object and main_object.plain_content">
|
||
<t t-set="og_description" t-value="main_object.plain_content[0:500]"/>
|
||
<meta property="og:description" t-att-content="og_description" />
|
||
<meta property='og:image' t-att-content="request.httprequest.url_root+'logo.png'"/>
|
||
<meta property='og:url' t-att-content="request.httprequest.url_root+request.httprequest.path[1:end]"/>
|
||
</t>
|
||
|
||
<t t-set="languages" t-value="website.get_languages() if website else None"/>
|
||
<t t-if="request and request.is_frontend_multilang and website">
|
||
<t t-foreach="website.get_alternate_languages(request.httprequest)" t-as="lg">
|
||
<link rel="alternate" t-att-hreflang="lg['hreflang']" t-att-href="lg['href']"/>
|
||
</t>
|
||
</t>
|
||
|
||
<script type="text/javascript">
|
||
<t groups="website.group_website_publisher">
|
||
flectra.snippetsURL = '/website/snippets';
|
||
</t>
|
||
|
||
flectra.session_info = {
|
||
is_superuser: <t t-esc="json.dumps(request.env.user._is_superuser())"/>,
|
||
is_system: <t t-esc="json.dumps(request.env.user._is_system())"/>,
|
||
is_frontend: true,
|
||
translationURL: '/website/translations',
|
||
is_website_user: <t t-esc="json.dumps(request.env.user.id == request.website.user_id.id)" />,
|
||
user_id: <t t-esc="json.dumps(request.env.user.id)" />
|
||
};
|
||
</script>
|
||
|
||
<t t-call-assets="web.assets_common" t-js="false"/>
|
||
<t t-call-assets="web.assets_frontend" t-js="false"/>
|
||
<t t-call-assets="web_editor.summernote" t-js="false" groups="website.group_website_publisher"/>
|
||
<t t-call-assets="web_editor.assets_editor" t-js="false" groups="website.group_website_publisher"/>
|
||
<t t-call-assets="website.assets_editor" t-js="false" groups="website.group_website_publisher"/>
|
||
|
||
<t t-call-assets="web.assets_common" t-css="false"/>
|
||
<t t-call-assets="web.assets_frontend" t-css="false"/>
|
||
<t t-call-assets="web_editor.summernote" t-css="false" groups="website.group_website_publisher"/>
|
||
<t t-call-assets="web_editor.assets_editor" t-css="false" groups="website.group_website_publisher"/>
|
||
<t t-call-assets="website.assets_editor" t-css="false" groups="website.group_website_publisher"/>
|
||
</t>
|
||
</xpath>
|
||
<xpath expr="//header//div[hasclass('navbar-header')]" position="replace">
|
||
<div class="navbar-header">
|
||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-top-collapse">
|
||
<span class="sr-only">Toggle navigation</span>
|
||
<span class="icon-bar"></span>
|
||
<span class="icon-bar"></span>
|
||
<span class="icon-bar"></span>
|
||
</button>
|
||
<a class="navbar-brand" href="/" t-if="website" t-field="website.name">My Website</a>
|
||
</div>
|
||
</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>
|
||
</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>
|
||
</template>
|
||
|
||
<template id="menu_snippets" name="Menu View">
|
||
<nav>
|
||
<div class="container">
|
||
<div class="navbar-header"/>
|
||
<ul id="nav_menu" class="nav navbar-nav navbar-right">
|
||
<t t-foreach="menu.child_id" t-as="submenu">
|
||
<t t-call="website.recursive_menu_snippets"/>
|
||
</t>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
</template>
|
||
|
||
<template id="recursive_menu_snippets" name="Recursive Menu">
|
||
<li t-if="not submenu.child_id">
|
||
<a t-att-href="submenu.url" t-ignore="true"
|
||
t-att-target="submenu.new_window or '_blank'">
|
||
<span t-esc="submenu.name"/>
|
||
</a>
|
||
</li>
|
||
<li t-if="submenu.child_id" >
|
||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||
<span t-esc="submenu.name"/>
|
||
<span class="caret" t-ignore="true"/>
|
||
</a>
|
||
<ul class="dropdown-menu" role="menu">
|
||
<t t-foreach="submenu.child_id" t-as="submenu">
|
||
<t t-call="website.submenus"/>
|
||
</t>
|
||
</ul>
|
||
</li>
|
||
</template>
|
||
|
||
<template id="layout_footer_copyright" inherit_id="website.layout" name="Footer Copyright">
|
||
<xpath expr="//footer" position="inside">
|
||
<div class="container mt16 mb8">
|
||
<div class="pull-right" t-ignore="true" t-if="not editable">
|
||
Create a <a target="_blank" href="http://www.flectra.com/page/website-builder">free website</a> with
|
||
<a target="_blank" class="label label-danger" href="http://www.flectra.com/page/website-builder">Flectra</a>
|
||
</div>
|
||
<div class="pull-left text-muted" itemscope="itemscope" itemtype="http://schema.org/Organization">
|
||
Copyright &copy; <span t-field="res_company.name" itemprop="name">Company name</span>
|
||
</div>
|
||
</div>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="layout_logo_show" inherit_id="website.layout" customize_show="True" name="Show Logo">
|
||
<xpath expr="//header//a[hasclass('navbar-brand')]" position="replace">
|
||
<a href="/" class="navbar-brand logo">
|
||
<span t-field="res_company.logo" t-options="{'widget': 'image'}" t-att-alt="'Logo of %s' % res_company.name" t-att-title="res_company.name" />
|
||
</a>
|
||
</xpath>
|
||
</template>
|
||
|
||
<record id="portal.portal_show_sign_in" model="ir.ui.view">
|
||
<field name="customize_show" eval="True"/>
|
||
</record>
|
||
|
||
<!-- Features template -->
|
||
<template id="login_layout" inherit_id="web.login_layout" name="Website Login Layout">
|
||
<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 class="oe_structure" id="footer" t-if='not no_footer'>
|
||
<section>
|
||
<div class="container">
|
||
<div class="row">
|
||
<div class="col-md-4">
|
||
<h4 class="mt16">Subtitle</h4>
|
||
<p>
|
||
<a href="/">Homepage</a>
|
||
</p>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<h4 class="mt16">Subtitle 2</h4>
|
||
<p>
|
||
...
|
||
</p>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<h4 class="mt16">Subtitle 3</h4>
|
||
<p>
|
||
...
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</xpath>
|
||
</template>
|
||
|
||
<template id="language_selector">
|
||
<ul class="list-inline js_language_selector mt16" t-if="(request and request.is_frontend_multilang and len(languages) > 1) or (website and (editable or translatable))">
|
||
<li t-foreach="languages" t-as="lg">
|
||
<a
|
||
t-att-href="url_for(request.httprequest.path + '?' + keep_query(), lang=lg[0])"
|
||
t-att-data-default-lang="(editable or translatable) and 'true' if website and lg[0] == website.default_lang_code else None"
|
||
t-att-data-lang="lg[0]"
|
||
class="js_change_lang"
|
||
>
|
||
<t t-esc="lg[1].split('/').pop()"/>
|
||
</a>
|
||
</li>
|
||
<li groups="website.group_website_publisher">
|
||
<t t-set="url_return" t-value="url_for('', '[lang]') + '?' + keep_query()"/>
|
||
<a 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>
|
||
|
||
<template id="language_flags" name="Language Flags">
|
||
<li
|
||
t-if="(request and request.is_frontend_multilang and len(languages) > 1) or (website and (editable or translatable))"
|
||
class="dropdown language_dropdown">
|
||
<a href="#" class="dropdown-toggle language_flag" data-toggle="dropdown">
|
||
<t t-foreach="website.language_ids" t-as="lg">
|
||
<t t-if="request.context.get('lang') == lg.code">
|
||
<img t-att-src="website.image_url(lg, 'lang_flag')" height="30"
|
||
width="30" t-att-title="lg.name" />
|
||
</t>
|
||
</t>
|
||
<span class="caret"></span>
|
||
</a>
|
||
<ul class="dropdown-menu" role="menu" style="min-width: 80px;">
|
||
<li t-foreach="website.language_ids" t-as="lg">
|
||
<a
|
||
t-att-href="url_for(request.httprequest.path + '?' + keep_query(), lang=lg.code)"
|
||
t-att-data-default-lang="(editable or translatable) and 'true' if website and lg.code == website.default_lang_code else None"
|
||
t-att-data-lang="lg.code" t-att-data-lang_dir="lg.direction" class="js_change_lang">
|
||
<img t-att-src="website.image_url(lg, 'lang_flag')" height="30" width="30" t-att-title="lg.code" />
|
||
<t t-esc="lg.name.split('/').pop()"/>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</template>
|
||
|
||
<template id="footer_default" inherit_id="website.footer_custom" customize_show="True" name="Automatic Footer">
|
||
<xpath expr="//div[@id='footer']" position="replace" >
|
||
<div id="footer" class="container hidden-print" t-if='not no_footer'>
|
||
<div class="row">
|
||
<div class="col-md-4 col-lg-3">
|
||
<h4>Our Products & Services</h4>
|
||
<ul class="list-unstyled" id="products">
|
||
<li><a href="/">Home</a></li>
|
||
</ul>
|
||
</div>
|
||
<div class="col-md-4 col-lg-3" id="info">
|
||
<h4>Connect with us</h4>
|
||
<ul class="list-unstyled">
|
||
<li><a href="/contactus">Contact us</a></li>
|
||
</ul>
|
||
<ul class="list-unstyled">
|
||
<li t-ignore="true"><i class="fa fa-phone"></i> <span t-field="res_company.phone"></span></li>
|
||
<li t-ignore="true"><i class="fa fa-envelope"></i> <span t-field="res_company.email"></span></li>
|
||
</ul>
|
||
<h2>
|
||
<a t-att-href="website.social_facebook" t-if="website.social_facebook"><i class="fa fa-facebook-square"/></a>
|
||
<a t-att-href="website.social_twitter" t-if="website.social_twitter"><i class="fa fa-twitter"/></a>
|
||
<a t-att-href="website.social_linkedin" t-if="website.social_linkedin"><i class="fa fa-linkedin"/></a>
|
||
<a t-att-href="website.social_youtube" t-if="website.social_youtube"><i class="fa fa-youtube-play"/></a>
|
||
<a t-att-href="website.social_googleplus" t-if="website.social_googleplus" rel="publisher"><i class="fa fa-google-plus-square"/></a>
|
||
<a t-att-href="website.social_github" t-if="website.social_github"><i class="fa fa-github"/></a>
|
||
</h2>
|
||
</div>
|
||
<div class="col-md-4 col-lg-5 col-lg-offset-1">
|
||
<h4>
|
||
<span t-field="res_company.name" />
|
||
<small> - <a href="/aboutus">About us</a></small>
|
||
</h4>
|
||
<div>
|
||
<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>
|
||
<t t-call="website.language_selector"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</xpath>
|
||
</template>
|
||
|
||
<!-- Util template -->
|
||
<template id="publish_management">
|
||
<div groups="website.group_website_publisher" t-ignore="true" class="pull-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" t-att-id="'dopprod-%s' % object.id" data-toggle="dropdown">
|
||
<span class="caret"></span>
|
||
</button>
|
||
<ul class="dropdown-menu" role="menu" t-att-aria-labelledby="'dopprod-%s' % object.id">
|
||
<t t-raw="0"/>
|
||
<li t-if="publish_edit">
|
||
<a t-attf-href="/web#return_label=Website&view_type=form&model=#{object._name}&id=#{object.id}&action=#{action}"
|
||
title='Edit in backend'>Edit</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="publish_short">
|
||
<t groups="website.group_website_publisher" t-ignore="true">
|
||
<div t-attf-class="pull-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>
|
||
|
||
<!--
|
||
Customize Themes
|
||
|
||
Use INPUT type 'checkbox' or 'radio' or use OPTION in select box
|
||
'data-xmlid' (optional) xml id of the template to add if the input is checked.
|
||
You can set a list of xml id separate by comma (all template is enable or
|
||
disable in same time)
|
||
'data-enable' (optional) to checked one or more HTML ids, or list separate by comma
|
||
'data-disable' (optional) to unchecked one or more HTML ids, or list separate by comma
|
||
'data-reload="/"' (optional) force the reloading of the page if the url match with
|
||
the string ( = regexp).
|
||
Otherwise, only the '/web/content/web.assets_frontend' is reloaded
|
||
|
||
For the sets (data-enable and/or data-disable without data-xmlid), the set is
|
||
automatically checked if:
|
||
- all related fields are enabled for data-enable
|
||
- all related fields are disabled for data-disable
|
||
else unchecked
|
||
|
||
HTML apply classes:
|
||
- 'checked': on the parent label when input is checked
|
||
- 'in': on the container (e.g.: bootstrap modal) after added in DOM (removed together
|
||
out is added)
|
||
- 'out': on the container 1 second before removed from ths DOM
|
||
- 'loading': on the container/modal when the new css is loading
|
||
-->
|
||
<template id="website.theme_customize" name="Theme Modal for Customization">
|
||
<div id="theme_customize_modal" class="modal fade">
|
||
<div class="modal-dialog">
|
||
<div class="modal-content">
|
||
<div class="modal-header text-center">
|
||
<h4 class="modal-title">Please install a theme in order to customize your website.</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</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">
|
||
<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="Flectra 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 Flectra 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>Flectra Version <t t-raw="version.get('server_version')"/></small>
|
||
</h1>
|
||
<p>
|
||
Information about the <t t-esc="res_company.name"/> instance of Flectra, the <a target="_blank" href="https://www.flectra.com">Open Source ERP</a>.
|
||
</p>
|
||
|
||
<div class="alert alert-warning alert-dismissable mt16" groups="website.group_website_publisher">
|
||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&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: @flectra-brand-primary;
|
||
}
|
||
</style>
|
||
</template>
|
||
<template id="default_csv">
|
||
1,2,3
|
||
</template>
|
||
|
||
<template id="page_404">
|
||
<t t-call="website.404">
|
||
<div class="container">
|
||
<div class="well mt32">
|
||
<p>This page does not exist, but you can create it as you are administrator of this site.</p>
|
||
<a 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 request.debug">
|
||
<t t-call="website.http_error_debug"/>
|
||
</t>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="http_error_debug">
|
||
<div class="container panel-group mb32 mt32" id="debug_infos">
|
||
<div class="panel panel-default" t-if="exception">
|
||
<div class="panel-heading">
|
||
<h4 class="panel-title">
|
||
<a data-toggle="collapse" data-parent="#debug_infos" href="#error_main">
|
||
Error
|
||
</a>
|
||
</h4>
|
||
</div>
|
||
<div id="error_main" class="panel-collapse collapse in">
|
||
<div class="panel-body">
|
||
<p t-if="website_controller">The following error was raised in the website controller <code t-esc="website_controller"/></p>
|
||
<p>
|
||
<strong>Error message:</strong>
|
||
<pre t-esc="exception"/>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="panel panel-default" t-if="qweb_exception">
|
||
<div class="panel-heading">
|
||
<h4 class="panel-title">
|
||
<a data-toggle="collapse" data-parent="#adebug_infos" href="#error_qweb">
|
||
QWeb
|
||
</a>
|
||
</h4>
|
||
</div>
|
||
<div id="error_qweb" class="panel-collapse collapse">
|
||
<div class="panel-body">
|
||
<p t-if="exception.qweb.get('message')">
|
||
<strong>Error message:</strong>
|
||
<pre t-esc="exception.qweb.get('message')"/>
|
||
</p>
|
||
<p>
|
||
The error occured while rendering the template <code t-esc="qweb_exception.qweb.get('template')"/>
|
||
<t t-if="'expression' in qweb_exception.qweb">and evaluating the following expression: <code t-esc="qweb_exception.qweb['expression']"/></t>
|
||
</p>
|
||
<t t-if="'node' in qweb_exception.qweb">
|
||
<pre id="exception_node" t-esc="qweb_exception.pretty_xml()"/>
|
||
</t>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="panel panel-default" t-if="traceback">
|
||
<div class="panel-heading">
|
||
<h4 class="panel-title">
|
||
<a data-toggle="collapse" data-parent="#adebug_infos" href="#error_traceback">
|
||
Traceback
|
||
</a>
|
||
</h4>
|
||
</div>
|
||
<div id="error_traceback" class="panel-collapse collapse">
|
||
<div class="panel-body">
|
||
<pre id="exception_traceback" t-esc="traceback"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="403">
|
||
<t t-call="website.layout">
|
||
<div id="wrap">
|
||
<div class="container">
|
||
<h1 class="mt32">403: Forbidden</h1>
|
||
<p>The page you were looking for could not be authorized.</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>
|
||
<t t-if="editable or request.debug">
|
||
<t t-call="website.http_error_debug"/>
|
||
</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="mt32">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>
|
||
|
||
<t t-if="request.debug">
|
||
<t t-call="website.http_error_debug"/>
|
||
</t>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="500">
|
||
<!-- This template should not use any variable except those provided by website.ir_http._handle_exception -->
|
||
<html>
|
||
<head>
|
||
<title t-esc="status_message">Internal Server Error</title>
|
||
<t t-set="debug" t-value="True"/>
|
||
<t t-call-assets="web.assets_common" t-js="false"/>
|
||
<t t-call-assets="web.assets_frontend" t-js="false"/>
|
||
<t t-call-assets="web.assets_common" t-css="false"/>
|
||
<t t-call-assets="web.assets_frontend" t-css="false"/>
|
||
<script>
|
||
$(document).ready(function() {
|
||
var button = $('#reset_templates_button');
|
||
button.click(function() {
|
||
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').trigger('submit');
|
||
} else {
|
||
input.val('').focus();
|
||
}
|
||
return false;
|
||
});
|
||
return false;
|
||
});
|
||
});
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<div id="reset_template_confirmation" class="modal" tabindex="-1" role="dialog" aria-hidden="true" t-ignore="true">
|
||
<div class="modal-dialog">
|
||
<form class="form-horizontal" role="form">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||
<h3 class="modal-title">Reset templates</h3>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="form-group mb0">
|
||
<label for="page-name" class="col-sm-9">
|
||
<p>The selected templates will be reset to their factory settings.</p>
|
||
<p>Type '<i class="confirm_word">yes</i>' in the box below if you want to confirm.</p>
|
||
</label>
|
||
<div class="col-sm-3 mt16">
|
||
<input type="text" class="form-control" required="required" placeholder="yes"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<input type="submit" value="Confirm" class="btn btn-primary"/>
|
||
<button type="button" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="wrapwrap">
|
||
<header>
|
||
<div class="navbar navbar-default navbar-static-top">
|
||
<div class="container">
|
||
<div class="collapse navbar-collapse navbar-top-collapse">
|
||
<ul class="nav navbar-nav navbar-right" id="top_menu">
|
||
<li><a href="/">Home</a></li>
|
||
<li><a href="javascript: window.history.back()">Back</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<main>
|
||
<div class="oe_structure">
|
||
<h1 class="container mt32"><t t-esc="status_code"/>: <t t-esc="status_message"/></h1>
|
||
</div>
|
||
<div class="container" t-if="views">
|
||
<div class="alert alert-danger" t-if="qweb_exception and editable">
|
||
<h4>Template fallback</h4>
|
||
<p>An error occured while rendering the template <code t-esc="qweb_exception.qweb['template']"/>.</p>
|
||
<p>If this error is caused by a change of yours in the templates, you have the possibility to reset one or more templates to their <strong>factory settings</strong>.</p>
|
||
<form action="/website/reset_templates" method="post" id="reset_templates_form">
|
||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
||
<ul class="oe_template_fallback">
|
||
<li t-foreach="views" t-as="view">
|
||
<label>
|
||
<input type="checkbox" name="templates" t-att-value="view.id" t-att-checked="'checked' if view_first else None"/>
|
||
<t t-esc="view.name"/>
|
||
</label>
|
||
</li>
|
||
</ul>
|
||
<input type="hidden" name="redirect" t-att-value="request.httprequest.path"/>
|
||
<button id="reset_templates_button">Reset selected templates</button>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<t t-if="editable or request.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"/> <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="thumbnail img-responsive" t-att-src="res_company.google_map_img()" />
|
||
</a>
|
||
</t>
|
||
</template>
|
||
|
||
<template id="website_search_box" name="Website Searchbox">
|
||
<div class="input-group">
|
||
<div class="oe_search">
|
||
<input type="text" name="search" class="search-query form-control oe_search_box" placeholder="Search..." t-att-value="search" />
|
||
</div>
|
||
<span class="input-group-btn">
|
||
<button type="submit" class="btn btn-default oe_search_button"><i class="fa fa-search"/></button>
|
||
</span>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="index_management">
|
||
<t groups="website.group_website_publisher" t-ignore="true">
|
||
<div t-attf-class="pull-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="edit_website_pages" name="Website Pages Management">
|
||
<t t-call="website.layout">
|
||
<div id="wrap">
|
||
<div class="container" id="edit_website_pages">
|
||
<form class="mt8 pull-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 pull-right mt8 mr8">
|
||
<button class="btn btn-default" type="button" data-toggle="dropdown">
|
||
<span class="fa fa-sort fa-lg" />
|
||
<span class='hidden-xs hidden-sm hidden-md' t-esc="searchbar_sortings[sortby].get('label', 'Newest')"/>
|
||
<span class="caret"></span>
|
||
</button>
|
||
<ul class="dropdown-menu" aria-labelledby="portal_searchbar_sortby">
|
||
<li t-foreach="searchbar_sortings" t-as="option" t-attf-class="#{sortby == option and 'active'}">
|
||
<a t-att-href="request.httprequest.path + '?' + keep_query('*', sortby=option)">
|
||
<span t-esc="searchbar_sortings[option].get('label')"/>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</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 o_my_status_table">
|
||
<thead>
|
||
<tr class="active">
|
||
<th>Name</th>
|
||
<th>Url</th>
|
||
<th class="col-md-1 text-center"><i title="Is the page included in the main menu?" class="fa fa-thumb-tack" aria-hidden="true"></i></th>
|
||
<th class="col-md-1 text-center"><i title="Is the page published?" class="fa fa-eye" aria-hidden="true"></i></th>
|
||
<th class="col-md-1 text-center"><i title="Is the page indexed by search engines?" class="fa fa-globe" aria-hidden="true"></i></th>
|
||
<th class="col-sm-3 col-md-2"></th>
|
||
</tr>
|
||
</thead>
|
||
<t t-foreach="pages" t-as="page">
|
||
<tr>
|
||
<td><i t-if="page.is_homepage" class="fa fa-home"></i> <span style="word-break: break-all;" t-esc="page.name"/></td>
|
||
<td><a style="word-break: break-all;" t-attf-href="{{page.url}}"><t t-esc="page.url"/></a></td>
|
||
<td class="text-center"><i t-att-class="'fa fa-check' if page.menu_ids else 'fa fa-times text-muted'" aria-hidden="true"></i></td>
|
||
<t t-set='date_formatted'><t t-options='{"widget": "date"}' t-esc="page.date_publish"/></t>
|
||
<td class="text-center"><i t-att-title="not page.is_visible and page.website_published and 'This page will be visible on ' + date_formatted" t-att-class="'fa fa-check' if page.is_visible and page.website_published else 'fa fa-eye-slash' if not page.is_visible and page.website_published else 'fa fa-times text-muted'" aria-hidden="true"></i></td>
|
||
<td class="text-center"><i t-att-class="'fa fa-check' if page.website_indexed else 'fa fa-times text-muted'" aria-hidden="true"></i></td>
|
||
<td class="text-right">
|
||
<a class="mr4 fa fa-lg fa-cog js_page_properties" t-att-data-id="page.id" href="#" title="Manage this page"></a>
|
||
<a class="mr4 fa fa-lg fa-pencil-square-o" t-attf-href="/web#id=#{page.view_id.id}&view_type=form&model=ir.ui.view" title="Edit code in backend"></a>
|
||
<a class="mr4 fa fa-lg fa-clone js_clone_page" t-att-data-id="page.id" href="#" title="Clone this page"></a>
|
||
<a class="fa fa-lg fa-trash js_delete_page" t-att-data-id="page.id" href="#" title="Delete this page"></a>
|
||
</td>
|
||
</tr>
|
||
</t>
|
||
</table>
|
||
</div>
|
||
<div t-if="pager" class="o_portal_pager text-center">
|
||
<t t-call="website.pager"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</t>
|
||
</template>
|
||
|
||
</flectra>
|