fixes
No files matched your search
@@ -66,4 +66,5 @@ config.js
|
||||
tmp/*.png
|
||||
public/assets/
|
||||
data/bundles/*
|
||||
!data/bundles/default/
|
||||
!data/bundles/default
|
||||
!data/bundles/default/*
|
||||
|
Before Width: | Height: | Size: 410 KiB |
@@ -7,7 +7,7 @@
|
||||
"displayTime": true,
|
||||
"styleHeader": {
|
||||
"stroke": "",
|
||||
"fill": "#f90",
|
||||
"fill": "#fff",
|
||||
"fontSize": 56,
|
||||
"fontWeight": 900,
|
||||
"fontFamily": "Arial"
|
||||
|
||||
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 189 KiB |
@@ -1,7 +1,7 @@
|
||||
[
|
||||
{
|
||||
"uuid": "f0411f05-a312-44a7-82fd-778328ba390e",
|
||||
"name": "testing 123",
|
||||
"name": "Welcome",
|
||||
"duration": null,
|
||||
"enabled": true,
|
||||
"displayTime": null,
|
||||
@@ -11,7 +11,7 @@
|
||||
},
|
||||
{
|
||||
"uuid": "03191688-bb93-4376-a3ab-53ed790b2155",
|
||||
"name": "2 header",
|
||||
"name": "Features",
|
||||
"duration": null,
|
||||
"enabled": true,
|
||||
"displayTime": null,
|
||||
@@ -21,22 +21,12 @@
|
||||
},
|
||||
{
|
||||
"uuid": "6a298b8c-9246-411f-b364-2d73c7e292d0",
|
||||
"name": "header test 3",
|
||||
"name": "Language support",
|
||||
"duration": null,
|
||||
"enabled": true,
|
||||
"displayTime": null,
|
||||
"transition": null,
|
||||
"type": "slide",
|
||||
"index": 2
|
||||
},
|
||||
{
|
||||
"uuid": "39e5205f-9ace-4597-9873-f9ea5846dff0",
|
||||
"name": "header",
|
||||
"duration": null,
|
||||
"enabled": true,
|
||||
"displayTime": null,
|
||||
"transition": null,
|
||||
"type": "slide",
|
||||
"index": 3
|
||||
}
|
||||
]
|
||||
@@ -1 +1 @@
|
||||
{"version":"2.7.0","objects":[{"type":"i-text","version":"2.7.0","left":150,"top":40,"width":267.64,"height":63.28,"fill":"#f90","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"2 header","fontSize":56,"fontWeight":900,"fontFamily":"Arial","id":"header","styles":{}},{"type":"i-text","version":"2.7.0","left":150,"top":113.28,"width":211.61,"height":63.28,"fill":"#f90","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"header","fontSize":56,"fontWeight":900,"fontFamily":"Arial","id":"header","styles":{}}]}
|
||||
{"version":"2.7.0","objects":[{"type":"i-text","version":"2.7.0","left":505.15,"top":73,"width":268.71,"height":63.28,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"Features","fontSize":56,"fontWeight":900,"fontFamily":"Arial","id":"header","styles":{}},{"type":"i-text","version":"2.7.0","left":227,"top":194.61,"width":825.13,"height":413.67,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"Easy-to-use editor for slides supports\nadding text and images to slides.\n\n\n\nFinnish and English language support, \nautomatically set from browser language.\n\nSupports web content as slides with scaling\nis useful for timetables, tournament brackets...","fontSize":32,"fontWeight":900,"fontFamily":"Arial","textAlign":"center","id":"normal","styles":{}},{"type":"image","version":"2.7.0","left":200,"top":291.07,"width":1310,"height":141,"scaleX":0.68,"scaleY":0.68,"crossOrigin":"","src":"/images/default/toolbar.png","filters":[]}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"version":"2.7.0","objects":[{"type":"i-text","version":"2.7.0","left":150,"top":40,"width":211.61,"height":63.28,"fill":"#f90","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"header","fontSize":56,"fontWeight":900,"fontFamily":"Arial","id":"header","styles":{}},{"type":"i-text","version":"2.7.0","left":247,"top":113.28,"width":261.25,"height":36.16,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Arial","id":"normal","styles":{}},{"type":"i-text","version":"2.7.0","left":250,"top":159.44,"width":91.61,"height":36.16,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"text2","fontSize":32,"fontWeight":900,"fontFamily":"Arial","id":"normal","styles":{}}]}
|
||||
@@ -1 +1 @@
|
||||
{"version":"2.6.0","objects":[{"type":"i-text","version":"2.6.0","left":151,"top":40,"width":267.64,"height":63.28,"fill":"#f90","shadow":{"color":"#000","blur":3,"offsetX":0,"offsetY":0,"affectStroke":false},"text":"header 3","fontSize":56,"fontWeight":900,"fontFamily":"Arial Black","id":"header","styles":{}}]}
|
||||
{"version":"2.7.0","objects":[{"type":"i-text","version":"2.7.0","left":362.25,"top":128,"width":554.5,"height":63.28,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"Language support","fontSize":56,"fontWeight":900,"fontFamily":"Arial","id":"header","styles":{}},{"type":"i-text","version":"2.7.0","left":189.79,"top":280,"width":878.06,"height":78.11,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"Finnish and english support by default\nCan be extended by translating to new languages","fontSize":32,"fontWeight":900,"fontFamily":"Arial","textAlign":"center","id":"normal","styles":{}}]}
|
||||
@@ -1 +1 @@
|
||||
{"version":"2.7.0","objects":[{"type":"i-text","version":"2.7.0","left":150,"top":40,"width":345.35,"height":63.28,"fill":"#f90","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"testing 123","fontSize":56,"fontWeight":900,"fontFamily":"Arial","id":"header","styles":{}},{"type":"i-text","version":"2.7.0","left":250,"top":113.28,"width":261.25,"height":36.16,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Arial","id":"normal","styles":{}},{"type":"i-text","version":"2.7.0","left":250,"top":159.44,"width":261.25,"height":36.16,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"paragraph text","fontSize":32,"fontWeight":900,"fontFamily":"Arial","id":"normal","styles":{}}]}
|
||||
{"version":"2.7.0","objects":[{"type":"i-text","version":"2.7.0","left":426.4,"top":62,"width":388.97,"height":63.28,"fill":"rgb(251, 251, 251)","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"InfoScreen 3","fontSize":56,"fontWeight":900,"fontFamily":"Arial","textAlign":"center","id":"header","styles":{"0":{"11":{"fill":"rgb(25, 152, 55)"}}}},{"type":"i-text","version":"2.7.0","left":579.49,"top":113,"width":235.7,"height":36.16,"fill":"rgb(250, 250, 250)","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"for lanparties","fontSize":32,"fontWeight":900,"fontFamily":"Arial","id":"normal","styles":{}},{"type":"i-text","version":"2.7.0","left":59,"top":200,"width":1141.39,"height":329.78,"fill":"#fff","stroke":"","shadow":{"color":"rgba(0,0,0,0.6)","blur":5,"offsetX":2,"offsetY":2,"affectStroke":false},"text":"Can display easily slides from browser\nyou just need network connection, laptop with a browser\n\nOutput resolution does not matter, all contents are automatically\n scaled from full hd or half-hd as source material\n\nSupports multiple client-displays, by default you have 3 screens:\nbigscreen, sidescreen and kiosk","fontSize":32,"fontWeight":900,"fontFamily":"Arial","textAlign":"center","id":"normal","styles":{}}]}
|
||||
@@ -130,8 +130,8 @@ class admin {
|
||||
serverOptions.streamSource = "";
|
||||
cli.success("stop stream");
|
||||
}
|
||||
view.io.emit("callbackLoad", view.getSlideData());
|
||||
updateDashboard(io);
|
||||
view.io.emit("callback.load", view.getSlideData());
|
||||
updateDashboard(io);
|
||||
});
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ class admin {
|
||||
let view = getView();
|
||||
view.clearTimers();
|
||||
getServerOptions().loop = false;
|
||||
updateDashboard(io);
|
||||
updateDashboard(io);
|
||||
});
|
||||
|
||||
socket.on('controls.next', function (data) {
|
||||
@@ -151,7 +151,7 @@ class admin {
|
||||
view.serverOptions.blackout = view.serverOptions.blackout === false;
|
||||
|
||||
view.io.emit("callback.blackout", {serverOptions: view.serverOptions});
|
||||
updateDashboard(io);
|
||||
updateDashboard(io);
|
||||
});
|
||||
|
||||
socket.on("controls.preview", function (data) {
|
||||
@@ -198,7 +198,7 @@ class admin {
|
||||
bundleSettings.setSlideStatus(fileName, false);
|
||||
}
|
||||
|
||||
updateDashboard(socket);
|
||||
updateDashboard(socket);
|
||||
});
|
||||
|
||||
// override
|
||||
@@ -211,8 +211,7 @@ class admin {
|
||||
dispatcher.emit("all.override", data);
|
||||
} else {
|
||||
let view = getView();
|
||||
view.overrideSlide(data.json, data.png, data.duration);
|
||||
view.displayCurrentSlide();
|
||||
view.overrideSlide(data.json, data.png, data.duration, data.transition);
|
||||
}
|
||||
} catch (err) {
|
||||
cli.error("error, admin.override", err);
|
||||
@@ -232,11 +231,11 @@ class admin {
|
||||
});
|
||||
|
||||
socket.on('admin.listSlides', function (data) {
|
||||
updateDashboard(socket);
|
||||
updateDashboard(socket);
|
||||
});
|
||||
|
||||
socket.on('admin.listBundles', function (data) {
|
||||
updateDashboard(socket);
|
||||
updateDashboard(socket);
|
||||
});
|
||||
|
||||
|
||||
@@ -250,13 +249,12 @@ class admin {
|
||||
}
|
||||
|
||||
// calculate next slide order for all displays which has the bundle selected
|
||||
for (let display of screenView) {
|
||||
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;
|
||||
}
|
||||
let display = screenView;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -271,6 +269,7 @@ class admin {
|
||||
let bundle = bundleManager.getBundle(data.bundleName);
|
||||
bundle.removeUuid(data.uuid);
|
||||
updateSlides(io, bundle.name, bundle);
|
||||
announce(null, "callback.removeSlide", data);
|
||||
} catch (err) {
|
||||
cli.error("error while removing slide", err);
|
||||
}
|
||||
@@ -402,7 +401,7 @@ class admin {
|
||||
}
|
||||
|
||||
getServerOptions().transition = transition;
|
||||
updateDashboard(io);
|
||||
updateDashboard(io);
|
||||
});
|
||||
|
||||
socket.on('edit.save', function (data) {
|
||||
@@ -479,7 +478,7 @@ class admin {
|
||||
let replace = "^data:" + data.type + ";base64,";
|
||||
let re = new RegExp(replace, "g");
|
||||
|
||||
fs.writeFileSync(".data/bundles/" + data.bundleName + "/images/" + filename + ext, data.imageData.replace(re, ""), "base64");
|
||||
fs.writeFileSync("./data/bundles/" + data.bundleName + "/images/" + filename + ext, data.imageData.replace(re, ""), "base64");
|
||||
cli.success("upload of " + filename + ext);
|
||||
socket.emit("callback.edit.updateFileList", {});
|
||||
} catch (err) {
|
||||
@@ -491,7 +490,7 @@ class admin {
|
||||
|
||||
socket.on('edit.deleteImage', function (data) {
|
||||
try {
|
||||
fs.unlinkSync(".data/bundles/" + data.bundleName + "/images/" + data.name);
|
||||
fs.unlinkSync("./data/bundles/" + data.bundleName + "/images/" + data.name);
|
||||
cli.success("delete " + data.name);
|
||||
socket.emit("callback.edit.updateFileList", {});
|
||||
} catch (err) {
|
||||
|
||||
@@ -76,7 +76,8 @@ class display {
|
||||
|
||||
dispatcher.on("announce", function (obj) {
|
||||
// if global announce, ie screens is null
|
||||
if (obj.screens == null) {
|
||||
if (obj.screens === null) {
|
||||
console.log("announcing: " + this.displayId);
|
||||
io.emit(obj.event, obj.data);
|
||||
} else {
|
||||
// screens is array
|
||||
@@ -107,7 +108,7 @@ class display {
|
||||
|
||||
socket.on('sync', function () {
|
||||
cli.info("request sync " + self.name);
|
||||
socket.emit("callbackLoad", self.getSlideData());
|
||||
socket.emit("callback.load", self.getSlideData());
|
||||
});
|
||||
|
||||
}); // io
|
||||
@@ -137,7 +138,7 @@ class display {
|
||||
this.serverOptions.currentId = bundle.enabledSlides.indexOf(this.serverOptions.currentFile);
|
||||
this.serverOptions.transition = bundle.getBundleData().transition;
|
||||
this.serverOptions.loop = true;
|
||||
this.io.emit("callbackLoad", this.getSlideData());
|
||||
this.io.emit("callback.load", this.getSlideData());
|
||||
this.mainLoop();
|
||||
}
|
||||
|
||||
@@ -226,8 +227,10 @@ class display {
|
||||
this.serverOptions.loopIndex += 1;
|
||||
}
|
||||
|
||||
overrideSlide(json, pngData, duration) {
|
||||
overrideSlide(json, pngData, duration, transition) {
|
||||
this.clearTimers();
|
||||
var _transition = this.serverOptions.transition;
|
||||
this.serverOptions.transition = transition;
|
||||
this.serverOptions.loop = false;
|
||||
this.serverOptions.isAnnounce = true;
|
||||
// save temporarily png data...
|
||||
@@ -240,6 +243,8 @@ class display {
|
||||
that.mainLoop();
|
||||
}, duration * 1000));
|
||||
}
|
||||
this.displayCurrentSlide();
|
||||
this.serverOptions.transition = _transition;
|
||||
}
|
||||
|
||||
displayCurrentSlide() {
|
||||
|
||||
@@ -80,7 +80,6 @@ function getLayer(offset) {
|
||||
return "layer" + (layer + offset) % 2;
|
||||
}
|
||||
|
||||
|
||||
// socketio callbacks
|
||||
/** when connected **/
|
||||
socket.on('connect', function () {
|
||||
@@ -111,18 +110,18 @@ socket.on('callback.time', function (data) {
|
||||
});
|
||||
|
||||
/** callback Load **/
|
||||
socket.on('callbackLoad', function (data) {
|
||||
socket.on('callback.load', function (data) {
|
||||
serverOptions = data.serverOptions;
|
||||
bundleData = data.bundleData;
|
||||
preloadImages(data.slides);
|
||||
checkBlackout();
|
||||
setBackground(data.bundleData.background);
|
||||
if (checkStream(serverOptions) === false) {
|
||||
if (doNext) {
|
||||
doNext = false;
|
||||
setTimeout(function () {
|
||||
setBackground(data.bundleData.background);
|
||||
if (checkStream(serverOptions) === false) {
|
||||
nextSlide(data);
|
||||
}
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -136,6 +135,10 @@ socket.on('callback.update', function (data) {
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('callback.removeSlide', function (data) {
|
||||
window.f.clearImageById(data.uuid);
|
||||
});
|
||||
|
||||
socket.on('callback.reload', function () {
|
||||
location.reload(true);
|
||||
});
|
||||
@@ -202,7 +205,6 @@ function checkBlackout() {
|
||||
function nextSlide(data) {
|
||||
serverOptions = data.serverOptions;
|
||||
bundleData = data.bundleData;
|
||||
var needWait = checkImages(data.slides);
|
||||
checkTimeDisplay();
|
||||
|
||||
if (serverOptions.isAnnounce) {
|
||||
@@ -249,11 +251,8 @@ function nextSlide(data) {
|
||||
clearIFrame(getWebLayer(1));
|
||||
}, 2500);
|
||||
|
||||
$("#slider").show();
|
||||
setTimeout(function () {
|
||||
window.f.showImageById(serverOptions.currentFile, transition);
|
||||
}, needWait ? 1000 : 50);
|
||||
|
||||
// $("#slider").show();
|
||||
window.f.showImageById(serverOptions.currentFile, transition);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -362,12 +361,20 @@ function preloadImages(allSlides) {
|
||||
|
||||
function reloadImage(data) {
|
||||
if (serverOptions.currentBundle === data.bundleName) {
|
||||
window.f.clearImageById(data.uuid);
|
||||
window.f.setupImages();
|
||||
getDataUri("/render/" + data.bundleName + "/" + data.uuid + ".png?" + uuidv4(), data.uuid, function (imageId, imageData, image) {
|
||||
image.id = imageId;
|
||||
window.f.images.push(image);
|
||||
window.f.imageData.push(imageData);
|
||||
var found = false;
|
||||
for (var i in window.f.images) {
|
||||
if (window.f.images[i].id === data.uuid) {
|
||||
window.f.imageData[i] = imageData;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
console.log("notfound, adding!");
|
||||
image.id = imageId;
|
||||
window.f.images.push(image);
|
||||
window.f.imageData.push(imageData);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -392,7 +399,6 @@ function checkImages(allSlides) {
|
||||
// new slides count is less than slides in rotation
|
||||
// remove slides
|
||||
if (allIds.length < fluxIds.length) {
|
||||
|
||||
var diffIds = symmetricDifference(fluxIds, allIds);
|
||||
for (var l in diffIds) {
|
||||
window.f.clearImageById(diffIds[l]);
|
||||
@@ -466,7 +472,7 @@ function getDataUri(url, imageId, callback) {
|
||||
canvas.height = this.naturalHeight; // or 'height' if you want a special/scaled size
|
||||
|
||||
canvas.getContext('2d').drawImage(this, 0, 0);
|
||||
callback(imageId, canvas.toDataURL('image/png'), this);
|
||||
callback(imageId, canvas.toDataURL('image/png'), {src: url});
|
||||
};
|
||||
image.src = url;
|
||||
}
|
||||
@@ -57,7 +57,7 @@ $(function () {
|
||||
|
||||
|
||||
/** callback Load **/
|
||||
socket.on('callbackLoad', function (data) {
|
||||
socket.on('callback.load', function (data) {
|
||||
serverOptions = data.serverOptions;
|
||||
bundleData = data.bundleData;
|
||||
checkBlackout();
|
||||
|
||||
@@ -34,7 +34,7 @@ $(function () {
|
||||
|
||||
$('html').keyup(function (e) {
|
||||
if (e.keyCode === 46) {
|
||||
obj = canvas.getActiveObject();
|
||||
var obj = canvas.getActiveObject();
|
||||
if (!obj.isEditing) {
|
||||
removeSelectedObjects();
|
||||
}
|
||||
@@ -216,12 +216,14 @@ 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;
|
||||
$("#slideName").val(slideName);
|
||||
}
|
||||
|
||||
$("#duration").val(data.slideData.duration + "");
|
||||
$("#duration").val(data.slideData.duration || "");
|
||||
|
||||
if (data.slideData.displayTime !== null) {
|
||||
$("#override").checkbox('set checked');
|
||||
@@ -277,7 +279,7 @@ socket.on('callback.edit', function (data) {
|
||||
});
|
||||
|
||||
function setBackground(background) {
|
||||
background = "/background/" + bundleData.bundleName + "/" + background;
|
||||
background = "/background/" + background;
|
||||
|
||||
var video = document.getElementById("bgvid2");
|
||||
var bg = $("#bg");
|
||||
@@ -541,7 +543,7 @@ function removeSelectedObjects() {
|
||||
for (var i in obj) {
|
||||
canvas.remove(obj[i]);
|
||||
}
|
||||
canvas.discardActiveObject();
|
||||
canvas.discardActiveObject(null);
|
||||
canvas.requestRenderAll();
|
||||
|
||||
}
|
||||
@@ -554,11 +556,13 @@ function cueSlide(id) {
|
||||
}
|
||||
}
|
||||
|
||||
if (confirm('Force display of the current slide?') && bool) {
|
||||
if (confirm('Force display of the current slide?')) {
|
||||
var duration = null;
|
||||
if ($.isNumeric($("#duration").val())) {
|
||||
duration = parseFloat($("#duration").val());
|
||||
}
|
||||
var transition = $("#transitions").dropdown("get value");
|
||||
if (transition === "null") transition = "";
|
||||
|
||||
var objects = canvas.getObjects('line');
|
||||
for (let i in objects) {
|
||||
@@ -569,8 +573,10 @@ function cueSlide(id) {
|
||||
json: canvas.toJSON(['id']),
|
||||
png: canvas.toDataURL('png'),
|
||||
displayId: id,
|
||||
duration: duration
|
||||
duration: duration,
|
||||
transition: transition
|
||||
};
|
||||
|
||||
socket.emit("admin.override", obj);
|
||||
|
||||
drawGrid();
|
||||
@@ -584,6 +590,7 @@ function save() {
|
||||
for (let i in objects) {
|
||||
canvas.remove(objects[i]);
|
||||
}
|
||||
|
||||
slideName = $("#slideName").val();
|
||||
if (slideName === "untitled") {
|
||||
var texts = canvas.getObjects('i-text');
|
||||
|
||||
@@ -72,7 +72,7 @@ window.flux = {
|
||||
this.options.transitions = newTrans;
|
||||
|
||||
this.images = [];
|
||||
this.imageData = [];
|
||||
this["imageData"] = [];
|
||||
this.imageLoadedCount = 0;
|
||||
this.currentImageIndex = 0;
|
||||
this.nextImageIndex = 1;
|
||||
@@ -89,7 +89,7 @@ window.flux = {
|
||||
window.location = $(event.target).data('href');
|
||||
});
|
||||
|
||||
this.imageContainer = $('<div class="images loading"></div>').css({
|
||||
this.imageContainer = $('<div class="images"></div>').css({
|
||||
'position': 'relative',
|
||||
'overflow': 'hidden',
|
||||
'min-height': '100px',
|
||||
@@ -105,8 +105,8 @@ window.flux = {
|
||||
}
|
||||
|
||||
// Create the placeholders for the current and next image
|
||||
this.image1 = $('<div class="image1" style="width: 100%; height: 100%;"></div>').appendTo(this.imageContainer);
|
||||
this.image2 = $('<div class="image2" style="width: 100%; height: 100%;"></div>').appendTo(this.imageContainer);
|
||||
this.image1 = $('<div class="image1" style="width:100%;height:100%;"></div>').appendTo(this.imageContainer);
|
||||
this.image2 = $('<div class="image2" style="width:100%;height:100%;"></div>').appendTo(this.imageContainer);
|
||||
|
||||
$(this.image1).add(this.image2).css({
|
||||
'position': 'absolute',
|
||||
@@ -114,21 +114,6 @@ window.flux = {
|
||||
'left': '0px'
|
||||
});
|
||||
|
||||
// Get a list of the images to use
|
||||
this.element.find('img, a img').each(function (index, found_img) {
|
||||
var imgClone = found_img.cloneNode(false),
|
||||
link = $(found_img).parent();
|
||||
|
||||
// If this img is directly inside a link then save the link for later use
|
||||
if (link.is('a'))
|
||||
$(imgClone).data('href', link.attr('href'));
|
||||
|
||||
_this.images.push(imgClone);
|
||||
|
||||
// Remove the images from the DOM
|
||||
$(found_img).remove();
|
||||
});
|
||||
|
||||
// Load the images afterwards as IE seems to load images synchronously
|
||||
for (var i = 0; i < this.images.length; i++) {
|
||||
var image = new Image();
|
||||
@@ -230,8 +215,8 @@ window.flux = {
|
||||
this.setNextIndex(index);
|
||||
|
||||
// Temporarily stop the transition interval
|
||||
// clearInterval(this.interval);
|
||||
// this.interval = null;
|
||||
// clearInterval(this.interval);
|
||||
// this.interval = null;
|
||||
|
||||
this.setupImages();
|
||||
this.transition(trans, opts);
|
||||
@@ -270,8 +255,8 @@ window.flux = {
|
||||
clearImageById: function (id) {
|
||||
for (var i in this.images) {
|
||||
if (this.images[i].id === id) {
|
||||
this.imageData.splice(i, 1);
|
||||
this.images.splice(i, 1);
|
||||
this.imageData.splice(i, 1);
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -463,7 +448,6 @@ window.flux = {
|
||||
},
|
||||
getImageData: function (index) {
|
||||
index = index % this.imageData.length;
|
||||
|
||||
return this.imageData[index];
|
||||
},
|
||||
setNextIndex: function (nextIndex) {
|
||||
|
||||
@@ -93,7 +93,7 @@ socket.on('callback.preview', function (data) {
|
||||
|
||||
|
||||
function setBackground() {
|
||||
background = "/background/" + bundleData.bundleName + "/" + bundleData.background;
|
||||
background = "/background/" + bundleData.background;
|
||||
|
||||
var video = document.getElementById("bgvid");
|
||||
var bg = $("#bg");
|
||||
@@ -143,19 +143,6 @@ function fixCanvas() {
|
||||
canvas.calcOffset();
|
||||
}
|
||||
|
||||
function override() {
|
||||
var obj = canvas.toJSON(['id']);
|
||||
var video = document.getElementById("bgvid");
|
||||
var bg = "";
|
||||
if (video.src.indexOf(".mp4") !== -1) {
|
||||
bg = video.src;
|
||||
} else {
|
||||
bg = video.poster;
|
||||
}
|
||||
|
||||
socket.emit("admin.override", {json: obj, displayId: displayId, background: bg});
|
||||
}
|
||||
|
||||
|
||||
function nextSlide(data, updateOptions) {
|
||||
serverOptions = data.serverOptions;
|
||||
|
||||
@@ -143,7 +143,7 @@ module.exports = function (websocket, dispatcher) {
|
||||
|
||||
router.get('/ajax/imagelist', function (req, res, next) {
|
||||
let bundle = req.query['bundle'];
|
||||
let bundleRoot = path.normalize("./data/bundles" + bundle);
|
||||
let bundleRoot = path.normalize("./data/bundles/" + bundle);
|
||||
let bundleImages = fs.readdirSync(bundleRoot + "/images", {
|
||||
dotfiles: false
|
||||
});
|
||||
|
||||
@@ -66,7 +66,8 @@
|
||||
<div class="ui buttons">
|
||||
<a href="#" onclick="save()" class="ui green button">{{ t("actions.save") }}</a>
|
||||
{% if displayId != null %}
|
||||
<a href="#" onclick="cueSlide(displayId)" class="ui basic teal button">{{ t("actions.announce") }}</a>
|
||||
<a href="#" onclick="cueSlide({{ displayId }})"
|
||||
class="ui basic teal button">{{ t("actions.announce") }}</a>
|
||||
{% endif %}
|
||||
<a href="#" onclick="cueSlide(null)" class="ui red button">{{ t("actions.announceAll") }}</a>
|
||||
<a href="#" onclick="window.close()" class="ui button">{{ t("actions.cancel") }}</a>
|
||||
@@ -155,8 +156,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="ui basic icon button" onclick="setCenter('h')"><i class="arrows alternate horizontal icon"></i></div>
|
||||
<div class="ui basic icon button" onclick="setCenter('v')"><i class="arrows alternate vertical icon"></i></div>
|
||||
<div class="ui basic icon button" onclick="setCenter('h')"><i class="arrows alternate horizontal icon"></i>
|
||||
</div>
|
||||
<div class="ui basic icon button" onclick="setCenter('v')"><i class="arrows alternate vertical icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="right menu">
|
||||
@@ -227,7 +230,7 @@
|
||||
<script>
|
||||
var images = {};
|
||||
|
||||
$(document).ready(function () {
|
||||
$(function () {
|
||||
var opts = {
|
||||
dragClass: "active",
|
||||
on: {
|
||||
|
||||