-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.min.html
executable file
·3 lines (3 loc) · 26.1 KB
/
index.min.html
1
2
3
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="apple-mobile-web-app-capable" content="yes"><title>Tonalite - DMX Lighting Control System</title><script defer src="static/js/all.min.js"></script><link rel="stylesheet" href="static/css/bootstrap.min.css"><link rel="stylesheet" href="static/css/bootstrap-multiselect.css"><link rel="stylesheet" href="static/css/style.min.css"><link rel="apple-touch-icon" href="static/img/icon.png"><link rel="manifest" href="/static/manifest.json"></head><body><div id="app"><nav class="navbar sticky-top navbar-expand navbar-dark bg-light"><a class="navbar-brand" href="/">Tonalite</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav mr-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">File</a><div class="dropdown-menu" aria-labelledby="navbarDropdown"><a class="dropdown-item" onclick="resetShow()">New Show</a> <a class="dropdown-item" onclick="resetPresets()">Reset Presets</a> <a v-if="!desktop" class="dropdown-item" onclick="saveShowToUSB()">Save Show To USB</a> <a v-if="!desktop" class="dropdown-item" onclick="getShowModal()">Open Show From USB</a><div v-if="ifMobile() || desktop" class="dropdown-divider"></div><a v-if="ifMobile() || desktop" class="dropdown-item" href="/showFile">Save Show To File</a> <a v-if="ifMobile() || desktop" class="dropdown-item" onclick="openShowFileModal()">Open Show From File</a><div class="dropdown-divider"></div><a v-if="ifMobile() || desktop" class="dropdown-item" onclick="openFixtureDefinitionModal()">Import Fixture Definition From File</a> <a v-if="!desktop" class="dropdown-item" onclick="importFixtures()">Import Fixtures From USB</a> <a class="dropdown-item" onclick="updateFixtureProfiles()">Update Show Fixture Profiles</a><div v-if="desktop" class="dropdown-divider"></div><a v-if="desktop" class="dropdown-item" onclick="shutdown()">Shutdown</a><div v-if="!ifMobile() && !desktop" class="dropdown-divider"></div><a v-if="!ifMobile() && !desktop" class="dropdown-item" onclick="reboot()">Reboot</a></div></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Edit</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"><a class="dropdown-item" onclick="openSettingsModal()">Settings</a> <a v-if="!desktop" class="dropdown-item" onclick="updateFirmware()">Update Firmware</a><div class="dropdown-divider"></div><a v-if="ifMobile() || desktop" class="dropdown-item" onclick="launchFullScreen(document.documentElement)">Full Screen</a> <a class="dropdown-item" href="/presets">Presets View</a></div></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Help</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"><a class="dropdown-item" onclick="openAboutModal()">About Tonalite</a> <a class="dropdown-item" href="/docs">Documentation</a> <a v-if="ifMobile() || desktop" class="dropdown-item" href="http://jmroper.com/tonalite">Website</a> <a v-if="ifMobile() || desktop" class="dropdown-item" href="mailto([email protected])">Send An Email</a></div></li></ul></div></nav><div id="fixtures" class="tabcontent"><div class="container"><div class="row topBtns sticky-top"><div class="col-6"><button class="btn btn-success btn-block" onclick="addFixtureModal()">Add Fixture</button></div><div class="col-6"><button :disabled="fixtures.length == 0" class="btn btn-danger btn-block" onclick="resetFixtures()">Reset Values</button></div></div><div class="row" id="fixturesList"><div class="col-4 col-sm-3 col-lg-2 mb-3" v-for="fixture in fixtures" :key="fixture.id"><div class="fixtureItem" v-on:click="viewFixtureParameters(fixture.id)"><h3 v-if="fixture.hasIntensity === true" class="fixtureValue">{{fixture.parameters[fixture.parameters.map(el => el.type).indexOf(1)].displayValue}}</h3><p>{{fixture.shortName}} ({{fixture.startDMXAddress}}) <span v-html="lockedFixtureParameters(fixture.hasLockedParameters)"></span></p></div></div><div v-if="fixtures.length == 0" class="col-12"><h5>There are no fixtures in this show!</h5></div></div></div></div><div id="fixtureProfilesModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"><div class="row"><div class="col-6"><div class="form-group"><label class="dark" for="newFixtureStartDMXAddress">Starting Address:</label> <input type="number" class="form-control" max="512" min="1" id="newFixtureStartDMXAddress" placeholder="DMX Address" v-model="startDMXAddress"></div></div><div class="col-6"><div class="form-group"><label class="dark" for="newFixtureCreationCount">Number To Create:</label> <input type="number" class="form-control" min="1" id="newFixtureCreationCount" placeholder="Creation Count" v-model="newFixtureCreationCount"></div></div></div><div class="row"><div class="col-12"><div class="form-group"><input type="text" class="form-control" id="searchFixtureProfiles" onkeyup="searchFixtureProfiles()" placeholder="Search:"></div></div></div><ul class="list-group" id="fixtureProfilesList"><li class="list-group-item fixtureProfileItem" v-for="profile in fixtureProfiles" v-on:click="addFixture(profile[3], profile[4])">{{profile[0]}} <span v-if="profile[1] != '-'">- {{profile[1]}}</span> - {{profile[2]}}</li></ul><div v-if="fixtureProfiles.length == 0" class="text-danger">There are no fixture profiles in your library!</div></div></div></div></div><div id="fixtureAddEffectsModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"><ul class="nav nav-tabs" id="effectsTabs" role="tablist" v-if="fixtureEffects.length > 0"><li class="nav-item"><a class="nav-link active" id="colorEffects-tab" data-toggle="tab" href="#colorEffects" role="tab" aria-controls="colorEffects" aria-selected="true">Color</a></li><li class="nav-item"><a class="nav-link" id="intensityEffects-tab" data-toggle="tab" href="#intensityEffects" role="tab" aria-controls="intensityEffects" aria-selected="false">Intensity</a></li><li class="nav-item"><a class="nav-link" id="shapeEffects-tab" data-toggle="tab" href="#shapeEffects" role="tab" aria-controls="shapeEffects" aria-selected="false">Shape</a></li><li class="nav-item"><a class="nav-link" id="parameterEffects-tab" data-toggle="tab" href="#parameterEffects" role="tab" aria-controls="parameterEffects" aria-selected="false">Param.</a></li></ul><div class="tab-content" v-if="fixtureEffects.length > 0"><div class="tab-pane active" id="colorEffects" role="tabpanel" aria-labelledby="colorEffects-tab"><ul class="list-group" id="fixtureEffectsListColor"><li class="list-group-item fixtureProfileItem" v-for="effect in fixtureEffects" v-if="effect[1] == 'Color'" v-on:click="addEffect(effect[2])">{{effect[0]}}</li></ul></div><div class="tab-pane" id="intensityEffects" role="tabpanel" aria-labelledby="intensityEffects-tab"><ul class="list-group" id="fixtureEffectsListIntensity"><li class="list-group-item fixtureProfileItem" v-for="effect in fixtureEffects" v-if="effect[1] == 'Intensity'" v-on:click="addEffect(effect[2])">{{effect[0]}}</li></ul></div><div class="tab-pane" id="shapeEffects" role="tabpanel" aria-labelledby="shapeEffects-tab"><ul class="list-group" id="fixtureEffectsListShape"><li class="list-group-item fixtureProfileItem" v-for="effect in fixtureEffects" v-if="effect[1] == 'Shape'" v-on:click="addEffect(effect[2])">{{effect[0]}}</li></ul></div><div class="tab-pane" id="parameterEffects" role="tabpanel" aria-labelledby="parameterEffects-tab"><label for="fixtureEffectParametersList" class="mb-0 text-dark mt-1">Apply Effect To:</label> <select class="form-control mb-1" id="fixtureEffectParametersList" name="fixtureEffectParametersList"><option v-for="(parameter, index) in fixtureParameters" :key="index" :value="parameter.name">{{parameter.name}}</option></select><ul class="list-group" id="fixtureEffectsListParameter"><li class="list-group-item fixtureProfileItem" v-for="effect in fixtureEffects" v-if="effect[1] == 'Parameter'" v-on:click="addEffect(effect[2])">{{effect[0]}}</li></ul></div></div><div v-if="fixtureEffects.length == 0" class="text-danger">There are no fixture effects in your library!</div></div></div></div></div><div id="showFilesModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"><h5 class="dark">All show files on the USB:</h5><ul class="list-group" id="showsList"><li class="list-group-item showFileItem" v-for="show in showFiles" v-on:click="openShowFromUSB(show)">{{show.slice(0, -9)}}</li></ul><div v-if="showFiles.length == 0" class="text-danger">There are no shows on the connected USB drive!</div></div></div></div></div><div id="fixtureParametersPage" class="tabcontent"><div class="container"><div class="row topBtns"><div class="col-4"><h5 id="fixtureParametersName">Fixture name</h5></div><div class="col-3"><button id="fixtureSettingsBtn" class="btn btn-primary btn-block"><i class="far fa-cog d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Settings</span></button></div><div class="col-2"><button id="fixtureResetBtn" class="btn btn-danger btn-block"><i class="far fa-redo d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Reset</span></button></div><div class="col-3"><button id="fixtureAddEffectBtn" class="btn btn-success btn-block"><i class="far fa-hurricane d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Add Effect</span></button></div></div><div id="fixtureParameters"></div></div></div><div id="fixtureSettingsPage" class="tabcontent"><div class="container"><div class="row topBtns"><div class="col-4"><button id="fixtureParametersBackBtn" class="btn btn-primary btn-block">Back</button></div><div class="col-4"><button id="fixtureSaveBtn" class="btn btn-success btn-block">Save</button></div><div class="col-4"><button id="fixtureDeleteBtn" class="btn btn-danger btn-block">Delete</button></div></div><div class="row" id="fixtureSettings"><div class="col-12"><div class="form-group"><label for="fixtureNameInput">Name:</label> <input class="form-control" type="text" id="fixtureNameInput" placeholder="Full Fixture Name"></div></div><div class="col-12"><div class="form-group"><label for="fixtureShortNameInput">Short Name:</label> <input class="form-control" type="text" id="fixtureShortNameInput" placeholder="Short Fixture Name"></div></div><div class="col-12"><div class="form-group"><label for="fixtureDMXAddressInput">Starting DMX Address:</label> <input class="form-control" min="1" max="512" type="number" id="fixtureDMXAddressInput" placeholder="Fixture Starting DMX Address"></div></div></div></div></div><div id="effectSettingsPage" class="tabcontent"><div class="container"><div class="row topBtns"><div class="col-4"><button id="fixtureParametersEffectBackBtn" class="btn btn-primary btn-block">Back</button></div><div class="col-4"><button id="effectSaveBtn" class="btn btn-success btn-block">Save</button></div><div class="col-4"><button id="effectDeleteBtn" class="btn btn-danger btn-block">Delete</button></div></div><div class="row" id="effectSettings"><div class="col-12"><div class="form-group"><label for="effectNameInput">Name:</label> <input class="form-control" type="text" id="effectNameInput" placeholder="Effect Name"></div></div><div class="col-12"><div class="form-group"><label class="ml-2 mb-0" for="effectDepthInput">Depth:</label> <input type="range" step="0.01" min="0.0" max="1.0" class="custom-range" id="effectDepthInput" min="0" max="100"></div></div><div class="col-12"><div class="form-group"><label for="effectFanInput">Fan:</label> <input class="form-control" min="0" max="1023" type="number" id="effectFanInput" placeholder="Effect Fan"></div></div></div></div></div><div id="cues" class="tabcontent"><div class="container"><div class="row topBtns sticky-top"><div class="col-4"><button :disabled="cues.length == 0" class="btn btn-primary btn-block" onclick="lastCue()"><i class="far fa-chevron-left"></i></button></div><div class="col-4"><button :disabled="fixtures.length == 0" id="cueActionBtn" class="btn btn-danger btn-block"></button></div><div class="col-4"><button :disabled="cues.length == 0" class="btn btn-primary btn-block" onclick="nextCue()"><i class="far fa-chevron-right"></i></button></div></div><div class="row" id="cuesList"><div class="col-4 col-lg-2 mb-3" v-for="cue in cues" :key="cue.id"><div class="cueItem" :class="{ 'cueActive' : cue.active == true, 'cueCurrent' : cue.id == currentCue && cue.active != true}" v-on:click="viewCueSettings(cue.id)"><p>{{cue.name}}</p></div></div><div v-if="cues.length == 0" class="col-12"><h5>There are no cues in this show!</h5></div></div></div></div><div id="cueSettingsPage" class="tabcontent"><div class="container"><div class="row topBtns"><div class="col-3"><button id="cueSaveBtn" class="btn btn-success btn-block">Save</button></div><div class="col-3"><button id="cueDeleteBtn" class="btn btn-danger btn-block"><i class="far fa-trash-alt d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Delete</span></button></div><div class="col-3"><button id="cueCloneEndBtn" class="btn btn-info btn-block"><i class="far fa-clone d-sm-none d-inline-block"></i> <span class="d-inline-block d-sm-none">E</span><span class="d-none d-sm-inline-block">Clone End</span></button></div><div class="col-3"><button id="moveCueUpBtn" class="btn btn-success btn-block"><i class="far fa-chevron-up"></i></button></div></div><div class="row topBtns"><div class="col-3"><button id="gotoCueBtn" class="btn btn-primary btn-block">Go</button></div><div class="col-3"><button id="cueUpdateBtn" class="btn btn-warning btn-block"><i class="far fa-pencil d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Update Parameters</span></button></div><div class="col-3"><button id="cueCloneNextBtn" class="btn btn-info btn-block"><i class="far fa-clone d-sm-none d-inline-block"></i> <span class="d-inline-block d-sm-none">N</span><span class="d-none d-sm-inline-block">Clone Next</span></button></div><div class="col-3"><button id="moveCueDownBtn" class="btn btn-success btn-block"><i class="far fa-chevron-down"></i></button></div></div><div class="row" id="cueSettings"><div class="col-12"><div class="form-group"><label for="cueNameInput">Name:</label> <input class="form-control" type="text" id="cueNameInput" placeholder="Cue Name"></div></div><div class="col-12"><div class="form-group"><label for="cueUpTimeInput">Up Time:</label> <input class="form-control" min="0" type="number" id="cueUpTimeInput" placeholder="Cue Up Length In Seconds"></div></div><div class="col-12"><div class="form-group"><label for="cueDownTimeInput">Down Time:</label> <input class="form-control" min="0" type="number" id="cueDownTimeInput" placeholder="Cue Down Length In Seconds"></div></div><div class="col-12"><div class="form-group"><label for="cueFollowInput">Follow:</label> <input class="form-control" type="number" min="-1" id="cueFollowInput" placeholder="Cue Follow Time In Seconds"></div></div></div></div></div><div id="groups" class="tabcontent"><div class="container"><div class="row topBtns sticky-top"><div class="col-6"><button :disabled="fixtures.length == 0" class="btn btn-success btn-block" onclick="addGroupModal()">Add Group</button></div><div class="col-6"><button :disabled="groups.length == 0" class="btn btn-danger btn-block" onclick="resetGroups()">Reset Values</button></div></div><div class="row" id="groupsList"><div class="col-4 col-lg-2 mb-3" v-for="group in groups" :key="group.id"><div class="groupItem" v-on:click="viewGroupParameters(group.id)"><p>{{group.name}}</p></div></div><div v-if="groups.length == 0" class="col-12"><h5>There are no groups in this show!</h5></div></div></div></div><div id="groupSettingsPage" class="tabcontent"><div class="container"><div class="row topBtns"><div class="col-4"><button id="groupParametersBackBtn" class="btn btn-primary btn-block">Back</button></div><div class="col-4"><button id="groupSaveBtn" class="btn btn-success btn-block">Save</button></div><div class="col-4"><button id="groupDeleteBtn" class="btn btn-danger btn-block">Delete</button></div></div><div class="row" id="groupSettings"><div class="col-12"><div class="form-group"><label for="groupNameInput">Name:</label> <input class="form-control" type="text" id="groupNameInput" placeholder="Group Name"></div></div></div><b>Group Fixtures:</b><div id="groupFixtures"></div></div></div><div id="groupParametersPage" class="tabcontent"><div class="container"><div class="row topBtns"><div class="col-6"><h5 id="groupParametersName">Group name</h5></div><div class="col-3"><button id="groupSettingsBtn" class="btn btn-primary btn-block"><i class="far fa-cog d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Settings</span></button></div><div class="col-3"><button id="groupResetBtn" class="btn btn-danger btn-block"><i class="far fa-redo d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Reset</span></button></div></div><div id="groupParameters"></div></div></div><div id="presets" class="tabcontent"><div class="container"><div class="row topBtns sticky-top"><div class="col-12"><button :disabled="fixtures.length == 0" class="btn btn-success btn-block" v-on:click="recordPreset()">Record Preset</button></div></div><div class="row"><div class="col-12"><button id="blackoutBtn" class="btn" :class="{ 'btn-primary' : blackout == false, 'btn-danger' : blackout == true}" v-on:click="toggleBlackout()">Blackout</button> <label class="ml-2" for="grandmaster">Grandmaster:</label> <input type="range" class="custom-range" id="grandmaster" min="0" max="100" v-on:input="updateGrandmasterValue()" v-model="grandmaster"></div></div><div class="row" id="presetsList"><div class="col-4 col-lg-2 mb-3" v-for="preset in presets" :key="preset.id"><div :class="{ 'presetActive' : preset.active == true}" class="presetItem" v-on:click="viewPresetSettings(preset.id)"><p>{{preset.name}}</p></div></div><div v-if="presets.length == 0" class="col-12"><h5>There are no presets in this show!</h5></div></div></div></div><div id="presetSettingsPage" class="tabcontent"><div class="container"><div class="row topBtns"><div class="col-4"><button id="presetSaveBtn" class="btn btn-success btn-block">Save</button></div><div class="col-4"><button id="presetDeleteBtn" class="btn btn-danger btn-block"><i class="far fa-trash-alt d-sm-none d-inline-block"></i><span class="d-none d-sm-inline-block">Delete</span></button></div><div class="col-4"><button id="presetActiveBtn" class="btn btn-warning btn-block"></button></div></div><div class="row" id="presetSettings"><div class="col-md-8 col-12"><div class="form-group"><label for="presetNameInput">Name:</label> <input class="form-control" type="text" id="presetNameInput" placeholder="Preset Name"></div></div><div class="col-md-4 col-12"><div class="form-group mt-0 mt-md-4"><div class="custom-control custom-checkbox"><input type="checkbox" class="custom-control-input" id="displayPresetAsDimmer"> <label class="custom-control-label" for="displayPresetAsDimmer">Display As Dimmer</label></div></div></div><div class="col-12"><div class="form-group"><label class="ml-2" for="presetIntensityInput">Intensity:</label> <input type="range" class="custom-range" id="presetIntensityInput" min="0" max="100" v-on:input="updatePresetIntensity()"></div></div></div></div></div><div class="tab"><div class="row"><div class="col-3" onclick="openTab('fixtures')"><div class="tabitem tabitem-fixtures"><i class="tablinks far fa-lightbulb" id="fixturesTab"></i><span class="tabtext">Fixtures</span></div></div><div class="col-3" onclick="openTab('cues')"><div class="tabitem tabitem-cues"><i class="tablinks far fa-list"></i><span class="tabtext">Cues</span></div></div><div class="col-3" onclick="openTab('groups')"><div class="tabitem tabitem-groups"><i class="tablinks far fa-layer-group"></i><span class="tabtext">Groups</span></div></div><div class="col-3" onclick="openTab('presets')"><div class="tabitem tabitem-presets"><i class="tablinks far fa-swatchbook"></i><span class="tabtext">Presets</span></div></div></div></div><div id="openShowModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"><p class="dark">Opening a new show file will overwrite the current show.</p><form action="/showFile" method="post" enctype="multipart/form-data"><div class="form-group"><div class="custom-file"><input type="file" class="custom-file-input" name="showFile" id="showFile"> <label class="dark custom-file-label" for="showFile">Choose file</label></div></div><input type="submit" class="btn btn-success" value="Open Show File"></form></div></div></div></div><div id="openFixtureDefinitionModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"><form action="/importFixtureDefinition" method="post" enctype="multipart/form-data"><div class="form-group"><div class="custom-file"><input type="file" class="custom-file-input" name="fixtureDefinition" id="fixtureDefinition"> <label class="dark custom-file-label" for="fixtureDefinition">Choose file</label></div></div><input type="submit" class="btn btn-success" value="Import Fixture Definition"></form></div></div></div></div><div id="openSettingsModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"><div class="row"><div class="col-md-6 col-sm-12"><div class="form-group"><label class="dark" for="defaultUpTime">Default Up Time:</label> <input v-on:input="saveSettingsBackground()" min="0" class="form-control" type="number" id="defaultUpTime" placeholder="Default Cue Up Time"></div></div><div class="col-md-6 col-sm-12"><div class="form-group"><label class="dark" for="defaultDownTime">Default Down Time:</label> <input v-on:input="saveSettingsBackground()" min="0" class="form-control" type="number" id="defaultDownTime" placeholder="Default Cue Up Time"></div></div></div><div class="row"><div class="col-12"><div class="form-group"><div class="custom-control custom-checkbox"><input v-on:input="saveSettingsBackground()" :disabled="!desktop" type="checkbox" class="custom-control-input" id="useUDMX"> <label class="custom-control-label dark" for="useUDMX">Use uDMX?</label></div></div></div></div><div class="row"><div class="col-12"><div class="form-group"><div class="custom-control custom-checkbox"><input v-on:input="saveSettingsBackground()" type="checkbox" class="custom-control-input" id="useAutomark"> <label class="custom-control-label dark" for="useAutomark">Use Automark?</label></div></div></div></div><div class="row"><div class="col-md-6 col-sm-12"><div class="form-group"><label class="dark" for="artnetIP">ArtNet IP:</label> <input v-on:input="saveSettingsBackground()" :disabled="!desktop" class="form-control" type="text" id="artnetIP" placeholder="ArtNet IP is localhost"></div></div><div class="col-md-6 col-sm-12"><div class="form-group"><label class="dark" for="sacnIP">sACN IP:</label> <input v-on:input="saveSettingsBackground()" :disabled="!desktop" class="form-control" type="text" id="sacnIP" placeholder="sACN IP is localhost"></div></div></div><button class="btn btn-success" v-on:click="closeSettings()">Close</button></div></div></div></div><div id="addGroupModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"><div class="form-group"><label class="dark mr-2" for="groupFixtureIDs">Fixtures:</label> <select class="form-control" multiple id="groupFixtureIDs" name="groupFixtureIDs" size="5"><option v-for="fixture in fixtures" :key="fixture.id" :value="fixture.id">{{fixture.name}} ({{fixture.startDMXAddress}})</option></select></div><button class="btn btn-success btn-full" onclick="addGroup()">Add Group</button></div></div></div></div><div id="openAboutModal" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body text-center dark"><h5>Tonalite v{{version}} - Lighting Control System</h5><p class="mb-0">Developed by <span v-if="!desktop">John Roper</span><a href="http://jmroper.com" v-if="desktop">John Roper</a></p><p v-if="ifMobile() || desktop" class="mb-0"><small><a href="/open-source-licenses">Open Source Licenses</a></small></p><p v-if="!desktop && !ifMobile()" class="mb-0"><small>OSS Licences Available Online</small></p><img :src="qrcode"><br><small>{{appURL}}</small></div></div></div></div><div id="serverDisconnectedModal" data-backdrop="static" data-keyboard="false" class="modal" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body text-center dark"><h5 class="red">Tonalite Server Disconnected!</h5><p>If you have not stopped it manually, there may have been an error or you may be on the wrong IP. Try rebooting the <span v-if="desktop">server</span><span v-if="!desktop">console</span>.</p></div></div></div></div><div id="alert" class="fixed-bottom mb-5 alert alert-dismissible fade" role="alert"><div id="alertText"></div><button type="button" class="close" onclick="closeAlert()" aria-label="Close"><span aria-hidden="true">×</span></button></div></div><script src="static/js/jquery-3.3.1.min.js"></script><script src="static/js/popper.min.js"></script><script src="static/js/bootstrap.min.js"></script><script src="static/js/socket.io.js"></script><script src="static/js/mousetrap.min.js"></script><script src="static/js/bootstrap-multiselect.js"></script><script src="static/js/bootbox.min.js"></script><script src="static/js/isMobile.min.js"></script><script src="static/js/vue.js"></script><script src="static/js/script.min.js"></script><script type="text/javascript">$(document).ready(function () {
$('#groupFixtureIDs').multiselect();
});</script></body></html>