mirror of
				https://github.com/zulip/zulip-desktop.git
				synced 2025-11-04 05:53:21 +00:00 
			
		
		
		
	Explode BaseComponent class to a function.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
		@@ -1,9 +1,7 @@
 | 
				
			|||||||
import type {HTML} from "../../../common/html";
 | 
					import type {HTML} from "../../../common/html";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class BaseComponent {
 | 
					export function generateNodeFromHTML(html: HTML): Element | null {
 | 
				
			||||||
  generateNodeFromHTML(html: HTML): Element | null {
 | 
					  const wrapper = document.createElement("div");
 | 
				
			||||||
    const wrapper = document.createElement("div");
 | 
					  wrapper.innerHTML = html.html;
 | 
				
			||||||
    wrapper.innerHTML = html.html;
 | 
					  return wrapper.firstElementChild;
 | 
				
			||||||
    return wrapper.firstElementChild;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import type {HTML} from "../../../common/html";
 | 
					import type {HTML} from "../../../common/html";
 | 
				
			||||||
import {html} from "../../../common/html";
 | 
					import {html} from "../../../common/html";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import {generateNodeFromHTML} from "./base";
 | 
				
			||||||
import type {TabProps} from "./tab";
 | 
					import type {TabProps} from "./tab";
 | 
				
			||||||
import Tab from "./tab";
 | 
					import Tab from "./tab";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,7 +11,7 @@ export default class FunctionalTab extends Tab {
 | 
				
			|||||||
  constructor(props: TabProps) {
 | 
					  constructor(props: TabProps) {
 | 
				
			||||||
    super(props);
 | 
					    super(props);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.$el = this.generateNodeFromHTML(this.templateHTML());
 | 
					    this.$el = generateNodeFromHTML(this.templateHTML());
 | 
				
			||||||
    if (this.props.name !== "Settings") {
 | 
					    if (this.props.name !== "Settings") {
 | 
				
			||||||
      this.props.$root.append(this.$el);
 | 
					      this.props.$root.append(this.$el);
 | 
				
			||||||
      this.$closeButton = this.$el.querySelector(".server-tab-badge");
 | 
					      this.$closeButton = this.$el.querySelector(".server-tab-badge");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import type {HTML} from "../../../common/html";
 | 
				
			|||||||
import {html} from "../../../common/html";
 | 
					import {html} from "../../../common/html";
 | 
				
			||||||
import * as SystemUtil from "../utils/system-util";
 | 
					import * as SystemUtil from "../utils/system-util";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import {generateNodeFromHTML} from "./base";
 | 
				
			||||||
import type {TabProps} from "./tab";
 | 
					import type {TabProps} from "./tab";
 | 
				
			||||||
import Tab from "./tab";
 | 
					import Tab from "./tab";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,7 +14,7 @@ export default class ServerTab extends Tab {
 | 
				
			|||||||
  constructor(props: TabProps) {
 | 
					  constructor(props: TabProps) {
 | 
				
			||||||
    super(props);
 | 
					    super(props);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.$el = this.generateNodeFromHTML(this.templateHTML());
 | 
					    this.$el = generateNodeFromHTML(this.templateHTML());
 | 
				
			||||||
    this.props.$root.append(this.$el);
 | 
					    this.props.$root.append(this.$el);
 | 
				
			||||||
    this.registerListeners();
 | 
					    this.registerListeners();
 | 
				
			||||||
    this.$badge = this.$el.querySelector(".server-tab-badge");
 | 
					    this.$badge = this.$el.querySelector(".server-tab-badge");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,3 @@
 | 
				
			|||||||
import BaseComponent from "./base";
 | 
					 | 
				
			||||||
import type WebView from "./webview";
 | 
					import type WebView from "./webview";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface TabProps {
 | 
					export interface TabProps {
 | 
				
			||||||
@@ -16,13 +15,11 @@ export interface TabProps {
 | 
				
			|||||||
  onDestroy?: () => void;
 | 
					  onDestroy?: () => void;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class Tab extends BaseComponent {
 | 
					export default class Tab {
 | 
				
			||||||
  props: TabProps;
 | 
					  props: TabProps;
 | 
				
			||||||
  webview: WebView;
 | 
					  webview: WebView;
 | 
				
			||||||
  $el: Element;
 | 
					  $el: Element;
 | 
				
			||||||
  constructor(props: TabProps) {
 | 
					  constructor(props: TabProps) {
 | 
				
			||||||
    super();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.props = props;
 | 
					    this.props = props;
 | 
				
			||||||
    this.webview = this.props.webview;
 | 
					    this.webview = this.props.webview;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ import * as ConfigUtil from "../../../common/config-util";
 | 
				
			|||||||
import {HTML, html} from "../../../common/html";
 | 
					import {HTML, html} from "../../../common/html";
 | 
				
			||||||
import * as SystemUtil from "../utils/system-util";
 | 
					import * as SystemUtil from "../utils/system-util";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import BaseComponent from "./base";
 | 
					import {generateNodeFromHTML} from "./base";
 | 
				
			||||||
import {contextMenu} from "./context-menu";
 | 
					import {contextMenu} from "./context-menu";
 | 
				
			||||||
import handleExternalLink from "./handle-external-link";
 | 
					import handleExternalLink from "./handle-external-link";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -30,7 +30,7 @@ interface WebViewProps {
 | 
				
			|||||||
  hasPermission?: (origin: string, permission: string) => boolean;
 | 
					  hasPermission?: (origin: string, permission: string) => boolean;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class WebView extends BaseComponent {
 | 
					export default class WebView {
 | 
				
			||||||
  props: WebViewProps;
 | 
					  props: WebViewProps;
 | 
				
			||||||
  zoomFactor: number;
 | 
					  zoomFactor: number;
 | 
				
			||||||
  badgeCount: number;
 | 
					  badgeCount: number;
 | 
				
			||||||
@@ -41,8 +41,6 @@ export default class WebView extends BaseComponent {
 | 
				
			|||||||
  domReady?: Promise<void>;
 | 
					  domReady?: Promise<void>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(props: WebViewProps) {
 | 
					  constructor(props: WebViewProps) {
 | 
				
			||||||
    super();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.props = props;
 | 
					    this.props = props;
 | 
				
			||||||
    this.zoomFactor = 1;
 | 
					    this.zoomFactor = 1;
 | 
				
			||||||
    this.loading = true;
 | 
					    this.loading = true;
 | 
				
			||||||
@@ -74,9 +72,7 @@ export default class WebView extends BaseComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  init(): void {
 | 
					  init(): void {
 | 
				
			||||||
    this.$el = this.generateNodeFromHTML(
 | 
					    this.$el = generateNodeFromHTML(this.templateHTML()) as Electron.WebviewTag;
 | 
				
			||||||
      this.templateHTML(),
 | 
					 | 
				
			||||||
    ) as Electron.WebviewTag;
 | 
					 | 
				
			||||||
    this.domReady = new Promise((resolve) => {
 | 
					    this.domReady = new Promise((resolve) => {
 | 
				
			||||||
      this.$el.addEventListener(
 | 
					      this.$el.addEventListener(
 | 
				
			||||||
        "dom-ready",
 | 
					        "dom-ready",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ import {ipcRenderer} from "electron";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import type {HTML} from "../../../../common/html";
 | 
					import type {HTML} from "../../../../common/html";
 | 
				
			||||||
import {html} from "../../../../common/html";
 | 
					import {html} from "../../../../common/html";
 | 
				
			||||||
import BaseComponent from "../../components/base";
 | 
					import {generateNodeFromHTML} from "../../components/base";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface BaseSectionProps {
 | 
					interface BaseSectionProps {
 | 
				
			||||||
  $element: HTMLElement;
 | 
					  $element: HTMLElement;
 | 
				
			||||||
@@ -11,13 +11,13 @@ interface BaseSectionProps {
 | 
				
			|||||||
  clickHandler: () => void;
 | 
					  clickHandler: () => void;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class BaseSection extends BaseComponent {
 | 
					export default class BaseSection {
 | 
				
			||||||
  generateSettingOption(props: BaseSectionProps): void {
 | 
					  generateSettingOption(props: BaseSectionProps): void {
 | 
				
			||||||
    const {$element, disabled, value, clickHandler} = props;
 | 
					    const {$element, disabled, value, clickHandler} = props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $element.textContent = "";
 | 
					    $element.textContent = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const $optionControl = this.generateNodeFromHTML(
 | 
					    const $optionControl = generateNodeFromHTML(
 | 
				
			||||||
      this.generateOptionHTML(value, disabled),
 | 
					      this.generateOptionHTML(value, disabled),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    $element.append($optionControl);
 | 
					    $element.append($optionControl);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,20 +1,19 @@
 | 
				
			|||||||
import type {HTML} from "../../../../common/html";
 | 
					import type {HTML} from "../../../../common/html";
 | 
				
			||||||
import {html} from "../../../../common/html";
 | 
					import {html} from "../../../../common/html";
 | 
				
			||||||
import * as t from "../../../../common/translation-util";
 | 
					import * as t from "../../../../common/translation-util";
 | 
				
			||||||
import BaseComponent from "../../components/base";
 | 
					import {generateNodeFromHTML} from "../../components/base";
 | 
				
			||||||
import * as LinkUtil from "../../utils/link-util";
 | 
					import * as LinkUtil from "../../utils/link-util";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface FindAccountsProps {
 | 
					interface FindAccountsProps {
 | 
				
			||||||
  $root: Element;
 | 
					  $root: Element;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class FindAccounts extends BaseComponent {
 | 
					export default class FindAccounts {
 | 
				
			||||||
  props: FindAccountsProps;
 | 
					  props: FindAccountsProps;
 | 
				
			||||||
  $findAccounts: Element | null;
 | 
					  $findAccounts: Element | null;
 | 
				
			||||||
  $findAccountsButton: Element | null;
 | 
					  $findAccountsButton: Element | null;
 | 
				
			||||||
  $serverUrlField: HTMLInputElement | null;
 | 
					  $serverUrlField: HTMLInputElement | null;
 | 
				
			||||||
  constructor(props: FindAccountsProps) {
 | 
					  constructor(props: FindAccountsProps) {
 | 
				
			||||||
    super();
 | 
					 | 
				
			||||||
    this.props = props;
 | 
					    this.props = props;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,7 +34,7 @@ export default class FindAccounts extends BaseComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  init(): void {
 | 
					  init(): void {
 | 
				
			||||||
    this.$findAccounts = this.generateNodeFromHTML(this.templateHTML());
 | 
					    this.$findAccounts = generateNodeFromHTML(this.templateHTML());
 | 
				
			||||||
    this.props.$root.append(this.$findAccounts);
 | 
					    this.props.$root.append(this.$findAccounts);
 | 
				
			||||||
    this.$findAccountsButton = this.$findAccounts.querySelector(
 | 
					    this.$findAccountsButton = this.$findAccounts.querySelector(
 | 
				
			||||||
      "#find-accounts-button",
 | 
					      "#find-accounts-button",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import type {HTML} from "../../../../common/html";
 | 
					import type {HTML} from "../../../../common/html";
 | 
				
			||||||
import {html} from "../../../../common/html";
 | 
					import {html} from "../../../../common/html";
 | 
				
			||||||
import * as t from "../../../../common/translation-util";
 | 
					import * as t from "../../../../common/translation-util";
 | 
				
			||||||
import BaseComponent from "../../components/base";
 | 
					import {generateNodeFromHTML} from "../../components/base";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type NavItem =
 | 
					export type NavItem =
 | 
				
			||||||
  | "General"
 | 
					  | "General"
 | 
				
			||||||
@@ -15,12 +15,11 @@ interface PreferenceNavProps {
 | 
				
			|||||||
  onItemSelected: (navItem: NavItem) => void;
 | 
					  onItemSelected: (navItem: NavItem) => void;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class PreferenceNav extends BaseComponent {
 | 
					export default class PreferenceNav {
 | 
				
			||||||
  props: PreferenceNavProps;
 | 
					  props: PreferenceNavProps;
 | 
				
			||||||
  navItems: NavItem[];
 | 
					  navItems: NavItem[];
 | 
				
			||||||
  $el: Element;
 | 
					  $el: Element;
 | 
				
			||||||
  constructor(props: PreferenceNavProps) {
 | 
					  constructor(props: PreferenceNavProps) {
 | 
				
			||||||
    super();
 | 
					 | 
				
			||||||
    this.props = props;
 | 
					    this.props = props;
 | 
				
			||||||
    this.navItems = [
 | 
					    this.navItems = [
 | 
				
			||||||
      "General",
 | 
					      "General",
 | 
				
			||||||
@@ -50,7 +49,7 @@ export default class PreferenceNav extends BaseComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  init(): void {
 | 
					  init(): void {
 | 
				
			||||||
    this.$el = this.generateNodeFromHTML(this.templateHTML());
 | 
					    this.$el = generateNodeFromHTML(this.templateHTML());
 | 
				
			||||||
    this.props.$root.append(this.$el);
 | 
					    this.props.$root.append(this.$el);
 | 
				
			||||||
    this.registerListeners();
 | 
					    this.registerListeners();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ import {ipcRenderer, remote} from "electron";
 | 
				
			|||||||
import {html} from "../../../../common/html";
 | 
					import {html} from "../../../../common/html";
 | 
				
			||||||
import type {HTML} from "../../../../common/html";
 | 
					import type {HTML} from "../../../../common/html";
 | 
				
			||||||
import * as t from "../../../../common/translation-util";
 | 
					import * as t from "../../../../common/translation-util";
 | 
				
			||||||
import BaseComponent from "../../components/base";
 | 
					import {generateNodeFromHTML} from "../../components/base";
 | 
				
			||||||
import * as DomainUtil from "../../utils/domain-util";
 | 
					import * as DomainUtil from "../../utils/domain-util";
 | 
				
			||||||
import * as LinkUtil from "../../utils/link-util";
 | 
					import * as LinkUtil from "../../utils/link-util";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,13 +14,12 @@ interface NewServerFormProps {
 | 
				
			|||||||
  onChange: () => void;
 | 
					  onChange: () => void;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class NewServerForm extends BaseComponent {
 | 
					export default class NewServerForm {
 | 
				
			||||||
  props: NewServerFormProps;
 | 
					  props: NewServerFormProps;
 | 
				
			||||||
  $newServerForm: Element;
 | 
					  $newServerForm: Element;
 | 
				
			||||||
  $saveServerButton: HTMLButtonElement;
 | 
					  $saveServerButton: HTMLButtonElement;
 | 
				
			||||||
  $newServerUrl: HTMLInputElement;
 | 
					  $newServerUrl: HTMLInputElement;
 | 
				
			||||||
  constructor(props: NewServerFormProps) {
 | 
					  constructor(props: NewServerFormProps) {
 | 
				
			||||||
    super();
 | 
					 | 
				
			||||||
    this.props = props;
 | 
					    this.props = props;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,7 +67,7 @@ export default class NewServerForm extends BaseComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  initForm(): void {
 | 
					  initForm(): void {
 | 
				
			||||||
    this.$newServerForm = this.generateNodeFromHTML(this.templateHTML());
 | 
					    this.$newServerForm = generateNodeFromHTML(this.templateHTML());
 | 
				
			||||||
    this.$saveServerButton = this.$newServerForm.querySelector("#connect");
 | 
					    this.$saveServerButton = this.$newServerForm.querySelector("#connect");
 | 
				
			||||||
    this.props.$root.textContent = "";
 | 
					    this.props.$root.textContent = "";
 | 
				
			||||||
    this.props.$root.append(this.$newServerForm);
 | 
					    this.props.$root.append(this.$newServerForm);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
import {ipcRenderer} from "electron";
 | 
					import {ipcRenderer} from "electron";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import type {DNDSettings} from "../../../../common/dnd-util";
 | 
					import type {DNDSettings} from "../../../../common/dnd-util";
 | 
				
			||||||
import BaseComponent from "../../components/base";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ConnectedOrgSection from "./connected-org-section";
 | 
					import ConnectedOrgSection from "./connected-org-section";
 | 
				
			||||||
import GeneralSection from "./general-section";
 | 
					import GeneralSection from "./general-section";
 | 
				
			||||||
@@ -18,13 +17,12 @@ type Section =
 | 
				
			|||||||
  | ConnectedOrgSection
 | 
					  | ConnectedOrgSection
 | 
				
			||||||
  | ShortcutsSection;
 | 
					  | ShortcutsSection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class PreferenceView extends BaseComponent {
 | 
					export default class PreferenceView {
 | 
				
			||||||
  $sidebarContainer: Element;
 | 
					  $sidebarContainer: Element;
 | 
				
			||||||
  $settingsContainer: Element;
 | 
					  $settingsContainer: Element;
 | 
				
			||||||
  nav: Nav;
 | 
					  nav: Nav;
 | 
				
			||||||
  section: Section;
 | 
					  section: Section;
 | 
				
			||||||
  constructor() {
 | 
					  constructor() {
 | 
				
			||||||
    super();
 | 
					 | 
				
			||||||
    this.$sidebarContainer = document.querySelector("#sidebar");
 | 
					    this.$sidebarContainer = document.querySelector("#sidebar");
 | 
				
			||||||
    this.$settingsContainer = document.querySelector("#settings-container");
 | 
					    this.$settingsContainer = document.querySelector("#settings-container");
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ import type {HTML} from "../../../../common/html";
 | 
				
			|||||||
import * as Messages from "../../../../common/messages";
 | 
					import * as Messages from "../../../../common/messages";
 | 
				
			||||||
import * as t from "../../../../common/translation-util";
 | 
					import * as t from "../../../../common/translation-util";
 | 
				
			||||||
import type {ServerConf} from "../../../../common/types";
 | 
					import type {ServerConf} from "../../../../common/types";
 | 
				
			||||||
import BaseComponent from "../../components/base";
 | 
					import {generateNodeFromHTML} from "../../components/base";
 | 
				
			||||||
import * as DomainUtil from "../../utils/domain-util";
 | 
					import * as DomainUtil from "../../utils/domain-util";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const {dialog} = remote;
 | 
					const {dialog} = remote;
 | 
				
			||||||
@@ -17,7 +17,7 @@ interface ServerInfoFormProps {
 | 
				
			|||||||
  onChange: () => void;
 | 
					  onChange: () => void;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class ServerInfoForm extends BaseComponent {
 | 
					export default class ServerInfoForm {
 | 
				
			||||||
  props: ServerInfoFormProps;
 | 
					  props: ServerInfoFormProps;
 | 
				
			||||||
  $serverInfoForm: Element;
 | 
					  $serverInfoForm: Element;
 | 
				
			||||||
  $serverInfoAlias: Element;
 | 
					  $serverInfoAlias: Element;
 | 
				
			||||||
@@ -25,7 +25,6 @@ export default class ServerInfoForm extends BaseComponent {
 | 
				
			|||||||
  $deleteServerButton: Element;
 | 
					  $deleteServerButton: Element;
 | 
				
			||||||
  $openServerButton: Element;
 | 
					  $openServerButton: Element;
 | 
				
			||||||
  constructor(props: ServerInfoFormProps) {
 | 
					  constructor(props: ServerInfoFormProps) {
 | 
				
			||||||
    super();
 | 
					 | 
				
			||||||
    this.props = props;
 | 
					    this.props = props;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,7 +60,7 @@ export default class ServerInfoForm extends BaseComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  initForm(): void {
 | 
					  initForm(): void {
 | 
				
			||||||
    this.$serverInfoForm = this.generateNodeFromHTML(this.templateHTML());
 | 
					    this.$serverInfoForm = generateNodeFromHTML(this.templateHTML());
 | 
				
			||||||
    this.$serverInfoAlias = this.$serverInfoForm.querySelector(
 | 
					    this.$serverInfoAlias = this.$serverInfoForm.querySelector(
 | 
				
			||||||
      ".server-info-alias",
 | 
					      ".server-info-alias",
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user