erudit 3.0.0-dev.3 → 3.0.0-dev.5

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 (243) hide show
  1. package/app/app.vue +195 -172
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +393 -382
  4. package/app/components/SiteMain.vue +35 -35
  5. package/app/components/ads/BannerTemplate.vue +51 -51
  6. package/app/components/ads/BottomBanner.vue +45 -45
  7. package/app/components/ads/LeftBanner.vue +50 -50
  8. package/app/components/aside/AsideListItem.vue +74 -74
  9. package/app/components/aside/AsideMajor.vue +56 -56
  10. package/app/components/aside/AsideMinor.vue +71 -71
  11. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  12. package/app/components/aside/major/PaneSwitch.vue +54 -54
  13. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  14. package/app/components/aside/major/SiteInfo.vue +85 -85
  15. package/app/components/aside/major/panes/Language.vue +79 -79
  16. package/app/components/aside/major/panes/Pages.vue +34 -34
  17. package/app/components/aside/major/panes/Search.vue +11 -11
  18. package/app/components/aside/major/panes/nav/Nav.vue +87 -91
  19. package/app/components/aside/major/panes/nav/NavBook.vue +87 -86
  20. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  21. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  22. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  23. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  24. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  25. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  26. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  27. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  28. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  29. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  30. package/app/components/aside/major/panes/other/ItemGenerator.vue +15 -15
  31. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  32. package/app/components/aside/major/panes/other/Other.vue +16 -16
  33. package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
  34. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  35. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  36. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  37. package/app/components/aside/minor/Contribute.vue +145 -145
  38. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  39. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  40. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  41. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  42. package/app/components/aside/minor/topic/TopicToc.vue +219 -203
  43. package/app/components/aside/minor/topic/TopicTocItem.vue +30 -31
  44. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  45. package/app/components/bitran/BitranContent.vue +70 -63
  46. package/app/components/bitran/RenderWrapper.vue +10 -10
  47. package/app/components/contributor/ContributorAvatar.vue +43 -43
  48. package/app/components/contributor/ContributorListItem.vue +35 -35
  49. package/app/components/main/topic/MainTopic.vue +79 -79
  50. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  51. package/app/components/main/utils/Breadcrumb.vue +75 -75
  52. package/app/components/main/utils/ContentDecoration.vue +29 -29
  53. package/app/components/main/utils/ContentDescription.vue +19 -19
  54. package/app/components/main/utils/ContentPopover.vue +188 -176
  55. package/app/components/main/utils/ContentPopovers.vue +105 -105
  56. package/app/components/main/utils/ContentReferences.vue +70 -70
  57. package/app/components/main/utils/ContentSection.vue +45 -45
  58. package/app/components/main/utils/ContentTitle.vue +63 -39
  59. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  60. package/app/components/main/utils/reference/ReferenceItem.vue +68 -68
  61. package/app/components/main/utils/reference/ReferenceSource.vue +116 -116
  62. package/app/components/preview/Preview.vue +186 -177
  63. package/app/components/preview/PreviewDisplay.vue +139 -139
  64. package/app/components/preview/PreviewFooterAction.vue +73 -73
  65. package/app/components/preview/PreviewLoading.vue +14 -14
  66. package/app/components/preview/PreviewScreen.vue +141 -99
  67. package/app/components/preview/display/Alert.vue +50 -50
  68. package/app/components/preview/display/Custom.vue +18 -18
  69. package/app/components/preview/display/GenericLink.vue +48 -48
  70. package/app/components/preview/display/PageLink.vue +20 -20
  71. package/app/components/preview/display/Unique.vue +49 -49
  72. package/app/components/transition/Fade.vue +19 -19
  73. package/app/components/tree/TreeContainer.vue +11 -11
  74. package/app/components/tree/TreeItem.vue +89 -89
  75. package/app/composables/bitran.ts +129 -127
  76. package/app/composables/bitranContent.ts +39 -39
  77. package/app/composables/bitranLocation.ts +7 -7
  78. package/app/composables/contentData.ts +36 -36
  79. package/app/composables/contentPage.ts +157 -156
  80. package/app/composables/contentRoute.ts +45 -45
  81. package/app/composables/darkMagic.ts +24 -24
  82. package/app/composables/externalApi.ts +63 -63
  83. package/app/composables/favicon.ts +8 -8
  84. package/app/composables/formatText.ts +86 -86
  85. package/app/composables/majorPane.ts +60 -60
  86. package/app/composables/phrases.ts +81 -80
  87. package/app/composables/theme.ts +29 -29
  88. package/app/composables/url.ts +33 -33
  89. package/app/pages/_test/preview.vue +110 -110
  90. package/app/pages/article/[...articleId].vue +3 -3
  91. package/app/pages/book/[...bookId].vue +47 -47
  92. package/app/pages/group/[...groupId].vue +65 -65
  93. package/app/pages/index.vue +32 -32
  94. package/app/pages/members.vue +6 -6
  95. package/app/pages/practice/[...practice].vue +3 -3
  96. package/app/pages/summary/[...summaryId].vue +3 -3
  97. package/app/public/favicon/article.svg +9 -9
  98. package/app/public/favicon/default.svg +3 -3
  99. package/app/public/favicon/practice.svg +3 -3
  100. package/app/public/favicon/summary.svg +4 -4
  101. package/app/public/logotype.svg +2 -2
  102. package/app/scripts/_immediate.js +9 -9
  103. package/app/scripts/aside/index.ts +59 -59
  104. package/app/scripts/aside/major/nav.ts +26 -26
  105. package/app/scripts/aside/minor/state.ts +37 -37
  106. package/app/scripts/aside/minor/topic.ts +3 -3
  107. package/app/scripts/flag.ts +28 -28
  108. package/app/scripts/og.ts +27 -27
  109. package/app/scripts/preview/build.ts +73 -73
  110. package/app/scripts/preview/data/alert.ts +19 -19
  111. package/app/scripts/preview/data/custom.ts +8 -8
  112. package/app/scripts/preview/data/genericLink.ts +24 -24
  113. package/app/scripts/preview/data/pageLink.ts +22 -20
  114. package/app/scripts/preview/data/unique.ts +71 -71
  115. package/app/scripts/preview/data.ts +24 -24
  116. package/app/scripts/preview/display.ts +37 -37
  117. package/app/scripts/preview/footer.ts +9 -9
  118. package/app/scripts/preview/request.ts +51 -51
  119. package/app/scripts/preview/state.ts +63 -63
  120. package/app/styles/_immediate.css +7 -7
  121. package/app/styles/_util.scss +43 -43
  122. package/app/styles/_utils.scss +44 -44
  123. package/app/styles/app.scss +91 -91
  124. package/app/styles/def/_bp.scss +27 -27
  125. package/app/styles/def/_size.scss +7 -7
  126. package/app/styles/def/_z.scss +5 -5
  127. package/app/styles/normalize.scss +63 -63
  128. package/app/styles/partials/_darkMagic.scss +5 -5
  129. package/app/styles/partials/_fnav.scss +15 -15
  130. package/app/styles/partials/_preview.scss +5 -5
  131. package/globalPath.ts +21 -21
  132. package/globals/bitran.ts +2 -47
  133. package/globals/content.ts +22 -22
  134. package/globals/contributor.ts +5 -5
  135. package/globals/erudit.ts +5 -5
  136. package/globals/register.ts +18 -18
  137. package/languages/en.ts +95 -95
  138. package/languages/ru.ts +99 -99
  139. package/module/bitran.ts +35 -34
  140. package/module/config.ts +34 -34
  141. package/module/imports.ts +50 -46
  142. package/module/index.ts +47 -47
  143. package/module/logger.ts +10 -10
  144. package/module/paths.ts +22 -22
  145. package/module/restart.ts +61 -61
  146. package/nuxt.config.ts +138 -112
  147. package/package.json +7 -8
  148. package/server/api/aside/major/nav/bookIds.ts +5 -5
  149. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  150. package/server/api/aside/major/nav/global.ts +7 -7
  151. package/server/api/aside/minor/news.ts +7 -7
  152. package/server/api/aside/minor/path.ts +78 -78
  153. package/server/api/bitran/content/[location].ts +8 -8
  154. package/server/api/bitran/toc/[location].ts +7 -7
  155. package/server/api/content/data.ts +72 -72
  156. package/server/api/contributor/count.ts +6 -6
  157. package/server/api/fake/content.ts +11 -11
  158. package/server/api/fake/shared/languages.ts +12 -12
  159. package/server/api/language/functions.ts +12 -12
  160. package/server/api/language/phrase/[phraseId].ts +19 -19
  161. package/server/api/language/phraseIds.ts +8 -8
  162. package/server/api/preview/page/[...parts].ts +51 -51
  163. package/server/api/preview/unique/[location].ts +57 -57
  164. package/server/plugin/bitran/content.ts +187 -187
  165. package/server/plugin/bitran/location.ts +25 -25
  166. package/server/plugin/bitran/products/include.ts +230 -230
  167. package/server/plugin/bitran/products/link.ts +116 -116
  168. package/server/plugin/bitran/setup.ts +11 -9
  169. package/server/plugin/bitran/toc.ts +83 -83
  170. package/server/plugin/bitran/transpiler.ts +48 -46
  171. package/server/plugin/build/close.ts +10 -10
  172. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  173. package/server/plugin/build/jobs/content/generic.ts +176 -176
  174. package/server/plugin/build/jobs/content/parse.ts +100 -100
  175. package/server/plugin/build/jobs/content/path.ts +6 -6
  176. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  177. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  178. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  179. package/server/plugin/build/jobs/contributors.ts +66 -66
  180. package/server/plugin/build/jobs/language.ts +36 -36
  181. package/server/plugin/build/jobs/nav.ts +210 -210
  182. package/server/plugin/build/process.ts +25 -25
  183. package/server/plugin/build/rebuild.ts +55 -55
  184. package/server/plugin/build/setup.ts +21 -21
  185. package/server/plugin/content/absoluteId.ts +94 -94
  186. package/server/plugin/content/context.ts +112 -112
  187. package/server/plugin/db/entities/Book.ts +7 -7
  188. package/server/plugin/db/entities/Content.ts +49 -49
  189. package/server/plugin/db/entities/Contribution.ts +10 -10
  190. package/server/plugin/db/entities/Contributor.ts +16 -16
  191. package/server/plugin/db/entities/Group.ts +14 -14
  192. package/server/plugin/db/entities/Hash.ts +15 -15
  193. package/server/plugin/db/entities/Topic.ts +20 -20
  194. package/server/plugin/db/entities/Unique.ts +21 -21
  195. package/server/plugin/db/setup.ts +34 -34
  196. package/server/plugin/global.ts +17 -18
  197. package/server/plugin/importer.ts +12 -12
  198. package/server/plugin/index.ts +9 -9
  199. package/server/plugin/logger.ts +23 -23
  200. package/server/plugin/nav/node.ts +26 -26
  201. package/server/plugin/nav/utils.ts +129 -129
  202. package/server/plugin/repository/book.ts +21 -21
  203. package/server/plugin/repository/content.ts +238 -238
  204. package/server/plugin/repository/contributor.ts +8 -8
  205. package/server/plugin/repository/frontNav.ts +148 -148
  206. package/server/plugin/repository/topic.ts +32 -32
  207. package/server/tsconfig.json +9 -9
  208. package/shared/aside/minor.ts +50 -50
  209. package/shared/asset.ts +15 -15
  210. package/shared/bitran/context.ts +8 -8
  211. package/shared/bitran/default.ts +46 -46
  212. package/shared/bitran/link/Link.vue +166 -167
  213. package/shared/bitran/link/factory.ts +24 -24
  214. package/shared/bitran/link/languages/en.ts +7 -7
  215. package/shared/bitran/link/languages/ru.ts +7 -7
  216. package/shared/bitran/link/renderer.ts +21 -21
  217. package/shared/bitran/link/shared.ts +17 -17
  218. package/shared/bitran/link/target.ts +134 -134
  219. package/shared/bitran/link/transpiler.ts +10 -10
  220. package/shared/bitran/location.ts +166 -166
  221. package/shared/bitran/toc.ts +8 -8
  222. package/shared/content/context.ts +9 -9
  223. package/shared/content/data/base.ts +32 -32
  224. package/shared/content/data/index.ts +5 -5
  225. package/shared/content/data/type/book.ts +5 -5
  226. package/shared/content/data/type/group.ts +6 -6
  227. package/shared/content/data/type/topic.ts +11 -11
  228. package/shared/content/previousNext.ts +9 -9
  229. package/shared/contributor.ts +5 -5
  230. package/shared/frontNav.ts +41 -41
  231. package/shared/icons.ts +38 -38
  232. package/shared/image.ts +5 -5
  233. package/shared/link.ts +25 -25
  234. package/shared/popover.ts +8 -0
  235. package/shared/types/language.ts +75 -75
  236. package/shared/utils/objectsEqual.ts +4 -4
  237. package/shared/utils/stringColor.ts +9 -9
  238. package/test/bitran/link/target.test.ts +141 -141
  239. package/test/bitran/location.test.ts +143 -143
  240. package/tsconfig.json +8 -8
  241. package/utils/stress.ts +9 -9
  242. package/app/components/main/utils/ContentFlag.vue +0 -15
  243. package/app/styles/default.scss +0 -83
