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 (

Концептуализация

TBD

+ +
); } 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 'политика обработки персональных данных'; } }