First Commit

This commit is contained in:
sparks-alec
2021-10-18 04:55:03 -04:00
commit f3cb66b9f3
95 changed files with 18266 additions and 0 deletions
+69
View File
@@ -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;
}
}
+119
View File
@@ -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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P<%= partNumber %></td>
<% }else{ %>
<td class="num">&nbsp;<%= 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 ? "": "&nbsp;&nbsp;&nbsp;") %>
<%= 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;
}
%>
+115
View File
@@ -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.