node-red-contrib-smartnora
Version:
Google Smart Home integration via Smart Nora https://smart-nora.eu/
156 lines (152 loc) • 6.85 kB
HTML
<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>