erudit 2.0.0-dev.7 → 2.0.0-dev.9

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 (212) hide show
  1. package/.nuxtrc +1 -1
  2. package/app/app.vue +172 -172
  3. package/app/components/Loading.vue +23 -23
  4. package/app/components/SiteAside.vue +382 -382
  5. package/app/components/SiteMain.vue +35 -35
  6. package/app/components/ads/BannerTemplate.vue +51 -51
  7. package/app/components/ads/BottomBanner.vue +45 -45
  8. package/app/components/ads/LeftBanner.vue +50 -50
  9. package/app/components/aside/AsideListItem.vue +74 -74
  10. package/app/components/aside/AsideMajor.vue +56 -56
  11. package/app/components/aside/AsideMinor.vue +71 -71
  12. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  13. package/app/components/aside/major/PaneSwitch.vue +54 -54
  14. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  15. package/app/components/aside/major/SiteInfo.vue +85 -85
  16. package/app/components/aside/major/panes/Language.vue +79 -79
  17. package/app/components/aside/major/panes/Pages.vue +34 -34
  18. package/app/components/aside/major/panes/Search.vue +2 -2
  19. package/app/components/aside/major/panes/nav/Nav.vue +91 -91
  20. package/app/components/aside/major/panes/nav/NavBook.vue +86 -86
  21. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  22. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  23. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  24. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  25. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  26. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  27. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  28. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  29. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  30. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  31. package/app/components/aside/major/panes/other/ItemGenerator.vue +15 -15
  32. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  33. package/app/components/aside/major/panes/other/Other.vue +16 -16
  34. package/app/components/aside/minor/AsideMinorContributor.vue +4 -4
  35. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  36. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  37. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  38. package/app/components/aside/minor/Contribute.vue +145 -145
  39. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  40. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  41. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  42. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  43. package/app/components/aside/minor/topic/TopicToc.vue +203 -202
  44. package/app/components/aside/minor/topic/TopicTocItem.vue +31 -31
  45. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  46. package/app/components/bitran/BitranContent.vue +63 -64
  47. package/app/components/bitran/RenderWrapper.vue +10 -12
  48. package/app/components/contributor/ContributorAvatar.vue +43 -43
  49. package/app/components/contributor/ContributorListItem.vue +35 -35
  50. package/app/components/main/topic/MainTopic.vue +79 -79
  51. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  52. package/app/components/main/utils/Breadcrumb.vue +75 -75
  53. package/app/components/main/utils/ContentDecoration.vue +29 -29
  54. package/app/components/main/utils/ContentDescription.vue +19 -19
  55. package/app/components/main/utils/ContentFlag.vue +15 -15
  56. package/app/components/main/utils/ContentPopover.vue +176 -176
  57. package/app/components/main/utils/ContentPopovers.vue +105 -105
  58. package/app/components/main/utils/ContentReferences.vue +75 -75
  59. package/app/components/main/utils/ContentSection.vue +41 -41
  60. package/app/components/main/utils/ContentTitle.vue +36 -36
  61. package/app/components/main/utils/reference/ReferenceGroup.vue +40 -40
  62. package/app/components/main/utils/reference/ReferenceItem.vue +63 -63
  63. package/app/components/main/utils/reference/ReferenceSource.vue +109 -109
  64. package/app/components/preview/Preview.vue +177 -177
  65. package/app/components/preview/PreviewDisplay.vue +139 -139
  66. package/app/components/preview/PreviewFooterAction.vue +73 -73
  67. package/app/components/preview/PreviewLoading.vue +14 -14
  68. package/app/components/preview/PreviewScreen.vue +99 -99
  69. package/app/components/preview/display/Alert.vue +50 -50
  70. package/app/components/preview/display/Custom.vue +18 -18
  71. package/app/components/preview/display/GenericLink.vue +48 -48
  72. package/app/components/preview/display/PageLink.vue +20 -20
  73. package/app/components/preview/display/Unique.vue +49 -49
  74. package/app/components/transition/Fade.vue +21 -21
  75. package/app/components/tree/TreeContainer.vue +11 -11
  76. package/app/components/tree/TreeItem.vue +89 -89
  77. package/app/composables/bitran.ts +98 -103
  78. package/app/composables/bitranContent.ts +2 -1
  79. package/app/composables/contentPage.ts +1 -1
  80. package/app/composables/phrases.ts +80 -80
  81. package/app/pages/_test/preview.vue +110 -110
  82. package/app/pages/article/[...articleId].vue +2 -2
  83. package/app/pages/book/[...bookId].vue +47 -47
  84. package/app/pages/group/[...groupId].vue +65 -64
  85. package/app/pages/index.vue +32 -32
  86. package/app/pages/members.vue +6 -6
  87. package/app/pages/practice/[...practice].vue +2 -2
  88. package/app/pages/summary/[...summaryId].vue +2 -2
  89. package/app/public/favicon/article.svg +9 -9
  90. package/app/public/favicon/default.svg +9 -9
  91. package/app/public/favicon/practice.svg +9 -9
  92. package/app/public/favicon/summary.svg +9 -9
  93. package/app/public/logotype.svg +16 -16
  94. package/app/public/user.svg +9 -9
  95. package/app/scripts/_immediate.js +3 -3
  96. package/app/scripts/flag.ts +28 -28
  97. package/app/scripts/og.ts +27 -27
  98. package/app/scripts/preview/data/unique.ts +3 -3
  99. package/app/scripts/preview/display.ts +5 -7
  100. package/app/scripts/preview/request.ts +2 -2
  101. package/app/styles/_immediate.css +2 -2
  102. package/app/styles/_util.scss +49 -49
  103. package/app/styles/_utils.scss +44 -44
  104. package/app/styles/default.scss +84 -84
  105. package/app/styles/partials/_darkMagic.scss +6 -6
  106. package/app/styles/partials/_fnav.scss +17 -17
  107. package/app/styles/partials/_preview.scss +6 -6
  108. package/globalPath.ts +21 -24
  109. package/globals/bitran.ts +21 -13
  110. package/globals/erudit.ts +5 -5
  111. package/globals/register.ts +18 -18
  112. package/languages/en.ts +95 -95
  113. package/languages/ru.ts +99 -99
  114. package/module/config.ts +34 -34
  115. package/module/imports.ts +46 -46
  116. package/module/index.ts +47 -35
  117. package/module/logger.ts +10 -10
  118. package/module/restart.ts +61 -61
  119. package/nuxt.config.ts +107 -96
  120. package/package.json +9 -6
  121. package/server/api/aside/major/nav/bookIds.ts +5 -5
  122. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  123. package/server/api/aside/major/nav/global.ts +7 -7
  124. package/server/api/aside/minor/news.ts +7 -7
  125. package/server/api/aside/minor/path.ts +78 -78
  126. package/server/api/bitran/content/[location].ts +7 -7
  127. package/server/api/bitran/toc/[location].ts +7 -7
  128. package/server/api/content/data.ts +72 -72
  129. package/server/api/fake/content.ts +10 -10
  130. package/server/api/fake/shared/languages.ts +12 -12
  131. package/server/api/language/functions.ts +12 -12
  132. package/server/api/language/phrase/[phraseId].ts +19 -19
  133. package/server/api/language/phraseIds.ts +8 -8
  134. package/server/api/preview/page/[...parts].ts +51 -51
  135. package/server/api/preview/unique/[location].ts +55 -55
  136. package/server/plugin/bitran/content.ts +55 -44
  137. package/server/plugin/bitran/products/include.ts +28 -27
  138. package/server/plugin/bitran/products/link.ts +11 -9
  139. package/server/plugin/bitran/setup.ts +0 -1
  140. package/server/plugin/bitran/toc.ts +25 -24
  141. package/server/plugin/bitran/transpiler.ts +46 -0
  142. package/server/plugin/build/close.ts +10 -10
  143. package/server/plugin/build/jobs/content/parse.ts +37 -27
  144. package/server/plugin/build/jobs/language.ts +36 -36
  145. package/server/plugin/build/process.ts +25 -25
  146. package/server/plugin/build/rebuild.ts +55 -55
  147. package/server/plugin/build/setup.ts +21 -21
  148. package/server/plugin/global.ts +18 -18
  149. package/server/plugin/importer.ts +12 -12
  150. package/server/plugin/index.ts +9 -9
  151. package/server/plugin/logger.ts +23 -23
  152. package/server/tsconfig.json +7 -7
  153. package/shared/bitran/context.ts +3 -2
  154. package/shared/bitran/default.ts +46 -0
  155. package/shared/bitran/{products/link/render → link}/Link.vue +7 -14
  156. package/shared/bitran/link/factory.ts +24 -0
  157. package/shared/bitran/link/languages/en.ts +7 -0
  158. package/shared/bitran/link/languages/ru.ts +7 -0
  159. package/shared/bitran/link/renderer.ts +21 -0
  160. package/shared/bitran/link/shared.ts +17 -0
  161. package/shared/bitran/{products/link → link}/target.ts +1 -1
  162. package/shared/bitran/link/transpiler.ts +10 -0
  163. package/shared/content/context.ts +9 -9
  164. package/shared/content/data/base.ts +32 -32
  165. package/shared/content/data/index.ts +5 -5
  166. package/shared/content/data/type/book.ts +5 -5
  167. package/shared/content/data/type/group.ts +6 -6
  168. package/shared/content/data/type/topic.ts +11 -11
  169. package/shared/content/previousNext.ts +9 -9
  170. package/shared/link.ts +25 -25
  171. package/shared/types/language.ts +75 -75
  172. package/test/bitran/{products/link → link}/target.test.ts +5 -2
  173. package/tsconfig.json +8 -8
  174. package/utils/stress.ts +9 -9
  175. package/server/plugin/bitran/core.ts +0 -51
  176. package/shared/bitran/alias.ts +0 -17
  177. package/shared/bitran/products/alias/core/factory.ts +0 -46
  178. package/shared/bitran/products/alias/core/index.ts +0 -13
  179. package/shared/bitran/products/alias/render/Alias.vue +0 -10
  180. package/shared/bitran/products/alias/render/icon.svg +0 -3
  181. package/shared/bitran/products/alias/render/index.ts +0 -17
  182. package/shared/bitran/products/alias/render/languages/en.ts +0 -5
  183. package/shared/bitran/products/alias/render/languages/ru.ts +0 -5
  184. package/shared/bitran/products/alias/shared.ts +0 -11
  185. package/shared/bitran/products/heading/core/factory.ts +0 -53
  186. package/shared/bitran/products/heading/core/index.ts +0 -19
  187. package/shared/bitran/products/heading/render/Heading.vue +0 -47
  188. package/shared/bitran/products/heading/render/icon.svg +0 -3
  189. package/shared/bitran/products/heading/render/index.ts +0 -17
  190. package/shared/bitran/products/heading/render/languages/en.ts +0 -5
  191. package/shared/bitran/products/heading/render/languages/ru.ts +0 -5
  192. package/shared/bitran/products/heading/shared.ts +0 -13
  193. package/shared/bitran/products/include/core/factory.ts +0 -61
  194. package/shared/bitran/products/include/core/index.ts +0 -13
  195. package/shared/bitran/products/include/render/Include.vue +0 -13
  196. package/shared/bitran/products/include/render/icon.svg +0 -3
  197. package/shared/bitran/products/include/render/index.ts +0 -18
  198. package/shared/bitran/products/include/render/languages/en.ts +0 -5
  199. package/shared/bitran/products/include/render/languages/ru.ts +0 -5
  200. package/shared/bitran/products/include/shared.ts +0 -15
  201. package/shared/bitran/products/link/core/factory.ts +0 -20
  202. package/shared/bitran/products/link/core/index.ts +0 -17
  203. package/shared/bitran/products/link/render/index.ts +0 -17
  204. package/shared/bitran/products/link/render/languages/en.ts +0 -5
  205. package/shared/bitran/products/link/render/languages/ru.ts +0 -5
  206. package/shared/bitran/products/link/shared.ts +0 -15
  207. package/test/bitran/alias.test.ts +0 -44
  208. package/test/bitran/products/alias.test.ts +0 -83
  209. package/test/bitran/products/heading.test.ts +0 -119
  210. package/test/bitran/products/include.test.ts +0 -77
  211. package/test/bitran/products/link/factory.test.ts +0 -30
  212. /package/shared/bitran/{products/link/render → link}/icon.svg +0 -0
