diff --git a/networkInterfaces.js b/networkInterfaces.js index f78b3bc..c60db28 100644 --- a/networkInterfaces.js +++ b/networkInterfaces.js @@ -8,9 +8,12 @@ window.init = function init() { const interfaceID = Object.keys(networkInterfaces)[i]; const interfaceObj = networkInterfaces[interfaceID]; - html += `${interfaceID}`; - html += `${interfaceObj[0].address}`; - html += `${interfaceObj[0].netmask}`; + html += ` + + ${interfaceID} + ${interfaceObj[0].address} + ${interfaceObj[0].netmask} + `; if (interfaceObj[0].searchTruncated) { html += ``; @@ -18,8 +21,10 @@ window.init = function init() { html += ``; } - html += `${interfaceObj[0].firstSearchAddress} - ${interfaceObj[0].lastSearchAddress}`; - html += ``; + html += ` + ${interfaceObj[0].firstSearchAddress} - ${interfaceObj[0].lastSearchAddress} + + `; document.getElementById('network-interfaces').innerHTML = html; } diff --git a/plugins/eos/main.js b/plugins/eos/main.js index 96dcd75..62dd4e2 100644 --- a/plugins/eos/main.js +++ b/plugins/eos/main.js @@ -23,6 +23,9 @@ exports.config = { exports.ready = function ready(_device) { const device = _device; device.data.EOS = new EOS(); + device.templates = { + cue: _.template(fs.readFileSync(path.join(__dirname, `cue.ejs`))), + }; device.send('/eos/get/cuelist/count'); device.send('/eos/get/version'); device.send('/eos/subscribe', [{ type: 'i', value: 1 }]); @@ -91,14 +94,11 @@ exports.data = function data(_device, osc) { } }; -const cueTemplate = _.template(fs.readFileSync(path.join(__dirname, `cue.ejs`))); - exports.update = function update(device, doc, updateType, data) { if (updateType === 'cueData') { const $elem = doc.getElementById(data.uid); - if ($elem) { - $elem.outerHTML = cueTemplate({ + $elem.outerHTML = device.templates.cue({ q: data.cue, cueNumber: data.cueNumber, isActive: false, diff --git a/plugins/eos/template.ejs b/plugins/eos/template.ejs index 5819ffb..751cce9 100644 --- a/plugins/eos/template.ejs +++ b/plugins/eos/template.ejs @@ -3,13 +3,6 @@

Eos <%= data.version %>

-<% - const fs = require('fs'); - const path = require('path'); - let cueTemplate = _.template(fs.readFileSync(path.join(__dirname, `/plugins/eos/cue.ejs`))); -%> - - <% for(var i in data.EOS.cueLists){ %>
List <%= i %>
@@ -35,7 +28,7 @@ <% for(var j=0; j <% var q = data.EOS.cueLists[i][cues[j]] %> - <%= cueTemplate({ + <%= templates.cue({ q: q, cues: cues, cueNumber: cues[j], diff --git a/plugins/qlab/cuelist.ejs b/plugins/qlab/cuelist.ejs index d345be0..93f1ecc 100644 --- a/plugins/qlab/cuelist.ejs +++ b/plugins/qlab/cuelist.ejs @@ -40,13 +40,11 @@ function displayCueRow(q){ - let html = ""; - - html+= rowTemplate({cue: allCues[q.uniqueID], allCues: allCues, workspace: workspace}); + let html = rowTemplate({cue: allCues[q.uniqueID], allCues: allCues, workspace: workspace}); if(q.cues){ q.cues.forEach(q =>{ - html+=displayCueRow(q); + html += displayCueRow(q); }) } return html; diff --git a/plugins/qlab/main.js b/plugins/qlab/main.js index a7c67d8..706e58a 100644 --- a/plugins/qlab/main.js +++ b/plugins/qlab/main.js @@ -36,11 +36,14 @@ const valuesForKeysString = '"mode","parent","cartRows","cartColumns","cartPosition","displayName","preWaitElapsed",' + '"actionElapsed","postWaitElapsed","isPaused"]'; -const cueTemplate = _.template(fs.readFileSync(path.join(__dirname, `cue.ejs`))); -const tileTemplate = _.template(fs.readFileSync(path.join(__dirname, `tile.ejs`))); -const cartTemplate = _.template(fs.readFileSync(path.join(__dirname, `cart.ejs`))); - -exports.ready = function ready(device) { +exports.ready = function ready(_device) { + const device = _device; + device.templates = { + cue: _.template(fs.readFileSync(path.join(__dirname, `cue.ejs`))), + tile: _.template(fs.readFileSync(path.join(__dirname, `tile.ejs`))), + cart: _.template(fs.readFileSync(path.join(__dirname, `cart.ejs`))), + cuelist: _.template(fs.readFileSync(path.join(__dirname, `cuelist.ejs`))), + }; device.send(`/version`); device.send('/workspaces'); }; @@ -321,8 +324,8 @@ exports.update = function update(device, doc, updateType, data) { if (data.cue.type === 'Cue List') { $elem.outerHTML = `

${data.workspace.displayName} — ${data.cue.name}

`; } else if (data.cue.type === 'Cart') { - $elem.outerHTML = cartTemplate({ - tileTemplate, + $elem.outerHTML = device.templates.cart({ + tileTemplate: device.templates.tile, cueList: data.cue, allCues: data.workspace.cues, }); @@ -330,12 +333,12 @@ exports.update = function update(device, doc, updateType, data) { // checking that the parent cue is a cart cue const parentCue = data.workspace.cues[data.cue.parent]; if (parentCue && parentCue.type === 'Cart') { - $elem.outerHTML = tileTemplate(data); + $elem.outerHTML = device.templates.tile(data); } else { - $elem.outerHTML = cueTemplate(data); + $elem.outerHTML = device.templates.cue(data); } } else { - $elem.outerHTML = cueTemplate(data); + $elem.outerHTML = device.templates.cue(data); } } } else if (updateType === 'updatePlaybackPosition') { diff --git a/plugins/qlab/template.ejs b/plugins/qlab/template.ejs index 09084b1..e55bd0b 100644 --- a/plugins/qlab/template.ejs +++ b/plugins/qlab/template.ejs @@ -3,16 +3,6 @@

QLab <%= data.version || "" %>

-<% - const fs = require('fs'); - let _ = require('lodash'); - const path = require('path'); - - let cueTemplate = _.template(fs.readFileSync(path.join(__dirname, `/plugins/qlab/cue.ejs`))); - let tileTemplate = _.template(fs.readFileSync(path.join(__dirname, `/plugins/qlab/tile.ejs`))); - let cartTemplate = _.template(fs.readFileSync(path.join(__dirname, `/plugins/qlab/cart.ejs`))); - let listTemplate = _.template(fs.readFileSync(path.join(__dirname, `/plugins/qlab/cuelist.ejs`))); -%> <% if(data.permission=="ok"){ for(const workspace_id in data.workspaces){ @@ -21,9 +11,9 @@ const ql = workspace.cueLists[cueList_id]; %> <% if(ql.type=="Cue List"){ %> - <%= listTemplate({cueList: ql, allCues: workspace.cues, rowTemplate: cueTemplate, workspace: workspace}) %> + <%= templates.cuelist({cueList: ql, allCues: workspace.cues, rowTemplate: templates.cue, workspace: workspace}) %> <% }else if(ql.type=="Cart"){ %> - <%= cartTemplate({cueList: ql, allCues: workspace.cues, tileTemplate: tileTemplate}) %> + <%= templates.cart({cueList: ql, allCues: workspace.cues, tileTemplate: templates.tile}) %> <% } %> <% }}}else if(data.permission=="no workspaces"){ %> diff --git a/src/device.js b/src/device.js index 9b51a29..312203d 100644 --- a/src/device.js +++ b/src/device.js @@ -38,6 +38,7 @@ function registerDevice(newDevice, discoveryMethod) { port: newDevice.port, addresses: newDevice.addresses, data: {}, + templates: {}, fields: newDevice.fields || {}, pinIndex: false, lastDrawn: 0, diff --git a/src/view.js b/src/view.js index 100395b..f3a2a8d 100644 --- a/src/view.js +++ b/src/view.js @@ -21,23 +21,26 @@ function drawDeviceFrame(id) { const d = DEVICE.all[id]; - let str = ''; - str += ``; + const str = ` + + + - // scrollbar styles are inline to prevent the styles flickering in - str += ''; - str += ""; - str += ''; - - str += generateBodyHTML(d); - - str += ''; + + + + + + ${generateBodyHTML(d)}; + + + `; $deviceDrawArea.setAttribute('class', `${d.type} draw-area`); $deviceDrawArea.contentWindow.document.open(); @@ -57,29 +60,34 @@ function drawDeviceFrame(id) { } function generateBodyHTML(d) { - let str = ''; - if (d.status === 'ok') { try { - str += PLUGINS.all[d.type].template({ + return PLUGINS.all[d.type].template({ + templates: d.templates, data: d.data, listName: d.displayName || d.defaultName, }); } catch (err) { console.log(err); - str += '

Plugin Template Error

'; + return '

Plugin Template Error

'; } } else { - str += `

${d.displayName || d.defaultName}

`; - str += "
"; - str += `

${d.type} is not responding to requests for data.

`; - str += `

IP ${d.addresses[0]}

`; - str += `

Port ${d.port}

`; - str += '
'; - str += `
${PLUGINS.all[d.type].info()}
`; - } + return ` +
+

${d.displayName || d.defaultName}

+
- return str; +
+

${d.type} is not responding to requests for data.

+

IP ${d.addresses[0]}

+

Port ${d.port}

+
+
+
+ ${PLUGINS.all[d.type].info()} +
+ `; + } } module.exports.draw = function draw(device) { @@ -114,8 +122,10 @@ module.exports.addDeviceToList = function addDeviceToList(device) { html += "
clear
"; } - html += `
`; - html += `
${d.displayName || d.defaultName}
`; + html += ` +
+
${d.displayName || d.defaultName}
+ `; const elem = document.getElementById(d.id); if (elem == null) { @@ -196,8 +206,8 @@ function updateFields() { const fields = activeDevice.plugin.config.fields; fields.forEach((field) => { + // generic input setup const $elem = document.createElement('input'); - $elem.type = 'text'; $elem.value = activeDevice.fields[field.key]; $elem.name = field.key; $elem.onchange = function onchange(e) { @@ -206,7 +216,9 @@ function updateFields() { saveAll(); }; + // type specific setup if (field.type === 'textinput') { + $elem.type = 'text'; const rowHTML = `${field.label}:`; document.getElementById('device-settings-fields').insertAdjacentHTML('beforeend', rowHTML); document.getElementById(field.key).appendChild($elem);