{"version":3,"sources":["components/TopMenuList.jsx","components/TopMenu.jsx","components/TopMenuPoorVision.jsx","components/Header.jsx","components/RectorImage.jsx","components/Logo.jsx","components/LeftMenuList.jsx","components/ListPlaceholder.jsx","components/ArticleSource.jsx","components/Calendar.jsx","components/LeftAside.jsx","components/Error.jsx","authService.js","components/admin/DeleteButton.jsx","components/admin/EditButton.jsx","components/admin/ControlButtons.jsx","components/Article.jsx","components/ValidationError.jsx","components/Spinner.jsx","components/AppealForm.jsx","components/ImagePlaceholder.jsx","components/CarouselWrapper.jsx","components/NewsItem.jsx","components/News.jsx","components/Ad.jsx","components/Description.jsx","components/Congratulation.jsx","components/RightAside.jsx","components/Home.jsx","components/Pagination.jsx","components/ArticleList.jsx","components/admin/Login.jsx","components/admin/LinkButtons.jsx","components/Tags.jsx","components/admin/FileItem.jsx","components/admin/FileList.jsx","components/admin/ArticleForm.jsx","components/admin/ArticleFormPost.jsx","components/admin/ArticleFormPut.jsx","components/Contacts.jsx","components/Forum2022.jsx","components/Forum2023.jsx","components/Forum2024.jsx","components/Forum2025.jsx","components/admin/Logout.jsx","components/admin/Appeal.jsx","components/admin/AppealList.jsx","components/RouterContainer.jsx","components/Footer.jsx","components/mobile/MobileHeader.jsx","App.js","serviceWorker.js","components/ScrollTop.jsx","components/ErrorBoundary.jsx","components/MenuActive.jsx","axioxConfig.js","VisionStyle.jsx","index.js"],"names":["TopMenuList","to","className","href","React","Component","TopMenu","localStorage","setItem","window","location","reload","onClick","this","poorVersion","TopMenuPoorVision","removeItem","e","fontSizeClassName","target","dataset","fontSize","colorSchemeClassName","colorScheme","normalVision","data-font-size","changeFontSize","data-color-scheme","changeFontColor","Header","getItem","RectorImage","alt","src","Logo","LeftMenuList","props","handleClick","bind","parentElement","classList","toggle","ListPlaceholder","number","list","i","push","key","properties","withArticleListSource","ArticleSourceList","state","page","getParam","articles","totalItems","error","paramName","defaultValue","paramValue","match","params","_isMounted","getArticles","prevProps","prevState","snapshot","setState","cancelSource","cancel","limit","partial","tag","axios","CancelToken","source","get","cancelToken","token","then","result","data","slice","err","history","withRouter","withArticleSource","article","getLastArticle","getNextArticle","getPrevArticle","length","getArticleByDirection","direction","publishedAt","date","format","Date","index","join","transitionClassName","toLocaleString","month","getFullYear","charAt","toUpperCase","substr","id","monthName","SwitchTransition","mode","CSSTransition","title","addEndListener","node","done","addEventListener","classNames","slug","Object","keys","previewText","LeftAside","Error","undefined","status","role","admin","user","authService","login","username","password","post","res","roles","map","r","JSON","stringify","defaults","headers","common","logout","isGranted","isAdmin","isUser","tokenHeader","parse","getToken","isLogged","Boolean","DeleteButton","handleDelete","confirm","delete","alert","EditButton","ControlButtons","Article","fetchData","route","nextContext","pathname","url","isNaN","parseFloat","isFinite","document","response","dangerouslySetInnerHTML","__html","text","ValidationError","Spinner","recaptchaRef","createRef","AppealForm","isSuccessfullySend","isFormDisabled","validationErrors","appeal","fullName","phone","address","birthYear","email","personType","message","organization","file","name","type","size","handleSubmit","handleChange","captchaChange","preventDefault","inputName","getAttribute","value","errors","mediaObject","gRecaptchaResponse","current","getValue","department","violations","v","propertyPath","files","querySelector","lastFile","formData","FormData","append","uploadFormData","disabled","onSubmit","htmlFor","onChange","appealFile","sitekey","process","ref","hl","unknown","ImagePlaceholder","speed","width","height","viewBox","backgroundColor","foregroundColor","x","y","rx","ry","CarouselWrapper","items","_isMouted","Carousel","controls","interval","keyboard","item","Item","contentUrl","NewsItem","news","language","previewImage","style","Description","RightAside","Home","isMobile","Pagination","nPage","Math","ceil","pagination","selected","unshift","val","data-pagination","handlePaginationClick","getPaginationArray","renderListItem","margin","Login","successfulLogin","LinkButtons","Tags","forEach","s","tags","checked","defaultChecked","FileItem","filename","rel","boldFontClass","toLowerCase","data-image-id","handlePreviewImage","data-file-id","handleDeleteFile","FileList","uploadedFiles","getUploadedFiles","ArticleForm","handleChangeFile","handleEditorChange","imageId","fileId","split","collectFormData","getErrorList","formFiles","random","toString","substring","uploadFiles","content","forms","fromEntries","getElementsByClassName","curTag","mediaObjects","initialValue","apiKey","init","menubar","plugin","a_plugin_option","force_br_newlines","force_p_newlines","forced_root_block","a_configuration_option","plugins","toolbar","fontsize_formats","onEditorChange","multiple","ArticleFormPost","setPreviewImage","image","ArticleFormPut","updatePreviewImage","put","catch","Contacts","frameBorder","allowFullScreen","Forum2022","Forum2023","Forum2024","Forum2025","Logout","Appeal","createdAt","AppealList","RouterContainer","path","render","ga","uri","search","exact","strict","Footer","year","border","data-cid","data-lang","MobileHeader","handleMenuButtonClick","contains","element","App","getVisionClass","hostname","ScrollTop","scrollTo","ErrorBoundary","hasError","children","MenuActive","activation","menuItem","remove","add","axiosConfig","register","baseURL","interceptors","use","indexOf","PoorVision","lazy","NormalVision","VisionStyle","Suspense","fallback","ReactGA","initialize","ReactDOM","StrictMode","accounts","options","clickmap","trackLinks","accurateTrackBounce","webvisor","trackHash","version","getElementById","navigator","serviceWorker","ready","registration","unregister","console"],"mappings":"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","file":"static/js/main.0faa4b51.chunk.js","sourcesContent":["import React from 'react';\nimport {Link} from \"react-router-dom\";\n\nexport default class TopMenuList extends React.Component {\n    render() {\n        return (\n            <>\n                <li><Link to=\"/faq\">Часто задаваемые вопросы</Link></li>\n                <li><Link to=\"/reception-schedule\">График приема</Link></li>\n                <li className=\"nav-item-parent\">\n                    <div className=\"nav-item-header-name\">Интерактивные службы</div>\n                    <ul className=\"nav-level-1\">\n                        <li><Link to=\"/schedule\">Расписание занятий</Link></li>\n                        <li><Link to=\"/edplans\">Учебные планы</Link></li>\n                        <li><Link to=\"/enrollee\">Абитуриентам бакалавриата</Link></li>\n                        <li><Link to=\"/enrollee-master\">Абитуриентам магистратуры</Link></li>\n                        <li><Link to=\"/science\">Научная деятельность</Link></li>\n                        <li><Link to=\"/reception\">Электронная приемная</Link></li>\n                        <li><Link to=\"/reception-library\">Электронная приемная библиотеки</Link></li>\n                        <li><Link to=\"/resources\">Электронная библиотека</Link></li>\n                        <li><Link to=\"/vacancies\">Вакансии</Link></li>\n                    </ul>\n                </li>\n                <li className=\"nav-item-parent\"><div className=\"nav-item-header-name\">Сайты МГУ</div>\n                    <ul className=\"nav-level-1\">\n                        <li><a href=\"http://www.msu.ru\">МГУ им. М.В.Ломоносова</a></li>\n                        <li><a href=\"http://www.math.msu.ru\">Механико-математический факультет</a></li>\n                        <li><a href=\"http://www.intsys.msu.ru\">Кафедра МаТИС</a></li>\n                        <li><a href=\"http://www.psy.msu.ru\">Факультет Психологии</a>\n                        </li>\n                    </ul>\n                </li>\n                <li className=\"nav-item-parent\"><div className=\"nav-item-header-name\">Пресс-служба</div>\n                    <ul className=\"nav-level-1\">\n                        <li><Link to=\"/interview\">Интервью руководителя</Link></li>\n                    </ul>\n                </li>\n            </>\n        );\n    }\n}","import React from 'react';\nimport TopMenuList from \"./TopMenuList\";\n\nexport default class TopMenu extends React.Component {\n    poorVersion() {\n        localStorage.setItem(\"poor_vision\", \"true\");\n        window.location.reload();\n    }\n\n    render() {\n        return (\n            <header className=\"header\">\n                <div className=\"header-top\">\n                    <div className=\"header-special\">\n                        <div className=\"pointer\" onClick={this.poorVersion}>\n                            <span className=\"ico-special\" />\n                            Версия для слабовидящих\n                        </div>\n                    </div>\n                </div>\n                <nav className=\"header-bottom\">\n                    <ul className=\"nav\">\n                        <TopMenuList />\n                    </ul>\n                </nav>\n            </header>\n        );\n    }\n}","import React from 'react';\nimport {Link} from \"react-router-dom\";\n\n\nexport default class TopMenuPoorVision extends React.Component {\n    normalVision() {\n        localStorage.removeItem(\"poor_vision\");\n        window.location.reload();\n    }\n\n    changeFontSize(e) {\n        const fontSizeClassName = e.target.dataset.fontSize;\n        localStorage.setItem(\"font_size\", fontSizeClassName);\n\n        window.location.reload();\n    }\n\n    changeFontColor(e) {\n        const colorSchemeClassName = e.target.dataset.colorScheme;\n        localStorage.setItem(\"color_scheme\", colorSchemeClassName);\n\n        window.location.reload();\n    }\n\n    render() {\n        return (\n            <header>\n                <div className=\"header-top-pane-wrap\">\n                    <div className=\"header-top-pane\">\n                        <div className=\"header-top-pane__home\">\n                            <div className=\"pointer\" onClick={this.normalVision}>\n                                Обычная версия сайта\n                            </div>\n                        </div>\n                        <div className=\"header-top-pane__font-size\">\n                            Размер шрифта:\n                            <div className=\"font-size__list\">\n                                <div className=\"pointer font-size__item font-size__item--item1\"\n                                    data-font-size=\"font-size__item--item1\" onClick={this.changeFontSize}>А\n                                </div>\n                                <div className=\"pointer font-size__item font-size__item--item2 ml-2\"\n                                    data-font-size=\"color-scheme--font-size-middle\" onClick={this.changeFontSize}>А\n                                </div>\n                                <div className=\"pointer font-size__item font-size__item--item3 ml-2\"\n                                    data-font-size=\"color-scheme--font-size-large\" onClick={this.changeFontSize}>А\n                                </div>\n                            </div>\n                        </div>\n                        <div className=\"header-top-pane__color-scheme\">\n                            Цветовая схема:\n                            <div className=\"color-scheme__list\">\n                                <div className=\"color-scheme__item color-scheme__item--black-on-white\"\n                                    data-color-scheme=\"color-scheme--black-on-white\" onClick={this.changeFontColor}>А\n                                </div>\n                                <div className=\"color-scheme__item color-scheme__item--white-on-black\"\n                                    data-color-scheme=\"color-scheme--white-on-black\" onClick={this.changeFontColor}>А\n                                </div>\n                                <div className=\"color-scheme__item color-scheme__item--white-on-blue\"\n                                    data-color-scheme=\"color-scheme--white-on-blue\" onClick={this.changeFontColor}>А\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                <div className=\"logo mt-3 mb-3\">\n                    <a href=\"/\">Филиал МГУ имени М.В.Ломоносова в городе Ташкенте</a>\n                </div>\n\n                <nav className=\"header-bottom\">\n                    <ul className=\"nav-header\">\n                        <li><Link to=\"/faq\">Часто задаваемые вопросы</Link></li>\n                        <li><Link to=\"/reception-schedule\">График приема</Link></li>\n                        <li><Link to=\"/services\">Интерактивные службы</Link></li>\n                        <li><Link to=\"/contacts\">Контакты</Link></li>\n                        <li><Link to=\"/interview\">Пресс-служба</Link></li>\n                    </ul>\n                </nav>\n            </header>\n        )\n    }\n}","import React from 'react';\nimport TopMenu from './TopMenu';\nimport TopMenuPoorVision from \"./TopMenuPoorVision\";\n\nexport class Header extends React.Component {\n    render() {\n        return localStorage.getItem(\"poor_vision\") ? <TopMenuPoorVision /> : <TopMenu />;\n    }\n}","import React from 'react';\n\nexport default class RectorImage extends React.Component {\n    render() {\n        return (\n            <div className=\"leadership-image\">\n                <div className=\"reson-pane text-center\">\n                    <div className=\"reson-pane-img\">\n                        <img className=\"leadership-image\" alt=\"Ректор МГУ академик Виктор Антонович Садовничий\" src=\"/images/rektor.png\" />\n                    </div>\n                    <span className=\"reson-pane-post\">Ректор МГУ академик</span> <span\n                    className=\"reson-pane-name\"><b>Виктор Антонович Садовничий</b></span> <br />\n                </div>\n                <div className=\"reson-pane text-center\">\n                    <div className=\"reson-pane-img\">\n                        <img className=\"leadership-image\" alt=\"Руководитель Филиала Часовских Анатолий Александрович\" src=\"/images/director.jpg\" />\n                    </div>\n                    <span className=\"reson-pane-post\">Руководитель филиала МГУ в Ташкенте</span> <span\n                    className=\"reson-pane-name\"><b>Часовских Анатолий Александрович</b></span> <br />\n                </div>\n            </div>\n        );\n    }\n}","import React from 'react';\nimport {Link} from \"react-router-dom\";\n\nexport default class Logo extends React.Component {\n    render() {\n        return (\n            <div className=\"logo\">\n                <Link to=\"/\">\n                    <img src=\"/images/logonew.png\" alt=\"Лого МГУ\" />\n                    <div className=\"mt-4 logo-text\">\n                        Филиал МГУ имени М.В.Ломоносова в городе Ташкенте\n                    </div>\n                </Link>\n                <span>Основан в 2006 году</span>\n            </div>\n        );\n    }\n}","import React from \"react\";\n\nimport {Link} from \"react-router-dom\";\n\nexport default class LeftMenuList extends React.Component {\n    constructor(props) {\n        super(props);\n        this.handleClick = this.handleClick.bind(this);\n    }\n\n    handleClick(e) {\n        e.target.parentElement.classList.toggle(\"active\");\n    }\n\n    render() {\n        return (\n            <>\n                <li><Link to=\"/\">Главная страница</Link></li>\n                <li><Link to=\"/leadership\">Руководство</Link></li>\n                <li><Link to=\"/mathfaculty\">Факультет ПМиИ</Link></li>\n                <li><Link to=\"/psyfaculty\">Факультет Психологии</Link></li>\n                <li><Link to=\"/risofaculty\">Факультет РиСО</Link></li>\n                <li><Link to=\"/philologyfaculty\">Факультет Филологии</Link></li>\n                <li><Link to=\"/teacher-education\">Направление \"Педагогическое образование\"</Link></li>\n                <li><Link to=\"/management\">Направление \"Менеджмент\"</Link></li>\n                <li><Link to=\"/additional-education\">Дополнительное образование</Link></li>\n                <li className=\"sub-menu\">\n                    <div className=\"sub-menu-header pointer\" onClick={this.handleClick}>Образование</div>\n                    <ul className=\"sub-menu-list\">\n                        <li><Link to=\"/articles/361\">Сведения об образовательной организации</Link></li>\n                        <li><Link to=\"/edplans\">Учебные планы</Link></li>\n                        <li><Link to=\"/articles/363\">Образовательные стандарты</Link></li>\n                        <li><Link to=\"/articles/397\">Локальные нормативные акты</Link></li>\n                        <li className=\"sub-menu\">\n                            <div className=\"sub-menu-header pointer\" onClick={this.handleClick}>Образовательные программы</div>\n                            <ul className=\"sub-menu-list\">\n                                <li><Link to=\"/articles/368\">Бакалавриат - ОП \"ПМиИ\"</Link></li>\n                                <li><Link to=\"/articles/398\">Магистратура - ОП \"ПМиИ\"</Link></li>\n                                <li><Link to=\"/articles/369\">Бакалавриат - ОП \"Психология\"</Link></li>\n                                <li><Link to=\"/articles/385\">Магистратура - ОП \"Психология\"</Link></li>\n                                <li><Link to=\"/program-bachelor-riso\">Бакалавриат - ОП \"РиСО\"</Link></li>\n                                <li><Link to=\"/program-master-riso\">МАГИСТРАТУРА - ОП \"РИСО\"</Link></li>\n                                <li><Link to=\"/program-bachelor-philology\">Бакалавриат - ОП \"Филология\"</Link></li>\n                                <li><Link to=\"/program-master-philology\">МАГИСТРАТУРА - ОП \"ФИЛОЛОГИЯ\"</Link></li>\n                                <li><Link to=\"/program-bachelor-management\">БАКАЛАВРИАТ - ОП \"МЕНЕДЖМЕНТ\"</Link></li>\n                                <li><Link to=\"/program-master-management\">МАГИСТРАТУРА - ОП \"МЕНЕДЖМЕНТ\"</Link></li>\n                                <li><Link to=\"/program-master-teacher-education\">МАГИСТРАТУРА - ОП \"ПЕДАГОГИЧЕСКОЕ ОБРАЗОВАНИЕ\"</Link></li>\n                            </ul>\n                        </li>\n                    </ul>\n                </li>\n                <li className=\"sub-menu\">\n                    <div className=\"sub-menu-header pointer\" onClick={this.handleClick}>Информация для поступающих</div>\n                    <ul className=\"sub-menu-list\">\n                        <li><Link to=\"/enrollee\">Бакалавриат</Link></li>\n                        <li><Link to=\"/enrollee-master\">Магистратура</Link></li>\n                        <li><Link to=\"/exercises\">Варианты экзаменов прошлых лет</Link></li>\n                    </ul>\n                </li>\n                <li className=\"sub-menu\">\n                    <div className=\"sub-menu-header pointer\" onClick={this.handleClick}>Центр тестирования</div>\n                    <ul className=\"sub-menu-list\">\n                        <li><Link to=\"/test-center-about\">О центре</Link></li>\n                        <li><Link to=\"/test-center-normative-documents\">Нормативная документация</Link></li>\n                        <li><Link to=\"/test-center-registration\">Регистрация</Link></li>\n                        <li><Link to=\"/test-center-payment\">Оплата</Link></li>\n                        <li><Link to=\"/test-center-preparation\">Подготовка к тестированию</Link></li>\n                        <li><a href=\"http://centr.msu.uz\">Проверка сертификата (верификация)</a></li>\n                    </ul>\n                </li>\n                <li><Link to=\"/courses\">Подготовительные курсы</Link></li>\n                <li><Link to=\"/school\">Работа со школьниками</Link></li>\n                <li><Link to=\"/struct\">Цели филиала</Link></li>\n                <li><Link to=\"/schedule\">Расписание занятий</Link></li>\n                <li><Link to=\"/educational\">Учебный отдел</Link></li>\n                <li><Link to=\"/science\">Научная деятельность</Link></li>\n                <li><Link to=\"/conferences\">Научно-практические конференции, семинары и вебинары</Link></li>\n                <li><Link to=\"/educationalwork\">Воспитательная работа</Link></li>\n                <li><Link to=\"/edplans\">Учебные планы</Link></li>\n                <li><Link to=\"/resources\">Информационные ресурсы</Link></li>\n                <li><Link to=\"/union\">Союз молодежи Узбекистана</Link></li>\n                <li><Link to=\"/student-council\">Студенческий совет</Link></li>\n                <li><Link to=\"/graduates\">Выпускники</Link></li>\n                <li><Link to=\"/financial-activity\">Финансовая деятельность</Link></li>\n                <li><Link to=\"/contacts\">Контакты</Link></li>\n            </>\n        );\n    }\n}","import React from 'react';\nimport {List} from 'react-content-loader';\n\nexport default class ListPlaceholder extends React.Component {\n    render() {\n        const number = this.props.number || 5;\n        let list = [];\n\n        for (let i = 0; i < number; i++) {\n            list.push(<List key={i} className=\"mt-2 mb-2\"/>)\n        }\n\n        return (\n            <>\n                {list}\n            </>\n        );\n    }\n}","import React from \"react\";\nimport axios, {get} from \"axios\";\nimport format from \"date-format\";\nimport {withRouter} from \"react-router-dom\";\n\nlet properties = [\"id\", \"previewText\", \"title\", \"slug\", \"publishedAt\", \"previewImage\", \"language\"];\nproperties = \"properties[]=\" + properties.join(\"&properties[]=\");\n\nexport function withArticleListSource(Component) {\n    const ArticleSourceList = class extends React.Component {\n        constructor(props) {\n            super(props);\n\n            this.state = {\n                page: this.getParam(\"page\", 1),\n                articles: [],\n                totalItems: 0,\n                error: null\n            };\n        }\n\n        getParam(paramName, defaultValue) {\n            let paramValue = this.props[paramName] || defaultValue;\n            if (this.props.match) {\n                paramValue = this.props.match.params[paramName] || paramValue;\n            }\n            return paramValue;\n        }\n\n        componentDidMount() {\n            this._isMounted = true;\n            this.getArticles(this.state.page);\n        }\n\n        componentDidUpdate(prevProps, prevState, snapshot) {\n            const page = this.getParam(\"page\");\n            if (page && this.state.page !== page) {\n                this.setState({page: page, articles: []});\n                this.getArticles(page);\n            }\n        }\n\n        componentWillUnmount() {\n            this._isMounted = false;\n            this.cancelSource.cancel();\n        }\n\n        getArticles(page) {\n            const limit = this.props.limit || 10;\n            const partial = this.props.partial || \"true\";\n            const tag = this.getParam(\"tag\");\n\n            if (this.cancelSource) {\n                this.cancelSource.cancel();\n            }\n\n            this.cancelSource = axios.CancelToken.source();\n\n            get(`/tags/${tag}/articles?page=${page}&${properties}&partial=${partial}`, {\n                cancelToken: this.cancelSource.token\n            })\n                .then(\n                    result => {\n                        if (this._isMounted) {\n                            this.setState({\n                                articles: result.data[\"hydra:member\"].slice(0, limit),\n                                totalItems: result.data[\"hydra:totalItems\"] || 0,\n                                error: null\n                            });\n                        }\n                    },\n                    err => {\n                        if (this._isMounted) {\n                            this.setState({\n                                articles: [],\n                                error: err\n                            });\n                        }\n                    }\n                );\n        }\n\n        render() {\n            return <Component\n                tag={this.getParam('tag')}\n                page={this.state.page}\n                history={this.props.history}\n                articles={this.state.articles}\n                totalItems={this.state.totalItems}\n                error={this.state.error}/>\n        }\n    }\n\n    return withRouter(ArticleSourceList);\n}\n\nexport function withArticleSource(Component) {\n    return class extends React.Component {\n        constructor(props) {\n            super(props);\n\n            this.state = {\n                article: {},\n                error: null\n            };\n\n            this.getLastArticle = this.getLastArticle.bind(this);\n            this.getNextArticle = this.getNextArticle.bind(this);\n            this.getPrevArticle = this.getPrevArticle.bind(this);\n        }\n\n        getLastArticle() {\n            this.cancelSource = axios.CancelToken.source();\n\n            get(`/tags/${this.props.tag}/articles?&page=1&${properties}&partial=true`, {\n                cancelToken: this.cancelSource.token\n            })\n                .then(\n                    result => {\n                        if (this._isMounted) {\n                            this.setState({\n                                article: result.data[\"hydra:member\"].length > 0 ? result.data[\"hydra:member\"][0] : {}\n                            });\n                        }\n                    },\n                    err => {\n                        if (this._isMounted) {\n                            this.setState({\n                                article: {},\n                                error: err\n                            });\n                        }\n                    }\n                );\n        }\n\n        getNextArticle() {\n            this.getArticleByDirection(\"strictly_after\");\n        }\n\n        getPrevArticle() {\n            this.getArticleByDirection(\"strictly_before\");\n        }\n\n        getArticleByDirection(direction) {\n            if (!this.state.article.publishedAt) {\n                return;\n            }\n\n            const date = format(\"yyyy-MM-dd\", new Date(this.state.article.publishedAt));\n\n            if (this.cancelSource) {\n                this.cancelSource.cancel();\n            }\n            this.cancelSource = axios.CancelToken.source();\n\n            get(`/tags/${this.props.tag}/articles?${properties}&publishedAt[${direction}]=${date}&partial=true`, {\n                cancelToken: this.cancelSource.token\n            })\n                .then(\n                    result => {\n                        if (this._isMounted && result.data[\"hydra:member\"].length > 0) {\n                            let index = direction === \"strictly_before\" ? 0 : result.data[\"hydra:member\"].length - 1;\n                            this.setState({\n                                article: result.data[\"hydra:member\"][index],\n                                error: null\n                            });\n                        }\n                    },\n                    err => {\n                        if (this._isMounted) {\n                            this.setState({\n                                article: {},\n                                error: err\n                            });\n                        }\n                    }\n                );\n        }\n\n        componentDidMount() {\n            this._isMounted = true;\n            this.getLastArticle();\n        }\n\n        componentWillUnmount() {\n            this._isMounted = false;\n            this.cancelSource.cancel();\n        }\n\n        render() {\n            return <Component\n                article={this.state.article}\n                error={this.state.error}\n                getNextArticle={this.getNextArticle}\n                getPrevArticle={this.getPrevArticle}/>\n        }\n    }\n}","import React from 'react';\nimport {Link} from 'react-router-dom';\nimport ListPlaceholder from \"./ListPlaceholder\";\nimport {withArticleSource} from \"./ArticleSource\";\nimport {CSSTransition, SwitchTransition} from \"react-transition-group\";\n\nclass Calendar extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {transitionClassName: \"fade-right\"};\n    }\n\n    monthName() {\n        if (!this.props.article.publishedAt) {\n            return \"\";\n        }\n\n        let date = new Date(this.props.article.publishedAt);\n        date = date.toLocaleString(\"ru-RU\", {month: \"long\"}) + ' ' + date.getFullYear();\n\n        return date.charAt(0).toUpperCase() + date.substr(1);\n    }\n\n    render() {\n        const {article} = this.props;\n\n        return (\n            <div className=\"calendar\">\n                <div className=\"calendar-head\">Календарь конференций</div>\n\n                <div className=\"calendar-tab\">\n                    <ul id=\"calendar-tab-head\" className=\"calendar-tab-head\">\n                        <li className=\"calendar-tab-head_act arrow-date arrow-date\">\n                            {this.monthName()}\n                        </li>\n                    </ul>\n\n                    <div id=\"calendar-tab-content\" className=\"calendar-tab-content\">\n                        <div className=\"calendar-tab-item calendar-tab-item_act\">\n                            <SwitchTransition mode=\"out-in\">\n                                <CSSTransition\n                                    key={article.title ? article.title : \"placeholder\"}\n                                    addEndListener={(node, done) => {\n                                        node.addEventListener(\"transitionend\", done, false);\n                                    }}\n                                    classNames={this.state.transitionClassName}>\n                                    <div className=\"wrap-calendar-tab-event\">\n                                        <Link to={`/articles/${this.props.article.slug}`}\n                                              className=\"calendar-tab-event-date arrow-title\">\n                                            {article.title}\n                                        </Link>\n                                        {Object.keys(article).length === 0 &&\n                                        <ListPlaceholder number={1}/>\n                                        }\n                                        <p className=\"calendar-tab-event-text arrow-text\">{this.props.article.previewText}</p>\n                                    </div>\n                                </CSSTransition>\n                            </SwitchTransition>\n                        </div>\n                    </div>\n\n                    <div className=\"pointer calendar-tab-next arrow\"\n                         onClick={() => {\n                             this.props.getNextArticle();\n                             this.setState({transitionClassName: \"fade-right\"})\n                         }}/>\n                    <div className=\"pointer calendar-tab-prev arrow\"\n                         onClick={() => {\n                             this.props.getPrevArticle();\n                             this.setState({transitionClassName: \"fade-left\"})\n                         }}/>\n                </div>\n\n                <Link to=\"/tags/Календарь/1\" className=\"btn btn-msu\">Все конференции</Link>\n            </div>\n        );\n    }\n}\n\nexport default withArticleSource(Calendar);","import React from 'react';\nimport RectorImage from \"./RectorImage\";\nimport Logo from \"./Logo\";\nimport LeftMenuList from \"./LeftMenuList\";\nimport Calendar from \"./Calendar\";\n\nexport default class LeftAside extends React.Component {\n    render() {\n        return (\n            <aside className=\"aside-left\">\n                {!localStorage.getItem(\"poor_vision\") &&\n                <Logo/>\n                }\n                <nav>\n                    <ul className=\"menu-left\">\n                        <LeftMenuList/>\n                    </ul>\n                </nav>\n                <RectorImage/>\n                {localStorage.getItem(\"poor_vision\") &&\n                <Calendar tag=\"Календарь\"/>\n                }\n            </aside>\n        );\n    }\n}","import React from 'react';\n\nexport default class Error extends React.Component {\n    render() {\n        const error = this.props.error;\n        return (\n            <div className=\"section-main\">\n                <div className=\"d-flex justify-content-center\">\n                    <h1>\n                        <strong>\n                            {error !== undefined &&\n                                <p>Произошла ошибка {error.status}</p>\n                            }\n                            {error === undefined &&\n                                <p>Ошибка! Кажется что-то пошло не так. Попробуйте позже.</p>\n                            }\n                        </strong>\n                    </h1>\n                </div>\n            </div>\n        );\n    }\n}","import axios, {post} from 'axios';\n\nconst role = {\n    admin: 'ROLE_ADMIN',\n    user: 'ROLE_USER'\n};\n\nexport const authService = {\n    login,\n    logout,\n    isGranted,\n    isAdmin,\n    isUser,\n    tokenHeader,\n    isLogged,\n    role\n};\n\nfunction login(username, password) {\n    return post('/login', {\n        username: username,\n        password: password\n    })\n        .then(\n            res => {\n                let roles = {};\n                res.data.roles.map(r => roles[r] = true);\n\n                const user = {\n                    token: res.data.token,\n                    roles: roles\n                };\n                localStorage.setItem(\"user\", JSON.stringify(user));\n\n                axios.defaults.headers.common['Authorization'] = `Bearer ${user.token}`;\n\n                return user;\n            }\n        );\n}\n\nfunction logout() {\n    delete axios.defaults.headers.common['Authorization'];\n    localStorage.removeItem(\"user\");\n}\n\nfunction isLogged() {\n    return Boolean(localStorage.getItem(\"user\"));\n}\n\nfunction isAdmin() {\n    return isGranted(role.admin);\n}\n\nfunction isUser() {\n    return isGranted(role.user);\n}\n\nfunction isGranted(role) {\n    const user = JSON.parse(localStorage.getItem(\"user\"));\n    if (!user) {\n        return false;\n    }\n\n    return user.roles && user.roles[role];\n}\n\nfunction tokenHeader() {\n    const token = getToken();\n    return token ? 'Bearer ' + token : '';\n}\n\nfunction getToken() {\n    const user = JSON.parse(localStorage.getItem(\"user\"));\n    if (user) {\n        return user.token ? user.token : '';\n    }\n\n    return '';\n}\n","import React from \"react\";\nimport {withRouter} from \"react-router-dom\";\nimport axios from \"axios\";\n\nclass DeleteButton extends React.Component {\n    constructor(props) {\n        super(props);\n\n        this.handleDelete = this.handleDelete.bind(this);\n    }\n\n    handleDelete() {\n        if (window.confirm(\"Вы уверены, что хотите удалить эту страницу?\")) {\n            axios.delete(`/articles/${this.props.article.id}`)\n                .then(\n                    () => {\n                        alert(\"Страница успешно удалена\");\n                        this.props.history.push(\"/\");\n                    },\n                    () => {\n                        alert(\"Ошибка! Не удалось удалить страницу.\");\n                    }\n                )\n        }\n    }\n\n    render() {\n        return (\n            <button className=\"btn btn-danger btn-sm ml-2\" onClick={this.handleDelete}>\n                Удалить страницу\n            </button>\n        );\n    }\n}\n\nexport default withRouter(DeleteButton);","import React from 'react';\nimport {Link, withRouter} from 'react-router-dom';\n\nclass EditButton extends React.Component {\n    render() {\n        return (\n            <Link to={`/admin/articles/${this.props.article.id}`}>\n                <button className=\"btn btn-info btn-sm\">Редактировать страницу</button>\n            </Link>\n        );\n    }\n}\n\nexport default withRouter(EditButton);","import React from 'react';\nimport {authService} from \"../../authService\";\nimport DeleteButton from \"./DeleteButton\";\nimport EditButton from \"./EditButton\";\n\nexport default class ControlButtons extends React.Component {\n    render() {\n        return (\n            <>\n                {authService.isAdmin() &&\n                <div className=\"mt-4\">\n                    <EditButton article={this.props.article}/>\n                    <DeleteButton article={this.props.article}/>\n                </div>\n                }\n            </>\n        )\n    }\n}\n","import React from \"react\";\nimport {withRouter} from \"react-router-dom\";\nimport axios, {get} from \"axios\";\nimport ListPlaceholder from \"./ListPlaceholder\";\nimport Error from \"./Error\";\nimport ControlButtons from \"./admin/ControlButtons\";\n\nclass Article extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            error: null,\n            article: null\n        };\n    }\n\n    componentDidMount() {\n        this._isMounted = true;\n        this.fetchData(this.props.match.params.route);\n    }\n\n    componentDidUpdate(prevProps, prevState, nextContext) {\n        if (this.props.location.pathname !== prevProps.location.pathname) {\n            this.cancelSource.cancel();\n            this.setState({\n                error: null,\n                article: null\n            });\n            this.fetchData(this.props.match.params.route);\n        }\n    }\n\n    componentWillUnmount() {\n        this._isMounted = false;\n        this.cancelSource.cancel();\n    }\n\n    fetchData(route) {\n        route = route || this.props.match.params.id;\n        let url;\n\n        if (!isNaN(parseFloat(route)) && isFinite(route)) {\n            url = `articles/${route}`;\n        } else {\n            url = `articles/slug/${route}`;\n        }\n\n        this.cancelSource = axios.CancelToken.source();\n\n        get(url, {cancelToken: this.cancelSource.token})\n            .then(\n                res => {\n                    if (this._isMounted) {\n                        let article = res.data;\n                        document.title = article.title;\n\n                        this.setState({\n                            article: article,\n                            error: null\n                        });\n                    }\n                },\n                err => {\n                    if (this._isMounted) {\n                        this.setState({\n                            error: err.response,\n                            article: null\n                        });\n                    }\n                }\n            );\n    }\n\n    render() {\n        const {error, article} = this.state;\n\n        if (error) {\n            return <Error error={error}/>;\n        } else if (article === null) {\n            return (\n                <div className=\"section-main\">\n                    <ListPlaceholder number={4}/>\n                </div>\n            );\n        } else {\n            return (\n                <article className=\"section-main\">\n                    <h1 className=\"event-title\">{article.title}</h1>\n                    <div dangerouslySetInnerHTML={{__html: article.text}}/>\n                    <ControlButtons article={article}/>\n                </article>\n            );\n        }\n    }\n}\n\nexport default withRouter(Article);","import React from 'react';\n\nexport default class ValidationError extends React.Component {\n    render() {\n        return (\n            <div className=\"text-danger mb-3 mt-1\">\n                {this.props.error}\n            </div>\n        );\n    }\n}","import React from 'react';\n\nexport default class Spinner extends React.Component {\n    render() {\n        return (\n            <div className=\"d-flex mt-5\">\n                <div className=\"mx-auto spinner-border text-success\" role=\"status\">\n                    <span className=\"sr-only\">Loading...</span>\n                </div>\n            </div>\n        );\n    }\n}","import React from \"react\";\nimport ValidationError from \"./ValidationError\";\nimport {post} from \"axios\";\nimport {Link} from \"react-router-dom\";\nimport Spinner from \"./Spinner\";\nimport ReCAPTCHA from \"react-google-recaptcha\";\n\nconst recaptchaRef = React.createRef();\n\nexport default class AppealForm extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            isSuccessfullySend: false,\n            isFormDisabled: false,\n            validationErrors: {},\n            appeal: {\n                fullName: '',\n                phone: '',\n                address: '',\n                birthYear: '',\n                email: '',\n                personType: 'Физическое лицо',\n                message: '',\n                organization: ''\n            },\n            file: {\n                name: '',\n                type: '',\n                size: 0,\n                id: ''\n            }\n        };\n\n        this.handleSubmit = this.handleSubmit.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.captchaChange = this.captchaChange.bind(this);\n    }\n\n    componentDidMount() {\n        document.title = 'Электронная приемная';\n    }\n\n    captchaChange() {\n        let error = {...this.state.validationErrors};\n        if (error[\"gRecaptchaResponse\"] !== undefined) {\n            delete error[\"gRecaptchaResponse\"];\n            this.setState({error: error});\n        }\n    }\n\n    handleChange(e) {\n        e.preventDefault();\n\n        const inputName = e.target.getAttribute('name');\n        let appeal = {...this.state.appeal};\n        appeal[inputName] = e.target.value;\n\n        if (this.state.validationErrors[inputName] !== undefined) {\n            let errors = {...this.state.validationErrors};\n            delete errors[inputName];\n            this.setState({\n                validationErrors: errors,\n                appeal: appeal\n            });\n        } else {\n            this.setState({appeal: appeal});\n        }\n    }\n\n    uploadFormData() {\n        let appeal = {...this.state.appeal};\n        appeal.birthYear = +appeal.birthYear;\n\n        if (isNaN(appeal.birthYear)) {\n            appeal.birthYear = 0;\n        }\n\n        if (this.state.file && this.state.file.id) {\n            appeal.mediaObject = this.state.file.id;\n        }\n\n        appeal.gRecaptchaResponse = recaptchaRef.current.getValue();\n        appeal.department = `/api/departments/${this.props.department}`;\n\n        post(\"/appeals\", appeal)\n            .then(\n                () => {\n                    this.setState({\n                        isSuccessfullySend: true,\n                        isFormDisabled: false\n                    });\n                },\n                err => {\n                    let errors = {};\n\n                    if (err.response && err.response.data.violations) {\n                        err.response.data.violations.map(v => errors[v.propertyPath] = v.message);\n                    }\n                    errors[\"unknown\"] = \"Во время обращения к серверу произошла ошибка! Проверьте корректность введенных данных.\";\n\n                    this.setState({\n                        isFormDisabled: false,\n                        validationErrors: errors\n                    });\n                }\n            );\n    }\n\n    handleSubmit(e) {\n        e.preventDefault();\n\n        this.setState({isFormDisabled: true, validationErrors: {}});\n\n        const files = document.querySelector('input[name=\"appealFile\"]').files;\n        const lastFile = {...this.state.file};\n\n        if (\n            files.length > 0\n            && (files[0].size !== lastFile.size\n            || files[0].name !== lastFile.name\n            || files[0].type !== lastFile.type)\n        ) {\n            const formData = new FormData();\n            formData.append(\"file\", files[0]);\n            post(\"/media_objects\", formData, {\n                headers: {\n                    \"Content-Type\": \"multipart/form-data\"\n                }\n            })\n                .then(\n                    res => {\n                        let file = files[0];\n                        file.id = res.data[\"@id\"];\n                        this.setState({file: files[0]});\n                        this.uploadFormData();\n                    },\n                    () => {\n                        this.setState({\n                            isFormDisabled: false,\n                            validationErrors: {\n                                \"appealFile\": \"Не удалось загрузить файл\"\n                            }\n                        })\n                    }\n                );\n        } else {\n            this.uploadFormData();\n        }\n    }\n\n    render() {\n        if (!this.state.isSuccessfullySend) {\n            return (\n                <div className=\"section-main\">\n                    <h1>Электронная приемная</h1>\n                    <div className=\"alert alert-info\">\n                        <p>\n                            Пожалуйста, перед тем, как задать вопрос, ознакомьтесь со списком <Link to=\"/faq\">часто задаваемых вопросов</Link>\n                        </p>\n                    </div>\n                    <fieldset disabled={this.state.isFormDisabled}>\n                        <form name=\"appeal\" className=\"form-group w-75\"\n                              onSubmit={this.handleSubmit}>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"fullName\">ФИО*</label>\n                            <input className=\"form-control\" type=\"text\" name=\"fullName\"\n                                   value={this.state.appeal.fullName}\n                                   onChange={this.handleChange}/>\n                            <ValidationError error={this.state.validationErrors.fullName}/>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"birthYear\">Год рождения*</label>\n                            <input className=\"form-control\" type=\"text\" name=\"birthYear\"\n                                   value={this.state.appeal.birthYear}\n                                   onChange={this.handleChange}/>\n                            <ValidationError error={this.state.validationErrors.birthYear}/>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"email\">Email*</label>\n                            <input className=\"form-control\" type=\"text\" name=\"email\"\n                                   value={this.state.appeal.email}\n                                   onChange={this.handleChange}/>\n                            <ValidationError error={this.state.validationErrors.email}/>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"address\">Адрес*</label>\n                            <input className=\"form-control\" type=\"text\" name=\"address\"\n                                   value={this.state.appeal.address}\n                                   onChange={this.handleChange}/>\n                            <ValidationError error={this.state.validationErrors.address}/>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"phone\">Номер телефона*</label>\n                            <input className=\"form-control\" type=\"text\" name=\"phone\"\n                                   value={this.state.appeal.phone}\n                                   onChange={this.handleChange}/>\n                            <ValidationError error={this.state.validationErrors.phone}/>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"personType\">Укажите кто вы*</label>\n                            <select className=\"form-control mb-3\" name=\"personType\" onChange={this.handleChange}>\n                                <option value=\"Физическое лицо\">Физическое лицо</option>\n                                <option value=\"Юридическое лицо\">Юридическое лицо</option>\n                                <option value=\"Абитуриент\">Абитуриент</option>\n                                <option value=\"Студент\">Студент</option>\n                                <option value=\"Выпускник\">Выпускник</option>\n                                <option value=\"Преподаватель\">Преподаватель</option>\n                                <option value=\"Сотрудник\">Сотрудник</option>\n                            </select>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"phone\">Название организации</label>\n                            <input className=\"form-control\" type=\"text\" name=\"organization\"\n                                   value={this.state.appeal.organization}\n                                   onChange={this.handleChange}/>\n                            <ValidationError error={this.state.validationErrors.organization}/>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"message\">Сообщение*</label>\n                            <textarea className=\"form-control\"\n\n                                      name=\"message\"\n                                      onChange={this.handleChange}/>\n                            <ValidationError error={this.state.validationErrors.message}/>\n\n                            <label className=\"font-weight-bold\" htmlFor=\"appealFile\">Прикрепить файл</label>\n                            <input className=\"form-control-file mb-5\"\n                                   type=\"file\"\n                                   name=\"appealFile\"/>\n                            <ValidationError error={this.state.validationErrors.appealFile}/>\n\n                            <ReCAPTCHA sitekey={process.env.REACT_APP_RECAPTCHA_KEY}\n                                       ref={recaptchaRef}\n                                       hl=\"ru\"\n                                       onChange={this.captchaChange}/>\n                            <ValidationError error={this.state.validationErrors.gRecaptchaResponse}/>\n\n                            <input className=\"event-btn btn btn-msu mt-4\"\n                                   type=\"submit\"\n                                   value=\"Отправить\"\n                                   onClick={this.handleSubmit}/>\n                        </form>\n                    </fieldset>\n\n                    <strong>Поля отмеченные * обязательны для заполнения</strong>\n\n                    <ValidationError error={this.state.validationErrors.unknown}/>\n\n                    {this.state.isFormDisabled && <Spinner/>}\n                </div>\n            );\n        } else {\n            return (\n                <div className=\"section-main\">\n                    <div className=\"alert alert-success\">\n                        <h1>\n                            <p>Ваше сообщение успешно отправлено. Спасибо за обращение!</p>\n                            <p>Ответ придет Вам на почту в ближайшее время.</p>\n                        </h1>\n                    </div>\n                </div>\n            );\n        }\n    }\n}","import React from \"react\";\n\nimport ContentLoader from \"react-content-loader\"\n\nexport default class ImagePlaceholder extends React.Component {\n    render() {\n        return (\n            <ContentLoader\n                speed={2}\n                width={500}\n                height={481}\n                viewBox=\"0 80 500 481\"\n                backgroundColor=\"#f3f3f3\"\n                foregroundColor=\"#ecebeb\"\n                {...this.props}\n            >\n                <rect x=\"0\" y=\"56\" rx=\"3\" ry=\"3\" width=\"500\" height=\"481\" />\n            </ContentLoader>\n        );\n    }\n}","import React from \"react\";\nimport Carousel from \"react-bootstrap/Carousel\";\nimport axios, {get} from \"axios\";\nimport ImagePlaceholder from \"./ImagePlaceholder\"\n\nconst MAX_IMAGE_IN_CAROUSEL = 4;\n\nexport class CarouselWrapper extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            items: []\n        };\n    }\n\n    componentDidMount() {\n        this.cancelSource = axios.CancelToken.source();\n        this._isMouted = true;\n\n        get('/preview_images?partial=true', {cancelToken: this.cancelSource.token})\n            .then(\n                res => {\n                    if (this._isMouted) {\n                        this.setState({\n                            items: res.data[\"hydra:member\"].slice(0, MAX_IMAGE_IN_CAROUSEL)\n                        });\n                    }\n                },\n                () => {}\n            )\n    }\n\n    componentWillUnmount() {\n        this._isMouted = false;\n        this.cancelSource.cancel();\n    }\n\n    render() {\n        const items = this.state.items;\n\n        return (\n            <div className=\"wrap-slider\">\n                {items.length === 0 &&\n                <ImagePlaceholder/>\n                }\n                <Carousel controls={false} interval={4000} keyboard={false}>\n                    {items.map((item, index) =>\n                        <Carousel.Item key={`carousel_${index}`}>\n                            <img\n                                className=\"d-block\"\n                                src={item.mediaObject.contentUrl}\n                                alt=\"Изображение новости\"\n                                width=\"500px\"\n                            />\n                        </Carousel.Item>\n                    )}\n                </Carousel>\n            </div>\n        );\n    }\n}","import React from 'react';\nimport {Link} from 'react-router-dom';\nimport format from 'date-format';\n\nexport default class NewsItem extends React.Component {\n    render() {\n        const news = this.props.news;\n\n        return (\n            <>\n                <div className=\"news-list-item\">\n                    <div className=\"news-list-tag-pane news-list-tag-dateonly\">\n                        <div className=\"news-list-item-date\">\n                            {news.language !== \"no\" &&\n                            <img src={\"/images/flags/\" + news.language + \".svg\"} className=\"news-list-flag\" alt=\"Language.\"/>\n                            }\n                            {format(\"MM/dd\", new Date(news.publishedAt))}\n                        </div>\n                    </div>\n\n                    <div className=\"news-list-item-head\">\n                        <Link to={`/articles/${news.slug}`}><b>{news.title}</b></Link>\n                    </div>\n\n                    {news.previewImage &&\n                    <div className=\"news-list-item-img\">\n                        <a href={news.previewImage.mediaObject.contentUrl}>\n                            <div style={{width: \"114px\"}}>\n                                <img src={news.previewImage.mediaObject.contentUrl} width=\"100%\" alt={this.props.news.title}/>\n                            </div>\n                        </a>\n                    </div>\n                    }\n\n                    <div className=\"news-list-item-text\">\n                        {this.props.news.previewText}\n                    </div>\n                </div>\n            </>\n        );\n    }\n}","import React from \"react\";\nimport {Link} from \"react-router-dom\";\nimport NewsItem from \"./NewsItem\";\nimport ListPlaceholder from './ListPlaceholder'\nimport {withArticleListSource} from \"./ArticleSource\";\n\nexport class News extends React.Component {\n    render() {\n        return (\n            <section className=\"section-news\">\n                <h2 className=\"font-weight-bold\">Новости</h2>\n                <div className=\"news-list\">\n                </div>\n                {this.props.articles.length === 0 &&\n                    <ListPlaceholder number={5}/>\n                }\n                {this.props.articles.map(item => <NewsItem news={item} key={`news_${item.slug}`}/>)}\n                <p>\n                    <Link to=\"/tags/Новости/1\"\n                          className=\"news-list-more\"\n                          title=\"Все новости\">\n                        Все новости\n                    </Link>\n                </p>\n            </section>\n        );\n    }\n}\n\nexport default withArticleListSource(News);","import React from 'react';\nimport {Link} from \"react-router-dom\";\nimport format from \"date-format\";\nimport ListPlaceholder from \"./ListPlaceholder\";\nimport {withArticleListSource} from \"./ArticleSource\";\n\nclass Ad extends React.Component {\n    render() {\n        return (\n            <section className=\"activity-pane\">\n                <h2>Объявления</h2>\n                {this.props.articles.length === 0 &&\n                    <ListPlaceholder number={5}/>\n                }\n                <ul>\n                    {this.props.articles.map(item =>\n                        <li key={item.slug}>\n                            <div className=\"activity-pane-date\">\n                                {format('yyyy/MM/dd', new Date(item.publishedAt))}\n                            </div>\n                            <div className=\"activity-pane-head\">\n                                <Link to={`/articles/${item.slug}`}>{item.title}</Link>\n                            </div>\n                            <div className=\"activity-pane-text\">\n                                <p>{item.previewText}</p>\n                            </div>\n                        </li>\n                    )}\n                </ul>\n                <Link to=\"/tags/Объявления/1\" className=\"activity-pane-more\">Все объявления</Link>\n            </section>\n        );\n    }\n}\n\nexport default withArticleListSource(Ad);","import React from 'react';\n\nexport default class Description extends React.Component {\n    render() {\n        return (\n            <article className=\"news-important description-block\">\n                <div className=\"news-important-img\">\n                    <img src=\"/images/build.png\" alt=\"Филиал МГУ\" />\n                        <div className=\"news-important-header\">\n                            <span style={{fontSize: \"16px\"}} title=\"Филиал МГУ\">Филиал МГУв городе Ташкенте</span>\n                        </div>\n                </div>\n                <div className=\"news-important-header news-important-header_mobile\">\n                    <span title=\"Филиал МГУ\">Филиал МГУ в городе Ташкенте<br/></span>\n                </div>\n                <div className=\"news-important-text\">\n                    Ташкентский филиал МГУ создан в 2006 году, это учебное заведение сегодня является ведущим центром\n                    подготовки специалистов в области математики, информатики и психологии для нужд Узбекистана.<br/><br/>\n                    Образовательный процесс организован в соответствии с принятыми в Московском государственном\n                    университете стандартами, а это обеспечивает подготовку высококвалифицированных специалистов.\n                </div>\n                <br/>\n            </article>\n        );\n    }\n}","import React from \"react\";\nimport {Link} from \"react-router-dom\";\nimport ListPlaceholder from \"./ListPlaceholder\";\nimport {withArticleSource} from \"./ArticleSource\";\nimport {CSSTransition, SwitchTransition} from \"react-transition-group\";\n\nclass Congratulation extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {transitionClassName: \"fade-right\"};\n    }\n\n    render() {\n        const {article} = this.props;\n\n        return (\n            <article className=\"thanks-pane\">\n                <h2>Поздравления</h2>\n\n                {Object.keys(article).length === 0 &&\n                <ListPlaceholder number={1}/>\n                }\n\n                {Object.keys(article).length > 0 &&\n                <div className=\"wrap-thanks-list\">\n                    <div className=\"thanks-list\">\n                        <SwitchTransition mode=\"out-in\">\n                            <CSSTransition\n                                key={article.title ? article.title : \"placeholder\"}\n                                addEndListener={(node, done) => {\n                                    node.addEventListener(\"transitionend\", done, false);\n                                }}\n                                classNames={this.state.transitionClassName}\n                            >\n                                <div className=\"thanks-list_act\">\n                                    <div className=\"thanks-list-head\" id=\"thanks-head\">\n                                        <Link to={`/articles/${article.slug}`}\n                                              className=\"arrow-title\">\n                                            {article.title}\n                                        </Link>\n                                    </div>\n                                    <div className=\"thanks-list-text arrow-text\" id=\"thanks-text\">\n                                        {article.previewText}\n                                    </div>\n                                </div>\n                            </CSSTransition>\n                        </SwitchTransition>\n                    </div>\n\n                    <div className=\"pointer thanks-list-next arrow\"\n                         onClick={() => {\n                             this.props.getNextArticle();\n                             this.setState({transitionClassName: \"fade-right\"})\n                         }}/>\n                    <div className=\"pointer thanks-list-prev arrow\"\n                         onClick={() => {\n                             this.props.getPrevArticle();\n                             this.setState({transitionClassName: \"fade-left\"})\n                         }}/>\n                </div>\n                }\n            </article>\n        );\n    }\n}\n\nexport default withArticleSource(Congratulation);","import React from 'react';\nimport {Link} from \"react-router-dom\";\nimport Calendar from \"./Calendar\";\nimport Ad from \"./Ad\";\nimport Description from \"./Description\";\nimport Congratulation from \"./Congratulation\";\n\nexport default class RightAside extends React.Component {\n    render() {\n        return (\n            <aside className=\"aside-right\">\n                <div className=\"contacts-block\">\n                    <Calendar tag=\"Календарь\"/>\n                    <div className=\"ref-pane\">\n                        <Link to=\"/contacts\" className=\"btn site-btn btn-msu\" id=\"desk\">Контакты</Link>\n                        <br/> <br/>\n                        <Link to=\"/reception\"\n                              className=\"btn site-btn btn-msu\"\n                              id=\"desk\">Электронная<br/> приемная</Link>\n                    </div>\n                    <div className=\"address-pane\">\n                        <span><Link to=\"/contacts\">Адрес филиала МГУ имени М.В.Ломоносова на карте</Link></span>\n                    </div>\n                </div>\n                <Ad tag=\"Объявления\" limit={5}/>\n                <Congratulation tag=\"Поздравления\"/>\n                <Description/>\n            </aside>\n        );\n    }\n}","import React from \"react\";\nimport {CarouselWrapper} from \"./CarouselWrapper\";\nimport News from \"./News\";\nimport RightAside from \"./RightAside\";\nimport {isMobile} from \"react-device-detect\";\n\nexport default class Home extends React.Component {\n    componentDidMount() {\n        document.title = \"Филиал Московского Государственного Университета имени М.В.Ломоносова в городе Ташкенте\";\n    }\n\n    render() {\n        if (localStorage.getItem(\"poor_vision\")) {\n            return (\n                <>\n                    <News tag=\"Новости\" limit={7}/>\n                    <RightAside/>\n                </>\n            );\n        } else if (isMobile) {\n            return (\n                <>\n                    <CarouselWrapper/>\n                    <News tag=\"Новости\" limit={7}/>\n                    <RightAside/>\n                </>\n            );\n        } else {\n            return (\n                <>\n                    <CarouselWrapper/>\n                    <RightAside/>\n                    <News tag=\"Новости\" limit={7}/>\n                </>\n            );\n        }\n    }\n}","import React from 'react';\n\nexport default class Pagination extends React.Component {\n    getPaginationArray() {\n        let nPage = Math.ceil(this.props.totalItems / 10);\n\n        let pagination = [this.props.selected];\n\n        if (this.props.selected + 1 <= nPage) {\n            pagination.push(this.props.selected + 1);\n\n            if (this.props.selected + 1 !== nPage) {\n                pagination.push(\"...\");\n                pagination.push(nPage);\n            }\n        }\n\n        if (this.props.selected - 1 >= 1) {\n            pagination.unshift(this.props.selected - 1);\n            if (this.props.selected - 1 !== 1) {\n                pagination.unshift(\"...\");\n                pagination.unshift(1);\n            }\n        }\n\n        return pagination;\n    }\n\n    renderListItem(val, index) {\n        if (val === \"...\") {\n            return <li key={index}>...</li>\n        } else if (val === this.props.selected) {\n            return <li key={index} className=\"pagination-act\">{val}</li>;\n        } else {\n            return <li key={index} data-pagination={val} onClick={this.props.handlePaginationClick}>{val}</li>;\n        }\n    }\n\n    render() {\n        if (!this.props.totalItems) {\n            return <></>\n        }\n\n        const pagination = this.getPaginationArray();\n\n        return (\n            <ul className=\"pagination\">\n                {pagination.map((val, index) =>\n                    this.renderListItem(val, index)\n                )}\n            </ul>\n        );\n    }\n}","import React from \"react\";\nimport {Link} from 'react-router-dom';\nimport format from 'date-format';\nimport ListPlaceholder from \"./ListPlaceholder\";\nimport Pagination from './Pagination';\nimport Error from \"./Error\";\nimport ControlButtons from \"./admin/ControlButtons\";\nimport {withArticleListSource} from \"./ArticleSource\";\n\nclass ArticleList extends React.Component {\n    constructor(props) {\n        super(props);\n        this.handlePaginationClick = this.handlePaginationClick.bind(this);\n    }\n\n    handlePaginationClick(e) {\n        const page = +e.target.dataset.pagination;\n        this.props.history.push(`/tags/${this.props.tag}/${page}`);\n    }\n\n    render() {\n        if (this.props.error) {\n            return <Error err={this.props.error}/>\n        }\n\n        return (\n            <div className=\"section-main\">\n                <h1 className=\"event-title\">{this.props.tag}</h1>\n\n                {this.props.articles.length === 0 &&\n                <ListPlaceholder number={3}/>\n                }\n\n                {this.props.articles.map(item =>\n                    <div className=\"news-list-item mb-2\" key={item.id}>\n                        <div className=\"news-list-tag-pane news-list-tag-dateonly\" style={{width: \"100px\", margin: 0}}>\n                            <div className=\"news-list-item-date\">\n                                {format('yyyy/MM/dd', new Date(item.publishedAt))}\n                            </div>\n                        </div>\n\n                        <div className=\"news-list-item-head ml-5\">\n                            <Link to={`/articles/${item.slug}`} className=\"font-weight-bold\">\n                                {item.title}\n                            </Link>\n                        </div>\n\n                        <div className=\"news-list-item-img\">\n                            {item.previewImage &&\n                            <div style={{\"width\": \"114px\"}}>\n                                <img src={item.previewImage.mediaObject.contentUrl} alt={item.title} className=\"w-100\"/>\n                            </div>\n                            }\n                        </div>\n\n                        <div className=\"news-list-item-text mb-2\">\n                            {item.previewText}\n                        </div>\n                        <ControlButtons article={item}/>\n                    </div>\n                )}\n\n                {this.props.totalItems > 0 &&\n                <Pagination\n                    totalItems={+this.props.totalItems}\n                    selected={+this.props.page}\n                    handlePaginationClick={this.handlePaginationClick}/>\n                }\n            </div>\n        );\n    }\n}\n\nexport default withArticleListSource(ArticleList);\n\n","import React from \"react\";\nimport {Redirect, withRouter} from \"react-router-dom\";\nimport ValidationError from \"../ValidationError\";\nimport {authService} from \"../../authService\";\n\nclass Login extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            successfulLogin: false,\n            isFormDisabled: false,\n            error: null,\n            user: {\n                username: \"\",\n                password: \"\"\n            }\n        };\n        this.handleSubmit = this.handleSubmit.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n    }\n\n    handleChange(e) {\n        let user = {...this.state.user};\n        const inputName = e.target.getAttribute(\"name\");\n        user[inputName] = e.target.value;\n        this.setState({user: user, error: null});\n    }\n\n    handleSubmit(e) {\n        e.preventDefault();\n\n        this.setState({\n            isFormDisabled: true,\n            error: null,\n            successfulLogin: true\n        });\n\n        authService.login(this.state.user.username, this.state.user.password)\n            .then(\n                () => {\n                    this.setState({isFormDisabled: false});\n                },\n                err => {\n                    this.setState({isFormDisabled: false, error: err});\n                }\n            )\n    }\n\n    render() {\n        if (authService.isLogged()) {\n            return authService.isAdmin() ?\n                <Redirect to=\"/admin/articles\"/> : <Redirect to=\"/\"/>;\n        }\n\n        const user = this.state.user;\n\n        return (\n            <div className=\"section-main\">\n                <h2>Авторизация</h2>\n                <fieldset disabled={this.state.isFormDisabled}>\n                    <form id=\"login\" className=\"form-group w-25\">\n                        <label htmlFor=\"username\">Имя пользователя</label>\n                        <input type=\"text\"\n                               className=\"form-control\"\n                               name=\"username\"\n                               value={user.username}\n                               onChange={this.handleChange}/>\n\n                        <label htmlFor=\"username\" className=\"mt-2\">Пароль</label>\n                        <input type=\"password\"\n                               className=\"form-control\"\n                               name=\"password\"\n                               value={user.password}\n                               onChange={this.handleChange}/>\n\n                        {this.state.error &&\n                        <ValidationError error={\"Неверный логин или пароль\"}/>\n                        }\n\n                        <input className=\"event-btn btn-msu btn mt-2\"\n                               type=\"submit\"\n                               value=\"Войти\"\n                               onClick={this.handleSubmit}/>\n                    </form>\n                </fieldset>\n            </div>\n        );\n    }\n}\n\nexport default withRouter(Login);","import React from 'react';\nimport {CopyToClipboard} from \"react-copy-to-clipboard\";\nimport {Link} from 'react-router-dom';\n\nexport default class LinkButtons extends React.Component {\n    render() {\n        const article = this.props.article;\n        return (\n            <>\n                {Object.keys(article).length > 0 &&\n                <>\n                    {article.id &&\n                    <div>\n                        <button className=\"btn btn-info btn-sm mt-1 d-block\">\n                            <Link to=\"/admin/articles\" className=\"without-a\">Создать новую страницу</Link>\n                        </button>\n\n                        <CopyToClipboard text={`https://msu.uz/articles/${article.id}`}>\n                            <button className=\"btn btn-info btn-sm mt-1 mr-2\">\n                                Скопировать ссылку\n                            </button>\n                        </CopyToClipboard>\n                        <Link to={`/articles/${article.id}`}>https://msu.uz/articles/{article.id}</Link>\n                    </div>\n                    }\n                    {article.slug &&\n                    <div>\n                        <CopyToClipboard text={`https://msu.uz/articles/${article.slug}`}>\n                            <button className=\"btn btn-info btn-sm mt-1 mr-2\">\n                                Скопировать ссылку\n                            </button>\n                        </CopyToClipboard>\n                        <Link to={`/articles/${article.slug}`}>https://msu.uz/articles/{article.slug}</Link>\n                    </div>\n                    }\n                </>\n                }\n            </>\n        );\n    }\n}","import React from 'react';\nimport {get} from \"axios\";\n\nexport default class Tags extends React.Component {\n    constructor(props) {\n        super(props);\n        let selected = {};\n        if (this.props.selected) {\n            this.props.selected.forEach(s => selected[s.name] = true);\n        }\n        this.state = {\n            tags: [],\n            selected: selected\n        };\n    }\n\n    componentDidMount() {\n        get('tags')\n            .then(res => this.setState({tags: res.data[\"hydra:member\"]}));\n    }\n\n    render() {\n        const {selected} = this.state;\n        return (\n            <>\n                {this.state.tags.map(tag => {\n                    const checked = selected[tag.name] === undefined ? '' : 'checked';\n                    return (\n                        <div className=\"align-items-center\" key={tag.name}>\n                            <input className=\"tags-checkbox mr-2\" type=\"checkbox\" name={tag.name}\n                                   defaultChecked={checked}/>\n                            <label htmlFor=\"title\">{tag.name}</label>\n                        </div>\n                    );\n                })}\n            </>\n        );\n    }\n}","import React from 'react';\nimport {CopyToClipboard} from 'react-copy-to-clipboard';\n\nexport default class FileItem extends React.Component {\n    render() {\n        const {file, filename} = this.props;\n\n        if (file === null) {\n            return (\n                <div className=\"d-flex mt-2\">\n                    <div className=\"spinner-border spinner-border-sm\" role=\"status\">\n                        <span className=\"sr-only\">Загрузка...</span>\n                    </div>\n                    <p>{filename}</p>\n                </div>\n            );\n        } else if (file.error) {\n            return <div className=\"mt-3 mark_red\">Не удалось загрузить файл</div>\n        } else {\n            return (\n                <>\n                    <div className=\"mt-3 file-item\">\n                        <a href={file.contentUrl}\n                           target=\"_blank\"\n                           rel=\"noopener noreferrer\"\n                           className={`mr-3 ${this.props.boldFontClass}`}>\n                            {file.contentUrl}\n                        </a>\n                    </div>\n                    <CopyToClipboard text={file.contentUrl}>\n                        <button className=\"btn btn-info btn-sm mt-1\">\n                            Скопировать ссылку\n                        </button>\n                    </CopyToClipboard>\n                    {file.contentUrl.toLowerCase().match(\"\\\\.(jpg|jpeg|png)$\") &&\n                    <button className=\"btn btn-info btn-sm mt-1 ml-2\"\n                            data-image-id={file[\"@id\"]}\n                            onClick={this.props.handlePreviewImage}>\n                        Сделать превью изображением\n                    </button>\n                    }\n                    <button className=\"btn btn-danger btn-sm mt-1 ml-2\"\n                            data-file-id={file[\"@id\"]}\n                            onClick={this.props.handleDeleteFile}>\n                        Удалить файл\n                    </button>\n                </>\n            );\n        }\n    }\n}","import React from 'react';\nimport FileItem from \"./FileItem\";\n\nexport default class FileList extends React.Component {\n    getUploadedFiles() {\n        const {files, previewImage} = this.props;\n        const uploadedFiles = [];\n\n        for (let key in files) {\n            let boldFontClass = \"\";\n\n            if (previewImage && files[key]) {\n                boldFontClass = previewImage === files[key][\"@id\"] ? \"font-weight-bold\" : \"\";\n            }\n\n            uploadedFiles.push(\n                <FileItem\n                    key={key}\n                    filename={key}\n                    file={files[key]}\n                    boldFontClass={boldFontClass}\n                    handlePreviewImage={this.props.handlePreviewImage}\n                    handleDeleteFile={this.props.handleDeleteFile}\n                />\n            );\n        }\n\n        return uploadedFiles;\n    }\n\n    render() {\n        const uploadedFiles = this.getUploadedFiles();\n\n        return (\n            <>\n                {uploadedFiles.length > 0 &&\n                <h3 className=\"mt-3\">\n                    <div className=\"alert alert-danger\">\n                        <p>После выбора превью изображения обязательно нажмите на кнопку \"Сохранить\"</p>\n                        <p>Если вы хотите, чтобы превью изображение идеально ложилось на блок со слайдами, нужно использовать изображения размером 500x400px для превью</p>\n                    </div>\n                    <p>Список прикрепленных файлов</p>\n                    {uploadedFiles}\n                </h3>\n                }\n            </>\n        );\n    }\n}","import React from \"react\";\nimport axios, {post} from \"axios\";\nimport Error from \"../Error\";\nimport LinkButtons from \"./LinkButtons\";\nimport Tags from \"../Tags\";\nimport ValidationError from \"../ValidationError\";\nimport format from \"date-format\";\nimport {Editor} from \"@tinymce/tinymce-react\";\nimport FileList from \"./FileList\";\nimport {Redirect} from \"react-router-dom\";\nimport {authService} from \"../../authService\";\n\nexport default class ArticleForm extends React.Component {\n    constructor(props) {\n        super(props);\n\n        let article = {};\n        let previewImage = '';\n\n        if (this.props.article) {\n            article = this.props.article;\n            if (article.previewImage) {\n                previewImage = article.previewImage.mediaObject[\"@id\"];\n            }\n        }\n\n        let files = {}\n\n        if (this.props.article && Object.keys(this.props.article[\"mediaObjects\"]).length > 0) {\n            for (let key in this.props.article[\"mediaObjects\"]) {\n                const id = this.props.article[\"mediaObjects\"][key][\"@id\"];\n                files[id] = this.props.article[\"mediaObjects\"][key];\n            }\n        }\n\n        this.state = {\n            article: article,\n            previewImage: previewImage,\n            validationErrors: {},\n            error: this.props.error ? this.props.error : null,\n            isFormDisabled: false,\n            files: files\n        };\n\n        this.handlePreviewImage = this.handlePreviewImage.bind(this);\n        this.handleDeleteFile = this.handleDeleteFile.bind(this);\n        this.handleChangeFile = this.handleChangeFile.bind(this);\n        this.handleSubmit = this.handleSubmit.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.handleEditorChange = this.handleEditorChange.bind(this);\n    }\n\n    componentDidMount() {\n        this._isMounted = true;\n    }\n\n    componentWillUnmount() {\n        this._isMounted = false;\n    }\n\n    handlePreviewImage(e) {\n        this.setState({previewImage: e.target.dataset.imageId});\n    }\n\n    handleDeleteFile(e) {\n        const fileId = e.target.dataset.fileId;\n        const id = fileId.split('/')[3];\n\n        if (id !== undefined) {\n            axios.delete(`/media_objects/${id}`)\n                .then(\n                    () => {\n                        if (this.state.previewImage === fileId) {\n                            this.setState({previewImage: ''});\n                        }\n                        let files = {...this.state.files};\n                        delete files[fileId];\n                        this.setState({files: files});\n                    },\n                    () => {\n                        alert(\"Ошибка! Не удалось удалить файл.\");\n                    }\n                )\n        } else {\n            alert(\"Ошибка! Не удалось удалить файл.\");\n        }\n    }\n\n    handleSubmit(e) {\n        e.preventDefault();\n\n        this.setState({validationErrors: {}});\n        const article = this.collectFormData();\n\n        this.props.fetchData(article, this.state.previewImage)\n            .then(\n                () => {\n                    if (this._isMounted) {\n                        this.setState({isFormDisabled: false});\n                    }\n                },\n                err => {\n                    if (this._isMounted) {\n                        this.setState({\n                            isFormDisabled: false,\n                            validationErrors: this.getErrorList(err)\n                        });\n                    }\n                }\n            );\n    }\n\n    handleChangeFile(e) {\n        const formFiles = document.querySelector(\"input[name='media']\").files;\n\n        for (let i = 0; i < formFiles.length; i++) {\n            let r = Math.random().toString(36).substring(7);\n            const filename = formFiles[i].name + '_' + r;\n            const uploadFiles = {...this.state.files};\n\n            uploadFiles[filename] = null;\n            this.setState({files: uploadFiles});\n\n            const formData = new FormData();\n            formData.append(\"file\", formFiles[i]);\n\n            post(\"/media_objects\", formData, {\n                headers: {\n                    \"Content-Type\": \"multipart/form-data\"\n                }\n            })\n                .then(\n                    res => {\n                        const uploadFiles = {...this.state.files};\n                        uploadFiles[filename] = res.data;\n                        this.setState({files: uploadFiles});\n                    },\n                    err => {\n                        uploadFiles[filename] = {error: {err}};\n                    }\n                );\n        }\n\n        e.target.value = \"\";\n    }\n\n    handleEditorChange(content) {\n        let article = {...this.state.article};\n        article.text = content;\n\n        let errors = {...this.state.validationErrors};\n        delete errors[\"text\"];\n\n        this.setState({\n            article: article,\n            errors: errors\n        });\n    }\n\n    handleChange(e) {\n        const inputName = e.target.getAttribute(\"name\");\n        let errors = {...this.state.validationErrors};\n        delete errors[inputName];\n        this.setState({validationErrors: errors});\n    }\n\n    getErrorList(err) {\n        let errors = {};\n\n        if (err.response && err.response.data.violations) {\n            err.response.data.violations.map(v => errors[v.propertyPath] = v.message);\n        }\n        errors[\"unknown\"] = \"Во время обращения к серверу произошла ошибка! Проверьте корректность введенных данных.\";\n\n        return errors;\n    }\n\n    collectFormData() {\n        this.setState({isFormDisabled: true, errors: {}});\n\n        let article = new FormData(document.forms.article);\n\n        article = Object.fromEntries(article);\n        article.text = this.state.article.text;\n        article.tags = [];\n\n        let tags = document.getElementsByClassName(\"tags-checkbox\");\n        for (let i = 0; i < tags.length; i++) {\n            const curTag = tags.item(i);\n            if (curTag.checked) {\n                article.tags.push(\"api/tags/\" + curTag.getAttribute(\"name\"))\n            }\n        }\n\n        article.mediaObjects = [];\n\n        for (let key in this.state.files) {\n            if (this.state.files[key]) {\n                article.mediaObjects.push(this.state.files[key][\"@id\"]);\n            }\n        }\n\n        delete article.previewImage;\n\n        return article;\n    }\n\n    render() {\n        if (!authService.isAdmin()) {\n            return <Redirect to=\"/\"/>\n        }\n\n        if (this.state.error) {\n            return <Error error={this.state.error}/>;\n        }\n\n        const {article, files} = this.state;\n        const publishedAt = article.publishedAt ? new Date(article.publishedAt) : new Date();\n\n        return (\n            <div className=\"section-main\">\n                <LinkButtons article={article}/>\n\n                <fieldset disabled={this.state.isFormDisabled}>\n                    <form name=\"article\" className=\"form-group w-75\"\n                          onSubmit={this.handleSubmit}>\n\n                        <h3 className=\"mt-2 font-weight-bold\">Тэги</h3>\n                        <Tags selected={article.tags}/>\n\n                        <label htmlFor=\"title\" className=\"mt-2 font-weight-bold\">\n                            URL\n                            <p className=\"mb-0\">\n                                Данное поле должно быть уникальным! Использовать только при\n                                необходимости задания читабельного URL\n                                вручную. Иначе не изменять и не заполнять!!!\n                                Например если вбить education, то данная страница будет доступна по адресу\n                                msu.uz/education или msu.uz/articles/education.\n                            </p>\n                        </label>\n                        <input className=\"form-control\"\n                               type=\"text\"\n                               name=\"slug\"\n                               defaultValue={article.slug}\n                               onChange={this.handleChange}/>\n                        <ValidationError error={this.state.validationErrors.slug}/>\n\n                        <label htmlFor=\"title\" className=\"font-weight-bold\">Заголовок*</label>\n                        <input className=\"form-control\"\n                               type=\"text\"\n                               name=\"title\"\n                               defaultValue={article.title}\n                               onChange={this.handleChange}/>\n                        <ValidationError error={this.state.validationErrors.title}/>\n\n                        <label htmlFor=\"previewText\" className=\"font-weight-bold\">Превью текст</label>\n                        <textarea className=\"form-control\"\n                                  name=\"previewText\"\n                                  defaultValue={article.previewText}\n                                  onChange={this.handleChange}/>\n                        <ValidationError error={this.state.validationErrors.previewText}/>\n\n                        <label htmlFor=\"language\" className=\"font-weight-bold\">Язык</label>\n                        <select className=\"form-control\"\n                               name=\"language\"\n                               defaultValue={article.language}\n                               onChange={this.handleChange}>\n                            <option value=\"no\">Не указан</option>\n                            <option value=\"ru\">Русский</option>\n                            <option value=\"uz\">Узбекский</option>\n                        </select>\n                        <ValidationError error={this.state.validationErrors.language}/>\n\n                        <label htmlFor=\"publishedAt\" className=\"font-weight-bold\">Дата</label>\n                        <input className=\"form-control\"\n                               type=\"date\"\n                               name=\"publishedAt\"\n                               defaultValue={format('yyyy-MM-dd', publishedAt)}\n                               onChange={this.handleChange}/>\n                        <ValidationError error={this.state.validationErrors.publishedAt}/>\n\n                        <label className=\"font-weight-bold\">\n                            Текст*\n                            <p className=\"mb-0\">\n                                (Пожалуйста, удаляйте стиль шрифта текста скопированного из ворда,\n                                чтобы он не отличался от основного шрифта на сайте)\n                            </p>\n                        </label>\n                        <Editor\n                            id=\"tiny-redactor\"\n                            initialValue={article.text}\n                            apiKey={process.env.REACT_APP_TINYMCE_API_KEY}\n                            init={{\n                                height: 500,\n                                width: 900,\n                                menubar: true,\n                                plugin: \"a_tinymce_plugin\",\n                                a_plugin_option: true,\n                                force_br_newlines : true,\n                                force_p_newlines : false,\n                                forced_root_block : \"\",\n                                a_configuration_option: 400,\n                                plugins: \"advlist autolink link image lists charmap print preview hr anchor fullscreen insertdatetime media save table directionality\",\n                                toolbar: \"undo redo styleselect forecolor fontsizeselect bold italic removeformat alignleft aligncenter alignright alignjustify bullist numlist outdent indent code link image\",\n                                fontsize_formats: \"8pt 10pt 12pt 14pt 18pt 24pt 36pt\"\n                            }}\n                            onEditorChange={this.handleEditorChange}\n                        />\n\n                        <label htmlFor=\"media\" className=\"mt-4 font-weight-bold\">Прикрепить файлы</label>\n                        <input className=\"form-control-file mb-2\"\n                               type=\"file\"\n                               name=\"media\"\n                               onChange={this.handleChangeFile}\n                               multiple\n                        />\n\n                        <input className=\"btn-msu event-btn mt-2\"\n                               type=\"submit\"\n                               value=\"Сохранить\"\n                               onClick={this.handleSubmit}\n                        />\n                    </form>\n                </fieldset>\n\n                <strong>Поля отмеченные * обязательны для заполнения</strong>\n\n                <ValidationError error={this.state.validationErrors.unknown}/>\n\n                <FileList files={files}\n                          previewImage={this.state.previewImage}\n                          handlePreviewImage={this.handlePreviewImage}\n                          handleDeleteFile={this.handleDeleteFile}\n                />\n            </div>\n        );\n    }\n}","import React from \"react\";\nimport {post} from \"axios\";\nimport {withRouter} from \"react-router-dom\";\nimport ArticleForm from \"./ArticleForm\";\n\nclass ArticleFormPost extends React.Component {\n    constructor(props) {\n        super(props);\n\n        this.fetchData = this.fetchData.bind(this);\n        this.setPreviewImage = this.setPreviewImage.bind(this);\n    }\n\n    fetchData(article, previewImage = '') {\n        return post(`/articles`, article)\n            .then(\n                res => {\n                    if (previewImage) {\n                        this.setPreviewImage(res.data, previewImage);\n                    } else {\n                        this.props.history.push(`/admin/articles/${res.data.id}`)\n                    }\n                },\n                err => {\n                    throw err;\n                }\n            )\n    }\n\n    setPreviewImage(article, previewImage) {\n        const image = {\n            article: article[\"@id\"],\n            mediaObject: previewImage\n        };\n\n        post('/preview_images', image)\n            .then(\n                () => this.props.history.push(`/admin/articles/${article.id}`),\n                () => {\n                    alert(\"Ошибка! Превью изображение не было установлено.\");\n                    this.props.history.push(`/admin/articles/${article.id}`);\n                }\n            );\n    }\n\n    render() {\n        return <ArticleForm fetchData={this.fetchData}/>\n    }\n}\n\nexport default withRouter(ArticleFormPost);","import React from 'react';\nimport {get, post, put} from 'axios';\nimport {withRouter} from \"react-router-dom\";\nimport ArticleForm from \"./ArticleForm\";\nimport Spinner from \"../Spinner\";\n\nclass ArticleFormPut extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {article: {}};\n        this.fetchData = this.fetchData.bind(this);\n        this.updatePreviewImage = this.updatePreviewImage.bind(this);\n    }\n\n    componentDidMount() {\n        get(`articles/${this.props.match.params.id}`)\n            .then(\n                res => this.setState({\n                    article: res.data,\n                }),\n                err => this.setState({error: err})\n            );\n    }\n\n    fetchData(article, previewImage = '') {\n        return put(`/articles/${this.props.match.params.id}`, article)\n            .then(\n                res => {\n                    if (previewImage) {\n                        this.updatePreviewImage(res.data, previewImage)\n                    }\n                }\n            )\n    }\n\n    updatePreviewImage(article, previewImage) {\n        if (!article.previewImage) {\n            const image = {\n                article: article[\"@id\"],\n                mediaObject: previewImage\n            };\n\n            post('/preview_images', image)\n                .then(\n                    () => {},\n                    () => {\n                        alert(\"Ошибка! Превью изображение не было установлено.\");\n                    }\n                );\n        } else {\n            put(`/preview_images/${article.id}`, {mediaObject: previewImage})\n                .catch(() => alert(\"Ошибка! Не удалось обновить превью изображение.\"));\n        }\n    }\n\n    render() {\n        if (Object.keys(this.state.article).length === 0) {\n            return <Spinner/>;\n        }\n\n        return (\n            <>\n                <ArticleForm\n                    article={this.state.article}\n                    fetchData={this.fetchData}\n                    error={this.state.error}\n                />\n            </>\n        )\n    }\n}\n\nexport default withRouter(ArticleFormPut);","import React from 'react';\n\nexport default class Contacts extends React.Component {\n    componentDidMount() {\n        document.title = 'Контакты';\n    }\n\n    render() {\n        return (\n            <article className=\"section-main\">\n                <h2 className=\"event-title mb-2\">Контакты</h2>\n                <address>\n                    <ul>\n                        <li>+998 (71) 232-28-01 Приемная исполнительного директора</li>\n                        <li>+998 (71) 233-58-26 Канцелярия и телефон доверия</li>\n                        <li>+998 (71) 232-28-22 Факультет Прикладной математики и информатики</li>\n                        <li>+998 (71) 232-28-11 Факультет Психологии</li>\n                        <li>+998 (71) 233-87-88 Подготовительные курсы</li>\n                        <li>+998 (71) 236-30-60 Главный бухгалтер</li>\n                        <li>+998 (71) 232-07-33 Планово-финансовый отдел и маркетинг</li>\n                        <li>+998 (71) 232-28-10 Отдел кадров</li>\n                        <li>Email для обращений: <a href=\"mailto:info@msu.uz\">info@msu.uz</a></li>\n                        <li>Email для межведомственной и правительственной переписки: <a href=\"mailto:msu@exat.uz\">msu@exat.uz</a></li>\n                    </ul>\n                </address>\n                <hr/>\n                <iframe\n                    src=\"https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d5994.76373603328!2d69.2775002!3d41.3005556!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0000000000000000%3A0x3920c131719425d0!2z0KTQuNC70LjQsNC7INCc0JPQoyDQuNC8LiDQm9C-0LzQvtC90L7RgdC-0LLQsA!5e0!3m2!1sru!2s!4v1464799401723\"\n                    width=\"100%\"\n                    height=\"400px\"\n                    className=\"google-map\"\n                    frameBorder=\"0\"\n                    title=\"google-map\"\n                    allowFullScreen/>\n            </article>\n        );\n    }\n}","import React from 'react';\n\nexport default class Forum2022 extends React.Component {\n    componentDidMount() {\n        window.location.href = 'https://forms.gle/M1EeShkw75J8pTCYA';\n    }\n\n    render() {\n        return (\n            <div></div>\n        );\n    }\n}","import React from 'react';\n\nexport default class Forum2023 extends React.Component {\n    componentDidMount() {\n        window.location.href = 'https://forms.gle/D3DuwKTFiwdTgtTG7';\n    }\n\n    render() {\n        return (\n            <div></div>\n        );\n    }\n}","import React from 'react';\n\nexport default class Forum2024 extends React.Component {\n    componentDidMount() {\n        window.location.href = 'https://forms.gle/WaTrZh3TTmnjiXeR9';\n    }\n\n    render() {\n        return (\n            <div></div>\n        );\n    }\n}\n","import React from 'react';\n\nexport default class Forum2025 extends React.Component {\n    componentDidMount() {\n        window.location.href = 'https://forms.gle/W5eZk2usEB9o2TgF9';\n    }\n\n    render() {\n        return (\n            <div></div>\n        );\n    }\n}","import React from \"react\";\nimport {authService} from \"../../authService\";\nimport {Redirect} from \"react-router-dom\";\n\nexport default class Logout extends React.Component {\n    render() {\n        authService.logout();\n        return <Redirect to=\"/\"/>;\n    }\n}","import React from \"react\";\nimport {withRouter} from \"react-router-dom\";\nimport axios, {get} from \"axios\";\nimport Error from \"../Error\";\nimport Spinner from \"../Spinner\";\nimport format from \"date-format\";\n\nclass Appeal extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            appeal: {},\n            error: null\n        };\n    }\n\n    componentDidMount() {\n        this.cancelSource = axios.CancelToken.source();\n        this._isMounted = true;\n\n        get(`appeals/${this.props.match.params.id}`, {cancelToken: this.cancelSource.token})\n            .then(\n                res => {\n                    if (this._isMounted) {\n                        this.setState({appeal: res.data, error: null})\n                    }\n                },\n                err => {\n                    if (this._isMounted) {\n                        this.setState({error: err})\n                    }\n                }\n            );\n    }\n\n    componentWillUnmount() {\n        this._isMounted = false;\n        this.cancelSource.cancel();\n    }\n\n    render() {\n        const appeal = this.state.appeal;\n\n        if (Object.keys(appeal).length === 0) {\n            return <Spinner/>\n        }\n\n        return (\n            <div className=\"section-main\">\n                <div className=\"row mb-2\">\n                    <span className=\"font-weight-bold mr-2\">ФИО:</span> {appeal.fullName}\n                </div>\n\n                <div className=\"row mb-2\">\n                    <span className=\"font-weight-bold mr-2\">Email:</span> {appeal.email}\n                </div>\n\n                <div className=\"row mb-2\">\n                    <span className=\"font-weight-bold mr-2\">Телефон:</span> {appeal.phone}\n                </div>\n\n                <div className=\"row mb-2\">\n                    <span className=\"font-weight-bold mr-2\">Год рождения:</span> {appeal.birthYear}\n                </div>\n\n                <div className=\"row mb-2\">\n                    <span className=\"font-weight-bold mr-2\">Адрес:</span> {appeal.address}\n                </div>\n\n                <div className=\"row mb-2\">\n                    <span className=\"font-weight-bold mr-2\">Лицо:</span> {appeal.personType}\n                </div>\n\n                <div className=\"row mb-2\">\n                    <span className=\"font-weight-bold mr-2\">Организация:</span> {appeal.organization}\n                </div>\n\n                <div className=\"row mb-2\">\n                    <span\n                        className=\"font-weight-bold mr-2\">Дата обращения:</span> {format('yyyy/MM/dd', new Date(appeal.createdAt))}\n                </div>\n\n                <div className=\"font-weight-bold row\">Сообщение:</div>\n                <div className=\"row\">\n                    {appeal.message}\n                </div>\n\n                {appeal.mediaObject &&\n                <div className=\"row mt-2\">\n                    <a href={appeal.mediaObject.contentUrl}\n                       target=\"_blank\"\n                       rel=\"noopener noreferrer\">\n                        Прикрепленный файл\n                    </a>\n                </div>\n                }\n            </div>\n        );\n    }\n}\n\nexport default withRouter(Appeal);","import React from \"react\";\nimport {Link, withRouter} from \"react-router-dom\";\nimport axios, {get} from \"axios\";\nimport format from 'date-format';\nimport ListPlaceholder from \"../ListPlaceholder\";\nimport Pagination from \"../Pagination\";\nimport Error from \"../Error\";\nimport Appeal from \"./Appeal\";\n\nclass AppealList extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            items: [],\n            page: 1,\n            totalItems: 0\n        };\n        this.handlePaginationClick = this.handlePaginationClick.bind(this);\n    }\n\n    handlePaginationClick(e) {\n        const page = +e.target.dataset.pagination;\n        this.setState({page: page});\n\n        this.cancelSource.cancel();\n        this.cancelSource = axios.CancelToken.source();\n\n        get(`appeals?page=${page}&partition=true`)\n            .then(\n                result => {\n                    this.setState({\n                        items: result.data[\"hydra:member\"],\n                    });\n                },\n                err => {\n                    this.setState({\n                        items: [],\n                        error: err\n                    });\n                }\n            );\n    }\n\n    componentDidMount() {\n        this.cancelSource = axios.CancelToken.source();\n        this._isMounted = true;\n\n        get(\"appeals?page=1\", {cancelToken: this.cancelSource.token})\n            .then(\n                result => {\n                    if (this._isMounted) {\n                        this.setState({\n                            items: result.data[\"hydra:member\"],\n                            totalItems: result.data[\"hydra:totalItems\"]\n                        });\n                    }\n                },\n                err => {\n                    if (this._isMounted) {\n                        this.setState({\n                            items: [],\n                            error: err\n                        });\n                    }\n                }\n            );\n    }\n\n    componentWillUnmount() {\n        this._isMounted = false;\n        this.cancelSource.cancel();\n    }\n\n    render() {\n        if (this.state.error) {\n            return <Error err={this.state.error}/>\n        }\n\n        return (\n            <div className=\"section-main\">\n                <h1 className=\"event-title\">Обращения в электронную приемную</h1>\n\n                {this.state.items.length === 0 &&\n                <ListPlaceholder number={3}/>\n                }\n\n                {this.state.items.map(item =>\n                    <div className=\"row mb-3\" key={`appeal_${item.id}`}>\n                        <Link to={`/appeals/${item.id}`} target=\"_blank\" rel=\"noopener noreferrer\">\n                            {format('yyyy/MM/dd', new Date(item.createdAt))} {item.fullName}\n                        </Link>\n                    </div>\n                )}\n\n                {this.state.totalItems > 0 &&\n                <Pagination\n                    totalItems={this.state.totalItems}\n                    selected={this.state.page}\n                    handlePaginationClick={this.handlePaginationClick}\n                />\n                }\n            </div>\n        );\n    }\n}\n\nexport default withRouter(AppealList);\n\n","import React from \"react\";\nimport {Route, Switch} from \"react-router-dom\";\nimport Article from \"./Article\";\nimport AppealForm from \"./AppealForm\";\nimport Home from \"./Home\";\nimport ArticleList from \"./ArticleList\";\nimport Error from \"./Error\";\nimport Login from \"./admin/Login\";\nimport ArticleFormPost from \"./admin/ArticleFormPost\";\nimport ArticleFormPut from \"./admin/ArticleFormPut\";\nimport Contacts from \"./Contacts\";\nimport Forum2022 from \"./Forum2022\";\nimport Forum2023 from \"./Forum2023\";\nimport Forum2024 from \"./Forum2024\";\nimport Forum2025 from \"./Forum2025\";\nimport Logout from \"./admin/Logout\";\nimport Appeal from \"./admin/Appeal\";\nimport AppealList from \"./admin/AppealList\";\n// import ym from \"react-yandex-metrika\";\n\nexport default class RouterContainer extends React.Component {\n    render() {\n        return (\n            <>\n                <Route path=\"/\" render={({location}) => {\n                    if (typeof window.ga === 'function') {\n                        const uri = location.pathname + location.search;\n                        window.ga(\"set\", \"page\", uri);\n                        window.ga(\"send\", \"pageview\");\n                        // ym(\"hit\", uri);\n                    }\n                }} />\n                <Switch>\n                    <Route exact path=\"/login\">\n                        <Login/>\n                    </Route>\n                    <Route exact path=\"/admin\">\n                        <Login/>\n                    </Route>\n                    <Route exact path=\"/logout\">\n                        <Logout/>\n                    </Route>\n                    <Route exact path=\"/main/statistics\">\n                        {/*old path*/}\n                        <AppealList/>\n                    </Route>\n                    <Route exact path=\"/appeals\">\n                        <AppealList/>\n                    </Route>\n                    <Route exact path=\"/appeals/:id\">\n                        <Appeal/>\n                    </Route>\n                    <Route exact path=\"/contacts\">\n                        <Contacts/>\n                    </Route>\n                    <Route exact path=\"/forum2022\">\n                        <Forum2022/>\n                    </Route>\n                    <Route exact path=\"/forum2023\">\n                        <Forum2023/>\n                    </Route>\n                    <Route exact path=\"/forum2024\">\n                        <Forum2024/>\n                    </Route>\n                    <Route exact path=\"/forum2025\">\n                        <Forum2025/>\n                    </Route>\n                    <Route exact path=\"/reception\">\n                        <AppealForm department=\"Администрация\"/>\n                    </Route>\n                    <Route exact path=\"/reception-library\">\n                        <AppealForm department=\"Библиотека\"/>\n                    </Route>\n                    <Route exact path=\"/admin/articles/:id\">\n                        <ArticleFormPut/>\n                    </Route>\n                    <Route strict path=\"/admin/articles\">\n                        <ArticleFormPost/>\n                    </Route>\n                    <Route exact path=\"/articles/:id\">\n                        <Article/>\n                    </Route>\n                    <Route path=\"/tags/:tag/:page\">\n                        <ArticleList partial=\"false\" />\n                    </Route>\n                    <Route exact path=\"/\">\n                        <Home/>\n                    </Route>\n                    <Route path=\"/:route\">\n                        <Article/>\n                    </Route>\n                    <Route >\n                        <Error error={{status: 404}}/>\n                    </Route>\n                </Switch>\n            </>\n        );\n    }\n}","import React from 'react';\n\nexport default class Footer extends React.Component {\n    render() {\n        const year = (new Date()).getFullYear();\n        return (\n            <footer className=\"footer\">\n                <ul className=\"nav-footer\">\n                    <li><a href=\"http://www.msu.ru/\" target=\"_blank\" rel=\"noopener noreferrer\"><img\n                        src=\"/images/link-msu.gif\" alt=\"Иконка МГУ\"/></a></li>\n                    <li><a href=\"http://www.math.msu.ru/\" target=\"_blank\" rel=\"noopener noreferrer\"><img\n                        src=\"/images/link-mex-mat.jpg\" alt=\"Иконка мехмат\"/></a></li>\n                    <li><a href=\"http://www.intsys.msu.ru/\" target=\"_blank\" rel=\"noopener noreferrer\"><img\n                        src=\"/images/link-matis.jpg\" alt=\"Иконка МАТиС\"/></a></li>\n                    <li><a href=\"http://www.psy.msu.ru/\" target=\"_blank\" rel=\"noopener noreferrer\"><img\n                        src=\"/images/link-psy.jpg\" alt=\"Иконка Психологи\"/></a></li>\n                </ul>\n                <div className=\"copyright\">\n                    Copyright © 2006–{year} Филиал МГУ имени М.В.Ломоносова<br/>\n                    При перепечатке текстовой информации и фотографий ссылка на сайт обязательна<br/>\n                </div>\n                <div id=\"bx-composite-banner\"/>\n                <div id=\"yandex-metrika\">\n                    <a href=\"https://metrika.yandex.ru/stat/?id=39906540&amp;from=informer\" target=\"_blank\"\n                       rel=\"noopener noreferrer\">\n                        <img\n                            src=\"https://informer.yandex.ru/informer/39906540/3_0_FFFFFFFF_EFEFEFFF_0_pageviews\"\n                            style={{width: \"88px\", height: \"31px\", border: \"0\"}} alt=\"Яндекс.Метрика\"\n                            title=\"Яндекс.Метрика: данные за сегодня (просмотры, визиты и уникальные посетители)\"\n                            className=\"ym-advanced-informer\" data-cid=\"39906540\"\n                            data-lang=\"ru\"/>\n                    </a>\n                </div>\n            </footer>\n        );\n    }\n}","import React from \"react\";\nimport TopMenuList from \"../TopMenuList\";\nimport LeftMenuList from \"../LeftMenuList\";\nimport Logo from \"../Logo\";\n\nexport default class MobileHeader extends React.Component {\n    constructor(props) {\n        super(props);\n        this.handleMenuButtonClick = this.handleMenuButtonClick.bind(this);\n    }\n\n    // TODO: user redux instead\n    handleMenuButtonClick(e) {\n        if (!e.target.classList.contains(\"sub-menu-header\")) {\n            let element = document.querySelector(\".wrap-mobile-menu-scroll\");\n            element.classList.toggle(\"open-mobile-menu\");\n\n            element = document.querySelector(\"body\");\n            element.classList.toggle(\"overflow-hidden\");\n\n            element = document.querySelector(\".wrap\");\n            element.classList.toggle(\"opacity-50\");\n        }\n    }\n\n    render() {\n        return (\n            <div className=\"mobile-header\">\n                <div className=\"wrap-mobile-menu-btn\">\n                    <div className=\"mobile-menu-btn pointer\" onClick={this.handleMenuButtonClick}>\n                        <img src=\"/images/menu-mobile-btn_320.png\" alt=\"Кнопка открыть-закрыть\"/>\n                    </div>\n                </div>\n                <Logo/>\n                <div className=\"wrap-mobile-menu-scroll\">\n                    <div id=\"mobile-menu-scroll\" className=\"mobile-menu-scroll\">\n                        <div className=\"mobile-menu-scroll-content\">\n                            <div className=\"mobile-menu-close-btn-pane\">\n                                <div className=\"mobile-menu-close-btn pointer\"\n                                     onClick={this.handleMenuButtonClick}>Закрыть\n                                </div>\n                            </div>\n                            <ul className=\"mobile-menu\" onClick={this.handleMenuButtonClick}>\n                                <LeftMenuList/>\n                            </ul>\n                            <ul className=\"mobile-menu\" onClick={this.handleMenuButtonClick}>\n                                <TopMenuList />\n                            </ul>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}","import \"bootstrap/dist/css/bootstrap.min.css\";\n\nimport React from \"react\";\nimport {Header} from \"./components/Header\";\nimport LeftAside from \"./components/LeftAside\";\nimport RouterContainer from \"./components/RouterContainer\";\nimport Footer from \"./components/Footer\";\nimport MobileHeader from \"./components/mobile/MobileHeader\";\n\nexport default class App extends React.Component {\n    getVisionClass() {\n        if (localStorage.getItem(\"poor_vision\")) {\n            let className = [];\n\n            if (localStorage.getItem(\"font_size\")) {\n                className.push(localStorage.getItem(\"font_size\"));\n            }\n\n            if (localStorage.getItem(\"color_scheme\")) {\n                className.push(localStorage.getItem(\"color_scheme\"));\n            }\n\n            return className.join(\" \");\n        }\n\n        return \"\";\n    }\n\n    render() {\n        return (\n            <div className={this.getVisionClass()}>\n                <MobileHeader/>\n                <div className=\"wrap\">\n                    <Header/>\n                    <LeftAside/>\n                    <RouterContainer/>\n                    <Footer/>\n                </div>\n            </div>\n        );\n    }\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.0/8 are considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { 'Service-Worker': 'script' },\n  })\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready\n      .then(registration => {\n        registration.unregister();\n      })\n      .catch(error => {\n        console.error(error.message);\n      });\n  }\n}\n","import React from \"react\";\nimport {withRouter} from \"react-router-dom\";\n\nclass ScrollTop extends React.Component {\n    componentDidUpdate(prevProps, prevState, snapshot) {\n        if (\n            this.props.location.pathname !== prevProps.location.pathname\n        ) {\n            window.scrollTo(0, 0);\n        }\n    }\n\n    render() {\n        return null;\n    }\n}\n\nexport default withRouter(ScrollTop);","import React from \"react\";\n\nexport default class ErrorBoundary extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {hasError: false};\n    }\n\n    static getDerivedStateFromError(error) {\n        return {hasError: true};\n    }\n\n\n    render() {\n        if (this.state.hasError) {\n            return (\n                <>\n                    <div className=\"d-flex justify-content-center mt-5\">\n                        <h1 className=\"text-white\">Кажется что-то пошло не так. Мы уже работаем над исправлением данной\n                            проблемы. Попробуйте зайти позже.</h1>\n                    </div>\n                    <div className=\"d-flex justify-content-center\">\n                        <img src=\"/images/logonew.png\" alt=\"Логотип МГУ\"/>\n                    </div>\n                </>\n            );\n        }\n\n        return this.props.children;\n    }\n}","import React from 'react';\nimport {withRouter} from 'react-router-dom';\n\nclass MenuActive extends React.Component {\n\n    componentDidMount() {\n        this.activation();\n    }\n\n    componentDidUpdate(prevProps, prevState, snapshot) {\n        if (\n            this.props.location.pathname !== prevProps.location.pathname\n        ) {\n            const menuItem = document.querySelector(\".menu-left-act\");\n            if (menuItem) {\n                menuItem.classList.remove(\"menu-left-act\");\n            }\n\n            this.activation();\n        }\n    }\n\n    activation() {\n        const menuItem = document.querySelector(`.menu-left a[href=\"${this.props.location.pathname}\"]`);\n        if (menuItem) {\n            menuItem.classList.add(\"menu-left-act\");\n        }\n    }\n\n    render() {\n        return null;\n    }\n}\n\nexport default withRouter(MenuActive);","import axios from \"axios\";\nimport {authService} from \"./authService\";\n\nexport const axiosConfig = {\n    register\n};\n\nfunction register() {\n    axios.defaults.baseURL = process.env.REACT_APP_API_ENDPOINT;\n    axios.defaults.headers.common[\"Content-Type\"] = \"application/ld+json; charset=utf-8\";\n    axios.defaults.headers.common[\"Accept\"] = \"application/ld+json\";\n\n    if (authService.tokenHeader()) {\n        axios.defaults.headers.common['Authorization'] = authService.tokenHeader();\n    }\n\n    axios.interceptors.response.use(\n        res => res,\n        err => {\n            if (err.response && (err.response.status === 403 || err.response.status === 401)) {\n                if (err.response.status === 401) {\n                    authService.logout();\n                }\n\n                if (window.location.pathname.indexOf(\"/login\") === -1) {\n                    window.location = \"/login\";\n                }\n            }\n\n            throw err;\n        });\n}","import React from \"react\";\n\nconst PoorVision = React.lazy(() => import(\"./PoorVision\"));\nconst NormalVision = React.lazy(() => import(\"./NormalVision\"));\n\nexport default class VisionStyle extends React.Component {\n    render() {\n        return (\n            <>\n                <React.Suspense fallback={null}>\n                    {localStorage.getItem(\"poor_vision\") && <PoorVision/>}\n                    {!localStorage.getItem(\"poor_vision\") && <NormalVision/>}\n                </React.Suspense>\n                {this.props.children}\n            </>\n        );\n    }\n}\n\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"./App\";\nimport {BrowserRouter} from \"react-router-dom\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport ScrollTop from \"./components/ScrollTop\";\nimport ErrorBoundary from \"./components/ErrorBoundary\";\nimport MenuActive from \"./components/MenuActive\";\nimport {axiosConfig} from \"./axioxConfig\";\nimport VisionStyle from \"./VisionStyle\";\nimport ReactGA from \"react-ga\";\nimport {YMInitializer} from \"react-yandex-metrika\";\n\naxiosConfig.register();\n\nReactGA.initialize(process.env.REACT_APP_GOOGLE_ANALYTICS_KEY);\n\nReactDOM.render(\n    <React.StrictMode>\n        <ErrorBoundary>\n            <BrowserRouter>\n                <ScrollTop/>\n                <MenuActive/>\n                <VisionStyle>\n                    <App/>\n                </VisionStyle>\n            </BrowserRouter>\n            <YMInitializer accounts={[+process.env.REACT_APP_YANDEX_METRIKA_KEY]} options={{\n                clickmap: true,\n                trackLinks: true,\n                accurateTrackBounce: true,\n                webvisor: true,\n                trackHash: false\n            }} version=\"2\"/>\n        </ErrorBoundary>\n    </React.StrictMode>,\n    document.getElementById(\"root\")\n);\n\nserviceWorker.unregister();"],"sourceRoot":""}