@@ -1,55 +1,55 @@
1
- import chokidar, { type FSWatcher } from 'chokidar';
2
-
3
- import { ERUDIT_DIR, PROJECT_DIR } from '#erudit/globalPaths';
4
- import { ERUDIT_SERVER } from '@server/global';
5
- import { logger } from '@server/logger';
6
- import { build } from '@server/build/process';
7
- import { stress } from '@erudit/utils/stress';
8
-
9
- const watchTargets: string[] = [
10
- // Languages
11
- ERUDIT_DIR + '/languages',
12
- // Content directory
13
- PROJECT_DIR + '/content',
14
- // Contributors directory
15
- PROJECT_DIR + '/contributors',
16
- ];
17
-
18
- const ignoreTargets: string[] = [];
19
-
20
- const rebuildDelay = 300;
21
-
22
- //
23
- //
24
- //
25
-
26
- let watcher: FSWatcher;
27
- let rebuildTimeout: any;
28
- let rebuildRequested = false;
29
-
30
- export async function setupRebuildWatcher() {
31
- if (watcher) return;
32
-
33
- watcher = chokidar.watch(watchTargets, {
34
- ignored: ignoreTargets,
35
- ignoreInitial: true,
36
- });
37
-
38
- watcher.on('all', (event, path) =>
39
- requestServerRebuild(`File change: ${stress(path)}`),
40
- );
41
- }
42
-
43
- export async function requestServerRebuild(reason?: string) {
44
- if (rebuildRequested) return;
45
-
46
- clearTimeout(rebuildTimeout);
47
- rebuildTimeout = setTimeout(async () => {
48
- rebuildRequested = true;
49
- await ERUDIT_SERVER.BUILD_PROMISE;
50
- console.log('\n');
51
- logger.info(`Rebuilding server data!${reason ? ` ${reason}` : ''}\n\n`);
52
- await build();
53
- rebuildRequested = false;
54
- }, rebuildDelay);
55
- }
1
+ import chokidar, { type FSWatcher } from 'chokidar';
2
+
3
+ import { ERUDIT_DIR, PROJECT_DIR } from '#erudit/globalPaths';
4
+ import { ERUDIT_SERVER } from '@server/global';
5
+ import { logger } from '@server/logger';
6
+ import { build } from '@server/build/process';
7
+ import { stress } from '@erudit/utils/stress';
8
+
9
+ const watchTargets: string[] = [
10
+ // Languages
11
+ ERUDIT_DIR + '/languages',
12
+ // Content directory
13
+ PROJECT_DIR + '/content',
14
+ // Contributors directory
15
+ PROJECT_DIR + '/contributors',
16
+ ];
17
+
18
+ const ignoreTargets: string[] = [];
19
+
20
+ const rebuildDelay = 300;
21
+
22
+ //
23
+ //
24
+ //
25
+
26
+ let watcher: FSWatcher;
27
+ let rebuildTimeout: any;
28
+ let rebuildRequested = false;
29
+
30
+ export async function setupRebuildWatcher() {
31
+ if (watcher) return;
32
+
33
+ watcher = chokidar.watch(watchTargets, {
34
+ ignored: ignoreTargets,
35
+ ignoreInitial: true,
36
+ });
37
+
38
+ watcher.on('all', (event, path) =>
39
+ requestServerRebuild(`File change: ${stress(path)}`),
40
+ );
41
+ }
42
+
43
+ export async function requestServerRebuild(reason?: string) {
44
+ if (rebuildRequested) return;
45
+
46
+ clearTimeout(rebuildTimeout);
47
+ rebuildTimeout = setTimeout(async () => {
48
+ rebuildRequested = true;
49
+ await ERUDIT_SERVER.BUILD_PROMISE;
50
+ console.log('\n');
51
+ logger.info(`Rebuilding server data!${reason ? ` ${reason}` : ''}\n\n`);
52
+ await build();
53
+ rebuildRequested = false;
54
+ }, rebuildDelay);
55
+ }
@@ -1,21 +1,21 @@
1
- import eruditConfig from '#erudit/config';
2
-
3
- import { registerGlobals } from '@erudit/globals/register';
4
- import { debug } from '@server/logger';
5
- import { ERUDIT_SERVER } from '@server/global';
6
-
7
- import { setupRebuildWatcher } from './rebuild';
8
- import { setupDatabase } from '../db/setup';
9
- import { setupBitranConfig } from '../bitran/setup';
10
-
11
- export async function setup() {
12
- debug.start('Running initial setup procedures...');
13
-
14
- if (import.meta.dev) await setupRebuildWatcher();
15
-
16
- registerGlobals();
17
- ERUDIT_SERVER.CONFIG = eruditConfig;
18
-
19
- await setupBitranConfig();
20
- await setupDatabase();
21
- }
1
+ import eruditConfig from '#erudit/config';
2
+
3
+ import { registerGlobals } from '@erudit/globals/register';
4
+ import { debug } from '@server/logger';
5
+ import { ERUDIT_SERVER } from '@server/global';
6
+
7
+ import { setupRebuildWatcher } from './rebuild';
8
+ import { setupDatabase } from '../db/setup';
9
+ import { setupBitranConfig } from '../bitran/setup';
10
+
11
+ export async function setup() {
12
+ debug.start('Running initial setup procedures...');
13
+
14
+ if (import.meta.dev) await setupRebuildWatcher();
15
+
16
+ registerGlobals();
17
+ ERUDIT_SERVER.CONFIG = eruditConfig;
18
+
19
+ await setupBitranConfig();
20
+ await setupDatabase();
21
+ }
@@ -1,18 +1,18 @@
1
- import type { DataSource } from 'typeorm';
2
- import type { EruditConfig } from 'erudit-cog/schema';
3
-
4
- import type { EruditPhrases } from '@shared/types/language';
5
- import type { NavNode, RootNavNode } from '@server/nav/node';
6
- import type { EruditBitranConfig } from '@erudit/globals/bitran';
7
-
8
- interface EruditServer {
9
- BUILD_PROMISE: Promise<void>;
10
- CONFIG: Partial<EruditConfig>;
11
- LANGUAGE: { phrases: EruditPhrases; functions: Record<string, Function> };
12
- DB: DataSource;
13
- NAV?: RootNavNode;
14
- NAV_BOOKS?: Record<string, NavNode>;
15
- BITRAN_CONFIG?: Partial<EruditBitranConfig>;
16
- }
17
-
18
- export const ERUDIT_SERVER: EruditServer = {} as any;
1
+ import type { DataSource } from 'typeorm';
2
+ import type { EruditConfig } from 'erudit-cog/schema';
3
+
4
+ import type { EruditPhrases } from '@shared/types/language';
5
+ import type { NavNode, RootNavNode } from '@server/nav/node';
6
+ import type { EruditBitranConfig } from '@erudit/globals/bitran';
7
+
8
+ interface EruditServer {
9
+ BUILD_PROMISE: Promise<void>;
10
+ CONFIG: Partial<EruditConfig>;
11
+ LANGUAGE: { phrases: EruditPhrases; functions: Record<string, Function> };
12
+ DB: DataSource;
13
+ NAV?: RootNavNode;
14
+ NAV_BOOKS?: Record<string, NavNode>;
15
+ BITRAN_CONFIG?: Partial<EruditBitranConfig>;
16
+ }
17
+
18
+ export const ERUDIT_SERVER: EruditServer = {} as any;
@@ -1,12 +1,12 @@
1
- import { createJiti } from 'jiti';
2
- import { ERUDIT_DIR } from '#erudit/globalPaths';
3
-
4
- const jiti = createJiti(ERUDIT_DIR, {
5
- // Enable reimporting same files during process in development mode
6
- fsCache: !import.meta.dev,
7
- moduleCache: !import.meta.dev,
8
- });
9
-
10
- export async function IMPORT(...args: Parameters<typeof jiti.import>) {
11
- return jiti.import(...args) as Promise<any>;
12
- }
1
+ import { createJiti } from 'jiti';
2
+ import { ERUDIT_DIR } from '#erudit/globalPaths';
3
+
4
+ const jiti = createJiti(ERUDIT_DIR, {
5
+ // Enable reimporting same files during process in development mode
6
+ fsCache: !import.meta.dev,
7
+ moduleCache: !import.meta.dev,
8
+ });
9
+
10
+ export async function IMPORT(...args: Parameters<typeof jiti.import>) {
11
+ return jiti.import(...args) as Promise<any>;
12
+ }
@@ -1,9 +1,9 @@
1
- import { ERUDIT_SERVER } from './global';
2
- import { build } from './build/process';
3
- import { close } from './build/close';
4
-
5
- export default defineNitroPlugin((_nitro) => {
6
- ERUDIT_SERVER.BUILD_PROMISE = build();
7
- _nitro.hooks.hook('request', async () => await ERUDIT_SERVER.BUILD_PROMISE);
8
- _nitro.hooks.hook('close', close);
9
- });
1
+ import { ERUDIT_SERVER } from './global';
2
+ import { build } from './build/process';
3
+ import { close } from './build/close';
4
+
5
+ export default defineNitroPlugin((_nitro) => {
6
+ ERUDIT_SERVER.BUILD_PROMISE = build();
7
+ _nitro.hooks.hook('request', async () => await ERUDIT_SERVER.BUILD_PROMISE);
8
+ _nitro.hooks.hook('close', close);
9
+ });
@@ -1,23 +1,23 @@
1
- import chalk from 'chalk';
2
- import { createConsola } from 'consola';
3
- import { brandColorTitle } from 'erudit-cog/utils/brand';
4
-
5
- import eruditConfig from '#erudit/config';
6
-
7
- // TODO: Consola has buggy behaviour when called inside Nitro
8
- // @see https://github.com/nitrojs/nitro/issues/3079
9
-
10
- export const logger = createConsola({
11
- defaults: {
12
- //tag: brandColorTitle + ' Server',
13
- message: chalk.gray(`[${brandColorTitle} Server]`),
14
- },
15
- });
16
-
17
- export const debug = createConsola({
18
- defaults: {
19
- //tag: brandColorTitle + ' Server Debug',
20
- message: chalk.gray(`[${brandColorTitle} Server Debug]`),
21
- level: eruditConfig?.debug?.log ? 3 : -999,
22
- },
23
- });
1
+ import chalk from 'chalk';
2
+ import { createConsola } from 'consola';
3
+ import { brandColorTitle } from 'erudit-cog/utils/brand';
4
+
5
+ import eruditConfig from '#erudit/config';
6
+
7
+ // TODO: Consola has buggy behaviour when called inside Nitro
8
+ // @see https://github.com/nitrojs/nitro/issues/3079
9
+
10
+ export const logger = createConsola({
11
+ defaults: {
12
+ //tag: brandColorTitle + ' Server',
13
+ message: chalk.gray(`[${brandColorTitle} Server]`),
14
+ },
15
+ });
16
+
17
+ export const debug = createConsola({
18
+ defaults: {
19
+ //tag: brandColorTitle + ' Server Debug',
20
+ message: chalk.gray(`[${brandColorTitle} Server Debug]`),
21
+ level: eruditConfig?.debug?.log ? 3 : -999,
22
+ },
23
+ });
@@ -1,7 +1,7 @@
1
- {
2
- "extends": "../../../playground/.erudit/nuxt/.nuxt/tsconfig.server.json",
3
- "compilerOptions": {
4
- "verbatimModuleSyntax": true
5
- },
6
- "exclude": ["../module/**/*", "../globalPath.ts"]
7
- }
1
+ {
2
+ "extends": "../../../playground/.erudit/nuxt/.nuxt/tsconfig.server.json",
3
+ "compilerOptions": {
4
+ "verbatimModuleSyntax": true
5
+ },
6
+ "exclude": ["../module/**/*", "../globalPath.ts"]
7
+ }
@@ -1,7 +1,8 @@
1
- import type { BitranAliases } from './alias';
1
+ import { type Aliases } from '@erudit-js/bitran-elements/aliases/shared';
2
+
2
3
  import type { BitranLocation } from './location';
