UNPKG

iobroker.nuki-extended

Version:
136 lines (122 loc) 3.41 kB
/** * Admin functions. * * @author Zefau <zefau@mailbox.org> * @version 0.4.1 * @date 2019-09-17 */ /** * Status Message * * @param message * @param severity * @param id */ function _log(message, severity, id) { var log = $(id || '#log').html(); $(id || '#log').append(`<li class="log ${severity || 'info'} translate">${message}</li>`); console.log(`${severity !== undefined ? severity.toUpperCase() : 'INFO'}: ${message}`); } /** * Encode a string. * * @param {string} key Key used for encoding * @param {string} string String to encode * @returns {string} Encoded String */ function encode(key, string) { let result = ''; for (let i = 0; i < string.length; i++) { result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ string.charCodeAt(i)); } return result; } /** * Decode a string. * * @param {string} key Key used for decoding * @param {string} string String to decode * @returns {string} Decoded String */ function decode(key, string) { return encode(key, string); } /** * Load settings. * * @param settings * @param onChange */ function _load(settings, onChange) { if (!settings) { return; } $('.value').each(function () { var $this = $(this); var id = $this.attr('id'); // load certificates if ($this.attr('data-select') === 'certificate') { fillSelectCertificates(`#${id}`, $this.attr('data-type') || '', settings[id]); } // load settings if ($this.attr('type') === 'checkbox') { $this .prop('checked', settings[id]) .trigger('change') .on('change', function () { onChange(); }); } else if ($this.attr('type') === 'radio') { $this .prop('checked', settings[$this.attr('name')] == $this.val()) .trigger('change') .on('change', function () { onChange(); }); } else { $this .val(settings[id]) .on('change', function () { onChange(); }) .on('keyup', function () { onChange(); }); } }); onChange(false); M.updateTextFields(); } /** * Save settings. * * @param callback * @param obj */ function _save(callback, obj) { obj = obj !== undefined ? obj : {}; $('.value').each(function () { var $this = $(this); var id = $this.attr('id'); // save checkboxes if ($this.attr('type') === 'checkbox') { obj[id] = $this.prop('checked'); } else if ($this.attr('type') === 'radio' && $this.prop('checked')) { obj[$this.attr('name')] = $this.val(); } // save certificates else if ($this.attr('data-select') === 'certificate') { socket.emit('getObject', 'system.certificates', function (err, res) { if (res.native.certificates !== undefined) { obj[id] = $this.val(); obj[`${id}Val`] = res.native.certificates[$this.val()]; } }); } // save settings else { obj[id] = obj[id] ? obj[id] : $this.val(); } }); callback(obj); }