247 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| {% extends "templates/base.html" %}
 | |
| {% block title %}{{ content.name or 'Content Page' }}{% endblock %}
 | |
| 
 | |
| {% block head_include %}
 | |
| 	<style>
 | |
| 		.lms-content {
 | |
| 			line-height: 1.8em;
 | |
| 		}
 | |
| 
 | |
| 		.lms-content h1 {
 | |
| 			margin-top: 1em;
 | |
| 		}
 | |
| 
 | |
| 		.lms-content h2 {
 | |
| 			margin-top: 1em;
 | |
| 		}
 | |
| 
 | |
| 		.lms-content h3 {
 | |
| 			margin-top: 0.8em;
 | |
| 		}
 | |
| 
 | |
| 		.lms-content h4 {
 | |
| 			margin-top: 0.6em;
 | |
| 		}
 | |
| 
 | |
| 		section {
 | |
| 			padding: 5rem 0 5rem 0;
 | |
| 		}
 | |
| 		.plyr--video .plyr__control.plyr__tab-focus,
 | |
| 		.plyr--video .plyr__control:hover,
 | |
| 		.plyr--video .plyr__control[aria-expanded='true'] {
 | |
| 			 background: #5e64ff !important;
 | |
| 		}
 | |
| 
 | |
| 		.plyr__control--overlaid:focus,
 | |
| 		.plyr__control--overlaid:hover {
 | |
| 		  background: #5e64ff !important;
 | |
| 		}
 | |
| 
 | |
| 		.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before {
 | |
|     		background: #5e64ff !important;
 | |
| 		}
 | |
| 
 | |
| 		.plyr__menu__container
 | |
| 		.plyr__control[role='menuitemradio'][aria-checked='true']::before {
 | |
| 		  background: #5e64ff;
 | |
| 		}
 | |
| 		.plyr--full-ui input[type='range'] {
 | |
| 		  color: #5e64ff !important;
 | |
| 		}
 | |
| 
 | |
| 		.plyr__control--overlaid {
 | |
| 			background: rgba(94, 100, 255, 0.8) !important;
 | |
| 		}
 | |
| 	</style>
 | |
| 	<link rel="stylesheet" href="https://cdn.plyr.io/3.5.3/plyr.css" />
 | |
| {% endblock %}
 | |
| 
 | |
| {% macro title() %}
 | |
| 	<div class="mb-3">
 | |
| 		<a href="/lms/course?name={{ course }}&program={{ program }}" class="text-muted">
 | |
| 			{{_('Back to Course')}}
 | |
| 		</a>
 | |
| 	</div>
 | |
| 	<div class="lms-title">
 | |
| 		<h2>{{ content.name }} <span class="small text-muted">({{ position + 1 }}/{{length}})</span></h2>
 | |
| 		<div class="lms-timer float-right fond-weight-bold hide"></div>
 | |
| 	</div>
 | |
| {% endmacro %}
 | |
| 
 | |
| {% macro navigation() %}
 | |
| 		{% if previous %}
 | |
| 			<a href="/lms/content?program={{ program }}&course={{ course }}&topic={{ topic }}&type={{ previous.content_type }}&content={{ previous.content }}" class='btn text-muted' style="box-shadow: none;">{{_('Previous')}}</a>
 | |
| 		{% else %}
 | |
| 			<a href="/lms/course?name={{ course }}&program={{ program }}" class='btn text-muted' style="box-shadow: none;">{{ _('Back to Course') }}</a>
 | |
| 		{% endif %}
 | |
| 
 | |
| 		{% if next %}
 | |
| 			<button id="nextButton" onclick="handle('/lms/content?program={{ program }}&course={{ course }}&topic={{ topic }}&type={{ next.content_type }}&content={{ next.content }}')" class='btn btn-primary' disabled="true">{{_('Next')}}</button>
 | |
| 		{% else %}
 | |
| 			<button id="nextButton" onclick="handle('/lms/course?name={{ course }}&program={{ program }}')" class='btn btn-primary' disabled="true">{{_('Finish Topic')}}</button>
 | |
| 		{% endif %}
 | |
| {% endmacro %}
 | |
| 
 | |
| {% macro video() %}
 | |
| <div class="mb-5">
 | |
| 	{{ title() }}
 | |
| 	<div class="text-muted">
 | |
| 		{% if content.duration %}
 | |
| 			{{ content.duration }} {{_('Mins')}}
 | |
| 		{% endif %}
 | |
| 
 | |
| 		{% if content.publish_date and content.duration%}
 | |
| 			-
 | |
| 		{% endif %}
 | |
| 
 | |
| 		{% if content.publish_date %}
 | |
| 			{{_('Published on')}} {{ content.publish_date.strftime('%d, %b %Y') }}
 | |
| 		{% endif %}
 | |
| 	</div>
 | |
| </div>
 | |
| <div id="player" data-plyr-provider="{{ content.provider|lower }}" data-plyr-embed-id="{{ content.url }}"></div>
 | |
| <div class="my-5 lms-content">
 | |
| 	{{ content.description }}
 | |
| </div>
 | |
| {% endmacro %}
 | |
| 
 | |
| {% macro article() %}
 | |
| <div class="mb-5">
 | |
| 	{{ title() }}
 | |
| 	<div class="text-muted">
 | |
| 		{% if content.author or content.publish_date %}
 | |
| 			{{_('Published')}}
 | |
| 		{% endif %}
 | |
| 		{% if content.author %}
 | |
| 			{{_('by')}} {{ content.author }}
 | |
| 		{% endif %}
 | |
| 		{% if content.publish_date %}
 | |
