Добавление title и description в настройки

This commit is contained in:
2023-03-30 15:40:45 +04:00
parent 2728d8511a
commit e22032dab6
13 changed files with 75 additions and 42 deletions
+10 -10
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+39 -6
View File
@@ -1,22 +1,22 @@
/** /**
* Объект настроек шутки * Объект настроек шутки
*/ */
export interface JokeSettings { export class JokeSettings {
/** /**
* Флаг блокировки срабатывания * Флаг блокировки срабатывания
*/ */
enabled: boolean; enabled: boolean = true;
/** /**
* Вероятность срабатывания в процентах * Вероятность срабатывания в процентах
*/ */
chance: number; chance: number = 20;
} }
/** /**
* Объект, описывающий шутку * Объект, описывающий шутку
*/ */
export abstract class Joke { export abstract class Joke<T extends JokeSettings> {
/** /**
* Идентификатор шутки * Идентификатор шутки
*/ */
@@ -35,7 +35,40 @@ export abstract class Joke {
/** /**
* Настройки шутки * Настройки шутки
*/ */
settings: JokeSettings; _settings: T;
/**
* Получение полного списка настроек
*/
get settings(): T {
return this._settings;
}
/**
* Запись новых настроек
*
* @param settings
*/
set settings(settings: T) {
for (const entry of Object.entries(settings)) {
const id = entry[0];
const value = entry[1];
switch (id) {
case "name":
case "title":
this.title = value;
break;
case "description":
this.description = value;
break;
default:
(<any>this._settings)[id] = value;
}
}
}
/** /**
* Проверка вероятности * Проверка вероятности
@@ -78,7 +111,7 @@ export abstract class Joke {
/** /**
* Объект, описывающий шутку, которая может быть остановлена * Объект, описывающий шутку, которая может быть остановлена
*/ */
export abstract class StopableJoke extends Joke { export abstract class StopableJoke<T extends JokeSettings> extends Joke<T> {
/** /**
* Остановка шутки, если возможно * Остановка шутки, если возможно
*/ */
+6 -6
View File
@@ -25,7 +25,7 @@ export class JokerClass {
* *
* @param joke Объект шутки * @param joke Объект шутки
*/ */
add(joke: Joke): void { add(joke: Joke<any>): void {
this.jokes[joke.id] = joke; this.jokes[joke.id] = joke;
} }
@@ -40,22 +40,22 @@ export class JokerClass {
id: string, id: string,
handler: Function, handler: Function,
settings: JokeSettings | null = null settings: JokeSettings | null = null
): Joke { ): Joke<JokeSettings> {
const joke = new (class extends Joke { const joke = new (class extends Joke<JokeSettings> {
id = id; id = id;
title = "Пользовательская шутка"; title = "Пользовательская шутка";
description = "Для шутки не определено описание"; description = "Для шутки не определено описание";
settings: JokeSettings = { chance: 10, enabled: true }; _settings = new JokeSettings();
start() { start() {
handler.call(this, this.settings); handler.call(this, this.settings);
} }
})(); })();
Object.assign(joke.settings, settings ?? {}); joke.settings = settings;
this.add(joke); this.add(joke);
@@ -279,7 +279,7 @@ export class JokerClass {
* Объект хранения шуток * Объект хранения шуток
*/ */
interface JokeMap { interface JokeMap {
[key: string]: Joke; [key: string]: Joke<any>;
} }
/** /**
+2 -2
View File
@@ -9,14 +9,14 @@ import { JokerClass } from "../joker";
* *
* @author Kozhilya * @author Kozhilya
*/ */
export class CarnivalJoke extends Joke { export class CarnivalJoke extends Joke<CarnivalJokeSettings> {
id = "carnival"; id = "carnival";
title = "Карнавал"; title = "Карнавал";
description = "Аватарки приобретают интересные цвета"; description = "Аватарки приобретают интересные цвета";
settings = new CarnivalJokeSettings(); _settings = new CarnivalJokeSettings();
start(): void { start(): void {
$(this.settings.selector).each((_, elem) => { $(this.settings.selector).each((_, elem) => {
+2 -2
View File
@@ -8,14 +8,14 @@ import $ from "jquery";
* *
* @author Kozhilya * @author Kozhilya
*/ */
export class CrazyLettersJoke extends Joke { export class CrazyLettersJoke extends Joke<CrazyLettersJokeSettings> {
id = "crazy_letters"; id = "crazy_letters";
title = "Мама, Я сОшЛа С уМа!"; title = "Мама, Я сОшЛа С уМа!";
description = "иМеНа ЗаБоРчИкОм"; description = "иМеНа ЗаБоРчИкОм";
settings = new CrazyLettersJokeSettings(); _settings = new CrazyLettersJokeSettings();
start(): void { start(): void {
$(this.settings.selector).each((_, elem) => { $(this.settings.selector).each((_, elem) => {
+2 -2
View File
@@ -12,14 +12,14 @@ const cursor_effects = require("cursor-effects");
* @author Tim Holman * @author Tim Holman
* @link https://tholman.com/cursor-effects/ * @link https://tholman.com/cursor-effects/
*/ */
export class CursorEffectsJoke extends StopableJoke { export class CursorEffectsJoke extends StopableJoke<CursorEffectsJokeSettings> {
id = "cursor_effects"; id = "cursor_effects";
title = "Красивый курсор"; title = "Красивый курсор";
description = "Эффекты, следующие за курсором"; description = "Эффекты, следующие за курсором";
settings = new CursorEffectsJokeSettings(); _settings = new CursorEffectsJokeSettings();
active_cursor_effect: any; active_cursor_effect: any;
+2 -2
View File
@@ -9,14 +9,14 @@ import $ from "jquery";
* *
* @author Kozhilya * @author Kozhilya
*/ */
export class HumanitarianHellJoke extends Joke { export class HumanitarianHellJoke extends Joke<HumanitarianHellJokeSettings> {
id = "humanitarian_hell"; id = "humanitarian_hell";
title = "Ад гуманитария"; title = "Ад гуманитария";
description = 'Все "тся" заменяются на "ться", а все "ться" на "тся"'; description = 'Все "тся" заменяются на "ться", а все "ться" на "тся"';
settings = new HumanitarianHellJokeSettings(); _settings = new HumanitarianHellJokeSettings();
processText(text: string): string { processText(text: string): string {
return text.replace(/(ть?ся)/g, function (fnd) { return text.replace(/(ть?ся)/g, function (fnd) {
+3 -3
View File
@@ -10,14 +10,14 @@ import { JokerClass } from "../joker";
* *
* @author Kozhilya * @author Kozhilya
*/ */
export class LetterChaosJoke extends Joke { export class LetterChaosJoke extends Joke<LetterChaosJokeSettings> {
id = "letter_chaos"; id = "letter_chaos";
title = "Буквенный хаос"; title = "Буквенный хаос";
description = "Все буквы в словах, кроме первой и последней, перемешены"; description = "Все буквы в словах, кроме первой и последней, перемешены";
settings = new LetterChaosJokeSettings(); _settings = new LetterChaosJokeSettings();
punctuationSymbols: string[] | null = null; punctuationSymbols: string[] | null = null;
@@ -51,7 +51,7 @@ export class LetterChaosJoke extends Joke {
private processNode(node: any) { private processNode(node: any) {
node.textContent = node.textContent?.replace( node.textContent = node.textContent?.replace(
/([А-Яа-яA-Za-z]+)/gm, /([А-Яа-яA-Za-z]+)/gm,
this.shuffleLetters (_: any, word: string) => this.shuffleLetters(word)
); );
} }
+2 -2
View File
@@ -8,14 +8,14 @@ import $ from "jquery";
* *
* @author Kozhilya * @author Kozhilya
*/ */
export class MirrorJoke extends Joke { export class MirrorJoke extends Joke<MirrorJokeSettings> {
id = "mirror"; id = "mirror";
title = "Зеркало"; title = "Зеркало";
description = "Элементы форума отражаются (по крайней мере, пытаются)"; description = "Элементы форума отражаются (по крайней мере, пытаются)";
settings = new MirrorJokeSettings(); _settings = new MirrorJokeSettings();
start(): void { start(): void {
$(".post, .post h3, .post-links, .post-author, .post-content") $(".post, .post h3, .post-links, .post-author, .post-content")
+2 -2
View File
@@ -8,14 +8,14 @@ import $ from "jquery";
* *
* @author Kozhilya * @author Kozhilya
*/ */
export class ShakeJoke extends StopableJoke { export class ShakeJoke extends StopableJoke<ShakeJokeSettings> {
id = "shake"; id = "shake";
title = "Форумо-трясение"; title = "Форумо-трясение";
description = "Страница форума начинает трястись"; description = "Страница форума начинает трястись";
settings = new ShakeJokeSettings(); _settings = new ShakeJokeSettings();
private interval_id: NodeJS.Timer; private interval_id: NodeJS.Timer;
+2 -2
View File
@@ -9,14 +9,14 @@ import { StupidTitleDefaultVariants } from "../data/stupid_title_variants";
* *
* @author Kozhilya * @author Kozhilya
*/ */
export class StupidTitleJoke extends Joke { export class StupidTitleJoke extends Joke<StupidTitleJokeSettings> {
id = "stupid_title"; id = "stupid_title";
title = "Глупые статусы"; title = "Глупые статусы";
description = "Каждому пользователю даётся новый глупый статус"; description = "Каждому пользователю даётся новый глупый статус";
settings = new StupidTitleJokeSettings(); _settings = new StupidTitleJokeSettings();
private loadedGenders: any = null; private loadedGenders: any = null;
+1 -1
View File
@@ -30,4 +30,4 @@ import { StupidTitleJoke } from "./jokes/stupid_title";
StupidTitleJoke, StupidTitleJoke,
]); ]);
interface JokeClassList extends Array<new () => Joke> {} interface JokeClassList extends Array<new () => Joke<any>> {}