|
|
|
@ -65,6 +65,16 @@ export class RoomInfo {
|
|
|
|
|
const { admins = [], moderators = [] } = room;
|
|
|
|
|
return [...new Set([...admins, ...moderators])];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static getRoomPublicKey(identifier) {
|
|
|
|
|
const server = _RoomInfo.getRoomServer(identifier);
|
|
|
|
|
return server.pubkey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static getRoomCreationDate(identifier) {
|
|
|
|
|
const room = _RoomInfo.getRoom(identifier);
|
|
|
|
|
return new Date(row.created * 1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const dom = {
|
|
|
|
@ -73,9 +83,13 @@ export const dom = {
|
|
|
|
|
tbl_communities_content_rows:
|
|
|
|
|
() => Array.from(dom.tbl_communities()?.rows)?.filter(row => !row.querySelector('th')),
|
|
|
|
|
community_row: (communityID) => document.querySelector(`.room-row[${ATTRIBUTES.ROW.IDENTIFIER}="${communityID}"]`),
|
|
|
|
|
/**
|
|
|
|
|
* @param {HTMLTableRowElement} row
|
|
|
|
|
*/
|
|
|
|
|
row_info: (row) => {
|
|
|
|
|
const dateCreated = new Date(row.getAttribute(ATTRIBUTES.ROW.DATE_CREATED) * 1000);
|
|
|
|
|
const joinLink = row.querySelector('.td_join_url a[href]').getAttribute('href');
|
|
|
|
|
const identifier = row.getAttribute(ATTRIBUTES.ROW.IDENTIFIER);
|
|
|
|
|
const joinURL = new URL(joinLink);
|
|
|
|
|
/** @type {string[]} */
|
|
|
|
|
return {
|
|
|
|
|
language_flag: row.querySelector('.td_language').textContent.trim(),
|
|
|
|
@ -83,16 +97,16 @@ export const dom = {
|
|
|
|
|
description: row.querySelector('.td_description').textContent.trim(),
|
|
|
|
|
users: parseFloat(row.querySelector('.td_users').textContent.trim()),
|
|
|
|
|
preview_link: row.querySelector('.td_preview a[href]').getAttribute('href'),
|
|
|
|
|
join_link: row.querySelector('.td_join_url a[href]').getAttribute('href'),
|
|
|
|
|
join_link: joinLink,
|
|
|
|
|
identifier,
|
|
|
|
|
hostname: row.getAttribute(ATTRIBUTES.ROW.HOSTNAME),
|
|
|
|
|
public_key: row.getAttribute(ATTRIBUTES.ROW.PUBLIC_KEY),
|
|
|
|
|
hostname: `${joinURL.protocol}//${joinURL.host}`,
|
|
|
|
|
public_key: RoomInfo.getRoomPublicKey(identifier),
|
|
|
|
|
staff: RoomInfo.getRoomStaff(identifier),
|
|
|
|
|
tags: RoomInfo.getRoomTags(identifier),
|
|
|
|
|
icon: row.getAttribute(ATTRIBUTES.ROW.ROOM_ICON),
|
|
|
|
|
has_icon: row.getAttribute(ATTRIBUTES.ROW.ROOM_ICON).trim() != "",
|
|
|
|
|
icon_safety: row.getAttribute(ATTRIBUTES.ROW.ROOM_ICON_SAFETY),
|
|
|
|
|
date_created: dateCreated,
|
|
|
|
|
date_created: RoomInfo.getRoomCreationDate(identifier),
|
|
|
|
|
creation_datestring: dateCreated.toLocaleDateString(undefined, {dateStyle: "medium"})
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
@ -146,9 +160,8 @@ export const COMPARISON = {
|
|
|
|
|
export const ATTRIBUTES = {
|
|
|
|
|
ROW: {
|
|
|
|
|
TAGS: 'data-tags',
|
|
|
|
|
IDENTIFIER: 'data-identifier',
|
|
|
|
|
IDENTIFIER: 'data-id',
|
|
|
|
|
PUBLIC_KEY: 'data-pubkey',
|
|
|
|
|
HOSTNAME: 'data-hostname',
|
|
|
|
|
STAFF_DATA: 'data-staff',
|
|
|
|
|
ROOM_ICON: 'data-icon',
|
|
|
|
|
ROOM_ICON_SAFETY: 'data-icon-safe',
|
|
|
|
@ -220,23 +233,24 @@ export function columnIsSortable(column) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {Record<string, (el: HTMLTableCellElement) => any>}
|
|
|
|
|
* @type {Record<string, (el: HTMLTableCellElement, row: HTMLTableRowElement) => any>}
|
|
|
|
|
*/
|
|
|
|
|
const TRANSFORMATION = {
|
|
|
|
|
numeric: (el) => parseInt(el.innerText),
|
|
|
|
|
casefold: (el) => el.innerText.toLowerCase().trim(),
|
|
|
|
|
getSortKey: (el) => el.getAttribute("data-sort-by")
|
|
|
|
|
getName: (_, row) => dom.row_info(row).name.toLowerCase(),
|
|
|
|
|
getRoomPublicKey: (_, row) => dom.row_info(row).public_key
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {Dictionary<number, (el: HTMLTableCellElement) => any>}
|
|
|
|
|
* @type {Dictionary<number, (el: HTMLTableCellElement, row: HTMLTableRowElement) => any>}
|
|
|
|
|
*/
|
|
|
|
|
export const COLUMN_TRANSFORMATION = {
|
|
|
|
|
[COLUMN.USERS]: TRANSFORMATION.numeric,
|
|
|
|
|
[COLUMN.IDENTIFIER]: TRANSFORMATION.casefold,
|
|
|
|
|
[COLUMN.NAME]: TRANSFORMATION.getSortKey,
|
|
|
|
|
[COLUMN.NAME]: TRANSFORMATION.getName,
|
|
|
|
|
[COLUMN.DESCRIPTION]: TRANSFORMATION.casefold,
|
|
|
|
|
[COLUMN.SERVER_ICON]: TRANSFORMATION.getSortKey
|
|
|
|
|
[COLUMN.SERVER_ICON]: TRANSFORMATION.getRoomPublicKey
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|