mirror of
https://github.com/stagehacks/Cue-View.git
synced 2026-08-13 17:53:39 +00:00
First Commit
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
table{
|
||||
background-color: #141414;
|
||||
border: #404040 1px solid;
|
||||
border-radius: 4px;
|
||||
color: #a59baa;
|
||||
}
|
||||
th{
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
padding: 5px;
|
||||
}
|
||||
td{
|
||||
text-align: center;
|
||||
padding: 6px;
|
||||
}
|
||||
td:first-child{
|
||||
text-align: left;
|
||||
}
|
||||
td.black{
|
||||
background-color: black;
|
||||
border-right: #212021 1px solid;
|
||||
}
|
||||
td.num{
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
.scene{
|
||||
background-color: black;
|
||||
border-top: #141414 2px solid;
|
||||
border-bottom: #141414 2px solid;
|
||||
}
|
||||
.scene hr{
|
||||
border: #001f10 4px solid;
|
||||
}
|
||||
.scene span{
|
||||
display: table;
|
||||
margin: 0px auto;
|
||||
margin-top: -25px;
|
||||
padding: 4px;
|
||||
background-color: black;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
}
|
||||
.time{
|
||||
border: #2f2b35 2px solid;
|
||||
border-radius: 5px;
|
||||
}
|
||||
tr.active-cue{
|
||||
color: #d49800;
|
||||
}
|
||||
tr.active-cue td.num{
|
||||
color: #d49800;
|
||||
}
|
||||
tr.active-cue .time{
|
||||
border-color: #d49800;
|
||||
}
|
||||
|
||||
|
||||
@media screen and (min-width: 0px) and (max-width: 750px) {
|
||||
.hide-medium{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media screen and (min-width: 0px) and (max-width: 550px) {
|
||||
.hide-small{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
<header>
|
||||
<h1><%= listName %></h1>
|
||||
<h2><%= data.version %></h2>
|
||||
</header>
|
||||
|
||||
|
||||
<% for(var i in data.cuelists){ %>
|
||||
<strong>List <%= i %></strong>
|
||||
<table cellspacing="0">
|
||||
<tr>
|
||||
<th width="70px">Cue</th>
|
||||
<th width="30px">Int Up</th>
|
||||
<th width="30px">Int Down</th>
|
||||
<th width="40px" class="hide-medium">Focus</th>
|
||||
<th width="40px" class="hide-medium">Color</th>
|
||||
<th width="40px" class="hide-medium">Beam</th>
|
||||
<th width="40px" class="hide-small">Dur</th>
|
||||
<th width="20px" class="hide-small">M</th>
|
||||
<th width="20px" class="hide-small">B</th>
|
||||
<th width="20px" class="hide-small">A</th>
|
||||
<th width="70px" class="hide-small">Fw/Hg</th>
|
||||
<th width="150px">Label</th>
|
||||
<th width="10px" class="hide-medium">Ext Links</th>
|
||||
</tr>
|
||||
|
||||
<% var cues = Object.keys(data.cuelists[i]).sort(function(a, b){return Number(a)-Number(b)}) %>
|
||||
|
||||
<% for(var j=0; j<cues.length; j++){ %>
|
||||
<% var q = data.cuelists[i][cues[j]] %>
|
||||
|
||||
<% for(var partNumber in q){ %>
|
||||
|
||||
<% var p = q[partNumber] %>
|
||||
|
||||
|
||||
<% if(p.scene.length>0 && partNumber==0){ %>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td colspan="12" class="scene"><hr><span><%= p.scene %></span></td>
|
||||
</tr>
|
||||
<% } %>
|
||||
|
||||
<% if(cues[j]==data.activeCue+""){ %>
|
||||
<tr class="active-cue">
|
||||
<% }else{ %>
|
||||
<tr>
|
||||
<% } %>
|
||||
|
||||
<% if(partNumber!=0){ %>
|
||||
<td class="num"> P<%= partNumber %></td>
|
||||
<% }else{ %>
|
||||
<td class="num"> <%= cues[j] %></td>
|
||||
<% } %>
|
||||
|
||||
<% if(partNumber!=0 || p.partcount==0){ %>
|
||||
|
||||
<!-- Int Up/Int Down -->
|
||||
<% if(p.uptimeduration == p.downtimeduration || p.downtimeduration==-1){ %>
|
||||
<td class="black" colspan="2"><%- prettyDuration(p.uptimedelay) || "" %><%- prettyDuration(p.uptimeduration, true) %></td>
|
||||
<% }else{ %>
|
||||
<td class="black"><%- prettyDuration(p.uptimedelay) || "" %><%- prettyDuration(p.uptimeduration, true) %></td>
|
||||
<td class="black "><%- prettyDuration(p.downtimeduration, true) %></td>
|
||||
<% } %>
|
||||
|
||||
<td class="black hide-medium"><%- prettyDuration(p.focustimeduration, true) %></td>
|
||||
<td class="black hide-medium"><%- prettyDuration(p.colortimeduration, true) %></td>
|
||||
<td class="black hide-medium"><%- prettyDuration(p.beamtimeduration, true) %></td>
|
||||
<td class="hide-small"><%= prettyDuration(p.duration) %></td>
|
||||
|
||||
<% }else{ %>
|
||||
<td class="black" colspan="2"></td>
|
||||
<td class="black hide-medium"></td>
|
||||
<td class="black hide-medium"></td>
|
||||
<td class="black hide-medium"></td>
|
||||
<td class="hide-small"></td>
|
||||
|
||||
<% } %>
|
||||
|
||||
<td class="black hide-small"><%= p.mark %></td>
|
||||
<td class="black hide-small"><%= p.block %></td>
|
||||
<td class="black hide-small"><%= p.assert %></td>
|
||||
<td class="black hide-small">
|
||||
<%= (p.follow>=0)? "F"+prettyDuration(p.follow) : "" %>
|
||||
<%= (p.hang>=0)? "H"+prettyDuration(p.hang) : "" %>
|
||||
</td>
|
||||
<td class="black" style="text-align: left">
|
||||
<%- (partNumber==0 ? "": " ") %>
|
||||
<%= p.label %>
|
||||
</td>
|
||||
<td class="black hide-medium"><%= p.extlinks %></td>
|
||||
</tr>
|
||||
|
||||
<% } %>
|
||||
|
||||
<% } %>
|
||||
</table>
|
||||
|
||||
<% } %>
|
||||
|
||||
<script>
|
||||
var $scrollTo = document.getElementsByClassName("active-cue");
|
||||
if($scrollTo.length==1){
|
||||
window.scroll({top: $scrollTo[0].offsetTop-200, behavior: 'smooth'});
|
||||
}
|
||||
</script>
|
||||
|
||||
<%
|
||||
function prettyDuration(milliseconds, box){
|
||||
if(milliseconds==-1){
|
||||
return "";
|
||||
}
|
||||
var num = Math.round(milliseconds/100)/10;
|
||||
if(box){
|
||||
return "<div class='time'>"+num+"</div>";
|
||||
}
|
||||
return num;
|
||||
|
||||
}
|
||||
%>
|
||||
@@ -0,0 +1,115 @@
|
||||
exports.defaultName = "ETC Eos";
|
||||
exports.connectionType = "osc";
|
||||
exports.searchOptions = {
|
||||
type: "TCPport",
|
||||
searchBuffer: Buffer.from("\xc0/eos/ping\x00\x00\x2c\x00\x00\x00\xc0", 'ascii'),
|
||||
testPort: 3032,
|
||||
validateResponse: function(msg, info){
|
||||
return (msg.toString().indexOf("/eos/out"));
|
||||
}
|
||||
}
|
||||
exports.defaultPort = 3032;
|
||||
|
||||
//"\xc0/eos/ping\x00\x00\x2c\x00\x00\x00\xc0"
|
||||
|
||||
|
||||
exports.ready = function(device){
|
||||
device.send("/eos/get/cuelist/count");
|
||||
device.send("/eos/get/version");
|
||||
device.send("/eos/subscribe", [{type: "i", value: 1}]);
|
||||
}
|
||||
|
||||
exports.data = function(device, osc){
|
||||
var address = osc.address;
|
||||
var p = osc.address.split("/");
|
||||
p.shift();
|
||||
|
||||
if(p[1]=="out" && p[2]=="show" && p[3]=="name"){
|
||||
device.data.showName = osc.args[0];
|
||||
device.data.cuelists = {};
|
||||
this.deviceInfoUpdate(device, "defaultName", osc.args[0]);
|
||||
}else if(osc.address=="/eos/out/get/cuelist/count"){
|
||||
for(var i=0; i<osc.args[0]; i++){
|
||||
device.send("/eos/get/cuelist/index/"+i);
|
||||
}
|
||||
}else if(p[1]=="out" && p[2]=="get" && p[3]=="cuelist" && p[5]=="list"){
|
||||
device.data.cuelists[p[4]] = {};
|
||||
device.send("/eos/get/cue/"+p[4]+"/count");
|
||||
}else if(p[1]=="out" && p[2]=="get" && p[3]=="cue" && p[5]=="count"){
|
||||
for(var i=0; i<osc.args[0]; i++){
|
||||
device.send("/eos/get/cue/"+p[4]+"/index/"+i);
|
||||
}
|
||||
}else if(p[1]=="out" && p[2]=="get" && p[3]=="cue" && p[7]=="list"){
|
||||
this.deviceInfoUpdate(device, "status", "ok");
|
||||
if(device.data.cuelists[p[4]][p[5]]==undefined){
|
||||
device.data.cuelists[p[4]][p[5]] = {};
|
||||
}
|
||||
device.data.cuelists[p[4]][p[5]][p[6]] = {
|
||||
uid: osc.args[1],
|
||||
label: osc.args[2],
|
||||
uptimeduration: osc.args[3],
|
||||
uptimedelay: osc.args[4],
|
||||
downtimeduration: osc.args[5],
|
||||
downtimedelay: osc.args[6],
|
||||
focustimeduration: osc.args[7],
|
||||
focustimedelay: osc.args[8],
|
||||
colortimeduration: osc.args[9],
|
||||
colortimedelay: osc.args[10],
|
||||
beamtimeduration: osc.args[11],
|
||||
beamtimedelay: osc.args[12],
|
||||
mark: osc.args[16],
|
||||
block: osc.args[17],
|
||||
assert: osc.args[18],
|
||||
follow: osc.args[20],
|
||||
hang: osc.args[21],
|
||||
partcount: osc.args[26],
|
||||
scene: osc.args[28],
|
||||
duration: Math.max(osc.args[3], osc.args[5], osc.args[7], osc.args[9], osc.args[11])
|
||||
};
|
||||
|
||||
//console.log(p[4]+" "+p[5]+" "+p[6]+" updated")
|
||||
device.draw();
|
||||
|
||||
}else if(p[1]=="out" && p[2]=="get" && p[3]=="cue" && p.length==6){
|
||||
|
||||
//console.log("cue "+p[4]+" "+p[5]+" deleted")
|
||||
|
||||
|
||||
// There's no OSC notification of the deletion of a part. It just tells you to update the parent cue and remaining children.
|
||||
// So: we should fetch all the parts of a cue somehow every time there's an update to a cue.
|
||||
|
||||
|
||||
|
||||
delete device.data.cuelists[p[4]][p[5]];
|
||||
device.draw();
|
||||
|
||||
}else if(p[1]=="out" && p[2]=="get" && p[3]=="cue" && p[7]=="actions"){
|
||||
if(osc.args.length==3){
|
||||
device.data.cuelists[p[4]][p[5]][0].extlinks = osc.args[2];
|
||||
}
|
||||
}else if(p[1]=="out" && p[2]=="event" && p[3]=="cue" && p[6]=="fire"){
|
||||
// explore replacing this with /eos/out/active/cue
|
||||
device.data.activeCue = p[5];
|
||||
device.draw();
|
||||
}else if(p[1]=="out" && p[2]=="notify" && p[3]=="cue"){
|
||||
var cueList = p[4];
|
||||
var listIndex = p[6];
|
||||
var listCount = p[7];
|
||||
var cueNumber = osc.args[1];
|
||||
|
||||
device.send("/eos/get/cue/"+cueList+"/"+cueNumber);
|
||||
//console.log("SENT /eos/get/cue/"+cueList+"/"+cueNumber);
|
||||
}else if(p[2]=="cmd" || p[2]=="ping" || p[2]=="user" || p[2]=="softkey"){
|
||||
|
||||
}else if(p[3]=="version"){
|
||||
device.data.version = osc.args[0];
|
||||
|
||||
}else{
|
||||
//console.log(osc);
|
||||
}
|
||||
//console.log(p)
|
||||
}
|
||||
exports.heartbeat = function(device){
|
||||
device.send("/eos/ping");
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
Reference in New Issue
Block a user