silentium 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/beforeRelease.sh +11 -0
- package/dist/silentium.cjs +39 -63
- package/dist/silentium.cjs.map +1 -1
- package/dist/silentium.d.ts +34 -53
- package/dist/silentium.js +40 -63
- package/dist/silentium.js.map +1 -1
- package/dist/silentium.min.js +1 -1
- package/dist/silentium.min.mjs +1 -1
- package/dist/silentium.min.mjs.map +1 -1
- package/dist/silentium.mjs +40 -63
- package/dist/silentium.mjs.map +1 -1
- package/docs/assets/css/base.css +15 -0
- package/docs/assets/css/custom.css +72 -0
- package/docs/assets/img/logo.svg +1522 -0
- package/docs/assets/js/components/linkDynamic.mjs +14 -0
- package/docs/assets/js/components/linkReloadable.mjs +17 -0
- package/docs/assets/js/components.mjs +2 -0
- package/docs/assets/js/index.mjs +74 -0
- package/docs/assets/js/lib/StyleFetched.mjs +19 -0
- package/docs/build.sh +7 -3
- package/docs/buildRoutes.sh +15 -0
- package/docs/favicon.ico +0 -0
- package/docs/index-dev.html +4 -80
- package/docs/index.html +6 -82
- package/docs/pages/compatibility/elegant-objects.html +4 -4
- package/docs/pages/examples/errors.html +2 -2
- package/docs/pages/examples.html +12 -14
- package/docs/pages/guest/guest-applied.html +9 -5
- package/docs/pages/guest/guest-cast.html +20 -26
- package/docs/pages/guest/guest-disposable.html +32 -42
- package/docs/pages/guest/guest-executor-applied.html +21 -17
- package/docs/pages/guest/guest-object.html +22 -26
- package/docs/pages/guest/guest-pool.html +17 -18
- package/docs/pages/guest/guest-sync.html +7 -2
- package/docs/pages/guest/index.html +18 -29
- package/docs/pages/guest.html +112 -18
- package/docs/pages/index.html +24 -52
- package/docs/pages/integrations/vue.html +5 -8
- package/docs/pages/patron/index.html +14 -20
- package/docs/pages/patron/patron-applied.html +2 -2
- package/docs/pages/patron/patron-executor-applied.html +2 -2
- package/docs/pages/patron/patron-once.html +12 -18
- package/docs/pages/patron/patron-pool.html +12 -18
- package/docs/pages/patron.html +137 -16
- package/docs/pages/philosofy.html +30 -49
- package/docs/pages/source/index.html +11 -14
- package/docs/pages/source/source-all.html +9 -12
- package/docs/pages/source/source-applied.html +2 -2
- package/docs/pages/source/source-dynamic.html +3 -3
- package/docs/pages/source/source-executor-applied.html +2 -2
- package/docs/pages/source/source-map.html +5 -5
- package/docs/pages/source/source-once.html +2 -2
- package/docs/pages/source/source-race.html +10 -10
- package/docs/pages/source/source-sequence.html +2 -2
- package/docs/pages/source/source-with-pool.html +8 -11
- package/docs/pages/source/source.html +11 -14
- package/docs/pages/source.html +162 -31
- package/docs/pages/terminology/source.html +5 -9
- package/docs/pages/terminology.html +12 -18
- package/docs/pages/utils.html +33 -21
- package/docs/routes.json +1 -0
- package/docs/template.html +4 -80
- package/eslint.config.mjs +3 -0
- package/package.json +2 -2
- package/src/Guest/Guest.ts +3 -3
- package/src/Guest/GuestApplied.ts +1 -1
- package/src/Guest/GuestCast.ts +1 -1
- package/src/Guest/GuestDisposable.ts +1 -1
- package/src/Guest/GuestExecutorApplied.ts +1 -1
- package/src/Guest/GuestObject.ts +1 -1
- package/src/Guest/GuestPool.ts +1 -1
- package/src/Guest/GuestSync.ts +1 -1
- package/src/Patron/Patron.ts +2 -2
- package/src/Patron/PatronApplied.ts +1 -1
- package/src/Patron/PatronExecutorApplied.ts +1 -1
- package/src/Patron/PatronOnce.ts +1 -1
- package/src/Patron/PatronPool.ts +4 -4
- package/src/Private/Private.ts +1 -1
- package/src/Source/Source.ts +4 -4
- package/src/Source/SourceAll.ts +1 -1
- package/src/Source/SourceApplied.ts +1 -1
- package/src/Source/SourceDynamic.ts +1 -1
- package/src/Source/SourceExecutorApplied.ts +1 -1
- package/src/Source/SourceMap.ts +1 -1
- package/src/Source/SourceOnce.ts +1 -1
- package/src/Source/SourceRace.ts +1 -1
- package/src/Source/SourceSequence.ts +1 -1
- package/src/Source/SourceWithPool.ts +1 -1
- package/src/index.ts +0 -1
- package/docs/pages/source/source-active.html +0 -120
- package/src/Source/SourceActive.test.ts +0 -13
- package/src/Source/SourceActive.ts +0 -41
package/docs/pages/index.html
CHANGED
|
@@ -6,67 +6,39 @@
|
|
|
6
6
|
<h1
|
|
7
7
|
class="title-font sm:text-4xl text-3xl mb-4 font-medium text-gray-600"
|
|
8
8
|
>
|
|
9
|
-
|
|
9
|
+
Silentium = молчание
|
|
10
10
|
</h1>
|
|
11
|
+
<p class="mb-4 leading-relaxed">
|
|
12
|
+
С латинского языка <a class="link" href="https://en.wiktionary.org/wiki/silentium" target="_blank">silentium переводится как молчание</a>. Основная особенность библиотеки
|
|
13
|
+
silentium заключается в том, что объект, если у него нет хорошего ответа на вопрос
|
|
14
|
+
может не давать плохой ответ, например - null. Такой подход позволяет объектам лучше контроллировать
|
|
15
|
+
свою часть работы, а тем объектам которые полагаются на работу других объектов позволяет доверять
|
|
16
|
+
полученным значениям, не размазывая множество условий проверки значений по всему приложению.
|
|
17
|
+
</p>
|
|
18
|
+
|
|
11
19
|
<p class="mb-8 leading-relaxed">
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
результаты которые представляют и уважительно относятся к объектам с
|
|
16
|
-
которыми взаимодействуют
|
|
20
|
+
Основа реализации в том, что объекты разделяются на две категории: Источники и Посетители.<br>
|
|
21
|
+
<b>Источники</b> - это объекты с методом <b>.value</b> или функции ожидающие в первом аргументе посетителя.<br>
|
|
22
|
+
<b>Посетители</b> - это объекты с методом <b>.give</b> или функции ожидающие в первом аргументе значение.<br>
|
|
17
23
|
</p>
|
|
18
|
-
|
|
19
|
-
<div class="lg:w-2/3 w-full mb-14">
|
|
24
|
+
|
|
20
25
|
<h1
|
|
21
|
-
class="
|
|
26
|
+
class="title-font sm:text-4xl text-3xl mb-4 font-medium text-gray-600"
|
|
22
27
|
>
|
|
23
|
-
|
|
28
|
+
Начало работы
|
|
24
29
|
</h1>
|
|
30
|
+
|
|
25
31
|
<p class="mb-8 leading-relaxed">
|
|
26
|
-
|
|
27
|
-
SourceType - это источники данных, такие объекты могу отдавать
|
|
28
|
-
данные. Есть объекты совместимые с GuestType - это потребители данных,
|
|
29
|
-
они могут принять данные
|
|
32
|
+
Чтобы установить библиотеку воспользуйтесь пакетным менеджером npm или другим более предпочтительным для вашего приложения.
|
|
30
33
|
</p>
|
|
31
|
-
<
|
|
32
|
-
<h3 class="pb-3 text-xl font-semibold text-gray-600">
|
|
33
|
-
Сценарий 1. Диалог
|
|
34
|
-
</h3>
|
|
35
|
-
<p>
|
|
36
|
-
Объект А - источник данных, объект B - потребитель. Если объекту B
|
|
37
|
-
нужны какие-то данные, то B обращается к А через метод A.value
|
|
38
|
-
запрашивая данные. Когда А посчитает нужным, то А вернет B значение,
|
|
39
|
-
вызывая B.give
|
|
40
|
-
</p>
|
|
41
|
-
</div>
|
|
42
|
-
<div class="mb-4">
|
|
43
|
-
<h3 class="pb-3 text-xl font-semibold text-gray-600">
|
|
44
|
-
Сценарий 2. Расширение
|
|
45
|
-
</h3>
|
|
46
|
-
<p class="mb-2">
|
|
47
|
-
Объект А - источник данных запрашивающий случайное слово в интернете,
|
|
48
|
-
объект B - источник изменяющий в базовом источнике первым символ на
|
|
49
|
-
верхний регистр. Объект C - источник добавляющий в конец значения из
|
|
50
|
-
базового источника знак восклицания "!". Объект D - потребитель
|
|
51
|
-
результата, выводящий значение на экран
|
|
52
|
-
</p>
|
|
53
|
-
<p>
|
|
54
|
-
Получаем следующую композицию с = new C(new B(new A)), далее выражение
|
|
55
|
-
c.value(new D()) - Выводит результат на экран
|
|
56
|
-
</p>
|
|
57
|
-
</div>
|
|
34
|
+
<pre class="text-left mb-4"><code>$ npm install silentium</code></pre>
|
|
58
35
|
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
</
|
|
63
|
-
<
|
|
64
|
-
|
|
65
|
-
может представиться как 'patron', благодаря этому, объект А в случае,
|
|
66
|
-
если у него появится новое значение, будет знать что B нужно
|
|
67
|
-
оповестить о новом значении
|
|
68
|
-
</p>
|
|
69
|
-
</div>
|
|
36
|
+
<p class="mb-8 leading-relaxed">
|
|
37
|
+
После установки библиотеки вы сможете использовать все наработки из разделов<br>
|
|
38
|
+
<link-dynamic href="/guest">Guest</link-dynamic>,
|
|
39
|
+
<link-dynamic href="/patron">Patron</link-dynamic> и
|
|
40
|
+
<link-dynamic href="/source">Source</link-dynamic> в своем проекте
|
|
41
|
+
</p>
|
|
70
42
|
</div>
|
|
71
43
|
</div>
|
|
72
44
|
</section>
|
|
@@ -2,14 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
<p class="text-gray-600 text-lg mb-4">
|
|
4
4
|
Библиотека Patron интегрируется в Vue без каких-либо проблем. Например, чтобы
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
источник данных
|
|
11
|
-
</a>
|
|
12
|
-
</span>
|
|
5
|
+
<link-dynamic
|
|
6
|
+
href="/terminology/source"
|
|
7
|
+
>
|
|
8
|
+
источник данных
|
|
9
|
+
</link-dynamic>
|
|
13
10
|
привязать к ref можно использовать такой класс (Листинг 1).
|
|
14
11
|
</p>
|
|
15
12
|
|
|
@@ -8,30 +8,24 @@
|
|
|
8
8
|
|
|
9
9
|
<p class="text-gray-600 text-lg mb-4">
|
|
10
10
|
Предназначен для динамического превращения
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
</a>
|
|
16
|
-
</span>
|
|
11
|
+
<link-dynamic
|
|
12
|
+
href="/terminology/guest">
|
|
13
|
+
гостя
|
|
14
|
+
</link-dynamic>
|
|
17
15
|
в
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
</a>
|
|
23
|
-
</span>
|
|
16
|
+
<link-dynamic
|
|
17
|
+
href="/terminology/patron">
|
|
18
|
+
патрона
|
|
19
|
+
</link-dynamic>
|
|
24
20
|
</p>
|
|
25
21
|
|
|
26
22
|
<p class="text-gray-600 text-lg mb-4">
|
|
27
23
|
Это поведение полезно в случаях, когда нужно из просто посетителя(гостя)
|
|
28
24
|
сделать постоянного посетиеля(патрона). Это будет означать что если у
|
|
29
|
-
<
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
</a>
|
|
34
|
-
</span>
|
|
25
|
+
<link-dynamic
|
|
26
|
+
href="/terminology/source">
|
|
27
|
+
источника данных
|
|
28
|
+
</link-dynamic>
|
|
35
29
|
есть новые данные, то источник отдаст эту новую порцию данных всем своим
|
|
36
30
|
постоянным посетителям(патронам)
|
|
37
31
|
</p>
|
|
@@ -43,7 +37,7 @@
|
|
|
43
37
|
Source,
|
|
44
38
|
GuestDisposable,
|
|
45
39
|
isPatronInPools,
|
|
46
|
-
} from "
|
|
40
|
+
} from "silentium";
|
|
47
41
|
|
|
48
42
|
const source = new SourceWithPool(1);
|
|
49
43
|
const timer = new Source((guest) => {
|
|
@@ -90,7 +84,7 @@ timer.value(
|
|
|
90
84
|
Source,
|
|
91
85
|
GuestDisposable,
|
|
92
86
|
isPatronInPools,
|
|
93
|
-
} from "
|
|
87
|
+
} from "silentium";
|
|
94
88
|
|
|
95
89
|
const source = new SourceWithPool(1);
|
|
96
90
|
const timer = new Source((guest) => {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
|
19
19
|
<pre
|
|
20
20
|
class="mb-4"
|
|
21
|
-
><code class="language-js">import { Guest, PatronApplied, SourceWithPool } from "
|
|
21
|
+
><code class="language-js">import { Guest, PatronApplied, SourceWithPool } from "silentium";
|
|
22
22
|
|
|
23
23
|
window.source = new SourceWithPool(20);
|
|
24
24
|
|
|
@@ -50,7 +50,7 @@ window.source.value(
|
|
|
50
50
|
Дать источнику значение 25
|
|
51
51
|
</button>
|
|
52
52
|
<script type="module">
|
|
53
|
-
import { Guest, PatronApplied, SourceWithPool } from "
|
|
53
|
+
import { Guest, PatronApplied, SourceWithPool } from "silentium";
|
|
54
54
|
|
|
55
55
|
window.source = new SourceWithPool(20);
|
|
56
56
|
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
|
25
25
|
<pre
|
|
26
26
|
class="mb-4"
|
|
27
|
-
><code class="language-js">import { Guest, PatronExecutorApplied, Patron, SourceWithPool } from "
|
|
27
|
+
><code class="language-js">import { Guest, PatronExecutorApplied, Patron, SourceWithPool } from "silentium";
|
|
28
28
|
|
|
29
29
|
window.source = new SourceWithPool(20);
|
|
30
30
|
|
|
@@ -67,7 +67,7 @@ window.source.value(
|
|
|
67
67
|
Дать источнику значение 25
|
|
68
68
|
</button>
|
|
69
69
|
<script type="module">
|
|
70
|
-
import { Guest, PatronExecutorApplied, Patron, SourceWithPool } from "
|
|
70
|
+
import { Guest, PatronExecutorApplied, Patron, SourceWithPool } from "silentium";
|
|
71
71
|
|
|
72
72
|
window.source = new SourceWithPool(20);
|
|
73
73
|
|
|
@@ -15,14 +15,11 @@
|
|
|
15
15
|
|
|
16
16
|
<p class="text-gray-600 text-lg mb-4">
|
|
17
17
|
Предназначен для создания
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
патрона
|
|
24
|
-
</a>
|
|
25
|
-
</span>
|
|
18
|
+
<link-dynamic
|
|
19
|
+
href="/terminology/patron"
|
|
20
|
+
>
|
|
21
|
+
патрона
|
|
22
|
+
</link-dynamic>
|
|
26
23
|
, который будет выполнен только один раз и удалит себя после получения первого
|
|
27
24
|
значения
|
|
28
25
|
</p>
|
|
@@ -30,14 +27,11 @@
|
|
|
30
27
|
<p class="text-gray-600 text-lg mb-4">
|
|
31
28
|
Такое поведение полезно, когда нужно получить значение, которое возможно еще
|
|
32
29
|
не установлено в
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
источнике данных
|
|
39
|
-
</a>
|
|
40
|
-
</span>
|
|
30
|
+
<link-dynamic
|
|
31
|
+
href="/terminology/source"
|
|
32
|
+
>
|
|
33
|
+
источнике данных
|
|
34
|
+
</link-dynamic>
|
|
41
35
|
</p>
|
|
42
36
|
|
|
43
37
|
<p class="text-gray-600 text-lg mb-4">
|
|
@@ -46,7 +40,7 @@
|
|
|
46
40
|
</p>
|
|
47
41
|
|
|
48
42
|
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
|
49
|
-
<pre class="mb-4"><code class="language-js">import { SourceWithPool, PatronOnce } from "
|
|
43
|
+
<pre class="mb-4"><code class="language-js">import { SourceWithPool, PatronOnce } from "silentium";
|
|
50
44
|
|
|
51
45
|
const source = new SourceWithPool("один раз");
|
|
52
46
|
source.value(
|
|
@@ -70,7 +64,7 @@ setTimeout(() => {
|
|
|
70
64
|
<span class="patron-once-result">Нет результата!</span>
|
|
71
65
|
</div>
|
|
72
66
|
<script type="module">
|
|
73
|
-
import { SourceWithPool, PatronOnce } from "
|
|
67
|
+
import { SourceWithPool, PatronOnce } from "silentium";
|
|
74
68
|
|
|
75
69
|
const source = new SourceWithPool("один раз");
|
|
76
70
|
source.value(
|
|
@@ -15,27 +15,21 @@
|
|
|
15
15
|
|
|
16
16
|
<p class="text-gray-600 text-lg mb-4">
|
|
17
17
|
Предназначен для хранения списка
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
патронов
|
|
24
|
-
</a>
|
|
25
|
-
</span>
|
|
18
|
+
<link-dynamic
|
|
19
|
+
href="/terminology/patron"
|
|
20
|
+
>
|
|
21
|
+
патронов
|
|
22
|
+
</link-dynamic>
|
|
26
23
|
, которым нужно передавать значения
|
|
27
24
|
</p>
|
|
28
25
|
|
|
29
26
|
<p class="text-gray-600 text-lg mb-4">
|
|
30
27
|
Полезно для организации списка подписчиков на обновление данных какого-то
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
источника
|
|
37
|
-
</a>
|
|
38
|
-
</span>
|
|
28
|
+
<link-dynamic
|
|
29
|
+
href="/terminology/source"
|
|
30
|
+
>
|
|
31
|
+
источника
|
|
32
|
+
</link-dynamic>
|
|
39
33
|
. Сам по себе класс PatronPool - достаточно низкоуровневый и желательно
|
|
40
34
|
использовать класс Source, который именно является источником значений (у
|
|
41
35
|
Source под капотом работает PatornPool)
|
|
@@ -45,7 +39,7 @@
|
|
|
45
39
|
<pre class="mb-4"><code class="language-js">import {
|
|
46
40
|
PatronPool,
|
|
47
41
|
Patron
|
|
48
|
-
} from '
|
|
42
|
+
} from 'silentium';
|
|
49
43
|
|
|
50
44
|
const pool = new PatronPool();
|
|
51
45
|
|
|
@@ -65,7 +59,7 @@ pool.give('Значение из пула');
|
|
|
65
59
|
<div class="patron-pool-result2">Нет результата 2!</div>
|
|
66
60
|
</div>
|
|
67
61
|
<script type="module">
|
|
68
|
-
import { PatronPool, Patron } from "
|
|
62
|
+
import { PatronPool, Patron } from "silentium";
|
|
69
63
|
|
|
70
64
|
const pool = new PatronPool();
|
|
71
65
|
|
package/docs/pages/patron.html
CHANGED
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
<div class="w-12 h-1 bg-indigo-500 rounded mt-2 mb-4"></div>
|
|
13
13
|
<ul class="text-gray-900">
|
|
14
14
|
<li class="w-full border-b-2 border-neutral-100 py-4">
|
|
15
|
-
<a href="/patron/patron-once"> PatronOnce </a>
|
|
15
|
+
<a class="dynamic-navigation" href="/patron/patron-once"> PatronOnce </a>
|
|
16
16
|
</li>
|
|
17
17
|
<li class="w-full border-b-2 border-neutral-100 py-4">
|
|
18
|
-
<a href="/patron/patron-pool"> PatronPool </a>
|
|
18
|
+
<a class="dynamic-navigation" href="/patron/patron-pool"> PatronPool </a>
|
|
19
19
|
</li>
|
|
20
20
|
<li class="w-full border-b-2 border-neutral-100 py-4">
|
|
21
|
-
<a href="/patron/patron-applied"> PatronApplied </a>
|
|
21
|
+
<a class="dynamic-navigation" href="/patron/patron-applied"> PatronApplied </a>
|
|
22
22
|
</li>
|
|
23
23
|
<li class="w-full border-b-2 border-neutral-100 py-4">
|
|
24
|
-
<a href="/patron/patron-executor-applied"> PatronExecutorApplied </a>
|
|
24
|
+
<a class="dynamic-navigation" href="/patron/patron-executor-applied"> PatronExecutorApplied </a>
|
|
25
25
|
</li>
|
|
26
26
|
</ul>
|
|
27
27
|
</div>
|
|
@@ -29,19 +29,140 @@
|
|
|
29
29
|
<div
|
|
30
30
|
class="sm:w-2/3 sm:pl-8 sm:border-l border-gray-200 sm:border-t-0 border-t mt-4 sm:mt-0"
|
|
31
31
|
>
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
<h1 class="pb-3 text-xl font-semibold text-gray-600">Класс Patron</h1>
|
|
33
|
+
|
|
34
|
+
<a href="https://github.com/kosukhin/patron/blob/main/src/Patron/Patron.ts" target="_blank"
|
|
35
|
+
class="inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4">
|
|
36
|
+
<img src="./assets/img/github_16.jpg" width="16" height="16" />
|
|
37
|
+
Patron на GitHub
|
|
38
|
+
</a>
|
|
39
|
+
|
|
40
|
+
<p class="text-gray-600 text-lg mb-4">
|
|
41
|
+
Предназначен для динамического превращения
|
|
42
|
+
<link-dynamic
|
|
43
|
+
href="/terminology/guest">
|
|
44
|
+
гостя
|
|
45
|
+
</link-dynamic>
|
|
46
|
+
в
|
|
47
|
+
<link-dynamic
|
|
48
|
+
href="/terminology/patron">
|
|
49
|
+
патрона
|
|
50
|
+
</link-dynamic>
|
|
51
|
+
</p>
|
|
52
|
+
|
|
53
|
+
<p class="text-gray-600 text-lg mb-4">
|
|
54
|
+
Это поведение полезно в случаях, когда нужно из просто посетителя(гостя)
|
|
55
|
+
сделать постоянного посетиеля(патрона). Это будет означать что если у
|
|
56
|
+
<link-dynamic
|
|
57
|
+
href="/terminology/source">
|
|
58
|
+
источника данных
|
|
59
|
+
</link-dynamic>
|
|
60
|
+
есть новые данные, то источник отдаст эту новую порцию данных всем своим
|
|
61
|
+
постоянным посетителям(патронам)
|
|
62
|
+
</p>
|
|
63
|
+
|
|
64
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
|
65
|
+
<pre class="mb-4"><code class="language-js">import {
|
|
66
|
+
Patron,
|
|
67
|
+
SourceWithPool,
|
|
68
|
+
Source,
|
|
69
|
+
GuestDisposable,
|
|
70
|
+
isPatronInPools,
|
|
71
|
+
} from "silentium";
|
|
72
|
+
|
|
73
|
+
const source = new SourceWithPool(1);
|
|
74
|
+
const timer = new Source((guest) => {
|
|
75
|
+
source.value(guest);
|
|
76
|
+
const repeat = () => {
|
|
77
|
+
if (!isPatronInPools(guest)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
source.value((value) => {
|
|
81
|
+
setTimeout(() => {
|
|
82
|
+
source.give(value + 1);
|
|
83
|
+
repeat();
|
|
84
|
+
}, 1000);
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
repeat();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
timer.value(
|
|
91
|
+
new Patron(
|
|
92
|
+
new GuestDisposable(
|
|
93
|
+
(value) => {
|
|
94
|
+
const el = document.querySelector(".patron-result");
|
|
95
|
+
if (el) {
|
|
96
|
+
el.textContent = `Секунд прошло ${value}`;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
() => {
|
|
100
|
+
return !document.querySelector(".patron-result");
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
)
|
|
104
|
+
);</code></pre>
|
|
105
|
+
|
|
106
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
|
|
107
|
+
<div class="example mb-4">
|
|
108
|
+
<span class="patron-result">Result here</span>
|
|
44
109
|
</div>
|
|
110
|
+
<script type="module">
|
|
111
|
+
import {
|
|
112
|
+
Patron,
|
|
113
|
+
SourceWithPool,
|
|
114
|
+
Source,
|
|
115
|
+
GuestDisposable,
|
|
116
|
+
isPatronInPools,
|
|
117
|
+
} from "silentium";
|
|
118
|
+
|
|
119
|
+
const source = new SourceWithPool(1);
|
|
120
|
+
const timer = new Source((guest) => {
|
|
121
|
+
source.value(guest);
|
|
122
|
+
const repeat = () => {
|
|
123
|
+
if (!isPatronInPools(guest)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
source.value((value) => {
|
|
127
|
+
setTimeout(() => {
|
|
128
|
+
source.give(value + 1);
|
|
129
|
+
repeat();
|
|
130
|
+
}, 1000);
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
repeat();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
timer.value(
|
|
137
|
+
new Patron(
|
|
138
|
+
new GuestDisposable(
|
|
139
|
+
(value) => {
|
|
140
|
+
const el = document.querySelector(".patron-result");
|
|
141
|
+
if (el) {
|
|
142
|
+
el.textContent = `Секунд прошло ${value}`;
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
() => {
|
|
146
|
+
return !document.querySelector(".patron-result");
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
)
|
|
150
|
+
);
|
|
151
|
+
</script>
|
|
152
|
+
|
|
153
|
+
<div class="font-bold mt-8">Смотрите также</div>
|
|
154
|
+
|
|
155
|
+
<p class="text-gray-600 text-lg mb-4 dynamic-navigation">
|
|
156
|
+
<a class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
|
157
|
+
href="/source">Source</a>
|
|
158
|
+
<a class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
|
159
|
+
href="/guest/guest-disposable">GuestDisposable</a>
|
|
160
|
+
<a class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
|
161
|
+
href="/source/source-with-pool">SourceWithPool</a>
|
|
162
|
+
<a class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
|
163
|
+
href="/utils/is-patron-in-pools">isPatronInPools</a>
|
|
164
|
+
</p>
|
|
165
|
+
|
|
45
166
|
<div class="patron-page-area"></div>
|
|
46
167
|
</div>
|
|
47
168
|
</div>
|
|
@@ -63,45 +63,32 @@
|
|
|
63
63
|
ответственности за результат стала возможной - объект у которого
|
|
64
64
|
результат есть должен видеть того, кому этот результат нужен, чтобы
|
|
65
65
|
полностью контролировать отдачу результата своему
|
|
66
|
-
<
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
посетителю
|
|
72
|
-
</a>
|
|
73
|
-
</span>
|
|
66
|
+
<link-dynamic
|
|
67
|
+
href="/terminology/visitor"
|
|
68
|
+
>
|
|
69
|
+
посетителю
|
|
70
|
+
</link-dynamic>
|
|
74
71
|
Вокруг этой ключевой идеи и построена вся библиотека. Посетители объекта
|
|
75
72
|
делятся на
|
|
76
|
-
<
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
гостей
|
|
82
|
-
</a>
|
|
83
|
-
</span>
|
|
73
|
+
<link-dynamic
|
|
74
|
+
href="/terminology/guest"
|
|
75
|
+
>
|
|
76
|
+
гостей
|
|
77
|
+
</link-dynamic>
|
|
84
78
|
- те кому сообщить значение нужно один раз и забыть о нем пока он сам не
|
|
85
79
|
вернется если захочет и
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
>
|
|
92
|
-
патроны
|
|
93
|
-
</a>
|
|
94
|
-
</span>
|
|
80
|
+
<link-dynamic
|
|
81
|
+
href="/terminology/patron"
|
|
82
|
+
>
|
|
83
|
+
патроны
|
|
84
|
+
</link-dynamic>
|
|
95
85
|
- те кому нужно постоянно сообщать о новых значениях, пока они сами не
|
|
96
86
|
решат удалиться из
|
|
97
|
-
<
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
пула патронов
|
|
103
|
-
</a>
|
|
104
|
-
</span>
|
|
87
|
+
<link-dynamic
|
|
88
|
+
href="/patron/patron-pool"
|
|
89
|
+
>
|
|
90
|
+
пула патронов
|
|
91
|
+
</link-dynamic>
|
|
105
92
|
</p>
|
|
106
93
|
<div class="clear-both"></div>
|
|
107
94
|
<h2 class="pb-3 text-xl font-semibold text-gray-600">Result</h2>
|
|
@@ -116,14 +103,11 @@
|
|
|
116
103
|
вывод что использование Библиотеки Patron накладывает на вас ограничение
|
|
117
104
|
- не использовать return, а вместо этого возвращать данные посетителю
|
|
118
105
|
вызывая его метод give, либо пользуясь отдельной функцией
|
|
119
|
-
<
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
give
|
|
125
|
-
</a>
|
|
126
|
-
</span>
|
|
106
|
+
<link-dynamic
|
|
107
|
+
href="/utils/give"
|
|
108
|
+
>
|
|
109
|
+
give
|
|
110
|
+
</link-dynamic>
|
|
127
111
|
</p>
|
|
128
112
|
<p class="text-gray-600 text-lg mb-4">
|
|
129
113
|
Но в этом разделе(Result) хотелось бы отметить еще одну важную
|
|
@@ -160,14 +144,11 @@
|
|
|
160
144
|
Посетитель. Объекты имеющие данные не отдают их неизвестно кому
|
|
161
145
|
(оператором return), а вместо этого ждут посетителя и отдают данные
|
|
162
146
|
вежливому посетителю который пришел и
|
|
163
|
-
<
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
представился
|
|
169
|
-
</a>
|
|
170
|
-
</span>
|
|
147
|
+
<link-dynamic
|
|
148
|
+
href="/terminology/introduction"
|
|
149
|
+
>
|
|
150
|
+
представился
|
|
151
|
+
</link-dynamic>
|
|
171
152
|
Посетитель может представиться патроном, что для объекта источника
|
|
172
153
|
данных будет значить что в случае если у этого объекта будут новые
|
|
173
154
|
данные, то патрону будет интересно об этих данных узнать. Общение между
|