Modules/devices/devices widgets js php
Материал из MajorDoMo инфо
ᐂ В корневой раздел ᐃ В директорию расположения файла
<?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() { } } }());