Improve help UI + minor fixes

This commit is contained in:
IRBorisov 2024-05-16 14:01:06 +03:00
parent 0487324514
commit 62e30d474b
24 changed files with 212 additions and 136 deletions

View File

@ -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) \

View File

@ -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,

View File

@ -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"

View File

@ -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",

View File

@ -9,7 +9,7 @@ function Logo() {
return (
<img
alt='Логотип КонцептПортал'
alt=''
className={clsx('max-h-[1.6rem] w-fit')}
src={size.isSmall ? '/logo_sign.svg' : !darkMode ? '/logo_full.svg' : '/logo_full_dark.svg'}
/>

View File

@ -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 <HelpInterface />;
if (topic === HelpTopic.UI_LIBRARY) return <HelpLibrary />;
if (topic === HelpTopic.UI_RSFORM) return <HelpRSFormUI />;
if (topic === HelpTopic.UI_RSFORM_CARD) return <HelpRSFormMeta />;
if (topic === HelpTopic.UI_RSFORM_LIST) return <HelpRSFormItems />;
if (topic === HelpTopic.UI_RSFORM_EDITOR) return <HelpCstEditor />;
if (topic === HelpTopic.UI_RS_CARD) return <HelpRSFormMeta />;
if (topic === HelpTopic.UI_RS_LIST) return <HelpRSFormItems />;
if (topic === HelpTopic.UI_RS_EDITOR) return <HelpCstEditor />;
if (topic === HelpTopic.UI_GRAPH_TERM) return <HelpTermGraph />;
if (topic === HelpTopic.UI_CST_STATUS) return <HelpCstStatus />;
if (topic === HelpTopic.UI_CST_CLASS) return <HelpCstClass />;

View File

@ -1,9 +1,15 @@
import { HelpTopic } from '@/models/miscellaneous';
import Subtopics from './Subtopics';
function HelpConceptSystem() {
// prettier-ignore
return (
<div>
<h1>Концептуализация</h1>
<p>TBD</p>
<Subtopics headTopic={HelpTopic.CONCEPTUAL} />
</div>);
}

View File

@ -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() {
<div className='dense'>
<h1>Атрибуты конституенты</h1>
<p><b>Термин</b> может быть присвоен любой конституенте. Он используется в других Терминах и в Текстовых определениях</p>
<p><b>Формальное определение</b> строится с помощью формального аппарата <TextURL text='родоструктурной экспликации' href={urls.help_topic(HelpTopic.RSLANG)}/></p>
<p><b>Формальное определение</b> строится с помощью формального аппарата <LinkTopic text='родоструктурной экспликации' topic={HelpTopic.RSLANG}/></p>
<p><b>Типизация</b> вычисляется автоматически на основе Формального определения и отражает структуру элементов множества, задаваемого этим определением</p>
<p><b>Текстовое определение</b> предоставляется для конституент, имеющих Формальное определение или Область определения. Это текстовая интерпретация формального определения и строится из связующих слов, терминов теории множеств и отсылок на термины ранее введенных конституент</p>
<p><b>Конвенция</b> это соглашение о соотнесении неопределенного понятия с сущностями в предметной области</p>

View File

@ -1,9 +1,21 @@
import { HelpTopic } from '@/models/miscellaneous';
import Subtopics from './Subtopics';
function HelpInterface() {
// prettier-ignore
return (
<div>
<h1>Пользовательский интерфейс</h1>
<p>TBD</p>
<p>Общие принципы построения интерфейса</p>
<h2>Навигация и настройки</h2>
<li>Навигационную панель можно скрыть с помощью кнопки в правом верхнем углу</li>
<li>В меню пользователя доступен ряд настроек и управление активным профилем</li>
<br/>
<Subtopics headTopic={HelpTopic.INTERFACE} />
</div>);
}

View File

@ -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 (
<div>
<h1>Портал</h1>
<p>Портал позволяет анализировать предметные области, формально записывать системы определений и синтезировать их с помощью математического <TextURL text='аппарата родов структур' href={urls.help_topic(HelpTopic.RSLANG)}/></p>
<p>Такие системы называются <b>Концептуальными схемами</b> и состоят из отдельных <TextURL text='Конституент' href={urls.help_topic(HelpTopic.CC_CONSTITUENTA)}/>, обладающих уникальными обозначениями и формальными определениями</p>
<p>Портал позволяет анализировать предметные области, формально записывать системы определений и синтезировать их с помощью математического аппарата <LinkTopic text='Родов структур' topic={HelpTopic.RSLANG}/></p>
<p>Такие системы называются <b>Концептуальными схемами</b> и состоят из отдельных <LinkTopic text='Конституент' topic={HelpTopic.CC_CONSTITUENTA}/>, обладающих уникальными обозначениями и формальными определениями</p>
<br/>
<h2>Основные разделы</h2>
<h2>Разделы Портала</h2>
<li><TextURL text='Библиотека' href={urls.library} /> библиотека концептуальных схем</li>
<li><TextURL text='Справка' href={urls.manuals} /> справочные материалы</li>
<li><TextURL text='Профиль' href={urls.profile} /> данные пользователя и смена пароля</li>
<br/>
<h2>Навигация и настройки</h2>
<li>Навигационную панель можно скрыть с помощью кнопки в правом верхнем углу</li>
<li>В меню пользователя доступен ряд настроек и управление активным профилем</li>
<h2>Разделы Справки</h2>
{[
HelpTopic.INTERFACE,
HelpTopic.CONCEPTUAL,
HelpTopic.RSLANG,
HelpTopic.TERM_CONTROL,
HelpTopic.VERSIONS,
HelpTopic.EXTEOR,
HelpTopic.API,
HelpTopic.PRIVACY
].map(topic =>
<TopicItem key={`${prefixes.topic_item}${topic}`} topic={topic} />
)}
<br/>
<h2>Лицензирование и раскрытие информации</h2>
<li>Пользователи Портала сохраняют авторские права на создаваемый ими контент</li>
<li>Политика обработки данных доступна по <TextURL text='ссылке' href={urls.help_topic(HelpTopic.PRIVACY)} /></li>
<li>Политика обработки данных доступна по <LinkTopic text='ссылке' topic={HelpTopic.PRIVACY}/></li>
<li>Портал является проектом с открытым исходным кодом, доступным на <TextURL text='Github' href={external_urls.git_repo}/></li>
<li>Данный сайт использует доменное имя и серверные мощности <TextURL text='Центра Концепт' href={external_urls.concept}/></li>
<br/>

View File

@ -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 (
<div className='dense'>
<h1>Список конституент</h1>
<p><IconAlias className='inline-icon'/>Конституенты обладают уникальным <TextURL text='Именем' href={urls.help_topic(HelpTopic.CC_CONSTITUENTA)}/></p>
<p><IconAlias className='inline-icon'/>Конституенты обладают уникальным <LinkTopic text='Именем' topic={HelpTopic.CC_CONSTITUENTA}/></p>
<p><IconMoveUp className='inline-icon'/><IconMoveDown className='inline-icon'/> Список поддерживает выделение и перемещение </p>
<h2>Управление списком</h2>

View File

@ -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() {
<h1>Карточка схемы</h1>
<p>Карточка схемы содержит общую информацию и статистику схемы</p>
<p>Карточка схемы позволяет управлять атрибутами схемы и ее <TextURL text='версиями' href={urls.help_topic(HelpTopic.VERSIONS)}/></p>
<p>Карточка схемы позволяет управлять атрибутами схемы и ее <LinkTopic text='версиями' topic={HelpTopic.VERSIONS}/></p>
<h2>Управление</h2>
<li><IconSave className='inline-icon'/> сохранить изменения: Ctrl + S</li>

View File

@ -1,10 +0,0 @@
function HelpRSFormUI() {
// prettier-ignore
return (
<div>
<h1>Интерфейс Концептуальной схемы</h1>
<p>TBD</p>
</div>);
}
export default HelpRSFormUI;

View File

@ -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() {
<div className='dense'>
<h1>Родоструктурная экспликация концептуальных схем</h1>
<p>Формальная запись (<i>экспликация</i>) концептуальных схем осуществляется с помощью языка родов структур.</p>
<p>Данный математический аппарат основан на аксиоматической теории множеств Цермелло-Френкеля и аппарате родов структур Н.Бурбаки.</p>
<br />
<p>Для ознакомления с основами родов структур можно использовать следующие материалы:</p>
<p>1. <a className='underline' href={external_urls.intro_video}>Видео: Краткое введение в мат. аппарат</a></p>
@ -28,10 +30,13 @@ function HelpRSLang() {
<p>3. <a className='underline' href={external_urls.full_course}>Видео: лекции для 4 курса (второй семестр 2022-23 год)</a></p>
</div>
<div className='justify-center w-full'>
<EmbedYoutube
videoID={youtube.intro}
pxHeight={videoHeight}
/>
<EmbedYoutube
videoID={youtube.intro}
pxHeight={videoHeight}
/>
</div>
<div className='dense'>
<Subtopics headTopic={HelpTopic.RSLANG} />
</div>
</div>);
}

View File

@ -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 (
<>
<h2>Содержание раздела</h2>
{Object.values(HelpTopic)
.filter(topic => topic !== headTopic && topicParent.get(topic) === headTopic)
.map(topic => (
<TopicItem key={`${prefixes.topic_item}${topic}`} topic={topic} />
))}
</>
);
}
export default Subtopics;

View File

@ -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 (
<li>
<LinkTopic text={labelHelpTopic(topic)} topic={topic} /> {describeHelpTopic(topic)}
</li>
);
}
export default TopicItem;

View File

@ -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 <TextURL text={text} href={urls.help_topic(topic)} />;
}
export default LinkTopic;

View File

@ -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<HelpTopic, HelpTopic> = 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<HelpTopic, HelpTopic> = 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.

View File

@ -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
/>
</Overlay>
) : null}
{labelHelpTopic(topic)}
{topicParent.get(topic) === topic ? labelHelpTopic(topic) : `- ${labelHelpTopic(topic).toLowerCase()}`}
</motion.div>
);
})}

View File

@ -74,7 +74,7 @@ function ConstituentaToolbar({
disabled={disabled || modified}
onClick={onMoveDown}
/>
<BadgeHelp topic={HelpTopic.UI_RSFORM_EDITOR} offset={4} />
<BadgeHelp topic={HelpTopic.UI_RS_EDITOR} offset={4} />
</Overlay>
);
}

View File

@ -81,7 +81,7 @@ function RSFormToolbar({ modified, anonymous, subscribed, claimable, onSubmit, o
onClick={onDestroy}
/>
) : null}
<BadgeHelp topic={HelpTopic.UI_RSFORM_CARD} offset={4} className='max-w-[32rem]' />
<BadgeHelp topic={HelpTopic.UI_RS_CARD} offset={4} className='max-w-[32rem]' />
</Overlay>
);
}

View File

@ -68,7 +68,7 @@ function RSListToolbar() {
disabled={controller.isProcessing || controller.nothingSelected}
onClick={controller.deleteCst}
/>
<BadgeHelp topic={HelpTopic.UI_RSFORM_LIST} offset={5} />
<BadgeHelp topic={HelpTopic.UI_RS_LIST} offset={5} />
</Overlay>
);
}

View File

@ -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_',

View File

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