mirror of
https://github.com/UiO-Gaming/infoscreen3.git
synced 2026-11-05 13:56:52 +01:00
209 lines
7.9 KiB
Twig
209 lines
7.9 KiB
Twig
{% extends 'layout/edit.twig' %}
|
|
|
|
{% block header %}
|
|
{% if config.useLocalAssets %}
|
|
<script src="/assets/socket.io.min.js"></script>
|
|
<script src="/assets/jquery.jeditable.min.js"></script>
|
|
{% else %}
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.6.0/socket.io.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jeditable.js/2.0.6/jquery.jeditable.min.js"></script>
|
|
{% endif %}
|
|
<style>
|
|
#sortable1, #sortable2 {
|
|
height: 100%;
|
|
}
|
|
</style>
|
|
{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="ui inverted basic segment">
|
|
<h1 class="ui inverted header">{{ t("admin.editBundleSlides.editBundles")}}</h1>
|
|
|
|
<div class="ui grid" style="height: 100%;">
|
|
<div class="ui eight wide column">
|
|
<div class="ui selection dropdown" id="bundle1">
|
|
<input type="hidden" name="bundle1">
|
|
<i class="dropdown icon"></i>
|
|
<div class="default text">Bundle</div>
|
|
<div class="menu">
|
|
</div>
|
|
</div>
|
|
<div class="ui slides list connectedSortable" id="sortable1" data-bundleDir="">
|
|
|
|
</div>
|
|
</div>
|
|
<div class="eight wide column">
|
|
<div class="ui selection dropdown" id="bundle2">
|
|
<input type="hidden" name="bundle2">
|
|
<i class="dropdown icon"></i>
|
|
<div class="default text">Bundle</div>
|
|
<div class="menu">
|
|
</div>
|
|
</div>
|
|
<div class="ui slides list connectedSortable" id="sortable2" data-bundleDir="">
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
var socket = io("{{ config.serverUrl }}/admin");
|
|
|
|
function editSlide(bundleName, uuid, type) {
|
|
switch (type) {
|
|
case "slide":
|
|
window.open("/admin/edit/slide?bundle=" + bundleName + "&file=" + uuid, '_blank', 'location=no,height=800,width=1304,scrollbars=no,status=no');
|
|
break;
|
|
case "webpage":
|
|
window.open("/admin/edit/link?bundle=" + bundleName + "&file=" + uuid, '_blank', 'location=no,height=400,width=600,scrollbars=no,status=no');
|
|
break;
|
|
}
|
|
}
|
|
|
|
function duplicateSlide(bundleDir, uuid) {
|
|
if (confirm('{{ t("admin.editBundleSlides.askDuplicate")}}') == true) {
|
|
socket.emit("admin.duplicateSlide", {bundleName: bundleDir, uuid: uuid});
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function removeSlide(bundleDir, uuid) {
|
|
if (confirm('{{ t("admin.editBundleSlides.askDelete")}}') == true) {
|
|
socket.emit("admin.removeSlide", {bundleName: bundleDir, uuid: uuid});
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
function updateBundleData() {
|
|
loadBundleData("#sortable1", $("#bundle1").dropdown("get value"));
|
|
loadBundleData("#sortable2", $("#bundle2").dropdown("get value"));
|
|
}
|
|
|
|
function loadBundleData(block, bundleDir) {
|
|
$.getJSON("/admin/ajax/getSlides?bundle="+bundleDir, function (data) {
|
|
var htmlData = "";
|
|
|
|
for(var slide of data.allSlides) {
|
|
htmlData +=`<div class="ui green message item" data-uuid="${slide.uuid}" data-bundle="${bundleDir}">
|
|
<div class="ui right floated content" style="width: fit-content;">
|
|
<button class="ui small basic inverted icon button"
|
|
onclick="editSlide('${bundleDir}','${ slide.uuid }', '${ slide.type }');"><i
|
|
class="edit outline icon"></i></button>
|
|
<div onclick="duplicateSlide('${bundleDir}','${slide.uuid}')" class="ui small basic inverted icon button"><i class="ui copy icon"></i></div>
|
|
<div onclick="removeSlide('${bundleDir}','${slide.uuid}')" class="ui small basic inverted icon button"><i class="ui delete icon"></i></div>
|
|
</div>
|
|
<div class="content">
|
|
<i class="ui icon move"></i>
|
|
<span class="editable">${slide.name}</span>
|
|
|
|
</div>
|
|
</div>`;
|
|
}
|
|
$(block).data('bundleDir',bundleDir);
|
|
$(block).html(htmlData);
|
|
$('.editable').editable(function (value, settings) {
|
|
var uuid = $(this).parent().parent().data("uuid");
|
|
var bundle = $(this).parent().parent().data("bundle");
|
|
socket.emit("admin.renameSlide", { uuid: uuid, name: value, bundleName: bundle });
|
|
return (value);
|
|
}, {
|
|
submit: 'rename',
|
|
tooltip: "Doubleclick to edit...",
|
|
event: "dblclick",
|
|
cssclass: 'ui mini nopadded form',
|
|
cancelcssclass: 'ui tiny basic negative button',
|
|
submitcssclass: 'ui tiny basic positive button',
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
$(function () {
|
|
$.getJSON("/admin/ajax/getBundles", function (data) {
|
|
var items = [];
|
|
var boolval = true;
|
|
for (var elem of data) {
|
|
items.push({value: elem.dir, name: elem.name, selected: boolval});
|
|
boolval = false;
|
|
}
|
|
|
|
$('#bundle1').dropdown({
|
|
values: items,
|
|
onChange: function (_value, _text, _item) {
|
|
if (_value !== "") {
|
|
loadBundleData("#sortable1", _value);
|
|
}
|
|
}
|
|
});
|
|
|
|
$('#bundle2').dropdown({
|
|
values: items,
|
|
onChange: function (_value, _text, _item) {
|
|
if (_value !== "") {
|
|
loadBundleData("#sortable2", _value);
|
|
}
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
$("#sortable1").sortable({
|
|
connectWith: ".connectedSortable",
|
|
handle: ".move",
|
|
cursor: "move",
|
|
receive: function (ev, ui) {
|
|
var targetBundle = $("#bundle1").dropdown("get value");
|
|
var originBundle = ui.item[0].dataset.bundle;
|
|
var uuid = ui.item[0].dataset.uuid;
|
|
var sortedIDs = $("#sortable1").sortable("toArray", {attribute: "data-uuid"});
|
|
var position = sortedIDs.indexOf(uuid)-1;
|
|
if (position < 0) {
|
|
position = 0;
|
|
}
|
|
socket.emit("admin.moveSlide", {from: originBundle, to: targetBundle, uuid: uuid, position:position });
|
|
},
|
|
stop: function (event, element) {
|
|
var sortedIDs = $("#sortable1").sortable("toArray", {attribute: "data-uuid"});
|
|
var currentBundle = $("#bundle1").dropdown("get value");
|
|
socket.emit("admin.reorderSlides", { bundleName: currentBundle, sortedIDs: sortedIDs });
|
|
}
|
|
}).disableSelection();
|
|
|
|
$("#sortable2").sortable({
|
|
connectWith: ".connectedSortable",
|
|
handle: ".move",
|
|
cursor: "move",
|
|
receive: function (ev, ui) {
|
|
var targetBundle = $("#bundle2").dropdown("get value");
|
|
var originBundle = ui.item[0].dataset.bundle;
|
|
var uuid = ui.item[0].dataset.uuid;
|
|
var sortedIDs = $("#sortable1").sortable("toArray", {attribute: "data-uuid"});
|
|
var position = sortedIDs.indexOf(uuid)-1;
|
|
if (position < 0) {
|
|
position = 0;
|
|
}
|
|
socket.emit("admin.moveSlide", {from: originBundle, to: targetBundle, uuid: uuid, position: position });
|
|
},
|
|
stop: function (event, ui) {
|
|
var sortedIDs = $("#sortable2").sortable("toArray", {attribute: "data-uuid"});
|
|
var currentBundle = $("#bundle2").dropdown("get value");
|
|
socket.emit("admin.reorderSlides", { bundleName: currentBundle, sortedIDs: sortedIDs });
|
|
}
|
|
}).disableSelection();
|
|
});
|
|
|
|
socket.on("connect", function () {
|
|
socket.emit("admin.editBundles", {});
|
|
});
|
|
|
|
socket.on("callback.updateBundleData", function() {
|
|
updateBundleData();
|
|
});
|
|
|
|
|
|
</script>
|
|
|
|
{% endblock %}
|