erudit 4.3.1-dev.1 → 4.3.2
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/app/components/aside/major/PaneHolder.vue +3 -3
- package/app/components/aside/major/contentNav/items/Flags.vue +4 -8
- package/app/composables/favicon.ts +29 -5
- package/app/composables/formatText.ts +9 -9
- package/package.json +5 -5
- package/server/erudit/language/list/en.ts +0 -9
- package/server/erudit/language/list/ru.ts +2 -11
- package/shared/types/language.ts +0 -6
|
@@ -5,28 +5,24 @@ import type { MyIconName } from '#my-icons';
|
|
|
5
5
|
|
|
6
6
|
defineProps<{ flags: ContentFlags }>();
|
|
7
7
|
|
|
8
|
-
const phrase = await usePhrases(
|
|
9
|
-
'flag_title_dev',
|
|
10
|
-
'flag_title_advanced',
|
|
11
|
-
'flag_title_secondary',
|
|
12
|
-
);
|
|
8
|
+
const phrase = await usePhrases('flag_dev', 'flag_advanced', 'flag_secondary');
|
|
13
9
|
|
|
14
10
|
const flagData = ((flagType: ContentFlag) => {
|
|
15
11
|
switch (flagType) {
|
|
16
12
|
case 'dev':
|
|
17
13
|
return {
|
|
18
14
|
icon: 'construction',
|
|
19
|
-
title: phrase.
|
|
15
|
+
title: phrase.flag_dev,
|
|
20
16
|
};
|
|
21
17
|
case 'advanced':
|
|
22
18
|
return {
|
|
23
19
|
icon: 'asterisk',
|
|
24
|
-
title: phrase.
|
|
20
|
+
title: phrase.flag_advanced,
|
|
25
21
|
};
|
|
26
22
|
case 'secondary':
|
|
27
23
|
return {
|
|
28
24
|
icon: 'puzzle',
|
|
29
|
-
title: phrase.
|
|
25
|
+
title: phrase.flag_secondary,
|
|
30
26
|
};
|
|
31
27
|
}
|
|
32
28
|
}) as (flagType: ContentFlag) => { icon: MyIconName; title: string };
|
|
@@ -3,6 +3,25 @@ import { isContentType, type ContentType } from '@erudit-js/core/content/type';
|
|
|
3
3
|
|
|
4
4
|
const fallbackFaviconHref = eruditPublic('favicons/default.svg');
|
|
5
5
|
|
|
6
|
+
const faviconMimeByExt: Record<string, string> = {
|
|
7
|
+
'.svg': 'image/svg+xml',
|
|
8
|
+
'.png': 'image/png',
|
|
9
|
+
'.ico': 'image/x-icon',
|
|
10
|
+
'.jpg': 'image/jpeg',
|
|
11
|
+
'.jpeg': 'image/jpeg',
|
|
12
|
+
'.gif': 'image/gif',
|
|
13
|
+
'.webp': 'image/webp',
|
|
14
|
+
'.bmp': 'image/bmp',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
function getFaviconMimeType(href: string): string | undefined {
|
|
18
|
+
const pathPart = href.split(/[?#]/)[0] ?? '';
|
|
19
|
+
const dot = pathPart.lastIndexOf('.');
|
|
20
|
+
if (dot === -1) return undefined;
|
|
21
|
+
const ext = pathPart.slice(dot).toLowerCase();
|
|
22
|
+
return faviconMimeByExt[ext];
|
|
23
|
+
}
|
|
24
|
+
|
|
6
25
|
export const useFaviconHref = () => {
|
|
7
26
|
return useState<string>('favicon-href', () => fallbackFaviconHref);
|
|
8
27
|
};
|
|
@@ -51,11 +70,16 @@ export function initFavicon() {
|
|
|
51
70
|
|
|
52
71
|
useHead({
|
|
53
72
|
link: [
|
|
54
|
-
computed(() =>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
computed(() => {
|
|
74
|
+
const href = withBaseUrl(faviconHref.value);
|
|
75
|
+
const type = getFaviconMimeType(faviconHref.value);
|
|
76
|
+
return {
|
|
77
|
+
key: 'favicon',
|
|
78
|
+
rel: 'icon',
|
|
79
|
+
href,
|
|
80
|
+
...(type && { type }),
|
|
81
|
+
};
|
|
82
|
+
}),
|
|
59
83
|
],
|
|
60
84
|
});
|
|
61
85
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { FormatText } from '@erudit-js/core/formatText';
|
|
2
|
-
import { createFormatTextFn } from '../../shared/utils/formatText';
|
|
3
|
-
|
|
4
|
-
export let formatText: FormatText;
|
|
5
|
-
|
|
6
|
-
export async function initFormatText() {
|
|
7
|
-
const languageCode = ERUDIT.config.language.current;
|
|
8
|
-
formatText = createFormatTextFn(languageCode);
|
|
9
|
-
}
|
|
1
|
+
import type { FormatText } from '@erudit-js/core/formatText';
|
|
2
|
+
import { createFormatTextFn } from '../../shared/utils/formatText';
|
|
3
|
+
|
|
4
|
+
export let formatText: FormatText;
|
|
5
|
+
|
|
6
|
+
export async function initFormatText() {
|
|
7
|
+
const languageCode = ERUDIT.config.language.current;
|
|
8
|
+
formatText = createFormatTextFn(languageCode);
|
|
9
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "erudit",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "🤓 CMS for perfect educational sites.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@erudit-js/cli": "4.3.
|
|
28
|
-
"@erudit-js/core": "4.3.
|
|
29
|
-
"@erudit-js/prose": "4.3.
|
|
27
|
+
"@erudit-js/cli": "4.3.2",
|
|
28
|
+
"@erudit-js/core": "4.3.2",
|
|
29
|
+
"@erudit-js/prose": "4.3.2",
|
|
30
30
|
"unslash": "^2.0.0",
|
|
31
31
|
"@floating-ui/vue": "^1.1.11",
|
|
32
32
|
"tsprose": "^1.0.1",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"better-sqlite3": "^12.8.0",
|
|
35
35
|
"chokidar": "^5.0.0",
|
|
36
36
|
"consola": "^3.4.2",
|
|
37
|
-
"drizzle-kit": "^0.31.
|
|
37
|
+
"drizzle-kit": "^0.31.10",
|
|
38
38
|
"drizzle-orm": "^0.45.1",
|
|
39
39
|
"esbuild": "^0.27.4",
|
|
40
40
|
"flexsearch": "^0.8.212",
|
|
@@ -24,15 +24,6 @@ export const phrases: LanguagePhrases = {
|
|
|
24
24
|
no_content: 'No content.',
|
|
25
25
|
to_index: 'To index',
|
|
26
26
|
about_textbook: 'About textbook',
|
|
27
|
-
flag_title_dev: 'Development',
|
|
28
|
-
flag_hint_dev:
|
|
29
|
-
'This material is not complete, may contain error and will change in the future! Use with caution!',
|
|
30
|
-
flag_title_advanced: 'Advanced',
|
|
31
|
-
flag_hint_advanced:
|
|
32
|
-
'This material is for learners with a high level of knowledge. It contains information that is not suitable for beginners!',
|
|
33
|
-
flag_title_secondary: 'Additional',
|
|
34
|
-
flag_hint_secondary:
|
|
35
|
-
'This is an optional material is for learners who want to dive deeper and gain additional knowledge and context.',
|
|
36
27
|
ads_replacer:
|
|
37
28
|
'We help you. Help us back.<br><strong style="color: inherit;">Disable your ads blocker!</strong>',
|
|
38
29
|
direct_link: 'Direct link',
|
|
@@ -24,15 +24,6 @@ export const phrases: LanguagePhrases = {
|
|
|
24
24
|
no_content: 'Контента нет.',
|
|
25
25
|
to_index: 'К оглавлению',
|
|
26
26
|
about_textbook: 'Об учебнике',
|
|
27
|
-
flag_title_dev: 'Разработка',
|
|
28
|
-
flag_hint_dev:
|
|
29
|
-
'Этот материал не завершен, может содержать ошибки и измениться в будущем! Используйте с осторожностью!',
|
|
30
|
-
flag_title_advanced: 'Профиль',
|
|
31
|
-
flag_hint_advanced:
|
|
32
|
-
'Этот материал предназначен для учеников с хорошим уровнем понимания предмета. Информация здесь не предназначена для новичков!',
|
|
33
|
-
flag_title_secondary: 'Дополнение',
|
|
34
|
-
flag_hint_secondary:
|
|
35
|
-
'Это материал для тех, кто хочет глубже погрузиться предмет и получить дополнительные знания и контекст.',
|
|
36
27
|
ads_replacer:
|
|
37
28
|
'Помогите улучшить проект.<br><strong style="color: inherit;">Включите показ рекламы!</strong>',
|
|
38
29
|
direct_link: 'Прямая ссылка',
|
|
@@ -55,7 +46,7 @@ export const phrases: LanguagePhrases = {
|
|
|
55
46
|
'Этот материал предназначен для учеников с высоким уровнем понимания предмета. Информация здесь не предназначена для новичков!',
|
|
56
47
|
flag_secondary: 'Дополнение',
|
|
57
48
|
flag_secondary_description:
|
|
58
|
-
'Это дополнительный материал для тех, кто хочет глубже погрузиться предмет и получить дополнительные знания и контекст.',
|
|
49
|
+
'Это дополнительный материал для тех, кто хочет глубже погрузиться в предмет и получить дополнительные знания и контекст.',
|
|
59
50
|
key_elements: 'Ключевые элементы',
|
|
60
51
|
stats: 'Статистика',
|
|
61
52
|
connections: 'Связи',
|
|
@@ -96,7 +87,7 @@ export const phrases: LanguagePhrases = {
|
|
|
96
87
|
article_seo_description: (contentTitle: string) =>
|
|
97
88
|
`Понятное и интересное объяснение темы «${contentTitle}». Показательные примеры, важные свойства, интересные факты, применение в жизни, понятные доказательства. Здесь вы точно разберетесь!`,
|
|
98
89
|
summary_seo_description: (contentTitle: string) =>
|
|
99
|
-
`Конспект темы «${contentTitle}»: ключевые определения, теоремы, свойства и примеры их
|
|
90
|
+
`Конспект темы «${contentTitle}»: ключевые определения, теоремы, свойства и примеры их использования. Все самое важное и в кратком виде!`,
|
|
100
91
|
practice_seo_description: (contentTitle: string) =>
|
|
101
92
|
`Разнообразные задачи с подсказками и ответами по теме «${contentTitle}». Интересные условия, подсказки и подробные решения. Превратите знания в навык!`,
|
|
102
93
|
externals_own: 'Собственные',
|
package/shared/types/language.ts
CHANGED
|
@@ -34,12 +34,6 @@ export type LanguagePhrases = Phrases<{
|
|
|
34
34
|
no_content: string;
|
|
35
35
|
to_index: string;
|
|
36
36
|
about_textbook: string;
|
|
37
|
-
flag_title_dev: string;
|
|
38
|
-
flag_hint_dev: string;
|
|
39
|
-
flag_title_advanced: string;
|
|
40
|
-
flag_hint_advanced: string;
|
|
41
|
-
flag_title_secondary: string;
|
|
42
|
-
flag_hint_secondary: string;
|
|
43
37
|
ads_replacer: string;
|
|
44
38
|
direct_link: string;
|
|
45
39
|
direct_link_explain: string;
|