@dxtmisha/wiki 0.39.7 → 0.56.0
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/dist/{defineProperty-DblGXmzD.js → defineProperty-149Ahniv.js} +4 -4
- package/dist/library.js +1 -1
- package/dist/media/descriptions/wikiDescriptionsArea.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsClientOnly.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsContainer.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsHeader.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsPageArea.d.ts +7 -0
- package/dist/media/mdx/Area/wikiMdxArea.d.ts +7 -0
- package/dist/media/mdx/ClientOnly/wikiMdxClientOnly.d.ts +7 -0
- package/dist/media/mdx/Container/wikiMdxContainer.d.ts +7 -0
- package/dist/media/mdx/Header/wikiMdxHeader.d.ts +7 -0
- package/dist/media/mdx/PageArea/wikiMdxPageArea.d.ts +7 -0
- package/dist/media.d.ts +1 -1
- package/dist/media.js +127 -68
- package/dist/storybook.js +2707 -1841
- package/dist/{wikiDescriptions-Cv4WzSNL.js → wikiDescriptions-7XaHU3Yk.js} +182 -0
- package/package.json +1 -1
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +41 -0
- package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +20 -4
- package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +21 -3
- package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +20 -2
- package/src/media/functional/functional/functions/computedAsync/computedAsync.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.vi.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.vi.mdx +8 -0
- package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
- package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +57 -54
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +106 -51
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +107 -52
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +103 -49
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +59 -21
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +63 -25
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +64 -26
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
- package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +178 -0
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
- package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
- package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
- package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
- package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.en.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.ru.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.vi.mdx +17 -1
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.en.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.ru.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.vi.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +79 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
- package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
- package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
- package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
- package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
- package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
- package/src/media/functional/functional-basic/icons/icons.en.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.ru.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.vi.mdx +3 -0
- package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -0
- package/src/media/functional/ui/about/about.en.mdx +45 -0
- package/src/media/functional/ui/about/about.ru.mdx +45 -0
- package/src/media/functional/ui/about/about.vi.mdx +45 -0
- package/src/media/functional/ui/component/component.en.mdx +104 -0
- package/src/media/functional/ui/component/component.ru.mdx +106 -0
- package/src/media/functional/ui/component/component.vi.mdx +104 -0
- package/src/media/functional/ui/setup/setup.en.mdx +72 -0
- package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
- package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
- package/src/media/functional/ui/wiki-data.en.mdx +114 -0
- package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
- package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/ru/functional-basic/Classes/HashInstance - Экземпляр URL Hash'/>
|
|
4
|
+
|
|
5
|
+
# Класс HashInstance
|
|
6
|
+
|
|
7
|
+
`HashInstance` — это основной класс, реализующий логику управления данными в URL-хэше. Он обеспечивает хранение состояния, механизмы подписки на изменения и синхронизацию с браузерным API.
|
|
8
|
+
|
|
9
|
+
Вы можете использовать этот класс напрямую, если вам требуется изолированное управление хэшем, отличное от глобального состояния `Hash`.
|
|
10
|
+
|
|
11
|
+
## Ключевые особенности
|
|
12
|
+
|
|
13
|
+
- **Изолированное состояние** — Хранит свой набор переменных хэша.
|
|
14
|
+
- **Поддержка цепочки вызовов** — Большинство методов возвращают `this`, позволяя писать компактный код.
|
|
15
|
+
- **Автоматическая синхронизация** — При инициализации считывает данные из URL и подписывается на событие `hashchange`.
|
|
16
|
+
- **SSR-совместимость** — Безопасно работает в серверном окружении, используя заглушки для DOM API.
|
|
17
|
+
|
|
18
|
+
## Инициализация
|
|
19
|
+
|
|
20
|
+
Для создания экземпляра используйте конструктор `HashInstance()`.
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { HashInstance } from '@dxtmisha/functional-basic'
|
|
24
|
+
|
|
25
|
+
const myHash = new HashInstance()
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Методы
|
|
29
|
+
|
|
30
|
+
### Чтение и запись
|
|
31
|
+
- `get<T>(name: string, defaultValue?: T | (() => T)): T` — Возвращает значение переменной. Если её нет, устанавливает `defaultValue` и возвращает его.
|
|
32
|
+
- `set<T>(name: string, callback: T | (() => T)): this` — Обновляет значение переменной и синхронизирует URL.
|
|
33
|
+
|
|
34
|
+
### Наблюдение (Watchers)
|
|
35
|
+
- `addWatch<T>(name: string, callback: (value: T) => void): this` — Добавляет обработчик изменения переменной.
|
|
36
|
+
- `removeWatch<T>(name: string, callback: (value: T) => void): this` — Удаляет обработчик.
|
|
37
|
+
|
|
38
|
+
### Управление
|
|
39
|
+
- `reload(): this` — Обновляет внутреннее состояние из текущего URL-хэша.
|
|
40
|
+
|
|
41
|
+
## Примеры
|
|
42
|
+
|
|
43
|
+
### Использование изолированного экземпляра
|
|
44
|
+
```typescript
|
|
45
|
+
const searchHash = new HashInstance()
|
|
46
|
+
|
|
47
|
+
// Подписка
|
|
48
|
+
searchHash.addWatch('query', (q) => {
|
|
49
|
+
console.log('Поиск:', q)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
// Установка значения (обновит URL)
|
|
53
|
+
searchHash.set('query', 'smartphones')
|
|
54
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/vi/functional-basic/Classes/HashInstance - Phiên bản URL Hash'/>
|
|
4
|
+
|
|
5
|
+
# Lớp HashInstance
|
|
6
|
+
|
|
7
|
+
`HashInstance` là lớp cốt lõi triển khai logic quản lý dữ liệu trong URL hash. Nó cung cấp khả năng lưu trữ trạng thái, các cơ chế để đăng ký theo dõi thay đổi và đồng bộ hóa với browser API.
|
|
8
|
+
|
|
9
|
+
Bạn có thể sử dụng lớp này trực tiếp nếu cần quản lý hash riêng biệt, tách rời khỏi trạng thái `Hash` toàn cục.
|
|
10
|
+
|
|
11
|
+
## Tính năng chính
|
|
12
|
+
|
|
13
|
+
- **Trạng thái biệt lập** — Lưu trữ bộ biến hash riêng của nó.
|
|
14
|
+
- **Chainable API** — Hầu hết các phương thức trả về `this`, cho phép viết mã ngắn gọn.
|
|
15
|
+
- **Đồng bộ hóa tự động** — Khi khởi tạo, nó đọc dữ liệu từ URL và đăng ký sự kiện `hashchange`.
|
|
16
|
+
- **Tương thích SSR** — Hoạt động an toàn trong môi trường máy chủ bằng cách sử dụng các bản giả cho DOM API.
|
|
17
|
+
|
|
18
|
+
## Khởi tạo
|
|
19
|
+
|
|
20
|
+
Để tạo một phiên bản, hãy sử dụng hàm khởi tạo `HashInstance()`.
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { HashInstance } from '@dxtmisha/functional-basic'
|
|
24
|
+
|
|
25
|
+
const myHash = new HashInstance()
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Phương thức
|
|
29
|
+
|
|
30
|
+
### Đọc và Ghi
|
|
31
|
+
- `get<T>(name: string, defaultValue?: T | (() => T)): T` — Trả về giá trị của một biến. Nếu nó không tồn tại, thiết lập `defaultValue` và trả về nó.
|
|
32
|
+
- `set<T>(name: string, callback: T | (() => T)): this` — Cập nhật giá trị của biến và đồng bộ hóa URL.
|
|
33
|
+
|
|
34
|
+
### Theo dõi (Watchers)
|
|
35
|
+
- `addWatch<T>(name: string, callback: (value: T) => void): this` — Thêm bộ xử lý cho các thay đổi của biến.
|
|
36
|
+
- `removeWatch<T>(name: string, callback: (value: T) => void): this` — Xóa bộ xử lý.
|
|
37
|
+
|
|
38
|
+
### Quản lý
|
|
39
|
+
- `reload(): this` — Làm mới trạng thái nội bộ từ URL hash hiện tại.
|
|
40
|
+
|
|
41
|
+
## Ví dụ
|
|
42
|
+
|
|
43
|
+
### Sử dụng một phiên bản biệt lập
|
|
44
|
+
```typescript
|
|
45
|
+
const searchHash = new HashInstance()
|
|
46
|
+
|
|
47
|
+
// Đăng ký theo dõi
|
|
48
|
+
searchHash.addWatch('query', (q) => {
|
|
49
|
+
console.log('Tìm kiếm:', q)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
// Thiết lập giá trị (sẽ cập nhật URL)
|
|
53
|
+
searchHash.set('query', 'smartphones')
|
|
54
|
+
```
|
|
@@ -41,6 +41,11 @@ const meta = new Meta()
|
|
|
41
41
|
- `getOg(): MetaOg` — direct access to the `MetaOg` instance.
|
|
42
42
|
- `getTwitter(): MetaTwitter` — direct access to the `MetaTwitter` instance.
|
|
43
43
|
|
|
44
|
+
## Methods for Generating HTML
|
|
45
|
+
|
|
46
|
+
- `html(): string` — generates the full HTML string of all meta tags: standard + Open Graph + Twitter Card. Used for SSR.
|
|
47
|
+
- `htmlTitle(): string` — generates the page title.
|
|
48
|
+
|
|
44
49
|
## Setters
|
|
45
50
|
|
|
46
51
|
All setters return `this` for method chaining.
|
|
@@ -74,6 +79,17 @@ const html = meta.html()
|
|
|
74
79
|
// ...
|
|
75
80
|
```
|
|
76
81
|
|
|
82
|
+
### `htmlTitle(): string`
|
|
83
|
+
|
|
84
|
+
Generates the current title (including suffix).
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
const meta = new Meta()
|
|
88
|
+
meta.setSuffix('My Site').setTitle('Home')
|
|
89
|
+
|
|
90
|
+
meta.htmlTitle() // "Home - My Site"
|
|
91
|
+
```
|
|
92
|
+
|
|
77
93
|
## Example
|
|
78
94
|
|
|
79
95
|
```javascript
|
|
@@ -41,6 +41,11 @@ const meta = new Meta()
|
|
|
41
41
|
- `getOg(): MetaOg` — прямой доступ к экземпляру `MetaOg`.
|
|
42
42
|
- `getTwitter(): MetaTwitter` — прямой доступ к экземпляру `MetaTwitter`.
|
|
43
43
|
|
|
44
|
+
## Методы для генерации HTML
|
|
45
|
+
|
|
46
|
+
- `html(): string` — генерирует полную HTML-строку всех мета-тегов: стандартных + Open Graph + Twitter Card. Используется для SSR.
|
|
47
|
+
- `htmlTitle(): string` — генерирует заголовок страницы.
|
|
48
|
+
|
|
44
49
|
## Сеттеры
|
|
45
50
|
|
|
46
51
|
Все сеттеры возвращают `this` для цепочки вызовов.
|
|
@@ -74,6 +79,17 @@ const html = meta.html()
|
|
|
74
79
|
// ...
|
|
75
80
|
```
|
|
76
81
|
|
|
82
|
+
### `htmlTitle(): string`
|
|
83
|
+
|
|
84
|
+
Генерирует текущий заголовок (включая суффикс).
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
const meta = new Meta()
|
|
88
|
+
meta.setSuffix('Мой Сайт').setTitle('Главная')
|
|
89
|
+
|
|
90
|
+
meta.htmlTitle() // "Главная - Мой Сайт"
|
|
91
|
+
```
|
|
92
|
+
|
|
77
93
|
## Пример
|
|
78
94
|
|
|
79
95
|
```javascript
|
|
@@ -41,9 +41,14 @@ const meta = new Meta()
|
|
|
41
41
|
- `getOg(): MetaOg` — truy cập trực tiếp instance `MetaOg`.
|
|
42
42
|
- `getTwitter(): MetaTwitter` — truy cập trực tiếp instance `MetaTwitter`.
|
|
43
43
|
|
|
44
|
+
## Phương thức tạo HTML
|
|
45
|
+
|
|
46
|
+
- `html(): string` — tạo chuỗi HTML đầy đủ của tất cả thẻ meta: tiêu chuẩn + Open Graph + Twitter Card. Dùng cho SSR.
|
|
47
|
+
- `htmlTitle(): string` — tạo tiêu đề trang.
|
|
48
|
+
|
|
44
49
|
## Setter
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
All setter trả về `this` để chuỗi phương thức.
|
|
47
52
|
|
|
48
53
|
- `setTitle(title: string)` — đặt `document.title` (có hậu tố), `og:title` và `twitter:title` đồng thời.
|
|
49
54
|
- `setKeywords(keywords: string | string[])` — nhận chuỗi hoặc mảng; mảng tự động nối bằng dấu phẩy.
|
|
@@ -74,6 +79,17 @@ const html = meta.html()
|
|
|
74
79
|
// ...
|
|
75
80
|
```
|
|
76
81
|
|
|
82
|
+
### `htmlTitle(): string`
|
|
83
|
+
|
|
84
|
+
Tạo tiêu đề hiện tại (bao gồm cả hậu tố).
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
const meta = new Meta()
|
|
88
|
+
meta.setSuffix('Trang web của tôi').setTitle('Trang chủ')
|
|
89
|
+
|
|
90
|
+
meta.htmlTitle() // "Trang chủ - Trang web của tôi"
|
|
91
|
+
```
|
|
92
|
+
|
|
77
93
|
## Ví dụ
|
|
78
94
|
|
|
79
95
|
```javascript
|
|
@@ -49,3 +49,12 @@ manager.set('description', 'My description').set('keywords', 'vue, typescript')
|
|
|
49
49
|
manager.html()
|
|
50
50
|
// '<meta name="description" content="My description"><meta name="keywords" content="vue, typescript">'
|
|
51
51
|
```
|
|
52
|
+
|
|
53
|
+
### `htmlTitle(title: string): string`
|
|
54
|
+
|
|
55
|
+
Converts a title string into an HTML `<title>` tag.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
manager.htmlTitle('My Page Title')
|
|
59
|
+
// '<title>My Page Title</title>'
|
|
60
|
+
```
|
|
@@ -49,3 +49,12 @@ manager.set('description', 'Моё описание').set('keywords', 'vue, type
|
|
|
49
49
|
manager.html()
|
|
50
50
|
// '<meta name="description" content="Моё описание"><meta name="keywords" content="vue, typescript">'
|
|
51
51
|
```
|
|
52
|
+
|
|
53
|
+
### `htmlTitle(title: string): string`
|
|
54
|
+
|
|
55
|
+
Преобразует строку заголовка в HTML-тег `<title>`.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
manager.htmlTitle('Заголовок страницы')
|
|
59
|
+
// '<title>Заголовок страницы</title>'
|
|
60
|
+
```
|
|
@@ -49,3 +49,12 @@ manager.set('description', 'Mô tả của tôi').set('keywords', 'vue, typescri
|
|
|
49
49
|
manager.html()
|
|
50
50
|
// '<meta name="description" content="Mô tả của tôi"><meta name="keywords" content="vue, typescript">'
|
|
51
51
|
```
|
|
52
|
+
|
|
53
|
+
### `htmlTitle(title: string): string`
|
|
54
|
+
|
|
55
|
+
Chuyển đổi chuỗi tiêu đề thành thẻ HTML `<title>`.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
manager.htmlTitle('Tiêu đề trang')
|
|
59
|
+
// '<title>Tiêu đề trang</title>'
|
|
60
|
+
```
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Classes/MetaStatic - Meta Tags Management (Static)'/>
|
|
4
|
+
|
|
5
|
+
# Class MetaStatic
|
|
6
|
+
|
|
7
|
+
The `MetaStatic` class is a **static entry point** for managing page meta tags, Open Graph (OG), and Twitter Card data. It acts as a static wrapper around a globally managed `Meta` instance, providing a clean singleton interface for SEO and social sharing management.
|
|
8
|
+
|
|
9
|
+
## Key Features
|
|
10
|
+
|
|
11
|
+
- **Static Interface** — Manage page titles, descriptions, and more without manual instantiation.
|
|
12
|
+
- **Unified Management** — Automatically syncs titles and other information across standard meta, OG, and Twitter.
|
|
13
|
+
- **SSR Isolation** — Uses `ServerStorage` to handle instance isolation during server-side rendering.
|
|
14
|
+
- **Fluent API** — Support for method chaining in setter methods.
|
|
15
|
+
|
|
16
|
+
## Methods
|
|
17
|
+
|
|
18
|
+
### Access
|
|
19
|
+
|
|
20
|
+
- `getItem(): Meta` — Returns the underlying `Meta` instance.
|
|
21
|
+
- `getOg(): MetaOg` — Gets the MetaOg instance for advanced Open Graph operations.
|
|
22
|
+
- `getTwitter(): MetaTwitter` — Gets the MetaTwitter instance for advanced Twitter Card operations.
|
|
23
|
+
|
|
24
|
+
### Getters
|
|
25
|
+
|
|
26
|
+
- `getTitle(): string` — Gets the current page title (without suffix).
|
|
27
|
+
- `getDescription(): string` — Gets the current description meta tag.
|
|
28
|
+
- `getKeywords(): string` — Gets the current keywords.
|
|
29
|
+
- `getImage(): string` — Gets the image URL (from OG settings).
|
|
30
|
+
- `getCanonical(): string` — Gets the canonical URL.
|
|
31
|
+
- `getRobots(): MetaRobots` — Gets the current robots directive.
|
|
32
|
+
- `getAuthor(): string` — Gets the author name.
|
|
33
|
+
- `getSiteName(): string` — Gets the site name (from OG settings).
|
|
34
|
+
- `getLocale(): string` — Gets the locale (from OG settings).
|
|
35
|
+
|
|
36
|
+
### Setters
|
|
37
|
+
|
|
38
|
+
All setter methods return `typeof MetaStatic` to support method chaining.
|
|
39
|
+
|
|
40
|
+
- `setTitle(title: string): typeof MetaStatic` — Sets the page title and updates OG/Twitter titles.
|
|
41
|
+
- `setDescription(description: string): typeof MetaStatic` — Sets the description meta tag.
|
|
42
|
+
- `setKeywords(keywords: string | string[]): typeof MetaStatic` — Sets the keywords (string or array).
|
|
43
|
+
- `setImage(image: string): typeof MetaStatic` — Sets the image for OG and Twitter.
|
|
44
|
+
- `setCanonical(canonical: string): typeof MetaStatic` — Sets the canonical URL and updates OG/Twitter URLs.
|
|
45
|
+
- `setRobots(robots: MetaRobots): typeof MetaStatic` — Sets the robots directive.
|
|
46
|
+
- `setAuthor(author: string): typeof MetaStatic` — Sets the author meta tag.
|
|
47
|
+
- `setSiteName(siteName: string): typeof MetaStatic` — Sets the site name for OG and Twitter.
|
|
48
|
+
- `setLocale(locale: string): typeof MetaStatic` — Sets the locale for Open Graph.
|
|
49
|
+
- `setSuffix(suffix?: string): typeof MetaStatic` — Sets a suffix (e.g., " | My Site") appended to titles.
|
|
50
|
+
|
|
51
|
+
### Output
|
|
52
|
+
|
|
53
|
+
- `html(): string` — Generates a complete string of HTML meta tags for all managed properties.
|
|
54
|
+
- `htmlTitle(): string` — Generates a complete HTML-safe title string.
|
|
55
|
+
|
|
56
|
+
## Architecture
|
|
57
|
+
|
|
58
|
+
`MetaStatic` works as a **static proxy**. All calls are forwarded to an internal `Meta` instance managed via `ServerStorage`.
|
|
59
|
+
|
|
60
|
+
### Request Isolation (SSR)
|
|
61
|
+
|
|
62
|
+
By using `ServerStorage`, `MetaStatic` ensures that during Server-Side Rendering (SSR), meta information for one request does not leak into another. Each request gets its own isolated context.
|
|
63
|
+
|
|
64
|
+
### Examples
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { MetaStatic } from '@dxtmisha/functional-basic';
|
|
68
|
+
|
|
69
|
+
MetaStatic
|
|
70
|
+
.setSuffix('My Online Store')
|
|
71
|
+
.setTitle('Summer Collection')
|
|
72
|
+
.setDescription('Explore our new arrivals.')
|
|
73
|
+
.setImage('https://example.com/cover.jpg')
|
|
74
|
+
.setLocale('en_US');
|
|
75
|
+
|
|
76
|
+
console.log(MetaStatic.getTitle()); // "Summer Collection"
|
|
77
|
+
document.title; // "Summer Collection - My Online Store"
|
|
78
|
+
console.log(MetaStatic.htmlTitle()); // "Summer Collection - My Online Store"
|
|
79
|
+
```
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/ru/functional-basic/Classes/MetaStatic - Управление мета-тегами (Static)'/>
|
|
4
|
+
|
|
5
|
+
# Класс MetaStatic
|
|
6
|
+
|
|
7
|
+
Класс `MetaStatic` является **статической точкой входа** для управления мета-тегами страницы, данными Open Graph (OG) и Twitter Card. Он представляет собой статическую обертку над глобально управляемым экземпляром `Meta`, предоставляя удобный синглтон-интерфейс для SEO и социальных сетей.
|
|
8
|
+
|
|
9
|
+
## Ключевые особенности
|
|
10
|
+
|
|
11
|
+
- **Статический интерфейс** — управление заголовками, описаниями и другими данными без необходимости ручного создания экземпляров.
|
|
12
|
+
- **Единое управление** — автоматическая синхронизация заголовков и другой информации между стандартными мета-тегами, OG и Twitter.
|
|
13
|
+
- **Изоляция в SSR** — использует `ServerStorage` для обеспечения изоляции данных между запросами во время рендеринга на стороне сервера.
|
|
14
|
+
- **Fluent API** — поддержка цепочки вызовов (method chaining) в методах установки.
|
|
15
|
+
|
|
16
|
+
## Методы
|
|
17
|
+
|
|
18
|
+
### Доступ
|
|
19
|
+
|
|
20
|
+
- `getItem(): Meta` — Возвращает базовый экземпляр класса `Meta`.
|
|
21
|
+
- `getOg(): MetaOg` — Получает экземпляр `MetaOg` для расширенных операций с Open Graph.
|
|
22
|
+
- `getTwitter(): MetaTwitter` — Получает экземпляр `MetaTwitter` для расширенных операций с Twitter Card.
|
|
23
|
+
|
|
24
|
+
### Получение (Getters)
|
|
25
|
+
|
|
26
|
+
- `getTitle(): string` — Возвращает текущий заголовок (без суффикса).
|
|
27
|
+
- `getDescription(): string` — Возвращает содержимое мета-тега description.
|
|
28
|
+
- `getKeywords(): string` — Возвращает список ключевых слов.
|
|
29
|
+
- `getImage(): string` — Возвращает URL изображения (из настроек OG).
|
|
30
|
+
- `getCanonical(): string` — Возвращает канонический URL.
|
|
31
|
+
- `getRobots(): MetaRobots` — Возвращает текущую директиву robots.
|
|
32
|
+
- `getAuthor(): string` — Возвращает имя автора.
|
|
33
|
+
- `getSiteName(): string` — Возвращает название сайта (из настроек OG).
|
|
34
|
+
- `getLocale(): string` — Возвращает локаль (из настроек OG).
|
|
35
|
+
|
|
36
|
+
### Установка (Setters)
|
|
37
|
+
|
|
38
|
+
Все методы установки возвращают `typeof MetaStatic` для поддержки цепочки вызовов.
|
|
39
|
+
|
|
40
|
+
- `setTitle(title: string): typeof MetaStatic` — Устанавливает заголовок страницы и обновляет заголовки OG/Twitter.
|
|
41
|
+
- `setDescription(description: string): typeof MetaStatic` — Устанавливает мета-тег description.
|
|
42
|
+
- `setKeywords(keywords: string | string[]): typeof MetaStatic` — Устанавливает ключевые слова (строка или массив).
|
|
43
|
+
- `setImage(image: string): typeof MetaStatic` — Устанавливает изображение для OG и Twitter.
|
|
44
|
+
- `setCanonical(canonical: string): typeof MetaStatic` — Устанавливает канонический URL и обновляет URL для OG/Twitter.
|
|
45
|
+
- `setRobots(robots: MetaRobots): typeof MetaStatic` — Устанавливает директиву robots.
|
|
46
|
+
- `setAuthor(author: string): typeof MetaStatic` — Устанавливает мета-тег author.
|
|
47
|
+
- `setSiteName(siteName: string): typeof MetaStatic` — Устанавливает название сайта для OG и Twitter.
|
|
48
|
+
- `setLocale(locale: string): typeof MetaStatic` — Устанавливает локаль для Open Graph.
|
|
49
|
+
- `setSuffix(suffix?: string): typeof MetaStatic` — Устанавливает суффикс (например, " | Мой Сайт"), добавляемый к заголовкам.
|
|
50
|
+
|
|
51
|
+
### Вывод
|
|
52
|
+
|
|
53
|
+
- `html(): string` — Генерирует полную строку HTML-тегов для всех управляемых свойств.
|
|
54
|
+
- `htmlTitle(): string` — Генерирует полную HTML-безопасную строку заголовка.
|
|
55
|
+
|
|
56
|
+
## Архитектура
|
|
57
|
+
|
|
58
|
+
`MetaStatic` работает как **статический прокси**. Все вызовы методов перенаправляются на внутренний экземпляр `Meta`, который управляется через `ServerStorage`.
|
|
59
|
+
|
|
60
|
+
### Изоляция запросов (SSR)
|
|
61
|
+
|
|
62
|
+
Благодаря использованию `ServerStorage`, `MetaStatic` гарантирует, что при рендеринге на стороне сервера (SSR) информация одного запроса не попадет в другой. Каждый запрос получает свой изолированный контекст.
|
|
63
|
+
|
|
64
|
+
### Примеры
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { MetaStatic } from '@dxtmisha/functional-basic';
|
|
68
|
+
|
|
69
|
+
MetaStatic
|
|
70
|
+
.setSuffix('Мой Интернет Магазин')
|
|
71
|
+
.setTitle('Летняя коллекция')
|
|
72
|
+
.setDescription('Ознакомьтесь с нашими новинками.')
|
|
73
|
+
.setImage('https://example.com/cover.jpg')
|
|
74
|
+
.setLocale('ru_RU');
|
|
75
|
+
|
|
76
|
+
console.log(MetaStatic.getTitle()); // "Летняя коллекция"
|
|
77
|
+
document.title; // "Летняя коллекция - Мой Интернет Магазин"
|
|
78
|
+
console.log(MetaStatic.htmlTitle()); // "Летняя коллекция - Мой Интернет Магазин"
|
|
79
|
+
```
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/vi/functional-basic/Classes/MetaStatic - Quản lý Meta Tags (Static)'/>
|
|
4
|
+
|
|
5
|
+
# Class MetaStatic
|
|
6
|
+
|
|
7
|
+
Lớp `MetaStatic` là **điểm truy cập tĩnh** để quản lý các thẻ meta của trang, dữ liệu Open Graph (OG) và Twitter Card. Nó hoạt động như một lớp vỏ bọc tĩnh (static wrapper) xung quanh một thực thể `Meta` được quản lý toàn cục, cung cấp một giao diện singleton sạch sẽ để quản lý SEO và chia sẻ mạng xã hội.
|
|
8
|
+
|
|
9
|
+
## Các tính năng chính
|
|
10
|
+
|
|
11
|
+
- **Giao diện tĩnh** — Quản lý tiêu đề trang, mô tả và nhiều thứ khác mà không cần khởi tạo thủ công.
|
|
12
|
+
- **Quản lý thống nhất** — Tự động đồng bộ hóa tiêu đề và các thông tin khác trên các thẻ meta tiêu chuẩn, OG và Twitter.
|
|
13
|
+
- **Cách ly trong SSR** — Sử dụng `ServerStorage` để xử lý cách ly thực thể trong quá trình render phía máy chủ (server-side rendering).
|
|
14
|
+
- **Fluent API** — Hỗ trợ kỹ thuật method chaining cho các phương thức thiết lập (setter).
|
|
15
|
+
|
|
16
|
+
## Các phương thức
|
|
17
|
+
|
|
18
|
+
### Truy cập
|
|
19
|
+
|
|
20
|
+
- `getItem(): Meta` — Trả về thực entity `Meta` cơ sở.
|
|
21
|
+
- `getOg(): MetaOg` — Lấy thực thể `MetaOg` cho các thao tác Open Graph nâng cao.
|
|
22
|
+
- `getTwitter(): MetaTwitter` — Lấy thực thể `MetaTwitter` cho các thao tác Twitter Card nâng cao.
|
|
23
|
+
|
|
24
|
+
### Lấy dữ liệu (Getters)
|
|
25
|
+
|
|
26
|
+
- `getTitle(): string` — Lấy tiêu đề trang hiện tại (không bao gồm hậu tố).
|
|
27
|
+
- `getDescription(): string` — Lấy nội dung thẻ meta description.
|
|
28
|
+
- `getKeywords(): string` — Lấy các từ khóa hiện tại.
|
|
29
|
+
- `getImage(): string` — Lấy URL hình ảnh (từ cài đặt OG).
|
|
30
|
+
- `getCanonical(): string` — Lấy URL chuẩn (canonical).
|
|
31
|
+
- `getRobots(): MetaRobots` — Lấy chỉ thị robots hiện tại.
|
|
32
|
+
- `getAuthor(): string` — Lấy tên tác giả.
|
|
33
|
+
- `getSiteName(): string` — Lấy tên trang web (từ cài đặt OG).
|
|
34
|
+
- `getLocale(): string` — Lấy mã ngôn ngữ/khu vực (từ cài đặt OG).
|
|
35
|
+
|
|
36
|
+
### Thiết lập (Setters)
|
|
37
|
+
|
|
38
|
+
Tất cả các phương thức thiết lập đều trả về `typeof MetaStatic` để hỗ trợ method chaining.
|
|
39
|
+
|
|
40
|
+
- `setTitle(title: string): typeof MetaStatic` — Thiết lập tiêu đề trang và cập nhật tiêu đề OG/Twitter.
|
|
41
|
+
- `setDescription(description: string): typeof MetaStatic` — Thiết lập thẻ meta description.
|
|
42
|
+
- `setKeywords(keywords: string | string[]): typeof MetaStatic` — Thiết lập từ khóa (chuỗi hoặc mảng).
|
|
43
|
+
- `setImage(image: string): typeof MetaStatic` — Thiết lập hình ảnh cho OG và Twitter.
|
|
44
|
+
- `setCanonical(canonical: string): typeof MetaStatic` — Thiết lập URL chuẩn và cập nhật URL cho OG/Twitter.
|
|
45
|
+
- `setRobots(robots: MetaRobots): typeof MetaStatic` — Thiết lập chỉ thị robots.
|
|
46
|
+
- `setAuthor(author: string): typeof MetaStatic` — Thiết lập thẻ meta author.
|
|
47
|
+
- `setSiteName(siteName: string): typeof MetaStatic` — Thiết lập tên trang web cho OG và Twitter.
|
|
48
|
+
- `setLocale(locale: string): typeof MetaStatic` — Thiết lập mã ngôn ngữ cho Open Graph.
|
|
49
|
+
- `setSuffix(suffix?: string): typeof MetaStatic` — Thiết lập hậu tố (ví dụ: " | My Site") được thêm vào cuối tiêu đề.
|
|
50
|
+
|
|
51
|
+
### Đầu ra
|
|
52
|
+
|
|
53
|
+
- `html(): string` — Tạo ra một chuỗi đầy đủ các thẻ HTML meta cho tất cả các thuộc tính được quản lý.
|
|
54
|
+
- `htmlTitle(): string` — Tạo ra chuỗi tiêu đề an toàn với HTML.
|
|
55
|
+
|
|
56
|
+
## Kiến trúc
|
|
57
|
+
|
|
58
|
+
`MetaStatic` hoạt động như một **proxy tĩnh**. Tất cả các cuộc gọi phương thức được chuyển tiếp đến một thực thể `Meta` nội bộ được quản lý thông qua `ServerStorage`.
|
|
59
|
+
|
|
60
|
+
### Cách ly yêu cầu (SSR)
|
|
61
|
+
|
|
62
|
+
Bằng cách sử dụng `ServerStorage`, `MetaStatic` đảm bảo rằng trong quá trình Render phía máy chủ (SSR), thông tin meta của một yêu cầu không bị rò rỉ sang yêu cầu khác. Mỗi yêu cầu có một bối cảnh cách ly riêng.
|
|
63
|
+
|
|
64
|
+
### Ví dụ
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { MetaStatic } from '@dxtmisha/functional-basic';
|
|
68
|
+
|
|
69
|
+
MetaStatic
|
|
70
|
+
.setSuffix('Cửa hàng trực tuyến của tôi')
|
|
71
|
+
.setTitle('Bộ sưu tập mùa hè')
|
|
72
|
+
.setDescription('Khám phá các sản phẩm mới nhất của chúng tôi.')
|
|
73
|
+
.setImage('https://example.com/cover.jpg')
|
|
74
|
+
.setLocale('vi_VN');
|
|
75
|
+
|
|
76
|
+
console.log(MetaStatic.getTitle()); // "Bộ sưu tập mùa hè"
|
|
77
|
+
document.title; // "Bộ sưu tập mùa hè - Cửa hàng trực tuyến của tôi"
|
|
78
|
+
console.log(MetaStatic.htmlTitle()); // "Bộ sưu tập mùa hè - Cửa hàng trực tuyến của tôi"
|
|
79
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Classes/ResumableTimer - Pausable Timer'/>
|
|
4
|
+
|
|
5
|
+
# ResumableTimer Class
|
|
6
|
+
|
|
7
|
+
A class for creating a timer that can be paused, resumed, reset, and cleared. It is useful for UI elements that need to track elapsed time even when interrupted, such as progress bars, auto-closing notifications, or slides.
|
|
8
|
+
|
|
9
|
+
## Key Features
|
|
10
|
+
|
|
11
|
+
- **Pause & Resume** — stop the countdown and continue later from the exact millisecond where it left off.
|
|
12
|
+
- **Completion Tracking** — explicitly tracks if the timer has finished its execution.
|
|
13
|
+
- **Robust Logic** — handles edge cases like resuming when time has already elapsed.
|
|
14
|
+
- **Fluent Interface** — methods return `this`, allowing for method chaining.
|
|
15
|
+
|
|
16
|
+
## Initialization
|
|
17
|
+
|
|
18
|
+
To initialize the object, call the constructor `ResumableTimer(callback, delay, blockStart)`.
|
|
19
|
+
|
|
20
|
+
**Parameters:**
|
|
21
|
+
- `callback: FunctionVoid` — the function to be called after the delay.
|
|
22
|
+
- `delay: number = 320` — delay in milliseconds.
|
|
23
|
+
- `blockStart: boolean = false` — if true, the timer will not start immediately.
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { ResumableTimer } from '@dxtmisha/functional-basic'
|
|
27
|
+
|
|
28
|
+
// 1. Basic initialization (starts immediately)
|
|
29
|
+
const timer = new ResumableTimer(() => {
|
|
30
|
+
console.log('Timer finished!')
|
|
31
|
+
}, 5000)
|
|
32
|
+
|
|
33
|
+
// 2. Initialization without starting
|
|
34
|
+
const delayedTimer = new ResumableTimer(
|
|
35
|
+
() => console.log('Task started!'),
|
|
36
|
+
3000,
|
|
37
|
+
true
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
delayedTimer.resume() // Start it manually
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Methods
|
|
44
|
+
|
|
45
|
+
### Management
|
|
46
|
+
|
|
47
|
+
- `resume(): this` — Starts or resumes the timer.
|
|
48
|
+
- `pause(): this` — Pauses the timer and calculates the remaining time.
|
|
49
|
+
- `reset(): this` — Completely clears the current state and restarts the timer with the original delay.
|
|
50
|
+
- `clear(): this` — Completely stops the timer and resets all internal states.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/ru/functional-basic/Classes/ResumableTimer - Таймер с паузой'/>
|
|
4
|
+
|
|
5
|
+
# Класс ResumableTimer
|
|
6
|
+
|
|
7
|
+
Класс для создания таймера, который можно приостанавливать, возобновлять, сбрасывать и очищать. Он полезен для элементов интерфейса, которым необходимо отслеживать прошедшее время даже при прерывании, таких как прогресс-бары, автоматически закрывающиеся уведомления или слайды.
|
|
8
|
+
|
|
9
|
+
## Ключевые особенности
|
|
10
|
+
|
|
11
|
+
- **Пауза и возобновление** — останавливает обратный отсчет и продолжает его позже с точностью до миллисекунды.
|
|
12
|
+
- **Отслеживание завершения** — явно отслеживает, закончил ли таймер свое выполнение.
|
|
13
|
+
- **Надежная логика** — обрабатывает крайние случаи, такие как возобновление, когда время уже истекло.
|
|
14
|
+
- **Fluent Interface** — методы возвращают `this`, что позволяет использовать цепочки вызовов.
|
|
15
|
+
|
|
16
|
+
## Инициализация
|
|
17
|
+
|
|
18
|
+
Для инициализации объекта вызовите конструктор `ResumableTimer(callback, delay, blockStart)`.
|
|
19
|
+
|
|
20
|
+
**Параметры:**
|
|
21
|
+
- `callback: FunctionVoid` — функция, которая будет вызвана после задержки.
|
|
22
|
+
- `delay: number = 320` — задержка в миллисекундах.
|
|
23
|
+
- `blockStart: boolean = false` — если true, таймер не запустится сразу.
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { ResumableTimer } from '@dxtmisha/functional-basic'
|
|
27
|
+
|
|
28
|
+
// 1. Базовая инициализация (запускается сразу)
|
|
29
|
+
const timer = new ResumableTimer(() => {
|
|
30
|
+
console.log('Таймер завершен!')
|
|
31
|
+
}, 5000)
|
|
32
|
+
|
|
33
|
+
// 2. Инициализация без немедленного запуска
|
|
34
|
+
const delayedTimer = new ResumableTimer(
|
|
35
|
+
() => console.log('Задача запущена!'),
|
|
36
|
+
3000,
|
|
37
|
+
true
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
delayedTimer.resume() // Запуск вручную
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Методы
|
|
44
|
+
|
|
45
|
+
### Управление
|
|
46
|
+
|
|
47
|
+
- `resume(): this` — Запускает или возобновляет таймер.
|
|
48
|
+
- `pause(): this` — Приостанавливает таймер и вычисляет оставшееся время.
|
|
49
|
+
- `reset(): this` — Полностью сбрасывает текущее состояние и перезапускает таймер с исходной задержкой.
|
|
50
|
+
- `clear(): this` — Полностью останавливает таймер и сбрасывает все внутренние состояния.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/vi/functional-basic/Classes/ResumableTimer - Bộ hẹn giờ có thể tạm dừng'/>
|
|
4
|
+
|
|
5
|
+
# Lớp ResumableTimer
|
|
6
|
+
|
|
7
|
+
Lớp chuyên dùng để tạo bộ hẹn giờ có thể tạm dừng, tiếp tục, thiết lập lại và xóa bỏ. Nó hữu ích cho các thành phần giao diện người dùng cần theo dõi thời gian đã trôi qua ngay cả khi bị gián đoạn, chẳng hạn như thanh tiến trình, thông báo tự động đóng hoặc các slide.
|
|
8
|
+
|
|
9
|
+
## Các tính năng chính
|
|
10
|
+
|
|
11
|
+
- **Tạm dừng & Tiếp tục** — dừng đếm ngược và tiếp tục sau đó từ chính xác mili giây đã dừng lại.
|
|
12
|
+
- **Theo dõi hoàn thành** — theo dõi rõ ràng xem bộ hẹn giờ đã kết thúc thực thi hay chưa.
|
|
13
|
+
- **Logic mạnh mẽ** — xử lý các trường hợp biên như tiếp tục khi thời gian đã trôi qua hết.
|
|
14
|
+
- **Giao diện mượt mà (Fluent Interface)** — các phương thức trả về `this`, cho phép gọi chuỗi phương thức.
|
|
15
|
+
|
|
16
|
+
## Khởi tạo
|
|
17
|
+
|
|
18
|
+
Để khởi tạo đối tượng, hãy gọi hàm khởi tạo `ResumableTimer(callback, delay, blockStart)`.
|
|
19
|
+
|
|
20
|
+
**Tham số:**
|
|
21
|
+
- `callback: FunctionVoid` — hàm sẽ được gọi sau khoảng thời gian trễ.
|
|
22
|
+
- `delay: number = 320` — thời gian trễ tính bằng mili giây.
|
|
23
|
+
- `blockStart: boolean = false` — nếu là true, bộ hẹn giờ sẽ không bắt đầu ngay lập tức.
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { ResumableTimer } from '@dxtmisha/functional-basic'
|
|
27
|
+
|
|
28
|
+
// 1. Khởi tạo cơ bản (bắt đầu ngay lập tức)
|
|
29
|
+
const timer = new ResumableTimer(() => {
|
|
30
|
+
console.log('Hết giờ!')
|
|
31
|
+
}, 5000)
|
|
32
|
+
|
|
33
|
+
// 2. Khởi tạo không bắt đầu ngay
|
|
34
|
+
const delayedTimer = new ResumableTimer(
|
|
35
|
+
() => console.log('Nhiệm vụ bắt đầu!'),
|
|
36
|
+
3000,
|
|
37
|
+
true
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
delayedTimer.resume() // Bắt đầu thủ công
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Các phương thức
|
|
44
|
+
|
|
45
|
+
### Quản lý
|
|
46
|
+
|
|
47
|
+
- `resume(): this` — Bắt đầu hoặc tiếp tục bộ hẹn giờ.
|
|
48
|
+
- `pause(): this` — Tạm dừng bộ hẹn giờ và tính toán thời gian còn lại.
|
|
49
|
+
- `reset(): this` — Xóa hoàn toàn trạng thái hiện tại và khởi động lại với độ trễ ban đầu.
|
|
50
|
+
- `clear(): this` — Dừng hoàn toàn bộ hẹn giờ và thiết lập lại tất cả các trạng thái nội bộ.
|