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.
Files changed (93) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/beforeRelease.sh +11 -0
  3. package/dist/silentium.cjs +39 -63
  4. package/dist/silentium.cjs.map +1 -1
  5. package/dist/silentium.d.ts +34 -53
  6. package/dist/silentium.js +40 -63
  7. package/dist/silentium.js.map +1 -1
  8. package/dist/silentium.min.js +1 -1
  9. package/dist/silentium.min.mjs +1 -1
  10. package/dist/silentium.min.mjs.map +1 -1
  11. package/dist/silentium.mjs +40 -63
  12. package/dist/silentium.mjs.map +1 -1
  13. package/docs/assets/css/base.css +15 -0
  14. package/docs/assets/css/custom.css +72 -0
  15. package/docs/assets/img/logo.svg +1522 -0
  16. package/docs/assets/js/components/linkDynamic.mjs +14 -0
  17. package/docs/assets/js/components/linkReloadable.mjs +17 -0
  18. package/docs/assets/js/components.mjs +2 -0
  19. package/docs/assets/js/index.mjs +74 -0
  20. package/docs/assets/js/lib/StyleFetched.mjs +19 -0
  21. package/docs/build.sh +7 -3
  22. package/docs/buildRoutes.sh +15 -0
  23. package/docs/favicon.ico +0 -0
  24. package/docs/index-dev.html +4 -80
  25. package/docs/index.html +6 -82
  26. package/docs/pages/compatibility/elegant-objects.html +4 -4
  27. package/docs/pages/examples/errors.html +2 -2
  28. package/docs/pages/examples.html +12 -14
  29. package/docs/pages/guest/guest-applied.html +9 -5
  30. package/docs/pages/guest/guest-cast.html +20 -26
  31. package/docs/pages/guest/guest-disposable.html +32 -42
  32. package/docs/pages/guest/guest-executor-applied.html +21 -17
  33. package/docs/pages/guest/guest-object.html +22 -26
  34. package/docs/pages/guest/guest-pool.html +17 -18
  35. package/docs/pages/guest/guest-sync.html +7 -2
  36. package/docs/pages/guest/index.html +18 -29
  37. package/docs/pages/guest.html +112 -18
  38. package/docs/pages/index.html +24 -52
  39. package/docs/pages/integrations/vue.html +5 -8
  40. package/docs/pages/patron/index.html +14 -20
  41. package/docs/pages/patron/patron-applied.html +2 -2
  42. package/docs/pages/patron/patron-executor-applied.html +2 -2
  43. package/docs/pages/patron/patron-once.html +12 -18
  44. package/docs/pages/patron/patron-pool.html +12 -18
  45. package/docs/pages/patron.html +137 -16
  46. package/docs/pages/philosofy.html +30 -49
  47. package/docs/pages/source/index.html +11 -14
  48. package/docs/pages/source/source-all.html +9 -12
  49. package/docs/pages/source/source-applied.html +2 -2
  50. package/docs/pages/source/source-dynamic.html +3 -3
  51. package/docs/pages/source/source-executor-applied.html +2 -2
  52. package/docs/pages/source/source-map.html +5 -5
  53. package/docs/pages/source/source-once.html +2 -2
  54. package/docs/pages/source/source-race.html +10 -10
  55. package/docs/pages/source/source-sequence.html +2 -2
  56. package/docs/pages/source/source-with-pool.html +8 -11
  57. package/docs/pages/source/source.html +11 -14
  58. package/docs/pages/source.html +162 -31
  59. package/docs/pages/terminology/source.html +5 -9
  60. package/docs/pages/terminology.html +12 -18
  61. package/docs/pages/utils.html +33 -21
  62. package/docs/routes.json +1 -0
  63. package/docs/template.html +4 -80
  64. package/eslint.config.mjs +3 -0
  65. package/package.json +2 -2
  66. package/src/Guest/Guest.ts +3 -3
  67. package/src/Guest/GuestApplied.ts +1 -1
  68. package/src/Guest/GuestCast.ts +1 -1
  69. package/src/Guest/GuestDisposable.ts +1 -1
  70. package/src/Guest/GuestExecutorApplied.ts +1 -1
  71. package/src/Guest/GuestObject.ts +1 -1
  72. package/src/Guest/GuestPool.ts +1 -1
  73. package/src/Guest/GuestSync.ts +1 -1
  74. package/src/Patron/Patron.ts +2 -2
  75. package/src/Patron/PatronApplied.ts +1 -1
  76. package/src/Patron/PatronExecutorApplied.ts +1 -1
  77. package/src/Patron/PatronOnce.ts +1 -1
  78. package/src/Patron/PatronPool.ts +4 -4
  79. package/src/Private/Private.ts +1 -1
  80. package/src/Source/Source.ts +4 -4
  81. package/src/Source/SourceAll.ts +1 -1
  82. package/src/Source/SourceApplied.ts +1 -1
  83. package/src/Source/SourceDynamic.ts +1 -1
  84. package/src/Source/SourceExecutorApplied.ts +1 -1
  85. package/src/Source/SourceMap.ts +1 -1
  86. package/src/Source/SourceOnce.ts +1 -1
  87. package/src/Source/SourceRace.ts +1 -1
  88. package/src/Source/SourceSequence.ts +1 -1
  89. package/src/Source/SourceWithPool.ts +1 -1
  90. package/src/index.ts +0 -1
  91. package/docs/pages/source/source-active.html +0 -120
  92. package/src/Source/SourceActive.test.ts +0 -13
  93. package/src/Source/SourceActive.ts +0 -41
