UNPKG

iobroker.ham-wemo

Version:

Wemo adapter for iobroker based on homebridge

199 lines (177 loc) 7.61 kB
<html> <head> <!-- these 4 files always have to be included --> <link rel="stylesheet" type="text/css" href="../../lib/css/materialize.css"> <link rel="stylesheet" type="text/css" href="../../css/adapter.css"/> <script type="text/javascript" src="../../lib/js/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="../../socket.io/socket.io.js"></script> <script type="text/javascript" src="../../lib/js/ace-1.2.0/ace.js"></script> <!-- these files always have to be included --> <script type="text/javascript" src="../../js/translate.js"></script> <script type="text/javascript" src="../../lib/js/materialize.js"></script> <script type="text/javascript" src="../../js/adapter-settings.js"></script> <script type="text/javascript" src="words.js"></script> <style> .m .col .select-wrapper+label { top: -26px !important; } .m span { font-size: 12px; } .adapter-container>.row { height: 100%; } </style> <!-- you have to define 2 functions in the global scope: --> <script type="text/javascript"> var config; // the function loadSettings has to exist ... function load(settings, onChange) { if (!settings) return; config = settings; settings = config.wrapperConfig.platforms[0]; settings.port = settings.wemoClient.port; settings.listen_interface = settings.wemoClient.listen_interface; // example: select elements with id=key and class=value and insert value $('.value').each(function () { var $key = $(this); var id = $key.attr('id'); if ($key.attr('type') === 'checkbox') { // do not call onChange direct, because onChange could expect some arguments $key.prop('checked', settings[id]).on('change', function() { onChange(); }); } else { // do not call onChange direct, because onChange could expect some arguments $key.val(settings[id]).on('change', function() { onChange(); }).keyup(function() { onChange(); }); } }); if (false && typeof getInterfaces === 'function') { getInterfaces(true, function (err, ints) { if (ints) { var text = '<select id="listen_interface">'; for (var i = 0; i < ints.length; i++) { text += '<option value="' + ints[i] + '">' + ints[i] + '</option>'; } text += '</select>'; $('#listen_interface').remove();//.select(); $('.listen_interface_div').prepend(text); if (ints.indexOf(settings.listen_interface) === -1) { settings.listen_interface = ints[0]; onChange(); } $('#listen_interface').on('change', function() { onChange(); }).val(settings.listen_interface).select(); M.updateTextFields(); } else { window.alert(err || 'Unknown error'); } }); } list2chips('.manual-devices', settings.manualDevices || '', onChange); list2chips('.ignored-devices', settings.ignoredDevices || '', onChange); onChange(false); M.updateTextFields(); // function Materialize.updateTextFields(); to reinitialize all the Materialize labels on the page if you are dynamically adding inputs. } function list2chips(selector, chips, onChange) { var data = []; for (var c = 0; c < chips.length; c++) { if (chips[c] && chips[c].trim()) { data.push({tag: chips[c].trim()}); } } $(selector).chips({ data: data, placeholder: _('Module names'), secondaryPlaceholder: _('Add module'), onChipAdd: onChange, onChipDelete: onChange }); } function chips2list(selector) { var data = $(selector).chips('getData'); var text = []; for (var lib = 0; lib < data.length; lib++) { text.push(data[lib].tag); } return text; } // ... and the function save has to exist. // you have to make sure the callback is called with the settings object as first param! function save(callback) { // example: select elements with class=value and build settings object var obj = config.wrapperConfig.platforms[0]; $('.value').each(function () { var $this = $(this); if ($this.attr('type') === 'checkbox') { obj[$this.attr('id')] = $this.prop('checked'); } else { obj[$this.attr('id')] = $this.val(); } }); obj.wemoClient.port = obj.port; delete obj.port; obj.wemoClient.listen_interface = obj.listen_interface; delete obj.listen_interface; obj.manualDevices = chips2list('.manual-devices'); obj.ignoredDevices = chips2list('.ignored-devices'); callback(config); } </script> </head> <body> <!-- you have to put your config page in a div with id adapter-container --> <div class="m adapter-container"> <div class="row"> <div class="col s12"> <div class="row"> <div class="col s6 m4 l2"> <img src="ham-wemo.png" class="logo"> </div> </div> <div class="row"> <div class="input-field col s12 m6 l4 xl3"> <input id="noMotionTimer" class="value" type="number" min="0"/> <label for="noMotionTimer" class="translate">noMotionTimer</label> </div> <div class="input-field col s12 m6 l4 xl3"> <input id="discovery" class="value" type="checkbox"/> <span for="discovery" class="translate">discovery</span> </div> </div> <div class="row"> <div class="input-field col s12 m6 l4 xl3"> <input id="port" class="value" type="number" min="1" max="65565"/> <label for="port" class="translate">wemoClient.port</label> </div> <div class="input-field col s12 m6 l4 xl3"> </div> </div> <div class="row"> <div class="input-field col s12 m6 l4 xl3 listen_interface_div"> <input id="listen_interface" class="value" type="text"/> <label for="listen_interface" class="translate">listen_interface</label> </div> </div> <div class="row local"> <div class="col s12"> <label class="translate">ignoredDevices</label> <div class="chips ignored-devices"></div> </div> </div> <div class="row local"> <div class="col s12"> <label class="translate">manualDevices</label> <div class="chips manual-devices"></div> </div> </div> </div> </div> </div> </body> </html>