Program and partners update
This commit is contained in:
parent
1dae4eaf93
commit
80fffa8515
@ -3,6 +3,8 @@ const ncp = require('ncp').ncp;
|
|||||||
|
|
||||||
const filesSource = "./src/files"
|
const filesSource = "./src/files"
|
||||||
const imagesSource = "./src/images"
|
const imagesSource = "./src/images"
|
||||||
|
const webpack = require('webpack')
|
||||||
|
|
||||||
|
|
||||||
exports.onPreBootstrap = () => {
|
exports.onPreBootstrap = () => {
|
||||||
ncp(filesSource, "./static/files", function (err) {
|
ncp(filesSource, "./static/files", function (err) {
|
||||||
|
33
package.json
33
package.json
@ -6,24 +6,23 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bootstrap": "4.6.0",
|
"bootstrap": "4.6.0",
|
||||||
"breakpoints": "^0.0.0",
|
"breakpoints": "^0.0.0",
|
||||||
"gatsby": "3.1.1",
|
"gatsby": "^3.2.1",
|
||||||
"gatsby-awesome-pagination": "0.3.6",
|
"gatsby-awesome-pagination": "0.3.6",
|
||||||
"gatsby-cli": "3.1.0",
|
"gatsby-cli": "^3.2.0",
|
||||||
"gatsby-plugin-catch-links": "3.1.0",
|
"gatsby-plugin-catch-links": "^3.2.0",
|
||||||
"gatsby-plugin-manifest": "3.1.0",
|
"gatsby-plugin-manifest": "^3.2.0",
|
||||||
"gatsby-plugin-netlify-cms": "5.1.0",
|
"gatsby-plugin-netlify-cms": "5.1.0",
|
||||||
"gatsby-plugin-react-helmet": "4.1.0",
|
"gatsby-plugin-react-helmet": "4.1.0",
|
||||||
"gatsby-plugin-react-intl": "3.0.0",
|
"gatsby-plugin-react-intl": "^3.0.0",
|
||||||
"gatsby-plugin-sharp": "3.1.1",
|
"gatsby-plugin-sharp": "^3.2.0",
|
||||||
"gatsby-plugin-ts": "^2.7.1",
|
"gatsby-remark-images": "^4.2.0",
|
||||||
"gatsby-remark-images": "4.1.0",
|
"gatsby-remark-katex": "^4.2.0",
|
||||||
"gatsby-remark-katex": "4.1.0",
|
"gatsby-remark-relative-images": "^2.0.2",
|
||||||
"gatsby-remark-relative-images": "2.0.2",
|
"gatsby-source-filesystem": "^3.2.0",
|
||||||
"gatsby-source-filesystem": "3.1.0",
|
"gatsby-source-graphql": "^3.2.0",
|
||||||
"gatsby-source-graphql": "3.1.0",
|
"gatsby-transformer-remark": "^3.2.0",
|
||||||
"gatsby-transformer-remark": "3.1.0",
|
"gatsby-transformer-sharp": "^3.2.0",
|
||||||
"gatsby-transformer-sharp": "3.1.0",
|
"html-react-parser": "^1.2.4",
|
||||||
"html-react-parser": "1.2.4",
|
|
||||||
"imagemin-pngquant": "9.0.2",
|
"imagemin-pngquant": "9.0.2",
|
||||||
"jquery": "3.6.0",
|
"jquery": "3.6.0",
|
||||||
"jquery.scrollex": "^0.2.1",
|
"jquery.scrollex": "^0.2.1",
|
||||||
@ -33,8 +32,8 @@
|
|||||||
"ncp": "2.0.0",
|
"ncp": "2.0.0",
|
||||||
"prop-types": "15.7.2",
|
"prop-types": "15.7.2",
|
||||||
"react": "17.0.2",
|
"react": "17.0.2",
|
||||||
"react-bootstrap": "1.5.2",
|
"react-bootstrap": "^1.5.2",
|
||||||
"react-helmet": "6.1.0",
|
"react-helmet": "^6.1.0",
|
||||||
"react-intl": "^5.13.5",
|
"react-intl": "^5.13.5",
|
||||||
"react-scrollspy": "^3.4.3",
|
"react-scrollspy": "^3.4.3",
|
||||||
"redux": "4.0.5",
|
"redux": "4.0.5",
|
||||||
|
@ -4,7 +4,7 @@ import {injectIntl, useIntl} from "react-intl"
|
|||||||
|
|
||||||
import NpmNavbar from "./navBar"
|
import NpmNavbar from "./navBar"
|
||||||
import NpmFooter from "./footer"
|
import NpmFooter from "./footer"
|
||||||
import SEO from "./seo"
|
import Seo from "./seo"
|
||||||
|
|
||||||
import "bootstrap/dist/css/bootstrap.min.css"
|
import "bootstrap/dist/css/bootstrap.min.css"
|
||||||
import "katex/dist/katex.min.css"
|
import "katex/dist/katex.min.css"
|
||||||
@ -19,7 +19,7 @@ const NpmLayout = ({children}) => {
|
|||||||
<Helmet>
|
<Helmet>
|
||||||
<html className="npm-site" lang={lang}/>
|
<html className="npm-site" lang={lang}/>
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<SEO title={intl.formatMessage({id: "title"})}/>
|
<Seo title={intl.formatMessage({id: "title"})}/>
|
||||||
|
|
||||||
<NpmNavbar/>
|
<NpmNavbar/>
|
||||||
<div className="container">
|
<div className="container">
|
||||||
|
@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import Helmet from 'react-helmet';
|
import Helmet from 'react-helmet';
|
||||||
import {injectIntl, useIntl} from "react-intl";
|
import {injectIntl, useIntl} from "react-intl";
|
||||||
import SEO from "../../seo";
|
import Seo from "../../seo";
|
||||||
import NpmNavbar from "../../navBar";
|
import NpmNavbar from "../../navBar";
|
||||||
|
|
||||||
import '../assets/sass/magprog.scss'
|
import '../assets/sass/magprog.scss'
|
||||||
@ -21,7 +21,7 @@ const MagProgLayout = ({children}) => {
|
|||||||
<html className="magprog" lang={lang}/>
|
<html className="magprog" lang={lang}/>
|
||||||
<body className="is-preload"/>
|
<body className="is-preload"/>
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<SEO lang={lang} title={intl.formatMessage({id: "title"})}/>
|
<Seo lang={lang} title={intl.formatMessage({id: "title"})}/>
|
||||||
|
|
||||||
<NpmNavbar/>
|
<NpmNavbar/>
|
||||||
<main>{children}</main>
|
<main>{children}</main>
|
||||||
|
28
src/components/magprog/common/Partners.js
Normal file
28
src/components/magprog/common/Partners.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {Card, CardDeck, CardGroup, CardImg} from "react-bootstrap";
|
||||||
|
|
||||||
|
|
||||||
|
export function Partners({data}) {
|
||||||
|
return <div className="inner">
|
||||||
|
<h2>{data.title}</h2>
|
||||||
|
<div className="features">
|
||||||
|
{data.content.map(item =>{
|
||||||
|
return <section>
|
||||||
|
{/*<span className={`icon major ${iconClass}`} />*/}
|
||||||
|
<h3><a href={item.link}>{item.title}</a></h3>
|
||||||
|
</section>
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
{/* <CardDeck>
|
||||||
|
{data.content.map(item => {
|
||||||
|
return <Card>
|
||||||
|
<Card.Img variant="top"/>
|
||||||
|
<Card.Body>
|
||||||
|
<Card.Title><a href={item.link}>{item.title}</a></Card.Title>
|
||||||
|
</Card.Body>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
})}
|
||||||
|
</CardDeck>*/}
|
||||||
|
</div>
|
||||||
|
}
|
24
src/components/magprog/common/RecommendedCourses.js
Normal file
24
src/components/magprog/common/RecommendedCourses.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import React, {useState} from "react";
|
||||||
|
import {Button, Collapse} from "react-bootstrap";
|
||||||
|
|
||||||
|
export function RecommendedCourses(props) {
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
size="lg"
|
||||||
|
onClick={() => setOpen(!open)}
|
||||||
|
aria-controls="recommended-courses-collapse-text"
|
||||||
|
aria-expanded={open}
|
||||||
|
>
|
||||||
|
Рекомендованные курсы
|
||||||
|
</Button>
|
||||||
|
<Collapse in={open}>
|
||||||
|
<div id="recommended-courses-collapse-text">
|
||||||
|
{props.children}
|
||||||
|
</div>
|
||||||
|
</Collapse>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import MagProgLayout from "../../components/magprog/common/MagProgLayout";
|
import MagProgLayout from "./MagProgLayout";
|
||||||
|
|
||||||
const SecondPage = () => (
|
const SecondPage = () => (
|
||||||
<MagProgLayout>
|
<MagProgLayout>
|
@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import MagProgLayout from "../../components/magprog/common/MagProgLayout";
|
import MagProgLayout from "./MagProgLayout";
|
||||||
|
|
||||||
const SecondPage = () => (
|
const SecondPage = () => (
|
||||||
<MagProgLayout>
|
<MagProgLayout>
|
@ -49,14 +49,12 @@ const NpmNavbar = () => {
|
|||||||
<Nav.Link as="span" eventKey="partners"><FormattedMessage
|
<Nav.Link as="span" eventKey="partners"><FormattedMessage
|
||||||
id="header.partners"/></Nav.Link>
|
id="header.partners"/></Nav.Link>
|
||||||
</Link>
|
</Link>
|
||||||
{/*
|
|
||||||
<Link to={`/${intl.locale}/magprog`} className="nav-item" activeClassName="active"
|
<Link to={`/${intl.locale}/magprog`} className="nav-item" activeClassName="active"
|
||||||
partiallyActive={true}>
|
partiallyActive={true}>
|
||||||
<Nav.Link as="span" eventKey="magprog">
|
<Nav.Link as="span" eventKey="magprog">
|
||||||
<FormattedMessage id="header.magprog"/>
|
<FormattedMessage id="header.magprog"/>
|
||||||
</Nav.Link>
|
</Nav.Link>
|
||||||
</Link>
|
</Link>
|
||||||
*/}
|
|
||||||
</Nav>
|
</Nav>
|
||||||
<Nav.Link eventKey="language" className="nav-item language">
|
<Nav.Link eventKey="language" className="nav-item language">
|
||||||
<Language/>
|
<Language/>
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import React from "react"
|
import React from "react"
|
||||||
import {injectIntl} from "react-intl"
|
import {injectIntl} from "react-intl"
|
||||||
import SEO from "./seo"
|
import Seo from "./seo"
|
||||||
|
|
||||||
const Redirect = ({intl}) => {
|
const Redirect = ({intl}) => {
|
||||||
return <SEO title={`${intl.formatMessage({id: "title"})}`}/>
|
return <Seo title={`${intl.formatMessage({id: "title"})}`}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
export default injectIntl(Redirect)
|
export default injectIntl(Redirect)
|
||||||
|
@ -3,7 +3,7 @@ import PropTypes from "prop-types"
|
|||||||
import Helmet from "react-helmet"
|
import Helmet from "react-helmet"
|
||||||
import {graphql, useStaticQuery} from "gatsby"
|
import {graphql, useStaticQuery} from "gatsby"
|
||||||
|
|
||||||
const SEO = ({description, lang, meta, title}) => {
|
const Seo = ({description, lang, meta, title}) => {
|
||||||
const {site} = useStaticQuery(
|
const {site} = useStaticQuery(
|
||||||
graphql`
|
graphql`
|
||||||
query {
|
query {
|
||||||
@ -44,17 +44,17 @@ const SEO = ({description, lang, meta, title}) => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
SEO.defaultProps = {
|
Seo.defaultProps = {
|
||||||
lang: `ru`,
|
lang: `ru`,
|
||||||
meta: [],
|
meta: [],
|
||||||
description: ``,
|
description: ``,
|
||||||
}
|
}
|
||||||
|
|
||||||
SEO.propTypes = {
|
Seo.propTypes = {
|
||||||
description: PropTypes.string,
|
description: PropTypes.string,
|
||||||
lang: PropTypes.string,
|
lang: PropTypes.string,
|
||||||
meta: PropTypes.arrayOf(PropTypes.object),
|
meta: PropTypes.arrayOf(PropTypes.object),
|
||||||
title: PropTypes.string.isRequired,
|
title: PropTypes.string.isRequired,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default SEO
|
export default Seo
|
||||||
|
@ -12,5 +12,5 @@ language: ru
|
|||||||
* [ИЯИ РАН](https://www.inr.ru/)
|
* [ИЯИ РАН](https://www.inr.ru/)
|
||||||
* [ИКИ РАН](http://www.iki.rssi.ru/)
|
* [ИКИ РАН](http://www.iki.rssi.ru/)
|
||||||
* [ОИЯИ](https://bmn.jinr.ru/)
|
* [ОИЯИ](https://bmn.jinr.ru/)
|
||||||
* ВШЭ (физфак и ФКН)
|
* [ВШЭ](https://www.hse.ru/en/) (физфак и ФКН)
|
||||||
* [HZG-DESY](https://www.desy.de/research/cooperations__institutes/hzg/index_eng.html)
|
* [HZG-DESY](https://www.desy.de/research/cooperations__institutes/hzg/index_eng.html)
|
32
src/content/ru/magprog/partners.yaml
Normal file
32
src/content/ru/magprog/partners.yaml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
title: Партнеры
|
||||||
|
content:
|
||||||
|
- title: ЛФИ
|
||||||
|
link: https://mipt.ru/education/departments/lpr/
|
||||||
|
logo:
|
||||||
|
- title: ФПМИ
|
||||||
|
link: https://mipt.ru/education/departments/fpmi/
|
||||||
|
logo:
|
||||||
|
- title: JetBrains Research
|
||||||
|
link: https://research.jetbrains.org/groups/npm/
|
||||||
|
logo:
|
||||||
|
- title: JetBrains
|
||||||
|
link: https://www.jetbrains.com/
|
||||||
|
logo:
|
||||||
|
- title: Таврида Электрик
|
||||||
|
link: https://www.tavrida.com/ter/
|
||||||
|
logo:
|
||||||
|
- title: ИЯИ РАН
|
||||||
|
link: https://www.inr.ru/
|
||||||
|
logo:
|
||||||
|
- title: ИКИ РАН
|
||||||
|
link: http://www.iki.rssi.ru/
|
||||||
|
logo:
|
||||||
|
- title: ОИЯИ
|
||||||
|
link: https://bmn.jinr.ru/
|
||||||
|
logo:
|
||||||
|
- title: ВШЭ
|
||||||
|
link: https://www.hse.ru/en/
|
||||||
|
logo:
|
||||||
|
- title: HZG-DESY
|
||||||
|
link: https://www.desy.de/research/cooperations__institutes/hzg/index_eng.html
|
||||||
|
logo:
|
@ -14,4 +14,4 @@ language: ru
|
|||||||
* Научная этика и подготовка научных публикаций (семестр)
|
* Научная этика и подготовка научных публикаций (семестр)
|
||||||
* Семинар по литературе
|
* Семинар по литературе
|
||||||
|
|
||||||
Остальные курсы выбираются руководителем и согласуются руководством программы. Для выбора курсов можно руководствоваться [списком рекомендованных курсов] или выбрать любой другой курс, который читается в МФТИ (и возможно в партнерских ВУЗах.
|
Остальные курсы выбираются руководителем и согласуются руководством программы. Для выбора курсов можно руководствоваться списком рекомендованных курсов или выбрать любой другой курс, который читается в МФТИ (и возможно в партнерских ВУЗах).
|
||||||
|
34
src/content/ru/magprog/recommendedCourses.md
Normal file
34
src/content/ru/magprog/recommendedCourses.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
content_type: magprog
|
||||||
|
magprog_section: recommended
|
||||||
|
title: Рекомаендованные курсы
|
||||||
|
language: ru
|
||||||
|
---
|
||||||
|
|
||||||
|
* **Прохождение частиц через вещество** (читает кафедра фундаментальных взаимодействий и космологии)
|
||||||
|
Курс посвящен основам физики взаимодействия элементарных частиц с веществом. В курсе освещается взаимодействие как адронов, так и бета-частиц и гамма-частиц. Подробно обсуждаются различные каналы взаимодействия частиц с веществом.
|
||||||
|
* **Введение в физику частиц** (читает кафедра фундаментальных взаимодействий и космологии)
|
||||||
|
Теоретические основы физики элементарных частиц и фундаментальных взаимодействий. Курс описывает как введение в физику сильного взаимодействия, так и феноменологические теории слабого и электрослабого взаимодейсвия.
|
||||||
|
* **[Параллельные и распределенные вычисления](https://mipt.ru/online/algoritmov-i-tekhnologiy/raspr-calc.php)** (читает кафедра алгоритмов и технологий программирования)
|
||||||
|
* **[Алгоритмы и структуры данных](https://mipt.ru/online/algoritmov-i-tekhnologiy/algoritmy-struktury.php)** (читает кафедра алгоритмов и технологий программирования)
|
||||||
|
Базовый курс алгоритмов и структур данных для адаптации физиков. В данном курсе студенты закрепляют навыки программирования на С++, изучая и реализуя сложные современные алгоритмы. В их число входят алгоритмы на графах и связанные с ними структуры данных. Другой блок задач связан с работой со строками и построением индексов текста.
|
||||||
|
* **Методы Монте-Карло в ядерной физике** (читает кафедра фундаментальных взаимодействий и космологии)
|
||||||
|
Курс посвящен основам моделирования взаимодействия частиц с веществом программными средствами библиотек Geant4 и CERN ROOT. В курсе будет разобрана специфика физической и объектной модели платформы GEANT4, предназначенной для моделирования процессов в физике частиц. Курс сопровождается практическими примерами применения платформы к реальным задачам. Упор будет сделан на особенности разработки сложных моделей.
|
||||||
|
* **Инструменты IT**
|
||||||
|
Курс посвящен практическому обзору использования современных инструментов для разработки программного обеспечения. Кроме того, в курсе будут разобраны современные практики оформления и документирования кода, инструменты и методы командной работы в сфере разработки ПО.
|
||||||
|
* **Неускорительные эксперименты в физике частиц**
|
||||||
|
Курс посвящен физике “подземных” экспериментов в физике элементарных частиц. Будет произведен обзор проектов по изучению тёмной материи, физики нейтрино и физике бета-распада. Особое внимание уделяется методам детектирования и фонам в “подземных” экспериментах.
|
||||||
|
* [Введение в научное программирование на языке Kotlin](https://mipt.ru/online/programming/kotlin.php) (читает кафедра алгоритмов и технологий программирования)
|
||||||
|
Курс посвящен особенностям языка Kotlin в контексте прикладной разработки программного обеспечения для научных исследований.
|
||||||
|
* **Методы многомерной оптимизации**
|
||||||
|
Этот практический курс посвящен математической и программной реализации методов оптимизации непрерывных функций. Непрерывная оптимизация является основной компонентой многомерного анализа данных в физических экспериментах. Также на ней построены задачи проектирования и принятия решений и даже некоторые методы моделирования. В данном курсе упор сделан именно на практическую реализацию этих методов, сравнение их между собой и оптимизации производительности.
|
||||||
|
* **Продвинутое программирование на языке Python**
|
||||||
|
В рамках курса углублённо рассматривается язык Python, изучается применение стандартной библиотеки и набора библиотек scikit для решения научных задач.
|
||||||
|
* **[Программирование на С++](https://mipt.ru/online/algoritmov-i-tekhnologiy/Progr-C.php)** (читает кафедра алгоритмов и технологий программирования)
|
||||||
|
Курс посвящен языку С++ и его особенностям. Рекомендуется изучать параллельно курсу Алгоритмов и структур данных.
|
||||||
|
* **Байесовские методы в анализе данных**
|
||||||
|
Курс посвящен обзору байесовских методов в применении к анализу данных физических экспериментов.
|
||||||
|
* **Машинное обучение в астрофизике** (читает кафедра фундаментальных взаимодействий и космологии).
|
||||||
|
Курс посвящен обзору методов машинного обучения и их приложения в физических и астрофизических исследованиях.
|
||||||
|
|
||||||
|
И другие курсы по усмотрению научного руководителя.
|
@ -1,14 +1,14 @@
|
|||||||
import React from "react"
|
import React from "react"
|
||||||
import Layout from "../components/layout"
|
import Layout from "../components/layout"
|
||||||
import {FormattedMessage, injectIntl, useIntl} from "gatsby-plugin-react-intl"
|
import {FormattedMessage, injectIntl, useIntl} from "gatsby-plugin-react-intl"
|
||||||
import SEO from "../components/seo"
|
import Seo from "../components/seo"
|
||||||
|
|
||||||
const NotFoundPage = () => {
|
const NotFoundPage = () => {
|
||||||
const intl = useIntl()
|
const intl = useIntl()
|
||||||
const lang = intl.locale
|
const lang = intl.locale
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<SEO lang={lang} title={intl.formatMessage({id: "title"})}/>
|
<Seo lang={lang} title={intl.formatMessage({id: "title"})}/>
|
||||||
<div style={{minHeight: `95vh`}}>
|
<div style={{minHeight: `95vh`}}>
|
||||||
<h1 style={{textAlign: `center`, paddingTop: `300px`}}><FormattedMessage id="notfound.header"/></h1>
|
<h1 style={{textAlign: `center`, paddingTop: `300px`}}><FormattedMessage id="notfound.header"/></h1>
|
||||||
<p style={{textAlign: `center`}}><FormattedMessage id="notfound.description"/></p>
|
<p style={{textAlign: `center`}}><FormattedMessage id="notfound.description"/></p>
|
||||||
|
@ -6,6 +6,9 @@ import MagProgLayout from '../../components/magprog/common/MagProgLayout';
|
|||||||
import Parser from "html-react-parser";
|
import Parser from "html-react-parser";
|
||||||
import Scrollspy from "react-scrollspy";
|
import Scrollspy from "react-scrollspy";
|
||||||
import Scroll from "../../components/magprog/common/Scroll";
|
import Scroll from "../../components/magprog/common/Scroll";
|
||||||
|
import {RecommendedCourses} from "../../components/magprog/common/RecommendedCourses";
|
||||||
|
import {Partners} from "../../components/magprog/common/Partners";
|
||||||
|
import PartnersData from "../../content/ru/magprog/partners.yaml";
|
||||||
|
|
||||||
function mentors(edges) {
|
function mentors(edges) {
|
||||||
return (
|
return (
|
||||||
@ -65,8 +68,7 @@ function team(edges) {
|
|||||||
return (
|
return (
|
||||||
<section key={`team_${id}`}>
|
<section key={`team_${id}`}>
|
||||||
<div className="image fit">
|
<div className="image fit">
|
||||||
<img src={withPrefix(`images/members/${photo}`)}
|
<img src={withPrefix(`images/members/${photo}`)} alt={name}/>
|
||||||
alt={name}/>
|
|
||||||
</div>
|
</div>
|
||||||
<div className="content">
|
<div className="content">
|
||||||
<div className="inner">
|
<div className="inner">
|
||||||
@ -86,42 +88,71 @@ function team(edges) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function section(node) {
|
||||||
|
let body = <>
|
||||||
|
<div className="inner">
|
||||||
|
<h2>{node.frontmatter.section_title}</h2>
|
||||||
|
{Parser(node.html)}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: node.frontmatter.magprog_section,
|
||||||
|
title: node.frontmatter.section_title,
|
||||||
|
body: body,
|
||||||
|
style: "wrapper style1 fullscreen fade-up"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function programSection(programBodyNode, recommendedCoursesHtml) {
|
||||||
|
//const node = props.data.program
|
||||||
|
let body = <>
|
||||||
|
<div className="inner">
|
||||||
|
<h2>{programBodyNode.frontmatter.section_title}</h2>
|
||||||
|
{Parser(programBodyNode.html)}
|
||||||
|
<RecommendedCourses>
|
||||||
|
{Parser(recommendedCoursesHtml)}
|
||||||
|
</RecommendedCourses>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: programBodyNode.frontmatter.magprog_section,
|
||||||
|
title: programBodyNode.frontmatter.section_title,
|
||||||
|
body: body,
|
||||||
|
style: "wrapper style3 fullscreen fade-up"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const MagProgPage = (props) => {
|
const MagProgPage = (props) => {
|
||||||
let sections = [props.data.what, props.data.why, props.data.partners, props.data.program, props.data.enroll, props.data.contacts].map(node => {
|
let sections = [
|
||||||
let body = <>
|
section(props.data.what),
|
||||||
<div className="inner">
|
section(props.data.why),
|
||||||
<h2>{node.frontmatter.section_title}</h2>
|
{
|
||||||
{Parser(node.html)}
|
id: "partners",
|
||||||
</div>
|
title: "Партнеры",
|
||||||
</>
|
body: <Partners data={PartnersData}/>,
|
||||||
|
style: "wrapper style3 fullscreen fade-up"
|
||||||
return {
|
},
|
||||||
id: node.frontmatter.magprog_section,
|
// section(props.data.partners),
|
||||||
title: node.frontmatter.section_title,
|
|
||||||
body: body,
|
|
||||||
style: "wrapper style1 fullscreen fade-up"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
sections[0].id = "intro"
|
|
||||||
|
|
||||||
sections.splice(3, 0,
|
|
||||||
{
|
{
|
||||||
id: "mentors",
|
id: "mentors",
|
||||||
title: "Научные руководители",
|
title: "Научные руководители",
|
||||||
body: mentors(props.data.mentors.edges),
|
body: mentors(props.data.mentors.edges),
|
||||||
style: "wrapper style2 spotlights"
|
style: "wrapper style2 spotlights"
|
||||||
}
|
},
|
||||||
)
|
programSection(props.data.programData, props.data.recommendedCourses.html),
|
||||||
|
section(props.data.enroll),
|
||||||
sections.splice(6, 0,
|
|
||||||
{
|
{
|
||||||
id: "team",
|
id: "team",
|
||||||
title: "Команда",
|
title: "Команда",
|
||||||
body: team(props.data.team.edges),
|
body: team(props.data.team.edges),
|
||||||
style: "wrapper style2 spotlights"
|
style: "wrapper style2 spotlights"
|
||||||
}
|
},
|
||||||
)
|
section(props.data.contacts)
|
||||||
|
]
|
||||||
|
|
||||||
|
sections[0].id = "intro"
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MagProgLayout>
|
<MagProgLayout>
|
||||||
@ -212,7 +243,7 @@ export const query = graphql`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
program: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "program"} published: {ne: false}, language: {eq: "ru"}}){
|
programData: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "program"} published: {ne: false}, language: {eq: "ru"}}){
|
||||||
html
|
html
|
||||||
frontmatter{
|
frontmatter{
|
||||||
magprog_section
|
magprog_section
|
||||||
@ -220,6 +251,9 @@ export const query = graphql`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
recommendedCourses: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "recommended"} published: {ne: false}, language: {eq: "ru"}}){
|
||||||
|
html
|
||||||
|
}
|
||||||
|
|
||||||
enroll: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "enroll"} published: {ne: false}, language: {eq: "ru"}}){
|
enroll: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "enroll"} published: {ne: false}, language: {eq: "ru"}}){
|
||||||
html
|
html
|
||||||
|
Loading…
Reference in New Issue
Block a user