@@ -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
- Patron: responsibility, respect, result
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
- </div>
19
- <div class="lg:w-2/3 w-full mb-14">
24
+
20
25
  <h1
21
- class="text-center title-font sm:text-4xl text-3xl mb-4 font-medium text-gray-600"
26
+ class="title-font sm:text-4xl text-3xl mb-4 font-medium text-gray-600"
22
27
  >
23
- Patron - это протокол для общения между объектами
28
+ Начало работы
24
29
  </h1>
30
+
25
31
  <p class="mb-8 leading-relaxed">
26
- В программе использующей Patron библиотеку есть объекты совместимые с
27
- SourceType - это источники данных, такие объекты могу отдавать
28
- данные. Есть объекты совместимые с GuestType - это потребители данных,
29
- они могут принять данные
32
+ Чтобы установить библиотеку воспользуйтесь пакетным менеджером npm или другим более предпочтительным для вашего приложения.
30
33
  </p>
31
- <div class="mb-4">
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
- <div class="mb-4">
60
- <h3 class="pb-3 text-xl font-semibold text-gray-600">
61
- Сценарий 3. Постоянный потребитель
62
- </h3>
63
- <p class="mb-2">
64
- Объект А - источник данных, объект B - потребитель данных. Объект B
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
- <span class="dynamic-navigation">
6
- <a
7
- 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"
8
- href="/terminology/the-source"
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
- <span class="dynamic-navigation">
12
- <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"
13
- href="/terminology/the-guest">
14
- гостя
15
- </a>
16
- </span>
11
+ <link-dynamic
12
+ href="/terminology/guest">
13
+ гостя
14
+ </link-dynamic>
17
15
  в
18
- <span class="dynamic-navigation">
19
- <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"
20
- href="/terminology/the-patron">
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
- <span class="dynamic-navigation">
30
- <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"
31
- href="/terminology/the-source">
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 "patron-oop";
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 "patron-oop";
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 "patron-oop";
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 "patron-oop";
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 "patron-oop";
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 "patron-oop";
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
- <span class="dynamic-navigation">
19
- <a
20
- 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"
21
- href="/terminology/the-patron"
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
- <span class="dynamic-navigation">
34
- <a
35
- 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"
36
- href="/terminology/the-source"
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 "patron-oop";
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 "patron-oop";
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
- <span class="dynamic-navigation">
19
- <a
20
- 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"
21
- href="/terminology/the-patron"
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
- <span class="dynamic-navigation">
32
- <a
33
- 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"
34
- href="/terminology/the-source"
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 'patron-oop';
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 "patron-oop";
62
+ import { PatronPool, Patron } from "silentium";
69
63
 
70
64
  const pool = new PatronPool();
71
65
 
@@ -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
- <div class="patron-loader">
33
- <div class="w-full flex justify-center">
34
- <div
35
- class="inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-current border-e-transparent align-[-0.125em] text-indigo-500 motion-reduce:animate-[spin_1.5s_linear_infinite]"
36
- role="status"
37
- >
38
- <span
39
- class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
40
- >Loading...</span
41
- >
42
- </div>
43
- </div>
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
- <span class="dynamic-navigation">
67
- <a
68
- 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"
69
- href="/terminology/visitor"
70
- >
71
- посетителю
72
- </a>
73
- </span>
66
+ <link-dynamic
67
+ href="/terminology/visitor"
68
+ >
69
+ посетителю
70
+ </link-dynamic>
74
71
  Вокруг этой ключевой идеи и построена вся библиотека. Посетители объекта
75
72
  делятся на
76
- <span class="dynamic-navigation">
77
- <a
78
- 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"
79
- href="/terminology/the-guest"
80
- >
81
- гостей
82
- </a>
83
- </span>
73
+ <link-dynamic
74
+ href="/terminology/guest"
75
+ >
76
+ гостей
77
+ </link-dynamic>
84
78
  - те кому сообщить значение нужно один раз и забыть о нем пока он сам не
85
79
  вернется если захочет и
86
-
87
- <span class="dynamic-navigation">
88
- <a
89
- 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"
90
- href="/terminology/the-patron"
91
- >
92
- патроны
93
- </a>
94
- </span>
80
+ <link-dynamic
81
+ href="/terminology/patron"
82
+ >
83
+ патроны
84
+ </link-dynamic>
95
85
  - те кому нужно постоянно сообщать о новых значениях, пока они сами не
96
86
  решат удалиться из
97
- <span class="dynamic-navigation">
98
- <a
99
- 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"
100
- href="/patron/patron-pool"
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
- <span class="dynamic-navigation">
120
- <a
121
- 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"
122
- href="/utils/give"
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
- <span class="dynamic-navigation">
164
- <a
165
- 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"
166
- href="/terminology/introduction"
167
- >
168
- представился
169
- </a>
170
- </span>
147
+ <link-dynamic
148
+ href="/terminology/introduction"
149
+ >
150
+ представился
151
+ </link-dynamic>
171
152
  Посетитель может представиться патроном, что для объекта источника
172
153
  данных будет значить что в случае если у этого объекта будут новые
173
154
  данные, то патрону будет интересно об этих данных узнать. Общение между