summaryrefslogblamecommitdiff
path: root/src/renderer/gameserver/server.ts
blob: e18b43a8bc3175a168e3be96d39524403d74aa4c (plain) (tree)





























































































                                                                                





























                                                         






















                                                                                                        
import GameServerProfile from './profile';
import { shell } from 'electron';
import { switchPage } from '../CustomEvents';


export default class GameServer {
  constructor(
    public profile:GameServerProfile,
    public menuName:string,
    public name:string,
    public shortDescription:string,// the server in 1-2 sentences
    public newsFeed:string,
    public backgrounds:{isVideo:boolean,file:string}[],
    public icon:string,
    public socialLinks:socialLink[]
  ){}

  getMenuEntry():HTMLElement{
    const sidebarItem = document.createElement('div');
    sidebarItem.classList.add("sidebarItem");

    //Title
    const title = document.createElement('div');
    title.classList.add("title");

    const titleIMG = document.createElement('img');
    titleIMG.src = `./media/server/${this.icon}`;

    const titleText = document.createElement('div');
    titleText.innerText = this.menuName;

    title.appendChild(titleIMG);
    title.appendChild(titleText);

    title.addEventListener('click', ()=>{
      switchPage("SERVER",this.name);
    });

    sidebarItem.appendChild(title);
    //Collapsable
    const container = document.createElement('div');
    container.classList.add("colapse");

    const info = document.createElement('div');
    info.innerHTML = '<i class="fas fa-info fa-fw"></i>Information';
    container.appendChild(info);

    info.addEventListener('click', ()=>{
      switchPage("SERVER",this.name);
    });

    const news = document.createElement('div');
    news.innerHTML = '<i class="far fa-newspaper fa-fw"></i>News';
    if(this.newsFeed && this.newsFeed!==null){
      news.addEventListener('click', ()=>{
        switchPage("SERVER",this.name,"NEWS");
      });
    } else {
      news.hidden = true;
    }

    container.appendChild(news);

    const preferences = document.createElement('div');
    preferences.innerHTML = '<i class="fas fa-sliders-h fa-fw"></i>Preferences';
    preferences.addEventListener('click', ()=>{
      switchPage("SERVER",this.name,"PREF");
    });
    container.appendChild(preferences);

    sidebarItem.appendChild(container);
    //event Target / interactivity
    const events = document.createElement('span');
    events.classList.add("switch-page-event");
    events.addEventListener("site-changed", (event:CustomEvent)=>{
      sidebarItem.classList.remove("selected");
      info.classList.remove("selected");
      news.classList.remove("selected");
      preferences.classList.remove("selected");
      if(event.detail.sitetype === "SERVER" && event.detail.page === this.name){
        sidebarItem.classList.add("selected");
        if(event.detail.subPage === "NEWS") {
          news.classList.add("selected");
        } else if(event.detail.subPage === "PREF") {
          preferences.classList.add("selected");
        } else {
          info.classList.add("selected");
        }
      }
    });

    sidebarItem.appendChild(events);
    return sidebarItem;
  }

  getPage(type:string):HTMLElement{
    const page = document.createElement('div');
    if (typeof(type) === undefined || type == null){
      page.appendChild(this.getInfoPage());
    } else {
      const content = document.createElement('div');
      content.classList.add("unknownServerPage");
      content.innerText = `Unknown page for${this.name}`;
      page.appendChild(content);
    }
    return page;
  }

  private getInfoPage():HTMLElement{
    const content = document.createElement('div');
    content.classList.add("infoServerPage");

    const title = document.createElement('div');
    title.classList.add("title");
    title.innerText = this.name;
    content.appendChild(title);

    const shrtDsrption = document.createElement('div');
    shrtDsrption.classList.add("shortDescription");
    shrtDsrption.innerText = this.shortDescription;
    content.appendChild(shrtDsrption);

    return content;
  }
}

export class socialLink {
  constructor(
    public icon:string,// has to be one from font awesome -https://fontawesome.com/icons
    public tooltip:string,
    public url:string
  ){}

  getHTML():HTMLElement{
    //<button onclick="sv.openSocialLink(this)" socialLink="abc"><i class="fa fa-user"></i></button><br>
    const element = document.createElement('button');
    element.onclick = this.open;
    element.innerHTML = `<i class="${this.icon}"></i>`;
    element.title = this.tooltip;
    return element;
  }

  open(){
      if(this.url)
        shell.openExternal(this.url.indexOf("://")!==-1?this.url:`https://${this.url}`);
  }
}