3
4
 
4
5
  export interface BitranContext {
5
6
  location: BitranLocation;
6
- aliases: BitranAliases;
7
+ aliases: Aliases;
7
8
  }
@@ -0,0 +1,46 @@
1
+ import {
2
+ defineBitranElement,
3
+ type BitranElements,
4
+ } from '@erudit/globals/bitran';
5
+
6
+ // Erudit Default Elements
7
+ import {
8
+ aliasesName,
9
+ type AliasesSchema,
10
+ } from '@erudit-js/bitran-elements/aliases/shared';
11
+ import { aliasesTranspiler } from '@erudit-js/bitran-elements/aliases/transpiler';
12
+ import { aliasesRenderer } from '@erudit-js/bitran-elements/aliases/renderer';
13
+ import {
14
+ includeName,
15
+ type IncludeSchema,
16
+ } from '@erudit-js/bitran-elements/include/shared';
17
+ import { includeTranspiler } from '@erudit-js/bitran-elements/include/transpiler';
18
+ import { includeRenderer } from '@erudit-js/bitran-elements/include/renderer';
19
+ import {
20
+ headingName,
21
+ type HeadingSchema,
22
+ } from '@erudit-js/bitran-elements/heading/shared';
23
+ import { headingTranspiler } from '@erudit-js/bitran-elements/heading/transpiler';
24
+ import { headingRenderer } from '@erudit-js/bitran-elements/heading/renderer';
25
+ import { linkName, type LinkSchema } from '@erudit/shared/bitran/link/shared';
26
+ import { linkTranspiler } from '@erudit/shared/bitran/link/transpiler';
27
+ import { linkRenderer } from '@erudit/shared/bitran/link/renderer';
28
+
29
+ export const defaultElements: BitranElements = {
30
+ [aliasesName]: defineBitranElement<AliasesSchema>({
31
+ transpiler: async () => aliasesTranspiler,
32
+ renderer: async () => aliasesRenderer,
33
+ }),
34
+ [includeName]: defineBitranElement<IncludeSchema>({
35
+ transpiler: async () => includeTranspiler,
36
+ renderer: async () => includeRenderer,
37
+ }),
38
+ [headingName]: defineBitranElement<HeadingSchema>({
39
+ transpiler: async () => headingTranspiler,
40
+ renderer: async () => headingRenderer,
41
+ }),
42
+ [linkName]: defineBitranElement<LinkSchema>({
43
+ transpiler: async () => linkTranspiler,
44
+ renderer: async () => linkRenderer,
45
+ }),
46
+ };
@@ -1,17 +1,17 @@
1
1
  <script lang="ts" setup>
