From 62e30d474b2f558e1d55f507907006be9f068d55 Mon Sep 17 00:00:00 2001
From: IRBorisov <8611739+IRBorisov@users.noreply.github.com>
Date: Thu, 16 May 2024 14:01:06 +0300
Subject: [PATCH] Improve help UI + minor fixes
---
.../backend/apps/rsform/models/api_RSForm.py | 2 +-
.../backend/apps/rsform/views/operations.py | 1 +
rsconcept/frontend/package-lock.json | 68 ++++++++--------
rsconcept/frontend/package.json | 4 +-
.../frontend/src/app/Navigation/Logo.tsx | 2 +-
.../src/components/info/InfoTopic.tsx | 8 +-
.../src/components/man/HelpConcept.tsx | 6 ++
.../src/components/man/HelpCstAttributes.tsx | 5 +-
.../src/components/man/HelpInterface.tsx | 14 +++-
.../frontend/src/components/man/HelpMain.tsx | 31 ++++---
.../src/components/man/HelpRSFormItems.tsx | 5 +-
.../src/components/man/HelpRSFormMeta.tsx | 5 +-
.../src/components/man/HelpRSFormUI.tsx | 10 ---
.../src/components/man/HelpRSLang.tsx | 15 ++--
.../frontend/src/components/man/Subtopics.tsx | 23 ++++++
.../frontend/src/components/man/TopicItem.tsx | 18 +++++
.../frontend/src/components/ui/LinkTopic.tsx | 15 ++++
.../frontend/src/models/miscellaneous.ts | 22 +++--
.../src/pages/ManualsPage/TopicsTree.tsx | 7 +-
.../ConstituentaToolbar.tsx | 2 +-
.../RSFormPage/EditorRSForm/RSFormToolbar.tsx | 2 +-
.../RSFormPage/EditorRSList/RSListToolbar.tsx | 2 +-
rsconcept/frontend/src/utils/constants.ts | 1 +
rsconcept/frontend/src/utils/labels.ts | 80 +++++++++----------
24 files changed, 212 insertions(+), 136 deletions(-)
delete mode 100644 rsconcept/frontend/src/components/man/HelpRSFormUI.tsx
create mode 100644 rsconcept/frontend/src/components/man/Subtopics.tsx
create mode 100644 rsconcept/frontend/src/components/man/TopicItem.tsx
create mode 100644 rsconcept/frontend/src/components/ui/LinkTopic.tsx
diff --git a/rsconcept/backend/apps/rsform/models/api_RSForm.py b/rsconcept/backend/apps/rsform/models/api_RSForm.py
index 80afc639..b0c80593 100644
--- a/rsconcept/backend/apps/rsform/models/api_RSForm.py
+++ b/rsconcept/backend/apps/rsform/models/api_RSForm.py
@@ -101,7 +101,7 @@ class RSForm:
cst.save()
def get_max_index(self, cst_type: CstType) -> int:
- ''' Get maximum alias index for specific CstType '''
+ ''' Get maximum alias index for specific CstType. '''
result: int = 0
items = Constituenta.objects \
.filter(schema=self.item, cst_type=cst_type) \
diff --git a/rsconcept/backend/apps/rsform/views/operations.py b/rsconcept/backend/apps/rsform/views/operations.py
index df93babd..ba900175 100644
--- a/rsconcept/backend/apps/rsform/views/operations.py
+++ b/rsconcept/backend/apps/rsform/views/operations.py
@@ -40,6 +40,7 @@ def inline_synthesis(request: Request):
index = next(i for (i, cst) in enumerate(items) if cst == replacement)
replacement = new_items[index]
schema.substitute(original, replacement, substitution['transfer_term'])
+
schema.restore_order()
return Response(
status=c.HTTP_200_OK,
diff --git a/rsconcept/frontend/package-lock.json b/rsconcept/frontend/package-lock.json
index ad365e23..e25c2a92 100644
--- a/rsconcept/frontend/package-lock.json
+++ b/rsconcept/frontend/package-lock.json
@@ -9,7 +9,7 @@
"version": "1.0.0",
"dependencies": {
"@lezer/lr": "^1.4.0",
- "@tanstack/react-table": "^8.17.0",
+ "@tanstack/react-table": "^8.17.3",
"@uiw/codemirror-themes": "^4.22.0",
"@uiw/react-codemirror": "^4.22.0",
"axios": "^1.6.8",
@@ -34,7 +34,7 @@
"devDependencies": {
"@lezer/generator": "^1.7.0",
"@types/jest": "^29.5.12",
- "@types/node": "^20.12.11",
+ "@types/node": "^20.12.12",
"@types/react": "^18.3.2",
"@types/react-dom": "^18.3.0",
"@typescript-eslint/eslint-plugin": "^6.21.0",
@@ -646,9 +646,9 @@
}
},
"node_modules/@codemirror/lint": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.7.0.tgz",
- "integrity": "sha512-LTLOL2nT41ADNSCCCCw8Q/UmdAFzB23OUYSjsHTdsVaH0XEo+orhuqbDNWzrzodm14w6FOxqxpmy4LF8Lixqjw==",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.7.1.tgz",
+ "integrity": "sha512-rELba6QJD20/bNXWP/cKTGLrwVEcpa2ViwULCV03ONcY1Je85++7sczVRUlnE4TJMjatx3IJTz6HX4NXi+moXw==",
"dependencies": {
"@codemirror/state": "^6.0.0",
"@codemirror/view": "^6.0.0",
@@ -1306,9 +1306,9 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz",
- "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz",
+ "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==",
"dependencies": {
"@floating-ui/utils": "^0.2.0"
}
@@ -2655,11 +2655,11 @@
}
},
"node_modules/@tanstack/react-table": {
- "version": "8.17.0",
- "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.17.0.tgz",
- "integrity": "sha512-LSJxTDzlKGs8EN7/UHB1l3yLR9HUIxoHFkTbTjHaUUGL4kgYZFYhsQsdDJSIykG86qpIA/6gSWmtwNfy5Iprhw==",
+ "version": "8.17.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.17.3.tgz",
+ "integrity": "sha512-5gwg5SvPD3lNAXPuJJz1fOCEZYk9/GeBFH3w/hCgnfyszOIzwkwgp5I7Q4MJtn0WECp84b5STQUDdmvGi8m3nA==",
"dependencies": {
- "@tanstack/table-core": "8.16.0"
+ "@tanstack/table-core": "8.17.3"
},
"engines": {
"node": ">=12"
@@ -2674,9 +2674,9 @@
}
},
"node_modules/@tanstack/table-core": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.16.0.tgz",
- "integrity": "sha512-dCG8vQGk4js5v88/k83tTedWOwjGnIyONrKpHpfmSJB8jwFHl8GSu1sBBxbtACVAPtAQgwNxl0rw1d3RqRM1Tg==",
+ "version": "8.17.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.17.3.tgz",
+ "integrity": "sha512-mPBodDGVL+fl6d90wUREepHa/7lhsghg2A3vFpakEhrhtbIlgNAZiMr7ccTgak5qbHqF14Fwy+W1yFWQt+WmYQ==",
"engines": {
"node": ">=12"
},
@@ -2732,9 +2732,9 @@
}
},
"node_modules/@types/draco3d": {
- "version": "1.4.9",
- "resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.9.tgz",
- "integrity": "sha512-4MMUjMQb4yA5fJ4osXx+QxGHt0/ZSy4spT6jL1HM7Tn8OJEC35siqdnpOo+HxPhYjqEFumKfGVF9hJfdyKBIBA=="
+ "version": "1.4.10",
+ "resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.10.tgz",
+ "integrity": "sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw=="
},
"node_modules/@types/graceful-fs": {
"version": "4.1.9",
@@ -2795,9 +2795,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.12.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz",
- "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==",
+ "version": "20.12.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
+ "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -3771,9 +3771,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001617",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz",
- "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==",
+ "version": "1.0.30001618",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz",
+ "integrity": "sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg==",
"funding": [
{
"type": "opencollective",
@@ -4500,9 +4500,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.763",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.763.tgz",
- "integrity": "sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ=="
+ "version": "1.4.769",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.769.tgz",
+ "integrity": "sha512-bZu7p623NEA2rHTc9K1vykl57ektSPQYFFqQir8BOYf6EKOB+yIsbFB9Kpm7Cgt6tsLr9sRkqfqSZUw7LP1XxQ=="
},
"node_modules/ellipsize": {
"version": "0.5.1",
@@ -8292,9 +8292,9 @@
}
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -10001,9 +10001,9 @@
"dev": true
},
"node_modules/update-browserslist-db": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz",
- "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==",
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
+ "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
"funding": [
{
"type": "opencollective",
@@ -10020,7 +10020,7 @@
],
"dependencies": {
"escalade": "^3.1.2",
- "picocolors": "^1.0.0"
+ "picocolors": "^1.0.1"
},
"bin": {
"update-browserslist-db": "cli.js"
diff --git a/rsconcept/frontend/package.json b/rsconcept/frontend/package.json
index 0eef9d08..d84041d8 100644
--- a/rsconcept/frontend/package.json
+++ b/rsconcept/frontend/package.json
@@ -13,7 +13,7 @@
},
"dependencies": {
"@lezer/lr": "^1.4.0",
- "@tanstack/react-table": "^8.17.0",
+ "@tanstack/react-table": "^8.17.3",
"@uiw/codemirror-themes": "^4.22.0",
"@uiw/react-codemirror": "^4.22.0",
"axios": "^1.6.8",
@@ -38,7 +38,7 @@
"devDependencies": {
"@lezer/generator": "^1.7.0",
"@types/jest": "^29.5.12",
- "@types/node": "^20.12.11",
+ "@types/node": "^20.12.12",
"@types/react": "^18.3.2",
"@types/react-dom": "^18.3.0",
"@typescript-eslint/eslint-plugin": "^6.21.0",
diff --git a/rsconcept/frontend/src/app/Navigation/Logo.tsx b/rsconcept/frontend/src/app/Navigation/Logo.tsx
index 96d9f87f..48ec90ba 100644
--- a/rsconcept/frontend/src/app/Navigation/Logo.tsx
+++ b/rsconcept/frontend/src/app/Navigation/Logo.tsx
@@ -9,7 +9,7 @@ function Logo() {
return (
diff --git a/rsconcept/frontend/src/components/info/InfoTopic.tsx b/rsconcept/frontend/src/components/info/InfoTopic.tsx
index d79acc8e..8074860c 100644
--- a/rsconcept/frontend/src/components/info/InfoTopic.tsx
+++ b/rsconcept/frontend/src/components/info/InfoTopic.tsx
@@ -15,7 +15,6 @@ import HelpMain from '../man/HelpMain';
import HelpPrivacy from '../man/HelpPrivacy';
import HelpRSFormItems from '../man/HelpRSFormItems';
import HelpRSFormMeta from '../man/HelpRSFormMeta';
-import HelpRSFormUI from '../man/HelpRSFormUI';
import HelpRSLang from '../man/HelpRSLang';
import HelpRSLangCorrect from '../man/HelpRSLangCorrect';
import HelpRSLangInterpret from '../man/HelpRSLangInterpret';
@@ -35,10 +34,9 @@ function InfoTopic({ topic }: InfoTopicProps) {
if (topic === HelpTopic.INTERFACE) return ;
if (topic === HelpTopic.UI_LIBRARY) return ;
- if (topic === HelpTopic.UI_RSFORM) return ;
- if (topic === HelpTopic.UI_RSFORM_CARD) return ;
- if (topic === HelpTopic.UI_RSFORM_LIST) return ;
- if (topic === HelpTopic.UI_RSFORM_EDITOR) return ;
+ if (topic === HelpTopic.UI_RS_CARD) return ;
+ if (topic === HelpTopic.UI_RS_LIST) return ;
+ if (topic === HelpTopic.UI_RS_EDITOR) return ;
if (topic === HelpTopic.UI_GRAPH_TERM) return ;
if (topic === HelpTopic.UI_CST_STATUS) return ;
if (topic === HelpTopic.UI_CST_CLASS) return ;
diff --git a/rsconcept/frontend/src/components/man/HelpConcept.tsx b/rsconcept/frontend/src/components/man/HelpConcept.tsx
index 8ac3e1c8..057da580 100644
--- a/rsconcept/frontend/src/components/man/HelpConcept.tsx
+++ b/rsconcept/frontend/src/components/man/HelpConcept.tsx
@@ -1,9 +1,15 @@
+import { HelpTopic } from '@/models/miscellaneous';
+
+import Subtopics from './Subtopics';
+
function HelpConceptSystem() {
// prettier-ignore
return (
);
}
diff --git a/rsconcept/frontend/src/components/man/HelpCstAttributes.tsx b/rsconcept/frontend/src/components/man/HelpCstAttributes.tsx
index b4725f34..c9af9f56 100644
--- a/rsconcept/frontend/src/components/man/HelpCstAttributes.tsx
+++ b/rsconcept/frontend/src/components/man/HelpCstAttributes.tsx
@@ -1,7 +1,6 @@
-import { urls } from '@/app/urls';
import { HelpTopic } from '@/models/miscellaneous';
-import TextURL from '../ui/TextURL';
+import LinkTopic from '../ui/LinkTopic';
function HelpCstAttributes() {
// prettier-ignore
@@ -9,7 +8,7 @@ function HelpCstAttributes() {
Атрибуты конституенты
Термин может быть присвоен любой конституенте. Он используется в других Терминах и в Текстовых определениях
-
Формальное определение строится с помощью формального аппарата
+
Формальное определение строится с помощью формального аппарата
Типизация вычисляется автоматически на основе Формального определения и отражает структуру элементов множества, задаваемого этим определением
Текстовое определение предоставляется для конституент, имеющих Формальное определение или Область определения. Это текстовая интерпретация формального определения и строится из связующих слов, терминов теории множеств и отсылок на термины ранее введенных конституент
Конвенция – это соглашение о соотнесении неопределенного понятия с сущностями в предметной области
diff --git a/rsconcept/frontend/src/components/man/HelpInterface.tsx b/rsconcept/frontend/src/components/man/HelpInterface.tsx
index c7d3c8b1..777df25f 100644
--- a/rsconcept/frontend/src/components/man/HelpInterface.tsx
+++ b/rsconcept/frontend/src/components/man/HelpInterface.tsx
@@ -1,9 +1,21 @@
+import { HelpTopic } from '@/models/miscellaneous';
+
+import Subtopics from './Subtopics';
+
function HelpInterface() {
// prettier-ignore
return (
Пользовательский интерфейс
-
TBD
+
+
Общие принципы построения интерфейса
+
+
Навигация и настройки
+
Навигационную панель можно скрыть с помощью кнопки в правом верхнем углу
+
В меню пользователя доступен ряд настроек и управление активным профилем
+
+
+
);
}
diff --git a/rsconcept/frontend/src/components/man/HelpMain.tsx b/rsconcept/frontend/src/components/man/HelpMain.tsx
index 9e065f37..22da072d 100644
--- a/rsconcept/frontend/src/components/man/HelpMain.tsx
+++ b/rsconcept/frontend/src/components/man/HelpMain.tsx
@@ -1,31 +1,44 @@
import { urls } from '@/app/urls';
import TextURL from '@/components/ui/TextURL';
import { HelpTopic } from '@/models/miscellaneous';
-import { external_urls } from '@/utils/constants';
+import { external_urls, prefixes } from '@/utils/constants';
+
+import LinkTopic from '../ui/LinkTopic';
+import TopicItem from './TopicItem';
function HelpMain() {
// prettier-ignore
return (
Портал
-
Портал позволяет анализировать предметные области, формально записывать системы определений и синтезировать их с помощью математического
-
Такие системы называются Концептуальными схемами и состоят из отдельных , обладающих уникальными обозначениями и формальными определениями
+
Портал позволяет анализировать предметные области, формально записывать системы определений и синтезировать их с помощью математического аппарата
+
Такие системы называются Концептуальными схемами и состоят из отдельных , обладающих уникальными обозначениями и формальными определениями
-
Основные разделы
+
Разделы Портала
– библиотека концептуальных схем
– справочные материалы
– данные пользователя и смена пароля
-
-
Навигация и настройки
-
Навигационную панель можно скрыть с помощью кнопки в правом верхнем углу
-
В меню пользователя доступен ряд настроек и управление активным профилем
+
+
Разделы Справки
+ {[
+ HelpTopic.INTERFACE,
+ HelpTopic.CONCEPTUAL,
+ HelpTopic.RSLANG,
+ HelpTopic.TERM_CONTROL,
+ HelpTopic.VERSIONS,
+ HelpTopic.EXTEOR,
+ HelpTopic.API,
+ HelpTopic.PRIVACY
+ ].map(topic =>
+
+ )}
Лицензирование и раскрытие информации
Пользователи Портала сохраняют авторские права на создаваемый ими контент
-
Политика обработки данных доступна по
+
Политика обработки данных доступна по
Портал является проектом с открытым исходным кодом, доступным на
Данный сайт использует доменное имя и серверные мощности
diff --git a/rsconcept/frontend/src/components/man/HelpRSFormItems.tsx b/rsconcept/frontend/src/components/man/HelpRSFormItems.tsx
index 5645355b..7f594ed8 100644
--- a/rsconcept/frontend/src/components/man/HelpRSFormItems.tsx
+++ b/rsconcept/frontend/src/components/man/HelpRSFormItems.tsx
@@ -1,17 +1,16 @@
-import { urls } from '@/app/urls';
import InfoCstStatus from '@/components/info/InfoCstStatus';
import Divider from '@/components/ui/Divider';
import { HelpTopic } from '@/models/miscellaneous';
import { IconAlias, IconMoveDown, IconMoveUp } from '../Icons';
-import TextURL from '../ui/TextURL';
+import LinkTopic from '../ui/LinkTopic';
function HelpRSFormItems() {
// prettier-ignore
return (
Список конституент
-
Конституенты обладают уникальным
+
Конституенты обладают уникальным
Список поддерживает выделение и перемещение
Управление списком
diff --git a/rsconcept/frontend/src/components/man/HelpRSFormMeta.tsx b/rsconcept/frontend/src/components/man/HelpRSFormMeta.tsx
index 8843ab95..04e233ac 100644
--- a/rsconcept/frontend/src/components/man/HelpRSFormMeta.tsx
+++ b/rsconcept/frontend/src/components/man/HelpRSFormMeta.tsx
@@ -1,8 +1,7 @@
-import { urls } from '@/app/urls';
import { HelpTopic } from '@/models/miscellaneous';
import { IconClone, IconDownload, IconFollow, IconImmutable, IconOwner, IconPublic, IconSave } from '../Icons';
-import TextURL from '../ui/TextURL';
+import LinkTopic from '../ui/LinkTopic';
function HelpRSFormMeta() {
// prettier-ignore
@@ -11,7 +10,7 @@ function HelpRSFormMeta() {
Карточка схемы
Карточка схемы содержит общую информацию и статистику схемы
-
Карточка схемы позволяет управлять атрибутами схемы и ее
+
Карточка схемы позволяет управлять атрибутами схемы и ее
Управление
сохранить изменения: Ctrl + S
diff --git a/rsconcept/frontend/src/components/man/HelpRSFormUI.tsx b/rsconcept/frontend/src/components/man/HelpRSFormUI.tsx
deleted file mode 100644
index 5216e202..00000000
--- a/rsconcept/frontend/src/components/man/HelpRSFormUI.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-function HelpRSFormUI() {
- // prettier-ignore
- return (
-
-
Интерфейс Концептуальной схемы
-
TBD
-
);
-}
-
-export default HelpRSFormUI;
diff --git a/rsconcept/frontend/src/components/man/HelpRSLang.tsx b/rsconcept/frontend/src/components/man/HelpRSLang.tsx
index a4845136..7e33fce5 100644
--- a/rsconcept/frontend/src/components/man/HelpRSLang.tsx
+++ b/rsconcept/frontend/src/components/man/HelpRSLang.tsx
@@ -2,8 +2,11 @@ import { useMemo } from 'react';
import EmbedYoutube from '@/components/ui/EmbedYoutube';
import useWindowSize from '@/hooks/useWindowSize';
+import { HelpTopic } from '@/models/miscellaneous';
import { external_urls, youtube } from '@/utils/constants';
+import Subtopics from './Subtopics';
+
function HelpRSLang() {
const windowSize = useWindowSize();
@@ -20,7 +23,6 @@ function HelpRSLang() {
Родоструктурная экспликация концептуальных схем
Формальная запись (экспликация) концептуальных схем осуществляется с помощью языка родов структур.
-
Данный математический аппарат основан на аксиоматической теории множеств Цермелло-Френкеля и аппарате родов структур Н.Бурбаки.
Для ознакомления с основами родов структур можно использовать следующие материалы:
1. Видео: Краткое введение в мат. аппарат
@@ -28,10 +30,13 @@ function HelpRSLang() {
3. Видео: лекции для 4 курса (второй семестр 2022-23 год)
-
+
+
+
+
);
}
diff --git a/rsconcept/frontend/src/components/man/Subtopics.tsx b/rsconcept/frontend/src/components/man/Subtopics.tsx
new file mode 100644
index 00000000..d1ca3ff9
--- /dev/null
+++ b/rsconcept/frontend/src/components/man/Subtopics.tsx
@@ -0,0 +1,23 @@
+import { HelpTopic, topicParent } from '@/models/miscellaneous';
+import { prefixes } from '@/utils/constants';
+
+import TopicItem from './TopicItem';
+
+interface SubtopicsProps {
+ headTopic: HelpTopic;
+}
+
+function Subtopics({ headTopic }: SubtopicsProps) {
+ return (
+ <>
+
Содержание раздела
+ {Object.values(HelpTopic)
+ .filter(topic => topic !== headTopic && topicParent.get(topic) === headTopic)
+ .map(topic => (
+
+ ))}
+ >
+ );
+}
+
+export default Subtopics;
diff --git a/rsconcept/frontend/src/components/man/TopicItem.tsx b/rsconcept/frontend/src/components/man/TopicItem.tsx
new file mode 100644
index 00000000..fa892831
--- /dev/null
+++ b/rsconcept/frontend/src/components/man/TopicItem.tsx
@@ -0,0 +1,18 @@
+import { HelpTopic } from '@/models/miscellaneous';
+import { describeHelpTopic, labelHelpTopic } from '@/utils/labels';
+
+import LinkTopic from '../ui/LinkTopic';
+
+interface TopicItemProps {
+ topic: HelpTopic;
+}
+
+function TopicItem({ topic }: TopicItemProps) {
+ return (
+
+ – {describeHelpTopic(topic)}
+
+ );
+}
+
+export default TopicItem;
diff --git a/rsconcept/frontend/src/components/ui/LinkTopic.tsx b/rsconcept/frontend/src/components/ui/LinkTopic.tsx
new file mode 100644
index 00000000..bb2c3195
--- /dev/null
+++ b/rsconcept/frontend/src/components/ui/LinkTopic.tsx
@@ -0,0 +1,15 @@
+import { urls } from '@/app/urls';
+import { HelpTopic } from '@/models/miscellaneous';
+
+import TextURL from './TextURL';
+
+interface TextURLProps {
+ text: string;
+ topic: HelpTopic;
+}
+
+function LinkTopic({ text, topic }: TextURLProps) {
+ return
;
+}
+
+export default LinkTopic;
diff --git a/rsconcept/frontend/src/models/miscellaneous.ts b/rsconcept/frontend/src/models/miscellaneous.ts
index 5c96e672..71173a25 100644
--- a/rsconcept/frontend/src/models/miscellaneous.ts
+++ b/rsconcept/frontend/src/models/miscellaneous.ts
@@ -46,10 +46,9 @@ export enum HelpTopic {
INTERFACE = 'user-interface',
UI_LIBRARY = 'ui-library',
- UI_RSFORM = 'ui-rsform',
- UI_RSFORM_CARD = 'ui-rsform-card',
- UI_RSFORM_LIST = 'ui-rsform-list',
- UI_RSFORM_EDITOR = 'ui-rsform-editor',
+ UI_RS_CARD = 'ui-rsform-card',
+ UI_RS_LIST = 'ui-rsform-list',
+ UI_RS_EDITOR = 'ui-rsform-editor',
UI_GRAPH_TERM = 'ui-rsform-graph',
UI_CST_STATUS = 'ui-rsform-cst-status',
UI_CST_CLASS = 'ui-rsform-cst-class',
@@ -81,13 +80,12 @@ export const topicParent: Map
= new Map([
[HelpTopic.INTERFACE, HelpTopic.INTERFACE],
[HelpTopic.UI_LIBRARY, HelpTopic.INTERFACE],
- [HelpTopic.UI_RSFORM, HelpTopic.INTERFACE],
- [HelpTopic.UI_RSFORM_CARD, HelpTopic.UI_RSFORM],
- [HelpTopic.UI_RSFORM_LIST, HelpTopic.UI_RSFORM],
- [HelpTopic.UI_RSFORM_EDITOR, HelpTopic.UI_RSFORM],
- [HelpTopic.UI_GRAPH_TERM, HelpTopic.UI_RSFORM],
- [HelpTopic.UI_CST_STATUS, HelpTopic.UI_RSFORM],
- [HelpTopic.UI_CST_CLASS, HelpTopic.UI_RSFORM],
+ [HelpTopic.UI_RS_CARD, HelpTopic.INTERFACE],
+ [HelpTopic.UI_RS_LIST, HelpTopic.INTERFACE],
+ [HelpTopic.UI_RS_EDITOR, HelpTopic.INTERFACE],
+ [HelpTopic.UI_GRAPH_TERM, HelpTopic.INTERFACE],
+ [HelpTopic.UI_CST_STATUS, HelpTopic.INTERFACE],
+ [HelpTopic.UI_CST_CLASS, HelpTopic.INTERFACE],
[HelpTopic.CONCEPTUAL, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_SYSTEM, HelpTopic.CONCEPTUAL],
@@ -111,7 +109,7 @@ export const topicParent: Map = new Map([
/**
* Topics that can be folded.
*/
-export const foldableTopics = [HelpTopic.INTERFACE, HelpTopic.UI_RSFORM, HelpTopic.RSLANG, HelpTopic.CONCEPTUAL];
+export const foldableTopics = [HelpTopic.INTERFACE, HelpTopic.RSLANG, HelpTopic.CONCEPTUAL];
/**
* Represents {@link IConstituenta} matching mode.
diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx
index da765b9b..85ad08bb 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx
@@ -10,7 +10,7 @@ import MiniButton from '@/components/ui/MiniButton';
import Overlay from '@/components/ui/Overlay';
import { foldableTopics, HelpTopic, topicParent } from '@/models/miscellaneous';
import { animateSideAppear } from '@/styling/animations';
-import { prefixes } from '@/utils/constants';
+import { globals, prefixes } from '@/utils/constants';
import { describeHelpTopic, labelHelpTopic } from '@/utils/labels';
interface TopicsTreeProps {
@@ -49,7 +49,8 @@ function TopicsTree({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }: To
'cursor-pointer',
activeTopic === topic && 'clr-selected'
)}
- title={describeHelpTopic(topic)}
+ data-tooltip-id={globals.tooltip}
+ data-tooltip-content={describeHelpTopic(topic)}
onClick={() => onChangeTopic(topic)}
initial={{ ...animateSideAppear.initial }}
animate={{ ...animateSideAppear.animate }}
@@ -66,7 +67,7 @@ function TopicsTree({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }: To
/>
) : null}
- {labelHelpTopic(topic)}
+ {topicParent.get(topic) === topic ? labelHelpTopic(topic) : `- ${labelHelpTopic(topic).toLowerCase()}`}
);
})}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ConstituentaToolbar.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ConstituentaToolbar.tsx
index b699a0cb..e1db5b20 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ConstituentaToolbar.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ConstituentaToolbar.tsx
@@ -74,7 +74,7 @@ function ConstituentaToolbar({
disabled={disabled || modified}
onClick={onMoveDown}
/>
-
+
);
}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm/RSFormToolbar.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm/RSFormToolbar.tsx
index 53774cbd..c3fc0719 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm/RSFormToolbar.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm/RSFormToolbar.tsx
@@ -81,7 +81,7 @@ function RSFormToolbar({ modified, anonymous, subscribed, claimable, onSubmit, o
onClick={onDestroy}
/>
) : null}
-
+
);
}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/RSListToolbar.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/RSListToolbar.tsx
index 9f34e63b..c45810ed 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/RSListToolbar.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/RSListToolbar.tsx
@@ -68,7 +68,7 @@ function RSListToolbar() {
disabled={controller.isProcessing || controller.nothingSelected}
onClick={controller.deleteCst}
/>
-
+
);
}
diff --git a/rsconcept/frontend/src/utils/constants.ts b/rsconcept/frontend/src/utils/constants.ts
index 04ee1111..f24f28f2 100644
--- a/rsconcept/frontend/src/utils/constants.ts
+++ b/rsconcept/frontend/src/utils/constants.ts
@@ -137,6 +137,7 @@ export const prefixes = {
csttype_list: 'csttype_',
library_filters_list: 'library_filters_list_',
topic_list: 'topic_list_',
+ topic_item: 'topic_item_',
library_list: 'library_list_',
wordform_list: 'wordform_list_',
rsedit_btn: 'rsedit_btn_',
diff --git a/rsconcept/frontend/src/utils/labels.ts b/rsconcept/frontend/src/utils/labels.ts
index 97f85480..d134b651 100644
--- a/rsconcept/frontend/src/utils/labels.ts
+++ b/rsconcept/frontend/src/utils/labels.ts
@@ -361,26 +361,25 @@ export function labelHelpTopic(topic: HelpTopic): string {
case HelpTopic.MAIN: return 'Портал';
case HelpTopic.INTERFACE: return 'Интерфейс';
- case HelpTopic.UI_LIBRARY: return '- библиотека';
- case HelpTopic.UI_RSFORM: return '- концептуальная схема';
- case HelpTopic.UI_RSFORM_CARD: return '= карточка схемы';
- case HelpTopic.UI_RSFORM_LIST: return '= список конституент';
- case HelpTopic.UI_RSFORM_EDITOR: return '= редактор конституенты';
- case HelpTopic.UI_GRAPH_TERM: return '= граф термов';
- case HelpTopic.UI_CST_STATUS: return '= статус конституенты';
- case HelpTopic.UI_CST_CLASS: return '= класс конституенты';
+ case HelpTopic.UI_LIBRARY: return 'Библиотека';
+ case HelpTopic.UI_RS_CARD: return 'Карточка схемы';
+ case HelpTopic.UI_RS_LIST: return 'Список конституент';
+ case HelpTopic.UI_RS_EDITOR: return 'Редактор конституенты';
+ case HelpTopic.UI_GRAPH_TERM: return 'Граф термов';
+ case HelpTopic.UI_CST_STATUS: return 'Статус конституенты';
+ case HelpTopic.UI_CST_CLASS: return 'Класс конституенты';
case HelpTopic.CONCEPTUAL: return 'Концептуализация';
- case HelpTopic.CC_SYSTEM: return '- система определений';
- case HelpTopic.CC_CONSTITUENTA: return '- конституента';
- case HelpTopic.CC_RELATIONS: return '- связи понятий';
+ case HelpTopic.CC_SYSTEM: return 'Система определений';
+ case HelpTopic.CC_CONSTITUENTA: return 'Конституента';
+ case HelpTopic.CC_RELATIONS: return 'Связи понятий';
case HelpTopic.RSLANG: return 'Экспликация';
- case HelpTopic.RSL_TYPES: return '- типизация';
- case HelpTopic.RSL_CORRECT: return '- переносимость';
- case HelpTopic.RSL_INTERPRET: return '- интерпретируемость';
- case HelpTopic.RSL_TEMPLATES: return '- шаблоны выражений';
- case HelpTopic.RSL_OPERATIONS: return '- операции';
+ case HelpTopic.RSL_TYPES: return 'Типизация';
+ case HelpTopic.RSL_CORRECT: return 'Переносимость';
+ case HelpTopic.RSL_INTERPRET: return 'Интерпретируемость';
+ case HelpTopic.RSL_TEMPLATES: return 'Шаблоны выражений';
+ case HelpTopic.RSL_OPERATIONS: return 'Операции';
case HelpTopic.TERM_CONTROL: return 'Терминологизация';
case HelpTopic.VERSIONS: return 'Версионирование';
@@ -396,35 +395,34 @@ export function labelHelpTopic(topic: HelpTopic): string {
export function describeHelpTopic(topic: HelpTopic): string {
// prettier-ignore
switch (topic) {
- case HelpTopic.MAIN: return 'Общая справка по порталу';
+ case HelpTopic.MAIN: return 'общая справка по порталу';
- case HelpTopic.INTERFACE: return 'Описание интерфейса пользователя';
- case HelpTopic.UI_LIBRARY: return 'Интерфейс Библиотеки схем';
- case HelpTopic.UI_RSFORM: return 'Просмотр и редактирование концептуальной схемы';
- case HelpTopic.UI_RSFORM_CARD: return 'Интерфейс Карточки схемы';
- case HelpTopic.UI_RSFORM_LIST: return 'Интерфейс Списка конституент';
- case HelpTopic.UI_RSFORM_EDITOR: return 'Интерфейс редактирования конституенты';
- case HelpTopic.UI_GRAPH_TERM: return 'Интерфейс графа термов';
- case HelpTopic.UI_CST_STATUS: return 'Нотация отображения статуса конституенты';
- case HelpTopic.UI_CST_CLASS: return 'Нотация отображения класса конституенты';
+ case HelpTopic.INTERFACE: return 'описание интерфейса пользователя';
+ case HelpTopic.UI_LIBRARY: return 'интерфейс Библиотеки схем';
+ case HelpTopic.UI_RS_CARD: return 'интерфейс Карточки схемы';
+ case HelpTopic.UI_RS_LIST: return 'интерфейс Списка конституент';
+ case HelpTopic.UI_RS_EDITOR: return 'интерфейс редактирования конституенты';
+ case HelpTopic.UI_GRAPH_TERM: return 'интерфейс графа термов';
+ case HelpTopic.UI_CST_STATUS: return 'нотация отображения статуса конституенты';
+ case HelpTopic.UI_CST_CLASS: return 'нотация отображения класса конституенты';
- case HelpTopic.CONCEPTUAL: return 'Основы концептуализации и концептуального мышления';
- case HelpTopic.CC_SYSTEM: return 'Концептуальная схема как система понятий';
- case HelpTopic.CC_CONSTITUENTA: return 'Понятия конституенты и ее атрибутов';
- case HelpTopic.CC_RELATIONS: return 'Отношения между конституентами';
+ case HelpTopic.CONCEPTUAL: return 'основы концептуализации и концептуального мышления';
+ case HelpTopic.CC_SYSTEM: return 'концептуальная схема как система понятий';
+ case HelpTopic.CC_CONSTITUENTA: return 'понятия конституенты и ее атрибутов';
+ case HelpTopic.CC_RELATIONS: return 'отношения между конституентами';
- case HelpTopic.RSLANG: return 'Справка по языку родов структур и экспликации';
- case HelpTopic.RSL_TYPES: return 'Система типов в родоструктурной экспликации';
- case HelpTopic.RSL_CORRECT: return 'Корректность и переносимость определений';
- case HelpTopic.RSL_INTERPRET: return 'Интерпретация формальных определений';
- case HelpTopic.RSL_TEMPLATES: return 'Работа с шаблонными выражениями';
- case HelpTopic.RSL_OPERATIONS: return 'Операции над концептуальными схемами';
+ case HelpTopic.RSLANG: return 'справка по языку родов структур и экспликации';
+ case HelpTopic.RSL_TYPES: return 'система типов в родоструктурной экспликации';
+ case HelpTopic.RSL_CORRECT: return 'корректность и переносимость определений';
+ case HelpTopic.RSL_INTERPRET: return 'интерпретация формальных определений';
+ case HelpTopic.RSL_TEMPLATES: return 'работа с шаблонными выражениями';
+ case HelpTopic.RSL_OPERATIONS: return 'операции над концептуальными схемами';
- case HelpTopic.TERM_CONTROL: return 'Справка по контролю терминов и текстовым отсылкам';
- case HelpTopic.VERSIONS: return 'Справка по управлению версиями схем';
- case HelpTopic.EXTEOR: return 'Справка по программе для экспликации "Экстеор" для Windows';
- case HelpTopic.API: return 'Интерфейс для разработчиков';
- case HelpTopic.PRIVACY: return 'Политика обработки персональных данных';
+ case HelpTopic.TERM_CONTROL: return 'справка по контролю терминов и текстовым отсылкам';
+ case HelpTopic.VERSIONS: return 'справка по управлению версиями схем';
+ case HelpTopic.EXTEOR: return 'справка по программе для экспликации "Экстеор" для Windows';
+ case HelpTopic.API: return 'интерфейс для разработчиков';
+ case HelpTopic.PRIVACY: return 'политика обработки персональных данных';
}
}