/* (1) Initialisation ---------------------------------------------------------*/ /* (1) Init @channel object */ gs.set('channel', {}); /* (2) Set default active channel */ gs.get.channel.current = null; /* (3) Initialize list */ gs.get.channel.list = [ { id: -1, label: 'me', sub: '0 online', icon: 'group' }, { id: 0, label: 'test1', sub: null, icon: 'test1' }, { id: 1, label: 'test2', sub: null, icon: 'test2' }, { id: -2, label: 'add', sub: null, icon: 'add', add: 1 } ]; /* (4) Initialize vue-router channel navigation */ gs.get.channel.nav = function(){}; /* (5) Initialize adding fetched channel */ gs.get.channel.dump = function(){}; /* (6) Initialize accessor for channel data */ gs.get.channel.get = function(){}; /* (2) Channel navigation ---------------------------------------------------------*/ gs.get.channel.nav = function(channel_id=null){ /* (1) Get channel data */ var channel = this.get(channel_id); /* (3) Abort if same channel */ if( gs.get.router.history.current.params.label === channel.label ) return false; /* (3) Navigate vue-router */ gs.get.router.push(`/channel/${channel.label}`); /* (4) Update active element */ this.current = channel.id; /* (5) Log channel */ console.log(`[channel.current] ${channel.label}`); return true; }; /* (3) Dump/Update channel data * * @channels Channels data * * @return udpated Whether channels have been updated * ---------------------------------------------------------*/ gs.get.channel.dump = function(channels){ /* (1) Check @channels type */ if( !(channels instanceof Array) ) return false; /* (2) Store LAST item */ let last_item = this.list.pop(); /* (3) Clear list (except FIRST) */ this.list.splice(1); /* (4) Apply new channels */ for(let c of channels) this.list.push(c); /* (5) Restore LAST */ this.list.push(last_item); return true; }; /* (4) Get channel data * * @channel_id Channel ID * NULL: current channel || from URL (and set current) * * @return channel Channel data * ---------------------------------------------------------*/ gs.get.channel.get = function(channel_id=null){ if( channel_id === null ){ /* (1) Get @active channel ---------------------------------------------------------*/ /* (1) If @active is set */ if( !isNaN(this.current) ){ /* (2) Return matching id in list */ for( let c of this.list ){ if( c.id === this.current ) return c; // exit point } } /* (2) Get from URL ---------------------------------------------------------*/ /* (1) If vue-router has @label param */ if( gs.get.router.history.current.params.label ){ /* (2) Extract @label */ let label = gs.get.router.history.current.params.label; /* (3) Return matching label in list */ for( let c of this.list ){ if( c.label === label ){ this.current = c.id; // set @active return c; // exit point } } } } /* (3) Get channel data ---------------------------------------------------------*/ /* (1) Return channel matching id */ for( let c of this.list ) if( c.id === channel_id ) return c; // exit point /* (2) Return default: if ID not found */ this.current = this.list[0].id; return this.list[0]; } /* (N) Manage active channel from URL ---------------------------------------------------------*/ /* (1) Set current active channel item from URL */ // gs.get.channel.nav();