@@ -1,141 +1,141 @@
1
- import { NO_ALIASES } from '@erudit-js/bitran-elements/aliases/shared';
2
-
3
- console.log(NO_ALIASES());
4
-
5
- import type { BitranContext } from '@erudit/shared/bitran/context';
6
- import {
7
- createLinkTarget,
8
- type AbsoluteLinkTarget,
9
- type ExternalLinkTarget,
10
- type LinkTargetType,
11
- type PageLinkTarget,
12
- type UniqueLinkTarget,
13
- } from '@erudit/shared/bitran/link/target';
14
-
15
- const articleContext: BitranContext = {
16
- location: {
17
- type: 'article',
18
- path: 'a/b/c',
19
- },
20
- aliases: {
21
- a1: 'alias1',
22
- },
23
- };
24
-
25
- const contributorContext: BitranContext = {
26
- location: {
27
- type: 'contributor',
28
- path: 'john',
29
- },
30
- aliases: NO_ALIASES(),
31
- };
32
-
33
- //
34
- //
35
- //
36
-
37
- const absoluteTargets = ['/', '/foo/bar/baz'];
38
-
39
- const externalTargets = [
40
- 'http://www.google.com',
41
- 'http://www.google.com/',
42
- 'https://www.google.com/foo/bar/baz',
43
- 'https://www.google.com/foo/bar/baz?a=1&b=2#anchor',
44
- ];
45
-
46
- const validPageTargets: [string, Pick<PageLinkTarget, 'pageType' | 'path'>][] =
47
- [
48
- // With "page|" prefix
49
- ['page|contributor|john', { pageType: 'contributor', path: 'john' }],
50
- ['page|article|foo/bar', { pageType: 'article', path: 'foo/bar' }],
51
- [
52
- 'page|book|combinatorics',
53
- { pageType: 'book', path: 'combinatorics' },
54
- ],
55
- [
56
- 'page|summary',
57
- { pageType: 'summary', path: articleContext.location.path },
58
- ],
59
- // Without "page|" prefix for non-topic parts
60
- ['contributor|john', { pageType: 'contributor', path: 'john' }],
61
- ];
62
-
63
- const invalidPageTargets = [
64
- // Reference topic part in non-topic context
65
- 'page|article',
66
- // Unknown page type
67
- 'page|foo|a/b/c',
68
- // Unkown Bitran location type
69
- 'book|combinatorics',
70
- ];
71
-
72
- const validUniqueTargets: [string, string][] = [
73
- ['definition', 'article|a/b/c|definition'],
74
- ['practice|term', 'practice|a/b/c|term'],
75
- ['contributor|john|theorem', 'contributor|john|theorem'],
76
- ];
77
-
78
- //
79
- //
80
- //
81
-
82
- describe('createLinkTarget', () => {
83
- it.each(absoluteTargets)(
84
- 'should create absolute link target for %p',
85
- (absoluteTarget) => {
86
- const target = createLinkTarget(
87
- absoluteTarget,
88
- articleContext,
89
- ) as AbsoluteLinkTarget;
90
-
91
- expect(target.type).toBe<LinkTargetType>('absolute');
92
- expect(target.href).toBe(absoluteTarget);
93
- },
94
- );
95
-
96
- it.each(externalTargets)(
97
- 'should create external link target for %p',
98
- (externalTarget) => {
99
- const target = createLinkTarget(
100
- externalTarget,
101
- articleContext,
102
- ) as ExternalLinkTarget;
103
-
104
- expect(target.type).toBe<LinkTargetType>('external');
105
- expect(target.href).toBe(externalTarget);
106
- },
107
- );
108
-
109
- for (const [pageTarget, expected] of validPageTargets) {
110
- it(`should create page link target for "${pageTarget}"`, () => {
111
- const target = createLinkTarget(
112
- pageTarget,
113
- articleContext,
114
- ) as PageLinkTarget;
115
-
116
- expect(target.type).toBe<LinkTargetType>('page');
117
- expect(target.pageType).toBe(expected.pageType);
118
- expect(target.path).toBe(expected.path);
119
- });
120
- }
121
-
122
- for (const invalidPageTarget of invalidPageTargets) {
123
- it(`should throw on page link target "${invalidPageTarget}"`, () => {
124
- expect(() =>
125
- createLinkTarget(invalidPageTarget, contributorContext),
126
- ).toThrow();
127
- });
128
- }
129
-
130
- for (const [uniqueTarget, expected] of validUniqueTargets) {
131
- it(`should create unique link target for "${uniqueTarget}"`, () => {
132
- const target = createLinkTarget(
133
- uniqueTarget,
134
- articleContext,
135
- ) as UniqueLinkTarget;
136
-
137
- expect(target.type).toBe<LinkTargetType>('unique');
138
- expect(target.strlocation).toBe(expected);
139
- });
140
- }
141
- });
1
+ import { NO_ALIASES } from '@erudit-js/bitran-elements/aliases/shared';
2
+
3
+ console.log(NO_ALIASES());
4
+
5
+ import type { BitranContext } from '@erudit/shared/bitran/context';
6
+ import {
7
+ createLinkTarget,
8
+ type AbsoluteLinkTarget,
9
+ type ExternalLinkTarget,
10
+ type LinkTargetType,
11
+ type PageLinkTarget,
12
+ type UniqueLinkTarget,
13
+ } from '@erudit/shared/bitran/link/target';
14
+
15
+ const articleContext: BitranContext = {
16
+ location: {
17
+ type: 'article',
18
+ path: 'a/b/c',
19
+ },
20
+ aliases: {
21
+ a1: 'alias1',
22
+ },
23
+ };
24
+
25
+ const contributorContext: BitranContext = {
26
+ location: {
27
+ type: 'contributor',
28
+ path: 'john',
29
+ },
30
+ aliases: NO_ALIASES(),
31
+ };
32
+
33
+ //
34
+ //
35
+ //
36
+
37
+ const absoluteTargets = ['/', '/foo/bar/baz'];
38
+
39
+ const externalTargets = [
40
+ 'http://www.google.com',
41
+ 'http://www.google.com/',
42
+ 'https://www.google.com/foo/bar/baz',
43
+ 'https://www.google.com/foo/bar/baz?a=1&b=2#anchor',
44
+ ];
45
+
46
+ const validPageTargets: [string, Pick<PageLinkTarget, 'pageType' | 'path'>][] =
47
+ [
48
+ // With "page|" prefix
49
+ ['page|contributor|john', { pageType: 'contributor', path: 'john' }],
50
+ ['page|article|foo/bar', { pageType: 'article', path: 'foo/bar' }],
51
+ [
52
+ 'page|book|combinatorics',
53
+ { pageType: 'book', path: 'combinatorics' },
54
+ ],
55
+ [
56
+ 'page|summary',
57
+ { pageType: 'summary', path: articleContext.location.path },
58
+ ],
59
+ // Without "page|" prefix for non-topic parts
60
+ ['contributor|john', { pageType: 'contributor', path: 'john' }],
61
+ ];
62
+
63
+ const invalidPageTargets = [
64
+ // Reference topic part in non-topic context
65
+ 'page|article',
66
+ // Unknown page type
67
+ 'page|foo|a/b/c',
68
+ // Unkown Bitran location type
69
+ 'book|combinatorics',
70
+ ];
71
+
72
+ const validUniqueTargets: [string, string][] = [
73
+ ['definition', 'article|a/b/c|definition'],
74
+ ['practice|term', 'practice|a/b/c|term'],
75
+ ['contributor|john|theorem', 'contributor|john|theorem'],
76
+ ];
77
+
78
+ //
79
+ //
80
+ //
81
+
82
+ describe('createLinkTarget', () => {
83
+ it.each(absoluteTargets)(
84
+ 'should create absolute link target for %p',
85
+ (absoluteTarget) => {
86
+ const target = createLinkTarget(
87
+ absoluteTarget,
88
+ articleContext,
89
+ ) as AbsoluteLinkTarget;
90
+
91
+ expect(target.type).toBe<LinkTargetType>('absolute');
92
+ expect(target.href).toBe(absoluteTarget);
93
+ },
94
+ );
95
+
96
+ it.each(externalTargets)(
97
+ 'should create external link target for %p',
98
+ (externalTarget) => {
99
+ const target = createLinkTarget(
100
+ externalTarget,
101
+ articleContext,
102
+ ) as ExternalLinkTarget;
103
+
104
+ expect(target.type).toBe<LinkTargetType>('external');
105
+ expect(target.href).toBe(externalTarget);
106
+ },
107
+ );
108
+
109
+ for (const [pageTarget, expected] of validPageTargets) {
110
+ it(`should create page link target for "${pageTarget}"`, () => {
111
+ const target = createLinkTarget(
112
+ pageTarget,
113
+ articleContext,
114
+ ) as PageLinkTarget;
115
+
116
+ expect(target.type).toBe<LinkTargetType>('page');
117
+ expect(target.pageType).toBe(expected.pageType);
118
+ expect(target.path).toBe(expected.path);
119
+ });
120
+ }
121
+
122
+ for (const invalidPageTarget of invalidPageTargets) {
123
+ it(`should throw on page link target "${invalidPageTarget}"`, () => {
124
+ expect(() =>
125
+ createLinkTarget(invalidPageTarget, contributorContext),
126
+ ).toThrow();
127
+ });
128
+ }
129
+
130
+ for (const [uniqueTarget, expected] of validUniqueTargets) {
131
+ it(`should create unique link target for "${uniqueTarget}"`, () => {
132
+ const target = createLinkTarget(
133
+ uniqueTarget,
134
+ articleContext,
135
+ ) as UniqueLinkTarget;
136
+
137
+ expect(target.type).toBe<LinkTargetType>('unique');
138
+ expect(target.strlocation).toBe(expected);
139
+ });
140
+ }
141
+ });
@@ -1,143 +1,143 @@
1
- import {
2
- decodeBitranLocation,
3
- encodeBitranLocation,
4
- parseBitranLocation,
5
- parsePartialBitranLocation,
6
- stringifyBitranLocation,
7
- type BitranLocation,
8
- } from '@erudit/shared/bitran/location';
9
-
10
- const locations: [BitranLocation, string][] = [
11
- // Full locations
12
- [{ type: 'article', path: 'foo', unique: 'bar' }, 'article|foo|bar'],
13
- [{ type: 'group', path: 'foo', unique: 'bar' }, 'group|foo|bar'],
14
- // Type + path
15
- [{ type: 'article', path: 'foo' }, 'article|foo'],
16
- [{ type: 'group', path: 'foo' }, 'group|foo'],
17
- ];
18
-
19
- const partialLocations: [string, BitranLocation, BitranLocation][] = [
20
- // Full string location
21
- [
22
- 'article|foo/bar|baz',
23
- { type: 'group', path: 'qux' },
24
- { type: 'article', path: 'foo/bar', unique: 'baz' },
25
- ],
26
- // Only unique
27
- [
28
- 'baz',
29
- { type: 'summary', path: 'foo/bar' },
30
- { type: 'summary', path: 'foo/bar', unique: 'baz' },
31
- ],
32
- [
33
- 'baz',
34
- { type: 'contributor', path: 'John' },
35
- { type: 'contributor', path: 'John', unique: 'baz' },
36
- ],
37
- // Topic context
38
- [
39
- 'article|baz',
40
- { type: 'practice', path: 'foo/bar' },
41
- { type: 'article', path: 'foo/bar', unique: 'baz' },
42
- ],
43
- ];
44
-
45
- const invalidPartialLocations: [string, BitranLocation][] = [
46
- // Referencing topic part in non-topic context
47
- ['article|bar', { type: 'contributor', path: 'foo' }],
48
- ];
49
-
50
- const invalidLocations = [
51
- // Too few parts
52
- { type: 'article' },
53
- { path: 'foo' },
54
- { unique: 'foo' },
55
- // Unknown type
56
- { type: 'foo' },
57
- { type: 'foo', path: 'bar', unique: 'baz' },
58
- // Locations that require path
59
- { type: 'article', unique: 'foo' },
60
- { type: 'summary', unique: 'foo' },
61
- { type: 'practice', unique: 'foo' },
62
- { type: 'group', unique: 'foo' },
63
- { type: 'contributor', unique: 'foo' },
64
- ];
65
-
66
- const invalidStrLocations = [
67
- // Too few parts
68
- 'article',
69
- 'group',
70
- // Unknown type
71
- 'foo',
72
- 'foo|bar',
73
- 'foo|bar|baz',
74
- // Empty string unique
75
- 'article|foo/bar|',
76
- ];
77
-
78
- //
79
- //
80
- //
81
-
82
- describe('stringifyBitranLocation', () => {
83
- for (const [location, expected] of locations) {
84
- it(`should produce "${expected}"`, () => {
85
- expect(stringifyBitranLocation(location)).toBe(expected);
86
- });
87
- }
88
-
89
- for (const invalidLocation of invalidLocations) {
90
- it(`should throw on location ${JSON.stringify(invalidLocation)}`, () => {
91
- expect(() =>
92
- stringifyBitranLocation(invalidLocation as BitranLocation),
93
- ).toThrow();
94
- });
95
- }
96
- });
97
-
98
- describe('parseBitranLocation', () => {
99
- for (const [location, expected] of locations) {
100
- it(`should produce ${JSON.stringify(expected)}`, () => {
101
- expect(parseBitranLocation(expected)).toEqual(location);
102
- });
103
- }
104
-
105
- for (const invalidStrLocation of invalidStrLocations) {
106
- it(`should throw on location "${invalidStrLocation}"`, () => {
107
- expect(() => parseBitranLocation(invalidStrLocation)).toThrow();
108
- });
109
- }
110
- });
111
-
112
- describe('parsePartialBitranLocation', () => {
113
- for (const [locationStr, context, expected] of partialLocations) {
114
- it(`should produce ${JSON.stringify(expected)}`, () => {
115
- expect(parsePartialBitranLocation(locationStr, context)).toEqual(
116
- expected,
117
- );
118
- });
119
- }
120
-
121
- for (const [locationStr, context] of invalidPartialLocations) {
122
- it(`should throw on location "${locationStr}"`, () => {
123
- expect(() =>
124
- parsePartialBitranLocation(locationStr, context),
125
- ).toThrow();
126
- });
127
- }
128
- });
129
-
130
- describe('decode/encodeBitranLocation', () => {
131
- it.each([
132
- '',
133
- 'foo',
134
- 'foo|bar',
135
- 'foo|bar|baz',
136
- 'foo|bar/baz|qux',
137
- 'foo|bar/baz/qux|corge:grault:waldo',
138
- ])('should not change string location %p', (testCase) =>
139
- expect(decodeBitranLocation(encodeBitranLocation(testCase))).toBe(
140
- testCase,
141
- ),
142
- );
143
- });
1
+ import {
2
+ decodeBitranLocation,
3
+ encodeBitranLocation,
4
+ parseBitranLocation,
5
+ parsePartialBitranLocation,
6
+ stringifyBitranLocation,
7
+ type BitranLocation,
8
+ } from '@erudit/shared/bitran/location';
9
+
10
+ const locations: [BitranLocation, string][] = [
11
+ // Full locations
12
+ [{ type: 'article', path: 'foo', unique: 'bar' }, 'article|foo|bar'],
13
+ [{ type: 'group', path: 'foo', unique: 'bar' }, 'group|foo|bar'],
14
+ // Type + path
15
+ [{ type: 'article', path: 'foo' }, 'article|foo'],
16
+ [{ type: 'group', path: 'foo' }, 'group|foo'],
17
+ ];
18
+
19
+ const partialLocations: [string, BitranLocation, BitranLocation][] = [
20
+ // Full string location
21
+ [
22
+ 'article|foo/bar|baz',
23
+ { type: 'group', path: 'qux' },
24
+ { type: 'article', path: 'foo/bar', unique: 'baz' },
25
+ ],
26
+ // Only unique
27
+ [
28
+ 'baz',
29
+ { type: 'summary', path: 'foo/bar' },
30
+ { type: 'summary', path: 'foo/bar', unique: 'baz' },
31
+ ],
32
+ [
33
+ 'baz',
34
+ { type: 'contributor', path: 'John' },
35
+ { type: 'contributor', path: 'John', unique: 'baz' },
36
+ ],
37
+ // Topic context
38
+ [
39
+ 'article|baz',
40
+ { type: 'practice', path: 'foo/bar' },
41
+ { type: 'article', path: 'foo/bar', unique: 'baz' },
42
+ ],
43
+ ];
44
+
45
+ const invalidPartialLocations: [string, BitranLocation][] = [
46
+ // Referencing topic part in non-topic context
47
+ ['article|bar', { type: 'contributor', path: 'foo' }],
48
+ ];
49
+
50
+ const invalidLocations = [
51
+ // Too few parts
52
+ { type: 'article' },
53
+ { path: 'foo' },
54
+ { unique: 'foo' },
55
+ // Unknown type
56
+ { type: 'foo' },
57
+ { type: 'foo', path: 'bar', unique: 'baz' },
58
+ // Locations that require path
59
+ { type: 'article', unique: 'foo' },
60
+ { type: 'summary', unique: 'foo' },
61
+ { type: 'practice', unique: 'foo' },
62
+ { type: 'group', unique: 'foo' },
63
+ { type: 'contributor', unique: 'foo' },
64
+ ];
65
+
66
+ const invalidStrLocations = [
67
+ // Too few parts
68
+ 'article',
69
+ 'group',
70
+ // Unknown type
71
+ 'foo',
72
+ 'foo|bar',
73
+ 'foo|bar|baz',
74
+ // Empty string unique
75
+ 'article|foo/bar|',
76
+ ];
77
+
78
+ //
79
+ //
80
+ //
81
+
82
+ describe('stringifyBitranLocation', () => {
83
+ for (const [location, expected] of locations) {
84
+ it(`should produce "${expected}"`, () => {
85
+ expect(stringifyBitranLocation(location)).toBe(expected);
86
+ });
87
+ }
88
+
89
+ for (const invalidLocation of invalidLocations) {
90
+ it(`should throw on location ${JSON.stringify(invalidLocation)}`, () => {
91
+ expect(() =>
92
+ stringifyBitranLocation(invalidLocation as BitranLocation),
93
+ ).toThrow();
94
+ });
95
+ }
96
+ });
97
+
98
+ describe('parseBitranLocation', () => {
99
+ for (const [location, expected] of locations) {
100
+ it(`should produce ${JSON.stringify(expected)}`, () => {
101
+ expect(parseBitranLocation(expected)).toEqual(location);
102
+ });
103
+ }
104
+
105
+ for (const invalidStrLocation of invalidStrLocations) {
106
+ it(`should throw on location "${invalidStrLocation}"`, () => {
107
+ expect(() => parseBitranLocation(invalidStrLocation)).toThrow();
108
+ });
109
+ }
110
+ });
111
+
112
+ describe('parsePartialBitranLocation', () => {
113
+ for (const [locationStr, context, expected] of partialLocations) {
114
+ it(`should produce ${JSON.stringify(expected)}`, () => {
115
+ expect(parsePartialBitranLocation(locationStr, context)).toEqual(
116
+ expected,
117
+ );
118
+ });
119
+ }
120
+
121
+ for (const [locationStr, context] of invalidPartialLocations) {
122
+ it(`should throw on location "${locationStr}"`, () => {
123
+ expect(() =>
124
+ parsePartialBitranLocation(locationStr, context),
125
+ ).toThrow();
126
+ });
127
+ }
128
+ });
129
+
130
+ describe('decode/encodeBitranLocation', () => {
131
+ it.each([
132
+ '',
133
+ 'foo',
134
+ 'foo|bar',
135
+ 'foo|bar|baz',
136
+ 'foo|bar/baz|qux',
137
+ 'foo|bar/baz/qux|corge:grault:waldo',
138
+ ])('should not change string location %p', (testCase) =>
139
+ expect(decodeBitranLocation(encodeBitranLocation(testCase))).toBe(
140
+ testCase,
141
+ ),
142
+ );
143
+ });
package/tsconfig.json CHANGED
@@ -1,8 +1,8 @@
1
- {
2
- "extends": "../../playground/.erudit/nuxt/.nuxt/tsconfig.json",
3
- "compilerOptions": {
4
- "experimentalDecorators": true,
5
- "emitDecoratorMetadata": true,
6
- "types": ["@types/jest"]
7
- }
8
- }
1
+ {
2
+ "extends": "../../playground/.erudit/nuxt/.nuxt/tsconfig.json",
3
+ "compilerOptions": {
4
+ "experimentalDecorators": true,
5
+ "emitDecoratorMetadata": true,
6
+ "types": ["@types/jest"]
7
+ }
8
+ }
package/utils/stress.ts CHANGED
@@ -1,9 +1,9 @@
1
- import chalk, { type ChalkInstance } from 'chalk';
2
-
3
- export function stress(message: string, contentChalk?: ChalkInstance) {
4
- return (
5
- chalk.dim(`'`) +
6
- (contentChalk ? contentChalk(message) : chalk.cyanBright(message)) +
7
- chalk.dim(`'`)
8
- );
9
- }
1
+ import chalk, { type ChalkInstance } from 'chalk';
2
+
3
+ export function stress(message: string, contentChalk?: ChalkInstance) {
4
+ return (
5
+ chalk.dim(`'`) +
6
+ (contentChalk ? contentChalk(message) : chalk.cyanBright(message)) +
7
+ chalk.dim(`'`)
8
+ );
9
+ }
@@ -1,15 +0,0 @@
1
- <script lang="ts" setup>
2
- import { computePosition, shift, autoUpdate, arrow } from '@floating-ui/dom';
3
-
4
- defineProps<{ icon: string; title: string }>();
5
- </script>
6
-
7
- <template>
8
- <div :class="$style.flag">Content flag</div>
9
- </template>
10
-
11
- <style lang="scss" module>
12
- .flag {
13
- color: red;
14
- }
15
- </style>