109 lines
2.5 KiB
JavaScript
109 lines
2.5 KiB
JavaScript
import * as V from 'superfine';
|
|
import * as domlib from '../domlib';
|
|
import * as socket from '../socket';
|
|
import * as store from '../store';
|
|
import View from '../view';
|
|
import {singelton as notify} from './notify';
|
|
import {render} from '../gui';
|
|
|
|
export const WINDOW_HEIGHT_MENU = 50;
|
|
|
|
export class MenuView extends View {
|
|
constructor () {
|
|
super();
|
|
this.el = document.createElement('header');
|
|
const menuContainer = domlib.newAt(this.el, 'nav');
|
|
this.menuList = domlib.newAt(menuContainer, 'ul');
|
|
|
|
const aList = domlib.newAt(this.menuList, 'li', {'class':'item-1'});
|
|
domlib.newAt(aList, 'a', {'href':'#/list'}, 'List');
|
|
|
|
const aMap = domlib.newAt(this.menuList, 'li', {'class':'item-2'});
|
|
domlib.newAt(aMap, 'a', {'href':'#/map'}, 'Map');
|
|
|
|
const aStatistics= domlib.newAt(this.menuList, 'li', {'class':'item-3'});
|
|
domlib.newAt(aStatistics, 'a', {'href':'#/statistics'}, 'Stats');
|
|
|
|
}
|
|
loginTyping(e) {
|
|
this._loginInput = e.target.value;
|
|
}
|
|
login() {
|
|
socket.sendjson({'subject': 'login', 'body': this._loginInput}, (msg) => {
|
|
if (msg.body) {
|
|
store.settings = msg.body;
|
|
store.isLogin = true;
|
|
render();
|
|
}else {
|
|
notify.send({
|
|
'header': 'Anmeldung ist fehlgeschlagen',
|
|
'type': 'error'
|
|
}, 'Login');
|
|
}
|
|
});
|
|
this._loginInput = '';
|
|
}
|
|
|
|
logout() {
|
|
socket.sendjson({'subject': 'logout'}, (msg) => {
|
|
if (msg.body) {
|
|
store.isLogin = false;
|
|
render();
|
|
} else {
|
|
notify.send({
|
|
'header': 'Abmeldung ist fehlgeschlagen',
|
|
'type': 'error'
|
|
}, 'Logout');
|
|
}
|
|
});
|
|
}
|
|
|
|
render () {
|
|
const socketStatus = socket.getStatus();
|
|
let statusClass = 'status ',
|
|
vLogin = [V.h('li', {
|
|
'class': 'login',
|
|
}, [
|
|
V.h('input', {
|
|
'type': 'password',
|
|
'value': this._loginInput,
|
|
'oninput': this.loginTyping.bind(this),
|
|
}),
|
|
V.h('a', {
|
|
'onclick': this.login.bind(this)
|
|
}, 'Login')
|
|
])];
|
|
|
|
if (store.isLogin) {
|
|
vLogin = [
|
|
V.h('li', {
|
|
'class': 'login',
|
|
},[
|
|
V.h('a', {
|
|
'onclick': this.logout.bind(this)
|
|
}, 'Logout')
|
|
]),
|
|
V.h('li', {
|
|
'class':'right item-3'
|
|
},[V.h('a', {
|
|
'href': '#/settings'
|
|
}, 'Settings')])
|
|
];
|
|
}
|
|
|
|
if (socketStatus !== 1) {
|
|
// eslint-disable-next-line no-magic-numbers
|
|
if (socketStatus === 0 || socketStatus === 2) {
|
|
statusClass += 'connecting';
|
|
} else {
|
|
statusClass += 'offline';
|
|
}
|
|
}
|
|
|
|
V.render(this.vMenu, this.vMenu = V.h('span',{},[V.h('li', {
|
|
'class': statusClass,
|
|
'onclick': () => location.reload(true)
|
|
})].concat(vLogin)), this.menuList);
|
|
}
|
|
}
|