@ -59,5 +59,6 @@ module.exports = {
|
||||
redirectComponent: require.resolve(`./src/components/redirect.js`),
|
||||
},
|
||||
},
|
||||
'gatsby-plugin-sass',
|
||||
],
|
||||
}
|
15
package.json
@ -5,6 +5,7 @@
|
||||
"version": "0.2.0",
|
||||
"dependencies": {
|
||||
"bootstrap": "4.6.0",
|
||||
"breakpoints": "^0.0.0",
|
||||
"gatsby": "3.1.1",
|
||||
"gatsby-awesome-pagination": "0.3.6",
|
||||
"gatsby-cli": "3.1.0",
|
||||
@ -22,25 +23,25 @@
|
||||
"gatsby-source-graphql": "3.1.0",
|
||||
"gatsby-transformer-remark": "3.1.0",
|
||||
"gatsby-transformer-sharp": "3.1.0",
|
||||
"node-sass": "^5.0.0",
|
||||
"gatsby-plugin-sass": "4.1.0",
|
||||
"html-react-parser": "1.2.4",
|
||||
"imagemin-pngquant": "9.0.2",
|
||||
"jquery": "3.6.0",
|
||||
"jquery.scrollex": "^0.2.1",
|
||||
"jquery.scrolly": "^0.0.1",
|
||||
"katex": "0.13.0",
|
||||
"mini-css-extract-plugin": "1.3.9",
|
||||
"ncp": "2.0.0",
|
||||
"netlify-cms-app": "2.14.32",
|
||||
"prop-types": "15.7.2",
|
||||
"react": "17.0.2",
|
||||
"react-bootstrap": "1.5.2",
|
||||
"react-helmet": "6.1.0",
|
||||
"react-intl": "^5.13.5",
|
||||
"redux": "4.0.5",
|
||||
"typescript": "^4.2.3",
|
||||
"vertical-timeline-component-for-react": "1.0.7",
|
||||
"react-scrollspy": "^3.4.3",
|
||||
"smoothscroll-polyfill": "^0.4.4"
|
||||
"redux": "4.0.5",
|
||||
"gatsby-plugin-sass": "^4.1.0",
|
||||
"node-sass": "^5.0.0",
|
||||
"smoothscroll-polyfill": "^0.4.4",
|
||||
"vertical-timeline-component-for-react": "1.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "10.2.5",
|
||||
|
@ -1,5 +1,5 @@
|
||||
import React from "react"
|
||||
import "../styles/footer.css"
|
||||
import "../styles/footer.scss"
|
||||
|
||||
const NpmFooter = () => (
|
||||
<footer className="blockquote-footer bg-dark">
|
||||
|
@ -6,16 +6,21 @@ import NpmNavbar from "./navBar"
|
||||
import NpmFooter from "./footer"
|
||||
import SEO from "./seo"
|
||||
|
||||
import "../styles/layout.css"
|
||||
import "../styles/main.css"
|
||||
import "../styles/layout.scss"
|
||||
import "../styles/main.scss"
|
||||
import "katex/dist/katex.min.css"
|
||||
import {Helmet} from "react-helmet";
|
||||
|
||||
const NpmLayout = ({children}) => {
|
||||
const intl = useIntl();
|
||||
const lang = intl.locale;
|
||||
return (
|
||||
<>
|
||||
<Helmet>
|
||||
<html className="npm-site"/>
|
||||
</Helmet>
|
||||
<SEO lang={lang} title={intl.formatMessage({id: "title"})}/>
|
||||
|
||||
<NpmNavbar/>
|
||||
<div className="container">
|
||||
<main>{children}</main>
|
||||
|
2672
src/components/magprog/assets/fonts/fontawesome-webfont.svg
Normal file
After Width: | Height: | Size: 451 KiB |
47
src/components/magprog/assets/sass/base/_page.scss
Normal file
@ -0,0 +1,47 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Basic */
|
||||
|
||||
// MSIE: Required for IEMobile.
|
||||
@-ms-viewport {
|
||||
width: device-width;
|
||||
}
|
||||
|
||||
// MSIE: Prevents scrollbar from overlapping content.
|
||||
body {
|
||||
-ms-overflow-style: scrollbar;
|
||||
}
|
||||
|
||||
// Ensures page width is always >=320px.
|
||||
@include breakpoint('<=xsmall') {
|
||||
html, body {
|
||||
min-width: 320px;
|
||||
}
|
||||
}
|
||||
|
||||
// Set box model to border-box.
|
||||
// Based on css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice
|
||||
html {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
*, *:before, *:after {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
body {
|
||||
background: _palette(bg);
|
||||
|
||||
// Stops initial animations until page loads.
|
||||
&.is-preload {
|
||||
*, *:before, *:after {
|
||||
@include vendor('animation', 'none !important');
|
||||
@include vendor('transition', 'none !important');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
76
src/components/magprog/assets/sass/base/_reset.scss
Normal file
@ -0,0 +1,76 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
// Reset.
|
||||
// Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain)
|
||||
|
||||
html, body, div, span, applet, object,
|
||||
iframe, h1, h2, h3, h4, h5, h6, p, blockquote,
|
||||
pre, a, abbr, acronym, address, big, cite,
|
||||
code, del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var, b,
|
||||
u, i, center, dl, dt, dd, ol, ul, li, fieldset,
|
||||
form, label, legend, table, caption, tbody,
|
||||
tfoot, thead, tr, th, td, article, aside,
|
||||
canvas, details, embed, figure, figcaption,
|
||||
footer, header, hgroup, menu, nav, output, ruby,
|
||||
section, summary, time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
-webkit-text-size-adjust: none;
|
||||
}
|
||||
|
||||
mark {
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
input, select, textarea {
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
-ms-appearance: none;
|
||||
appearance: none;
|
||||
}
|
200
src/components/magprog/assets/sass/base/_typography.scss
Normal file
@ -0,0 +1,200 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Type */
|
||||
|
||||
body, input, select, textarea {
|
||||
color: _palette(fg);
|
||||
font-family: _font(family);
|
||||
font-size: 16.5pt;
|
||||
font-weight: _font(weight);
|
||||
line-height: 1.75;
|
||||
|
||||
@include breakpoint('<=xlarge') {
|
||||
font-size: 13pt;
|
||||
}
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
@include breakpoint('<=xxsmall') {
|
||||
font-size: 11pt;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
@include vendor('transition', (
|
||||
'color #{_duration(transition)} ease',
|
||||
'border-bottom-color #{_duration(transition)} ease'
|
||||
));
|
||||
border-bottom: dotted 1px _palette(fg-light);
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
border-bottom-color: transparent;
|
||||
color: _palette(fg-bold);
|
||||
}
|
||||
}
|
||||
|
||||
strong, b {
|
||||
color: _palette(fg-bold);
|
||||
font-weight: _font(weight-bold);
|
||||
}
|
||||
|
||||
em, i {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: _palette(fg-bold);
|
||||
font-weight: _font(weight-bold);
|
||||
line-height: 1.5;
|
||||
margin: 0 0 (_size(element-margin) * 0.25) 0;
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.75em;
|
||||
|
||||
&.major {
|
||||
margin: 0 0 (_size(element-margin) * 0.65) 0;
|
||||
position: relative;
|
||||
padding-bottom: 0.35em;
|
||||
|
||||
&:after {
|
||||
@include vendor('background-image', 'linear-gradient(to right, #{_palette(accent1)}, #{_palette(accent3)})');
|
||||
@include vendor('transition', 'max-width #{_duration(transition)} ease');
|
||||
border-radius: 0.2em;
|
||||
bottom: 0;
|
||||
content: '';
|
||||
height: 0.05em;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.75em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 0.6em;
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.25em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 0.6em;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 0.6em;
|
||||
}
|
||||
}
|
||||
|
||||
sub {
|
||||
font-size: 0.8em;
|
||||
position: relative;
|
||||
top: 0.5em;
|
||||
}
|
||||
|
||||
sup {
|
||||
font-size: 0.8em;
|
||||
position: relative;
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
border-left: solid (_size(border-width) * 4) _palette(border);
|
||||
font-style: italic;
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
padding: (_size(element-margin) / 4) 0 (_size(element-margin) / 4) _size(element-margin);
|
||||
}
|
||||
|
||||
code {
|
||||
background: _palette(border-bg);
|
||||
border-radius: _size(border-radius);
|
||||
border: solid _size(border-width) _palette(border);
|
||||
font-family: _font(family-fixed);
|
||||
font-size: 0.9em;
|
||||
margin: 0 0.25em;
|
||||
padding: 0.25em 0.65em;
|
||||
}
|
||||
|
||||
pre {
|
||||
-webkit-overflow-scrolling: touch;
|
||||
font-family: _font(family-fixed);
|
||||
font-size: 0.9em;
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
|
||||
code {
|
||||
display: block;
|
||||
line-height: 1.75em;
|
||||
padding: 1em 1.5em;
|
||||
overflow-x: auto;
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 0;
|
||||
border-bottom: solid _size(border-width) _palette(border);
|
||||
margin: _size(element-margin) 0;
|
||||
|
||||
&.major {
|
||||
margin: (_size(element-margin) * 1.5) 0;
|
||||
}
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
101
src/components/magprog/assets/sass/components/_actions.scss
Normal file
@ -0,0 +1,101 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Actions */
|
||||
|
||||
ul.actions {
|
||||
@include vendor('display', 'flex');
|
||||
cursor: default;
|
||||
list-style: none;
|
||||
margin-left: (_size(element-margin) * -0.5);
|
||||
padding-left: 0;
|
||||
|
||||
li {
|
||||
padding: 0 0 0 (_size(element-margin) * 0.5);
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
&.special {
|
||||
@include vendor('justify-content', 'center');
|
||||
width: 100%;
|
||||
margin-left: 0;
|
||||
|
||||
li {
|
||||
&:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.stacked {
|
||||
@include vendor('flex-direction', 'column');
|
||||
margin-left: 0;
|
||||
|
||||
li {
|
||||
padding: (_size(element-margin) * 0.65) 0 0 0;
|
||||
|
||||
&:first-child {
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.fit {
|
||||
width: calc(100% + #{_size(element-margin) * 0.5});
|
||||
|
||||
li {
|
||||
@include vendor('flex-grow', '1');
|
||||
@include vendor('flex-shrink', '1');
|
||||
width: 100%;
|
||||
|
||||
> * {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&.stacked {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=xsmall') {
|
||||
&:not(.fixed) {
|
||||
@include vendor('flex-direction', 'column');
|
||||
margin-left: 0;
|
||||
width: 100% !important;
|
||||
|
||||
li {
|
||||
@include vendor('flex-grow', '1');
|
||||
@include vendor('flex-shrink', '1');
|
||||
padding: (_size(element-margin) * 0.5) 0 0 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
|
||||
> * {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"],
|
||||
button,
|
||||
.button {
|
||||
width: 100%;
|
||||
|
||||
&.icon {
|
||||
&:before {
|
||||
margin-left: -0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
26
src/components/magprog/assets/sass/components/_box.scss
Normal file
@ -0,0 +1,26 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Box */
|
||||
|
||||
.box {
|
||||
border-radius: _size(border-radius);
|
||||
border: solid _size(border-width) _palette(border);
|
||||
margin-bottom: _size(element-margin);
|
||||
padding: 1.5em;
|
||||
|
||||
> :last-child,
|
||||
> :last-child > :last-child,
|
||||
> :last-child > :last-child > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&.alt {
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
106
src/components/magprog/assets/sass/components/_button.scss
Normal file
@ -0,0 +1,106 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Button */
|
||||
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"],
|
||||
button,
|
||||
.button {
|
||||
@include vendor('appearance', 'none');
|
||||
@include vendor('transition', (
|
||||
'border-color #{_duration(transition)} ease'
|
||||
));
|
||||
background-color: transparent;
|
||||
border: solid 1px !important;
|
||||
border-color: _palette(border) !important;
|
||||
border-radius: 3em;
|
||||
color: _palette(fg-bold) !important;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
font-weight: _font(weight-bold);
|
||||
height: calc(4.75em + 2px);
|
||||
letter-spacing: _font(kerning-alt);
|
||||
line-height: 4.75em;
|
||||
outline: 0;
|
||||
padding: 0 3.75em;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
|
||||
&:after {
|
||||
@include vendor('transform', 'scale(0.25)');
|
||||
@include vendor('pointer-events', 'none');
|
||||
@include vendor('transition', (
|
||||
'opacity #{_duration(transition)} ease',
|
||||
'transform #{_duration(transition)} ease'
|
||||
));
|
||||
background: _palette(fg-bold);
|
||||
border-radius: 3em;
|
||||
content: '';
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&.icon {
|
||||
&:before {
|
||||
margin-right: 0.75em;
|
||||
}
|
||||
}
|
||||
|
||||
&.fit {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&.small {
|
||||
font-size: 0.4em;
|
||||
}
|
||||
|
||||
&.large {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
&.primary {
|
||||
background-color: _palette(fg-bold);
|
||||
color: _palette(bg) !important;
|
||||
|
||||
&:after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.disabled,
|
||||
&:disabled {
|
||||
cursor: default;
|
||||
opacity: 0.5;
|
||||
@include vendor('pointer-events', 'none');
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: _palette(fg) !important;
|
||||
|
||||
&:after {
|
||||
opacity: 0.05;
|
||||
@include vendor('transform', 'scale(1)');
|
||||
}
|
||||
|
||||
&:active {
|
||||
border-color: _palette(fg-bold) !important;
|
||||
|
||||
&:after {
|
||||
opacity: 0.1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
21
src/components/magprog/assets/sass/components/_contact.scss
Normal file
@ -0,0 +1,21 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Contact */
|
||||
|
||||
ul.contact {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
|
||||
> li {
|
||||
padding: 0;
|
||||
margin: 1.5em 0 0 0;
|
||||
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
98
src/components/magprog/assets/sass/components/_features.scss
Normal file
@ -0,0 +1,98 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Features */
|
||||
|
||||
.features {
|
||||
@include vendor('display', 'flex');
|
||||
@include vendor('flex-wrap', 'wrap');
|
||||
border-radius: _size(border-radius);
|
||||
border: solid 1px _palette(border);
|
||||
background: _palette(border-bg);
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
|
||||
section {
|
||||
@include padding(3em, 3em, (0.5em, 0, 0, 4em));
|
||||
width: 50%;
|
||||
border-top: solid 1px _palette(border);
|
||||
position: relative;
|
||||
|
||||
&:nth-child(-n + 2) {
|
||||
border-top-width: 0;
|
||||
}
|
||||
|
||||
&:nth-child(2n) {
|
||||
border-left: solid 1px _palette(border);
|
||||
}
|
||||
|
||||
.icon {
|
||||
@include vendor('transition', (
|
||||
'opacity #{_duration(activation) * 0.5} ease',
|
||||
'transform #{_duration(activation) * 0.5} ease'
|
||||
));
|
||||
@include vendor('transition-delay', '1s');
|
||||
@include vendor('transform', 'scale(1)');
|
||||
position: absolute;
|
||||
left: 3em;
|
||||
top: 3em;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@for $i from 1 through _misc(max-features) {
|
||||
&:nth-child(#{$i}) {
|
||||
.icon {
|
||||
@include vendor('transition-delay', '#{(_duration(transition) * 0.75 * $i)}');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.inactive {
|
||||
section {
|
||||
.icon {
|
||||
@include vendor('transform', 'scale(0.5)');
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=medium') {
|
||||
display: block;
|
||||
|
||||
section {
|
||||
border-top-width: 1px !important;
|
||||
border-left-width: 0 !important;
|
||||
width: 100%;
|
||||
|
||||
&:first-child {
|
||||
border-top-width: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
section {
|
||||
@include padding(2em, 1.5em, (0.5em, 0, 0, 4em));
|
||||
|
||||
.icon {
|
||||
left: 1.5em;
|
||||
top: 2em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=xsmall') {
|
||||
section {
|
||||
@include padding(2em, 1.5em, (0, 0, 0, 0));
|
||||
|
||||
.icon {
|
||||
left: 0;
|
||||
position: relative;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
236
src/components/magprog/assets/sass/components/_form.scss
Normal file
@ -0,0 +1,236 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Form */
|
||||
|
||||
form {
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
|
||||
> :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
> .fields {
|
||||
$gutter: (_size(element-margin) * 0.75);
|
||||
|
||||
@include vendor('display', 'flex');
|
||||
@include vendor('flex-wrap', 'wrap');
|
||||
width: calc(100% + #{$gutter * 2});
|
||||
margin: ($gutter * -1) 0 _size(element-margin) ($gutter * -1);
|
||||
|
||||
> .field {
|
||||
@include vendor('flex-grow', '0');
|
||||
@include vendor('flex-shrink', '0');
|
||||
padding: $gutter 0 0 $gutter;
|
||||
width: calc(100% - #{$gutter * 1});
|
||||
|
||||
&.half {
|
||||
width: calc(50% - #{$gutter * 0.5});
|
||||
}
|
||||
|
||||
&.third {
|
||||
width: calc(#{100% / 3} - #{$gutter * (1 / 3)});
|
||||
}
|
||||
|
||||
&.quarter {
|
||||
width: calc(25% - #{$gutter * 0.25});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=xsmall') {
|
||||
> .fields {
|
||||
$gutter: (_size(element-margin) * 0.75);
|
||||
|
||||
width: calc(100% + #{$gutter * 2});
|
||||
margin: ($gutter * -1) 0 _size(element-margin) ($gutter * -1);
|
||||
|
||||
> .field {
|
||||
padding: $gutter 0 0 $gutter;
|
||||
width: calc(100% - #{$gutter * 1});
|
||||
|
||||
&.half {
|
||||
width: calc(100% - #{$gutter * 1});
|
||||
}
|
||||
|
||||
&.third {
|
||||
width: calc(100% - #{$gutter * 1});
|
||||
}
|
||||
|
||||
&.quarter {
|
||||
width: calc(100% - #{$gutter * 1});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
color: _palette(fg-bold);
|
||||
font-weight: _font(weight-bold);
|
||||
line-height: 1.5;
|
||||
margin: 0 0 (_size(element-margin) * 0.35) 0;
|
||||
display: block;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="email"],
|
||||
input[type="tel"],
|
||||
select,
|
||||
textarea {
|
||||
@include vendor('appearance', 'none');
|
||||
background: _palette(border-bg);
|
||||
border-radius: _size(border-radius);
|
||||
border: none;
|
||||
border: solid _size(border-width) _palette(border);
|
||||
color: inherit;
|
||||
display: block;
|
||||
outline: 0;
|
||||
padding: 0 1em;
|
||||
text-decoration: none;
|
||||
width: 100%;
|
||||
|
||||
&:invalid {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
border-color: _palette(fg-bold);
|
||||
box-shadow: 0 0 0 _size(border-width) _palette(fg-bold);
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
background-image: svg-url("<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'><path d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='#{_palette(border)}' /></svg>");
|
||||
background-size: 1.25rem;
|
||||
background-repeat: no-repeat;
|
||||
background-position: calc(100% - 1rem) center;
|
||||
height: _size(element-height);
|
||||
padding-right: _size(element-height);
|
||||
text-overflow: ellipsis;
|
||||
|
||||
option {
|
||||
color: _palette(fg-bold);
|
||||
background: _palette(bg);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
&::-ms-value {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
&::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="email"],
|
||||
select {
|
||||
height: _size(element-height);
|
||||
}
|
||||
|
||||
textarea {
|
||||
padding: 0.75em 1em;
|
||||
|
||||
body.is-ie & {
|
||||
min-height: 10em;
|
||||
}
|
||||
}
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"], {
|
||||
@include vendor('appearance', 'none');
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: -2em;
|
||||
opacity: 0;
|
||||
width: 1em;
|
||||
z-index: -1;
|
||||
|
||||
& + label {
|
||||
@include icon;
|
||||
color: _palette(fg);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 1em;
|
||||
font-weight: _font(weight);
|
||||
padding-left: (_size(element-height) * 0.6) + 0.75em;
|
||||
padding-right: 0.75em;
|
||||
position: relative;
|
||||
|
||||
&:before {
|
||||
background: _palette(border-bg);
|
||||
border-radius: _size(border-radius);
|
||||
border: solid _size(border-width) _palette(border);
|
||||
content: '';
|
||||
display: inline-block;
|
||||
height: (_size(element-height) * 0.6);
|
||||
left: 0;
|
||||
line-height: (_size(element-height) * 0.575);
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
top: 0;
|
||||
width: (_size(element-height) * 0.6);
|
||||
}
|
||||
}
|
||||
|
||||
&:checked + label {
|
||||
&:before {
|
||||
background: _palette(fg-bold);
|
||||
border-color: _palette(fg-bold);
|
||||
color: _palette(accent3);
|
||||
content: '\f00c';
|
||||
}
|
||||
}
|
||||
|
||||
&:focus + label {
|
||||
&:before {
|
||||
border-color: _palette(fg-bold);
|
||||
box-shadow: 0 0 0 _size(border-width) _palette(fg-bold);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
input[type="checkbox"] {
|
||||
& + label {
|
||||
&:before {
|
||||
border-radius: _size(border-radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
input[type="radio"] {
|
||||
& + label {
|
||||
&:before {
|
||||
border-radius: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::-webkit-input-placeholder {
|
||||
color: _palette(fg-light) !important;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
:-moz-placeholder {
|
||||
color: _palette(fg-light) !important;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
::-moz-placeholder {
|
||||
color: _palette(fg-light) !important;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
:-ms-input-placeholder {
|
||||
color: _palette(fg-light) !important;
|
||||
opacity: 1.0;
|
||||
}
|
57
src/components/magprog/assets/sass/components/_icon.scss
Normal file
@ -0,0 +1,57 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Icon */
|
||||
|
||||
.icon {
|
||||
@include icon;
|
||||
border-bottom: none;
|
||||
position: relative;
|
||||
|
||||
> .label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.major {
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
display: block;
|
||||
background: _palette(fg-bold);
|
||||
border-radius: 100%;
|
||||
color: _palette(bg);
|
||||
text-align: center;
|
||||
line-height: 2.5em;
|
||||
margin: 0 0 (_size(element-margin) * 0.65) 0;
|
||||
|
||||
&:before {
|
||||
font-size: 1.25em;
|
||||
|
||||
.wrapper.style1 & {
|
||||
color: _palette(accent1);
|
||||
}
|
||||
|
||||
.wrapper.style1-alt & {
|
||||
color: _palette(accent1-alt);
|
||||
}
|
||||
|
||||
.wrapper.style2 & {
|
||||
color: _palette(accent2);
|
||||
}
|
||||
|
||||
.wrapper.style2-alt & {
|
||||
color: _palette(accent2-alt);
|
||||
}
|
||||
|
||||
.wrapper.style3 & {
|
||||
color: _palette(accent3);
|
||||
}
|
||||
|
||||
.wrapper.style3-alt & {
|
||||
color: _palette(accent3-alt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
31
src/components/magprog/assets/sass/components/_icons.scss
Normal file
@ -0,0 +1,31 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Icons */
|
||||
|
||||
ul.icons {
|
||||
cursor: default;
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
padding: 0 0.75em 0 0;
|
||||
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
> a, > span {
|
||||
border: 0;
|
||||
@include icon;
|
||||
|
||||
.label {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
60
src/components/magprog/assets/sass/components/_image.scss
Normal file
@ -0,0 +1,60 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Image */
|
||||
|
||||
.image {
|
||||
border-radius: _size(border-radius);
|
||||
border: 0;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
|
||||
img {
|
||||
border-radius: _size(border-radius);
|
||||
display: block;
|
||||
}
|
||||
|
||||
&.left,
|
||||
&.right {
|
||||
max-width: 40%;
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&.left {
|
||||
float: left;
|
||||
margin: 0 1.5em 1em 0;
|
||||
top: 0.25em;
|
||||
}
|
||||
|
||||
&.right {
|
||||
float: right;
|
||||
margin: 0 0 1em 1.5em;
|
||||
top: 0.25em;
|
||||
}
|
||||
|
||||
&.fit {
|
||||
display: block;
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
width: 100%;
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&.main {
|
||||
display: block;
|
||||
margin: 0 0 (_size(element-margin) * 1.5) 0;
|
||||
width: 100%;
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
56
src/components/magprog/assets/sass/components/_list.scss
Normal file
@ -0,0 +1,56 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* List */
|
||||
|
||||
ol {
|
||||
list-style: decimal;
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
padding-left: 1.25em;
|
||||
|
||||
li {
|
||||
padding-left: 0.25em;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: disc;
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
padding-left: 1em;
|
||||
|
||||
li {
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
&.alt {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
|
||||
li {
|
||||
border-top: solid _size(border-width) _palette(border);
|
||||
padding: 0.5em 0;
|
||||
|
||||
&:first-child {
|
||||
border-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dl {
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
|
||||
dt {
|
||||
display: block;
|
||||
font-weight: _font(weight-bold);
|
||||
margin: 0 0 (_size(element-margin) * 0.5) 0;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left: _size(element-margin);
|
||||
}
|
||||
}
|
36
src/components/magprog/assets/sass/components/_menu.scss
Normal file
@ -0,0 +1,36 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Menu */
|
||||
|
||||
ul.menu {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
|
||||
> li {
|
||||
border-left: solid 1px _palette(border);
|
||||
display: inline-block;
|
||||
line-height: 1;
|
||||
margin-left: 1.5em;
|
||||
padding: 0 0 0 1.5em;
|
||||
|
||||
&:first-child {
|
||||
border-left: 0;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=xsmall') {
|
||||
> li {
|
||||
border-left: 0;
|
||||
display: block;
|
||||
line-height: inherit;
|
||||
margin: 0.5em 0 0 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
31
src/components/magprog/assets/sass/components/_row.scss
Normal file
@ -0,0 +1,31 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Row */
|
||||
|
||||
.row {
|
||||
@include html-grid(1.5em);
|
||||
|
||||
@include breakpoint('<=xlarge') {
|
||||
@include html-grid(1.5em, 'xlarge');
|
||||
}
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
@include html-grid(1.5em, 'large');
|
||||
}
|
||||
|
||||
@include breakpoint('<=medium') {
|
||||
@include html-grid(1.5em, 'medium');
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
@include html-grid(1.5em, 'small');
|
||||
}
|
||||
|
||||
@include breakpoint('<=xsmall') {
|
||||
@include html-grid(1.5em, 'xsmall');
|
||||
}
|
||||
}
|
41
src/components/magprog/assets/sass/components/_section.scss
Normal file
@ -0,0 +1,41 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Section/Article */
|
||||
|
||||
section, article {
|
||||
&.special {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
header {
|
||||
p {
|
||||
color: _palette(fg-light);
|
||||
position: relative;
|
||||
margin: 0 0 (_size(element-margin) * 0.75) 0;
|
||||
}
|
||||
|
||||
h2 + p {
|
||||
font-size: 1.25em;
|
||||
margin-top: (_size(element-margin) * -0.5);
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
h3 + p {
|
||||
font-size: 1.1em;
|
||||
margin-top: (_size(element-margin) * -0.4);
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
h4 + p,
|
||||
h5 + p,
|
||||
h6 + p {
|
||||
font-size: 0.9em;
|
||||
margin-top: (_size(element-margin) * -0.3);
|
||||
line-height: 1.5em;
|
||||
}
|
||||
}
|
91
src/components/magprog/assets/sass/components/_split.scss
Normal file
@ -0,0 +1,91 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Split */
|
||||
|
||||
.split {
|
||||
@include vendor('display', 'flex');
|
||||
|
||||
> * {
|
||||
width: calc(50% - 2.5em);
|
||||
}
|
||||
|
||||
> :nth-child(2n - 1) {
|
||||
padding-right: 2.5em;
|
||||
border-right: solid 1px _palette(border);
|
||||
}
|
||||
|
||||
> :nth-child(2n) {
|
||||
padding-left: 2.5em;
|
||||
}
|
||||
|
||||
&.style1 {
|
||||
> :nth-child(2n - 1) {
|
||||
width: calc(66.66666% - 2.5em);
|
||||
}
|
||||
|
||||
> :nth-child(2n) {
|
||||
width: calc(33.33333% - 2.5em);
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=xlarge') {
|
||||
> * {
|
||||
width: calc(50% - 2em);
|
||||
}
|
||||
|
||||
> :nth-child(2n - 1) {
|
||||
padding-right: 2em;
|
||||
}
|
||||
|
||||
> :nth-child(2n) {
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
&.style1 {
|
||||
> :nth-child(2n - 1) {
|
||||
width: calc(66.66666% - 2em);
|
||||
}
|
||||
|
||||
> :nth-child(2n) {
|
||||
width: calc(33.33333% - 2em);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=medium') {
|
||||
display: block;
|
||||
|
||||
> * {
|
||||
border-top: solid 1px _palette(border);
|
||||
margin: 4em 0 0 0;
|
||||
padding: 4em 0 0 0;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
> :nth-child(2n - 1) {
|
||||
border-right: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
> :nth-child(2n) {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
> :first-child {
|
||||
border-top: 0;
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
> * {
|
||||
margin: 3em 0 0 0;
|
||||
padding: 3em 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
131
src/components/magprog/assets/sass/components/_spotlights.scss
Normal file
@ -0,0 +1,131 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Spotlights */
|
||||
|
||||
.spotlights {
|
||||
> section {
|
||||
@include vendor('display', 'flex');
|
||||
@include vendor('flex-direction', 'row');
|
||||
min-height: 22.5em;
|
||||
|
||||
body.is-ie & {
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
> .image {
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
border-radius: 0;
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 25em;
|
||||
|
||||
img {
|
||||
border-radius: 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
&:before {
|
||||
@include vendor('transition', 'opacity #{_duration(activation)} ease');
|
||||
background: transparentize(_palette(bg), 0.1);
|
||||
content: '';
|
||||
display: block;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
> .content {
|
||||
@include padding(4em, 5em);
|
||||
@include vendor('display', 'flex');
|
||||
@include vendor('flex-direction', 'column');
|
||||
@include vendor('justify-content', 'center');
|
||||
width: #{_size(inner-width) - 25em};
|
||||
-ms-flex: 1;
|
||||
|
||||
> .inner {
|
||||
@include vendor('transform', 'translateX(0) translateY(0)');
|
||||
@include vendor('transition', (
|
||||
'opacity #{_duration(activation)} ease',
|
||||
'transform #{_duration(activation)} ease'
|
||||
));
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&:nth-child(1) {
|
||||
}
|
||||
|
||||
&:nth-child(2) {
|
||||
background-color: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
&:nth-child(3) {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
&.inactive,
|
||||
body.is-preload & {
|
||||
> .image {
|
||||
&:before {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
> .content {
|
||||
> .inner {
|
||||
@include vendor('transform', 'translateX(-1em)');
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=xlarge') {
|
||||
> .content {
|
||||
@include padding(4em, 4em);
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=medium') {
|
||||
display: block;
|
||||
|
||||
> .image {
|
||||
width: 100%;
|
||||
height: 50vh;
|
||||
}
|
||||
|
||||
> .content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&.inactive,
|
||||
body.is-preload & {
|
||||
> .content {
|
||||
> .inner {
|
||||
@include vendor('transform', 'translateY(1em)');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
> .image {
|
||||
height: 50vh;
|
||||
min-height: 15em;
|
||||
}
|
||||
|
||||
> .content {
|
||||
@include padding(3em, 2em);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
81
src/components/magprog/assets/sass/components/_table.scss
Normal file
@ -0,0 +1,81 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Table */
|
||||
|
||||
.table-wrapper {
|
||||
-webkit-overflow-scrolling: touch;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
table {
|
||||
margin: 0 0 _size(element-margin) 0;
|
||||
width: 100%;
|
||||
|
||||
tbody {
|
||||
tr {
|
||||
border: solid _size(border-width) _palette(border);
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
|
||||
&:nth-child(2n + 1) {
|
||||
background-color: _palette(border-bg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 0.75em 0.75em;
|
||||
}
|
||||
|
||||
th {
|
||||
color: _palette(fg-bold);
|
||||
font-size: 1em;
|
||||
font-weight: _font(weight-bold);
|
||||
padding: 0 0.75em 0.75em 0.75em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
thead {
|
||||
border-bottom: solid (_size(border-width) * 2) _palette(border);
|
||||
}
|
||||
|
||||
tfoot {
|
||||
border-top: solid (_size(border-width) * 2) _palette(border);
|
||||
}
|
||||
|
||||
&.alt {
|
||||
border-collapse: separate;
|
||||
|
||||
tbody {
|
||||
tr {
|
||||
td {
|
||||
border: solid _size(border-width) _palette(border);
|
||||
border-left-width: 0;
|
||||
border-top-width: 0;
|
||||
|
||||
&:first-child {
|
||||
border-left-width: _size(border-width);
|
||||
}
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
td {
|
||||
border-top-width: _size(border-width);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
thead {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
tfoot {
|
||||
border-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
139
src/components/magprog/assets/sass/components/_wrapper.scss
Normal file
@ -0,0 +1,139 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Wrapper */
|
||||
|
||||
.wrapper {
|
||||
position: relative;
|
||||
|
||||
> .inner {
|
||||
@include padding(5em, 5em);
|
||||
max-width: 100%;
|
||||
width: _size(inner-width);
|
||||
|
||||
@include breakpoint('<=xlarge') {
|
||||
@include padding(4em, 4em);
|
||||
}
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
@include padding(3em, 2em);
|
||||
}
|
||||
}
|
||||
|
||||
&.alt {
|
||||
background-color: _palette(bg-alt);
|
||||
}
|
||||
|
||||
&.style1 {
|
||||
background-color: _palette(accent1);
|
||||
}
|
||||
|
||||
&.style1-alt {
|
||||
background-color: _palette(accent1-alt);
|
||||
}
|
||||
|
||||
&.style2 {
|
||||
background-color: _palette(accent2);
|
||||
}
|
||||
|
||||
&.style2-alt {
|
||||
background-color: _palette(accent2-alt);
|
||||
}
|
||||
|
||||
&.style3 {
|
||||
background-color: _palette(accent3);
|
||||
}
|
||||
|
||||
&.style3-alt {
|
||||
background-color: _palette(accent3-alt);
|
||||
}
|
||||
|
||||
&.fullscreen {
|
||||
@include vendor('display', 'flex');
|
||||
@include vendor('flex-direction', 'column');
|
||||
@include vendor('justify-content', 'center');
|
||||
min-height: 100vh;
|
||||
|
||||
body.is-ie & {
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
min-height: calc(100vh - 2.5em);
|
||||
|
||||
body.is-ie & {
|
||||
height: calc(100vh - 2.5em);
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
padding: 2em 0;
|
||||
min-height: 0;
|
||||
|
||||
body.is-ie & {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.fade-up {
|
||||
> .inner {
|
||||
@include vendor('transform', 'translateY(0)');
|
||||
@include vendor('transition', (
|
||||
'opacity #{_duration(activation)} ease',
|
||||
'transform #{_duration(activation)} ease'
|
||||
));
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
&.inactive,
|
||||
body.is-preload & {
|
||||
> .inner {
|
||||
opacity: 0;
|
||||
@include vendor('transform', 'translateY(1em)');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.fade-down {
|
||||
> .inner {
|
||||
@include vendor('transform', 'translateY(0)');
|
||||
@include vendor('transition', (
|
||||
'opacity #{_duration(activation)} ease',
|
||||
'transform #{_duration(activation)} ease'
|
||||
));
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
&.inactive,
|
||||
body.is-preload & {
|
||||
> .inner {
|
||||
opacity: 0;
|
||||
@include vendor('transform', 'translateY(-1em)');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.fade {
|
||||
> .inner {
|
||||
@include vendor('transition', (
|
||||
'opacity #{_duration(activation)} ease'
|
||||
));
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
&.inactive,
|
||||
body.is-preload & {
|
||||
> .inner {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
4
src/components/magprog/assets/sass/font-awesome.min.css
vendored
Normal file
25
src/components/magprog/assets/sass/images/intro.svg
Normal file
@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000px" height="500px"
|
||||
viewBox="0 0 1000 500" zoomAndPan="disable" preserveAspectRatio="none">
|
||||
|
||||
<style type="text/css"><![CDATA[
|
||||
line
|
||||
{
|
||||
stroke: rgba(255,255,255,0.05);
|
||||
stroke-width: 1px;
|
||||
}
|
||||
]]></style>
|
||||
|
||||
<line x1="1100" y1="500" x2="-1000" y2="250"/>
|
||||
<line x1="1100" y1="500" x2="-1000" y2="-100"/>
|
||||
<line x1="1100" y1="500" x2="-1000" y2="-500"/>
|
||||
<line x1="1100" y1="500" x2="-250" y2="-500"/>
|
||||
<line x1="1100" y1="500" x2="300" y2="-500"/>
|
||||
<line x1="1100" y1="500" x2="750" y2="-500"/>
|
||||
|
||||
<line x1="1750" y1="0" x2="750" y2="500"/>
|
||||
<line x1="1500" y1="0" x2="500" y2="500"/>
|
||||
<line x1="1150" y1="0" x2="150" y2="500"/>
|
||||
<line x1="700" y1="0" x2="-300" y2="500"/>
|
||||
<line x1="150" y1="0" x2="-850" y2="500"/>
|
||||
|
||||
</svg>
|
After Width: | Height: | Size: 823 B |
38
src/components/magprog/assets/sass/layout/_footer.scss
Normal file
@ -0,0 +1,38 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Footer */
|
||||
|
||||
#footer {
|
||||
#sidebar + #wrapper + & {
|
||||
margin-left: _size(sidebar-width);
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
> .inner {
|
||||
a {
|
||||
border-bottom-color: _palette(border);
|
||||
|
||||
&:hover {
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.menu {
|
||||
font-size: 0.8em;
|
||||
color: _palette(border);
|
||||
}
|
||||
}
|
||||
|
||||
#header + #wrapper + & {
|
||||
> .inner {
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
}
|
98
src/components/magprog/assets/sass/layout/_header.scss
Normal file
@ -0,0 +1,98 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Header */
|
||||
|
||||
#header {
|
||||
@include vendor('display', 'flex');
|
||||
background-color: _palette(accent1);
|
||||
cursor: default;
|
||||
padding: 1.75em 2em;
|
||||
|
||||
> .title {
|
||||
border: 0;
|
||||
color: _palette(fg-bold);
|
||||
display: block;
|
||||
font-size: 1.25em;
|
||||
font-weight: _font(weight-bold);
|
||||
}
|
||||
|
||||
> nav {
|
||||
@include vendor('flex', '1');
|
||||
text-align: right;
|
||||
|
||||
> ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
> li {
|
||||
display: inline-block;
|
||||
margin-left: 1.75em;
|
||||
padding: 0;
|
||||
vertical-align: middle;
|
||||
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
&.active {
|
||||
a {
|
||||
color: _palette(fg-bold);
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
border: 0;
|
||||
color: _palette(fg-light);
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
font-weight: _font(weight-bold);
|
||||
letter-spacing: _font(kerning-alt);
|
||||
text-transform: uppercase;
|
||||
|
||||
&:hover {
|
||||
color: _palette(fg);
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: _palette(fg-bold);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
padding: 1em 2em;
|
||||
}
|
||||
|
||||
@include breakpoint('<=xsmall') {
|
||||
display: block;
|
||||
padding: 0 2em;
|
||||
text-align: left;
|
||||
|
||||
.title {
|
||||
font-size: 1.25em;
|
||||
padding: 1em 0;
|
||||
}
|
||||
|
||||
> nav {
|
||||
border-top: solid 1px _palette(border);
|
||||
text-align: inherit;
|
||||
|
||||
> ul {
|
||||
> li {
|
||||
margin-left: 1.5em;
|
||||
|
||||
a {
|
||||
height: 6em;
|
||||
line-height: 6em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
33
src/components/magprog/assets/sass/layout/_intro.scss
Normal file
@ -0,0 +1,33 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Intro */
|
||||
|
||||
#intro {
|
||||
background-attachment: fixed;
|
||||
background-image: url('images/intro.svg');
|
||||
background-position: top right;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
|
||||
p {
|
||||
font-size: 1.25em;
|
||||
|
||||
@include breakpoint('<=medium') {
|
||||
br {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
font-size: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
background-attachment: scroll;
|
||||
}
|
||||
}
|
205
src/components/magprog/assets/sass/layout/_sidebar.scss
Normal file
@ -0,0 +1,205 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Sidebar */
|
||||
|
||||
#sidebar {
|
||||
@include padding(2.5em, 2.5em);
|
||||
background: _palette(bg);
|
||||
cursor: default;
|
||||
height: 100vh;
|
||||
left: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
position: fixed;
|
||||
text-align: right;
|
||||
top: 0;
|
||||
width: _size(sidebar-width);
|
||||
z-index: _misc(z-index-base);
|
||||
|
||||
> .inner {
|
||||
@include vendor('display', 'flex');
|
||||
@include vendor('flex-direction', 'column');
|
||||
@include vendor('justify-content', 'center');
|
||||
@include vendor('transform', 'translateY(0)');
|
||||
@include vendor('transition', ('opacity #{_duration(activation)} ease'));
|
||||
min-height: 100%;
|
||||
opacity: 1;
|
||||
width: 100%;
|
||||
|
||||
body.is-ie & {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
> ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
|
||||
> li {
|
||||
@include vendor('transform', 'translateY(0)');
|
||||
@include vendor(
|
||||
'transition',
|
||||
(
|
||||
'opacity #{_duration(activation) * 0.15} ease',
|
||||
'transform #{_duration(activation) * 0.75} ease'
|
||||
)
|
||||
);
|
||||
margin: 1.5em 0 0 0;
|
||||
opacity: 1;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
|
||||
&:first-child {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@for $i from 1 through _misc(max-sidebar-links) {
|
||||
&:nth-child(#{$i}) {
|
||||
@include vendor(
|
||||
'transition-delay',
|
||||
'#{(_duration(activation) * 0.2 * $i) + (_duration(activation) * 0.25)}'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
a {
|
||||
color: _palette(fg-bold);
|
||||
|
||||
&:after {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
@include vendor('transition', 'color #{_duration(transition)} ease');
|
||||
border: 0;
|
||||
color: _palette(fg-light);
|
||||
display: block;
|
||||
font-size: 0.6em;
|
||||
font-weight: _font(weight-bold);
|
||||
letter-spacing: _font(kerning-alt);
|
||||
line-height: 1.75;
|
||||
outline: 0;
|
||||
padding: 1.35em 0;
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
border-radius: 0.2em;
|
||||
bottom: 0;
|
||||
content: '';
|
||||
height: 0.2em;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&:before {
|
||||
background: lighten(_palette(bg), 5);
|
||||
}
|
||||
|
||||
&:after {
|
||||
@include vendor(
|
||||
'background-image',
|
||||
'linear-gradient(to right, #{_palette(accent1)}, #{_palette(accent3)})'
|
||||
);
|
||||
@include vendor(
|
||||
'transition',
|
||||
'max-width #{_duration(transition)} ease'
|
||||
);
|
||||
max-width: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: _palette(fg);
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: _palette(fg-bold);
|
||||
|
||||
&:after {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body.is-preload & {
|
||||
> .inner {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
nav {
|
||||
ul {
|
||||
li {
|
||||
@include vendor('transform', 'translateY(2em)');
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
height: _size(sidebar-height);
|
||||
left: 0;
|
||||
line-height: _size(sidebar-height);
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
|
||||
> .inner {
|
||||
@include vendor('flex-direction', 'row');
|
||||
@include vendor('align-items', 'stretch');
|
||||
height: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
nav {
|
||||
height: inherit;
|
||||
line-height: inherit;
|
||||
|
||||
ul {
|
||||
@include vendor('display', 'flex');
|
||||
height: inherit;
|
||||
line-height: inherit;
|
||||
margin: 0;
|
||||
|
||||
li {
|
||||
display: block;
|
||||
height: inherit;
|
||||
line-height: inherit;
|
||||
margin: 0 0 0 2em;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
height: inherit;
|
||||
line-height: inherit;
|
||||
padding: 0;
|
||||
|
||||
&:after {
|
||||
background-image: none;
|
||||
background-color: _palette(accent3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
display: none;
|
||||
}
|
||||
}
|
30
src/components/magprog/assets/sass/layout/_wrapper.scss
Normal file
@ -0,0 +1,30 @@
|
||||
///
|
||||
/// Hyperspace by HTML5 UP
|
||||
/// html5up.net | @ajlkn
|
||||
/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
///
|
||||
|
||||
/* Wrapper (main) */
|
||||
|
||||
#wrapper {
|
||||
#sidebar + & {
|
||||
margin-left: _size(sidebar-width);
|
||||
|
||||
@include breakpoint('<=large') {
|
||||
margin-left: 0;
|
||||
padding-top: _size(sidebar-height);
|
||||
}
|
||||
|
||||
@include breakpoint('<=small') {
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#header + & {
|
||||
> .wrapper {
|
||||
> .inner {
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
223
src/components/magprog/assets/sass/libs/_breakpoints.scss
Normal file
@ -0,0 +1,223 @@
|
||||
// breakpoints.scss v1.0 | @ajlkn | MIT licensed */
|
||||
|
||||
// Vars.
|
||||
|
||||
/// Breakpoints.
|
||||
/// @var {list}
|
||||
$breakpoints: () !global;
|
||||
|
||||
// Mixins.
|
||||
|
||||
/// Sets breakpoints.
|
||||
/// @param {map} $x Breakpoints.
|
||||
@mixin breakpoints($x: ()) {
|
||||
$breakpoints: $x !global;
|
||||
}
|
||||
|
||||
/// Wraps @content in a @media block targeting a specific orientation.
|
||||
/// @param {string} $orientation Orientation.
|
||||
@mixin orientation($orientation) {
|
||||
@media screen and (orientation: #{$orientation}) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
/// Wraps @content in a @media block using a given query.
|
||||
/// @param {string} $query Query.
|
||||
@mixin breakpoint($query: null) {
|
||||
|
||||
$breakpoint: null;
|
||||
$op: null;
|
||||
$media: null;
|
||||
|
||||
// Determine operator, breakpoint.
|
||||
|
||||
// Greater than or equal.
|
||||
@if (str-slice($query, 0, 2) == '>=') {
|
||||
|
||||
$op: 'gte';
|
||||
$breakpoint: str-slice($query, 3);
|
||||
|
||||
}
|
||||
|
||||
// Less than or equal.
|
||||
@else if (str-slice($query, 0, 2) == '<=') {
|
||||
|
||||
$op: 'lte';
|
||||
$breakpoint: str-slice($query, 3);
|
||||
|
||||
}
|
||||
|
||||
// Greater than.
|
||||
@else if (str-slice($query, 0, 1) == '>') {
|
||||
|
||||
$op: 'gt';
|
||||
$breakpoint: str-slice($query, 2);
|
||||
|
||||
}
|
||||
|
||||
// Less than.
|
||||
@else if (str-slice($query, 0, 1) == '<') {
|
||||
|
||||
$op: 'lt';
|
||||
$breakpoint: str-slice($query, 2);
|
||||
|
||||
}
|
||||
|
||||
// Not.
|
||||
@else if (str-slice($query, 0, 1) == '!') {
|
||||
|
||||
$op: 'not';
|
||||
$breakpoint: str-slice($query, 2);
|
||||
|
||||
}
|
||||
|
||||
// Equal.
|
||||
@else {
|
||||
|
||||
$op: 'eq';
|
||||
$breakpoint: $query;
|
||||
|
||||
}
|
||||
|
||||
// Build media.
|
||||
@if ($breakpoint and map-has-key($breakpoints, $breakpoint)) {
|
||||
|
||||
$a: map-get($breakpoints, $breakpoint);
|
||||
|
||||
// Range.
|
||||
@if (type-of($a) == 'list') {
|
||||
|
||||
$x: nth($a, 1);
|
||||
$y: nth($a, 2);
|
||||
|
||||
// Max only.
|
||||
@if ($x == null) {
|
||||
|
||||
// Greater than or equal (>= 0 / anything)
|
||||
@if ($op == 'gte') {
|
||||
$media: 'screen';
|
||||
}
|
||||
|
||||
// Less than or equal (<= y)
|
||||
@else if ($op == 'lte') {
|
||||
$media: 'screen and (max-width: ' + $y + ')';
|
||||
}
|
||||
|
||||
// Greater than (> y)
|
||||
@else if ($op == 'gt') {
|
||||
$media: 'screen and (min-width: ' + ($y + 1) + ')';
|
||||
}
|
||||
|
||||
// Less than (< 0 / invalid)
|
||||
@else if ($op == 'lt') {
|
||||
$media: 'screen and (max-width: -1px)';
|
||||
}
|
||||
|
||||
// Not (> y)
|
||||
@else if ($op == 'not') {
|
||||
$media: 'screen and (min-width: ' + ($y + 1) + ')';
|
||||
}
|
||||
|
||||
// Equal (<= y)
|
||||
@else {
|
||||
$media: 'screen and (max-width: ' + $y + ')';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Min only.
|
||||
@else if ($y == null) {
|
||||
|
||||
// Greater than or equal (>= x)
|
||||
@if ($op == 'gte') {
|
||||
$media: 'screen and (min-width: ' + $x + ')';
|
||||
}
|
||||
|
||||
// Less than or equal (<= inf / anything)
|
||||
@else if ($op == 'lte') {
|
||||
$media: 'screen';
|
||||
}
|
||||
|
||||
// Greater than (> inf / invalid)
|
||||
@else if ($op == 'gt') {
|
||||
$media: 'screen and (max-width: -1px)';
|
||||
}
|
||||
|
||||
// Less than (< x)
|
||||
@else if ($op == 'lt') {
|
||||
$media: 'screen and (max-width: ' + ($x - 1) + ')';
|
||||
}
|
||||
|
||||
// Not (< x)
|
||||
@else if ($op == 'not') {
|
||||
$media: 'screen and (max-width: ' + ($x - 1) + ')';
|
||||
}
|
||||
|
||||
// Equal (>= x)
|
||||
@else {
|
||||
$media: 'screen and (min-width: ' + $x + ')';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Min and max.
|
||||
@else {
|
||||
|
||||
// Greater than or equal (>= x)
|
||||
@if ($op == 'gte') {
|
||||
$media: 'screen and (min-width: ' + $x + ')';
|
||||
}
|
||||
|
||||
// Less than or equal (<= y)
|
||||
@else if ($op == 'lte') {
|
||||
$media: 'screen and (max-width: ' + $y + ')';
|
||||
}
|
||||
|
||||
// Greater than (> y)
|
||||
@else if ($op == 'gt') {
|
||||
$media: 'screen and (min-width: ' + ($y + 1) + ')';
|
||||
}
|
||||
|
||||
// Less than (< x)
|
||||
@else if ($op == 'lt') {
|
||||
$media: 'screen and (max-width: ' + ($x - 1) + ')';
|
||||
}
|
||||
|
||||
// Not (< x and > y)
|
||||
@else if ($op == 'not') {
|
||||
$media: 'screen and (max-width: ' + ($x - 1) + '), screen and (min-width: ' + ($y + 1) + ')';
|
||||
}
|
||||
|
||||
// Equal (>= x and <= y)
|
||||
@else {
|
||||
$media: 'screen and (min-width: ' + $x + ') and (max-width: ' + $y + ')';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// String.
|
||||
@else {
|
||||
|
||||
// Missing a media type? Prefix with "screen".
|
||||
@if (str-slice($a, 0, 1) == '(') {
|
||||
$media: 'screen and ' + $a;
|
||||
}
|
||||
|
||||
// Otherwise, use as-is.
|
||||
@else {
|
||||
$media: $a;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Output.
|
||||
@media #{$media} {
|
||||
@content;
|
||||
}
|
||||
|
||||
}
|
87
src/components/magprog/assets/sass/libs/_functions.scss
Normal file
@ -0,0 +1,87 @@
|
||||
/// Removes a specific item from a list.
|
||||
/// @author Hugo Giraudel
|
||||
/// @param {list} $list List.
|
||||
/// @param {integer} $index Index.
|
||||
/// @return {list} Updated list.
|
||||
@function remove-nth($list, $index) {
|
||||
|
||||
$result: null;
|
||||
|
||||
@if type-of($index) != number {
|
||||
@warn "$index: #{quote($index)} is not a number for `remove-nth`.";
|
||||
} @else if $index == 0 {
|
||||
@warn "List index 0 must be a non-zero integer for `remove-nth`.";
|
||||
} @else if abs($index) > length($list) {
|
||||
@warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
|
||||
} @else {
|
||||
|
||||
$result: ();
|
||||
$index: if($index < 0, length($list) + $index + 1, $index);
|
||||
|
||||
@for $i from 1 through length($list) {
|
||||
|
||||
@if $i != $index {
|
||||
$result: append($result, nth($list, $i));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@return $result;
|
||||
|
||||
}
|
||||
|
||||
/// Gets a value from a map.
|
||||
/// @author Hugo Giraudel
|
||||
/// @param {map} $map Map.
|
||||
/// @param {string} $keys Key(s).
|
||||
/// @return {string} Value.
|
||||
@function val($map, $keys...) {
|
||||
|
||||
@if nth($keys, 1) == null {
|
||||
$keys: remove-nth($keys, 1);
|
||||
}
|
||||
|
||||
@each $key in $keys {
|
||||
$map: map-get($map, $key);
|
||||
}
|
||||
|
||||
@return $map;
|
||||
|
||||
}
|
||||
|
||||
/// Gets a duration value.
|
||||
/// @param {string} $keys Key(s).
|
||||
/// @return {string} Value.
|
||||
@function _duration($keys...) {
|
||||
@return val($duration, $keys...);
|
||||
}
|
||||
|
||||
/// Gets a font value.
|
||||
/// @param {string} $keys Key(s).
|
||||
/// @return {string} Value.
|
||||
@function _font($keys...) {
|
||||
@return val($font, $keys...);
|
||||
}
|
||||
|
||||
/// Gets a misc value.
|
||||
/// @param {string} $keys Key(s).
|
||||
/// @return {string} Value.
|
||||
@function _misc($keys...) {
|
||||
@return val($misc, $keys...);
|
||||
}
|
||||
|
||||
/// Gets a palette value.
|
||||
/// @param {string} $keys Key(s).
|
||||
/// @return {string} Value.
|
||||
@function _palette($keys...) {
|
||||
@return val($palette, $keys...);
|
||||
}
|
||||
|
||||
/// Gets a size value.
|
||||
/// @param {string} $keys Key(s).
|
||||
/// @return {string} Value.
|
||||
@function _size($keys...) {
|
||||
@return val($size, $keys...);
|
||||
}
|
146
src/components/magprog/assets/sass/libs/_html-grid.scss
Normal file
@ -0,0 +1,146 @@
|
||||
// html-grid.scss v1.0 | @ajlkn | MIT licensed */
|
||||
|
||||
// Mixins.
|
||||
|
||||
/// Initializes the current element as an HTML grid.
|
||||
/// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually).
|
||||
/// @param {mixed} $suffix Column class suffix (optional; either a single suffix or a list).
|
||||
@mixin html-grid($gutters: 1.5em, $suffix: '') {
|
||||
|
||||
// Initialize.
|
||||
$cols: 12;
|
||||
$multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00;
|
||||
$unit: 100% / $cols;
|
||||
|
||||
// Suffixes.
|
||||
$suffixes: null;
|
||||
|
||||
@if (type-of($suffix) == 'list') {
|
||||
$suffixes: $suffix;
|
||||
} @else {
|
||||
$suffixes: ($suffix);
|
||||
}
|
||||
|
||||
// Gutters.
|
||||
$guttersCols: null;
|
||||
$guttersRows: null;
|
||||
|
||||
@if (type-of($gutters) == 'list') {
|
||||
|
||||
$guttersCols: nth($gutters, 1);
|
||||
$guttersRows: nth($gutters, 2);
|
||||
|
||||
} @else {
|
||||
|
||||
$guttersCols: $gutters;
|
||||
$guttersRows: 0;
|
||||
|
||||
}
|
||||
|
||||
// Row.
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
box-sizing: border-box;
|
||||
align-items: stretch;
|
||||
|
||||
// Columns.
|
||||
> * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
// Gutters.
|
||||
&.gtr-uniform {
|
||||
> * {
|
||||
> :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Alignment.
|
||||
&.aln-left {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
&.aln-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
&.aln-right {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
&.aln-top {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
&.aln-middle {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&.aln-bottom {
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
// Step through suffixes.
|
||||
@each $suffix in $suffixes {
|
||||
|
||||
// Suffix.
|
||||
@if ($suffix != '') {
|
||||
$suffix: '-' + $suffix;
|
||||
} @else {
|
||||
$suffix: '';
|
||||
}
|
||||
|
||||
// Row.
|
||||
|
||||
// Important.
|
||||
> .imp#{$suffix} {
|
||||
order: -1;
|
||||
}
|
||||
|
||||
// Columns, offsets.
|
||||
@for $i from 1 through $cols {
|
||||
> .col-#{$i}#{$suffix} {
|
||||
width: $unit * $i;
|
||||
}
|
||||
|
||||
> .off-#{$i}#{$suffix} {
|
||||
margin-left: $unit * $i;
|
||||
}
|
||||
}
|
||||
|
||||
// Step through multipliers.
|
||||
@each $multiplier in $multipliers {
|
||||
|
||||
// Gutters.
|
||||
$class: null;
|
||||
|
||||
@if ($multiplier != 1) {
|
||||
$class: '.gtr-' + ($multiplier * 100);
|
||||
}
|
||||
|
||||
&#{$class} {
|
||||
margin-top: ($guttersRows * $multiplier * -1);
|
||||
margin-left: ($guttersCols * $multiplier * -1);
|
||||
|
||||
> * {
|
||||
padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier);
|
||||
}
|
||||
|
||||
// Uniform.
|
||||
&.gtr-uniform {
|
||||
margin-top: $guttersCols * $multiplier * -1;
|
||||
|
||||
> * {
|
||||
padding-top: $guttersCols * $multiplier;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
63
src/components/magprog/assets/sass/libs/_mixins.scss
Normal file
@ -0,0 +1,63 @@
|
||||
/// Makes an element's :before pseudoelement a FontAwesome icon.
|
||||
/// @param {string} $content Optional content value to use.
|
||||
/// @param {string} $where Optional pseudoelement to target (before or after).
|
||||
@mixin icon($content: false, $where: before) {
|
||||
|
||||
text-decoration: none;
|
||||
|
||||
&:#{$where} {
|
||||
|
||||
@if $content {
|
||||
content: $content;
|
||||
}
|
||||
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-family: FontAwesome;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
text-transform: none !important;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Applies padding to an element, taking the current element-margin value into account.
|
||||
/// @param {mixed} $tb Top/bottom padding.
|
||||
/// @param {mixed} $lr Left/right padding.
|
||||
/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left)
|
||||
/// @param {bool} $important If true, adds !important.
|
||||
@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) {
|
||||
|
||||
@if $important {
|
||||
$important: '!important';
|
||||
}
|
||||
|
||||
$x: 0.1em;
|
||||
|
||||
@if unit(_size(element-margin)) == 'rem' {
|
||||
$x: 0.1rem;
|
||||
}
|
||||
|
||||
padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad, 3)) ($lr + nth($pad,4)) #{$important};
|
||||
|
||||
}
|
||||
|
||||
/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp).
|
||||
/// @param {string} $svg SVG data URL.
|
||||
/// @return {string} Encoded SVG data URL.
|
||||
@function svg-url($svg) {
|
||||
|
||||
$svg: str-replace($svg, '"', '\'');
|
||||
$svg: str-replace($svg, '%', '%25');
|
||||
$svg: str-replace($svg, '<', '%3C');
|
||||
$svg: str-replace($svg, '>', '%3E');
|
||||
$svg: str-replace($svg, '&', '%26');
|
||||
$svg: str-replace($svg, '#', '%23');
|
||||
$svg: str-replace($svg, '{', '%7B');
|
||||
$svg: str-replace($svg, '}', '%7D');
|
||||
$svg: str-replace($svg, ';', '%3B');
|
||||
|
||||
@return url("data:image/svg+xml;charset=utf8,#{$svg}");
|
||||
|
||||
}
|
49
src/components/magprog/assets/sass/libs/_vars.scss
Normal file
@ -0,0 +1,49 @@
|
||||
// Misc.
|
||||
$misc: (
|
||||
z-index-base: 10000,
|
||||
max-features: 20,
|
||||
max-sidebar-links: 20
|
||||
);
|
||||
|
||||
// Duration.
|
||||
$duration: (
|
||||
transition: 0.2s,
|
||||
activation: 1s
|
||||
);
|
||||
|
||||
// Size.
|
||||
$size: (
|
||||
border-radius: 0.25em,
|
||||
border-width: 1px,
|
||||
element-height: 2.75em,
|
||||
element-margin: 2em,
|
||||
sidebar-width: 18em,
|
||||
sidebar-height: 3.5em, // when <=large is active
|
||||
inner-width: 75em
|
||||
);
|
||||
|
||||
// Font.
|
||||
$font: (
|
||||
family: (Arial, Helvetica, sans-serif),
|
||||
family-fixed: ('Courier New', monospace),
|
||||
weight: normal,
|
||||
weight-bold: bold,
|
||||
kerning-alt: 0.25em
|
||||
);
|
||||
|
||||
// Palette.
|
||||
$palette: (
|
||||
bg: #312450,
|
||||
bg-alt: darken(#312450, 5),
|
||||
fg: rgba(255, 255, 255, 0.55),
|
||||
fg-bold: #ffffff,
|
||||
fg-light: rgba(255, 255, 255, 0.35),
|
||||
border: rgba(255, 255, 255, 0.15),
|
||||
border-bg: rgba(255, 255, 255, 0.05),
|
||||
accent1: #5e42a6,
|
||||
accent1-alt: darken(#5e42a6, 10),
|
||||
accent2: #5052b5,
|
||||
accent2-alt: darken(#5052b5, 10),
|
||||
accent3: #b74e91,
|
||||
accent3-alt: darken(#b74e91, 10)
|
||||
);
|
336
src/components/magprog/assets/sass/libs/_vendor.scss
Normal file
@ -0,0 +1,336 @@
|
||||
// vendor.scss v1.0 | @ajlkn | MIT licensed */
|
||||
|
||||
// Vars.
|
||||
|
||||
/// Vendor prefixes.
|
||||
/// @var {list}
|
||||
$vendor-prefixes: (
|
||||
'-moz-',
|
||||
'-webkit-',
|
||||
'-ms-',
|
||||
''
|
||||
);
|
||||
|
||||
/// Properties that should be vendorized.
|
||||
/// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org
|
||||
/// @var {list}
|
||||
$vendor-properties: (
|
||||
// Animation.
|
||||
'animation',
|
||||
'animation-delay',
|
||||
'animation-direction',
|
||||
'animation-duration',
|
||||
'animation-fill-mode',
|
||||
'animation-iteration-count',
|
||||
'animation-name',
|
||||
'animation-play-state',
|
||||
'animation-timing-function',
|
||||
// Appearance.
|
||||
'appearance',
|
||||
// Backdrop filter.
|
||||
'backdrop-filter',
|
||||
// Background image options.
|
||||
'background-clip',
|
||||
'background-origin',
|
||||
'background-size',
|
||||
// Box sizing.
|
||||
'box-sizing',
|
||||
// Clip path.
|
||||
'clip-path',
|
||||
// Filter effects.
|
||||
'filter',
|
||||
// Flexbox.
|
||||
'align-content',
|
||||
'align-items',
|
||||
'align-self',
|
||||
'flex',
|
||||
'flex-basis',
|
||||
'flex-direction',
|
||||
'flex-flow',
|
||||
'flex-grow',
|
||||
'flex-shrink',
|
||||
'flex-wrap',
|
||||
'justify-content',
|
||||
'order',
|
||||
// Font feature.
|
||||
'font-feature-settings',
|
||||
'font-language-override',
|
||||
'font-variant-ligatures',
|
||||
// Font kerning.
|
||||
'font-kerning',
|
||||
// Fragmented borders and backgrounds.
|
||||
'box-decoration-break',
|
||||
// Grid layout.
|
||||
'grid-column',
|
||||
'grid-column-align',
|
||||
'grid-column-end',
|
||||
'grid-column-start',
|
||||
'grid-row',
|
||||
'grid-row-align',
|
||||
'grid-row-end',
|
||||
'grid-row-start',
|
||||
'grid-template-columns',
|
||||
'grid-template-rows',
|
||||
// Hyphens.
|
||||
'hyphens',
|
||||
'word-break',
|
||||
// Masks.
|
||||
'mask',
|
||||
'mask-border',
|
||||
'mask-border-outset',
|
||||
'mask-border-repeat',
|
||||
'mask-border-slice',
|
||||
'mask-border-source',
|
||||
'mask-border-width',
|
||||
'mask-clip',
|
||||
'mask-composite',
|
||||
'mask-image',
|
||||
'mask-origin',
|
||||
'mask-position',
|
||||
'mask-repeat',
|
||||
'mask-size',
|
||||
// Multicolumn.
|
||||
'break-after',
|
||||
'break-before',
|
||||
'break-inside',
|
||||
'column-count',
|
||||
'column-fill',
|
||||
'column-gap',
|
||||
'column-rule',
|
||||
'column-rule-color',
|
||||
'column-rule-style',
|
||||
'column-rule-width',
|
||||
'column-span',
|
||||
'column-width',
|
||||
'columns',
|
||||
// Object fit.
|
||||
'object-fit',
|
||||
'object-position',
|
||||
// Regions.
|
||||
'flow-from',
|
||||
'flow-into',
|
||||
'region-fragment',
|
||||
// Scroll snap points.
|
||||
'scroll-snap-coordinate',
|
||||
'scroll-snap-destination',
|
||||
'scroll-snap-points-x',
|
||||
'scroll-snap-points-y',
|
||||
'scroll-snap-type',
|
||||
// Shapes.
|
||||
'shape-image-threshold',
|
||||
'shape-margin',
|
||||
'shape-outside',
|
||||
// Tab size.
|
||||
'tab-size',
|
||||
// Text align last.
|
||||
'text-align-last',
|
||||
// Text decoration.
|
||||
'text-decoration-color',
|
||||
'text-decoration-line',
|
||||
'text-decoration-skip',
|
||||
'text-decoration-style',
|
||||
// Text emphasis.
|
||||
'text-emphasis',
|
||||
'text-emphasis-color',
|
||||
'text-emphasis-position',
|
||||
'text-emphasis-style',
|
||||
// Text size adjust.
|
||||
'text-size-adjust',
|
||||
// Text spacing.
|
||||
'text-spacing',
|
||||
// Transform.
|
||||
'transform',
|
||||
'transform-origin',
|
||||
// Transform 3D.
|
||||
'backface-visibility',
|
||||
'perspective',
|
||||
'perspective-origin',
|
||||
'transform-style',
|
||||
// Transition.
|
||||
'transition',
|
||||
'transition-delay',
|
||||
'transition-duration',
|
||||
'transition-property',
|
||||
'transition-timing-function',
|
||||
// Unicode bidi.
|
||||
'unicode-bidi',
|
||||
// User select.
|
||||
'user-select',
|
||||
// Writing mode.
|
||||
'writing-mode',
|
||||
);
|
||||
|
||||
/// Values that should be vendorized.
|
||||
/// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org
|
||||
/// @var {list}
|
||||
$vendor-values: (
|
||||
// Cross fade.
|
||||
'cross-fade',
|
||||
// Element function.
|
||||
'element',
|
||||
// Filter function.
|
||||
'filter',
|
||||
// Flexbox.
|
||||
'flex',
|
||||
'inline-flex',
|
||||
// Grab cursors.
|
||||
'grab',
|
||||
'grabbing',
|
||||
// Gradients.
|
||||
'linear-gradient',
|
||||
'repeating-linear-gradient',
|
||||
'radial-gradient',
|
||||
'repeating-radial-gradient',
|
||||
// Grid layout.
|
||||
'grid',
|
||||
'inline-grid',
|
||||
// Image set.
|
||||
'image-set',
|
||||
// Intrinsic width.
|
||||
'max-content',
|
||||
'min-content',
|
||||
'fit-content',
|
||||
'fill',
|
||||
'fill-available',
|
||||
'stretch',
|
||||
// Sticky position.
|
||||
'sticky',
|
||||
// Transform.
|
||||
'transform',
|
||||
// Zoom cursors.
|
||||
'zoom-in',
|
||||
'zoom-out',
|
||||
);
|
||||
|
||||
// Functions.
|
||||
|
||||
/// Removes a specific item from a list.
|
||||
/// @author Hugo Giraudel
|
||||
/// @param {list} $list List.
|
||||
/// @param {integer} $index Index.
|
||||
/// @return {list} Updated list.
|
||||
@function remove-nth($list, $index) {
|
||||
|
||||
$result: null;
|
||||
|
||||
@if type-of($index) != number {
|
||||
@warn "$index: #{quote($index)} is not a number for `remove-nth`.";
|
||||
} @else if $index == 0 {
|
||||
@warn "List index 0 must be a non-zero integer for `remove-nth`.";
|
||||
} @else if abs($index) > length($list) {
|
||||
@warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
|
||||
} @else {
|
||||
|
||||
$result: ();
|
||||
$index: if($index < 0, length($list) + $index + 1, $index);
|
||||
|
||||
@for $i from 1 through length($list) {
|
||||
|
||||
@if $i != $index {
|
||||
$result: append($result, nth($list, $i));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@return $result;
|
||||
|
||||
}
|
||||
|
||||
/// Replaces a substring within another string.
|
||||
/// @author Hugo Giraudel
|
||||
/// @param {string} $string String.
|
||||
/// @param {string} $search Substring.
|
||||
/// @param {string} $replace Replacement.
|
||||
/// @return {string} Updated string.
|
||||
@function str-replace($string, $search, $replace: '') {
|
||||
|
||||
$index: str-index($string, $search);
|
||||
|
||||
@if $index {
|
||||
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
|
||||
}
|
||||
|
||||
@return $string;
|
||||
|
||||
}
|
||||
|
||||
/// Replaces a substring within each string in a list.
|
||||
/// @param {list} $strings List of strings.
|
||||
/// @param {string} $search Substring.
|
||||
/// @param {string} $replace Replacement.
|
||||
/// @return {list} Updated list of strings.
|
||||
@function str-replace-all($strings, $search, $replace: '') {
|
||||
|
||||
@each $string in $strings {
|
||||
$strings: set-nth($strings, index($strings, $string), str-replace($string, $search, $replace));
|
||||
}
|
||||
|
||||
@return $strings;
|
||||
|
||||
}
|
||||
|
||||
// Mixins.
|
||||
|
||||
/// Wraps @content in vendorized keyframe blocks.
|
||||
/// @param {string} $name Name.
|
||||
@mixin keyframes($name) {
|
||||
|
||||
@-moz-keyframes #{$name} {
|
||||
@content;
|
||||
}
|
||||
@-webkit-keyframes #{$name} {
|
||||
@content;
|
||||
}
|
||||
@-ms-keyframes #{$name} {
|
||||
@content;
|
||||
}
|
||||
@keyframes #{$name} {
|
||||
@content;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Vendorizes a declaration's property and/or value(s).
|
||||
/// @param {string} $property Property.
|
||||
/// @param {mixed} $value String/list of value(s).
|
||||
@mixin vendor($property, $value) {
|
||||
|
||||
// Determine if property should expand.
|
||||
$expandProperty: index($vendor-properties, $property);
|
||||
|
||||
// Determine if value should expand (and if so, add '-prefix-' placeholder).
|
||||
$expandValue: false;
|
||||
|
||||
@each $x in $value {
|
||||
@each $y in $vendor-values {
|
||||
@if $y == str-slice($x, 1, str-length($y)) {
|
||||
|
||||
$value: set-nth($value, index($value, $x), '-prefix-' + $x);
|
||||
$expandValue: true;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Expand property?
|
||||
@if $expandProperty {
|
||||
@each $vendor in $vendor-prefixes {
|
||||
#{$vendor}#{$property}: #{str-replace-all($value, '-prefix-', $vendor)};
|
||||
}
|
||||
}
|
||||
|
||||
// Expand just the value?
|
||||
@else if $expandValue {
|
||||
@each $vendor in $vendor-prefixes {
|
||||
#{$property}: #{str-replace-all($value, '-prefix-', $vendor)};
|
||||
}
|
||||
}
|
||||
|
||||
// Neither? Treat them as a normal declaration.
|
||||
@else {
|
||||
#{$property}: #{$value};
|
||||
}
|
||||
|
||||
}
|
57
src/components/magprog/assets/sass/magprog-noscript.scss
Normal file
@ -0,0 +1,57 @@
|
||||
@import 'libs/vars';
|
||||
@import 'libs/functions';
|
||||
@import 'libs/mixins';
|
||||
@import 'libs/vendor';
|
||||
@import 'libs/breakpoints';
|
||||
@import 'libs/html-grid';
|
||||
|
||||
/*
|
||||
Hyperspace by HTML5 UP
|
||||
html5up.net | @ajlkn
|
||||
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
*/
|
||||
|
||||
/* Spotlights */
|
||||
|
||||
.spotlights {
|
||||
> section {
|
||||
> .image {
|
||||
&:before {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
> .content {
|
||||
> .inner {
|
||||
@include vendor('transform', 'none !important');
|
||||
opacity: 1 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Wrapper */
|
||||
|
||||
.wrapper {
|
||||
> .inner {
|
||||
opacity: 1 !important;
|
||||
@include vendor('transform', 'none !important');
|
||||
}
|
||||
}
|
||||
|
||||
/* Sidebar */
|
||||
|
||||
#sidebar {
|
||||
> .inner {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
nav {
|
||||
> ul {
|
||||
> li {
|
||||
@include vendor('transform', 'none !important');
|
||||
opacity: 1 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
81
src/components/magprog/assets/sass/magprog.scss
Normal file
@ -0,0 +1,81 @@
|
||||
@import 'libs/vars';
|
||||
@import 'libs/functions';
|
||||
@import 'libs/mixins';
|
||||
@import 'libs/vendor';
|
||||
@import 'libs/breakpoints';
|
||||
@import 'libs/html-grid';
|
||||
@import 'font-awesome.min.css';
|
||||
|
||||
.magprog {
|
||||
|
||||
/*
|
||||
Hyperspace by HTML5 UP
|
||||
html5up.net | @ajlkn
|
||||
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
*/
|
||||
|
||||
// Breakpoints.
|
||||
|
||||
@include breakpoints((
|
||||
xlarge: (1281px, 1680px),
|
||||
large: (981px, 1280px),
|
||||
medium: (737px, 980px),
|
||||
small: (481px, 736px),
|
||||
xsmall: (361px, 480px),
|
||||
xxsmall: (null, 360px)
|
||||
));
|
||||
|
||||
// Base.
|
||||
|
||||
@import 'base/reset';
|
||||
@import 'base/page';
|
||||
@import 'base/typography';
|
||||
|
||||
// Component.
|
||||
|
||||
@import 'components/row';
|
||||
@import 'components/box';
|
||||
@import 'components/button';
|
||||
@import 'components/features';
|
||||
@import 'components/form';
|
||||
@import 'components/icon';
|
||||
@import 'components/image';
|
||||
@import 'components/list';
|
||||
@import 'components/actions';
|
||||
@import 'components/contact';
|
||||
@import 'components/icons';
|
||||
@import 'components/menu';
|
||||
@import 'components/section';
|
||||
@import 'components/split';
|
||||
@import 'components/spotlights';
|
||||
@import 'components/table';
|
||||
@import 'components/wrapper';
|
||||
|
||||
// Layout.
|
||||
|
||||
@import 'layout/sidebar';
|
||||
@import 'layout/intro';
|
||||
|
||||
|
||||
#site-navbar {
|
||||
.container {
|
||||
max-width: 1160px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
padding: 0 15px 0 15px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
a.nav-item {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
z-index: 100000;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@import 'layout/footer';
|
||||
@import 'layout/header';
|
||||
@import 'layout/wrapper';
|
@ -4,30 +4,35 @@ import Helmet from 'react-helmet';
|
||||
import {injectIntl, useIntl} from "react-intl";
|
||||
import SEO from "../../seo";
|
||||
import NpmNavbar from "../../navBar";
|
||||
import {withPrefix} from "gatsby";
|
||||
|
||||
import "../../../styles/layout.css"
|
||||
import "../../../styles/main.css"
|
||||
import "katex/dist/katex.min.css"
|
||||
import '../assets/sass/magprog.scss'
|
||||
|
||||
const MagProgLayout = ({children}) => {
|
||||
const intl = useIntl();
|
||||
const lang = intl.locale;
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<SEO lang={lang} title={intl.formatMessage({id: "title"})}/>
|
||||
<Helmet>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
|
||||
<link rel="stylesheet" href={withPrefix("magprog/css/main.css")}/>
|
||||
{/*<noscript>{*/}
|
||||
{/* <link rel="stylesheet" href={withPrefix("magprog/css/noscript.css")}/>*/}
|
||||
{/*</noscript>*/}
|
||||
<html className="magprog"/>
|
||||
<body className="is-preload"/>
|
||||
</Helmet>
|
||||
<SEO ang={lang} title={intl.formatMessage({id: "title"})}/>
|
||||
|
||||
<NpmNavbar/>
|
||||
<div className="container-fluid">
|
||||
<main>{children}</main>
|
||||
</div>
|
||||
{/*<NpmFooter/>*/}
|
||||
<main>{children}</main>
|
||||
|
||||
|
||||
{/* <footer id="footer" className="wrapper style1-alt">
|
||||
<div className="inner">
|
||||
<ul className="menu">
|
||||
<li>© MIPT-NPM 2021.</li>
|
||||
<li>Design: <a href="http://html5up.net">HTML5 UP</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</footer>*/}
|
||||
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
@ -3,69 +3,74 @@ import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
const Element = props => {
|
||||
return props.children;
|
||||
return props.children;
|
||||
};
|
||||
|
||||
class Scroll extends React.Component {
|
||||
static propTypes = {
|
||||
type: PropTypes.string,
|
||||
element: PropTypes.string,
|
||||
offset: PropTypes.number,
|
||||
timeout: PropTypes.number,
|
||||
children: PropTypes.node.isRequired,
|
||||
};
|
||||
constructor() {
|
||||
super();
|
||||
this.handleClick = this.handleClick.bind(this);
|
||||
}
|
||||
componentDidMount() {
|
||||
smoothscroll.polyfill();
|
||||
}
|
||||
handleClick(e) {
|
||||
e.preventDefault();
|
||||
let elem = 0;
|
||||
let scroll = true;
|
||||
const { type, element, offset, timeout } = this.props;
|
||||
if (type && element) {
|
||||
switch (type) {
|
||||
case 'class':
|
||||
elem = document.getElementsByClassName(element)[0];
|
||||
scroll = !!elem;
|
||||
break;
|
||||
case 'id':
|
||||
elem = document.getElementById(element);
|
||||
scroll = !!elem;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
static propTypes = {
|
||||
type: PropTypes.string,
|
||||
element: PropTypes.string,
|
||||
offset: PropTypes.number,
|
||||
timeout: PropTypes.number,
|
||||
children: PropTypes.node.isRequired,
|
||||
};
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.handleClick = this.handleClick.bind(this);
|
||||
}
|
||||
scroll
|
||||
? this.scrollTo(elem, offset, timeout)
|
||||
: console.log(`Element not found: ${element}`); // eslint-disable-line
|
||||
}
|
||||
scrollTo(element, offSet = 0, timeout = null) {
|
||||
const elemPos = element
|
||||
? element.getBoundingClientRect().top + window.pageYOffset
|
||||
: 0;
|
||||
if (timeout) {
|
||||
setTimeout(() => {
|
||||
window.scroll({ top: elemPos + offSet, left: 0, behavior: 'smooth' });
|
||||
}, timeout);
|
||||
} else {
|
||||
window.scroll({ top: elemPos + offSet, left: 0, behavior: 'smooth' });
|
||||
|
||||
componentDidMount() {
|
||||
smoothscroll.polyfill();
|
||||
}
|
||||
|
||||
handleClick(e) {
|
||||
e.preventDefault();
|
||||
let elem = 0;
|
||||
let scroll = true;
|
||||
const {type, element, offset, timeout} = this.props;
|
||||
if (type && element) {
|
||||
switch (type) {
|
||||
case 'class':
|
||||
elem = document.getElementsByClassName(element)[0];
|
||||
scroll = !!elem;
|
||||
break;
|
||||
case 'id':
|
||||
elem = document.getElementById(element);
|
||||
scroll = !!elem;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
scroll
|
||||
? this.scrollTo(elem, offset, timeout)
|
||||
: console.log(`Element not found: ${element}`); // eslint-disable-line
|
||||
}
|
||||
|
||||
scrollTo(element, offSet = 0, timeout = null) {
|
||||
const elemPos = element
|
||||
? element.getBoundingClientRect().top + window.pageYOffset
|
||||
: 0;
|
||||
if (timeout) {
|
||||
setTimeout(() => {
|
||||
window.scroll({top: elemPos + offSet, left: 0, behavior: 'smooth'});
|
||||
}, timeout);
|
||||
} else {
|
||||
window.scroll({top: elemPos + offSet, left: 0, behavior: 'smooth'});
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<Element>
|
||||
{typeof this.props.children === 'object' ? (
|
||||
React.cloneElement(this.props.children, {onClick: this.handleClick})
|
||||
) : (
|
||||
<span onClick={this.handleClick}>{this.props.children}</span>
|
||||
)}
|
||||
</Element>
|
||||
);
|
||||
}
|
||||
}
|
||||
render() {
|
||||
return (
|
||||
<Element>
|
||||
{typeof this.props.children === 'object' ? (
|
||||
React.cloneElement(this.props.children, { onClick: this.handleClick })
|
||||
) : (
|
||||
<span onClick={this.handleClick}>{this.props.children}</span>
|
||||
)}
|
||||
</Element>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Scroll;
|
||||
|
@ -6,7 +6,7 @@ import {FormattedMessage, injectIntl, useIntl} from "react-intl"
|
||||
import {Container, Nav, Navbar} from "react-bootstrap"
|
||||
import Language from "./language"
|
||||
|
||||
import "../styles/navbar.css"
|
||||
import "../styles/navbar.scss"
|
||||
import logo from "../images/index/logo_white.png"
|
||||
|
||||
const NpmNavbar = () => {
|
||||
@ -49,13 +49,14 @@ const NpmNavbar = () => {
|
||||
<Nav.Link as="span" eventKey="partners"><FormattedMessage
|
||||
id="header.partners"/></Nav.Link>
|
||||
</Link>
|
||||
{/*
|
||||
<Link to={`/${intl.locale}/magprog`} className="nav-item" activeClassName="active"
|
||||
partiallyActive={true}>
|
||||
{/* magprog */}
|
||||
<Nav.Link as="span" eventKey="magprog">
|
||||
<FormattedMessage id="header.magprog"/>
|
||||
</Nav.Link>
|
||||
</Link>
|
||||
*/}
|
||||
</Nav>
|
||||
<Nav.Link eventKey="language" className="nav-item language">
|
||||
<Language/>
|
||||
|
@ -17,7 +17,7 @@ export default function Projects({projects, project_type}) {
|
||||
const link = node.frontmatter.shortTitle;
|
||||
const id = node.frontmatter.id;
|
||||
return (
|
||||
<li><Link to={`/projects/${project_type}#${id}`}>{link}</Link></li>
|
||||
<li key={id}><Link to={`/projects/${project_type}#${id}`}>{link}</Link></li>
|
||||
)
|
||||
})}
|
||||
</ul>
|
||||
@ -26,7 +26,7 @@ export default function Projects({projects, project_type}) {
|
||||
const title = node.frontmatter.title;
|
||||
const id = node.frontmatter.id;
|
||||
return (
|
||||
<div className="row" id={id}>
|
||||
<div className="row" id={id} key={id}>
|
||||
<div className="col-lg-12">
|
||||
<hr/>
|
||||
<h2 id={id}>{title}</h2>
|
||||
|
22
src/content/ru/magprog/mentors/Dolgonosov.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Долгоносов Максим Сергеевич
|
||||
id: Dolgonosov
|
||||
photo: Dolgonosov.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
ИКИ РАН, ВШЭ
|
||||
|
||||
#### Биография
|
||||
|
||||
Выпускник МФТИ (ФПФЭ 2003, красный диплом). Аспирантура ИКИ РАН (теоретическая физика). Кандидат физико-математических наук. Работа в ИКИ РАН с 2001-по настоящее время отдел Физики космической плазмы. Научный руководитель космического эксперимента "Микроспутник Чибис-АИ" на борту МКС, старший научный сотрудник ИКИ РАН
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
Исследование УКВ излучения грозовых разрядов.
|
||||
|
||||
#### Требования к студентам
|
||||
|
||||
Знание английского языка не ниже pre-intermidiate. Python продвинутый.
|
26
src/content/ru/magprog/mentors/Gertsenberger.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Герценбергер Константин Викторович
|
||||
id: Gertsenberger
|
||||
photo: Gertsenberger.jpg
|
||||
language: ru
|
||||
---
|
||||
#### Организация
|
||||
Объединенный институт ядерных исследований (ОИЯИ), начальник группы
|
||||
|
||||
#### Биография
|
||||
|
||||
Родился 03.06.1983 года в г. Дубна Московской области. В 2000 г. поступил в НИЯУ “Московский инженерно-физический институт”, который окончил в 2006 г. по специальности “Математическое и программное обеспечение вычислительных систем”, в 2009 году закончил аспирантуру МИФИ. В 2014 году стал кандидатом технических наук по специальности 05.13.11. С 2009 года работаю в ОИЯИ, в настоящее время являюсь начальником группы математического и программного обеспечения НЭОФСТИ на комплексе NICA ЛФВЭ ОИЯИ. Также являюсь координатором разработки программных систем для эксперимента BM@N и вхожу в исполнительный совет эксперимента.
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
Разработка программного обеспечения для обработки экспериментальных и моделированных данных эксперимента на фиксированной мишени BM@N проекта NICA.
|
||||
Направления работ по тематике магистерских диссертаций:
|
||||
|
||||
- Использование распределённых и высокопроизводительных вычислений для моделирования и обработки данных эксперимента.
|
||||
- Развитие системы визуализации событий столкновения частиц эксперимента.
|
||||
- Разработка баз данных эксперимента и интерфейсов доступа.
|
||||
|
||||
#### Требования к студентам
|
||||
|
||||
Требования: знание языка C++, желательно знание Linux, CERN ROOT. Возможность участия в конференциях ОИЯИ, оплачиваемых летних практиках, публикация работ.
|
24
src/content/ru/magprog/mentors/Ingvord.md
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Igor Khokhriakov
|
||||
id: Khokhriakov
|
||||
photo: Khokhriakov.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
Helmholtz-Zentrum Geesthacht/IK Company (Solutions Architect/CTO)
|
||||
|
||||
#### Биография
|
||||
|
||||
I am a results-oriented professional who has been consistently praised as quality-oriented by my co-workers and management. Over the course of my 14-year career, I've developed a skill set directly relevant to full life cycle of software development including requirements capture, prototyping, design, implementation, testing and maintenance as well as team leading. Overall, I have consistently demonstrated critical thinking, analytical and problem-solving abilities in every aspect of my software solutions architect role at Helmholtz-Zentrum Geesthacht.
|
||||
|
||||
Regular participation as a speaker at various community meetings and scientific conferences since 2012. Have organized more than a dozen of workshops in different countries.
|
||||
|
||||
I enjoy reading about and applying new technologies.
|
||||
|
||||
Out with the world of Software development, I enjoy boardgaming, shooting short-movies with my friends about post nuclear mankind life based on Fallout (a Role Playing Game). DJing psytrance music. And I am interested in space research.
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
SCADA, DCS, IoT, Micro-services architecture, Reactive systems design
|
22
src/content/ru/magprog/mentors/Kalashev.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Калашев Олег Евгеньевич
|
||||
id: Kalashev
|
||||
photo: Kalashev.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
ИЯИ РАН
|
||||
|
||||
#### Биография
|
||||
|
||||
Окончил МФТИ в 1999. В 1999-2002 году обучался в аспирантуре Института ядерных исследований РАН под руководством В.А. Кузьмина. В 2005-2006 году работал на факультете физики и астрономии в университете штата Калифорния, Лос-Анджелес. В 2003 году защитил кандидатскую, а в 2017 докторскую диссертацию по специальности теоретическая физика и темам связанным с космическими лучами сверхвысоких энергий. С 2006 года работает в институте ядерных исследований РАН, преподает на кафедре физики частиц и космологии физического факультета МГУ и кафедре фундаментальных взаимодействий и космологии факультета проблем физики и энергетики МФТИ. С 2008 года действительный член международной коллаборации Telescope Array.
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
Разработка методов, основанных на алгоритмах машинного обучения для анализа экспериментальных данных, а также в теоретических задачах астрофизики частиц. Моделирование распространения космических лучей.
|
||||
|
||||
#### Требования к студентам
|
||||
|
||||
Возможно сотрудничество с экспериментальными группами Telescope Array (США), Байкальского подводного нейтринного телескопа, Баксанской Нейтринной Обсерватории.
|
25
src/content/ru/magprog/mentors/Klimai.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Петр Климай
|
||||
id: Klimai
|
||||
photo: Klimai.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
ИЯИ РАН, МФТИ, JetBrains Research
|
||||
|
||||
#### Биография
|
||||
|
||||
Выпускник МФТИ (2007), учился в аспирантуре ИЯИ РАН, в 2010 году защитил диссертацию к.ф.-м.н. по теме ""Ограничения на концентрацию первичных черных дыр и их космологические следствия"". Автор более 30 научных работ.
|
||||
|
||||
Как наиболее интересные результаты можно выделить:
|
||||
- Выявлена связь между первичными возмущениями плотности, спектром индуцированных гравитационных волн, и возможной концентрацией первичных черных дыр во Вселенной.
|
||||
- Изучен вопрос рождения первичных черных дыр в ряде инфляционных моделей, в том числе в теоретических моделях «водопада» гибридной инфляции, «курватона», и модели аксионной инфляции.
|
||||
- Рассчитаны временные и энергетические параметры «вспышки» излучения первичной черной дыры, находящейся на финальной стадии испарения. Получены параметризации результатов, удобные для использования при анализе экспериментальных данных. Эти результаты продолжают использоваться в работах нескольких экспериментальных коллабораций.
|
||||
|
||||
На сегодняшний день занимается разработкой научного программного обеспечения и построением ИТ-инфраструктуры для физических экспериментов. В работе в первую очередь использует языки программирования Kotlin и Python.
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
ИТ-инфраструктура физических экспериментов
|
37
src/content/ru/magprog/mentors/Nozik.md
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Александр Нозик
|
||||
id: Nozik
|
||||
photo: Nozik.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
МФТИ, JetBrains Research, ИЯИ РАН
|
||||
|
||||
#### Биография
|
||||
|
||||
Окончил Л2Ш в 2002 году. Поступил в МФТИ на ФПФЭ, кафедру фундаментальных взаимодействий и космологии (ИЯИ РАН).
|
||||
- В 2006 году с отличием окончил бакалавриат МФТИ.
|
||||
- В 2008 году окончил магистратуру МФТИ.
|
||||
- В 2012 году защитил кандидатскую диссертацию по направлению 01.04.16: физика атомного ядра и элементарных частиц. Тема: "Результаты обработки данных эксперимента "Троицк ню-масс" по прямому измерению массы электронного нейтрино"
|
||||
- С 2013 году преподаватель общей физики в МФТИ.
|
||||
- С 2019 года заместитель заведующего ЛМЯФЭ МФТИ.
|
||||
- С 2019 года руководитель направления в JetBrains Research.
|
||||
|
||||
[ResearchGate](https://www.researchgate.net/profile/Alexander-Nozik)
|
||||
|
||||
[Страница на сайте JBR](https://research.jetbrains.org/groups/npm/)
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
Разработка научного программного обеспечения на Kotlin и других языках.
|
||||
* Разработка систем визуализации научных данных.
|
||||
* Разработка систем сбора данных и управления оборудованием и использование этих систем в международных экспериментах, таких как Троицк ню-масс и IAXO.
|
||||
* Разработка автоматизированных систем анализа данных.
|
||||
|
||||
Разработка научных библиотек на языке Kotlin.
|
||||
|
||||
#### Требования к студентам
|
||||
|
||||
Работа возможна в дистанционном и очном формате (в Москве).
|
22
src/content/ru/magprog/mentors/Pshenichnov.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Пшеничнов Игорь Анатольевич
|
||||
id: Pshenichnov
|
||||
photo: Pshenichnov.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
Институт ядерных исследований Российской академии наук, в.н.с., д.ф.-м.н.
|
||||
|
||||
#### Биография
|
||||
|
||||
Окончил физический факультет МГУ в 1987 году и был принят на работу в ИЯИ РАН. Первые работы были посвящены моделированию взаимодействия антипротонов с ядрами. Разработал модель фотоядерных реакций, и модель RELDIS, описывающую электромагнитные взаимодействия ядер. Исследовал физику адронной и тяжелоионной терапии онкологических заболеваний, прохождения частиц через вещество, нейтронных источников, ядерной трансмутации. В разные годы работал в Национальном институте ядерной физики Италии, Институте Нильса Бора в Копенгагене, Университете Франкфурта-на-Майне. В настоящее время участник коллаборации ALICE в ЦЕРН. Полный список работ, включая публикации в составе коллаборциии доступен [здесь](https://publons.com/researcher/1260212/igor-a-pshenichnov/)
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
Моделирование методом Монте-Карло адронных и электромагнитных взаимодействий релятивистских ядер, взаимодействия пучков частиц и ядер с веществом. Анализ данных эксперимента ALICE на LHC.
|
||||
|
||||
#### Требования к студентам
|
||||
|
||||
Приветствуется уверенное владение С++, навыки отладки, тестирования и культура разработки сложных программных систем, владение численными методами. Желательно знакомство с библиотекой Geant4, готовность работать в составе больших экспериментальных коллабораций в ЦЕРН, ОИЯИ и других институтах.
|
22
src/content/ru/magprog/mentors/Shagalov.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Шагалов Лев Михайлович
|
||||
id: Shagalov
|
||||
photo: Shagalov.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
ООО "Разумные электрические сети", Ведущий специалист
|
||||
|
||||
#### Биография
|
||||
|
||||
Последние 8 лет занимаюсь разработкой информационных систем. В том числе: высоко нагруженные и высоко доступные, банковские, SCADA, платформы для построения подобных систем.
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
Разработка отказоустойчивых систем управления и симуляторов сетей 0.4-35 кВ.
|
||||
|
||||
#### Требования к студентам
|
||||
|
||||
Работа возможна в дистанционном формате. Желательно знание kotlin, java, linux, frontend
|
21
src/content/ru/magprog/mentors/Usmanov.md
Normal file
@ -0,0 +1,21 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Ильмир Усманов
|
||||
id: Usmanov
|
||||
photo: Usmanov.jpg
|
||||
language: ru
|
||||
---
|
||||
|
||||
#### Организация
|
||||
JetBrains
|
||||
|
||||
#### Биография
|
||||
|
||||
Окончил в ФРТК МФТИ в 2013 г.
|
||||
Последние 9 лет работал над различными компиляторами - от GCC и LLVM до котлиновского компилятора.
|
||||
Сейчас работаю в JetBrans в команде Kotlin Language Research Team.
|
||||
|
||||
#### Направление исследований
|
||||
|
||||
Дизайн и реализация языков программирования, компиляторные оптимизации, гетерогенные вычисления, символьное исполнение
|
||||
|
9
src/content/ru/magprog/mentors/template.md
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
content_type: magprog_mentor
|
||||
title: Полиграф Шариков
|
||||
id: template
|
||||
photo: Template.jpg
|
||||
published: false
|
||||
language: ru
|
||||
---
|
||||
Выдающийся ученый
|
@ -6,18 +6,10 @@ order: 1
|
||||
photo: nozik.png
|
||||
language: ru
|
||||
---
|
||||
**Заместитель руководителя группы.**
|
||||
|
||||
Кандидат физико-математических наук. Старший научный сотрудник ИЯИ РАН (Сектор математического обеспечения экспериментов), ассистент кафедры общей физики МФТИ.
|
||||
**Руководитель программы**
|
||||
|
||||
Специалист в области анализа данных в физическом эксперименте. Участник эксперимента "Троицк ню-масс" по прямому измерению массы нейтрино. [Профиль ResearchGate](https://www.researchgate.net/profile/Alexander_Nozik)
|
||||
Заместитель заведующего ЛМЯФЭ МФТИ.
|
||||
|
||||
Руководитель направления в [JetBrains Research](https://research.jetbrains.org/ru/researchers/altavir).
|
||||
Руководитель направления в JetBrains Research.
|
||||
|
||||
Секретарь совета [Общества Научных Работников](http://onr-russia.ru/)
|
||||
|
||||
**Научные интересы:** Математическая статистика, Научное программное обеспечение, Масса нейтрино.
|
||||
|
||||
<p>
|
||||
e-mail: <a href="mailto:nozik.aa@mipt.ru">nozik.aa@mipt.ru</a>
|
||||
</p>
|
||||
Преподаватель общей физики, статистических методов и программирования на Kotlin в МФТИ.
|
@ -6,6 +6,8 @@ order: 2
|
||||
photo: svetlichny.jpeg
|
||||
language: ru
|
||||
---
|
||||
Аспирант МФТИ, преподаватель кафедры общей физики и Физтех-активист.
|
||||
**Заместитель руководителя**
|
||||
|
||||
Занимается физикой столкновений высокоэнергичных ионов под руководством И. А. Пшеничного.
|
||||
Преподаватель кафедры общей физики МФТИ.
|
||||
|
||||
Аспирант ИЯИ РАН.
|
||||
|
@ -8,13 +8,5 @@ order: 2
|
||||
published: true
|
||||
language: ru
|
||||
---
|
||||
<table>
|
||||
<tbody><tr><td>
|
||||
<div className="col-lg-9">
|
||||
<img src="/images/projects/math/gears_animated.gif" alt="Under construction...">
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div className="col-lg-8" align="center"><h3>Этот раздел дорабатывается...</h3></div>
|
||||
</td>
|
||||
</tr></tbody></table>
|
||||
<img src="/images/projects/math/gears_animated.gif" alt="Under construction...">
|
||||
<h3>Этот раздел дорабатывается...</h3>
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
content_type: project
|
||||
project_type: software
|
||||
id: dataforge
|
||||
id: kmath
|
||||
shortTitle: Kmath
|
||||
title: "Экспериментальная математическая библиотека на kotlin"
|
||||
order: 2
|
||||
|
BIN
src/images/magprog/mentors/Dolgonosov.jpg
Normal file
After Width: | Height: | Size: 4.2 MiB |
BIN
src/images/magprog/mentors/Gertsenberger.jpg
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
src/images/magprog/mentors/Kalashev.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
src/images/magprog/mentors/Khokhriakov.jpg
Normal file
After Width: | Height: | Size: 613 KiB |
BIN
src/images/magprog/mentors/Klimai.jpg
Normal file
After Width: | Height: | Size: 1.8 MiB |
BIN
src/images/magprog/mentors/Nozik.jpg
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
src/images/magprog/mentors/Pshenichnov.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
src/images/magprog/mentors/Shagalov.jpg
Normal file
After Width: | Height: | Size: 5.5 MiB |
BIN
src/images/magprog/mentors/Template.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
src/images/magprog/mentors/Usmanov.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
@ -1,5 +1,5 @@
|
||||
{
|
||||
"title": "NPM GROUP",
|
||||
"title": "MIPT NPM Laboratory",
|
||||
"language": "en",
|
||||
"description": "Nuclear physics methods laboratory",
|
||||
"header": {
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"title": "NPM Group",
|
||||
"title": "Лаборатория NPM МФТИ",
|
||||
"language": "ru",
|
||||
"description": "Лаборатория методов ядерно-физических экспериментов",
|
||||
"header": {
|
||||
|
@ -4,7 +4,7 @@ import {graphql} from "gatsby"
|
||||
import Parser from "html-react-parser"
|
||||
|
||||
import Layout from "../components/layout"
|
||||
import "../styles/main.css"
|
||||
import "../styles/main.scss"
|
||||
|
||||
const AboutPage = ({data}) => {
|
||||
const intl = useIntl()
|
||||
@ -38,7 +38,7 @@ const AboutPage = ({data}) => {
|
||||
const path = "../../images/members/"
|
||||
if (photo === null)
|
||||
return (
|
||||
<div>
|
||||
<div key={node.id}>
|
||||
<hr/>
|
||||
<div className="row">
|
||||
<div className="col-lg-2"/>
|
||||
@ -51,7 +51,7 @@ const AboutPage = ({data}) => {
|
||||
)
|
||||
else
|
||||
return (
|
||||
<div>
|
||||
<div key={node.id}>
|
||||
<hr/>
|
||||
<div className="row">
|
||||
<div className="col-lg-2">
|
||||
@ -77,6 +77,7 @@ export const query = graphql`
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
edges{
|
||||
node {
|
||||
id
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
@ -91,6 +92,7 @@ export const query = graphql`
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
edges{
|
||||
node {
|
||||
id
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
|
@ -7,7 +7,7 @@ import Parser from "html-react-parser"
|
||||
|
||||
import head_ru from "../images/index/head.png"
|
||||
import head_en from "../images/index/head_en.png"
|
||||
import "../styles/main.css"
|
||||
import "../styles/main.scss"
|
||||
import "../styles/bootstrap.min.css"
|
||||
import {Button, Jumbotron} from "react-bootstrap"
|
||||
|
||||
@ -68,7 +68,7 @@ const IndexPage = ({data}) => {
|
||||
const date = node.frontmatter.date;
|
||||
const html = node.html;
|
||||
return (
|
||||
<div className="card"
|
||||
<div className="card" key={node.id} id={node.id}
|
||||
style={{marginBottom: `15px`, borderRadius: `0px`, boxShadow: `0 2px 2px #A2A2A2`}}>
|
||||
<div className="card-body">
|
||||
<h2 className="title">
|
||||
@ -92,6 +92,7 @@ export const query = graphql`
|
||||
{
|
||||
edges{
|
||||
node{
|
||||
id
|
||||
html
|
||||
frontmatter {
|
||||
date(formatString: "DD.MM.YYYY")
|
||||
@ -107,6 +108,7 @@ export const query = graphql`
|
||||
{
|
||||
edges{
|
||||
node{
|
||||
id
|
||||
html
|
||||
frontmatter {
|
||||
date(formatString: "DD.MM.YYYY")
|
||||
|
@ -1,22 +1,106 @@
|
||||
import React from 'react';
|
||||
import {injectIntl} from "react-intl";
|
||||
import {graphql} from "gatsby";
|
||||
import {graphql, withPrefix} from "gatsby";
|
||||
|
||||
import MagProgLayout from '../../components/magprog/common/MagProgLayout';
|
||||
import Parser from "html-react-parser";
|
||||
import Scrollspy from "react-scrollspy";
|
||||
import Scroll from "../../components/magprog/common/Scroll";
|
||||
|
||||
function mentors(edges) {
|
||||
return (
|
||||
<>
|
||||
{edges.map((edge) => {
|
||||
return <section>
|
||||
<div className="image">
|
||||
<img src={withPrefix(`images/magprog/mentors/${edge.node.frontmatter.photo}`)}
|
||||
alt={edge.node.frontmatter.title} width="100%" data-position="top center"/>
|
||||
</div>
|
||||
<div className="content">
|
||||
<div className="inner">
|
||||
<h2>{edge.node.frontmatter.title}</h2>
|
||||
{Parser(edge.node.html)}
|
||||
{/*
|
||||
<ul className="actions">
|
||||
<li><a href="generic.html" className="button">Learn more</a></li>
|
||||
</ul>
|
||||
*/}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
})}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
function team(edges) {
|
||||
return (
|
||||
<>
|
||||
{edges.map((edge) => {
|
||||
const name = edge.node.frontmatter.title;
|
||||
const photo = edge.node.frontmatter.photo;
|
||||
|
||||
return (
|
||||
<section>
|
||||
<a className="image">
|
||||
<img src={withPrefix(`images/members/${photo}`)}
|
||||
alt={edge.node.frontmatter.title} width="100%" data-position="top center"/>
|
||||
</a>
|
||||
<div className="content">
|
||||
<div className="inner">
|
||||
<h2>{name}</h2>
|
||||
{Parser(edge.node.html)}
|
||||
{/*
|
||||
<ul className="actions">
|
||||
<li><a href="generic.html" className="button">Learn more</a></li>
|
||||
</ul>
|
||||
*/}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
})}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
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 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: Parser(node.html)
|
||||
body: body,
|
||||
style: "wrapper style1 fullscreen fade-up"
|
||||
}
|
||||
})
|
||||
|
||||
sections[0].id = "intro"
|
||||
|
||||
sections.splice(3, 0,
|
||||
{
|
||||
id: "mentors",
|
||||
title: "Научные руководители",
|
||||
body: mentors(props.data.mentors.edges),
|
||||
style: "wrapper style2 spotlights"
|
||||
}
|
||||
)
|
||||
|
||||
sections.splice(6, 0,
|
||||
{
|
||||
id: "team",
|
||||
title: "Команда",
|
||||
body: team(props.data.team.edges),
|
||||
style: "wrapper style2 spotlights"
|
||||
}
|
||||
)
|
||||
|
||||
return (
|
||||
<MagProgLayout>
|
||||
<section id="sidebar">
|
||||
@ -38,14 +122,11 @@ const MagProgPage = (props) => {
|
||||
</nav>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div id="wrapper">
|
||||
{sections.map(section => {
|
||||
return <section id={section.id}
|
||||
className="wrapper style1 fullscreen fade-up">
|
||||
<div className="inner">
|
||||
<h2>{section.title}</h2>
|
||||
{section.body}
|
||||
</div>
|
||||
return <section id={section.id} className={section.style}>
|
||||
{section.body}
|
||||
</section>
|
||||
})}
|
||||
|
||||
@ -53,6 +134,7 @@ const MagProgPage = (props) => {
|
||||
{/*<Capabilities/>*/}
|
||||
{/*<Contact/>*/}
|
||||
</div>
|
||||
|
||||
</MagProgLayout>
|
||||
)
|
||||
}
|
||||
@ -84,7 +166,19 @@ export const query = graphql`
|
||||
}
|
||||
}
|
||||
|
||||
# Научные руководители
|
||||
mentors: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "magprog_mentor"}, published: {ne: false}, language: {eq: "ru"}}},
|
||||
sort: {fields: frontmatter___title, order: ASC}) {
|
||||
edges{
|
||||
node {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
photo
|
||||
language
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
program: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "program"} published: {ne: false}, language: {eq: "ru"}}){
|
||||
html
|
||||
@ -103,12 +197,17 @@ export const query = graphql`
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
team: markdownRemark(frontmatter: {content_type: {eq: "magprog"}, magprog_section: {eq: "team"} published: {ne: false}, language: {eq: "ru"}}){
|
||||
html
|
||||
frontmatter{
|
||||
magprog_section
|
||||
section_title
|
||||
team: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "magprog_team"}, published: {ne: false}, language: {eq: "ru"}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
edges{
|
||||
node {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
photo
|
||||
language
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,19 +218,5 @@ export const query = graphql`
|
||||
section_title
|
||||
}
|
||||
}
|
||||
#
|
||||
# team: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "magprog_team"}, published: {ne: false}, language: {eq: "ru"}}},
|
||||
# sort: {fields: frontmatter___order, order: ASC}) {
|
||||
# edges{
|
||||
# node {
|
||||
# html
|
||||
# frontmatter {
|
||||
# title
|
||||
# photo
|
||||
# language
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
}
|
||||
`
|
||||
|
@ -14,19 +14,24 @@ const PartnersPage = () => {
|
||||
<Layout>
|
||||
<div className="media" style={{marginTop: `30px`}}>
|
||||
<div className="media-body">
|
||||
<h1><a aria-label="MIPT general physics"
|
||||
href="https://mipt.ru/education/chair/physics/"><FormattedMessage
|
||||
id="partners.mipt.title_fund"/></a></h1>
|
||||
<h1 className="partner">
|
||||
<a aria-label="MIPT general physics" href="https://mipt.ru/education/chair/physics/">
|
||||
<FormattedMessage id="partners.mipt.title_fund"/>
|
||||
</a>
|
||||
</h1>
|
||||
<p><FormattedMessage id="partners.mipt.description_fund"/></p>
|
||||
<hr/>
|
||||
<h1><a aria-label="MIPT HEP"
|
||||
href="https://mipt.ru/science/labs/high_energy_physics_lab.php"><FormattedMessage
|
||||
id="partners.mipt.title_energy"/></a></h1>
|
||||
<h1 className="partner">
|
||||
<a aria-label="MIPT HEP" href="https://mipt.ru/science/labs/high_energy_physics_lab.php">
|
||||
<FormattedMessage id="partners.mipt.title_energy"/>
|
||||
</a>
|
||||
</h1>
|
||||
<p><FormattedMessage id="partners.mipt.description_energy"/></p>
|
||||
</div>
|
||||
<div className="media-right media-middle">
|
||||
<a href="https://mipt.ru/education/chair/physics/"><img className="media-object" src={mipt_logo}
|
||||
alt="mipt logo" width="400px"/></a>
|
||||
<a href="https://mipt.ru/education/chair/physics/">
|
||||
<img className="media-object" src={mipt_logo} alt="mipt logo" width="400px"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -34,13 +39,15 @@ const PartnersPage = () => {
|
||||
|
||||
<div className="media">
|
||||
<div className="media-body">
|
||||
<h1><a id="partner" href="https://www.jetbrains.com/">JetBrains</a></h1>
|
||||
<h1><a className="partner" href="https://www.jetbrains.com/">JetBrains</a></h1>
|
||||
<p><FormattedMessage id="partners.jb.description"/></p>
|
||||
</div>
|
||||
<div className="media-right media-middle">
|
||||
<a href="https://www.jetbrains.com/"><img className="media-object" src={jetbrains_logo}
|
||||
alt="inr logo" width="150px"
|
||||
style={{marginLeft: `10px`}}/></a>
|
||||
<a href="https://www.jetbrains.com/">
|
||||
<img className="media-object" src={jetbrains_logo}
|
||||
alt="inr logo" width="150px"
|
||||
style={{marginLeft: `10px`}}/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -48,13 +55,16 @@ const PartnersPage = () => {
|
||||
|
||||
<div className="media">
|
||||
<div className="media-body">
|
||||
<h1><a id="partner" href="https://research.jetbrains.org/ru/groups/npm">JetBrains Research</a></h1>
|
||||
<h1><a className="partner" href="https://research.jetbrains.org/ru/groups/npm">JetBrains
|
||||
Research</a></h1>
|
||||
<p><FormattedMessage id="partners.jbr.description"/></p>
|
||||
</div>
|
||||
<div className="media-right media-middle">
|
||||
<a href="https://research.jetbrains.org/ru/groups/npm"><img className="media-object" src={jbr}
|
||||
alt="inr logo" width="250px"
|
||||
style={{marginLeft: `10px`}}/></a>
|
||||
<a href="https://research.jetbrains.org/ru/groups/npm">
|
||||
<img className="media-object" src={jbr}
|
||||
alt="inr logo" width="250px"
|
||||
style={{marginLeft: `10px`}}/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -62,7 +72,11 @@ const PartnersPage = () => {
|
||||
|
||||
<div className="media">
|
||||
<div className="media-body">
|
||||
<h2 className="media-heading"><FormattedMessage id="partners.ras.title_exp"/></h2>
|
||||
<h1 className="partner">
|
||||
<a href="http://inr.ru/">
|
||||
<FormattedMessage id="partners.ras.title_exp"/>
|
||||
</a>
|
||||
</h1>
|
||||
<p><FormattedMessage id="partners.ras.description_exp"/></p>
|
||||
</div>
|
||||
</div>
|
||||
@ -71,12 +85,16 @@ const PartnersPage = () => {
|
||||
|
||||
<div className="media">
|
||||
<div className="media-left media-middle">
|
||||
<a href="http://www.inr.ru"><img className="media-object" src={inr_linac} alt="inr logo"
|
||||
width="100px"/></a>
|
||||
<a href="http://www.inr.ru">
|
||||
<img className="media-object" src={inr_linac} alt="inr logo" width="100px"/>
|
||||
</a>
|
||||
</div>
|
||||
<div className="media-body" style={{marginLeft: `25px`}}>
|
||||
<h1><a aria-label="INR" href="http://www.inr.ru/"><FormattedMessage
|
||||
id="partners.ras.title_beam"/></a></h1>
|
||||
<h1 className="partner">
|
||||
<a aria-label="INR" href="http://www.inr.ru/">
|
||||
<FormattedMessage id="partners.ras.title_beam"/>
|
||||
</a>
|
||||
</h1>
|
||||
<p><FormattedMessage id="partners.ras.description_beam"/></p>
|
||||
</div>
|
||||
</div>
|
||||
@ -85,7 +103,7 @@ const PartnersPage = () => {
|
||||
|
||||
<div className="media">
|
||||
<div className="media-body">
|
||||
<h1><a aria-label="INR education" href="http://www.inr.ru/"><FormattedMessage
|
||||
<h1 className="partner"><a aria-label="INR education" href="http://www.inr.ru/"><FormattedMessage
|
||||
id="partners.ras.title_education"/></a></h1>
|
||||
<p><FormattedMessage id="partners.ras.description_education"/></p>
|
||||
</div>
|
||||
@ -109,7 +127,7 @@ const PartnersPage = () => {
|
||||
|
||||
<div className="media" style={{marginBottom: `30px`}}>
|
||||
<div className="media-body">
|
||||
<h1><a aria-label="SRI RAS" href="http://www.iki.rssi.ru/"><FormattedMessage
|
||||
<h1 className="partner"><a aria-label="SRI RAS" href="http://www.iki.rssi.ru/"><FormattedMessage
|
||||
id="partners.ras.title_iki"/></a></h1>
|
||||
<p><FormattedMessage id="partners.ras.description_iki"/></p>
|
||||
</div>
|
||||
|
@ -1,4 +1,6 @@
|
||||
footer {
|
||||
html.npm-site {
|
||||
|
||||
footer {
|
||||
background-color: rgb(245, 245, 245);
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
@ -9,22 +11,24 @@ footer {
|
||||
font-family: Segoe UI, serif;
|
||||
font-size: 20px;
|
||||
text-decoration: none solid rgb(108, 117, 125);
|
||||
}
|
||||
}
|
||||
|
||||
footer .container p {
|
||||
footer .container p {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
footer p a {
|
||||
footer p a {
|
||||
color: rgb(0, 86, 179);
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
footer p a:hover {
|
||||
footer p a:hover {
|
||||
color: rgb(12, 65, 124);
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
footer a:visited {
|
||||
footer a:visited {
|
||||
color: rgb(0, 86, 179);
|
||||
}
|
||||
|
||||
}
|
@ -1,89 +1,91 @@
|
||||
html {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
height: 100%;
|
||||
font-size: 1.08rem;
|
||||
}
|
||||
html.npm-site {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
height: 100%;
|
||||
font-size: 1.08rem;
|
||||
|
||||
body {
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
}
|
||||
|
||||
.container {
|
||||
.container {
|
||||
max-width: 1160px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
padding: 0 15px 0 15px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 769px) {
|
||||
@media (max-width: 769px) {
|
||||
main {
|
||||
margin-top: 6%;
|
||||
margin-top: 6%;
|
||||
}
|
||||
|
||||
nav.navbar.navbar-expand-lg.navbar-light {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
img {
|
||||
max-width: 100%;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
h1 {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
h2 {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
h3 {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
h4 {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
h5 {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
h6 {
|
||||
h6 {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
figure {
|
||||
figure {
|
||||
padding: 0;
|
||||
margin: 0 0 1.45rem;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
table {
|
||||
padding: 0;
|
||||
margin: 0 0 1.45rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.45rem;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
b, strong, dt, th {
|
||||
b, strong, dt, th {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 480px) {
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 480px) {
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
}
|
@ -1,89 +1,93 @@
|
||||
main {
|
||||
html.npm-site {
|
||||
main {
|
||||
margin-top: 75px;
|
||||
}
|
||||
}
|
||||
|
||||
a#partner {
|
||||
a .partner {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- projects navbar ---------------------- */
|
||||
a {
|
||||
/* ---- projects navbar ---------------------- */
|
||||
a {
|
||||
font-size: 0.98rem;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
a.nav-link#project:hover {
|
||||
a.nav-link#project:hover {
|
||||
padding-bottom: 7px;
|
||||
color: rgb(0, 0, 0);
|
||||
text-decoration: none;
|
||||
background-color: rgb(228, 228, 228);
|
||||
}
|
||||
}
|
||||
|
||||
ul.nav-tabs a.nav-link.active {
|
||||
ul.nav-tabs a.nav-link.active {
|
||||
color: black;
|
||||
background-color: rgb(190, 190, 190);
|
||||
}
|
||||
}
|
||||
|
||||
ul.nav-tabs a.nav-link, ul.nav-tabs a.nav-link.active {
|
||||
ul.nav-tabs a.nav-link, ul.nav-tabs a.nav-link.active {
|
||||
border-radius: 0;
|
||||
padding: 7px 22px 7px 22px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------- */
|
||||
/* ------------------------------------------- */
|
||||
|
||||
/* ------- news & main content ----------------------------- */
|
||||
h1 {
|
||||
/* ------- news & main content ----------------------------- */
|
||||
h1 {
|
||||
font-size: 2.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
h2 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
h3 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
div.container main a {
|
||||
div.container main a {
|
||||
color: rgb(0, 86, 179);
|
||||
}
|
||||
}
|
||||
|
||||
div.container main a:hover {
|
||||
div.container main a:hover {
|
||||
color: rgb(1, 66, 136);
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
div.container main p a:visited {
|
||||
div.container main p a:visited {
|
||||
color: rgb(0, 86, 179);
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
li a {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
/*li a {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
|
||||
li a:hover {
|
||||
color: rgb(1, 66, 136)
|
||||
}
|
||||
li a:hover {
|
||||
color: rgb(1, 66, 136)
|
||||
}
|
||||
|
||||
li a:visited {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
li a:visited {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
|
||||
h2 a {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
h2 a {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
|
||||
h2 a:hover {
|
||||
color: rgb(1, 66, 136)
|
||||
}
|
||||
h2 a:hover {
|
||||
color: rgb(1, 66, 136)
|
||||
}
|
||||
|
||||
h2 a:visited {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
h2 a:visited {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
|
||||
.jumbotron {
|
||||
*/
|
||||
|
||||
|
||||
.jumbotron {
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
padding: 60px 40px 10px 40px;
|
||||
@ -92,9 +96,9 @@ h2 a:visited {
|
||||
border: 1.5px solid rgb(219, 219, 219);
|
||||
border-bottom: 0;
|
||||
border-radius: 5px 5px 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.aboutButton {
|
||||
.aboutButton {
|
||||
background-color: rgb(233, 236, 239);
|
||||
padding-top: 5px;
|
||||
padding-bottom: 25px;
|
||||
@ -102,54 +106,54 @@ h2 a:visited {
|
||||
border-bottom: 1.5px solid rgb(219, 219, 219);
|
||||
border-left: 1.5px solid rgb(219, 219, 219);
|
||||
border-right: 1.5px solid rgb(219, 219, 219);
|
||||
}
|
||||
}
|
||||
|
||||
button#jt:hover {
|
||||
button#jt:hover {
|
||||
background-color: rgb(9, 110, 88);
|
||||
}
|
||||
}
|
||||
|
||||
button#jt a {
|
||||
button#jt a {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
button#jt a:hover {
|
||||
button#jt a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
button#jt {
|
||||
button#jt {
|
||||
margin-left: 50px;
|
||||
font-size: 25px;
|
||||
background-color: rgb(14, 156, 125);
|
||||
border: rgb(0, 99, 99);
|
||||
}
|
||||
}
|
||||
|
||||
button#more a {
|
||||
button#more a {
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
button#more a:hover {
|
||||
button#more a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
button#more:hover {
|
||||
button#more:hover {
|
||||
background-color: rgb(34, 76, 104);
|
||||
}
|
||||
}
|
||||
|
||||
button#more {
|
||||
button#more {
|
||||
margin-bottom: 15px;
|
||||
color: white;
|
||||
background-color: rgb(51, 113, 155);
|
||||
border: rgb(36, 88, 122);
|
||||
}
|
||||
}
|
||||
|
||||
h2.title {
|
||||
h2.title {
|
||||
background-color: rgb(247, 247, 247);
|
||||
padding: 15px;
|
||||
border: 2px solid #E8E4E4;
|
||||
}
|
||||
}
|
||||
|
||||
span#date {
|
||||
span#date {
|
||||
color: white;
|
||||
font-size: 20px;
|
||||
opacity: 0.7;
|
||||
@ -159,151 +163,153 @@ span#date {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
p {
|
||||
font-size: 0.95rem;
|
||||
margin-top: 15px;
|
||||
margin-bottom: 20px;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
hr {
|
||||
border-top: 1px solid rgb(220, 222, 224);
|
||||
margin: 10px 0px 20px 0px;
|
||||
}
|
||||
}
|
||||
|
||||
img.center-block {
|
||||
img.center-block {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
ol li {
|
||||
ol li {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
li {
|
||||
margin-bottom: 0;
|
||||
font-size: 0.9rem;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
ul {
|
||||
margin: 0 0 20px 0;
|
||||
padding-left: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
p#button {
|
||||
p#button {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
p#lead {
|
||||
p#lead {
|
||||
margin-bottom: 20px;
|
||||
font-size: 1.15rem;
|
||||
font-weight: 300;
|
||||
}
|
||||
}
|
||||
|
||||
.card-body {
|
||||
.card-body {
|
||||
padding: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
.card-header {
|
||||
.card-header {
|
||||
padding: 15px 25px 15px 25px;
|
||||
}
|
||||
}
|
||||
|
||||
.card-title {
|
||||
.card-title {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
span.badge.badge-info {
|
||||
span.badge.badge-info {
|
||||
margin-right: 15px;
|
||||
background-color: rgb(20, 142, 161);
|
||||
}
|
||||
}
|
||||
|
||||
span.katex-html {
|
||||
span.katex-html {
|
||||
color: rgb(0, 0, 0);
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
/* timeline */
|
||||
div.timeline {
|
||||
/* timeline */
|
||||
div.timeline {
|
||||
max-width: 1400px;
|
||||
}
|
||||
}
|
||||
|
||||
div.timeline--wrapper {
|
||||
div.timeline--wrapper {
|
||||
margin-top: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
div.entry div.title {
|
||||
div.entry div.title {
|
||||
width: 20%
|
||||
}
|
||||
}
|
||||
|
||||
div.entry div.body {
|
||||
div.entry div.body {
|
||||
width: 80%
|
||||
}
|
||||
}
|
||||
|
||||
div.timeline::before {
|
||||
div.timeline::before {
|
||||
left: calc(20% - 6px)
|
||||
}
|
||||
}
|
||||
|
||||
div.body div.body-container.bounce-in p p a {
|
||||
div.body div.body-container.bounce-in p p a {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
}
|
||||
|
||||
div.body div.body-container.bounce-in p h2 a {
|
||||
div.body div.body-container.bounce-in p h2 a {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
}
|
||||
|
||||
div.body div.body-container.bounce-in p ul li a {
|
||||
div.body div.body-container.bounce-in p ul li a {
|
||||
color: rgb(0, 86, 179)
|
||||
}
|
||||
}
|
||||
|
||||
nav div a:hover {
|
||||
nav div a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
figcaption {
|
||||
figcaption {
|
||||
font-size: 0.8rem;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
color: rgb(82, 82, 82)
|
||||
}
|
||||
}
|
||||
|
||||
/* --- media --------------------------------------------- */
|
||||
@media (max-width: 769px) {
|
||||
/* --- media --------------------------------------------- */
|
||||
@media (max-width: 769px) {
|
||||
span#date {
|
||||
top: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
button#togglerButton.navbar-toggler.collapsed {
|
||||
margin-top: 10px;
|
||||
margin-left: 10px;
|
||||
margin-top: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
a.nav-link#project {
|
||||
margin-bottom: 10px;
|
||||
margin-right: 0;
|
||||
border: 1px solid rgb(202, 202, 202);
|
||||
margin-bottom: 10px;
|
||||
margin-right: 0;
|
||||
border: 1px solid rgb(202, 202, 202);
|
||||
}
|
||||
|
||||
a.nav-link#project.active {
|
||||
color: black;
|
||||
color: black;
|
||||
}
|
||||
|
||||
div.entry div.title {
|
||||
width: 40%
|
||||
width: 40%
|
||||
}
|
||||
|
||||
div.entry div.body {
|
||||
width: 80%
|
||||
width: 80%
|
||||
}
|
||||
|
||||
div.timeline::before {
|
||||
left: calc(12% - 6px)
|
||||
left: calc(12% - 6px)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------- */
|
@ -1,110 +0,0 @@
|
||||
nav#site-navbar.navbar.navbar-expand-lg.bg-dark.fixed-top {
|
||||
height: 75px;
|
||||
}
|
||||
|
||||
div.mr-auto.navbar-nav a {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
img#logo {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
a.language.nav-link {
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
a[data-rb-event-key="language"] div {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
a[data-rb-event-key="language"]:hover {
|
||||
background-color: rgb(52, 58, 64);
|
||||
}
|
||||
|
||||
a[data-rb-event-key="language"] a {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
a#project {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/*nav div p a {*/
|
||||
/* color: rgb(0, 86, 179);*/
|
||||
/*}*/
|
||||
|
||||
/*nav div p a:visited {*/
|
||||
/* color: rgb(0, 86, 179);*/
|
||||
/*}*/
|
||||
|
||||
/*nav div p a:hover {*/
|
||||
/* color: rgb(1, 71, 145)*/
|
||||
/*}*/
|
||||
|
||||
/* ------ navbar ------------------------------ */
|
||||
|
||||
|
||||
/* ----- collapse show ---------------------- */
|
||||
@media (max-width: 769px) {
|
||||
a.activeBrand {
|
||||
margin: 0 0 0 20px;
|
||||
padding-top: 0
|
||||
}
|
||||
|
||||
a.nav-link a#active {
|
||||
color: white;
|
||||
background-color: rgb(20, 142, 161);
|
||||
padding-top: 11px;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
/* button.navbar-toggler.collapsed { margin-top: 0px; margin-left: 15px; } */
|
||||
button.navbar-toggler {
|
||||
margin-top: 0;
|
||||
margin-right: 17px;
|
||||
}
|
||||
|
||||
div#basic-navbar-nav.navbar-collapse.collapse.show {
|
||||
width: 100px;
|
||||
padding-bottom: 0;
|
||||
text-align: center;
|
||||
background-color: rgb(52, 58, 64);
|
||||
margin-top: -0px;
|
||||
}
|
||||
|
||||
button.navbar-toggler {
|
||||
background-color: rgb(20, 142, 161);
|
||||
}
|
||||
|
||||
div#navbarSupportedContent.navbar-collapse.collapse.show img#logo {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
/* ------------------------------------------- */
|
||||
|
||||
/* #navbarSupportedContent {
|
||||
width: 100%;
|
||||
max-width: 1880px;
|
||||
padding: 0;
|
||||
line-height: 30px;
|
||||
max-height: 56px;
|
||||
text-align: left; }
|
||||
|
||||
.container {
|
||||
max-width: 1160px;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0; } */
|
||||
|
||||
|
||||
/* @media (max-width: 769px) {
|
||||
a[aria-current="page"] img#logo { margin-top: 0; margin-left: 0; padding-left: 15px }
|
||||
a[aria-current="page"] { padding-top: 0 }
|
||||
button.navbar-toggler { margin-top: 15px; }
|
||||
a.nav-link[data-rb-event-key="language"] a {
|
||||
padding-bottom: 12px;
|
||||
margin-right: 0;
|
||||
margin-left: -10px }
|
||||
} */
|
113
src/styles/navbar.scss
Normal file
@ -0,0 +1,113 @@
|
||||
nav#site-navbar.navbar.navbar-expand-lg.bg-dark.fixed-top {
|
||||
height: 75px;
|
||||
}
|
||||
|
||||
.site-navbar {
|
||||
div.mr-auto.navbar-nav a {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
img#logo {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
a.language.nav-link {
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
a[data-rb-event-key="language"] div {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
a[data-rb-event-key="language"]:hover {
|
||||
background-color: rgb(52, 58, 64);
|
||||
}
|
||||
|
||||
a[data-rb-event-key="language"] a {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
a#project {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/*nav div p a {*/
|
||||
/* color: rgb(0, 86, 179);*/
|
||||
/*}*/
|
||||
|
||||
/*nav div p a:visited {*/
|
||||
/* color: rgb(0, 86, 179);*/
|
||||
/*}*/
|
||||
|
||||
/*nav div p a:hover {*/
|
||||
/* color: rgb(1, 71, 145)*/
|
||||
/*}*/
|
||||
|
||||
/* ------ navbar ------------------------------ */
|
||||
|
||||
|
||||
/* ----- collapse show ---------------------- */
|
||||
@media (max-width: 769px) {
|
||||
a.activeBrand {
|
||||
margin: 0 0 0 20px;
|
||||
padding-top: 0
|
||||
}
|
||||
|
||||
a.nav-link a#active {
|
||||
color: white;
|
||||
background-color: rgb(20, 142, 161);
|
||||
padding-top: 11px;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
/* button.navbar-toggler.collapsed { margin-top: 0px; margin-left: 15px; } */
|
||||
button.navbar-toggler {
|
||||
margin-top: 0;
|
||||
margin-right: 17px;
|
||||
}
|
||||
|
||||
div#basic-navbar-nav.navbar-collapse.collapse.show {
|
||||
width: 100px;
|
||||
padding-bottom: 0;
|
||||
text-align: center;
|
||||
background-color: rgb(52, 58, 64);
|
||||
margin-top: -0px;
|
||||
}
|
||||
|
||||
button.navbar-toggler {
|
||||
background-color: rgb(20, 142, 161);
|
||||
}
|
||||
|
||||
div#navbarSupportedContent.navbar-collapse.collapse.show img#logo {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
/* ------------------------------------------- */
|
||||
|
||||
/* #navbarSupportedContent {
|
||||
width: 100%;
|
||||
max-width: 1880px;
|
||||
padding: 0;
|
||||
line-height: 30px;
|
||||
max-height: 56px;
|
||||
text-align: left; }
|
||||
|
||||
.container {
|
||||
max-width: 1160px;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0; } */
|
||||
|
||||
|
||||
/* @media (max-width: 769px) {
|
||||
a[aria-current="page"] img#logo { margin-top: 0; margin-left: 0; padding-left: 15px }
|
||||
a[aria-current="page"] { padding-top: 0 }
|
||||
button.navbar-toggler { margin-top: 15px; }
|
||||
a.nav-link[data-rb-event-key="language"] a {
|
||||
padding-bottom: 12px;
|
||||
margin-right: 0;
|
||||
margin-left: -10px }
|
||||
} */
|
||||
|
||||
}
|
5
static/magprog/css/fontawesome-all.min.css
vendored
@ -1,43 +0,0 @@
|
||||
/*
|
||||
Hyperspace by HTML5 UP
|
||||
html5up.net | @ajlkn
|
||||
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
*/
|
||||
|
||||
/* Spotlights */
|
||||
|
||||
.spotlights > section > .image:before {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
.spotlights > section > .content > .inner {
|
||||
-moz-transform: none !important;
|
||||
-webkit-transform: none !important;
|
||||
-ms-transform: none !important;
|
||||
transform: none !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* Wrapper */
|
||||
|
||||
.wrapper > .inner {
|
||||
opacity: 1 !important;
|
||||
-moz-transform: none !important;
|
||||
-webkit-transform: none !important;
|
||||
-ms-transform: none !important;
|
||||
transform: none !important;
|
||||
}
|
||||
|
||||
/* Sidebar */
|
||||
|
||||
#sidebar > .inner {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
#sidebar nav > ul > li {
|
||||
-moz-transform: none !important;
|
||||
-webkit-transform: none !important;
|
||||
-ms-transform: none !important;
|
||||
transform: none !important;
|
||||
opacity: 1 !important;
|
||||
}
|
Before Width: | Height: | Size: 434 KiB |
2
static/magprog/js/breakpoints.min.js
vendored
@ -1,2 +0,0 @@
|
||||
/* breakpoints.js v1.0 | @ajlkn | MIT licensed */
|
||||
var breakpoints=function(){"use strict";function e(e){t.init(e)}var t={list:null,media:{},events:[],init:function(e){t.list=e,window.addEventListener("resize",t.poll),window.addEventListener("orientationchange",t.poll),window.addEventListener("load",t.poll),window.addEventListener("fullscreenchange",t.poll)},active:function(e){var n,a,s,i,r,d,c;if(!(e in t.media)){if(">="==e.substr(0,2)?(a="gte",n=e.substr(2)):"<="==e.substr(0,2)?(a="lte",n=e.substr(2)):">"==e.substr(0,1)?(a="gt",n=e.substr(1)):"<"==e.substr(0,1)?(a="lt",n=e.substr(1)):"!"==e.substr(0,1)?(a="not",n=e.substr(1)):(a="eq",n=e),n&&n in t.list)if(i=t.list[n],Array.isArray(i)){if(r=parseInt(i[0]),d=parseInt(i[1]),isNaN(r)){if(isNaN(d))return;c=i[1].substr(String(d).length)}else c=i[0].substr(String(r).length);if(isNaN(r))switch(a){case"gte":s="screen";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: -1px)";break;case"not":s="screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (max-width: "+d+c+")"}else if(isNaN(d))switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen";break;case"gt":s="screen and (max-width: -1px)";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+")";break;default:s="screen and (min-width: "+r+c+")"}else switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+"), screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (min-width: "+r+c+") and (max-width: "+d+c+")"}}else s="("==i.charAt(0)?"screen and "+i:i;t.media[e]=!!s&&s}return t.media[e]!==!1&&window.matchMedia(t.media[e]).matches},on:function(e,n){t.events.push({query:e,handler:n,state:!1}),t.active(e)&&n()},poll:function(){var e,n;for(e=0;e<t.events.length;e++)n=t.events[e],t.active(n.query)?n.state||(n.state=!0,n.handler()):n.state&&(n.state=!1)}};return e._=t,e.on=function(e,n){t.on(e,n)},e.active=function(e){return t.active(e)},e}();!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():e.breakpoints=t()}(this,function(){return breakpoints});
|
2
static/magprog/js/browser.min.js
vendored
@ -1,2 +0,0 @@
|
||||
/* browser.js v1.0 | @ajlkn | MIT licensed */
|
||||
var browser=function(){"use strict";var e={name:null,version:null,os:null,osVersion:null,touch:null,mobile:null,_canUse:null,canUse:function(n){e._canUse||(e._canUse=document.createElement("div"));var o=e._canUse.style,r=n.charAt(0).toUpperCase()+n.slice(1);return n in o||"Moz"+r in o||"Webkit"+r in o||"O"+r in o||"ms"+r in o},init:function(){var n,o,r,i,t=navigator.userAgent;for(n="other",o=0,r=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(RegExp.$1);break}for(e.name=n,e.version=o,n="other",o=0,r=[["ios",/([0-9_]+) like Mac OS X/,function(e){return e.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(e){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(e){return e.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null],["linux",/Linux/,null],["bsd",/BSD/,null],["unix",/X11/,null]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(r[i][2]?r[i][2](RegExp.$1):RegExp.$1);break}e.os=n,e.osVersion=o,e.touch="wp"==e.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),e.mobile="wp"==e.os||"android"==e.os||"ios"==e.os||"bb"==e.os}};return e.init(),e}();!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?module.exports=n():e.browser=n()}(this,function(){return browser});
|
2
static/magprog/js/jquery.min.js
vendored
2
static/magprog/js/jquery.scrollex.min.js
vendored
@ -1,2 +0,0 @@
|
||||
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
|
||||
!function(t){function e(t,e,n){return"string"==typeof t&&("%"==t.slice(-1)?t=parseInt(t.substring(0,t.length-1))/100*e:"vh"==t.slice(-2)?t=parseInt(t.substring(0,t.length-2))/100*n:"px"==t.slice(-2)&&(t=parseInt(t.substring(0,t.length-2)))),t}var n=t(window),i=1,o={};n.on("scroll",function(){var e=n.scrollTop();t.map(o,function(t){window.clearTimeout(t.timeoutId),t.timeoutId=window.setTimeout(function(){t.handler(e)},t.options.delay)})}).on("load",function(){n.trigger("scroll")}),jQuery.fn.scrollex=function(l){var s=t(this);if(0==this.length)return s;if(this.length>1){for(var r=0;r<this.length;r++)t(this[r]).scrollex(l);return s}if(s.data("_scrollexId"))return s;var a,u,h,c,p;switch(a=i++,u=jQuery.extend({top:0,bottom:0,delay:0,mode:"default",enter:null,leave:null,initialize:null,terminate:null,scroll:null},l),u.mode){case"top":h=function(t,e,n,i,o){return t>=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n<this.length;n++)t(this[n]).unscrollex();return e}var i,l;return(i=e.data("_scrollexId"))?(l=o[i],window.clearTimeout(l.timeoutId),delete o[i],e.removeData("_scrollexId"),l.options.terminate&&l.options.terminate.apply(this),e):e}}(jQuery);
|
2
static/magprog/js/jquery.scrolly.min.js
vendored
@ -1,2 +0,0 @@
|
||||
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
|
||||
(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery);
|
@ -1,190 +0,0 @@
|
||||
/*
|
||||
Hyperspace by HTML5 UP
|
||||
html5up.net | @ajlkn
|
||||
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
|
||||
var $window = $(window),
|
||||
$body = $('body'),
|
||||
$sidebar = $('#sidebar');
|
||||
|
||||
// Breakpoints.
|
||||
breakpoints({
|
||||
xlarge: [ '1281px', '1680px' ],
|
||||
large: [ '981px', '1280px' ],
|
||||
medium: [ '737px', '980px' ],
|
||||
small: [ '481px', '736px' ],
|
||||
xsmall: [ null, '480px' ]
|
||||
});
|
||||
|
||||
// Hack: Enable IE flexbox workarounds.
|
||||
if (browser.name == 'ie')
|
||||
$body.addClass('is-ie');
|
||||
|
||||
// Play initial animations on page load.
|
||||
$window.on('load', function() {
|
||||
window.setTimeout(function() {
|
||||
$body.removeClass('is-preload');
|
||||
}, 100);
|
||||
});
|
||||
|
||||
// Forms.
|
||||
|
||||
// Hack: Activate non-input submits.
|
||||
$('form').on('click', '.submit', function(event) {
|
||||
|
||||
// Stop propagation, default.
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
|
||||
// Submit form.
|
||||
$(this).parents('form').submit();
|
||||
|
||||
});
|
||||
|
||||
// Sidebar.
|
||||
if ($sidebar.length > 0) {
|
||||
|
||||
var $sidebar_a = $sidebar.find('a');
|
||||
|
||||
$sidebar_a
|
||||
.addClass('scrolly')
|
||||
.on('click', function() {
|
||||
|
||||
var $this = $(this);
|
||||
|
||||
// External link? Bail.
|
||||
if ($this.attr('href').charAt(0) != '#')
|
||||
return;
|
||||
|
||||
// Deactivate all links.
|
||||
$sidebar_a.removeClass('active');
|
||||
|
||||
// Activate link *and* lock it (so Scrollex doesn't try to activate other links as we're scrolling to this one's section).
|
||||
$this
|
||||
.addClass('active')
|
||||
.addClass('active-locked');
|
||||
|
||||
})
|
||||
.each(function() {
|
||||
|
||||
var $this = $(this),
|
||||
id = $this.attr('href'),
|
||||
$section = $(id);
|
||||
|
||||
// No section for this link? Bail.
|
||||
if ($section.length < 1)
|
||||
return;
|
||||
|
||||
// Scrollex.
|
||||
$section.scrollex({
|
||||
mode: 'middle',
|
||||
top: '-20vh',
|
||||
bottom: '-20vh',
|
||||
initialize: function() {
|
||||
|
||||
// Deactivate section.
|
||||
$section.addClass('inactive');
|
||||
|
||||
},
|
||||
enter: function() {
|
||||
|
||||
// Activate section.
|
||||
$section.removeClass('inactive');
|
||||
|
||||
// No locked links? Deactivate all links and activate this section's one.
|
||||
if ($sidebar_a.filter('.active-locked').length == 0) {
|
||||
|
||||
$sidebar_a.removeClass('active');
|
||||
$this.addClass('active');
|
||||
|
||||
}
|
||||
|
||||
// Otherwise, if this section's link is the one that's locked, unlock it.
|
||||
else if ($this.hasClass('active-locked'))
|
||||
$this.removeClass('active-locked');
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// Scrolly.
|
||||
$('.scrolly').scrolly({
|
||||
speed: 1000,
|
||||
offset: function() {
|
||||
|
||||
// If <=large, >small, and sidebar is present, use its height as the offset.
|
||||
if (breakpoints.active('<=large')
|
||||
&& !breakpoints.active('<=small')
|
||||
&& $sidebar.length > 0)
|
||||
return $sidebar.height();
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// Spotlights.
|
||||
$('.spotlights > section')
|
||||
.scrollex({
|
||||
mode: 'middle',
|
||||
top: '-10vh',
|
||||
bottom: '-10vh',
|
||||
initialize: function() {
|
||||
|
||||
// Deactivate section.
|
||||
$(this).addClass('inactive');
|
||||
|
||||
},
|
||||
enter: function() {
|
||||
|
||||
// Activate section.
|
||||
$(this).removeClass('inactive');
|
||||
|
||||
}
|
||||
})
|
||||
.each(function() {
|
||||
|
||||
var $this = $(this),
|
||||
$image = $this.find('.image'),
|
||||
$img = $image.find('img'),
|
||||
x;
|
||||
|
||||
// Assign image.
|
||||
$image.css('background-image', 'url(' + $img.attr('src') + ')');
|
||||
|
||||
// Set background position.
|
||||
if (x = $img.data('position'))
|
||||
$image.css('background-position', x);
|
||||
|
||||
// Hide <img>.
|
||||
$img.hide();
|
||||
|
||||
});
|
||||
|
||||
// Features.
|
||||
$('.features')
|
||||
.scrollex({
|
||||
mode: 'middle',
|
||||
top: '-20vh',
|
||||
bottom: '-20vh',
|
||||
initialize: function() {
|
||||
|
||||
// Deactivate section.
|
||||
$(this).addClass('inactive');
|
||||
|
||||
},
|
||||
enter: function() {
|
||||
|
||||
// Activate section.
|
||||
$(this).removeClass('inactive');
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery);
|
@ -1,587 +0,0 @@
|
||||
(function($) {
|
||||
|
||||
/**
|
||||
* Generate an indented list of links from a nav. Meant for use with panel().
|
||||
* @return {jQuery} jQuery object.
|
||||
*/
|
||||
$.fn.navList = function() {
|
||||
|
||||
var $this = $(this);
|
||||
$a = $this.find('a'),
|
||||
b = [];
|
||||
|
||||
$a.each(function() {
|
||||
|
||||
var $this = $(this),
|
||||
indent = Math.max(0, $this.parents('li').length - 1),
|
||||
href = $this.attr('href'),
|
||||
target = $this.attr('target');
|
||||
|
||||
b.push(
|
||||
'<a ' +
|
||||
'class="link depth-' + indent + '"' +
|
||||
( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
|
||||
( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
|
||||
'>' +
|
||||
'<span class="indent-' + indent + '"></span>' +
|
||||
$this.text() +
|
||||
'</a>'
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
return b.join('');
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel-ify an element.
|
||||
* @param {object} userConfig User config.
|
||||
* @return {jQuery} jQuery object.
|
||||
*/
|
||||
$.fn.panel = function(userConfig) {
|
||||
|
||||
// No elements?
|
||||
if (this.length == 0)
|
||||
return $this;
|
||||
|
||||
// Multiple elements?
|
||||
if (this.length > 1) {
|
||||
|
||||
for (var i=0; i < this.length; i++)
|
||||
$(this[i]).panel(userConfig);
|
||||
|
||||
return $this;
|
||||
|
||||
}
|
||||
|
||||
// Vars.
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
$window = $(window),
|
||||
id = $this.attr('id'),
|
||||
config;
|
||||
|
||||
// Config.
|
||||
config = $.extend({
|
||||
|
||||
// Delay.
|
||||
delay: 0,
|
||||
|
||||
// Hide panel on link click.
|
||||
hideOnClick: false,
|
||||
|
||||
// Hide panel on escape keypress.
|
||||
hideOnEscape: false,
|
||||
|
||||
// Hide panel on swipe.
|
||||
hideOnSwipe: false,
|
||||
|
||||
// Reset scroll position on hide.
|
||||
resetScroll: false,
|
||||
|
||||
// Reset forms on hide.
|
||||
resetForms: false,
|
||||
|
||||
// Side of viewport the panel will appear.
|
||||
side: null,
|
||||
|
||||
// Target element for "class".
|
||||
target: $this,
|
||||
|
||||
// Class to toggle.
|
||||
visibleClass: 'visible'
|
||||
|
||||
}, userConfig);
|
||||
|
||||
// Expand "target" if it's not a jQuery object already.
|
||||
if (typeof config.target != 'jQuery')
|
||||
config.target = $(config.target);
|
||||
|
||||
// Panel.
|
||||
|
||||
// Methods.
|
||||
$this._hide = function(event) {
|
||||
|
||||
// Already hidden? Bail.
|
||||
if (!config.target.hasClass(config.visibleClass))
|
||||
return;
|
||||
|
||||
// If an event was provided, cancel it.
|
||||
if (event) {
|
||||
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
}
|
||||
|
||||
// Hide.
|
||||
config.target.removeClass(config.visibleClass);
|
||||
|
||||
// Post-hide stuff.
|
||||
window.setTimeout(function() {
|
||||
|
||||
// Reset scroll position.
|
||||
if (config.resetScroll)
|
||||
$this.scrollTop(0);
|
||||
|
||||
// Reset forms.
|
||||
if (config.resetForms)
|
||||
$this.find('form').each(function() {
|
||||
this.reset();
|
||||
});
|
||||
|
||||
}, config.delay);
|
||||
|
||||
};
|
||||
|
||||
// Vendor fixes.
|
||||
$this
|
||||
.css('-ms-overflow-style', '-ms-autohiding-scrollbar')
|
||||
.css('-webkit-overflow-scrolling', 'touch');
|
||||
|
||||
// Hide on click.
|
||||
if (config.hideOnClick) {
|
||||
|
||||
$this.find('a')
|
||||
.css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
|
||||
|
||||
$this
|
||||
.on('click', 'a', function(event) {
|
||||
|
||||
var $a = $(this),
|
||||
href = $a.attr('href'),
|
||||
target = $a.attr('target');
|
||||
|
||||
if (!href || href == '#' || href == '' || href == '#' + id)
|
||||
return;
|
||||
|
||||
// Cancel original event.
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
// Hide panel.
|
||||
$this._hide();
|
||||
|
||||
// Redirect to href.
|
||||
window.setTimeout(function() {
|
||||
|
||||
if (target == '_blank')
|
||||
window.open(href);
|
||||
else
|
||||
window.location.href = href;
|
||||
|
||||
}, config.delay + 10);
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// Event: Touch stuff.
|
||||
$this.on('touchstart', function(event) {
|
||||
|
||||
$this.touchPosX = event.originalEvent.touches[0].pageX;
|
||||
$this.touchPosY = event.originalEvent.touches[0].pageY;
|
||||
|
||||
})
|
||||
|
||||
$this.on('touchmove', function(event) {
|
||||
|
||||
if ($this.touchPosX === null
|
||||
|| $this.touchPosY === null)
|
||||
return;
|
||||
|
||||
var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
|
||||
diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
|
||||
th = $this.outerHeight(),
|
||||
ts = ($this.get(0).scrollHeight - $this.scrollTop());
|
||||
|
||||
// Hide on swipe?
|
||||
if (config.hideOnSwipe) {
|
||||
|
||||
var result = false,
|
||||
boundary = 20,
|
||||
delta = 50;
|
||||
|
||||
switch (config.side) {
|
||||
|
||||
case 'left':
|
||||
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);
|
||||
break;
|
||||
|
||||
case 'right':
|
||||
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));
|
||||
break;
|
||||
|
||||
case 'top':
|
||||
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);
|
||||
break;
|
||||
|
||||
case 'bottom':
|
||||
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (result) {
|
||||
|
||||
$this.touchPosX = null;
|
||||
$this.touchPosY = null;
|
||||
$this._hide();
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Prevent vertical scrolling past the top or bottom.
|
||||
if (($this.scrollTop() < 0 && diffY < 0)
|
||||
|| (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {
|
||||
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Event: Prevent certain events inside the panel from bubbling.
|
||||
$this.on('click touchend touchstart touchmove', function(event) {
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// Event: Hide panel if a child anchor tag pointing to its ID is clicked.
|
||||
$this.on('click', 'a[href="#' + id + '"]', function(event) {
|
||||
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
config.target.removeClass(config.visibleClass);
|
||||
|
||||
});
|
||||
|
||||
// Body.
|
||||
|
||||
// Event: Hide panel on body click/tap.
|
||||
$body.on('click touchend', function(event) {
|
||||
$this._hide(event);
|
||||
});
|
||||
|
||||
// Event: Toggle.
|
||||
$body.on('click', 'a[href="#' + id + '"]', function(event) {
|
||||
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
config.target.toggleClass(config.visibleClass);
|
||||
|
||||
});
|
||||
|
||||
// Window.
|
||||
|
||||
// Event: Hide on ESC.
|
||||
if (config.hideOnEscape)
|
||||
$window.on('keydown', function(event) {
|
||||
|
||||
if (event.keyCode == 27)
|
||||
$this._hide(event);
|
||||
|
||||
});
|
||||
|
||||
return $this;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Apply "placeholder" attribute polyfill to one or more forms.
|
||||
* @return {jQuery} jQuery object.
|
||||
*/
|
||||
$.fn.placeholder = function() {
|
||||
|
||||
// Browser natively supports placeholders? Bail.
|
||||
if (typeof (document.createElement('input')).placeholder != 'undefined')
|
||||
return $(this);
|
||||
|
||||
// No elements?
|
||||
if (this.length == 0)
|
||||
return $this;
|
||||
|
||||
// Multiple elements?
|
||||
if (this.length > 1) {
|
||||
|
||||
for (var i=0; i < this.length; i++)
|
||||
$(this[i]).placeholder();
|
||||
|
||||
return $this;
|
||||
|
||||
}
|
||||
|
||||
// Vars.
|
||||
var $this = $(this);
|
||||
|
||||
// Text, TextArea.
|
||||
$this.find('input[type=text],textarea')
|
||||
.each(function() {
|
||||
|
||||
var i = $(this);
|
||||
|
||||
if (i.val() == ''
|
||||
|| i.val() == i.attr('placeholder'))
|
||||
i
|
||||
.addClass('polyfill-placeholder')
|
||||
.val(i.attr('placeholder'));
|
||||
|
||||
})
|
||||
.on('blur', function() {
|
||||
|
||||
var i = $(this);
|
||||
|
||||
if (i.attr('name').match(/-polyfill-field$/))
|
||||
return;
|
||||
|
||||
if (i.val() == '')
|
||||
i
|
||||
.addClass('polyfill-placeholder')
|
||||
.val(i.attr('placeholder'));
|
||||
|
||||
})
|
||||
.on('focus', function() {
|
||||
|
||||
var i = $(this);
|
||||
|
||||
if (i.attr('name').match(/-polyfill-field$/))
|
||||
return;
|
||||
|
||||
if (i.val() == i.attr('placeholder'))
|
||||
i
|
||||
.removeClass('polyfill-placeholder')
|
||||
.val('');
|
||||
|
||||
});
|
||||
|
||||
// Password.
|
||||
$this.find('input[type=password]')
|
||||
.each(function() {
|
||||
|
||||
var i = $(this);
|
||||
var x = $(
|
||||
$('<div>')
|
||||
.append(i.clone())
|
||||
.remove()
|
||||
.html()
|
||||
.replace(/type="password"/i, 'type="text"')
|
||||
.replace(/type=password/i, 'type=text')
|
||||
);
|
||||
|
||||
if (i.attr('id') != '')
|
||||
x.attr('id', i.attr('id') + '-polyfill-field');
|
||||
|
||||
if (i.attr('name') != '')
|
||||
x.attr('name', i.attr('name') + '-polyfill-field');
|
||||
|
||||
x.addClass('polyfill-placeholder')
|
||||
.val(x.attr('placeholder')).insertAfter(i);
|
||||
|
||||
if (i.val() == '')
|
||||
i.hide();
|
||||
else
|
||||
x.hide();
|
||||
|
||||
i
|
||||
.on('blur', function(event) {
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
|
||||
|
||||
if (i.val() == '') {
|
||||
|
||||
i.hide();
|
||||
x.show();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
x
|
||||
.on('focus', function(event) {
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
|
||||
|
||||
x.hide();
|
||||
|
||||
i
|
||||
.show()
|
||||
.focus();
|
||||
|
||||
})
|
||||
.on('keypress', function(event) {
|
||||
|
||||
event.preventDefault();
|
||||
x.val('');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// Events.
|
||||
$this
|
||||
.on('submit', function() {
|
||||
|
||||
$this.find('input[type=text],input[type=password],textarea')
|
||||
.each(function(event) {
|
||||
|
||||
var i = $(this);
|
||||
|
||||
if (i.attr('name').match(/-polyfill-field$/))
|
||||
i.attr('name', '');
|
||||
|
||||
if (i.val() == i.attr('placeholder')) {
|
||||
|
||||
i.removeClass('polyfill-placeholder');
|
||||
i.val('');
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
})
|
||||
.on('reset', function(event) {
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
$this.find('select')
|
||||
.val($('option:first').val());
|
||||
|
||||
$this.find('input,textarea')
|
||||
.each(function() {
|
||||
|
||||
var i = $(this),
|
||||
x;
|
||||
|
||||
i.removeClass('polyfill-placeholder');
|
||||
|
||||
switch (this.type) {
|
||||
|
||||
case 'submit':
|
||||
case 'reset':
|
||||
break;
|
||||
|
||||
case 'password':
|
||||
i.val(i.attr('defaultValue'));
|
||||
|
||||
x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
|
||||
|
||||
if (i.val() == '') {
|
||||
i.hide();
|
||||
x.show();
|
||||
}
|
||||
else {
|
||||
i.show();
|
||||
x.hide();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'checkbox':
|
||||
case 'radio':
|
||||
i.attr('checked', i.attr('defaultValue'));
|
||||
break;
|
||||
|
||||
case 'text':
|
||||
case 'textarea':
|
||||
i.val(i.attr('defaultValue'));
|
||||
|
||||
if (i.val() == '') {
|
||||
i.addClass('polyfill-placeholder');
|
||||
i.val(i.attr('placeholder'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
i.val(i.attr('defaultValue'));
|
||||
break;
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
return $this;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Moves elements to/from the first positions of their respective parents.
|
||||
* @param {jQuery} $elements Elements (or selector) to move.
|
||||
* @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
|
||||
*/
|
||||
$.prioritize = function($elements, condition) {
|
||||
|
||||
var key = '__prioritize';
|
||||
|
||||
// Expand $elements if it's not already a jQuery object.
|
||||
if (typeof $elements != 'jQuery')
|
||||
$elements = $($elements);
|
||||
|
||||
// Step through elements.
|
||||
$elements.each(function() {
|
||||
|
||||
var $e = $(this), $p,
|
||||
$parent = $e.parent();
|
||||
|
||||
// No parent? Bail.
|
||||
if ($parent.length == 0)
|
||||
return;
|
||||
|
||||
// Not moved? Move it.
|
||||
if (!$e.data(key)) {
|
||||
|
||||
// Condition is false? Bail.
|
||||
if (!condition)
|
||||
return;
|
||||
|
||||
// Get placeholder (which will serve as our point of reference for when this element needs to move back).
|
||||
$p = $e.prev();
|
||||
|
||||
// Couldn't find anything? Means this element's already at the top, so bail.
|
||||
if ($p.length == 0)
|
||||
return;
|
||||
|
||||
// Move element to top of parent.
|
||||
$e.prependTo($parent);
|
||||
|
||||
// Mark element as moved.
|
||||
$e.data(key, $p);
|
||||
|
||||
}
|
||||
|
||||
// Moved already?
|
||||
else {
|
||||
|
||||
// Condition is true? Bail.
|
||||
if (condition)
|
||||
return;
|
||||
|
||||
$p = $e.data(key);
|
||||
|
||||
// Move element back to its original location (using our placeholder).
|
||||
$e.insertAfter($p);
|
||||
|
||||
// Unmark element as moved.
|
||||
$e.removeData(key);
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
})(jQuery);
|
Before Width: | Height: | Size: 674 KiB |