From bd45d503e5d007e730f4e81dccd7e7864c9a85cc Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 6 Aug 2020 14:58:01 +0200 Subject: Reorganize shared models --- .../core-utils/abuse/abuse-predefined-reasons.ts | 14 +++ shared/core-utils/abuse/index.ts | 1 + shared/core-utils/i18n/i18n.ts | 105 +++++++++++++++++++++ shared/core-utils/i18n/index.ts | 1 + shared/core-utils/users/index.ts | 1 + shared/core-utils/users/user-role.ts | 35 +++++++ 6 files changed, 157 insertions(+) create mode 100644 shared/core-utils/abuse/abuse-predefined-reasons.ts create mode 100644 shared/core-utils/abuse/index.ts create mode 100644 shared/core-utils/i18n/i18n.ts create mode 100644 shared/core-utils/i18n/index.ts create mode 100644 shared/core-utils/users/index.ts create mode 100644 shared/core-utils/users/user-role.ts (limited to 'shared/core-utils') diff --git a/shared/core-utils/abuse/abuse-predefined-reasons.ts b/shared/core-utils/abuse/abuse-predefined-reasons.ts new file mode 100644 index 000000000..9967e54dd --- /dev/null +++ b/shared/core-utils/abuse/abuse-predefined-reasons.ts @@ -0,0 +1,14 @@ +import { AbusePredefinedReasons, AbusePredefinedReasonsString } from '../../models/moderation/abuse/abuse-reason.model' + +export const abusePredefinedReasonsMap: { + [key in AbusePredefinedReasonsString]: AbusePredefinedReasons +} = { + violentOrRepulsive: AbusePredefinedReasons.VIOLENT_OR_REPULSIVE, + hatefulOrAbusive: AbusePredefinedReasons.HATEFUL_OR_ABUSIVE, + spamOrMisleading: AbusePredefinedReasons.SPAM_OR_MISLEADING, + privacy: AbusePredefinedReasons.PRIVACY, + rights: AbusePredefinedReasons.RIGHTS, + serverRules: AbusePredefinedReasons.SERVER_RULES, + thumbnails: AbusePredefinedReasons.THUMBNAILS, + captions: AbusePredefinedReasons.CAPTIONS +} diff --git a/shared/core-utils/abuse/index.ts b/shared/core-utils/abuse/index.ts new file mode 100644 index 000000000..244b83cff --- /dev/null +++ b/shared/core-utils/abuse/index.ts @@ -0,0 +1 @@ +export * from './abuse-predefined-reasons' diff --git a/shared/core-utils/i18n/i18n.ts b/shared/core-utils/i18n/i18n.ts new file mode 100644 index 000000000..9ad0f456d --- /dev/null +++ b/shared/core-utils/i18n/i18n.ts @@ -0,0 +1,105 @@ +export const LOCALE_FILES = [ 'player', 'server' ] + +export const I18N_LOCALES = { + // Always first to avoid issues when using express acceptLanguages function when no accept language header is set + 'en-US': 'English', + + 'ar': 'العربية', + 'ca-ES': 'Català', + 'cs-CZ': 'Čeština', + 'de-DE': 'Deutsch', + 'el-GR': 'ελληνικά', + 'eo': 'Esperanto', + 'es-ES': 'Español', + 'eu-ES': 'Euskara', + 'fi-FI': 'suomi', + 'fr-FR': 'Français', + 'gd': 'Gàidhlig', + 'hu-HU': 'magyar', + 'it-IT': 'Italiano', + 'ja-JP': '日本語', + 'kab': 'Taqbaylit', + 'nl-NL': 'Nederlands', + 'oc': 'Occitan', + 'pl-PL': 'Polski', + 'pt-BR': 'Português (Brasil)', + 'pt-PT': 'Português (Portugal)', + 'ru-RU': 'русский', + 'sv-SE': 'svenska', + 'th-TH': 'ไทย', + 'vi-VN': 'Tiếng Việt', + 'zh-Hans-CN': '简体中文(中国)', + 'zh-Hant-TW': '繁體中文(台灣)' +} + +const I18N_LOCALE_ALIAS = { + 'ar-001': 'ar', + 'ca': 'ca-ES', + 'cs': 'cs-CZ', + 'de': 'de-DE', + 'el': 'el-GR', + 'en': 'en-US', + 'es': 'es-ES', + 'eu': 'eu-ES', + 'fi': 'fi-FI', + 'fr': 'fr-FR', + 'hu': 'hu-HU', + 'it': 'it-IT', + 'ja': 'ja-JP', + 'nl': 'nl-NL', + 'pl': 'pl-PL', + 'pt': 'pt-BR', + 'ru': 'ru-RU', + 'sv': 'sv-SE', + 'th': 'th-TH', + 'vi': 'vi-VN', + 'zh-CN': 'zh-Hans-CN', + 'zh-Hans': 'zh-Hans-CN', + 'zh-Hant': 'zh-Hant-TW', + 'zh-TW': 'zh-Hant-TW', + 'zh': 'zh-Hans-CN' +} + +export const POSSIBLE_LOCALES = Object.keys(I18N_LOCALES) + .concat(Object.keys(I18N_LOCALE_ALIAS)) + +export function getDefaultLocale () { + return 'en-US' +} + +export function isDefaultLocale (locale: string) { + return getCompleteLocale(locale) === getCompleteLocale(getDefaultLocale()) +} + +export function peertubeTranslate (str: string, translations?: { [ id: string ]: string }) { + // FIXME: remove disable rule when the client is upgraded to typescript 3.7 + // eslint-disable-next-line + return translations && translations[str] ? translations[str] : str +} + +const possiblePaths = POSSIBLE_LOCALES.map(l => '/' + l) +export function is18nPath (path: string) { + return possiblePaths.includes(path) +} + +export function is18nLocale (locale: string) { + return POSSIBLE_LOCALES.includes(locale) +} + +export function getCompleteLocale (locale: string) { + if (!locale) return locale + + if (I18N_LOCALE_ALIAS[locale]) return I18N_LOCALE_ALIAS[locale] + + return locale +} + +export function getShortLocale (locale: string) { + if (locale.includes('-') === false) return locale + + return locale.split('-')[0] +} + +export function buildFileLocale (locale: string) { + return getCompleteLocale(locale) +} diff --git a/shared/core-utils/i18n/index.ts b/shared/core-utils/i18n/index.ts new file mode 100644 index 000000000..8f7cbe2c7 --- /dev/null +++ b/shared/core-utils/i18n/index.ts @@ -0,0 +1 @@ +export * from './i18n' diff --git a/shared/core-utils/users/index.ts b/shared/core-utils/users/index.ts new file mode 100644 index 000000000..1cbf0af1b --- /dev/null +++ b/shared/core-utils/users/index.ts @@ -0,0 +1 @@ +export * from './user-role' diff --git a/shared/core-utils/users/user-role.ts b/shared/core-utils/users/user-role.ts new file mode 100644 index 000000000..2b322faf3 --- /dev/null +++ b/shared/core-utils/users/user-role.ts @@ -0,0 +1,35 @@ +import { UserRight, UserRole } from '../../models/users' + +export const USER_ROLE_LABELS: { [ id in UserRole ]: string } = { + [UserRole.USER]: 'User', + [UserRole.MODERATOR]: 'Moderator', + [UserRole.ADMINISTRATOR]: 'Administrator' +} + +const userRoleRights: { [ id in UserRole ]: UserRight[] } = { + [UserRole.ADMINISTRATOR]: [ + UserRight.ALL + ], + + [UserRole.MODERATOR]: [ + UserRight.MANAGE_VIDEO_BLACKLIST, + UserRight.MANAGE_ABUSES, + UserRight.REMOVE_ANY_VIDEO, + UserRight.REMOVE_ANY_VIDEO_CHANNEL, + UserRight.REMOVE_ANY_VIDEO_PLAYLIST, + UserRight.REMOVE_ANY_VIDEO_COMMENT, + UserRight.UPDATE_ANY_VIDEO, + UserRight.SEE_ALL_VIDEOS, + UserRight.MANAGE_ACCOUNTS_BLOCKLIST, + UserRight.MANAGE_SERVERS_BLOCKLIST, + UserRight.MANAGE_USERS + ], + + [UserRole.USER]: [] +} + +export function hasUserRight (userRole: UserRole, userRight: UserRight) { + const userRights = userRoleRights[userRole] + + return userRights.includes(UserRight.ALL) || userRights.includes(userRight) +} -- cgit v1.2.3