diff --git a/.gitignore b/.gitignore index 6452f28..dddf8dc 100644 --- a/.gitignore +++ b/.gitignore @@ -65,6 +65,7 @@ typings/ config.js tmp/*.png public/assets/ +data/template.json data/bundles/* !data/bundles/default !data/bundles/default/* diff --git a/modules/admin.js b/modules/admin.js index e7e0318..08ab749 100644 --- a/modules/admin.js +++ b/modules/admin.js @@ -201,7 +201,7 @@ class admin { self.updateDashboard(socket); }); - // override + // announce socket.on('admin.override', function (data) { try { if (data.displayId === null) { @@ -217,6 +217,19 @@ class admin { cli.error("error, admin.override", err); } }); + // announce web + socket.on('admin.overrideWebPage', function (data) { + if (data.displayId === null) { + if (data.duration == null || data.duration <= 5) { + data.duration = 45; + } + dispatcher.emit("all.override", data); + } else { + let view = self.getView(); + view.overrideSlide(data.json, data.png, data.duration, data.transition); + } + + }); socket.on('admin.setBundle', function (data) { let view = self.getView(); diff --git a/modules/display.js b/modules/display.js index a10dd01..55c6309 100644 --- a/modules/display.js +++ b/modules/display.js @@ -188,7 +188,9 @@ class display { if (this.serverOptions.loop) { this.clearTimers(); } + this.serverOptions.isAnnounce = false; + this.serverOptions.announceMeta = {}; let bundle = this.getBundle(); let slides = bundle.enabledSlides; @@ -225,8 +227,10 @@ class display { } } - this.displayCurrentSlide(); - this.serverOptions.loopIndex += 1; + if (!this.serverOptions.isStreaming) { + this.displayCurrentSlide(); + this.serverOptions.loopIndex += 1; + } } overrideSlide(json, pngData, duration, transition) { @@ -235,8 +239,11 @@ class display { this.serverOptions.transition = transition; this.serverOptions.loop = false; this.serverOptions.isAnnounce = true; + this.serverOptions.announceMeta = json; // save temporarily png data... - fs.writeFileSync("./tmp/display_" + this.serverOptions.displayId + ".png", pngData.replace(/^data:image\/png;base64,/, ""), "base64"); + if (json.type === "image") { + fs.writeFileSync("./tmp/display_" + this.serverOptions.displayId + ".png", pngData.replace(/^data:image\/png;base64,/, ""), "base64"); + } let that = this; if (duration && duration >= 5) { this.serverOptions.loop = true; diff --git a/public/js/display.js b/public/js/display.js index 5051231..99bead9 100644 --- a/public/js/display.js +++ b/public/js/display.js @@ -208,25 +208,39 @@ function nextSlide(data) { checkTimeDisplay(); if (serverOptions.isAnnounce) { - $("#" + getWebLayer()).addClass("fadeOut").removeClass("fadeIn"); - $("#" + getWebLayer(1)).addClass("fadeOut").removeClass("fadeIn"); - setTimeout(function () { - clearIFrame(getWebLayer()); - clearIFrame(getWebLayer(1)); - }, 2500); - try { - var randomId = uuidv4(); - getDataUri("/tmp/" + serverOptions.displayId + "/?randomId=" + randomId, randomId, function (imageId, dataUrl, image) { - image.id = imageId; - image.class = "temp"; - window.f.images.push(image); - window.f.imageData.push(dataUrl); - $("#slider").show(); - $("#helperLayer").addClass("announce"); - window.f.showTempImage(imageId); - }); - } catch (err) { - console.log(err); + if (serverOptions.announceMeta.type === "webPage") { + $("#slider").hide(); + $("#" + getWebLayer()).css("transform", "scale(" + serverOptions.announceMeta.zoom + ")"); + $("#" + getWebLayer()).addClass("fadeIn").removeClass("fadeOut"); + if (serverOptions.announceMeta.displayTime) { + $('#time').removeClass('flipOutX').addClass("flipInX"); + } else { + $('#time').addClass('flipOutX').removeClass("flipInX"); + } + displayWebPage(serverOptions.announceMeta.webUrl); + } + + if (serverOptions.announceMeta.type === "image") { + $("#" + getWebLayer()).addClass("fadeOut").removeClass("fadeIn"); + $("#" + getWebLayer(1)).addClass("fadeOut").removeClass("fadeIn"); + setTimeout(function () { + clearIFrame(getWebLayer()); + clearIFrame(getWebLayer(1)); + }, 2500); + try { + var randomId = uuidv4(); + getDataUri("/tmp/" + serverOptions.displayId + "/?randomId=" + randomId, randomId, function (imageId, dataUrl, image) { + image.id = imageId; + image.class = "temp"; + window.f.images.push(image); + window.f.imageData.push(dataUrl); + $("#slider").show(); + $("#helperLayer").addClass("announce"); + window.f.showTempImage(imageId); + }); + } catch (err) { + console.log(err); + } } } else { $("#helperLayer").removeClass("announce"); @@ -445,6 +459,7 @@ function updateTimeout() { function displayWebPage(url) { $("#" + getWebLayer()).attr('src', url).addClass("fadeIn").removeClass("fadeOut"); $("#" + getWebLayer(1)).addClass("fadeOut").removeClass("fadeIn"); + clearIFrame(getWebLayer(1)); layer++; if (layer > 1) { layer = 0; diff --git a/public/js/displayLite.js b/public/js/displayLite.js index 332f5b6..abd60a4 100644 --- a/public/js/displayLite.js +++ b/public/js/displayLite.js @@ -157,19 +157,33 @@ function nextSlide(data) { var elem = document.getElementById("img" + layer); if (serverOptions.isAnnounce) { - $("#" + getWebLayer()).addClass("fadeOut").removeClass("fadeIn"); - $("#" + getWebLayer(1)).addClass("fadeOut").removeClass("fadeIn"); - setTimeout(function () { - clearIFrame(getWebLayer()); - clearIFrame(getWebLayer(1)); - }, 1500); + if (serverOptions.announceMeta.type === "webPage") { + $(elem).hide(); + $("#" + getWebLayer()).css("transform", "scale(" + serverOptions.announceMeta.zoom + ")"); + $("#" + getWebLayer()).addClass("fadeIn").removeClass("fadeOut"); + if (serverOptions.announceMeta.displayTime) { + $('#time').removeClass('flipOutX').addClass("flipInX"); + } else { + $('#time').addClass('flipOutX').removeClass("flipInX"); + } + displayWebPage(serverOptions.announceMeta.webUrl); + } + if (serverOptions.announceMeta.type === "image") { + $(elem).show(); + $("#" + getWebLayer()).addClass("fadeOut").removeClass("fadeIn"); + $("#" + getWebLayer(1)).addClass("fadeOut").removeClass("fadeIn"); + setTimeout(function () { + clearIFrame(getWebLayer()); + clearIFrame(getWebLayer(1)); + }, 1500); - $("#helperLayer").addClass("announce"); - try { - var randomId = uuidv4(); - elem.src = "/tmp/" + serverOptions.displayId + "/?randomId=" + randomId; - } catch (err) { - console.log(err); + $("#helperLayer").addClass("announce"); + try { + var randomId = uuidv4(); + elem.src = "/tmp/" + serverOptions.displayId + "/?randomId=" + randomId; + } catch (err) { + console.log(err); + } } } else { $("#helperLayer").removeClass("announce"); diff --git a/public/js/edit.js b/public/js/edit.js index 1ba6357..b9d0468 100644 --- a/public/js/edit.js +++ b/public/js/edit.js @@ -42,6 +42,7 @@ $(function () { }); $('#dropdownSave').dropdown(); + $('#dropdownAnnounce').dropdown(); $('#order') .dropdown({ @@ -218,7 +219,6 @@ socket.on('callback.edit.updateFileList', function (data) { socket.on('callback.edit', function (data) { bundleData = data.bundleData; canvas.clear(); - console.log(data); if (data.slideData.name != null) { slideName = data.slideData.name; @@ -572,11 +572,11 @@ function cueSlide(id) { } let obj = { - json: canvas.toJSON(['id']), + json: {type: "image"}, png: canvas.toDataURL('png'), displayId: id, duration: duration, - transition: transition + transition: transition, }; socket.emit("admin.override", obj); diff --git a/views/admin/editSlide.twig b/views/admin/editSlide.twig index abcabee..0ec60f1 100644 --- a/views/admin/editSlide.twig +++ b/views/admin/editSlide.twig @@ -74,20 +74,28 @@ -
- - + {% endif %} + + + @@ -43,9 +54,36 @@ $(function () { $("#time").checkbox(); - + $("#dropdownAnnounce").dropdown(); }); + function announce(dispId) { + var duration = null; + var zoom = 1.0; + if ($.isNumeric($("#duration").val())) { + duration = parseInt($("#duration").val()); + + } + if ($.isNumeric($("#zoom").val())) { + zoom = parseFloat($("#zoom").val()); + } + + var obj = { + json: { + type: "webPage", + webUrl: $("#weburl").val(), + zoom: zoom, + displayTime: $("#displaytime").checkbox('is checked') + }, + displayId: dispId, + duration: duration, + transition: null, + png: null, + + }; + socket.emit("admin.overrideWebPage", obj); + } + function save() { var duration = null; var zoom = 1.0; @@ -81,8 +119,8 @@ $("#name").val(json.name); $("#weburl").val(json.webUrl); - $("#zoom").val(json.zoom+""); - $("#duration").val(json.duration+""); + $("#zoom").val(json.zoom + ""); + $("#duration").val(json.duration + ""); if (json.displayTime) { $("#displaytime").checkbox('set checked', true); } else {