Previously, customizing the website footer was not very easy. This
commit will allow users to customize the footer like any other
snippet area.
There are several behavior changes, as mentioned below:
- Removed toggles 'Automatic Footer' and 'Payment Icons' from the
Customize menu
- Language Selector was moved near the 'Copyright' section of the footer
and features a dropdown (dropup technically) to select the language
- Moved some footer links from various modules to top menu
List of the added menus / changed menus:
(a) Resellers (new menu for previous footer link 'Resellers')
(b) References (new menu for previous footer link 'Our References')
(c) Forums (renamed from 'Forum', as a replacement of 'Forums'
footer link, showing all the forums instead of 'Help', as there
is no link available to all forums after this commit)
(d) Live Support (new menu for previous footer link
'Livechat Support')
(e) Mailing Lists (new menu for previous footer link 'Mailing List')
(f) Members (new menu for previous footer link 'Members')
- Links which were already available as a website menus (Presentations,
Jobs, Events, News, Documentation, etc) are simply removed
Technical Notes:
- Introduced a new template called 'brand_promotion' in website.
This will help to avoid adding redundant footer content (like
copyright, language selector etc) from several modules (website_sale,
website_event, website_quote, etc) while the only intention is to
replace module page links.
- Removed summernote related fix in portal.less (caused by xpath)
because footer is now customizable and added padding to structure
instead of footer itself so that bg-color/img can be applied on
whole footer.
- Few of the tours are improved to drag and drop snippets at proper
places and not inside the footer.
- Used Flex in copyright portion of footer, so that text will always be
horizontally centered (Some themes have different padding for buttons,
etc, so if we don't align text dynamically, it has to be managed in
particular theme and in particular layouts like full-screen / boxed.
And if someone changes height of this portion, we have to re-design
this portion again, etc).
task-38069
Closes https://github.com/odoo/odoo/pull/22298
Co-authored-by: Dharmraj <dja@odoo.com>
733 lines
43 KiB
XML
733 lines
43 KiB
XML
<?xml version="1.0" ?>
|
|
<odoo>
|
|
<data>
|
|
|
|
<!-- assets -->
|
|
<template id="assets_frontend" inherit_id="website.assets_frontend" name="Slide">
|
|
<xpath expr="." position="inside">
|
|
<link rel="stylesheet" type="text/scss" href="/website_slides/static/src/scss/website_slides.scss" t-ignore="true"/>
|
|
<!-- Js widgets, ... order loading files is IMPORTANT -->
|
|
<script type="text/javascript" src="/website_slides/static/src/js/slides.js"/>
|
|
<script type="text/javascript" src="/website_slides/static/src/js/slides_upload.js"/>
|
|
</xpath>
|
|
</template>
|
|
|
|
<!-- Tools template: share on social networkds -->
|
|
<template id='slides_share' name="Slides Media Share">
|
|
<div class="form-group">
|
|
<a t-attf-href="https://www.facebook.com/sharer/sharer.php?u=#{slide.website_url}" class="o_slides_social_share" social-key="facebook"><i class="fa fa-facebook-square fa-2x"/></a>
|
|
<a t-attf-href="https://twitter.com/intent/tweet?text=#{slide.name}&url=#{slide.website_url}" class="o_slides_social_share" social-key="twitter"><i class="fa fa-twitter fa-2x"/></a>
|
|
<a t-attf-href="http://www.linkedin.com/shareArticle?mini=true&url=#{slide.website_url}&title=#{slide.name}&" social-key="linkedin" class="o_slides_social_share"><i class="fa fa-linkedin fa-2x"/></a>
|
|
<a t-attf-href="https://plus.google.com/share?url=#{slide.website_url}" class="o_slides_social_share" social-key="gplus"><i class="fa fa-google-plus-square fa-2x"/></a>
|
|
</div>
|
|
</template>
|
|
|
|
<!-- Channels View: main template, display list of available channels -->
|
|
<template id="channels" name="Channels">
|
|
<t t-call="website.layout">
|
|
<div class="container mt16">
|
|
<h1>Select a Channel</h1>
|
|
<div class="row">
|
|
<t t-foreach="channels" t-as="channel">
|
|
<div t-if="channel_index % 3 == 0" class="clearfix"/>
|
|
<div class="col-sm-4 mb32">
|
|
<div class="well well-sm">
|
|
<div>
|
|
<a t-attf-href="/slides/#{slug(channel)}">
|
|
<img t-if="channel.promoted_slide_id" t-attf-src="/web/image/slide.slide/#{channel.promoted_slide_id.id}/image_medium" class="img-responsive oe_slides_channel_thumbnail"/>
|
|
<img t-if="not channel.promoted_slide_id" src="/website_slides/static/src/img/channel-default.jpg" class="img-responsive oe_slides_opacity"/>
|
|
</a>
|
|
</div>
|
|
<div>
|
|
<div class="mt4 pull-right">
|
|
<t t-call="website.publish_management">
|
|
<t t-set="object" t-value="channel"/>
|
|
<t t-set="publish_edit" t-value="True"/>
|
|
<t t-set="action" t-value="'website_slides.action_slide_channels'"/>
|
|
</t>
|
|
</div>
|
|
<h3 class="mt4 mb4 lead" t-att-title="channel.name" style="width:55%">
|
|
<a t-attf-href="/slides/#{slug(channel)}" t-esc="channel.name"/>
|
|
</h3>
|
|
<span class="label label-warning" t-if="not channel.can_see_full">Private channel</span>
|
|
</div>
|
|
<div>
|
|
<p class="text-muted oe_no_empty" t-field="channel.description"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<!-- Channels View: option: subscription -->
|
|
<template id="opt_subscription_on_channels" name="Subscription" customize_show="True" inherit_id="website_slides.channels">
|
|
<xpath expr="//p[@t-field='channel.description']" position="after">
|
|
<t t-if="channel.can_see_full">
|
|
<t t-call="website_mail.follow">
|
|
<t t-set="email" t-value="user.email"/>
|
|
<t t-set="object" t-value="channel"/>
|
|
</t>
|
|
</t>
|
|
</xpath>
|
|
</template>
|
|
|
|
<!-- Channels: no channel found -->
|
|
<template id="channel_not_found" name="Private Presentation">
|
|
<t t-call="website.layout">
|
|
<div class="container">
|
|
<div class="oe_structure">
|
|
<h2>No channel created or published yet.</h2>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<!-- Channels sub-template: header -->
|
|
<template id="slides_channel_header" name="Slides Channel Header">
|
|
<section class="oe_slides_box_shadow">
|
|
<div class="container">
|
|
<div class="row">
|
|
<!-- Name and breadcrumb -->
|
|
<div class="pull-left col-md-8 col-sm-12 col-xs-12 mt16 mb8">
|
|
<h3 class="mt0">
|
|
<a t-attf-href="/slides/#{slug(channel)}" t-esc="channel.name"/>
|
|
<t t-if="category">
|
|
/ <a t-attf-href="/slides/#{slug(channel)}/category/#{slug(category)}" t-esc="category.name"/>
|
|
</t>
|
|
<!-- Public user has not right to create/write on slide -->
|
|
<t t-if="channel.can_upload and not is_public_user">
|
|
<a class="btn btn-primary oe_slide_js_upload" title="Upload Presentation" t-attf-channel_id="#{channel.id}">
|
|
<i class="fa fa-cloud-upload"></i> Upload
|
|
</a>
|
|
</t>
|
|
</h3>
|
|
</div>
|
|
<!-- Search box -->
|
|
<div class="col-md-4 col-sm-12 col-xs-12 pul-right mt16 mb8">
|
|
<form t-attf-action="/slides/#{slug(channel)}" role="search" method="get">
|
|
<div class="input-group">
|
|
<input type="text" class="form-control" name="search" t-attf-placeholder="Search in #{channel.name}" t-att-value="search"/>
|
|
<span class="input-group-btn">
|
|
<button class="btn btn-primary" type="submit">
|
|
<i class="fa fa-search"></i>
|
|
</button>
|
|
</span>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<div class="row" t-if="not search">
|
|
<!-- Navigation -->
|
|
<div class="col-md-8 col-sm-12 col-xs-12">
|
|
<ul class="nav nav-tabs nav-tabs-border">
|
|
<li t-attf-class="#{not slide_type and 'active' ''}">
|
|
<a t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}"> <i class="fa fa-home"></i> Home</a>
|
|
</li>
|
|
<li t-if="header_object.nbr_presentations" t-attf-class="#{slide_type == 'presentation' and 'active' ''}">
|
|
<a t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}/presentation">
|
|
<span class="badge" t-esc="header_object.nbr_presentations"/> Presentations
|
|
</a>
|
|
</li>
|
|
<li t-if="header_object.nbr_videos" t-attf-class="#{slide_type == 'video' and 'active' ''}">
|
|
<a t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}/video">
|
|
<span class="badge" t-esc="header_object.nbr_videos"/> Videos
|
|
</a>
|
|
</li>
|
|
<li t-if="header_object.nbr_documents" t-attf-class="li #{slide_type == 'document' and 'active' ''}">
|
|
<a t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}/document">
|
|
<span class="badge" t-esc="header_object.nbr_documents"/> Documents
|
|
</a>
|
|
</li>
|
|
<li t-if="header_object.nbr_infographics" t-attf-class="#{slide_type == 'infographic' and 'active' ''}">
|
|
<a t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}/infographic">
|
|
<span class="badge" t-esc="header_object.nbr_infographics"/> Infographics
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<!-- Sort options -->
|
|
<div class="col-md-4 col-sm-12 col-xs-12">
|
|
<span class="pull-right">
|
|
<span class="text-muted">Sort by:</span>
|
|
<a href="?sorting=date">
|
|
<span t-attf-style="#{sorting and sorting == 'date' and 'font-weight:bold;' ''}">Newest</span>
|
|
</a>
|
|
<span class="text-muted">|</span>
|
|
<a href="?sorting=view">
|
|
<span t-attf-style="#{sorting and sorting == 'view' and 'font-weight:bold;' ''}">Most Viewed</span>
|
|
</a>
|
|
<span class="text-muted">|</span>
|
|
<a href="?sorting=vote">
|
|
<span t-attf-style="#{sorting and sorting == 'vote' and 'font-weight:bold;' ''}">Most Voted</span>
|
|
</a>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</template>
|
|
|
|
<!-- Channel main template -->
|
|
<template id='home' name="Odoo Slides">
|
|
<t t-set="head">
|
|
<t t-call-assets="web.pdf_js_lib" t-css="false"/>
|
|
<script type="text/javascript" src="/website_slides/static/lib/pdfslidesviewer/PDFSlidesViewer.js"></script>
|
|
</t>
|
|
<t t-call="website.layout">
|
|
<div class="wrap">
|
|
<t t-set="main_object" t-value="channel"/>
|
|
<t t-call="website_slides.slides_channel_header">
|
|
<t t-if="not category">
|
|
<t t-set="header_object" t-value="channel"/>
|
|
</t>
|
|
<t t-if="category">
|
|
<t t-set="header_object" t-value="category"/>
|
|
</t>
|
|
</t>
|
|
<section t-if="not channel.promoted_slide_id and not tag and not slide_type and not search and not is_public_user and not category and display_channel_settings" class="wrap mt16 mb0" groups="website.group_website_designer">
|
|
<div class="container">
|
|
<div class="alert alert-danger alert-dismissable mb0">
|
|
<button type="button" class="close o_slides_hide_channel_settings" t-att-data-channel-id="channel.id" data-dismiss="alert">x</button>
|
|
<p>
|
|
Review your channel settings to promote your most viewed or recent published presentation
|
|
</p>
|
|
<a t-attf-href="/web#return_label=Website&id=#{channel.id}&view_type=form&model=slide.channel&action=#{request.env.ref('website_slides.action_slide_channels').id }" class="fa fa-arrow-right mt8">
|
|
Channel Settings
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section class="oe_slides_promote_box" t-if="channel.promoted_slide_id and not tag and not slide_type and not search and not category">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-md-5 mt16 mb16">
|
|
<a t-attf-href="/slides/slide/#{slug(channel.promoted_slide_id)}">
|
|
<img t-attf-src="/web/image/slide.slide/#{channel.promoted_slide_id.id}/image_medium" class="img-responsive shadow oe_slides_promote_image"/>
|
|
</a>
|
|
</div>
|
|
<div class="col-md-7 mt16 mb16">
|
|
<h3 class="row">
|
|
<a t-attf-href="/slides/slide/#{slug(channel.promoted_slide_id)}">
|
|
<t t-esc="channel.promoted_slide_id.name"/>
|
|
</a>
|
|
</h3>
|
|
<div class="row mt8 mb8" t-if="channel.promoted_slide_id.tag_ids">
|
|
<t t-foreach="channel.promoted_slide_id.tag_ids" t-as="slide_tag">
|
|
<a t-attf-href="/slides/#{slug(channel)}/tag/#{slug(slide_tag)}" t-attf-class="label label-default #{tag and tag.id == slide_tag.id and 'label-primary' ''}" t-field="slide_tag.name"/>
|
|
</t>
|
|
</div>
|
|
<div class="row oe_no_empty" t-esc="channel.promoted_slide_id.description"/>
|
|
<p class="row mt8">
|
|
<b>Share:</b>
|
|
<t t-call="website_slides.slides_share">
|
|
<t t-set="slide" t-value="channel.promoted_slide_id"/>
|
|
</t>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section>
|
|
<div class="container mt16">
|
|
<div class="row">
|
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" style="padding-left: 15px;padding-right: 15px;" t-if="channel.total == 0">
|
|
<div class="jumbotron">
|
|
<h1>No presentation published yet.</h1>
|
|
<p>
|
|
The <i><t t-esc="channel.name"/></i> is empty.
|
|
<span t-if="can_upload">
|
|
Upload PDF presentations, documents, videos or infographic using the button below.
|
|
</span>
|
|
</p>
|
|
<p>
|
|
<!-- Public user has not right to create/write on slide-->
|
|
<a t-if="can_upload and not is_public_user" class="btn btn-primary oe_slide_js_upload" t-attf-channel_id="#{channel.id}">
|
|
<i class="fa fa-cloud-upload"></i> Upload
|
|
</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" t-if="slide_type or category or tag">
|
|
<div class="alert alert-success mb0" role="alert" t-if="tag">
|
|
Results for <strong t-esc="tag.name"/>
|
|
</div>
|
|
<t t-call="website_slides.slides_grid_view"/>
|
|
</div>
|
|
<div class="row text-center" t-if="slide_type or category or tag">
|
|
<t t-call="website.pager"/>
|
|
</div>
|
|
|
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mb16" t-if="not slide_type and category_datas and not tag">
|
|
<t t-foreach="category_datas" t-as="category">
|
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mt8 oe_slides_bottom_border">
|
|
<a t-if="category['id']" t-attf-href="/slides/#{slug(channel)}/category/#{category['id']}" class="h3 mt0 mb0">
|
|
<t t-esc="category['name']"/>
|
|
</a>
|
|
<span t-if="not category['id']" title="Uncategorized presentation" class="h3 mt0 mb0">
|
|
<t t-esc="category['name']"/>
|
|
</span>
|
|
<a t-attf-href="/slides/#{slug(channel)}/category/#{category['id']}" class="pull-right" t-if="category['total'] - 4 > 0 and category['id']">
|
|
<i class="fa fa-arrow-right"></i> See all
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<t t-call="website_slides.slides_grid_view">
|
|
<t t-set="slides" t-value="category['slides']"/>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<!-- Channels: search result -->
|
|
<template id='slides_search' name="Searching Slides">
|
|
<t t-call="website.layout">
|
|
<div class="wrap">
|
|
<t t-set="main_object" t-value="channel"/>
|
|
<t t-call="website_slides.slides_channel_header"/>
|
|
<section>
|
|
<div class="container mt16" t-if="not slides">
|
|
<div class="alert alert-danger" role="alert">
|
|
Sorry, but nothing matches your search criteria <b><t t-esc="search"/></b>. Please try again with different keywords.
|
|
</div>
|
|
</div>
|
|
<div class="container mt16" t-if="slides">
|
|
<div class="alert alert-success mb0" role="alert">
|
|
<b t-esc="len(slides)"/> results found for the given criteria <b><t t-esc="search"/></b>
|
|
</div>
|
|
<div class="row mt0">
|
|
<t t-call="website_slides.slides_grid_view"/>
|
|
</div>
|
|
<div class="row text-center">
|
|
<t t-call="website.pager"/>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<!-- Embedded template: display a list of slides in a grid view -->
|
|
<template id='slides_grid_view' name="Slides (Grid View)">
|
|
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12 mt16 mb16" t-foreach="slides" t-as="slide">
|
|
<div class="well well-sm oe_slides_thumbnail_container">
|
|
<a t-attf-href="/slides/slide/#{slug(slide)}">
|
|
<img t-attf-src="/web/image/slide.slide/#{slide.id}/image_thumb" class="img-responsive img-thumbnail oe_slides_grid_thumbnail"/>
|
|
</a>
|
|
<span t-if="not slide.website_published" class="label label-danger" style="position: absolute;right: 20px;top: 7px;">Unpublished</span>
|
|
<a t-if="not is_public_user and slide.website_published and slide.channel_id.promote_strategy == 'custom' and slide.channel_id.promoted_slide_id.id != slide.id"
|
|
groups="base.group_user"
|
|
t-attf-href="/slides/slide/#{slide.id}/promote"
|
|
style="position: absolute;right: 20px;top: 7px;"
|
|
t-attf-title="Promote this #{slide.slide_type}">
|
|
<span class="fa-stack fa-lg">
|
|
<i class="fa fa-square fa-stack-2x oe_slides_opacity"></i>
|
|
<i class="fa fa-bullhorn fa-stack-1x fa-inverse"></i>
|
|
</span>
|
|
</a>
|
|
|
|
<div style="padding: 5px;">
|
|
<h4 class="mt4 mb8 oe_slides_ellipsis">
|
|
<a t-att-title="slide.name" t-attf-href="/slides/slide/#{slug(slide)}" t-esc="slide.name"/>
|
|
</h4>
|
|
<div class="text-muted clearfix">
|
|
<small class="pull-left"><t t-esc="slide.total_views"/> Views</small>
|
|
<small class="pull-right"><timeago class="timeago" t-att-datetime="slide.create_date"></timeago></small>
|
|
</div>
|
|
<p t-if="slide.tag_ids" style="padding-top: 5px;">
|
|
<t t-foreach="slide.tag_ids" t-as="att_tag">
|
|
<a t-attf-href="/slides/#{slug(channel)}/tag/#{slug(att_tag)}" t-attf-class="label label-default #{tag and tag.name == att_tag.name and 'label-primary' ''} text-muted" t-field="att_tag.name"/>
|
|
</t>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<!-- Slide: main template: detailed view -->
|
|
<template id="slide_edit_options" inherit_id="website.user_navbar" name="Edit Slide Options">
|
|
<xpath expr="//li[@id='edit-page-menu']" position="after">
|
|
<t t-if="main_object._name == 'slide.slide'" t-set="action" t-value="'website_slides.action_slides_slides'" />
|
|
</xpath>
|
|
</template>
|
|
<template id="slide_detail_view" name="Slide Detailed View">
|
|
<t t-set="head">
|
|
<t t-if="not private">
|
|
<meta property="og:title" t-att-content="slide.name" />
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:url" t-att-content="slide.website_url" />
|
|
<meta property="og:image" t-attf-content="#{request.httprequest.host_url}/web/image/slide.slide/#{slide.id}/image_thumb"/>
|
|
<meta property="og:description" t-att-content="slide.description" />
|
|
</t>
|
|
</t>
|
|
<t t-call="website.layout">
|
|
<t t-set="main_object" t-value="slide"/>
|
|
<div class="container mt16">
|
|
<div class="row">
|
|
<div class="col-lg-8 col-md-8 col-sm-12 col-xs-12">
|
|
<div t-if="private" class="mb16">
|
|
<h3 class="alert alert-danger">
|
|
<i class="fa fa-exclamation-triangle"></i> This <t t-esc="slide.slide_type"/> is private
|
|
</h3>
|
|
<t t-if="slide.channel_id.access_error_msg">
|
|
<div t-field="slide.channel_id.access_error_msg" class="well oe_no_empty"/>
|
|
</t>
|
|
</div>
|
|
|
|
<div t-if="not private">
|
|
<t t-if="slide.datas and slide.slide_type == 'infographic'">
|
|
<img t-attf-src="/web/image/slide.slide/#{slide.id}/datas" class="img-responsive" style="width:100%"/>
|
|
</t>
|
|
<div t-if="slide.slide_type in ('presentation', 'document')" class="embed-responsive embed-responsive-4by3 embed-responsive-item mb8">
|
|
<t t-raw="slide.embed_code"/>
|
|
</div>
|
|
<div t-if="slide.slide_type == 'video' and slide.document_id" class="embed-responsive embed-responsive-16by9 embed-responsive-item mb8">
|
|
<t t-raw="slide.embed_code"/>
|
|
</div>
|
|
<div class="row">
|
|
<h4 t-field="slide.name" class="col-md-6"/>
|
|
<div class="col-md-6">
|
|
<div clas="row">
|
|
<div class="col-md-8" t-if="slide.tag_ids">
|
|
<t t-foreach="slide.tag_ids" t-as="slide_tag">
|
|
<a t-attf-href="/slides/#{slug(slide.channel_id)}/tag/#{slug(slide_tag)}" t-attf-class="label label-default ml4 mb4 pull-right #{tag and tag.id == slide_tag.id and 'label-primary' ''}" t-field="slide_tag.name"/>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-8 col-xs-12">
|
|
<div class="pull-left">
|
|
<a t-attf-href="/slides/#{slug(slide.channel_id)}">
|
|
<i class="fa fa-circle-o fa-5x" style="color: #875A7B;font-weight: bold;"></i>
|
|
</a>
|
|
</div>
|
|
<div style="margin-left: 80px">
|
|
<p>
|
|
<a t-attf-href="/slides/#{slug(slide.channel_id)}" t-esc="slide.channel_id.name"/>
|
|
<t t-if="slide and slide.category_id">
|
|
<span> / </span>
|
|
<a t-attf-href="/slides/#{slug(slide.channel_id)}/category/#{slug(slide.category_id)}" t-esc="slide.category_id.name"/>
|
|
</t>
|
|
</p>
|
|
<div>
|
|
<t t-call="website_mail.follow">
|
|
<t t-set="email" t-value="user.email"/>
|
|
<t t-set="object" t-value="slide.channel_id"/>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-4 hidden-xs">
|
|
<div class="text-right">
|
|
<b class="h3 text-muted"><t t-esc="slide.total_views"/></b> <span class="text-muted small">views</span>
|
|
</div>
|
|
<!-- progress bar of like/dislike -->
|
|
<div class="progress mb0" style="height: 2px;" t-if="slide.likes + slide.dislikes > 0">
|
|
<div class="progress-bar" role="progressbar" t-attf-aria-valuenow="#{slide.likes}" aria-valuemin="0"
|
|
t-attf-aria-valuemax="#{slide.likes + slide.dislikes}"
|
|
t-attf-style="width: #{(slide.likes*100)/(slide.likes + slide.dislikes)}%;">
|
|
<span class="sr-only"><t t-esc="slide.likes"/> Likes</span>
|
|
</div>
|
|
</div>
|
|
<div class="progress mb0" style="height: 2px;" t-if="slide.likes + slide.dislikes == 0">
|
|
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
|
|
<span class="sr-only"><t t-esc="slide.likes"/> Likes</span>
|
|
</div>
|
|
</div>
|
|
<!-- LikeButton widget -->
|
|
<div class="text-muted mt4">
|
|
<div class="pull-right mb16 text-right">
|
|
<span
|
|
class="oe_slide_js_like"
|
|
data-href="/slides/slide/like"
|
|
t-att-data-user-id="user.id"
|
|
t-att-data-public-user="is_public_user"
|
|
t-att-data-slide-id="slide.id"
|
|
tabindex="0"
|
|
data-toggle="popover">
|
|
<i class="fa fa-thumbs-up fa-1x">
|
|
<t t-esc="slide.likes"/>
|
|
</i>
|
|
</span>
|
|
<span
|
|
class="oe_slide_js_unlike"
|
|
data-href="/slides/slide/dislike"
|
|
t-att-data-user-id="user.id"
|
|
t-att-data-public-user="is_public_user"
|
|
t-att-data-slide-id="slide.id"
|
|
tabindex="0"
|
|
data-toggle="popover">
|
|
<i class="fa fa-thumbs-down fa-1x">
|
|
<t t-esc="slide.dislikes"/>
|
|
</i>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="mt8 mb32">
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
<li t-att-class="not comments and 'active' or None">
|
|
<a href="#about" role="tab" data-toggle="tab">
|
|
<i class="fa fa-home"></i> About
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="#share" role="tab" data-toggle="tab">
|
|
<i class="fa fa-share-alt"></i> Share
|
|
</a>
|
|
</li>
|
|
<li t-att-class="comments and 'active' or None">
|
|
<a href="#discuss" role="tab" data-toggle="tab">
|
|
<i class="fa fa-comments-o"></i> Comments
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="#transcript" role="tab" data-toggle="tab">
|
|
<i class="fa fa-align-justify"></i> Transcript
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="#statistic" role="tab" data-toggle="tab">
|
|
<i class="fa fa-bar-chart"></i> Statistics
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
<div class="tab-content" style="padding: 20px 5px 5px 5px; word-wrap: break-word;">
|
|
<div t-att-class="not comments and 'tab-pane fade active in' or 'tab-pane fade'" id="about">
|
|
<div t-field="slide.description"/>
|
|
</div>
|
|
<div class="tab-pane fade" t-if="slide.website_published" id="share">
|
|
<t t-call="website_slides.slide_social_media">
|
|
<t t-set="slide" t-value="slide"/>
|
|
</t>
|
|
<t t-call="website_slides.slide_social_email">
|
|
<t t-set="slide" t-value="slide"/>
|
|
</t>
|
|
<t t-if="not slide.document_id">
|
|
<t t-call="website_slides.slide_social_embed">
|
|
<t t-set="slide" t-value="slide"/>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
<div class="tab-pane fade" t-if="not slide.website_published" id="share">
|
|
<h4><i class="fa fa-info-circle"></i>
|
|
The social sharing module will be unlocked when a moderator will allow your publication.
|
|
</h4>
|
|
</div>
|
|
<div t-att-class="comments and 'tab-pane fade active in' or 'tab-pane fade'" id="discuss">
|
|
<t t-call="portal.message_thread">
|
|
<t t-set="object" t-value="slide"/>
|
|
</t>
|
|
</div>
|
|
<div class="tab-pane fade oe_slides_transcript" id="transcript">
|
|
<t t-if="slide.index_content">
|
|
<t t-foreach="slide.index_content.split('\n')" t-as="line">
|
|
<p t-esc="line"></p>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
<div class="tab-pane fade" id="statistic" t-att-slide-url="slide.website_url">
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<h4 class="mt0 oe_slides_statistics_title">Views</h4>
|
|
<ul class="list-group">
|
|
<li class="list-group-item">
|
|
<span class="badge"><t t-esc="slide.total_views"/></span>
|
|
<i class="fa fa-play"></i> Total Views
|
|
</li>
|
|
<li class="list-group-item">
|
|
<span class="badge"><t t-esc="slide.slide_views"/></span>
|
|
<i class="fa fa-circle-o"></i> Website Views
|
|
</li>
|
|
<li class="list-group-item" t-if="not slide.document_id">
|
|
<span class="badge"><t t-esc="slide.embed_views"/></span>
|
|
<i class="fa fa-code"></i> Embedded Views
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="col-md-4">
|
|
<h4 class="mt0 oe_slides_statistics_title">Actions</h4>
|
|
<ul class="list-group">
|
|
<li class="list-group-item">
|
|
<span class="badge" id="total-share">0</span>
|
|
<i class="fa fa-share-alt"></i> Social Shares
|
|
</li>
|
|
<li class="list-group-item">
|
|
<span class="badge"><t t-esc="slide.likes"/></span>
|
|
<i class="fa fa-thumbs-up"></i> Likes
|
|
</li>
|
|
<li class="list-group-item">
|
|
<span class="badge"><t t-esc="slide.dislikes"/></span>
|
|
<i class="fa fa-thumbs-down"></i> Dislikes
|
|
</li>
|
|
<li class="list-group-item">
|
|
<span class="badge"><t t-esc="len(slide.website_message_ids)"/></span>
|
|
<i class="fa fa-comments-o"></i> Comments
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="col-md-4">
|
|
<h4 class="mt0 oe_slides_statistics_title">Share count</h4>
|
|
<ul class="list-group">
|
|
<li class="list-group-item">
|
|
<span class="badge" id="facebook-badge">0</span>
|
|
<i class="fa fa-facebook-square"></i> Facebook
|
|
</li>
|
|
<li class="list-group-item">
|
|
<span class="badge" id="twitter-badge">0</span>
|
|
<i class="fa fa-twitter-square"></i> Twitter
|
|
</li>
|
|
<li class="list-group-item">
|
|
<span class="badge" id="linkedin-badge">0</span>
|
|
<i class="fa fa-linkedin-square"></i> LinkedIn
|
|
</li>
|
|
<li class="list-group-item">
|
|
<span class="badge" id="google-badge">0</span>
|
|
<i class="fa fa-google-plus-square"></i> Google+
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="row" t-if="not slide.document_id and slide.embedcount_ids">
|
|
<div class="col-md-12">
|
|
<h4 class="mt0"> Embeds
|
|
<span class="badge pull-right">
|
|
<t t-esc="len(slide.embedcount_ids)"/>
|
|
</span>
|
|
</h4>
|
|
<ul class="list-group" style="height: 150px;overflow: auto;">
|
|
<li class="list-group-item" t-foreach="slide.embedcount_ids" t-as="count">
|
|
<span class="badge"><t t-esc="count.count_views"/></span>
|
|
<t t-esc="count.url"/>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
<li class="active"><a href="#related" data-toggle="tab">Related</a></li>
|
|
<li><a href="#most_viewed" data-toggle="tab">Most Viewed</a></li>
|
|
</ul>
|
|
<div class="tab-content">
|
|
<div id="related" class="tab-pane active mt4">
|
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 panel panel-default">
|
|
<ul class="media-list panel-body">
|
|
<t t-set="related_slides_list" t-value="list(related_slides)"/>
|
|
<t t-if="not related_slides_list">
|
|
No presentation available.
|
|
</t>
|
|
<t t-foreach="related_slides_list" t-as="slide">
|
|
<t t-call="website_slides.related_slides"/>
|
|
</t>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div id="most_viewed" class="tab-pane mt4">
|
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 panel panel-default">
|
|
<ul class="media-list panel-body">
|
|
<t t-set="most_viewed_slides_list" t-value="list(most_viewed_slides)"/>
|
|
<t t-if="not list(most_viewed_slides_list)">
|
|
No presentation available.
|
|
</t>
|
|
<t t-foreach="most_viewed_slides_list" t-as="slide">
|
|
<t t-call="website_slides.related_slides"/>
|
|
</t>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<!-- Slide sub-template: display an item in a list of related slides (Related, Most Viewed, ...) -->
|
|
<template id="related_slides" name="Related Slide">
|
|
<li class="media">
|
|
<a class="media-left pull-left" t-attf-href="/slides/slide/#{slug(slide)}">
|
|
<img class="media-object oe_slides_apart_small" t-attf-src="/web/image/slide.slide/#{slide.id}/image_thumb"/>
|
|
</a>
|
|
<div class="media-body">
|
|
<a t-attf-href="/slides/slide/#{slug(slide)}"><h5 class="media-heading" t-esc="slide.name"/></a>
|
|
<small class="text-muted">
|
|
<t t-esc="slide.total_views"/> Views . <timeago class="timeago" t-att-datetime="slide.create_date"></timeago>
|
|
</small>
|
|
</div>
|
|
</li>
|
|
</template>
|
|
|
|
|
|
<!-- Slide sub-template: share: social media -->
|
|
<template id='slide_social_media' name="Share on Social Networks">
|
|
<h4 class="mt0">Share on Social Networks</h4>
|
|
<t t-call="website_slides.slides_share"/>
|
|
<h4 class="mt0">Share Link</h4>
|
|
<input type="text" class="form-control" t-att-value="slide.website_url" readonly="readonly" onClick="this.select();"/>
|
|
<span class="help-block">Use permanent link to share in social media</span>
|
|
</template>
|
|
|
|
|
|
<!-- Slide sub-template: share: send by email -->
|
|
<template id='slide_social_email' name="Share by Email">
|
|
<h4 class="mt0">Share with a friend</h4>
|
|
<t t-if="not is_public_user">
|
|
<form class="form-group oe_slide_js_share_email" role="form">
|
|
<div class="input-group col-md-6">
|
|
<input type="email" class="form-control" placeholder="your-friend@domain.com"/>
|
|
<span class="input-group-btn">
|
|
<button class="btn btn-primary" type="button"
|
|
data-loading-text="Sending..."
|
|
t-attf-data-slide-id="#{slide.id}"
|
|
style="border-top-right-radius: 4px;border-bottom-right-radius: 4px;">
|
|
<i class="fa fa-envelope-o"></i>
|
|
Send Email
|
|
</button>
|
|
</span>
|
|
</div>
|
|
<span class="help-block">Send presentation through email</span>
|
|
</form>
|
|
</t>
|
|
<t t-if="is_public_user">
|
|
<p>Please <a t-attf-href="/web?redirect=#{request.httprequest.url}"> login </a> to send this <t t-esc="slide.slide_type"/> by email!</p>
|
|
</t>
|
|
</template>
|
|
|
|
<!-- Slide sub-template: share: embed in your website -->
|
|
<template id="slide_social_embed" name="Share on Your Website">
|
|
<div class="oe_slide_js_embed_code_widget">
|
|
<h4 class="mt0">Embed in your website</h4>
|
|
<div class="form-group">
|
|
<textarea class="form-control slide_embed_code" readonly="readonly" onClick="this.select();"><t t-esc="slide.embed_code"/></textarea>
|
|
</div>
|
|
<div class="form-group" t-if="slide.slide_type in ('presentation', 'document')">
|
|
<div class="help-block col-lg-3 col-md-3 col-sm-6 col-xs-6">Select page to start with</div>
|
|
<div class="input-group col-lg-3 col-md-3 col-sm-6 col-xs-6">
|
|
<input type="number" value="1" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</data>
|
|
</odoo>
|