diff --git a/capsule-prototype/js/online-rekall/RekallApplication.js b/capsule-prototype/js/online-rekall/RekallApplication.js index ce1cd2a023cf94b817e15b767810012cc8a6bd34..c214d4e070efd711ed12dd41534e6798ff399253 100644 --- a/capsule-prototype/js/online-rekall/RekallApplication.js +++ b/capsule-prototype/js/online-rekall/RekallApplication.js @@ -7,7 +7,8 @@ 'setPlaybackRate', 'videoPlayer', 'rekall', - 'getUrl' + 'getUrl', + 'projectName' ]; let localOptions = {}; @@ -33,6 +34,26 @@ window.top.location.assign(arguments[0]); } }, + projectName: function(){ + if (0 === arguments.length) { + if (localOptions?.Rekall?.project?.metadata) { + return localOptions.Rekall.project.metadata["Title"]; + } + + return ""; + } + else if ('string' === typeof arguments[0]) { + if (!localOptions?.Rekall?.project?.metadata["Title"]){ + localOptions.Rekall.project.metadata["Title"] = ''; + } + + if(localOptions.Rekall.project.metadata["Title"] !== arguments[0]) + { + localOptions.Rekall.project.metadata["Title"] = arguments[0]; + localOptions.PubSub.publish('updated.project.name', { projectName: localOptions.Rekall.project.metadata["Title"] }) + } + } + }, pubSub: function () { return localOptions.PubSub; }, diff --git a/capsule-prototype/js/online-script.js b/capsule-prototype/js/online-script.js index afd9f67b8e4412ed7cd0213854288ff0472a7fc4..d37dbafbd905ec8ac77d9e6a2c0755f085a2e744 100644 --- a/capsule-prototype/js/online-script.js +++ b/capsule-prototype/js/online-script.js @@ -11,6 +11,7 @@ window.onload = function() { pubSub.subscribe('video', openVideo); pubSub.subscribe('open_paste_modal', openPasteModal); pubSub.subscribe('close_paste_modal', closePasteModal); + pubSub.subscribe('updated.project.name', onUpdatedProjectName) }; $(document).ready(function() { @@ -77,7 +78,7 @@ $(document).ready(function() { event.stopPropagation(); $("#popupSettingsSpace").show(); - $("#popupSettingsTitle").html(rekall.project.metadata["Title"]).removeClass("empty"); + $("#popupSettingsTitle").html(window.app.rekall.Rekall('projectName')).removeClass("empty"); $("#popupSettingsAuthor").html(rekall.project.metadata["Author"]).removeClass("empty"); $("#popupSettingsEmail").html(rekall.project.metadata["Email"]).removeClass("empty"); $("#popupSettingsCredits").html(rekall.project.metadata["Comments"].replace(/\n/gi, "<br/>")).removeClass("empty"); @@ -222,8 +223,8 @@ function setEditionControls() { rekall.timeline.pause(); $("#popupSettingsSpace").show(); - if(rekall.project.metadata["Title"]!="") { - $("#popupSettingsTitle").html(rekall.project.metadata["Title"]).removeClass("empty"); + if(window.app.rekall.Rekall('projectName') && window.app.rekall.Rekall('projectName') != "") { + $("#popupSettingsTitle").html(window.app.rekall.Rekall('projectName')).removeClass("empty"); $("#popupSettingsTitleLabel").show(); } else { $("#popupSettingsTitle").html("+ Add project name").addClass("empty"); @@ -662,7 +663,7 @@ function openAlert(message, buttons) { closeAlert(); if(message=="input"){ - $("#popupAlertMessage").html("Copy this link to share <i>"+rekall.project.metadata["Title"]+"</i>"); + $("#popupAlertMessage").html("Copy this link to share <i>"+ window.app.rekall.Rekall('projectName') +"</i>"); $(".popupAlertButton").hide(); $("#popupAlertButtonOk").show(); @@ -674,7 +675,7 @@ function openAlert(message, buttons) { $("#popupAlertInput").focus().select(); } else if(message=="textarea"){ - $("#popupAlertMessage").html("Embed <i>"+rekall.project.metadata["Title"]+"</i> on your webpage"); + $("#popupAlertMessage").html("Embed <i>"+ window.app.rekall.Rekall('projectName')+"</i> on your webpage"); $(".popupAlertButton").hide(); $("#popupAlertButtonOk").show(); @@ -723,8 +724,8 @@ function closeSettingsInputs() { if($(this).attr("id")=="popupSettingsTitleInput") { var newName = $(this).val().trim(); + window.app.rekall.Rekall('projectName', newName); $(this).val(newName); - setProjectMeta("Title", newName); if(newName!="") { $("#popupSettingsTitle").html(newName).removeClass("empty"); @@ -1194,6 +1195,10 @@ function removeProject() { }); } +function onUpdatedProjectName(msg, data) { + setProjectMeta('Title', data.projectName); +} + function setProjectMeta(metaType, meta) { rouletteStart(); $.ajax("php/project.php", { @@ -1388,8 +1393,8 @@ function uploadFilesNext() { //Code d'embarquement du projet Rekall function shareEmbed() { var width = 960, height = round(width * 0.44); - var embedUrl = '<iframe src="' + rekall.baseUrl + '?w=1" width="' + width + '" height="' + height + '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>'; - embedUrl += '<p><a href="' + rekall.baseUrl + '?w=1">' + rekall.project.metadata["Title"] + '</a> from '+rekall.project.metadata["Author"]+' on <a href="http://www.memorekall.fr">MemoRekall</a>.</p>'; + var embedUrl = '<iframe src="' + window.app.rekall.Rekall('getUrl', 'projectPreview') + '" width="' + width + '" height="' + height + '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>'; + embedUrl += '<p><a href="' + window.app.rekall.Rekall('getUrl', 'projectPreview') + '">' + window.app.rekall.Rekall('projectName') + '</a> from '+rekall.project.metadata["Author"]+' on <a href="http://www.memorekall.fr">MemoRekall</a>.</p>'; console.log(embedUrl); // openAlert("Embed code in console"); return embedUrl; @@ -1397,8 +1402,7 @@ function shareEmbed() { function shareLink() { var width = 960, height = round(width * 0.44); - var embedUrl = rekall.baseUrl + "?w=1"; -// openAlert(embedUrl); + var embedUrl = window.app.rekall.Rekall('getUrl', 'projectPreview'); return embedUrl; } diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index b9f1a4f3d4541838edda1581f5b0010701ae132e..3b3afeb1f1f65efc81600470551840f27b30bc5d 100755 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -50,7 +50,7 @@ class ProjectController extends AbstractController $this->createDefaultProjectStructure($capsule_directory); - $this->setVideoUrlNodeAttributeInXMLProjectFile($capsule_directory, $video_url); + $this->configureXMLProjectFile($capsule_directory, $video_url, $capsule); $this->createOrUpdatePasswordFile($capsule_directory, $capsule->getPassword()); @@ -149,7 +149,7 @@ class ProjectController extends AbstractController $project_directory = $capsule->getLinkPath(); chdir('../legacy/'); - $this->setVideoUrlNodeAttributeInXMLProjectFile($project_directory, $new_video_url); + $this->configureXMLProjectFile($project_directory, $new_video_url, $capsule); $this->addFlash( 'success', @@ -189,8 +189,11 @@ class ProjectController extends AbstractController ); } - private function setVideoUrlNodeAttributeInXMLProjectFile(string $project_directory, string $video_url): void - { + private function configureXMLProjectFile( + string $project_directory, + string $video_url, + Capsule $capsule + ): void { $project_xml_file = $project_directory . "/file/project.xml"; $xml_file_content = simplexml_load_file($project_xml_file); @@ -200,6 +203,11 @@ class ProjectController extends AbstractController /** @phpstan-ignore-next-line */ $xml_file_content->video['url'] = $video_url; + $xml_file_content->addChild('projectMeta'); + /** @phpstan-ignore-next-line */ + $xml_file_content->projectMeta['ctg'] = 'Title'; + /** @phpstan-ignore-next-line */ + $xml_file_content->projectMeta['cnt'] = $capsule->getName(); $video_url_XML_tag_is_filled = $xml_file_content->saveXML($project_xml_file); if (false === $video_url_XML_tag_is_filled) { diff --git a/templates/project/edit.html.twig b/templates/project/edit.html.twig index 2faddade7986fe6a7559ad5c224986b30ce78c62..47ed2749375569c1c64092b2dd6465ef5ca3cde5 100644 --- a/templates/project/edit.html.twig +++ b/templates/project/edit.html.twig @@ -1,6 +1,12 @@ {% extends 'layout.html.twig' %} {% block body %} + <div class="m-auto d-flex flex-row align-items-center justify-content-center mb-5" role="status"> + <span class="pr-5">{{ 'preview.loading' | trans }}</span> + <span class="spinner-grow spinner-grow-sm mx-2" role="status" aria-hidden="true"></span> + <span class="spinner-grow spinner-grow-sm mx-2" role="status" aria-hidden="true"></span> + <span class="spinner-grow spinner-grow-sm mx-2" role="status" aria-hidden="true"></span> + </div> <iframe src="{{ url }}" id="legacyContent"