Modules/devices/devices widgets js php: различия между версиями
Материал из MajorDoMo инфо
Elmax (обсуждение | вклад) (Заготовка) |
Elmax (обсуждение | вклад) (+ файл devices_widgets.js.php) |
||
| Строка 4: | Строка 4: | ||
<pre> | <pre> | ||
<?php | |||
header("Content-type:application/javascript"); | |||
chdir(dirname(__FILE__) . '/../../'); | |||
include_once("./config.php"); | |||
include_once("./lib/loader.php"); | |||
include_once("./load_settings.php"); | |||
?> | |||
var activeDevices = Array(); | |||
var devicesWidgetWSTimer; | |||
var devicesWidgetWSUpdatedTimer; | |||
$.subscribe('wsData', function (_, response) { | |||
if (response.action=='subscribed') { | |||
//console.log('Subscription to devices confirmed.'); | |||
} | |||
if (response.action=='devices') { | |||
var obj=jQuery.parseJSON(response.data); | |||
if (typeof obj.DATA !='object') return false; | |||
var objCnt = obj.DATA.length; | |||
if (objCnt) { | |||
for(var i=0;i<objCnt;i++) { | |||
var device_id=obj.DATA[i].DEVICE_ID; | |||
var html=obj.DATA[i].DATA; | |||
$('#device'+device_id).html(html); | |||
} | |||
} | |||
} | |||
}); | |||
function refreshDevicesHTTP() { | |||
var baseURL = ROOTHTML + "ajax/devices.html?op=get_device&id="; | |||
activeDevices.forEach(function(item, index) { | |||
var url = baseURL + item; | |||
$.ajax({ | |||
url: url | |||
}).done(function(data) { | |||
var obj=jQuery.parseJSON(data); | |||
$('#device'+item).html(obj.HTML); | |||
}); | |||
}); | |||
} | |||
function refreshWSSubscription() { | |||
clearTimeout(devicesWidgetWSTimer); | |||
//console.log('refresh subscription'); | |||
if (startedWebSockets) { | |||
//for(var i=0;i<activeDevices.length;i++) { | |||
console.log('subscribing ws to device '+activeDevices.join()); | |||
var payload; | |||
payload = new Object(); | |||
payload.action = 'Subscribe'; | |||
payload.data = new Object(); | |||
payload.data.TYPE='devices'; | |||
payload.data.DEVICE_ID=activeDevices.join(); | |||
wsSocket.send(JSON.stringify(payload)); | |||
//} | |||
devicesWidgetWSTimer=setTimeout('refreshWSSubscription();',10*60000); | |||
} else { | |||
refreshDevicesHTTP(); | |||
devicesWidgetWSTimer=setTimeout('refreshWSSubscription();',5000); | |||
} | |||
} | |||
function activeDevicesUpdated() { | |||
clearTimeout(devicesWidgetWSUpdatedTimer); | |||
devicesWidgetWSUpdatedTimer=setTimeout('refreshWSSubscription();',2000); | |||
} | |||
function requestDeviceHTML(device_id,widgetElement) { | |||
//alert('requested html for '+device_id+' '); | |||
if (activeDevices.indexOf(device_id)<0) { | |||
activeDevices.push(device_id); | |||
activeDevicesUpdated(); | |||
} | |||
var url='<?php echo ROOTHTML;?>ajax/devices.html?op=get_device&id='+device_id; | |||
$.ajax({ | |||
url: url | |||
}).done(function(data) { | |||
var res=JSON.parse(data); | |||
if (typeof res.HTML !== 'undefined') { | |||
var myTextElement = $("<div id='device"+device_id+"'>"+res.HTML+"</div>"); | |||
$(widgetElement).html(myTextElement); | |||
} | |||
/* | |||
if (typeof res.HEIGHT !== 'undefined') { | |||
newSettings.size=res.HEIGHT; | |||
alert(newSettings); | |||
} | |||
*/ | |||
}); | |||
} | |||
(function() | |||
{ | |||
freeboard.loadWidgetPlugin({ | |||
// Same stuff here as with datasource plugin. | |||
"type_name" : "devices_plugin", | |||
"display_name": LANG_DEVICE, | |||
"description" : "MajorDoMo "+LANG_DEVICES, | |||
"fill_size" : false, | |||
"settings" : [ | |||
{ | |||
"name" : "device_id", | |||
"display_name": LANG_DEVICE, | |||
"required" : true, | |||
"type" : "option", | |||
<?php | |||
$scripts=SQLSelect("SELECT ID,TITLE FROM devices ORDER BY TITLE"); | |||
?> | |||
"options" : [ | |||
<?php | |||
foreach($scripts as $k=>$v) { | |||
echo '{'; | |||
echo '"name" : "'.($v['TITLE']).'",'."\n"; | |||
echo '"value" : "'.$v['ID'].'"'; | |||
echo '},'; | |||
} | |||
?> | |||
] | |||
}, | |||
{ | |||
"name" : "size", | |||
"display_name": LANG_SIZE, | |||
"type" : "option", | |||
"options" : [ | |||
{"name" : "1","value": "1"}, | |||
{"name" : "2","value": "2"}, | |||
{"name" : "3","value": "3"}, | |||
{"name" : "4","value": "4"}, | |||
{"name" : "5","value": "5"}, | |||
{"name" : "6","value": "6"}, | |||
{"name" : "7","value": "7"}, | |||
{"name" : "8","value": "8"} | |||
] | |||
} | |||
], | |||
// Same as with datasource plugin, but there is no updateCallback parameter in this case. | |||
newInstance : function(settings, newInstanceCallback) | |||
{ | |||
newInstanceCallback(new myDevicesPlugin(settings)); | |||
} | |||
}); | |||
var myDevicesPlugin = function(settings) | |||
{ | |||
var self = this; | |||
var currentSettings = settings; | |||
var widgetElement; | |||
function updateDeviceHTML() | |||
{ | |||
if(widgetElement) | |||
{ | |||
requestDeviceHTML(currentSettings.device_id,widgetElement); | |||
} | |||
} | |||
self.render = function(element) | |||
{ | |||
widgetElement = element; | |||
updateDeviceHTML(); | |||
} | |||
self.getHeight = function() | |||
{ | |||
if (typeof currentSettings.size == 'undefined') currentSettings.size=1; | |||
return parseInt(currentSettings.size); | |||
} | |||
self.onSettingsChanged = function(newSettings) | |||
{ | |||
currentSettings = newSettings; | |||
updateDeviceHTML(); | |||
} | |||
self.onCalculatedValueChanged = function(settingName, newValue) | |||
{ | |||
updateDeviceHTML(); | |||
} | |||
self.onDispose = function() | |||
{ | |||
} | |||
} | |||
}()); | |||
</pre> | </pre> | ||
Текущая версия от 14:05, 6 апреля 2024
ᐂ В корневой раздел ᐃ В директорию расположения файла
<?php
header("Content-type:application/javascript");
chdir(dirname(__FILE__) . '/../../');
include_once("./config.php");
include_once("./lib/loader.php");
include_once("./load_settings.php");
?>
var activeDevices = Array();
var devicesWidgetWSTimer;
var devicesWidgetWSUpdatedTimer;
$.subscribe('wsData', function (_, response) {
if (response.action=='subscribed') {
//console.log('Subscription to devices confirmed.');
}
if (response.action=='devices') {
var obj=jQuery.parseJSON(response.data);
if (typeof obj.DATA !='object') return false;
var objCnt = obj.DATA.length;
if (objCnt) {
for(var i=0;i<objCnt;i++) {
var device_id=obj.DATA[i].DEVICE_ID;
var html=obj.DATA[i].DATA;
$('#device'+device_id).html(html);
}
}
}
});
function refreshDevicesHTTP() {
var baseURL = ROOTHTML + "ajax/devices.html?op=get_device&id=";
activeDevices.forEach(function(item, index) {
var url = baseURL + item;
$.ajax({
url: url
}).done(function(data) {
var obj=jQuery.parseJSON(data);
$('#device'+item).html(obj.HTML);
});
});
}
function refreshWSSubscription() {
clearTimeout(devicesWidgetWSTimer);
//console.log('refresh subscription');
if (startedWebSockets) {
//for(var i=0;i<activeDevices.length;i++) {
console.log('subscribing ws to device '+activeDevices.join());
var payload;
payload = new Object();
payload.action = 'Subscribe';
payload.data = new Object();
payload.data.TYPE='devices';
payload.data.DEVICE_ID=activeDevices.join();
wsSocket.send(JSON.stringify(payload));
//}
devicesWidgetWSTimer=setTimeout('refreshWSSubscription();',10*60000);
} else {
refreshDevicesHTTP();
devicesWidgetWSTimer=setTimeout('refreshWSSubscription();',5000);
}
}
function activeDevicesUpdated() {
clearTimeout(devicesWidgetWSUpdatedTimer);
devicesWidgetWSUpdatedTimer=setTimeout('refreshWSSubscription();',2000);
}
function requestDeviceHTML(device_id,widgetElement) {
//alert('requested html for '+device_id+' ');
if (activeDevices.indexOf(device_id)<0) {
activeDevices.push(device_id);
activeDevicesUpdated();
}
var url='<?php echo ROOTHTML;?>ajax/devices.html?op=get_device&id='+device_id;
$.ajax({
url: url
}).done(function(data) {
var res=JSON.parse(data);
if (typeof res.HTML !== 'undefined') {
var myTextElement = $("<div id='device"+device_id+"'>"+res.HTML+"</div>");
$(widgetElement).html(myTextElement);
}
/*
if (typeof res.HEIGHT !== 'undefined') {
newSettings.size=res.HEIGHT;
alert(newSettings);
}
*/
});
}
(function()
{
freeboard.loadWidgetPlugin({
// Same stuff here as with datasource plugin.
"type_name" : "devices_plugin",
"display_name": LANG_DEVICE,
"description" : "MajorDoMo "+LANG_DEVICES,
"fill_size" : false,
"settings" : [
{
"name" : "device_id",
"display_name": LANG_DEVICE,
"required" : true,
"type" : "option",
<?php
$scripts=SQLSelect("SELECT ID,TITLE FROM devices ORDER BY TITLE");
?>
"options" : [
<?php
foreach($scripts as $k=>$v) {
echo '{';
echo '"name" : "'.($v['TITLE']).'",'."\n";
echo '"value" : "'.$v['ID'].'"';
echo '},';
}
?>
]
},
{
"name" : "size",
"display_name": LANG_SIZE,
"type" : "option",
"options" : [
{"name" : "1","value": "1"},
{"name" : "2","value": "2"},
{"name" : "3","value": "3"},
{"name" : "4","value": "4"},
{"name" : "5","value": "5"},
{"name" : "6","value": "6"},
{"name" : "7","value": "7"},
{"name" : "8","value": "8"}
]
}
],
// Same as with datasource plugin, but there is no updateCallback parameter in this case.
newInstance : function(settings, newInstanceCallback)
{
newInstanceCallback(new myDevicesPlugin(settings));
}
});
var myDevicesPlugin = function(settings)
{
var self = this;
var currentSettings = settings;
var widgetElement;
function updateDeviceHTML()
{
if(widgetElement)
{
requestDeviceHTML(currentSettings.device_id,widgetElement);
}
}
self.render = function(element)
{
widgetElement = element;
updateDeviceHTML();
}
self.getHeight = function()
{
if (typeof currentSettings.size == 'undefined') currentSettings.size=1;
return parseInt(currentSettings.size);
}
self.onSettingsChanged = function(newSettings)
{
currentSettings = newSettings;
updateDeviceHTML();
}
self.onCalculatedValueChanged = function(settingName, newValue)
{
updateDeviceHTML();
}
self.onDispose = function()
{
}
}
}());