import './status.css'; import { ZcStatus } from './zc-status'; import GM_fetch from "@trim21/gm-fetch"; declare function waitForKeyElements(selectorOrFunction: any, callback: any, waitOnce: boolean): any; export class Status { private _user: string; private _enabled = false; private _statusOn = 'menuAvailable'; private _statusOff = 'menuAway'; private _currentStatus: boolean = undefined; public async showStatus(element: HTMLElement) { this._user = await GM.getValue('tapi-zc-user', ''); this._enabled = await GM.getValue('tapi-zc-enabled', false); this._statusOn = await GM.getValue('tapi-zc-on', 'menuAvailable'); this._statusOff = await GM.getValue('tapi-zc-off', 'menuAvailable'); console.log('tapi-zc-user', this._user, 'tapi-zc-enabled', this._enabled, 'tapi-zc-on', this._statusOn, 'tapi-zc-off', this._statusOff); this.checkStatus(); waitForKeyElements("wc-account-menu > div > ul", (element: HTMLElement) => { this.addZcStatusPopup(element) }, true); } private async checkStatus() { if (this._enabled) { try { var response = await GM_fetch('http://cpatapi.cpsrvweb2016.cp-austria.at/availability/' + encodeURIComponent(this._user)); if (response.status == 200) { var status = await response.json() as ZcStatus; if (this._currentStatus !== status.loggedIn) { this._currentStatus = status.loggedIn; console.log('New status, loggedIn', this._currentStatus); var accMenu = document.getElementsByTagName("wc-account-menu")[0]; var avatar = accMenu.getElementsByTagName("app-avatar")[0] as HTMLAnchorElement; avatar.click(); setTimeout(() => { var statusId = this._currentStatus ? this._statusOn : this._statusOff; console.log('Clicking status', statusId); (document.getElementById(statusId) as HTMLSpanElement).click(); }, 1000); } } } catch (error) { console.log(error); } setTimeout(() => this.checkStatus(), 30000); } } private addZcStatusPopup(element: HTMLElement) { var divider = document.createElement('li'); divider.classList.add('divider'); divider.classList.add('dropdown-divider'); element.appendChild(divider); var menu = document.createElement('li'); element.appendChild(menu); var link = document.createElement('a'); link.id = 'tapi-zc-button'; link.innerText = 'ZeitConsens'; link.classList.add('dropdown-item'); link.classList.add('d-flex'); link.onclick = () => { document.getElementById('zc-modal').classList.toggle('show'); } menu.appendChild(link); var html = '