96 lines
2.4 KiB
JavaScript
96 lines
2.4 KiB
JavaScript
import {GlobalStore} from './lib/gstore-es6'
|
|
|
|
window.gstore = new GlobalStore();
|
|
|
|
// Header
|
|
gstore.add('header_title', 'ndli1718');
|
|
gstore.add('info', {
|
|
active: false,
|
|
type: 'warning',
|
|
message: 'Warning! blabla'
|
|
});
|
|
gstore.add('notif', [
|
|
{ class: 'bell', link: 'notifications', data: [], count: 0 },
|
|
{ class: 'message', link: 'inbox', data: [], count: 0 },
|
|
{ class: 'search', link: 'search', data: [], count: 0 },
|
|
{ class: 'menu', link: 'dashboard', data: [], count: 0 }
|
|
])
|
|
|
|
// Menu
|
|
gstore.add('menu_item', {
|
|
dashboard: {
|
|
label: 'Dashboard',
|
|
icon: 'dashboard'
|
|
}, profile: {
|
|
label: 'Profil',
|
|
icon: 'profile'
|
|
}, inbox: {
|
|
label: 'Messagerie instantannée',
|
|
icon: 'messages'
|
|
}, notifications: {
|
|
label: 'Notifications',
|
|
icon: 'bell'
|
|
}
|
|
});
|
|
|
|
gstore.add('URI', document.URL.replace(/^(?:\/\/|[^\/]+)*/, ''));
|
|
gstore.add('is_local', document.URL.replace(/^http:\/\/([^\/]+).*$/, '$1') == 'ndli1718');
|
|
gstore.add('min_menu', false);
|
|
|
|
// Proccess current page from url
|
|
if( /^\/(\w+)(?:\/?.*)$/.test(gstore.data.URI) ){
|
|
var mi_keys = Object.keys( gstore.data.menu_item );
|
|
|
|
// if current page exists
|
|
if( !!~mi_keys.indexOf(RegExp.$1) ) gstore.add('menu_item_active', RegExp.$1);
|
|
else gstore.add('menu_item_active', 'dashboard');
|
|
|
|
}else
|
|
gstore.add('menu_item_active', 'dashboard');
|
|
|
|
// Functions
|
|
gstore.add('func', {
|
|
nav: function(router, uri){
|
|
|
|
// {1} Update view (vue-router) //
|
|
if( typeof uri == 'string' )
|
|
router.push('/'+uri);
|
|
|
|
// {2} if no @uri -> Extract route from @router //
|
|
else if( /^\/([^\/]+).*$/.test( router.app.$route.path ) )
|
|
uri = RegExp.$1;
|
|
|
|
// {3} If no @uri -> exit //
|
|
else
|
|
return;
|
|
|
|
// {4} Activate current menu_item //
|
|
gstore.data.menu_item_active = uri;
|
|
|
|
// {5} Manage notifications //
|
|
for( var notif of gstore.data.notif )
|
|
if( notif.link == uri ) // if notif links to current page
|
|
notif.count = 0;
|
|
|
|
},
|
|
toggleMenuSize: function(){ gstore.data.min_menu=!gstore.data.min_menu; },
|
|
sendMessage: function(msg){
|
|
|
|
/* (1) If empty message -> abort */
|
|
if( msg.trim().length == 0 )
|
|
return;
|
|
|
|
/* (2) Send message to WebSocket */
|
|
wsc_chat.send(JSON.stringify({message: msg}));
|
|
|
|
/* (3) Add locally */
|
|
gstore.data.notif[1].data.push([ gstore.data.server.session.name, msg ]);
|
|
}
|
|
});
|
|
|
|
|
|
// new-message container
|
|
gstore.add('new_msg', '');
|
|
|
|
// notification stack visibility
|
|
gstore.add('nstack', false); |