freifunkmanager/webroot/js/element/menu.js

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);
}
}