| 			{{_('on')}} {{ content.publish_date.strftime('%d, %b %Y') }}
 | |
| 		{% endif %}
 | |
| 	</div>
 | |
| </div>
 | |
| <div class="lms-content">
 | |
| 	{{ content.content }}
 | |
| </div>
 | |
| {% endmacro %}
 | |
| 
 | |
| {% macro quiz() %}
 | |
| <div class="mb-5">
 | |
| 	{{ title() }}
 | |
| </div>
 | |
| <div id="quiz-wrapper">
 | |
| </div>
 | |
| {% endmacro %}
 | |
| 
 | |
| {% block content %}
 | |
| <section class="section">
 | |
| 	<div>
 | |
| 		<div class='container pb-5'>
 | |
| 			{% if content_type=='Video' %}
 | |
| 				{{ video() }}
 | |
| 			{% elif content_type=='Article'%}
 | |
| 				{{ article() }}
 | |
| 			{% elif content_type=='Quiz' %}
 | |
| 				{{ quiz() }}
 | |
| 			{% endif %}
 | |
| 			<div class="pull-right" {{ 'hidden' if content_type=='Quiz'}}>
 | |
| 				{{ navigation() }}
 | |
| 			</div>
 | |
| 		</div>
 | |
| 	</div>
 | |
| </section>
 | |
| {% endblock %}
 | |
| 
 | |
| {% block script %}
 | |
| 	{% if content_type=='Video' %}
 | |
| 		<script src="https://cdn.plyr.io/3.5.3/plyr.js"></script>
 | |
| 	{% elif content_type == 'Quiz' %}
 | |
| 		<script src='/assets/erpnext/js/education/lms/quiz.js'></script>
 | |
| 	{% endif  %}
 | |
| 	<script>
 | |
| 		{% if content_type == 'Video' %}
 | |
| 			const player = new Plyr('#player');
 | |
| 		{% elif content_type == 'Quiz' %}
 | |
| 			{% if next %}
 | |
| 			const quiz_exit_button = 'Next'
 | |
| 			const next_url = '/lms/content?program={{ program }}&course={{ course }}&topic={{ topic }}&type={{ next.content_type }}&content={{ next.content }}'
 | |
| 			{% else %}
 | |
| 			const quiz_exit_button = 'Finish Course'
 | |
| 			const next_url = '/lms/course?name={{ course }}&program={{ program }}'
 | |
| 			{% endif %}
 | |
| 			frappe.ready(() => {
 | |
| 				{% if content.is_time_bound %}
 | |
| 					var duration = get_duration("{{content.duration}}")
 | |
| 					var d = frappe.msgprint({
 | |
| 						title: __('Important Notice'),
 | |
| 						indicator: "red",
 | |
| 						message: __(`This is a Time-Bound Quiz. <br><br>
 | |
| 						A timer for <b>${duration}</b> will start, once you click on <b>Proceed</b>. <br><br>
 | |
| 						If you fail to submit before the time is up, the Quiz will be submitted automatically.`),
 | |
| 						primary_action: {
 | |
| 							label: __("Proceed"),
 | |
| 							action: () => {
 | |
| 								create_quiz();
 | |
| 								d.hide();
 | |
|         					}
 | |
| 						},
 | |
| 						secondary_action: {
 | |
| 							action: () => {
 | |
| 								d.hide();
 | |
| 								window.location.href = "/lms/course?name={{ course }}&program={{ program }}";
 | |
| 							},
 | |
| 							label: __("Go Back"),
 | |
| 						}
 | |
| 					});
 | |
| 				{% else %}
 | |
| 					create_quiz();
 | |
| 				{% endif %}
 | |
| 				function create_quiz() {
 | |
| 					const quiz = new Quiz(document.getElementById('quiz-wrapper'), {
 | |
| 						name: '{{ content.name }}',
 | |
| 						course: '{{ course }}',
 | |
| 						program: '{{ program }}',
 | |
| 						quiz_exit_button: quiz_exit_button,
 | |
| 						next_url: next_url
 | |
| 					})
 | |
| 					window.quiz = quiz;
 | |
| 				}
 | |
| 				function get_duration(seconds){
 | |
| 					var hours = append_zero(Math.floor(seconds / 3600));
 | |
| 					var minutes = append_zero(Math.floor(seconds % 3600 / 60));
 | |
| 					var seconds = append_zero(Math.floor(seconds % 3600 % 60));
 | |
| 					return `${hours}:${minutes}:${seconds}`;
 | |
| 				}
 | |
| 				function append_zero(time) {
 | |
| 					return time > 9 ? time : "0" + time;
 | |
| 				}
 | |
| 			})
 | |
| 		{% endif  %}
 | |
| 
 | |
| 		{% if content_type != 'Quiz' %}
 | |
| 
 | |
| 		frappe.ready(() => {
 | |
| 			next = document.getElementById('nextButton')
 | |
| 			next.disabled = false;
 | |
| 		})
 | |
| 
 | |
| 
 | |
| 		function handle(url) {
 | |
| 			opts = {
 | |
| 				method: "erpnext.education.utils.add_activity",
 | |
| 				args: {
 | |
| 					course: "{{ course }}",
 | |
| 					content_type: "{{ content_type }}",
 | |
| 					content: "{{ content.name }}",
 | |
| 					program: "{{ program }}"
 | |
| 				}
 | |
| 			}
 | |
| 			frappe.call(opts).then(res => {
 | |
| 				window.location.href = url;
 | |
| 			})
 | |
| 		}
 | |
| 
 | |
| 		{% endif %}
 | |
| 	</script>
 | |
| {% endblock %}
 |