|
@@ -46,239 +46,328 @@
|
|
|
#sideMenu{
|
|
|
height: calc(100% - 85px);
|
|
|
}
|
|
|
+ .primary.button{
|
|
|
+ background-color: #4287f5 !important;
|
|
|
+ }
|
|
|
body{
|
|
|
height:100%;
|
|
|
background:rgba(247,247,247,0.95);
|
|
|
}
|
|
|
</style>
|
|
|
</head>
|
|
|
+
|
|
|
+
|
|
|
<body>
|
|
|
- <div class="ts right sidebar overlapped vertical menu">
|
|
|
- <div class="item">
|
|
|
- <div class="ts header">
|
|
|
- ArozOS IoT Hub
|
|
|
- <div class="sub header">Universal IoT Controller</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <a class="selectable item" onClick="loadDevList();hideSideMenu();">
|
|
|
- <i class="refresh icon"></i> Refresh List
|
|
|
- </a>
|
|
|
- <a class="selectable item" onClick="scanDevices();hideSideMenu();">
|
|
|
- <i class="search icon"></i> Scan Devices
|
|
|
- </a>
|
|
|
-
|
|
|
- <div class="bottom item">
|
|
|
- CopyRight ArozOS Project 2021
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <div class="ts right sidebar overlapped vertical menu">
|
|
|
+ <div class="item">
|
|
|
+ <div class="ts header">
|
|
|
+ ArozOS IoT Hub
|
|
|
+ <div class="sub header">Universal IoT Controller</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <a class="selectable item" onClick="loadDevList();hideSideMenu();">
|
|
|
+ <i class="refresh icon"></i> Refresh List
|
|
|
+ </a>
|
|
|
+ <a class="selectable item" onClick="scanDevices();hideSideMenu();">
|
|
|
+ <i class="search icon"></i> Scan Devices
|
|
|
+ </a>
|
|
|
+ <div class="bottom item">
|
|
|
+ CopyRight ArozOS Project 2021
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="pusher">
|
|
|
+ <div class="ts menu">
|
|
|
+ <a class="item noborder" href="index.html"><img class="ts ultrasmall circular image" src="img/main_icon.png"> IoT Hub</a>
|
|
|
+ <a class="right item" onClick="toggleSideMenu();"><i class="content icon"></i></a>
|
|
|
+ </div>
|
|
|
+ <div id="devList" class="ts container">
|
|
|
+ </div>
|
|
|
+ <br><br><br>
|
|
|
+ </div>
|
|
|
|
|
|
- <div class="pusher">
|
|
|
- <div class="ts menu">
|
|
|
- <a class="item noborder" href="index.html"><img class="ts ultrasmall circular image" src="img/main_icon.png"> IoT Hub</a>
|
|
|
- <a class="right item" onClick="toggleSideMenu();"><i class="content icon"></i></a>
|
|
|
- </div>
|
|
|
- <div id="devList" class="ts container">
|
|
|
+ <!-- Show more information about thsi device-->
|
|
|
+ <div id="moreInfoInterface" class="ts active dimmer" style="display:none;">
|
|
|
+ <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#moreInfoInterface").fadeOut("fast");'>
|
|
|
+ </div>
|
|
|
+ <div id="informationItnerface" class="ts segment mainUI" style="height:80%;width:95%;overflow-y:auto;">
|
|
|
+ <div class="ts header">
|
|
|
+ Device Properties
|
|
|
+ </div>
|
|
|
+ <br>
|
|
|
+ <div class="ts horizontal form">
|
|
|
+ <div class="field">
|
|
|
+ <label>Device UUID</label>
|
|
|
+ <input id="duid" type="text" readonly="true">
|
|
|
+ </div>
|
|
|
+ <div class="field">
|
|
|
+ <label>IP Address</label>
|
|
|
+ <input id="ipaddr" type="text" readonly="true">
|
|
|
+ </div>
|
|
|
+ <div class="field">
|
|
|
+ <label>Communication Port</label>
|
|
|
+ <input id="comport" type="text" readonly="true">
|
|
|
+ </div>
|
|
|
+ <div class="field">
|
|
|
+ <label>Manufacturer</label>
|
|
|
+ <input id="manufacturer" type="text" readonly="true">
|
|
|
+ </div>
|
|
|
+ <div class="field">
|
|
|
+ <label>Version</label>
|
|
|
+ <input id="version" type="text" readonly="true">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <br>
|
|
|
+ <button class="ts primary button" onClick='$("#moreInfoInterface").fadeOut("fast");'>Close</button>
|
|
|
+ <br><br>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
|
|
|
- </div>
|
|
|
- <br><br><br>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div id="moreInfoInterface" class="ts active dimmer" style="display:none;">
|
|
|
- <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#moreInfoInterface").fadeOut("fast");'>
|
|
|
-
|
|
|
- </div>
|
|
|
- <div id="informationItnerface" class="ts segment mainUI" style="height:80%;width:95%;overflow-y:auto;">
|
|
|
- <div class="ts header">
|
|
|
- Device Properties
|
|
|
- </div><br>
|
|
|
- <div class="ts horizontal form">
|
|
|
- <div class="field">
|
|
|
- <label>Device UUID</label>
|
|
|
- <input id="duid" type="text" readonly="true">
|
|
|
- </div>
|
|
|
- <div class="field">
|
|
|
- <label>Last Seen IP Address</label>
|
|
|
- <input id="lastseen" type="text" readonly="true">
|
|
|
- </div>
|
|
|
- <div class="field">
|
|
|
- <label>Device Driver Identifier</label>
|
|
|
- <input id="ddi" type="text" readonly="true">
|
|
|
- </div>
|
|
|
- <div class="field">
|
|
|
- <label>Device Information</label>
|
|
|
- <input id="dinfo" type="text" readonly="true">
|
|
|
- </div>
|
|
|
- <div class="field">
|
|
|
- <label>Driver Found</label>
|
|
|
- <input id="driverfound" type="text" readonly="true">
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <br>
|
|
|
- <button class="ts primary button" onClick='$("#moreInfoInterface").fadeOut("fast");'>Close</button>
|
|
|
- <br><br>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
-
|
|
|
- <div id="actionInterface" class="ts active dimmer" style="display:none;">
|
|
|
- <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#actionInterface").fadeOut("fast");'>
|
|
|
-
|
|
|
- </div>
|
|
|
- <div id="actionMainUI" class="ts segment mainUI" style="height:80%;width:95%;">
|
|
|
- <iframe id="controlUI" src="" width="500px" height="800px"> </iframe>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div id="nickNameSelector" class="ts active dimmer" style="display:none;">
|
|
|
- <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#nickNameSelector").fadeOut("fast");'>
|
|
|
-
|
|
|
- </div>
|
|
|
- <div id="nicknameSelectorUI" class="ts segment mainUI" style="height:80%;width:95%;overflow-y:auto;">
|
|
|
- <div class="ts header">
|
|
|
- <div class="content">
|
|
|
- Nickname Settings
|
|
|
- <div class="sub header">Please select an UUID from below for changing its nickname.</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="ts container">
|
|
|
- <div id="nicknameChangeList" class="ts list">
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div id="manualDevConfig" class="ts active dimmer" style="display:none;">
|
|
|
- <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#manualDevConfig").fadeOut("fast");'>
|
|
|
-
|
|
|
- </div>
|
|
|
- <div id="manualDevConfigUI" class="ts segment mainUI" style="height:80%;width:95%;">
|
|
|
- <div class="ts header">
|
|
|
- <div class="content">
|
|
|
- Manual Device Configuration
|
|
|
- <div class="sub header">Add devices that runs other protocol to the system</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="ts container">
|
|
|
- <button class="ts primary tiny button" onClick="addDevViaIP();"><i class="add icon"></i>Add device via IP</button>
|
|
|
- <button class="ts tiny button" onClick="openFolderForDev();"><i class="folder icon"></i>Open device folder</button>
|
|
|
- <p>Current list of Non-HDS Devices</p>
|
|
|
- <div id="customDevList" class="ts ordered list">
|
|
|
- <div class="item">Loading</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div id="loadingMask" class="ts active dimmer" style="display:none;">
|
|
|
- <div class="ts text loader">Loading</div>
|
|
|
- </div>
|
|
|
-<script>
|
|
|
-var currentlyViewingDevices = "";
|
|
|
-var uselocal = false; //Use Local as command sender or use Host as command sender
|
|
|
-var username = $("#data_session_username").text().trim();
|
|
|
-//ao_module Float Window functions
|
|
|
-ao_module_setWindowTitle("IoT Hub");
|
|
|
-ao_module_setWindowSize(465,730,true);
|
|
|
-if (!ao_module_virtualDesktop){
|
|
|
- $("body").css("background-color","white");
|
|
|
-}
|
|
|
+ <!-- Action can be done on this device -->
|
|
|
+ <div id="actioninterface" class="ts active dimmer" style="display:none;">
|
|
|
+ <div style="position:absolute;width:100%;height:100%;left:0px;top:0px;" onClick='$("#actioninterface").fadeOut("fast");'>
|
|
|
+ </div>
|
|
|
+ <div id="informationItnerface" class="ts segment mainUI" style="height:80%;width:95%;overflow-y:auto;">
|
|
|
+ <div class="ts header">
|
|
|
+ Device Actions
|
|
|
+ </div>
|
|
|
+ <br>
|
|
|
+ <div class="ts horizontal form" id="actionForm">
|
|
|
|
|
|
-//Initiate the page content
|
|
|
-loadDevList();
|
|
|
+ </div>
|
|
|
+ <br>
|
|
|
+ <button class="ts primary button" onClick='$("#actioninterface").fadeOut("fast");'>Close</button>
|
|
|
+ <br><br>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
|
|
|
-
|
|
|
-function inputbox(message, placeholder = ""){
|
|
|
- var input = prompt(message, placeholder);
|
|
|
- if (input != null) {
|
|
|
- return input;
|
|
|
- }else{
|
|
|
- return false;
|
|
|
- }
|
|
|
-}
|
|
|
+ <div id="loadingMask" class="ts active dimmer" style="display:none;">
|
|
|
+ <div class="ts text loader">Scanning in Progress</div>
|
|
|
+ </div>
|
|
|
+ <script>
|
|
|
+ var currentlyViewingDevices = "";
|
|
|
+ var uselocal = false; //Use Local as command sender or use Host as command sender
|
|
|
+ var username = $("#data_session_username").text().trim();
|
|
|
+ //ao_module Float Window functions
|
|
|
+ ao_module_setWindowTitle("IoT Hub");
|
|
|
+ ao_module_setWindowSize(465,730,true);
|
|
|
+ if (!ao_module_virtualDesktop){
|
|
|
+ $("body").css("background-color","white");
|
|
|
+ }
|
|
|
|
|
|
+ //Initiate the page content
|
|
|
+ loadDevList();
|
|
|
|
|
|
-function scanDevices(){
|
|
|
-
|
|
|
-}
|
|
|
+
|
|
|
+ function inputbox(message, placeholder = ""){
|
|
|
+ var input = prompt(message, placeholder);
|
|
|
+ if (input != null) {
|
|
|
+ return input;
|
|
|
+ }else{
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
-function hideSideMenu(){
|
|
|
- ts('.right.sidebar').sidebar('hide');
|
|
|
-}
|
|
|
+ function scanDevices(){
|
|
|
+ $("#loadingMask").show();
|
|
|
+ $.get("../../../system/iot/scan", function(data){
|
|
|
+ loadDevList();
|
|
|
+ $("#loadingMask").hide();
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
-function showMore(object){
|
|
|
- var device = $(object).parent().parent();
|
|
|
- var duid = device.attr("uuid");
|
|
|
- var lastseen = device.attr("devip");
|
|
|
- var ddi = device.attr("classtype");
|
|
|
- var dinfo = device.attr("classname");
|
|
|
- var dfound = device.attr("driverfound");
|
|
|
- if (duid === undefined){
|
|
|
- duid = "Unknown";
|
|
|
- $("#setNicknameButton").hide();
|
|
|
- }else{
|
|
|
- $("#setNicknameButton").show();
|
|
|
- }
|
|
|
- if (dfound === undefined){
|
|
|
- dfound = "Offline";
|
|
|
- }
|
|
|
- $("#duid").val(duid);
|
|
|
- $("#lastseen").val(lastseen);
|
|
|
- $("#ddi").val(ddi);
|
|
|
- $("#dinfo").val(dinfo);
|
|
|
- $("#driverfound").val(dfound);
|
|
|
- currentlyViewingDevices = duid;
|
|
|
- $("#moreInfoInterface").fadeIn('fast');
|
|
|
-}
|
|
|
|
|
|
+ function hideSideMenu(){
|
|
|
+ ts('.right.sidebar').sidebar('hide');
|
|
|
+ }
|
|
|
|
|
|
+ function showMore(object){
|
|
|
+ var device = $(object).parent().parent();
|
|
|
+ var duid = device.attr("uuid");
|
|
|
+ var lastseen = device.attr("devip");
|
|
|
+ var deviceData = device.attr("devicedata");
|
|
|
+ deviceData = JSON.parse(decodeURIComponent(deviceData))
|
|
|
+ console.log(deviceData);
|
|
|
+ $("#duid").val(duid);
|
|
|
+ $("#ipaddr").val(lastseen);
|
|
|
+ $("#comport").val(deviceData.Port);
|
|
|
+ $("#manufacturer").val(deviceData.Manufacturer);
|
|
|
+ $("#version").val(deviceData.Version);
|
|
|
+ currentlyViewingDevices = duid;
|
|
|
+ $("#moreInfoInterface").fadeIn('fast');
|
|
|
+ }
|
|
|
|
|
|
-function loadDevList(){
|
|
|
- $("#devList").html("");
|
|
|
- $.get("../../../system/iot/list", function(data){
|
|
|
- if (data.error !== undefined){
|
|
|
- alert(data.error);
|
|
|
- }else{
|
|
|
- data.forEach(device => {
|
|
|
- deviceData = encodeURIComponent(JSON.stringify(device));
|
|
|
- $("#devList").append(`<div class="ts segment HDSDev" devicedata="${deviceData}" uuid="${device.DeviceUUID}" devIp="${device.IPAddr}" port="${device.Port}" location="local">
|
|
|
- <div class="ts grid">
|
|
|
- <div class="four wide column"><img class="ts tiny devIcon image" src="img/system/loading.gif"></div>
|
|
|
- <div class="twelve wide column">
|
|
|
- <div class="ts container">
|
|
|
- <div class="ts header">
|
|
|
- <span class="devHeader">${device.Name}</span>
|
|
|
- <div class="sub devProperty header">${device.Model}</div>
|
|
|
+ function loadDevList(){
|
|
|
+ $("#devList").html("");
|
|
|
+ $.get("../../../system/iot/list", function(data){
|
|
|
+ if (data.error !== undefined){
|
|
|
+ alert(data.error);
|
|
|
+ }else{
|
|
|
+ data.forEach(device => {
|
|
|
+ deviceData = encodeURIComponent(JSON.stringify(device));
|
|
|
+ $("#devList").append(`<div class="ts segment HDSDev" devicedata="${deviceData}" uuid="${device.DeviceUUID}" devIp="${device.IPAddr}" port="${device.Port}" location="local">
|
|
|
+ <div class="ts grid">
|
|
|
+ <div class="four wide column"><img class="ts tiny devIcon image" src="img/system/loading.gif"></div>
|
|
|
+ <div class="twelve wide column">
|
|
|
+ <div class="ts container">
|
|
|
+ <div class="ts header">
|
|
|
+ <span class="devHeader">${device.Name}</span>
|
|
|
+ <div class="sub devProperty header">${device.Model}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="controlBtn infoMount">
|
|
|
- <button class="ts icon button" onClick="showMore(this);"><i class="notice icon"></i></button>
|
|
|
- <button class="ts primary icon button" onClick="action(this);"><i class="external icon"></i></button>
|
|
|
- </div>
|
|
|
- </div>`);
|
|
|
+ <div class="controlBtn infoMount">
|
|
|
+ <button class="ts icon button" onClick="showMore(this);"><i class="notice icon"></i></button>
|
|
|
+ <button class="ts primary icon button" onClick="action(this);"><i class="options icon"></i></button>
|
|
|
+ </div>
|
|
|
+ </div>`);
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
});
|
|
|
+ }
|
|
|
+
|
|
|
+ function toggleSideMenu(){
|
|
|
+ //$("#sideMenu").toggle();
|
|
|
+ ts('.right.sidebar').sidebar('toggle');
|
|
|
+ }
|
|
|
+
|
|
|
+ function executeEndpoint(object, targetValue=""){
|
|
|
+ var deviceID = $(object).attr("devid");
|
|
|
+ var epd = JSON.parse(decodeURIComponent($(object).attr("epd")));
|
|
|
+ if (epd.Type == "integer" || epd.Type == "float"){
|
|
|
+ //Check if it is in range
|
|
|
+ if (epd.Max && targetValue > epd.Max ){
|
|
|
+ //Snap to max value if over max
|
|
|
+ targetValue = epd.Max;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (epd.Min && targetValue < epd.Min){
|
|
|
+ //Snap to min value if under min
|
|
|
+ targetValue = epd.Min;
|
|
|
+ }
|
|
|
+ }else if (epd.Type == "string"){
|
|
|
+ //Check if regex
|
|
|
+ if (epd.Regex && targetValue.match(stringToRegex(epd.Regex)) == null){
|
|
|
+ //Invalid string input. Reject operation
|
|
|
+ alert("Input string does not match request regex structure: " + epd.Regex);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log(deviceID, epd, targetValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ const stringToRegex = str => {
|
|
|
+ // Main regex
|
|
|
+ const main = str.match(/\/(.+)\/.*/)[1]
|
|
|
+
|
|
|
+ // Regex options
|
|
|
+ const options = str.match(/\/.+\/(.*)/)[1]
|
|
|
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
+ // Compiled regex
|
|
|
+ return new RegExp(main, options)
|
|
|
+ }
|
|
|
+
|
|
|
+ function action(object){
|
|
|
+ //Clear the action form
|
|
|
+ $("#actionForm").html("");
|
|
|
+
|
|
|
+ //Generate the list of endpoints from the device data
|
|
|
+ var device = $(object).parent().parent();
|
|
|
+ var deviceData = device.attr("devicedata");
|
|
|
+ deviceData = JSON.parse(decodeURIComponent(deviceData));
|
|
|
+
|
|
|
+ var epts = deviceData.ControlEndpoints;
|
|
|
+ if (epts.length == 0){
|
|
|
+ //This device has no control endpoints
|
|
|
+
|
|
|
+ }else{
|
|
|
+ epts.forEach(ept => {
|
|
|
+ //Check which type of ept is this. Accept {string, integer, float, bool, none}
|
|
|
+ var encodedEptData = encodeURIComponent(JSON.stringify(ept));
|
|
|
+ var deviceID = deviceData.DeviceUUID;
|
|
|
+ var name = ept.Name;
|
|
|
+ if (ept.Type == "string"){
|
|
|
+ $("#actionForm").append(`<div devid="${deviceID}" epd="${encodedEptData}" class="field">
|
|
|
+ <label>${ept.Desc}</label>
|
|
|
+ <div class="ts action input">
|
|
|
+ <input type="text" placeholder="${name}">
|
|
|
+ <button class="ts primary icon button" title="Send" onclick="executeEndpoint(this.parentNode.parentNode, this.parentNode.parentNode.getElementsByTagName('input')[0].value)"><i class="send icon"></i></button>
|
|
|
+ </div>
|
|
|
+ </div>`);
|
|
|
+ }else if (ept.Type == "integer"){
|
|
|
+ var min = "";
|
|
|
+ var max = "";
|
|
|
+ if (ept.Min != undefined){
|
|
|
+ min = ept.Min;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ept.Max != undefined){
|
|
|
+ max = ept.Max;
|
|
|
+ }
|
|
|
+
|
|
|
+ $("#actionForm").append(`<div devid="${deviceID}" epd="${encodedEptData}" class="field">
|
|
|
+ <label>${ept.Desc}</label>
|
|
|
+ <div class="ts action input">
|
|
|
+ <input type="number" min="${min}" max="${max}" placeholder="${name}">
|
|
|
+ <button class="ts primary icon button" title="Send" onclick="executeEndpoint(this.parentNode.parentNode, this.parentNode.parentNode.getElementsByTagName('input')[0].value)"><i class="send icon"></i></button>
|
|
|
+ </div>
|
|
|
+ </div>`);
|
|
|
+ }else if (ept.Type == "float"){
|
|
|
+ var min = "";
|
|
|
+ var max = "";
|
|
|
+ var step = "0.1";
|
|
|
+ if (ept.Min != undefined){
|
|
|
+ min = ept.Min;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ept.Max != undefined){
|
|
|
+ max = ept.Max;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ept.Steps != undefined){
|
|
|
+ step = ept.Steps;
|
|
|
+ }
|
|
|
+
|
|
|
+ $("#actionForm").append(`<div name="${ept.Name}" devid="${deviceID}" epd="${encodedEptData}" class="field">
|
|
|
+ <label>${ept.Desc}</label>
|
|
|
+ <div class="ts action input">
|
|
|
+ <input type="number" min="${min}" max="${max}" step="${step}" placeholder="${name}">
|
|
|
+ <button class="ts primary icon button" onclick="executeEndpoint(this.parentNode.parentNode, this.parentNode.parentNode.getElementsByTagName('input')[0].value)" title="Send"><i class="send icon"></i></button>
|
|
|
+ </div>
|
|
|
+ </div>`);
|
|
|
+ }else if (ept.Type == "bool"){
|
|
|
+ $("#actionForm").append(`<div name="${ept.Name}" devid="${deviceID}" epd="${encodedEptData}" class="field">
|
|
|
+ <div class="ts toggle checkbox">
|
|
|
+ <input type="checkbox" id="${encodeURIComponent(ept.Name)}" onchange="executeEndpoint(this.parentNode.parentNode, this.value);">
|
|
|
+ <label for="${encodeURIComponent(ept.Name)}">${ept.Name}</label>
|
|
|
+ </div></div>`);
|
|
|
+
|
|
|
+ }else if (ept.Type == "none"){
|
|
|
+ //No action. (aka just a GET request endpoint)
|
|
|
+ $("#actionForm").append(`<div devid="${deviceID}" epd="${encodedEptData}" class="field">
|
|
|
+ <button class="ts info fluid button" title="${ept.Desc}" onclick="executeEndpoint(this.parentNode);">${name}</button>
|
|
|
+ </div>`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ console.log(deviceData);
|
|
|
|
|
|
-function toggleSideMenu(){
|
|
|
- //$("#sideMenu").toggle();
|
|
|
- ts('.right.sidebar').sidebar('toggle');
|
|
|
-}
|
|
|
+ $("#actioninterface").fadeIn('fast');
|
|
|
+ }
|
|
|
|
|
|
-function updateIframeSize(){
|
|
|
- $("#controlUI").attr("width",$("#actionMainUI").width());
|
|
|
- $("#controlUI").attr("height",$("#actionMainUI").height());
|
|
|
- $("#controlUI").css("width",$("#actionMainUI").width());
|
|
|
- $("#controlUI").css("height",$("#actionMainUI").height());
|
|
|
-}
|
|
|
+ function updateIframeSize(){
|
|
|
+ $("#controlUI").attr("width",$("#actionMainUI").width());
|
|
|
+ $("#controlUI").attr("height",$("#actionMainUI").height());
|
|
|
+ $("#controlUI").css("width",$("#actionMainUI").width());
|
|
|
+ $("#controlUI").css("height",$("#actionMainUI").height());
|
|
|
+ }
|
|
|
|
|
|
-$(window).on("resize",function(){
|
|
|
- updateIframeSize();
|
|
|
-});
|
|
|
-</script>
|
|
|
+ $(window).on("resize",function(){
|
|
|
+ updateIframeSize();
|
|
|
+ });
|
|
|
+ </script>
|
|
|
</body>
|
|
|
</html>
|