Stairs/web/app.js

248 lines
5.8 KiB
JavaScript

function startApp()
{
var i18n = new VueI18n({
locale: navigator.language,
fallbackLocale: 'en',
messages: messages
});
var app = new Vue({
el: '#app',
i18n: i18n,
data: {
loading: true,
saving: false,
loadingIndicator: '|',
activeTab: 'status',
version: {
systemID: 'loading...',
version: 'loading...',
},
wifiStatus: {
ap: {
enabled: false,
ip: '0.0.0.0'
},
station: {
enabled: false,
status: 0,
ip: '0.0.0.0'
}
},
connection: {
hostname: null,
accesspoint: true,
station: false,
ssid: null,
password: null,
dhcp: true,
ip: null,
subnetmask: null,
gateway: null
},
steps: [
{ value: 50 },
{ value: 0 },
{ value: 0 },
{ value: 0 },
{ value: 0 },
{ value: 70 },
{ value: 0 },
{ value: 0 },
{ value: 0 },
{ value: 0 },
{ value: 25 },
{ value: 0 },
{ value: 0 },
{ value: 0 }
]
},
created: function()
{
var self = this;
document.title = i18n.t('title');
self.startLoadingIndicator();
self.updateWiFiStatus();
setInterval(self.updateWiFiStatus, 5000);
axios.get('/api/version')
.then(function(response)
{
if (typeof response.data == 'object')
self.version = response.data;
})
.catch(function(error)
{
console.log(error);
});
axios.all([
axios.get('/api/connection')
.then(function(response)
{
if (typeof response.data == 'object')
self.connection = response.data;
})
.catch(function(error)
{
console.log(error);
})/*,
axios.get('/api/actions')
.then(function(response)
{
if (typeof response.data == 'object')
self.actions = response.data;
})
.catch(function(error)
{
console.log(error);
})*/
])
.then(axios.spread(function(acct, perms) {
self.stopLoadingIndicator();
self.loading = false;
}));
},
methods: {
applyConnection: function()
{
var self = this;
if (self.saving) return;
self.saving = true;
axios.post('/api/connection', {
hostname: self.connection.hostname,
accesspoint: self.connection.accesspoint,
station: self.connection.station,
ssid: self.connection.ssid,
password: self.connection.password,
dhcp: self.connection.dhcp,
ip: self.connection.ip,
subnetmask: self.connection.subnetmask,
gateway: self.connection.gateway,
})
.then(function(response)
{
})
.catch(function(error)
{
console.log(error);
})
.then(function()
{
self.saving = false;
})
},
startLoadingIndicator: function()
{
var self = this;
self.loadingStage = 0;
self.loadingTimer = setInterval(function()
{
self.loadingStage++;
console.log(self.loadingStage);
switch (self.loadingStage)
{
case 1: self.loadingIndicator = '/'; break;
case 2: self.loadingIndicator = '-'; break;
case 3: self.loadingIndicator = '\\'; break;
case 4: self.loadingIndicator = '|'; self.loadingStage = 0; break;
}
}, 250);
},
stopLoadingIndicator: function()
{
clearInterval(this.loadingTimer);
},
getWiFiStationStatus: function()
{
if (!this.wifiStatus.station.enabled)
return 'disconnected';
switch (this.wifiStatus.station.status)
{
case 0: // WL_IDLE_STATUS
case 2: // WL_SCAN_COMPLETED
return 'connecting';
case 1: // WL_NO_SSID_AVAIL
case 4: // WL_CONNECT_FAILED
case 5: // WL_CONNECTION_LOST
return 'error';
case 3: // WL_CONNECTED
return 'connected';
case 6: // WL_DISCONNECTED
default:
return 'disconnected';
}
},
getWiFiStationStatusText: function()
{
if (!this.wifiStatus.station.enabled)
return i18n.t('wifiStatus.stationmode.disabled');
switch (this.wifiStatus.station.status)
{
case 0: // WL_IDLE_STATUS
return i18n.t('wifiStatus.stationmode.idle');
case 1: // WL_NO_SSID_AVAIL
return i18n.t('wifiStatus.stationmode.noSSID');
case 2: // WL_SCAN_COMPLETED
return i18n.t('wifiStatus.stationmode.scanCompleted');
case 3: // WL_CONNECTED
return this.wifiStatus.station.ip;
case 4: // WL_CONNECT_FAILED
return i18n.t('wifiStatus.stationmode.connectFailed');
case 5: // WL_CONNECTION_LOST
return i18n.t('wifiStatus.stationmode.connectionLost');
case 6: // WL_DISCONNECTED
default:
return i18n.t('wifiStatus.stationmode.disconnected');
}
},
updateWiFiStatus: function()
{
var self = this;
if (self.saving) return;
axios.get('/api/connection/status')
.then(function(response)
{
if (typeof response.data == 'object')
self.wifiStatus = response.data;
})
.catch(function(error)
{
console.log(error);
});
}
}
});
}