summaryrefslogtreecommitdiff
path: root/addons/website_slides/views
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website_slides/views')
-rw-r--r--addons/website_slides/views/assets.xml11
-rw-r--r--addons/website_slides/views/slide_channel_views.xml6
-rw-r--r--addons/website_slides/views/slide_slide_views.xml46
-rw-r--r--addons/website_slides/views/website_slides_templates.xml350
4 files changed, 391 insertions, 22 deletions
diff --git a/addons/website_slides/views/assets.xml b/addons/website_slides/views/assets.xml
index 3602f06aab1..a43729f527d 100644
--- a/addons/website_slides/views/assets.xml
+++ b/addons/website_slides/views/assets.xml
@@ -6,6 +6,10 @@
<xpath expr="//link[last()]" position="after">
<link rel="stylesheet" type="text/scss" href="/website_slides/static/src/scss/website_slides.scss" t-ignore="true"/>
<link rel="stylesheet" type="text/scss" href="/website_slides/static/src/scss/website_slides_profile.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/website_slides/static/src/scss/slide_course.scss" t-ignore="true"/>
+ <link rel="stylesheet" type="text/scss" href="/website_slides/static/src/scss/slide_slide.scss" t-ignore="true"/>
+ <link rel="stylesheet" type="text/scss" href="/website_slides/static/src/scss/slides_slide_fullscreen.scss" t-ignore="true"/>
+ <link rel="stylesheet" type="text/scss" href="/website_slides/static/src/scss/website_slides_quiz.scss"/>
</xpath>
<xpath expr="//script[last()]" position="after">
<script type="text/javascript" src="/website_slides/static/src/js/slides.js"/>
@@ -13,6 +17,13 @@
<script type="text/javascript" src="/website_slides/static/src/js/slides_like.js"/>
<script type="text/javascript" src="/website_slides/static/src/js/slides_share.js"/>
<script type="text/javascript" src="/website_slides/static/src/js/slides_upload.js"/>
+ <script type="text/javascript" src="/website_slides/static/src/js/slides_category.js"/>
+ <script type="text/javascript" src="/website_slides/static/src/js/slides_delete_slide.js"/>
+ <script type="text/javascript" src="/website_slides/static/src/js/slides_course_slides_list.js"/>
+ <script type="text/javascript" src="/website_slides/static/src/js/slides_course_progress_bar.js"/>
+ <script type="text/javascript" src="/website_slides/static/src/js/slides_course_sidebar_list.js"/>
+ <script type="text/javascript" src="/website_slides/static/src/js/slides_course_fullscreen_player.js"/>
+ <script type="text/javascript" src="/website_slides/static/src/js/slides_course_quiz.js"/>
</xpath>
</template>
diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml
index 91607fbace5..4e083dc2650 100644
--- a/addons/website_slides/views/slide_channel_views.xml
+++ b/addons/website_slides/views/slide_channel_views.xml
@@ -135,7 +135,7 @@
</field>
</record>
- <record id="view_slide_channel_tree" model="ir.ui.view">
+ <record id="slide_channel_view_tree" model="ir.ui.view">
<field name="name">slide.channel.tree</field>
<field name="model">slide.channel</field>
<field name="arch" type="xml">
@@ -154,7 +154,8 @@
<field name="name">slide.channel.search</field>
<field name="model">slide.channel</field>
<field name="arch" type="xml">
- <search string="Channel">
+ <search string="Courses">
+ <field name="name" string="Course"/>
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
</search>
</field>
@@ -165,6 +166,7 @@
<field name="res_model">slide.channel</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
+ <field name="search_view_id" ref="website_slides.slide_channel_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a channel
diff --git a/addons/website_slides/views/slide_slide_views.xml b/addons/website_slides/views/slide_slide_views.xml
index 7e7fcdf92e4..444207483c8 100644
--- a/addons/website_slides/views/slide_slide_views.xml
+++ b/addons/website_slides/views/slide_slide_views.xml
@@ -72,7 +72,7 @@
<group>
<field name="slide_type" readonly="1"/>
<field name="url"
- attrs="{'required': [('slide_type', 'in', ('document', 'video'))], 'readonly': [('slide_type', 'in', ('document', 'video'))], 'invisible': [('slide_type', 'not in', ('document', 'presentation', 'video'))]}" />
+ attrs="{'required': [('slide_type', 'in', ('video'))], 'readonly': [('slide_type', 'in', ('document', 'video'))], 'invisible': [('slide_type', 'not in', ('document', 'presentation', 'video'))]}" />
<field name="document_id" readonly="1" attrs="{'invisible': [('document_id', '=', False)]}"/>
<field name="mime_type" readonly="1"
attrs="{'invisible': [('slide_type', 'not in', ('document', 'presentation', 'infographic', 'webpage'))]}"/>
@@ -108,6 +108,26 @@
</field>
</group>
</page>
+ <page string="Quiz">
+ <group name="container_row_2">
+ <group string="Earnings">
+ <group>
+ <field name="quiz_first_attempt_reward"/>
+ <field name="quiz_second_attempt_reward"/>
+ <field name="quiz_third_attempt_reward"/>
+ <field name="quiz_fourth_attempt_reward"/>
+ </group>
+ </group>
+ <group string="Questions">
+ <field name="question_ids" nolabel="1">
+ <tree>
+ <field name="sequence" widget="handle"/>
+ <field name="question"/>
+ </tree>
+ </field>
+ </group>
+ </group>
+ </page>
</notebook>
</sheet>
<div class="oe_chatter">
@@ -118,6 +138,29 @@
</field>
</record>
+ <record id="view_slide_question_form" model="ir.ui.view">
+ <field name="name">slide.question.form</field>
+ <field name="model">slide.question</field>
+ <field name="arch" type="xml">
+ <form string="Slide">
+ <sheet>
+ <div class="oe_edit_only">
+ <label for="question" string="Question Name"/>
+ </div>
+ <h1>
+ <field name="question" default_focus="1" placeholder="Name"/>
+ </h1>
+ <field name="answer_ids">
+ <tree editable="bottom" create="true" delete="true">
+ <field name="text_value"/>
+ <field name="is_correct"/>
+ </tree>
+ </field>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
<record id="view_slide_slide_tree" model="ir.ui.view">
<field name="name">slide.slide.tree</field>
<field name="model">slide.slide</field>
@@ -169,6 +212,7 @@
<field name="res_model">slide.slide</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
+ <field name="context">{'search_default_channel': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new slide
diff --git a/addons/website_slides/views/website_slides_templates.xml b/addons/website_slides/views/website_slides_templates.xml
index e06e75d0b66..7bcf5bd77b7 100644
--- a/addons/website_slides/views/website_slides_templates.xml
+++ b/addons/website_slides/views/website_slides_templates.xml
@@ -108,8 +108,8 @@
<div class="row o_wslides_course_header">
<div class="col-lg-12 o_wslides_container o_wslides_course_header_container">
<div class="row align-items-end">
- <div class="col o_wslides_course_header_aside">
- <img class="mr-3" t-att-src="'/web/image/slide.channel/%s/image' % channel.id"/>
+ <div class="col o_wslides_course_header_aside main_image">
+ <div t-field="channel.image" widget="image" t-options="{'widget': 'image'}"/>
</div>
<div class="col-8 o_wslides_course_header_content">
<h3 class="row"><span class="font-weight-bold col" t-field="channel.name"/></h3>
@@ -254,8 +254,74 @@
</a>
</div>
</div>
+ <!-- training mode ==============================================-->
+ <div t-if="channel.channel_type == 'training'" style="width:70%;" class="d-flex align-items-center ml-4 justify-content-center">
+ <div class="course-content oe_js_course_slides_list" style="width: 100%">
+ <ul>
+ <t t-set="i" t-value="1"/>
+ <t t-set="j" t-value="0"/>
+ <t t-foreach="channel.category_ids" t-as="category">
+ <li t-attf-class="#{'section-draggable' if user == user_id else ''}" t-attf-category_id="#{category.id}">
+ <div t-attf-category_id="#{category.id}" class="course-section text-muted font-weight-bold pt-0 pb-0 pl-2 pr-2 d-flex justify-content-between align-items-center">
+ <div style="width:50%;" class="d-flex align-items-center">
+ <i t-if="channel.user_id == user" class="fa fa-arrows mr-3 text-muted"></i>
+ <div class="mr-2">Section <span class="section-index" t-esc="i"/>:</div>
+ <span t-field="category.name"/>
+ </div>
+ <!-- <a t-if="channel.user_id == user" title="Add content to this section" class="mr-2 p-0 oe_slide_js_add_slide" href="#" t-attf-channel_id="#{channel.id}" t-attf-category_id="#{category.id}">+</a> -->
+ <a class="mr-2 oe_slide_js_upload"
+ role="button"
+ aria-label="Upload Presentation"
+ href="#"
+ style="font-size: 1.5rem;text-decoration: none;"
+ t-att-data-channel-id="channel.id"
+ t-att-data-category-id="category.id"
+ t-att-data-can-upload="channel.can_upload"
+ t-att-data-can-publish="channel.can_publish">+</a>
+ <t t-set="i" t-value="i+1"/>
+ </div>
+ <ul t-attf-category_id="#{category.id}" >
+ <t t-foreach="category.slide_ids" t-as="slide">
+ <li t-att-index="j" t-attf-slide_id="#{slide.id}" t-attf-category_id="#{category.id}" t-attf-class="#{'content-slide slide-draggable d-flex justify-content-between align-items-center p-2' if channel.user_id == user else 'content-slide d-flex justify-content-between align-items-center p-2'}">
+ <div class="content-slide-infos ml-2">
+ <i t-if="channel.user_id == user" class="fa fa-arrows mr-2 text-muted"></i>
+ <i t-if="slide.slide_type == 'document'" class="fa fa-file-pdf-o mr-2 text-muted"></i>
+ <i t-if="slide.slide_type == 'infographic'" class="fa fa-file-picture-o mr-2 text-muted"></i>
+ <i t-if="slide.slide_type == 'video'" class="fa fa-play-circle mr-2 text-muted"></i>
+ <i t-if="slide.slide_type == 'link'" class="fa fa-file-code-o mr-2 text-muted"></i>
+ <i t-if="slide.slide_type == 'webpage'" class="fa fa-file-text mr-2 text-muted"></i>
+ <i t-if="slide.slide_type == 'quiz'" class="fa fa-question-circle mr-2 text-muted"></i>
+ <i t-if="slide.slide_type == 'certification'" class="fa fa-trophy mr-2 text-muted"></i>
+ <a class="link-to-slide" t-attf-href="/slides/slide/#{slug(slide)}"><span t-field="slide.name"/></a>
+ </div>
+ <div class="content-slide-controls mr-2">
+ <i t-if="not slide.id in user_progress or not user_progress[slide.id].completed" class="check-done fa fa-check-circle text-muted mr-1"></i>
+ <i t-if="slide.id in user_progress and user_progress[slide.id].completed" class="check-done text-primary fa fa-check-circle mr-1"></i>
+ <a t-if="channel.user_id == user and not slide.slide_type == 'webpage'" t-attf-href="/web#id=#{slide.id}&amp;action=#{slide_action}&amp;model=slide.slide&amp;view_type=form"><i class="fa fa-pencil text-muted mr-1"></i></a>
+ <a t-if="channel.user_id == user and slide.slide_type == 'webpage'" t-attf-href="/slides/slide/#{slug(slide)}?enable_editor=1"><i class="fa fa-pencil text-muted mr-1"></i></a>
+ <i t-if="channel.user_id == user" t-attf-slide_id="#{slide.id}" class="fa fa-trash text-muted oe_slide_js_delete_slide"></i>
+ </div>
+ </li>
+ <t t-set="j" t-value="j+1"/>
+ </t>
+ </ul>
+ </li>
+ </t>
+ </ul>
+ <div t-if="channel.user_id == user" class="content-actions">
+ <a class="mr-2 oe_slide_js_upload"
+ role="button"
+ aria-label="Upload Presentation"
+ href="#"
+ t-att-data-channel-id="channel.id"
+ t-att-data-can-upload="channel.can_upload"
+ t-att-data-can-publish="channel.can_publish">Add Content</a>
+ <a class="oe_slide_js_add_section" t-attf-channel_id="#{channel.id}" href="#">Add Section</a>
+ </div>
+ </div>
+ </div>
<!-- Channel content, aka slides (lessons in documentation mode) -->
- <div class="col-8 mt24 ml32 o_wslides_channel_content_promoted">
+ <div t-if="channel.channel_type == 'documentation'" class="col-8 mt24 ml32 o_wslides_channel_content_promoted">
<div class="row mt16 align-items-center">
<div class="col">
<h3><i class="fa fa-plus-square"/> Featured lesson</h3>
@@ -284,7 +350,7 @@
</div>
</div>
<!-- Channel content, aka slides (lessons in documentation mode) -->
- <div class="col-12">
+ <div t-if="channel.channel_type == 'documentation'" class="col-12">
<div class="tab-content mt16" id="slideChannelContent">
<div class="tab-pane active" role="tabpanel" aria-labelledby="profile-tab" id="slideChannelContentAbout">
<t t-foreach="category_data" t-as="category">
@@ -363,14 +429,14 @@
<i class="fa fa-thumbs-down fa-1x" role="img" aria-label="Dislikes" title="Dislikes"></i>
<span t-esc="slide.dislikes"/>
</span>
- </div>
+ </div>
<small class="text-muted">
<t t-call="website_slides.slides_misc_float_time">
<t t-set="value" t-value="slide.completion_time"/>
</t>
<!-- <t t-esc="slide.total_views"/> Views
<timeago class="timeago" t-att-datetime="slide.create_date"></timeago> -->
- </small>
+ </small>
</div>
</div>
</div>
@@ -386,14 +452,100 @@
<template id="slide_detail_view" name="Slide Detailed View">
<t t-call="website.layout">
<t t-set="main_object" t-value="slide"/>
- <div class="container mt16">
+ <t t-call="website_slides.course_nav">
+ <t t-set="channel" t-value="slide.channel_id"/>
+ </t>
+ <div class="slide-header">
+ <div class="slide-header-container">
+ <div class="slide-header-box">
+ <a t-attf-href="/slides/#{slug(slide.channel_id)}" t-field="slide.channel_id.name"/>
+ <div t-if="slide.channel_id.channel_type == 'training'" class="d-flex align-items-end">
+ <div class="course-progress-bar">
+ <div class="progress-gauge m-0 oe_slide_js_progress_bar" t-attf-channel_completion="#{slide.channel_id.completion}"/>
+ </div>
+ <i class="fa fa-trophy ml-2 mb-0 p-0" style="font-size:1.8rem; color: #cdcdcd;"></i>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div t-if="slide.channel_id.channel_type == 'training'" class="sidebar-list oe_js_side_bar_list slide-content-list">
+ <ul class="slide-list">
+ <li>
+ <div class="slide-content-list-header">
+ Course content
+ </div>
+ </li>
+ <t t-set="i" t-value="0"/>
+ <t t-foreach="slide.channel_id.category_ids" t-as="category">
+ <a data-toggle="collapse" t-attf-href="#collapse-#{category.id}" role="button" aria-expanded="false" t-attf-aria-controls="collapse-#{category.id}">
+ <li class="slide-content-list-section">
+ <span t-field="category.name"/>
+ </li>
+ </a>
+ <ul class="collapse p-0 m-0" t-attf-id="collapse-#{category.id}" >
+ <t t-foreach="category.slide_ids" t-as="course_slide">
+ <li class="slide-content-list-slide">
+ <a t-attf-href="/slides/slide/#{slug(course_slide)}" t-att-index="i" t-att-slide_id="course_slide.id">
+ <div t-attf-index="#{i}" t-attf-slide_id="#{course_slide.id}" t-attf-class="#{'active' if slide.id == course_slide.id else ''} d-flex justify-content-between">
+ <div>
+ <i t-if="course_slide.slide_type == 'presentation'" class="fa fa-file-pdf-o mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'infographic'" class="fa fa-file-picture-o mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'video'" class="fa fa-play-circle mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'link'" class="fa fa-file-code-o mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'webpage'" class="fa fa-file-text mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'quiz'" class="fa fa-question-circle mr-2 text-muted"></i>
+ <t t-esc="course_slide.name"/>
+ </div>
+ <div class="content-slide-controls mr-2">
+ <i t-attf-id="check-#{course_slide.id}" t-if="course_slide.id in user_progress and not user_progress[course_slide.id].completed" class="check-done fa fa-check-circle text-muted mr-1"></i>
+ <i t-attf-id="check-#{course_slide.id}" t-if="course_slide.id in user_progress and user_progress[course_slide.id].completed" class="check-done text-primary fa fa-check-circle mr-1"></i>
+ </div>
+ </div>
+ </a>
+ <ul t-if="course_slide.link_ids" class="list-group slide-resources">
+ <t t-foreach="course_slide.link_ids" t-as="resource">
+ <a t-attf-href="#{resource.link}" target="new">
+ <li><div class="slide-resource"><i class="fa fa-link"></i><span t-field="resource.link"/></div></li>
+ </a>
+ </t>
+ </ul>
+ </li>
+ <t t-set="i" t-value="i+1"/>
+ </t>
+ </ul>
+ </t>
+ </ul>
+ </div>
+ <div class="slide-header-container d-flex justify-content-between mt-4 mb-3">
+ <div class="slide-title">
+ <h1 t-field="slide.name"/>
+ <span t-if="slide.question_ids" t-attf-class="slide-points ml-2 #{'quiz-points-won' if slide.id in user_progress and user_progress[slide.id].completed else ''}">
+ <span t-if="slide.id in user_progress and user_progress[slide.id].quiz_attempts_count == 0" id="quiz-points" t-esc="slide.quiz_first_attempt_reward"/>
+ <span t-if="slide.id in user_progress and user_progress[slide.id].quiz_attempts_count == 1" id="quiz-points" t-esc="slide.quiz_second_attempt_reward"/>
+ <span t-if="slide.id in user_progress and user_progress[slide.id].quiz_attempts_count == 2" id="quiz-points" t-esc="slide.quiz_third_attempt_reward"/>
+ <span t-if="slide.id in user_progress and user_progress[slide.id].quiz_attempts_count > 2" id="quiz-points" t-esc="slide.quiz_fourth_attempt_reward"/>
+ points
+ </span>
+ </div>
+ <div class="course-nav-links">
+ <t t-if="previous_slide">
+ <a class="slide-button" t-attf-href="/slides/slide/#{previous_slide}">Prev</a>
+ </t>
+ <a t-if="slide.slide_type in ('webpage', 'video', 'document', 'iconographic') and not slide.question_ids and (slide.id in user_progress and not user_progress[slide.id].completed)" t-attf-href="/slide/completed/#{slide.id}?next_slide=#{next_slide}&amp;course=#{slug(slide.channel_id)}" class="slide-button-done">Set Done</a>
+ <t t-if="next_slide">
+ <a class="slide-button" t-attf-href="/slides/slide/#{next_slide}">Next</a>
+ </t>
+ <a t-if="slide.channel_id.channel_type == 'training'" t-attf-href="/slides/slide/#{slug(slide)}?fullscreen=1" class="slide-button-fullscreen ml-2"><i class="fa fa-desktop mr-2"></i>fullscreen</a>
+ </div>
+ </div>
+ <div class="slide-header-container mt16">
<div class="row">
- <div class="col-xl-8 col-lg-8 col-md-12 col-12">
- <div class="o_w_slides_slide_detail_container">
+ <div style="width:100%;">
+ <div class="o_w_slides_slide_detail_container" style="width: 100%;">
<t t-if="slide.datas and slide.slide_type == 'infographic'">
<img t-attf-src="/web/image/slide.slide/#{slide.id}/datas" class="img-fluid" style="width:100%" alt="Slide image"/>
</t>
- <div t-if="slide.slide_type in ('presentation', 'document')" class="embed-responsive embed-responsive-4by3 embed-responsive-item mb8">
+ <div style="height: 600px;" 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">
@@ -402,8 +554,50 @@
<div t-if="slide.slide_type == 'webpage'" class="border border-light rounded">
<div t-field="slide.html_content"/>
</div>
+ <div t-if="slide.question_ids">
+ <div class=".o_wslides_fullscreen_quiz o_w_slides_quiz_no_fullscreen mt-2"
+ t-attf-slide_id="#{slide.id}"
+ t-attf-slide_done="#{slide.id in user_progress and user_progress[slide.id].completed}"
+ t-attf-nb_attempts="#{user_progress[slide.id].quiz_attempts_count if slide.id in user_progress else ''}"
+ t-attf-first_reward="#{slide.quiz_first_attempt_reward}"
+ t-attf-second_reward="#{slide.quiz_second_attempt_reward}"
+ t-attf-third_reward="#{slide.quiz_third_attempt_reward}"
+ t-attf-fourth_reward="#{slide.quiz_fourth_attempt_reward}"
+ t-if="slide.question_ids">
+ <div>
+ <t t-set="i" t-value="1"/>
+ <t t-foreach="slide.question_ids" t-as="question">
+ <t t-set="j" t-value="0"/>
+ <div class="o_wslides_quiz_question" t-attf-id="#{question.id}" t-attf-title="#{question.question}">
+ <div>
+ <div class="o_wslides_quiz_question_title">
+ <span class="o_wslides_quiz_question_title_number"><span t-esc="i"/>. </span>
+ <span class="o_wslides_quiz_question_title_text" t-esc="question.question"/>
+ </div>
+ <ul class="o_wslides_quiz_question_answers">
+ <t t-foreach="question.answer_ids" t-as="answer">
+ <li t-attf-id="answer#{answer.id}" t-att-question_id="question.id" t-attf-text_value="#{answer.text_value}" t-attf-class="#{'o_wslides_quiz_answer o_wslides_quiz_good_answer' if slide.id in user_progress and user_progress[slide.id].completed and answer.is_correct else 'o_wslides_quiz_answer o_wslides_quiz_ignored_answer' if slide.id in user_progress and user_progress[slide.id].completed else 'o_wslides_quiz_answer'}">
+ <label class="o_wslides_quiz_radio_box">
+ <input t-att-answer_id="answer.id" type="radio" t-att-name="question.id" t-att-question_id="question.id" t-att-value="answer.id" t-att-checked="'checked' if slide.id in user_progress and user_progress[slide.id].completed and answer.is_correct else False" t-att-disabled="slide.id in user_progress and user_progress[slide.id].completed"/>
+ <span t-if="not slide.id in user_progress or not (user_progress[slide.id].completed and answer.is_correct)"/>
+ <i t-if="slide.id in user_progress and user_progress[slide.id].completed and answer.is_correct" class="fa fa-check-circle"></i>
+ </label>
+ <span t-esc="answer.text_value"/>
+ </li>
+ <t t-set="j" t-value="j+1"/>
+ </t>
+ </ul>
+ </div>
+ </div>
+ <t t-set="i" t-value="i+1"/>
+ </t>
+ <button t-if="not slide.id in user_progress or not user_progress[slide.id].completed" class="btn btn-primary submit-quiz" >Check your answers</button>
+ <a t-if="next_slide" t-attf-style="#{'display: none' if not slide.id in user_progress or not user_progress[slide.id].completed else ''}" class="btn btn-primary next-slide" t-attf-href="/slides/slide/#{next_slide}">Continue</a>
+ </div>
+
+ </div>
+ </div>
<div class="row mt-3">
- <h4 t-field="slide.name" class="col-lg-6"/>
<div class="col-lg-6">
<div clas="row">
<div class="col-lg-8" t-if="slide.tag_ids">
@@ -454,6 +648,21 @@
<span class="sr-only"><t t-esc="slide.likes"/> Likes</span>
</div>
</div>
+
+ <div class="mt8">
+ <t t-call="website_rating.rating_stars_static_popup_composer">
+ <t t-set="rating_avg" t-value="rating_avg"/>
+ <t t-set="rating_total" t-value="rating_count"/>
+ <t t-set="object" t-value="slide"/>
+ <t t-set="hash" t-value="message_post_hash"/>
+ <t t-set="pid" t-value="message_post_pid"/>
+ <t t-set="default_message_id" t-value="last_message_id"/>
+ <t t-set="default_message" t-value="last_message"/>
+ <t t-set="default_rating_value" t-value="last_rating_value"/>
+ <t t-set="force_submit_url" t-value="'/slides/mail/update_comment' if last_message_id else False"/>
+ </t>
+ </div>
+
<!-- LikeButton widget -->
<div t-if="slide.channel_id.channel_type == 'documentation' and slide.channel_id.allow_comment" class="text-muted mt4">
<div class="float-right mb16 text-right o_wslides_like">
@@ -494,6 +703,11 @@
<i class="fa fa-comments-o"></i> Comments
</a>
</li>
+ <li t-if="not slide.channel_id.allow_comment" class="nav-item">
+ <a href="#discuss" aria-controls="discuss" t-attf-class="nav-link#{comments and ' active' or ''}" role="tab" data-toggle="tab">
+ <i class="fa fa-star"></i> Ratings
+ </a>
+ </li>
<li class="nav-item">
<a href="#transcript" aria-controls="transcript" class="nav-link" role="tab" data-toggle="tab">
<i class="fa fa-align-justify"></i> Transcript
@@ -532,7 +746,7 @@
The social sharing module will be unlocked when a moderator will allow your publication.
</h4>
</div>
- <div t-if="slide.channel_id.allow_comment" role="tabpanel" t-att-class="comments and 'tab-pane fade in show active' or 'tab-pane fade'" id="discuss">
+ <div role="tabpanel" t-att-class="comments and 'tab-pane fade in show active' or 'tab-pane fade'" id="discuss">
<t t-call="portal.message_thread">
<t t-set="object" t-value="slide"/>
<t t-set="hash" t-value="message_post_hash"/>
@@ -638,7 +852,7 @@
</div>
</div>
</div>
- <div class="col-xl-4 col-lg-4 col-md-12 col-12">
+ <div t-if="slide.channel_id.channel_type == 'documentation'" class="col-xl-4 col-lg-4 col-md-12 col-12">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item"><a aria-controls="related" href="#related" class="nav-link active" data-toggle="tab">Related</a></li>
<li class="nav-item"><a aria-controls="most_viewed" href="#most_viewed" class="nav-link" data-toggle="tab">Most Viewed</a></li>
@@ -651,7 +865,7 @@
<t t-if="not related_slides_list">
No presentation available.
</t>
- <t t-foreach="related_slides_list" t-as="slide">
+ <t t-else="" t-foreach="related_slides_list" t-as="related_slide">
<t t-call="website_slides.related_slides"/>
</t>
</ul>
@@ -664,7 +878,7 @@
<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-else="" t-foreach="most_viewed_slides_list" t-as="related_slide">
<t t-call="website_slides.related_slides"/>
</t>
</ul>
@@ -677,16 +891,114 @@
</t>
</template>
+<!-- Slide template for the fullscreen mode -->
+<template id="slide_fullscreen" name="Fullscreen">
+ <t t-call="website.layout">
+ <div class="o_wslides">
+ <div class="o_wslides_slide_fullscreen_header">
+ <div>
+ <a id="fullscreen_sidebar_button" href="#" class="active o_wslides_fullscreen_toggle_sidebar"><i class="fa fa-bars"></i>Lessons</a>
+ <a class="o_wslides_small_screen" t-attf-href="/slides/slide/#{slug(slide)}" target="new"><i class="fa fa-pencil"></i>write a review</a>
+ <div class="o_wslides_fullscreen_slide_title"/>
+ </div>
+ <div>
+ <a t-attf-href="/slides/">back to courses</a>
+ </div>
+ </div>
+ <div class="o_wslides_fullscreen_container">
+ <div class="oe_js_side_bar_list o_wslides_fullscreen_sidebar">
+ <ul>
+ <li>
+ <div class="o_wslides_fullscreen_sidebar_header">
+ <a t-attf-href="/slides/#{slug(slide.channel_id)}">
+ <span t-field="slide.channel_id.name"/>
+ </a>
+ <div class="o_wslides_slide_fullscreen_progress_box">
+ <div class="o_wslides_fullscreen_sidebar_progressbar">
+ <div class="o_wslides_fullscreen_sidebar_progress_gauge oe_slide_js_progress_bar" t-attf-channel_completion="#{slide.channel_id.completion}"/>
+ </div>
+ <span><span class="o_wslides_progress_percentage" t-esc="slide.channel_id.completion"/>%</span>
+ </div>
+ </div>
+ </li>
+ <t t-set="i" t-value="0"/>
+ <t t-foreach="slide.channel_id.category_ids" t-as="category">
+ <div class="o_wslides_fullscreen_sidebar_section">
+ <a data-toggle="collapse" t-attf-href="#collapse-#{category.id}" role="button" aria-expanded="true" t-attf-aria-controls="collapse-#{category.id}">
+ <li class="o_wslides_fullscreen_sidebar_section_tab">
+ <span t-field="category.name"/>
+ </li>
+ </a>
+ <ul class="o_wslides_fullscreen_sidebar_section_slides collapsed p-0 m-0" t-attf-id="collapse-#{category.id}" >
+ <t t-foreach="category.slide_ids" t-as="course_slide">
+ <li t-att-index="i" t-att-slide_id="course_slide.id" t-attf-class="#{'active' if slide.id == course_slide.id else ''}">
+ <span class="o_wslides_fullscreen_slide_tab_line">
+ <span class="o_wslides_top_line"></span>
+ <i t-attf-id="check-#{course_slide.id}" t-if="not course_slide.id in user_progress or not user_progress[course_slide.id].completed" class="check-done fa fa-circle-thin"></i>
+ <i t-attf-id="check-#{course_slide.id}" t-if="course_slide.id in user_progress and user_progress[course_slide.id].completed" class="check-done o_wslides_slide_completed fa fa-check-circle"></i>
+ <span class="o_wslides_bottom_line"></span>
+ </span>
+ <a t-att-index="i" t-att-slide_id="course_slide.id">
+ <div t-attf-index="#{i}"
+ t-attf-slide_slug="#{slug(course_slide)}"
+ t-attf-done="#{course_slide.id in user_progress and user_progress[course_slide.id].completed}"
+ t-attf-slide_id="#{course_slide.id}"
+ t-attf-slide_name="#{course_slide.name}"
+ t-attf-quiz="#{True if course_slide.question_ids else False}"
+ t-attf-slide_type="#{course_slide.slide_type}"
+ t-attf-slide_embed_code="#{course_slide.embed_code}"
+ t-attf-class="o_wslides_fullscreen_sidebar_slide_tab #{'active' if slide.id == course_slide.id else ''} d-flex justify-content-between">
+ <div>
+ <i t-if="course_slide.slide_type == 'document'" class="fa fa-file-pdf-o mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'infographic'" class="fa fa-file-picture-o mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'video'" class="fa fa-play-circle mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'link'" class="fa fa-file-code-o mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'webpage'" class="fa fa-file-text mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'quiz'" class="fa fa-question-circle mr-2 text-muted"></i>
+ <i t-if="course_slide.slide_type == 'certification'" class="fa fa-trophy mr-2 text-muted"></i>
+ <t t-esc="course_slide.name"/>
+ </div>
+ </div>
+ </a>
+ </li>
+ <t t-if="course_slide.link_ids" t-foreach="course_slide.link_ids" t-as="link">
+ <li>
+ <span class="o_wslides_fullscreen_slide_tab_line">
+ <span class="o_wslides_full_line"/>
+ </span>
+ <a class="o_wslides_slide_link" t-att-href="link.link" target="new"><i class="fa fa-link"></i><span t-esc="link.name"/></a>
+ </li>
+ </t>
+ <li t-att-index="i" t-if="course_slide.question_ids and not course_slide.slide_type =='quiz'">
+ <span class="o_wslides_fullscreen_slide_tab_line">
+ <span class="o_wslides_full_line"/>
+ </span>
+ <span class="o_wslides_slide_quiz" t-att-index="i"><i class="fa fa-flag-checkered"></i>Quiz: <span t-esc="course_slide.name"/></span>
+ </li>
+ <t t-set="i" t-value="i+1"/>
+ </t>
+ </ul>
+ </div>
+ </t>
+ </ul>
+ </div>
+ <div class="oe_js_course_slide" t-attf-user_id="#{user.id}" t-attf-course_name="#{slide.channel_id.name}" t-attf-course_id="#{slide.channel_id.id}" t-attf-course_slug="#{slug(slide.channel_id)}" t-attf-slide_id="#{slide.id}"/>
+ <div class="o_wslides_fullscreen_player"/>
+ </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 mt-3">
- <a t-attf-href="/slides/slide/#{slug(slide)}" class="mr-3">
- <img class="oe_slides_apart_small" t-attf-src="/web/image/slide.slide/#{slide.id}/image_small" alt="slide.name"/>
+ <a t-attf-href="/slides/slide/#{slug(related_slide)}" class="mr-3">
+ <img class="oe_slides_apart_small" t-attf-src="/web/image/slide.slide/#{related_slide.id}/image_small" alt="related_slide.name"/>
</a>
<div class="media-body">
- <a t-attf-href="/slides/slide/#{slug(slide)}"><h6 t-esc="slide.name" class="mb-1"/></a>
+ <a t-attf-href="/slides/slide/#{slug(related_slide)}"><h6 t-esc="related_slide.name" class="mb-1"/></a>
<small class="text-muted">
- <t t-esc="slide.total_views"/> Views . <timeago class="timeago" t-att-datetime="slide.create_date"></timeago>
+ <t t-esc="related_slide.total_views"/> Views . <timeago class="timeago" t-att-datetime="related_slide.create_date"></timeago>
</small>
</div>
</li>