2
- import { useParseData, useRenderData, type ProductProps } from 'bitran/render';
2
+ import type { ElementProps } from '@bitran-js/renderer-vue';
3
3
  import { isContentType, isTopicPart } from 'erudit-cog/schema';
4
4
 
5
5
  import { CONTENT_TYPE_ICON, ICON, TOPIC_PART_ICON } from '@erudit/shared/icons';
6
- import type { LinkType } from '../shared';
6
+ import type { LinkSchema } from './shared';
7
7
  import { MyIcon, MyRuntimeIcon } from '#components';
8
8
  import { showPreview, togglePreview } from '@erudit/app/scripts/preview/state';
9
9
  import { PreviewRequestType } from '@erudit/app/scripts/preview/request';
10
10
  import { encodeBitranLocation } from '@erudit/shared/bitran/location';
11
11
 
12
- const { node } = defineProps<ProductProps<LinkType>>();
13
- const { label } = useParseData(node);
14
- const linkTarget = useRenderData(node);
12
+ const { node } = defineProps<ElementProps<LinkSchema>>();
13
+ const { label } = node.parseData;
14
+ const linkTarget = node.renderData;
15
15
 
16
16
  const baseUrlPath = useBaseUrlPath();
17
17
  const formatText = useFormatText();
@@ -22,7 +22,7 @@ const Icon = await (async () => {
22
22
  if (type === 'unique') {
23
23
  return h(MyRuntimeIcon, {
24
24
  name: 'link-icon',
25
- svg: await useBitranProductIcon(linkTarget._productName!),
25
+ svg: await useBitranElementIcon(linkTarget._productName!),
26
26
  });
27
27
  } else if (type === 'absolute') {
28
28
  return h(MyIcon, { name: 'link' });
@@ -96,7 +96,7 @@ function linkClick(e: Event) {
96
96
 
97
97
  showPreview({
98
98
  type: PreviewRequestType.Link,
99
- linkData: useParseData(node),
99
+ linkData: node.parseData,
100
100
  linkTarget,
101
101
  });
102
102
 
@@ -158,13 +158,6 @@ function linkClick(e: Event) {
158
158
 
159
159
  text-decoration: none;
160
160
  color: color-mix(in srgb, var(--linkColor), transparent 10%);
161
-
162
- // &,
163
- // & svg {
164
- // width: #{$iconSize};
165
- // height: #{$iconSize};
166
- // fill: currentColor;
167
- // }
168
161
  }
169
162
 
170
163
  .label {
@@ -0,0 +1,24 @@
1
+ import {
2
+ RegexpInlinerParseFactory,
3
+ StringifyFactory,
4
+ } from '@bitran-js/transpiler';
5
+
6
+ import type { LinkNode, LinkSchema } from './shared';
7
+
8
+ export class LinkParser extends RegexpInlinerParseFactory<LinkSchema> {
9
+ regexp = /\[(.+?)\]\((.+?)\)/gm;
10
+
11
+ override async parseDataFromRegexp(match: RegExpExecArray) {
12
+ return {
13
+ label: match[1]!,
14
+ target: match[2]!,
15
+ };
16
+ }
17
+ }
18
+
19
+ export class LinkStringifier extends StringifyFactory<LinkSchema> {
20
+ override async stringifyElement(elementNode: LinkNode): Promise<string> {
21
+ const parseData = elementNode.parseData;
22
+ return `[${parseData.label}](${parseData.target})`;
23
+ }
24
+ }
@@ -0,0 +1,7 @@
1
+ import { defineLanguage } from '@bitran-js/renderer-vue';
2
+
3
+ const english = defineLanguage({
4
+ _element_title: 'Link',
5
+ });
6
+
7
+ export default english;
@@ -0,0 +1,7 @@
1
+ import { defineLanguage } from '@bitran-js/renderer-vue';
2
+
3
+ const russian = defineLanguage({
4
+ _element_title: 'Ссылка',
5
+ });
6
+
7
+ export default russian;
@@ -0,0 +1,21 @@
1
+ import {
2
+ defineElementVueRenderer,
3
+ defineComponent,
4
+ defineIcon,
5
+ defineLanguages,
6
+ } from '@bitran-js/renderer-vue';
7
+
8
+ import { LinkNode, type LinkSchema } from './shared';
9
+
10
+ export const linkRenderer = defineElementVueRenderer<LinkSchema>({
11
+ Node: LinkNode,
12
+ component: defineComponent(() => import('./Link.vue')),
13
+ icon: defineIcon(() => import('./icon.svg?raw')),
14
+ languages: defineLanguages({
15
+ en: () => import('./languages/en'),
16
+ ru: () => import('./languages/ru'),
17
+ }),
18
+ createRenderData: async () => {
19
+ throw Error('Render data for Links must be built only on server side!');
20
+ },
21
+ });
@@ -0,0 +1,17 @@
1
+ import { InlinerNode, type DefineElementSchema } from '@bitran-js/core';
2
+
3
+ import type { LinkTarget } from './target';
4
+
5
+ export const linkName = 'link';
6
+
7
+ export interface LinkParseData {
8
+ target: string;
9
+ label: string;
10
+ }
11
+
12
+ export type LinkSchema = DefineElementSchema<{
13
+ ParseData: LinkParseData;
14
+ RenderData: LinkTarget;
15
+ }>;
16
+
17
+ export class LinkNode extends InlinerNode<LinkSchema> {}
@@ -1,7 +1,7 @@
1
1
  import { isTopicPart } from 'erudit-cog/schema';
2
+ import { tryReplaceAlias } from '@erudit-js/bitran-elements/aliases/shared';
2
3
 
3
4
  import type { BitranContext } from '@shared/bitran/context';
4
- import { tryReplaceAlias } from '@shared/bitran/alias';
5
5
  import {
6
6
  bitranLocationTypes,
7
7
  parsePartialBitranLocation,
@@ -0,0 +1,10 @@
1
+ import { defineElementTranspiler } from '@bitran-js/transpiler';
2
+
3
+ import { LinkNode, type LinkSchema } from './shared';
4
+ import { LinkParser, LinkStringifier } from './factory';
5
+
6
+ export const linkTranspiler = defineElementTranspiler<LinkSchema>({
7
+ Node: LinkNode,
8
+ Parsers: [LinkParser],
9
+ Stringifier: LinkStringifier,
10
+ });
@@ -1,9 +1,9 @@
1
- export interface ContextItem {
2
- type: string;
3
- icon: string;
4
- title: string;
5
- href: string;
6
- hidden: boolean;
7
- }
8
-
9
- export type Context = ContextItem[];
1
+ export interface ContextItem {
2
+ type: string;
3
+ icon: string;
4
+ title: string;
5
+ href: string;
6
+ hidden: boolean;
7
+ }
8
+
9
+ export type Context = ContextItem[];
@@ -1,32 +1,32 @@
1
- import type {
2
- ContentFlag,
3
- ContentReferences,
4
- ContentSeo,
5
- ContentType,
6
- TopicPart,
7
- } from 'erudit-cog/schema';
8
-
9
- import type { Context } from '@shared/content/context';
10
- import type { PreviousNext } from '@shared/content/previousNext';
11
- import type { ImageData } from '@shared/image';
12
-
13
- export interface ContentGenericData {
14
- contentId: string;
15
- title?: string;
16
- description?: string;
17
- decoration?: string;
18
- type: ContentType;
19
- context: Context;
20
- flags: Record<ContentFlag, boolean>;
21
- topicPart?: TopicPart;
22
- seo?: Partial<ContentSeo>;
23
- ogImage?: ImageData;
24
- previousNext: PreviousNext;
25
- dependencies?: Record<string, string>;
26
- references?: ContentReferences;
27
- }
28
-
29
- export interface ContentBaseData {
30
- type: ContentType;
31
- generic: ContentGenericData;
32
- }
1
+ import type {
2
+ ContentFlag,
3
+ ContentReferences,
4
+ ContentSeo,
5
+ ContentType,
6
+ TopicPart,
7
+ } from 'erudit-cog/schema';
8
+
9
+ import type { Context } from '@shared/content/context';
10
+ import type { PreviousNext } from '@shared/content/previousNext';
11
+ import type { ImageData } from '@shared/image';
12
+
13
+ export interface ContentGenericData {
14
+ contentId: string;
15
+ title?: string;
16
+ description?: string;
17
+ decoration?: string;
18
+ type: ContentType;
19
+ context: Context;
20
+ flags: Record<ContentFlag, boolean>;
21
+ topicPart?: TopicPart;
22
+ seo?: Partial<ContentSeo>;
23
+ ogImage?: ImageData;
24
+ previousNext: PreviousNext;
25
+ dependencies?: Record<string, string>;
26
+ references?: ContentReferences;
27
+ }
28
+
29
+ export interface ContentBaseData {
30
+ type: ContentType;
31
+ generic: ContentGenericData;
32
+ }
@@ -1,5 +1,5 @@
1
- import type { ContentTopicData } from './type/topic';
2
- import type { ContentGroupData } from './type/group';
3
- import type { ContentBookData } from './type/book';
4
-
5
- export type ContentData = ContentTopicData | ContentGroupData | ContentBookData;
1
+ import type { ContentTopicData } from './type/topic';
2
+ import type { ContentGroupData } from './type/group';
3
+ import type { ContentBookData } from './type/book';
4
+
5
+ export type ContentData = ContentTopicData | ContentGroupData | ContentBookData;
@@ -1,5 +1,5 @@
1
- import type { ContentBaseData } from '../base';
2
-
3
- export interface ContentBookData extends ContentBaseData {
4
- type: 'book';
5
- }
1
+ import type { ContentBaseData } from '../base';
2
+
3
+ export interface ContentBookData extends ContentBaseData {
4
+ type: 'book';
5
+ }
@@ -1,6 +1,6 @@
1
- import type { ContentBaseData } from '../base';
2
-
3
- export interface ContentGroupData extends ContentBaseData {
4
- type: 'group';
5
- bookTitle?: string;
6
- }
1
+ import type { ContentBaseData } from '../base';
2
+
3
+ export interface ContentGroupData extends ContentBaseData {
4
+ type: 'group';
5
+ bookTitle?: string;
6
+ }