|
15 | 15 | <script src="js/bootstrap.min.js"></script>
|
16 | 16 | <script src="js/bootbox.min.js"></script>
|
17 | 17 | <script src="js/jquery-ui.min.js"></script>
|
| 18 | + |
| 19 | + <!-- Highcharts is not needed here but domoticz.js depends on it --> |
| 20 | + <script type="text/javascript" charset="utf-8" src="js/highcharts.js"></script> |
| 21 | + |
18 | 22 | <script type="text/javascript" charset="utf-8" src="js/domoticz.js"></script>
|
19 | 23 | <script src="js/d3.min.js"></script>
|
20 | 24 | <script type="text/javascript" charset="utf-8" src="js/jquery.dataTables.min.js"></script>
|
21 | 25 |
|
22 | 26 | <script>
|
23 | 27 |
|
24 | 28 | function getParameter(paramName) {
|
25 |
| - var searchString = window.location.search.substring(1),i, val, params = searchString.split("&"); |
| 29 | + var searchString = window.location.search.substring(1),i, val, params = searchString.split('&'); |
26 | 30 | for (i=0;i<params.length;i++) {
|
27 |
| - val = params[i].split("="); |
| 31 | + val = params[i].split('='); |
28 | 32 | if (val[0] == paramName) {
|
29 | 33 | return unescape(val[1]);
|
30 | 34 | }
|
31 | 35 | }
|
32 | 36 | return null;
|
33 | 37 | }
|
| 38 | + |
| 39 | + |
| 40 | + function getNodeId(node){ |
| 41 | + return ( |
| 42 | + addLeadingZeros(node.nodeID, 3) |
| 43 | + + ' (0x' + addLeadingZeros(node.nodeID.toString(16), 2) + ')' |
| 44 | + ); |
| 45 | + } |
| 46 | + |
| 47 | + function getNodeName(node){ |
| 48 | + return node ? node.nodeName : ''; |
| 49 | + } |
| 50 | + |
| 51 | + function getGroupName(group){ |
| 52 | + return group ? group.groupName : ''; |
| 53 | + } |
34 | 54 |
|
35 |
| - function removeNodeFromGroup(node,group,removenode) { |
36 |
| - var hwid=getParameter("hwid"); |
37 |
| - bootbox.confirm($.t("Are you sure you want to remove this node from the group?"), function(result) { |
| 55 | + function removeNodeFromGroup(event) { |
| 56 | + var node = event.data.node; |
| 57 | + var group = event.data.group; |
| 58 | + var removeNode = event.data.removeNode; |
| 59 | + var removeNodeId = event.data.removeNodeId; |
| 60 | + var hwid=getParameter('hwid'); |
| 61 | + bootbox.confirm($.t( |
| 62 | + 'Are you sure you want to remove this node?<br>' |
| 63 | + + 'Node: ' + getNodeName(removeNode) |
| 64 | + + ' (' + removeNodeId |
| 65 | + + ')<br>From group: ' + getGroupName(group) |
| 66 | + + '<br>On node ' + getNodeName(node)), function(result) { |
38 | 67 | if (result==true) {
|
39 | 68 | $.ajax({
|
40 |
| - url: "json.htm?type=command¶m=zwaveremovegroupnode&idx=" + hwid + "&node="+node+"&group="+group+"&removenode="+removenode, |
| 69 | + url: "json.htm?type=command¶m=zwaveremovegroupnode&idx=" + hwid + "&node=" + node.nodeID + "&group=" + group.id + "&removeNode=" + removeNode, |
41 | 70 | async: false,
|
42 | 71 | dataType: 'json',
|
43 | 72 | success: function(data) {
|
|
49 | 78 | }
|
50 | 79 | });
|
51 | 80 | }
|
52 |
| - function addNodeToGroup(node,group) { |
53 |
| - var hwid=getParameter("hwid"); |
| 81 | + function addNodeToGroup(event) { |
| 82 | + var node = event.data.node; |
| 83 | + var group = event.data.group; |
| 84 | + var hwid=getParameter('hwid'); |
54 | 85 | bootbox.dialog({
|
55 |
| - message: $.t("Please enter the node to add to this group:")+"<input type='text' id='add_node' data-toggle='tooltip' title='NodeId or NodeId.Instance'></input>", |
56 |
| - title: "Add node", |
| 86 | + message: $.t("Please enter the node to add to this group:")+"<input type='text' id='add_node' data-toggle='tooltip' title='NodeId or NodeId.Instance'></input><br>" + group.groupName, |
| 87 | + title: 'Add node to ' + getNodeName(node), |
57 | 88 | buttons: {
|
58 | 89 | main: {
|
59 | 90 | label: $.t("Save"),
|
60 | 91 | className: "btn-primary",
|
61 | 92 | callback: function() {
|
62 | 93 | var addnode = $("#add_node").val();
|
63 | 94 | $.ajax({
|
64 |
| - url: "json.htm?type=command¶m=zwaveaddgroupnode&idx=" + hwid + "&node="+node+"&group="+group+"&addnode="+addnode, |
| 95 | + url: "json.htm?type=command¶m=zwaveaddgroupnode&idx=" + hwid + "&node=" + node.nodeID + "&group=" + group.id + "&addnode=" + addnode, |
65 | 96 | async: false,
|
66 | 97 | dataType: 'json',
|
67 | 98 | success: redrawGroupTable()
|
|
95 | 126 | if (typeof data != 'undefined') {
|
96 | 127 | if (data.status=="OK") {
|
97 | 128 | if (typeof data.result != 'undefined') {
|
98 |
| - grouptable = $('#grouptable'); |
99 |
| - var maxgroups = data.result.MaxNoOfGroups; |
100 |
| - thead = $('<thead></thead>'); |
101 |
| - trow = $('<tr></tr>'); |
| 129 | + grouptable = $('#grouptable'); |
| 130 | + var maxgroups = data.result.MaxNoOfGroups; |
| 131 | + var thead = $('<thead></thead>'); |
| 132 | + var trow = $('<tr></tr>'); |
102 | 133 |
|
103 |
| - $('<th></th>').text($.t("Node")).appendTo(trow); |
104 |
| - $('<th></th>').text($.t("Name")).appendTo(trow); |
| 134 | + $('<th></th>').text($.t("Node")).appendTo(trow); |
| 135 | + $('<th></th>').text($.t("Name")).appendTo(trow); |
105 | 136 | for (var i = 0; i < maxgroups; i++) {
|
106 |
| - $('<th></th>').text($.t("Group")+" " +(i+1)).appendTo(trow); |
| 137 | + $('<th></th>').text($.t("Group") + " " + (i + 1)).appendTo(trow); |
107 | 138 | }
|
108 | 139 | trow.appendTo(thead);
|
109 | 140 | thead.appendTo(grouptable);
|
110 | 141 | tbody = $('<tbody></tbody>');
|
111 |
| - |
112 |
| - jsonnodes = data.result.nodes; |
113 |
| - $.each(jsonnodes, function(i, item) { |
| 142 | + |
| 143 | + var jsonnodes = data.result.nodes; |
| 144 | + var nodes = {}; |
| 145 | + var i = jsonnodes.length; |
| 146 | + while (i--) { |
| 147 | + var node = jsonnodes[i]; |
| 148 | + nodes[node.nodeID] = node; |
| 149 | + } |
| 150 | + $.each(jsonnodes, function(i, node) { |
114 | 151 | var groupsDone = 0;
|
115 |
| - noderow = $('<tr></tr>'); |
116 |
| - var nodeStr = addLeadingZeros(item.nodeID,3) + " (0x" + addLeadingZeros(item.nodeID.toString(16),2) + ")"; |
117 |
| - $('<td></td>').text(nodeStr).appendTo(noderow); |
118 |
| - $('<td></td>').text(item.nodeName).appendTo(noderow); |
119 |
| - noGroups = item.groupCount; |
| 152 | + noderow = $('<tr>'); |
| 153 | + $('<td>').text(getNodeId(node)).appendTo(noderow); |
| 154 | + $('<td>').text(node.nodeName).appendTo(noderow); |
| 155 | + noGroups = node.groupCount; |
120 | 156 | if (noGroups > 0) {
|
121 |
| - groupnodes = item.groups; |
| 157 | + groupnodes = node.groups; |
122 | 158 | $.each(groupnodes, function(g, group) {
|
123 |
| - td = $('<td data-toggle="tooltip" title="' + group.groupName + '"></td>'); |
| 159 | + td = $('<td>').data('toggle', 'tooltip').attr('title', getGroupName(group)); |
| 160 | + |
| 161 | + function createButton(text){ |
| 162 | + var button = $('<span>'); |
| 163 | + button.text(text); |
| 164 | + button.addClass('label label-info lcursor'); |
| 165 | + return button; |
| 166 | + } |
| 167 | + |
124 | 168 | $.each(group.nodes.split(','), function(){
|
125 | 169 | if (this!="") {
|
126 |
| - button=$('<span class="label label-info lcursor" onclick="removeNodeFromGroup('+item.nodeID+','+group.id+','+this+');">'+this+'</span>'); |
| 170 | + var button = createButton(this); |
| 171 | + var removeNodeId = this * 1; |
| 172 | + var removeNode = nodes[Math.round(removeNodeId)]; |
| 173 | + button.click({node: node, group: group, removeNode: removeNode, removeNodeId: this}, removeNodeFromGroup); |
| 174 | + button.attr('title', getNodeName(node) + ' on ' + getGroupName(group)); |
127 | 175 | button.appendTo(td);
|
128 | 176 | }
|
129 | 177 | });
|
130 |
| - button=$('<span class="label label-info lcursor" onclick="addNodeToGroup('+item.nodeID+','+group.id+');">+</span>'); |
| 178 | + var button = createButton('+'); |
| 179 | + button.click({node: node, group: group}, addNodeToGroup); |
131 | 180 | button.appendTo(td);
|
132 | 181 | td.appendTo(noderow);
|
133 | 182 | groupsDone++;
|
134 |
| - |
135 | 183 | });
|
136 | 184 | }
|
137 | 185 | if (groupsDone<maxgroups) {
|
|
161 | 209 | "aLengthMenu": [[5,10], [5,10]],
|
162 | 210 | "iDisplayLength": 10,
|
163 | 211 | "sPaginationType": "full_numbers",
|
| 212 | + paging: false, |
164 | 213 | language: $.DataTableLanguage
|
165 | 214 | });
|
166 | 215 | }
|
|
172 | 221 |
|
173 | 222 | function drawChord() {
|
174 | 223 |
|
175 |
| - var width = 430; //window.innerWidth*0.9; |
176 |
| - var height = 430; //window.innerHeight*0.8; |
| 224 | + var width = window.innerWidth*0.39; |
| 225 | + var height = window.innerHeight*0.8; |
177 | 226 | innerRadius = Math.min(width, height) * .40,
|
178 | 227 | outerRadius = innerRadius * 1.1;
|
179 | 228 | var nodeslist=[];
|
|
366 | 415 | clear: both;
|
367 | 416 | }
|
368 | 417 | div.left {
|
369 |
| - width: 50%; |
| 418 | + width: 40%; |
370 | 419 | position: relative;
|
371 | 420 | float: left;
|
372 |
| - height: 450px; |
373 | 421 | }
|
374 | 422 | div.right {
|
375 |
| - width: 49%; |
376 |
| - height: 450px; |
| 423 | + width: 60%; |
377 | 424 | position: relative;
|
378 | 425 | float: right;
|
379 | 426 | overflow: auto;
|
|
0 commit comments