UNPKG

node-red-contrib-smartnora

Version:

Google Smart Home integration via Smart Nora https://smart-nora.eu/

156 lines (152 loc) 6.85 kB
<script type="text/javascript"> (function () { const noraOrigins = ['https://smart-nora.eu', 'https://nora-firebase.firebaseapp.com']; let ssoWindow = null; let handler = null; window.addEventListener('message', ev => { if (noraOrigins.some(s => ev.origin.startsWith(s)) && handler) handler(ev.data); }); RED.nodes.registerType('noraf-config', { category: 'config', defaults: { name: { value: 'nora config' }, group: { value: '', }, twofactor: { value: 'off', }, twofactorpin: { value: '' }, localexecution: { value: true, }, structure: { value: '' }, storeStateInContext: { value: false, }, disableValidationErrors: { value: false, }, sendDeviceNameAndLocation: { value: false, } }, credentials: { email: { type: 'text' }, password: { type: 'text' }, sso: { type: 'text' } }, paletteLabel: 'nora config', label: function () { return this.name || 'nora config'; }, oneditprepare: function () { if (typeof this.disableValidationErrors !== 'boolean') { $('#node-config-input-disableValidationErrors').prop('checked', false); } if (typeof this.storeStateInContext !== 'boolean') { $('#node-config-input-storeStateInContext').prop('checked', false); } if (typeof this.sendDeviceNameAndLocation !== 'boolean') { $('#node-config-input-sendDeviceNameAndLocation').prop('checked', false); } $('#node-config-input-twofactor').change(function () { if ($(this).val() === 'pin') { $('#node-config-twofactor-pin').show(); } else { $('#node-config-twofactor-pin').hide(); } }); $('#sso-login').on('click', function () { const features = [ 'popup=yes', 'scrollbars=yes', 'resizable=yes', 'width=410', 'height=600', ].join(','); if (ssoWindow === null || ssoWindow.closed) { ssoWindow = window.open(`${noraOrigins[0]}/my-nora/sso`, '_blank', features); } else { ssoWindow.focus(); } }); handler = (msg) => { if (msg.type === 'nora-sso-token') { $('#node-config-input-email').val(msg.email); $('#node-config-input-password').val(''); $('#node-config-input-sso').val(msg.token); } }; }, }); })(); </script> <script type="text/x-red" data-template-name="noraf-config"> <div class="form-row"> <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-config-input-name"> </div> <div class="form-row"> <label for="node-config-input-email"><i class="fa fa-envelope"></i> Email</label> <input type="text" id="node-config-input-email" readonly> </div> <div class="form-row"> <button id="sso-login" class="ui-button ui-corner-all ui-widget primary">Login</button> <input type="hidden" id="node-config-input-password"> <input type="hidden" id="node-config-input-sso"> </div> <div class="form-row"> <label for="node-config-input-structure"><i class="fa fa-home"></i> Home name</label> <input type="text" id="node-config-input-structure"> </div> <div class="form-row"> <label for="node-config-input-group"><i class="fa fa-object-group"></i> Group</label> <input type="text" id="node-config-input-group"> </div> <div class="form-row"> <label for="node-config-input-twofactor"><i class="fa fa-question-sign"></i> Two Factor</label> <select id="node-config-input-twofactor"> <option value="off">Node</option> <option value="ack">Acknowledge</option> <option value="pin">Pin</option> </select> </div> <div id="node-config-twofactor-pin" class="form-row"> <label for="node-config-input-twofactorpin"><i class="fa fa-code"></i> Pin</label> <input type="text" id="node-config-input-twofactorpin"> </div> <div class="form-row"> <label style="width:auto" for="node-config-input-localexecution"><i class="fa fa-gear"></i> Local execution support: </label> <input type="checkbox" checked id="node-config-input-localexecution" style="display:inline-block; width:auto; vertical-align:top;"> </div> <div class="form-row"> <label style="width:auto" for="node-config-input-storeStateInContext"><i class="fa fa-refresh"></i> Store state in node context: </label> <input type="checkbox" checked id="node-config-input-storeStateInContext" style="display:inline-block; width:auto; vertical-align:top;"> </div> <div class="form-row"> <label style="width:auto" for="node-config-input-disableValidationErrors"><i class="fa fa-list"></i> Disable validation warnings: </label> <input type="checkbox" checked id="node-config-input-disableValidationErrors" style="display:inline-block; width:auto; vertical-align:top;"> </div> <div class="form-row"> <label style="width:auto" for="node-config-input-sendDeviceNameAndLocation"><i class="fa fa-location-arrow"></i> Send name and location on the output: </label> <input type="checkbox" checked id="node-config-input-sendDeviceNameAndLocation" style="display:inline-block; width:auto; vertical-align:top;"> </div> </script> <script type="text/x-red" data-help-name="noraf-config"> <p> <a href="https://github.com/andrei-tatar/node-red-contrib-smartnora/blob/master/doc/nodes/config/README.md">https://github.com/andrei-tatar/node-red-contrib-smartnora/blob/master/doc/nodes/config/README.md</a> </p> </script>