Больше шуток
This commit is contained in:
@@ -1,174 +0,0 @@
|
||||
## Classes
|
||||
|
||||
<dl>
|
||||
<dt><a href="#AprilFoolsJokeClass">AprilFoolsJokeClass</a></dt>
|
||||
<dd><p>Блок обработки перво-апрельских шуток</p></dd>
|
||||
<dt><a href="#Joke">Joke</a></dt>
|
||||
<dd><p>Объект, описывающий шутку</p></dd>
|
||||
<dt><a href="#ShakeJoke">ShakeJoke</a></dt>
|
||||
<dd><p>Форумо-трясение</p>
|
||||
<p>Страница форума начинает трястись</p></dd>
|
||||
</dl>
|
||||
|
||||
## Members
|
||||
|
||||
<dl>
|
||||
<dt><a href="#AprilFoolsJokeClass">AprilFoolsJokeClass</a></dt>
|
||||
<dd><p>Объект хранения шуток</p></dd>
|
||||
<dt><a href="#Joke">Joke</a></dt>
|
||||
<dd><p>Объект, описывающий шутку, которая может быть остановлена</p></dd>
|
||||
</dl>
|
||||
|
||||
<a name="AprilFoolsJokeClass"></a>
|
||||
|
||||
## AprilFoolsJokeClass
|
||||
<p>Блок обработки перво-апрельских шуток</p>
|
||||
|
||||
**Kind**: global class
|
||||
**Author**: Kozhilya
|
||||
|
||||
* [AprilFoolsJokeClass](#AprilFoolsJokeClass)
|
||||
* [.add(joke)](#AprilFoolsJokeClass+add)
|
||||
* [.setSettings(settings)](#AprilFoolsJokeClass+setSettings)
|
||||
* [.check(chance)](#AprilFoolsJokeClass+check) ⇒ <code>boolean</code>
|
||||
* [.start(id, forced)](#AprilFoolsJokeClass+start)
|
||||
* [.startAll()](#AprilFoolsJokeClass+startAll)
|
||||
|
||||
<a name="AprilFoolsJokeClass+add"></a>
|
||||
|
||||
### aprilFoolsJokeClass.add(joke)
|
||||
<p>Добавление шутки</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
|
||||
| Param |
|
||||
| --- |
|
||||
| joke |
|
||||
|
||||
<a name="AprilFoolsJokeClass+setSettings"></a>
|
||||
|
||||
### aprilFoolsJokeClass.setSettings(settings)
|
||||
<p>Запись новых настроек</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
|
||||
| Param |
|
||||
| --- |
|
||||
| settings |
|
||||
|
||||
<a name="AprilFoolsJokeClass+check"></a>
|
||||
|
||||
### aprilFoolsJokeClass.check(chance) ⇒ <code>boolean</code>
|
||||
<p>Проверка вероятности</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
**Returns**: <code>boolean</code> - <p>Флаг срабатывания (true - сработало)</p>
|
||||
|
||||
| Param | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| chance | <code>number</code> | <p>Вероятность срабатывания</p> |
|
||||
|
||||
<a name="AprilFoolsJokeClass+start"></a>
|
||||
|
||||
### aprilFoolsJokeClass.start(id, forced)
|
||||
<p>Запуск шутки</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
|
||||
| Param | Type | Default |
|
||||
| --- | --- | --- |
|
||||
| id | | |
|
||||
| forced | <code>boolean</code> | <code>false</code> |
|
||||
|
||||
<a name="AprilFoolsJokeClass+startAll"></a>
|
||||
|
||||
### aprilFoolsJokeClass.startAll()
|
||||
<p>Запуск всех шуток</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
<a name="Joke"></a>
|
||||
|
||||
## Joke
|
||||
<p>Объект, описывающий шутку</p>
|
||||
|
||||
**Kind**: global class
|
||||
<a name="ShakeJoke"></a>
|
||||
|
||||
## ShakeJoke
|
||||
<p>Форумо-трясение</p>
|
||||
<p>Страница форума начинает трястись</p>
|
||||
|
||||
**Kind**: global class
|
||||
**Author**: Kozhilya
|
||||
<a name="AprilFoolsJokeClass"></a>
|
||||
|
||||
## AprilFoolsJokeClass
|
||||
<p>Объект хранения шуток</p>
|
||||
|
||||
**Kind**: global variable
|
||||
|
||||
* [AprilFoolsJokeClass](#AprilFoolsJokeClass)
|
||||
* [.add(joke)](#AprilFoolsJokeClass+add)
|
||||
* [.setSettings(settings)](#AprilFoolsJokeClass+setSettings)
|
||||
* [.check(chance)](#AprilFoolsJokeClass+check) ⇒ <code>boolean</code>
|
||||
* [.start(id, forced)](#AprilFoolsJokeClass+start)
|
||||
* [.startAll()](#AprilFoolsJokeClass+startAll)
|
||||
|
||||
<a name="AprilFoolsJokeClass+add"></a>
|
||||
|
||||
### aprilFoolsJokeClass.add(joke)
|
||||
<p>Добавление шутки</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
|
||||
| Param |
|
||||
| --- |
|
||||
| joke |
|
||||
|
||||
<a name="AprilFoolsJokeClass+setSettings"></a>
|
||||
|
||||
### aprilFoolsJokeClass.setSettings(settings)
|
||||
<p>Запись новых настроек</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
|
||||
| Param |
|
||||
| --- |
|
||||
| settings |
|
||||
|
||||
<a name="AprilFoolsJokeClass+check"></a>
|
||||
|
||||
### aprilFoolsJokeClass.check(chance) ⇒ <code>boolean</code>
|
||||
<p>Проверка вероятности</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
**Returns**: <code>boolean</code> - <p>Флаг срабатывания (true - сработало)</p>
|
||||
|
||||
| Param | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| chance | <code>number</code> | <p>Вероятность срабатывания</p> |
|
||||
|
||||
<a name="AprilFoolsJokeClass+start"></a>
|
||||
|
||||
### aprilFoolsJokeClass.start(id, forced)
|
||||
<p>Запуск шутки</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
|
||||
| Param | Type | Default |
|
||||
| --- | --- | --- |
|
||||
| id | | |
|
||||
| forced | <code>boolean</code> | <code>false</code> |
|
||||
|
||||
<a name="AprilFoolsJokeClass+startAll"></a>
|
||||
|
||||
### aprilFoolsJokeClass.startAll()
|
||||
<p>Запуск всех шуток</p>
|
||||
|
||||
**Kind**: instance method of [<code>AprilFoolsJokeClass</code>](#AprilFoolsJokeClass)
|
||||
<a name="Joke"></a>
|
||||
|
||||
## Joke
|
||||
<p>Объект, описывающий шутку, которая может быть остановлена</p>
|
||||
|
||||
**Kind**: global variable
|
||||
+11
-11
@@ -6,6 +6,16 @@ import { Joke, JokeSettings } from "./joke";
|
||||
* @author Kozhilya
|
||||
*/
|
||||
export class AprilFoolsJokeClass {
|
||||
/**
|
||||
* Проверка вероятности
|
||||
*
|
||||
* @param {number} chance Вероятность срабатывания
|
||||
* @returns {boolean} Флаг срабатывания (true - сработало)
|
||||
*/
|
||||
static check(chance: number): boolean {
|
||||
return Math.random() < 0.01 * chance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавление шутки
|
||||
*
|
||||
@@ -29,16 +39,6 @@ export class AprilFoolsJokeClass {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка вероятности
|
||||
*
|
||||
* @param {number} chance Вероятность срабатывания
|
||||
* @returns {boolean} Флаг срабатывания (true - сработало)
|
||||
*/
|
||||
check(chance: number): boolean {
|
||||
return Math.random() < 0.01 * chance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Запуск шутки
|
||||
*
|
||||
@@ -51,7 +51,7 @@ export class AprilFoolsJokeClass {
|
||||
|
||||
const joke = this.jokes[id];
|
||||
|
||||
if (!forced && !this.check(joke.settings.chance)) {
|
||||
if (!forced && !AprilFoolsJokeClass.check(joke.settings.chance)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
import { Joke, JokeSettings, StopableJoke } from "../joke";
|
||||
import $ from "jquery";
|
||||
import { AprilFoolsJokeClass } from "../handler";
|
||||
|
||||
/**
|
||||
* **Зеркало**
|
||||
*
|
||||
* Элементы форума отражаются (по крайней мере, пытаются)
|
||||
*
|
||||
* @author Kozhilya
|
||||
*/
|
||||
export class CarnivalJoke extends Joke {
|
||||
settings: CarnivalJokeSettings;
|
||||
|
||||
start(): void {
|
||||
$(this.settings.selector).each((_, elem) => {
|
||||
const filters: string[] = [];
|
||||
|
||||
for (const entry of Object.entries(this.settings.variants)) {
|
||||
if (!AprilFoolsJokeClass.check(this.settings.variant_chance)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
filters.push(entry[0].replace('{0}', Math.round(Math.random() * entry[1]).toString()));
|
||||
}
|
||||
|
||||
if (filters.length > 0) {
|
||||
$(elem).css('filter', filters.join(' '));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class CarnivalJokeSettings implements JokeSettings {
|
||||
chance: number = 30;
|
||||
|
||||
/**
|
||||
* Селектор всех элементов, которые будут трястись
|
||||
*/
|
||||
selector: string = 'img[src*="/avatars/"]';
|
||||
|
||||
/**
|
||||
* Вероятность применения фильтра
|
||||
*/
|
||||
variant_chance: number = 20;
|
||||
|
||||
/**
|
||||
* Список фильтров и диапозона случайных параметров
|
||||
*/
|
||||
variants: CarnivalJokeFilters = {
|
||||
'sepia({0}%)': 100,
|
||||
'saturate({0}%)': 100,
|
||||
'hue-rotate({0}deg)': 360,
|
||||
'invert({0}%)': 100,
|
||||
}
|
||||
}
|
||||
|
||||
export interface CarnivalJokeFilters {
|
||||
[key: string]: number;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import { Joke, JokeSettings, StopableJoke } from "../joke";
|
||||
import $ from "jquery";
|
||||
|
||||
/**
|
||||
* **Ад гуманитария**
|
||||
*
|
||||
* Все "тся" заменяются на "ться", а все "ться" на "тся".
|
||||
*
|
||||
* @author Kozhilya
|
||||
*/
|
||||
export class CrazyLettersJoke extends Joke {
|
||||
settings: CrazyLettersJokeSettings;
|
||||
|
||||
start(): void {
|
||||
$(this.settings.selector).each((_, elem) => {
|
||||
let text = $(this).text();
|
||||
let result = '';
|
||||
|
||||
for (let i = 0; i < text.length; i++) {
|
||||
result += text[i][(i % 2) ? 'toLowerCase' : 'toUpperCase']();
|
||||
}
|
||||
|
||||
$(this).text(result);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class CrazyLettersJokeSettings implements JokeSettings {
|
||||
chance: number = 20;
|
||||
|
||||
/**
|
||||
* Селектор всех элементов, которые будут затронуты
|
||||
*/
|
||||
selector: string = '.pa-author a';
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
import { Joke, JokeSettings, StopableJoke } from "../joke";
|
||||
import $ from "jquery";
|
||||
|
||||
/**
|
||||
* **Ад гуманитария**
|
||||
*
|
||||
* Все "тся" заменяются на "ться", а все "ться" на "тся".
|
||||
*
|
||||
* @author Kozhilya
|
||||
*/
|
||||
export class HumanitarianHellJoke extends Joke {
|
||||
settings: HumanitarianHellJokeSettings;
|
||||
|
||||
start(): void {
|
||||
$(this.settings.selector).each(function () {
|
||||
$(this).html($(this).html().replace(/(ть?ся)/g, function (fnd) {
|
||||
return (fnd.indexOf('ь') > 0) ? 'тся' : 'ться';
|
||||
}));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class HumanitarianHellJokeSettings implements JokeSettings {
|
||||
chance: number = 20;
|
||||
|
||||
/**
|
||||
* Селектор всех элементов, которые будут затронуты
|
||||
*/
|
||||
selector: string = '.post-content';
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import { Joke, JokeSettings, StopableJoke } from "../joke";
|
||||
import $ from "jquery";
|
||||
|
||||
/**
|
||||
* **Зеркало**
|
||||
*
|
||||
* Элементы форума отражаются (по крайней мере, пытаются)
|
||||
*
|
||||
* @author Kozhilya
|
||||
*/
|
||||
export class MirrorJoke extends Joke {
|
||||
settings: MirrorJokeSettings;
|
||||
|
||||
start(): void {
|
||||
$('.post, .post h3, .post-links, .post-author, .post-content')
|
||||
.css('transform', 'scaleX(-1)').css('-moz-transform', 'scaleX(-1)').css('-moz-transform', 'scaleX(-1)').css('filter', 'FlipH').css('-ms-filter', '"FlipH"');
|
||||
$('#pun-title #title-logo').animate('')
|
||||
$('.post-links, .post-links ul, .post h3 span').css('margin-left', '0');
|
||||
$('.post h3 span').css('margin-right', '25em');
|
||||
}
|
||||
}
|
||||
|
||||
export class MirrorJokeSettings implements JokeSettings {
|
||||
chance: number = 30;
|
||||
}
|
||||
+3
-3
@@ -1,7 +1,8 @@
|
||||
import { Joke, JokeSettings, StopableJoke } from "../joke";
|
||||
import $ from "jquery";
|
||||
|
||||
/**
|
||||
* Форумо-трясение
|
||||
* **Форумо-трясение**
|
||||
*
|
||||
* Страница форума начинает трястись
|
||||
*
|
||||
@@ -17,7 +18,6 @@ export class ShakeJoke extends StopableJoke {
|
||||
|
||||
private data_name: string = 'april-fools-shake';
|
||||
|
||||
|
||||
rand(a: number): number {
|
||||
return a + this.settings.force * (Math.random() * 2 - 1);
|
||||
}
|
||||
@@ -85,6 +85,6 @@ export class ShakeJokeSettings implements JokeSettings {
|
||||
force: number = 0.5;
|
||||
}
|
||||
|
||||
interface ShakeJokeMargin {
|
||||
export interface ShakeJokeMargin {
|
||||
[key: string]: number;
|
||||
}
|
||||
+2
-1
@@ -4,7 +4,8 @@
|
||||
"lib": ["es2017", "dom"],
|
||||
"rootDir": "./src/",
|
||||
"outFile": "./bin/april-fools.js",
|
||||
"moduleResolution": "nodenext"
|
||||
"moduleResolution": "nodenext",
|
||||
"esModuleInterop": true
|
||||
},
|
||||
"files": [
|
||||
"src/main.ts"
|
||||
|
||||
Reference in New Issue
Block a user