Добавление 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 Объект шутки
*/
add(joke: Joke): void {
add(joke: Joke<any>): void {
this.jokes[joke.id] = joke;
}
@@ -40,22 +40,22 @@ export class JokerClass {
id: string,
handler: Function,
settings: JokeSettings | null = null
): Joke {
const joke = new (class extends Joke {
): Joke<JokeSettings> {
const joke = new (class extends Joke<JokeSettings> {
id = id;
title = "Пользовательская шутка";
description = "Для шутки не определено описание";
settings: JokeSettings = { chance: 10, enabled: true };
_settings = new JokeSettings();
start() {
handler.call(this, this.settings);
}
})();
Object.assign(joke.settings, settings ?? {});
joke.settings = settings;
this.add(joke);
@@ -279,7 +279,7 @@ export class JokerClass {
* Объект хранения шуток
*/
interface JokeMap {
[key: string]: Joke;
[key: string]: Joke<any>;
}
/**
+2 -2
View File
@@ -9,14 +9,14 @@ import { JokerClass } from "../joker";
*
* @author Kozhilya
*/
export class CarnivalJoke extends Joke {
export class CarnivalJoke extends Joke<CarnivalJokeSettings> {
id = "carnival";
title = "Карнавал";
description = "Аватарки приобретают интересные цвета";
settings = new CarnivalJokeSettings();
_settings = new CarnivalJokeSettings();
start(): void {
$(this.settings.selector).each((_, elem) => {
+2 -2
View File
@@ -8,14 +8,14 @@ import $ from "jquery";
*
* @author Kozhilya
*/
export class CrazyLettersJoke extends Joke {
export class CrazyLettersJoke extends Joke<CrazyLettersJokeSettings> {
id = "crazy_letters";
title = "Мама, Я сОшЛа С уМа!";
description = "иМеНа ЗаБоРчИкОм";
settings = new CrazyLettersJokeSettings();
_settings = new CrazyLettersJokeSettings();
start(): void {
$(this.settings.selector).each((_, elem) => {
+2 -2
View File
@@ -12,14 +12,14 @@ const cursor_effects = require("cursor-effects");
* @author Tim Holman
* @link https://tholman.com/cursor-effects/
*/
export class CursorEffectsJoke extends StopableJoke {
export class CursorEffectsJoke extends StopableJoke<CursorEffectsJokeSettings> {
id = "cursor_effects";
title = "Красивый курсор";
description = "Эффекты, следующие за курсором";
settings = new CursorEffectsJokeSettings();
_settings = new CursorEffectsJokeSettings();
active_cursor_effect: any;
+2 -2
View File
@@ -9,14 +9,14 @@ import $ from "jquery";
*
* @author Kozhilya
*/
export class HumanitarianHellJoke extends Joke {
export class HumanitarianHellJoke extends Joke<HumanitarianHellJokeSettings> {
id = "humanitarian_hell";
title = "Ад гуманитария";
description = 'Все "тся" заменяются на "ться", а все "ться" на "тся"';
settings = new HumanitarianHellJokeSettings();
_settings = new HumanitarianHellJokeSettings();
processText(text: string): string {
return text.replace(/(ть?ся)/g, function (fnd) {
+3 -3
View File
@@ -10,14 +10,14 @@ import { JokerClass } from "../joker";
*
* @author Kozhilya
*/
export class LetterChaosJoke extends Joke {
export class LetterChaosJoke extends Joke<LetterChaosJokeSettings> {
id = "letter_chaos";
title = "Буквенный хаос";
description = "Все буквы в словах, кроме первой и последней, перемешены";
settings = new LetterChaosJokeSettings();
_settings = new LetterChaosJokeSettings();
punctuationSymbols: string[] | null = null;
@@ -51,7 +51,7 @@ export class LetterChaosJoke extends Joke {
private processNode(node: any) {
node.textContent = node.textContent?.replace(
/([А-Яа-я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
*/
export class MirrorJoke extends Joke {
export class MirrorJoke extends Joke<MirrorJokeSettings> {
id = "mirror";
title = "Зеркало";
description = "Элементы форума отражаются (по крайней мере, пытаются)";
settings = new MirrorJokeSettings();
_settings = new MirrorJokeSettings();
start(): void {
$(".post, .post h3, .post-links, .post-author, .post-content")
+2 -2
View File
@@ -8,14 +8,14 @@ import $ from "jquery";
*
* @author Kozhilya
*/
export class ShakeJoke extends StopableJoke {
export class ShakeJoke extends StopableJoke<ShakeJokeSettings> {
id = "shake";
title = "Форумо-трясение";
description = "Страница форума начинает трястись";
settings = new ShakeJokeSettings();
_settings = new ShakeJokeSettings();
private interval_id: NodeJS.Timer;
+2 -2
View File
@@ -9,14 +9,14 @@ import { StupidTitleDefaultVariants } from "../data/stupid_title_variants";
*
* @author Kozhilya
*/
export class StupidTitleJoke extends Joke {
export class StupidTitleJoke extends Joke<StupidTitleJokeSettings> {
id = "stupid_title";
title = "Глупые статусы";
description = "Каждому пользователю даётся новый глупый статус";
settings = new StupidTitleJokeSettings();
_settings = new StupidTitleJokeSettings();
private loadedGenders: any = null;
+1 -1
View File
@@ -30,4 +30,4 @@ import { StupidTitleJoke } from "./jokes/stupid_title";
StupidTitleJoke,
]);
interface JokeClassList extends Array<new () => Joke> {}
interface JokeClassList extends Array<new () => Joke<any>> {}