diff --git a/data/default/bundle.json b/data/default/bundle.json index 76d935c..ce2f663 100644 --- a/data/default/bundle.json +++ b/data/default/bundle.json @@ -8,14 +8,14 @@ "styleHeader": { "stroke": "", "fill": "#f90", - "fontSize": "56", + "fontSize": 56, "fontWeight": 900, "fontFamily": "Arial Black" }, "styleText": { "stroke": "", "fill": "#fff", - "fontSize": "32", + "fontSize": 32, "fontWeight": 900, "fontFamily": "Arial Black" } diff --git a/data/default/render/39e5205f-9ace-4597-9873-f9ea5846dff0.png b/data/default/render/39e5205f-9ace-4597-9873-f9ea5846dff0.png index 6682cbc..9ef4787 100644 Binary files a/data/default/render/39e5205f-9ace-4597-9873-f9ea5846dff0.png and b/data/default/render/39e5205f-9ace-4597-9873-f9ea5846dff0.png differ diff --git a/data/default/render/f0411f05-a312-44a7-82fd-778328ba390e.png b/data/default/render/f0411f05-a312-44a7-82fd-778328ba390e.png new file mode 100644 index 0000000..68db2ad Binary files /dev/null and b/data/default/render/f0411f05-a312-44a7-82fd-778328ba390e.png differ diff --git a/data/default/slides.json b/data/default/slides.json index 8727309..a50a17c 100644 --- a/data/default/slides.json +++ b/data/default/slides.json @@ -1,23 +1,13 @@ [ { - "uuid": "39e5205f-9ace-4597-9873-f9ea5846dff0", - "name": "header", + "uuid": "f0411f05-a312-44a7-82fd-778328ba390e", + "name": "testing 123", "duration": null, "enabled": true, - "displayTime": null, - "transition": null, + "displayTime": false, "type": "slide", - "index": 0 - }, - { - "uuid": "6a298b8c-9246-411f-b364-2d73c7e292d0", - "name": "header 3", - "duration": null, - "enabled": true, - "displayTime": null, - "transition": null, - "type": "slide", - "index": 1 + "index": 0, + "transition": "" }, { "uuid": "03191688-bb93-4376-a3ab-53ed790b2155", @@ -27,30 +17,26 @@ "displayTime": false, "type": "slide", "transition": null, + "index": 1 + }, + { + "uuid": "6a298b8c-9246-411f-b364-2d73c7e292d0", + "name": "header test 3", + "duration": null, + "enabled": true, + "displayTime": null, + "transition": null, + "type": "slide", "index": 2 }, { - "uuid": "6a538b9f-cc1b-48bd-b3cd-a9a18fdf0428", - "name": "localhost", + "uuid": "39e5205f-9ace-4597-9873-f9ea5846dff0", + "name": "header", "duration": null, "enabled": true, - "displayTime": false, - "type": "webpage", - "webUrl": "http://localhost", - "zoom": 1, - "index": 3, - "transition": null - }, - { - "uuid": "04c227c6-eae8-4eaa-b0df-194fe6af30bc", - "name": "test", - "duration": null, - "enabled": true, - "displayTime": true, - "type": "webpage", - "webUrl": "http://localhost/test", - "zoom": 1, - "index": 4, - "transition": null + "displayTime": null, + "transition": "", + "type": "slide", + "index": 3 } ] \ No newline at end of file diff --git a/data/default/slides/39e5205f-9ace-4597-9873-f9ea5846dff0 b/data/default/slides/39e5205f-9ace-4597-9873-f9ea5846dff0 index e30c7d1..ad399d7 100644 --- a/data/default/slides/39e5205f-9ace-4597-9873-f9ea5846dff0 +++ b/data/default/slides/39e5205f-9ace-4597-9873-f9ea5846dff0 @@ -1 +1 @@ -{"version":"2.6.0","objects":[{"type":"i-text","version":"2.6.0","left":150,"top":40,"width":164.85,"height":63.28,"fill":"#f90","shadow":{"color":"#000","blur":3,"offsetX":0,"offsetY":0,"affectStroke":false},"text":"header","fontSize":56,"fontWeight":900,"fontFamily":"Audiowide","id":"header","styles":{}},{"type":"i-text","version":"2.6.0","left":250,"top":113.28,"width":205.31,"height":36.16,"fill":"#fff","shadow":{"color":"#000","blur":3,"offsetX":0,"offsetY":0,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Exo 2","id":"normal","styles":{}},{"type":"i-text","version":"2.6.0","left":250,"top":159.44,"width":205.31,"height":36.16,"fill":"#fff","shadow":{"color":"#000","blur":3,"offsetX":0,"offsetY":0,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Exo 2","id":"normal","styles":{}}]} \ No newline at end of file +{"version":"2.6.0","objects":[{"type":"i-text","version":"2.6.0","left":150,"top":40,"width":164.85,"height":63.28,"fill":"#f90","shadow":{"color":"#000","blur":3,"offsetX":0,"offsetY":0,"affectStroke":false},"text":"header","fontSize":56,"fontWeight":900,"fontFamily":"Arial Black","id":"header","styles":{}},{"type":"i-text","version":"2.6.0","left":247,"top":113.28,"width":205.31,"height":36.16,"fill":"#fff","shadow":{"color":"#000","blur":3,"offsetX":0,"offsetY":0,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Arial Black","id":"normal","styles":{}},{"type":"i-text","version":"2.6.0","left":250,"top":159.44,"width":67.51,"height":36.16,"fill":"#fff","shadow":{"color":"#000","blur":3,"offsetX":0,"offsetY":0,"affectStroke":false},"text":"text2","fontSize":32,"fontWeight":900,"fontFamily":"Arial Black","id":"normal","styles":{}}]} \ No newline at end of file diff --git a/data/default/slides/f0411f05-a312-44a7-82fd-778328ba390e b/data/default/slides/f0411f05-a312-44a7-82fd-778328ba390e new file mode 100644 index 0000000..6128185 --- /dev/null +++ b/data/default/slides/f0411f05-a312-44a7-82fd-778328ba390e @@ -0,0 +1 @@ +{"version":"2.6.0","objects":[{"type":"i-text","version":"2.6.0","left":150,"top":40,"width":256.65,"height":63.28,"fill":"#f90","stroke":"","shadow":{"color":"rgba(0,0,0,0.8)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"testing 123","fontSize":56,"fontWeight":900,"fontFamily":"Arial Black","id":"header","styles":{}},{"type":"i-text","version":"2.6.0","left":250,"top":113.28,"width":205.31,"height":36.16,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.8)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Arial Black","id":"normal","styles":{}},{"type":"i-text","version":"2.6.0","left":250,"top":159.44,"width":205.31,"height":36.16,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.8)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Arial Black","id":"normal","styles":{}}]} \ No newline at end of file diff --git a/data/set1/render/5bad8eb1-b377-43b8-82c3-c7f16043f8f1.png b/data/set1/render/5bad8eb1-b377-43b8-82c3-c7f16043f8f1.png new file mode 100644 index 0000000..982b8a4 Binary files /dev/null and b/data/set1/render/5bad8eb1-b377-43b8-82c3-c7f16043f8f1.png differ diff --git a/data/set1/slides.json b/data/set1/slides.json index 5688d12..e1f8cc8 100644 --- a/data/set1/slides.json +++ b/data/set1/slides.json @@ -18,5 +18,15 @@ "displayTime": true, "type": "slide", "index": 1 + }, + { + "uuid": "5bad8eb1-b377-43b8-82c3-c7f16043f8f1", + "name": "header", + "duration": null, + "enabled": true, + "displayTime": false, + "type": "slide", + "index": 2, + "transition": "" } ] \ No newline at end of file diff --git a/data/set1/slides/5bad8eb1-b377-43b8-82c3-c7f16043f8f1 b/data/set1/slides/5bad8eb1-b377-43b8-82c3-c7f16043f8f1 new file mode 100644 index 0000000..1579c43 --- /dev/null +++ b/data/set1/slides/5bad8eb1-b377-43b8-82c3-c7f16043f8f1 @@ -0,0 +1 @@ +{"version":"2.6.0","objects":[{"type":"i-text","version":"2.6.0","left":250,"top":40,"width":269.47,"height":47.46,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.8)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"paragraph text","fontSize":"42","fontWeight":900,"fontFamily":"Arial Black","id":"normal","styles":{}},{"type":"i-text","version":"2.6.0","left":250,"top":97.46,"width":269.47,"height":47.46,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.8)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"paragraph text","fontSize":"42","fontWeight":900,"fontFamily":"Arial Black","id":"normal","styles":{}},{"type":"i-text","version":"2.6.0","left":150,"top":154.92,"width":164.85,"height":63.28,"fill":"#f90","stroke":"","shadow":{"color":"rgba(0,0,0,0.8)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"header","fontSize":"56","fontWeight":900,"fontFamily":"Arial Black","id":"header","styles":{}}]} \ No newline at end of file diff --git a/modules/admin.js b/modules/admin.js index 14f8674..d61635a 100644 --- a/modules/admin.js +++ b/modules/admin.js @@ -233,35 +233,39 @@ class admin { socket.on('admin.reorderSlides', function (data) { - let view = getView(data.displayId); - let serverOptions = view.serverOptions; - let bundle = view.getBundle(); + let bundle = bundleManager.getBundle(data.bundleName); let i = 0; - console.log(data.sortedIDs); - for (let uuid of data.sortedIDs) { bundle.setIndex(uuid, i); i += 1; } - for (let slide of bundle.allSlides) { - // calculate new index for next slide; - if (slide.uuid === serverOptions.currentFile) { - serverOptions.loopIndex = slide.index + 1; + // calculate next slide order for all displays which has the bundle selected + for (let display of screenViews) { + if (display.serverOptions.currentBundle === data.bundleName) { + for (let slide of bundle.allSlides) { + // calculate new index for next slide; + if (slide.uuid === display.serverOptions.currentFile) { + display.serverOptions.loopIndex = slide.index + 1; + } + } } } bundle.save(); - updateDashboard(io, data.displayId); + updateSlides(io, data.bundleName, bundle); }); /** remove slide **/ socket.on('admin.removeSlide', function (data) { - let view = getView(data.displayId); - let bundle = view.getBundle(); - bundle.removeUuid(data.uuid); - updateSlides(io, bundle.getBundleData().bundleName, bundle); + try { + let bundle = bundleManager.getBundle(data.bundleName); + bundle.removeUuid(data.uuid); + updateSlides(io, bundle.getBundleData().bundleName, bundle); + } catch (err) { + cli.error("error while removing slide", err); + } }); /** edit web links **/ @@ -345,9 +349,15 @@ class admin { /** rename **/ socket.on('admin.renameSlide', function (data) { - getView(data.displayId).getBundle().setName(data.uuid, data.name); - updateDashboard(io, data.displayId); + try { + let bundle = bundleManager.getBundle(data.bundleName); + bundle.setName(data.uuid, data.name); + updateSlides(io, data.bundleName, bundle); + } catch (err) { + cli.error("error while renaming slide", err); + } }); + /** change transition **/ socket.on('admin.setTransition', function (data) { var transition = data.transition; @@ -403,8 +413,9 @@ class admin { cli.success("save new slide data"); socket.emit("callback.save", {}); - announce([parseInt(data.displayId)], "callback.reloadImage", { - bundle: data.bundleName, + + announce(null, "callback.reloadImage", { + bundleName: data.bundleName, uuid: filename }); updateSlides(io, data.bundleName, bundle); diff --git a/public/js/dashboard.js b/public/js/dashboard.js index c0bf46a..ff9cf43 100644 --- a/public/js/dashboard.js +++ b/public/js/dashboard.js @@ -103,7 +103,8 @@ socket.on("callback.dashboard.sync", function (data) { let bundle = data.bundleDirs[i]; output += '
' + '
' + - '' + + // '' + + '' + '' + '
' + '
' + @@ -161,7 +162,7 @@ $(function () { $(".sortable").sortable({ beforeStop: function (event, element) { var sortedIDs = $(".sortable").sortable("toArray"); - emit("admin.reorderSlides", {sortedIDs: sortedIDs}); + emit("admin.reorderSlides", {bundleName: serverOptions.currentBundle, sortedIDs: sortedIDs}); } }).disableSelection(); }); @@ -187,6 +188,11 @@ function addLink() { editSlide("", "webpage"); } + +function editBundleSlides(name) { + window.open("/admin/edit/bundleSlides?bundle=" + name, '_blank', 'location=no,height=800,width=400,scrollbars=yes,status=no'); +} + function editSlide(name, type) { switch (type) { case "slide": @@ -199,15 +205,15 @@ function editSlide(name, type) { } function editBundle(bundleName) { - window.open("/admin/edit/bundle?bundle=" + bundleName, '_blank', 'location=no,height=500,width=700,scrollbars=yes,status=no'); + window.open("/admin/edit/bundleProperties?bundle=" + bundleName, '_blank', 'location=no,height=500,width=700,scrollbars=yes,status=no'); } -function emit(callback, data) { +function emit(eventName, data) { if (data === undefined || data === null) { data = {}; } Object.assign(data, {displayId: parseInt(displayId)}); - socket.emit(callback, data); + socket.emit(eventName, data); } /** @@ -271,7 +277,7 @@ function updateSlides(settings) { '' + '' + '' + - '' + + '' + '
' + '
' + '' + @@ -288,7 +294,9 @@ function updateSlides(settings) { } -function remove(obj) { +function remove(uuid) { + var obj = {bundleName: serverOptions.currentBundle, uuid: uuid}; + if (confirm("Really delete slide?")) { emit('admin.removeSlide', obj); } diff --git a/public/js/display.js b/public/js/display.js index 473ad20..4b891da 100644 --- a/public/js/display.js +++ b/public/js/display.js @@ -340,14 +340,15 @@ function preloadImages(allSlides) { } function reloadImage(data) { - window.f.clearImageById(data.uuid); - window.f.setupImages(); - - var image = new Image(); - image.src = "/render/" + data.bundle + "/" + data.uuid + ".png?" + uuidv4(); - image.id = data.uuid; - window.f.images.push(image); + if (serverOptions.currentBundle === data.bundleName) { + window.f.clearImageById(data.uuid); + window.f.setupImages(); + var image = new Image(); + image.src = "/render/" + data.bundleName + "/" + data.uuid + ".png?" + uuidv4(); + image.id = data.uuid; + window.f.images.push(image); + } } var fluxIds; diff --git a/public/js/edit.js b/public/js/edit.js index c11617b..c5dd39a 100644 --- a/public/js/edit.js +++ b/public/js/edit.js @@ -256,7 +256,7 @@ function setBackground(background) { bgImage.src = background; bg.show(); $(video).hide(); - video.src = null; + video.src = ""; video.pause(); } } @@ -419,7 +419,8 @@ function removeSelectedObjects() { } function cueSlide() { - if (confirm('Pause show and force display of the current slide?')) { + + if (confirm('Force display of the current slide?')) { var duration = null; if ($.isNumeric($("#duration").val())) { duration = parseFloat($("#duration").val()); @@ -468,7 +469,6 @@ function save() { duration: duration, json: canvas.toJSON(['id']), png: canvas.toDataURL('png'), - displayId: displayId, displayTime: checked, transition: transition, }; diff --git a/public/js/upload.js b/public/js/upload.js index 4939508..9c015fb 100644 --- a/public/js/upload.js +++ b/public/js/upload.js @@ -105,7 +105,6 @@ function upload(uid, useOriginal) { name: filename, imageData: images[uid].data, type: images[uid].type, - displayId: displayId }); } else { socket.emit("edit.uploadImage", { @@ -113,7 +112,6 @@ function upload(uid, useOriginal) { name: filename + "_crop", imageData: images[uid].crop, type: "image/png", - displayId: displayId }); } diff --git a/routes/admin.js b/routes/admin.js index 5a06989..9472513 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -27,11 +27,11 @@ module.exports = function (websocket) { router.get('/edit/slide', function (req, res, next) { let bundle = req.query['bundle']; let file = req.query['file']; - let displayId = req.query['displayId'] || 0; - res.render('admin/edit', {config: config, bundle: bundle, displayId: displayId, file: file}); + let displayId = req.query['displayId'] || null; + res.render('admin/editSlide', {config: config, bundle: bundle, displayId: displayId, file: file}); }); - router.post('/edit/bundle', function (req, res, next) { + router.post('/edit/bundleProperties', function (req, res, next) { let bundleData = {}; var transition = null; @@ -59,11 +59,11 @@ module.exports = function (websocket) { bundleData.useWebFonts = useWebFonts; bundleData.displayTime = displayTime; bundleData.styleHeader.fontFamily = req.body.headerFontFamily; - bundleData.styleHeader.fontSize = req.body.headerFontSize; + bundleData.styleHeader.fontSize = parseInt(req.body.headerFontSize); bundleData.styleHeader.fill = req.body.headerFill; bundleData.styleHeader.stroke = req.body.headerStroke; bundleData.styleText.fontFamily = req.body.textFontFamily; - bundleData.styleText.fontSize = req.body.textFontSize; + bundleData.styleText.fontSize = parseInt(req.body.textFontSize); bundleData.styleText.fill = req.body.textFill; bundleData.styleText.stroke = req.body.textStroke; bundleManager.getBundle(req.body.bundle).save(); @@ -76,7 +76,7 @@ module.exports = function (websocket) { res.send(""); }); - router.get('/edit/bundle', function (req, res, next) { + router.get('/edit/bundleProperties', function (req, res, next) { let bundle = req.query['bundle']; let bundleData = {}; try { @@ -85,8 +85,7 @@ module.exports = function (websocket) { cli.error("error loading bundle", err); } - // console.log(bundleData); - res.render('admin/editBundle', {config: config, bundle: bundle, bundleData: bundleData}); + res.render('admin/editBundleProperties', {config: config, bundle: bundle, bundleData: bundleData}); }); router.get('/edit/link', function (req, res, next) { @@ -97,19 +96,19 @@ module.exports = function (websocket) { }); - router.get('/bundle', function (req, res, next) { - let bundles = getDirectories("./data"); - res.render('admin/listBundle', {config: config, bundles: bundles}); + router.get('/edit/bundleSlides', function (req, res, next) { + // let bundles = getDirectories("./data"); + var bundle = {}; + try { + bundle = bundleManager.getBundle(req.query['bundle']); + } catch (err) { + + } + console.log(bundle); + res.render('admin/editBundleSlides', {config: config, bundle: bundle}); }); - router.get('/edit/bundle', function (req, res, next) { - let bundle = req.query['bundle']; - let file = req.query['file']; - let displayId = req.query['displayId'] || 0; - res.render('admin/editBundle', {config: config, bundle: bundle, displayId: displayId, file: file}); - }); - router.get('/ajax/imagelist', function (req, res, next) { let bundle = req.query['bundle']; let bundleRoot = path.normalize("./data/" + bundle); diff --git a/views/admin/editBundle.twig b/views/admin/editBundleProperties.twig similarity index 98% rename from views/admin/editBundle.twig rename to views/admin/editBundleProperties.twig index f9f5d5b..d7d1a26 100644 --- a/views/admin/editBundle.twig +++ b/views/admin/editBundleProperties.twig @@ -13,7 +13,7 @@

Most of the changes are applied for live environment at next slide change.

-
+
diff --git a/views/admin/editBundleSlides.twig b/views/admin/editBundleSlides.twig new file mode 100644 index 0000000..a42024d --- /dev/null +++ b/views/admin/editBundleSlides.twig @@ -0,0 +1,106 @@ +{% extends 'layout/admin.twig' %} + +{% block header %} + + {% if config.useLocalAssets %} + + {% else %} + + {% endif %} +{% endblock %} + +{% block body %} + +
+
+
+

Bundle: {{ bundle.name }}

+ + + +
+ {% for slide in bundle.allSlides %} +
+
+ + +
+
+
{{ slide.name }}
+
+
+ + {% endfor %} +
+
+
+
+ + + +{% endblock %} \ No newline at end of file diff --git a/views/admin/edit.twig b/views/admin/editSlide.twig similarity index 94% rename from views/admin/edit.twig rename to views/admin/editSlide.twig index b6a0be2..4e1745e 100644 --- a/views/admin/edit.twig +++ b/views/admin/editSlide.twig @@ -4,9 +4,13 @@