$this->addField('', FormSeparator::class);
$this->addField('complete_button', Checkbox::class, __('Marquer terminer après un clic sur un bouton'), ['default' => false, 'when' => ['type' => 'pdf']]);
$this->addField('complete_pct', Percent::class, __('Marquer terminé quand ce pourcentage est lu'), ['default' => 75, 'when' => ['complete_button' => 0, 'type' => ['logical_operator' => 'OR', 'values' => ['video', 'audio']]]]);
-
-
}
public function preSave()
/** @var Media $file */
$file = $this->getMediaInField('file')->first()->getPath();
- self::compileFromFile($file, $dest, $this->title, $organization, 'MEDIA_' . $this->id, $this->scorm_version, 75);
+ self::compileFromFile($file, $dest, $this->title, $organization, 'MEDIA_' . $this->id, $this->scorm_version, $this->type === 'pdf' && $this->complete_button ? "'button'" : $this->complete_pct);
}
/**
* @param $title string
* @param $organization string
* @param $reference string
- * @param $complete_pct int
+ * @param $complete_pct int|string
* @return string
* @throws \Exception
*/
$vdir->file_put_contents('pdfjs/web/viewer.css', $css);
}
$vdir->copy($file, 'media.' . $ext);
- $vdir->file_put_contents('index.html', view('elearningmedia.index', ['complete_pct' => $complete_pct, 'title' => $title, 'type' => $type]));
+ $vdir->file_put_contents('index.html', view('elearningmedia.index', ['complete_pct' => $complete_pct,'title' => $title, 'type' => $type]));
$vdir->sync(true);
return $title;
}
window.$ = window.jQuery = $;
window.openTime = Date.now();
+window.playerIframe = document.getElementById('player');
+window.playerWindow = playerIframe.contentWindow;
+
+
+window.addEventListener("resize", function () {
+ resize();
+});
+
document.addEventListener("DOMContentLoaded", function () {
var media = document.getElementById('player');
if (media.tagName.toLowerCase() === 'audio') {
cubeSCORM.initScorm();
- var pc = (parseInt(window.progressComplete) / 100);
+ var pc = window.progressComplete;
+ if (pc !== 'button') {
+ pc = (parseInt(window.progressComplete) / 100);
+ }
var interval;
if (window.type === 'audio' || window.type === 'video') {
interval = setInterval(function () {
}
}, 1000);
} else if (window.type === 'pdf') {
- var playerIframe = document.getElementById('player');
+
playerIframe.addEventListener('load', function () {
- var playerWindow = playerIframe.contentWindow;
+ var interval;
+ if (pc === 'button') {
+ interval = setInterval(function () {
+ try {
+ var app = playerWindow.PDFViewerApplication;
+ if (app === undefined || app === null) {
+ return;
+ }
+ var pdfViewer = app.pdfViewer;
+ if (pdfViewer === undefined || pdfViewer === null) {
+ return;
+ }
- var interval = setInterval(function () {
- console.log('Check pdf progress');
- try {
- var app = playerWindow.PDFViewerApplication;
- if (app === undefined || app === null) {
- return;
- }
- var pdfViewer = app.pdfViewer;
- if (pdfViewer === undefined || pdfViewer === null) {
- return;
+ let container = pdfViewer.container;
+ container.addEventListener('scroll', function () {
+ if (container.scrollTop / (container.scrollHeight - container.offsetHeight) > 0.95) {
+ resize();
+ showCompleteButton();
+ }
+ });
+ clearInterval(interval);
+ } catch (e) {
+ console.error('Error while updating pdf course status');
+ console.error(e);
}
+ }, 200);
+ } else {
+ interval = setInterval(function () {
+ console.log('Check pdf progress');
+ try {
+ var app = playerWindow.PDFViewerApplication;
+ if (app === undefined || app === null) {
+ return;
+ }
+ var pdfViewer = app.pdfViewer;
+ if (pdfViewer === undefined || pdfViewer === null) {
+ return;
+ }
- var total = pdfViewer.pagesCount;
- var current = pdfViewer._currentPageNumber;
- if (total > 0 && current / total >= pc) {
- markComplete(interval);
- }
+ var total = pdfViewer.pagesCount;
+ var current = pdfViewer._currentPageNumber;
+ if (total > 0 && current / total >= pc) {
+ markComplete(interval);
+ }
- } catch (e) {
- console.error('Error while updating pdf course status');
- console.error(e);
- }
- }, 1000);
+ } catch (e) {
+ console.error('Error while updating pdf course status');
+ console.error(e);
+ }
+ }, 1000);
+ }
});
}
});
});
+function showCompleteButton() {
+ document.getElementById('completeButton').classList.add('visible')
+}
+
function markComplete(interval) {
cubeSCORM.scormMarkAsComplete();
clearInterval(interval);
}
+
+function resize() {
+ let v = (playerWindow.innerWidth - playerWindow.document.querySelector('.page').getBoundingClientRect().width) / 2 + 30;
+ document.getElementById("completeButton").style.right = v + 'px';
+}