Merge branch 'master' into 'production'
Prod deploy: Contacts page and minor fixes See merge request sahkoinsinoorikilta/vtmk/web2.0-frontend!71
This commit is contained in:
+1
-4
@@ -1,9 +1,6 @@
|
|||||||
{
|
{
|
||||||
"processors": [
|
|
||||||
"stylelint-processor-styled-components"
|
|
||||||
],
|
|
||||||
"extends": [
|
"extends": [
|
||||||
"stylelint-config-recommended",
|
"stylelint-config-standard",
|
||||||
"stylelint-config-styled-components"
|
"stylelint-config-styled-components"
|
||||||
],
|
],
|
||||||
"syntax": "css"
|
"syntax": "css"
|
||||||
|
|||||||
Generated
+755
-1102
File diff suppressed because it is too large
Load Diff
+14
-15
@@ -34,40 +34,39 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/js-cookie": "^2.2.6",
|
"@types/js-cookie": "^2.2.6",
|
||||||
"@types/react": "^17.0.5",
|
"@types/react": "^17.0.11",
|
||||||
"@types/react-beautiful-dnd": "^13.0.0",
|
"@types/react-beautiful-dnd": "^13.0.0",
|
||||||
"@types/react-csv": "^1.1.1",
|
"@types/react-csv": "^1.1.1",
|
||||||
"@types/react-dom": "^17.0.5",
|
"@types/react-dom": "^17.0.7",
|
||||||
"@types/react-jsonschema-form": "^1.7.5",
|
"@types/react-jsonschema-form": "^1.7.5",
|
||||||
"@types/shortid": "^0.0.29",
|
"@types/shortid": "^0.0.29",
|
||||||
"@types/styled-components": "^5.1.9",
|
"@types/styled-components": "^5.1.10",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.23.0",
|
"@typescript-eslint/eslint-plugin": "^4.27.0",
|
||||||
"@typescript-eslint/parser": "^4.23.0",
|
"@typescript-eslint/parser": "^4.27.0",
|
||||||
"babel-plugin-styled-components": "^1.12.0",
|
"babel-plugin-styled-components": "^1.12.0",
|
||||||
"eslint": "^7.26.0",
|
"eslint": "^7.28.0",
|
||||||
"eslint-config-airbnb-typescript": "^12.3.1",
|
"eslint-config-airbnb-typescript": "^12.3.1",
|
||||||
"eslint-plugin-import": "^2.23.1",
|
"eslint-plugin-import": "^2.23.4",
|
||||||
"eslint-plugin-jsx-a11y": "^6.4.1",
|
"eslint-plugin-jsx-a11y": "^6.4.1",
|
||||||
"eslint-plugin-react": "^7.23.2",
|
"eslint-plugin-react": "^7.24.0",
|
||||||
"eslint-plugin-react-hooks": "^4.2.0",
|
"eslint-plugin-react-hooks": "^4.2.0",
|
||||||
"husky": "^6.0.0",
|
"husky": "^6.0.0",
|
||||||
"next-sitemap": "^1.6.57",
|
"next-sitemap": "^1.6.116",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"stylelint": "^13.13.1",
|
"stylelint": "^13.13.1",
|
||||||
"stylelint-config-recommended": "^5.0.0",
|
"stylelint-config-standard": "^22.0.0",
|
||||||
"stylelint-config-styled-components": "^0.1.1",
|
"stylelint-config-styled-components": "^0.1.1",
|
||||||
"stylelint-processor-styled-components": "^1.10.0",
|
|
||||||
"testcafe": "^1.14.2",
|
"testcafe": "^1.14.2",
|
||||||
"typescript": "^4.2.4"
|
"typescript": "^4.3.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@next/bundle-analyzer": "^10.2.0",
|
"@next/bundle-analyzer": "^10.2.3",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"date-fns": "^2.21.3",
|
"date-fns": "^2.22.1",
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
"js-cookie": "^2.2.1",
|
"js-cookie": "^2.2.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"next": "^10.2.0",
|
"next": "^10.2.3",
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-beautiful-dnd": "^13.1.0",
|
"react-beautiful-dnd": "^13.1.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import AccordionIcon from "./AccordionIcon";
|
import AccordionIcon from "./AccordionIcon";
|
||||||
|
|
||||||
const Container = styled.div`
|
const Container = styled.div`
|
||||||
@@ -30,7 +30,6 @@ const Container = styled.div`
|
|||||||
font-size: 1.125rem;
|
font-size: 1.125rem;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "../../theme/colors";
|
import colors from "../../theme/colors";
|
||||||
|
|
||||||
interface AccordionIconProps {
|
interface AccordionIconProps {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { ComponentProps } from "react";
|
import React, { ComponentProps } from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import { Link } from "@components/index";
|
import { Link } from "@components/index";
|
||||||
import AddIcon from "@components/AddIcon";
|
import AddIcon from "@components/AddIcon";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import HeaderLogo from "./HeaderLogo";
|
import HeaderLogo from "./HeaderLogo";
|
||||||
|
|
||||||
const Header = styled.header`
|
const Header = styled.header`
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
interface ButtonProps {
|
interface ButtonProps {
|
||||||
onClick: () => void;
|
onClick: () => void;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import { Link } from "@components/index";
|
import { Link } from "@components/index";
|
||||||
import breakpoints from "@theme/breakpoints";
|
import breakpoints from "@theme/breakpoints";
|
||||||
|
|
||||||
@@ -42,7 +42,6 @@ const StyledCard = styled.article`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
padding: 0.5rem;
|
padding: 0.5rem;
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
@@ -54,7 +53,6 @@ const StyledCard = styled.article`
|
|||||||
|
|
||||||
button {
|
button {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
padding: 0.8rem 2rem;
|
padding: 0.8rem 2rem;
|
||||||
margin: 0.5rem;
|
margin: 0.5rem;
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
@@ -74,7 +72,7 @@ const WrappedCard: React.FC<WrappedCardProps> = ({
|
|||||||
}) => (
|
}) => (
|
||||||
<StyledCard {...props}>
|
<StyledCard {...props}>
|
||||||
{image && (
|
{image && (
|
||||||
<Image src={image.src} alt={image.alt} layout="responsive" width={0} height={0} objectFit="scale-down" />
|
<Image src={image.src} alt={image.alt} layout="responsive" width={0} height={0} objectFit="scale-down" />
|
||||||
)}
|
)}
|
||||||
<p>{startTime}</p>
|
<p>{startTime}</p>
|
||||||
<h3>{title}</h3>
|
<h3>{title}</h3>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
const Card = styled.article`
|
const Card = styled.article`
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -45,21 +45,22 @@ const CrossFadeImages: React.FC<CrossFadeImagesProps> = ({
|
|||||||
|
|
||||||
const animation = keyframes`
|
const animation = keyframes`
|
||||||
0% {
|
0% {
|
||||||
opacity:1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
${(presentationTime / TOTAL_TIME) * 100}% {
|
${(presentationTime / TOTAL_TIME) * 100}% {
|
||||||
opacity:1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
${(1 / len) * 100}% {
|
${(1 / len) * 100}% {
|
||||||
opacity:0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
${100 - ((fadeTime / TOTAL_TIME) * 100)}% {
|
${100 - ((fadeTime / TOTAL_TIME) * 100)}% {
|
||||||
opacity:0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
opacity:1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const delays = images.map((_, idx) => idx * SINGLE_IMAGE_TIME).reverse();
|
const delays = images.map((_, idx) => idx * SINGLE_IMAGE_TIME).reverse();
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
const Divider = styled.hr`
|
const Divider = styled.hr`
|
||||||
width: 98%;
|
width: 98%;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
interface DropDownBoxProps {
|
interface DropDownBoxProps {
|
||||||
onMouseEnter: () => void;
|
onMouseEnter: () => void;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import breakpoints from "@theme/breakpoints";
|
|||||||
const Columns = styled.div`
|
const Columns = styled.div`
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
& > div > div {
|
& > div > div {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
@@ -56,9 +57,11 @@ const MarginSpace = styled.div`
|
|||||||
|
|
||||||
const Map = styled.div`
|
const Map = styled.div`
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
@media screen and (max-width: ${breakpoints.mobile}) {
|
@media screen and (max-width: ${breakpoints.mobile}) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
iframe {
|
iframe {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import BlockScroll from "./BlockScroll";
|
|||||||
const StyledHeader = styled.header`
|
const StyledHeader = styled.header`
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row nowrap;
|
flex-flow: row nowrap;
|
||||||
|
|
||||||
@media screen and (max-width: ${breakpoints.mobile}) {
|
@media screen and (max-width: ${breakpoints.mobile}) {
|
||||||
flex-flow: column nowrap;
|
flex-flow: column nowrap;
|
||||||
}
|
}
|
||||||
@@ -20,11 +21,9 @@ const Sticky = styled.div<{ $isHidden?: boolean; $mobileMenuOpen?: boolean }>`
|
|||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0;
|
top: 0;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
padding: 0 1rem;
|
padding: 0 1rem;
|
||||||
background-color: ${colors.darkBlue};
|
background-color: ${colors.darkBlue};
|
||||||
transition: all 200ms ease-out;
|
transition: all 200ms ease-out;
|
||||||
|
|
||||||
height: ${(p) => (p.$mobileMenuOpen ? "100vh" : "unset")};
|
height: ${(p) => (p.$mobileMenuOpen ? "100vh" : "unset")};
|
||||||
|
|
||||||
${(p) => (p.$isHidden ? (`
|
${(p) => (p.$isHidden ? (`
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ const Container = styled.div`
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
min-height: 75vh;
|
min-height: 75vh;
|
||||||
|
|
||||||
section {
|
section {
|
||||||
padding: 2rem 6rem;
|
padding: 2rem 6rem;
|
||||||
|
|
||||||
@media screen and (max-width: ${breakpoints.mobile}) {
|
@media screen and (max-width: ${breakpoints.mobile}) {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
}
|
}
|
||||||
@@ -40,6 +40,7 @@ const Container = styled.div`
|
|||||||
|
|
||||||
color: ${colors.white};
|
color: ${colors.white};
|
||||||
background-color: ${colors.darkBlue};
|
background-color: ${colors.darkBlue};
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
color: ${colors.white};
|
color: ${colors.white};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import { Link } from "@components/index";
|
import { Link } from "@components/index";
|
||||||
|
|
||||||
interface HeroAsideItemProps {
|
interface HeroAsideItemProps {
|
||||||
@@ -39,6 +39,7 @@ interface HeroAsideProps {
|
|||||||
// TODO: Color combos
|
// TODO: Color combos
|
||||||
const Aside = styled.aside<{ colors: string }>`
|
const Aside = styled.aside<{ colors: string }>`
|
||||||
${(p) => p.colors}
|
${(p) => p.colors}
|
||||||
|
|
||||||
flex: 4;
|
flex: 4;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -58,7 +59,6 @@ const Aside = styled.aside<{ colors: string }>`
|
|||||||
line-height: 2rem;
|
line-height: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
& > p {
|
& > p {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
const Buttons = styled.div<{ row?: boolean }>`
|
const Buttons = styled.div<{ row?: boolean }>`
|
||||||
min-width: 20%;
|
min-width: 20%;
|
||||||
@@ -20,7 +20,7 @@ const Buttons = styled.div<{ row?: boolean }>`
|
|||||||
margin: 0.5rem;
|
margin: 0.5rem;
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
letter-spacing: .1em;
|
letter-spacing: 0.1em;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
border: 1px solid ${colors.lightTurquoise};
|
border: 1px solid ${colors.lightTurquoise};
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const Section = styled.section`
|
|||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: ${colors.white};
|
color: ${colors.white};
|
||||||
text-decoration: none
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
const Note = styled.span`
|
const Note = styled.span`
|
||||||
color: white;
|
color: white;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
const Loader = styled((props) => (
|
const Loader = styled((props) => (
|
||||||
<div {...props}>
|
<div {...props}>
|
||||||
@@ -15,9 +15,9 @@ const Loader = styled((props) => (
|
|||||||
height: 1em;
|
height: 1em;
|
||||||
|
|
||||||
@keyframes rotation {
|
@keyframes rotation {
|
||||||
0% { transform: rotate(0deg) }
|
0% { transform: rotate(0deg); }
|
||||||
50% { transform: rotate(180deg) }
|
50% { transform: rotate(180deg); }
|
||||||
100% { transform: rotate(360deg) }
|
100% { transform: rotate(360deg); }
|
||||||
}
|
}
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ const Nav = styled.div`
|
|||||||
flex-flow: row nowrap;
|
flex-flow: row nowrap;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
color: ${colors.lightBlue};
|
color: ${colors.lightBlue};
|
||||||
margin-left: 5rem;
|
margin-left: 5rem;
|
||||||
@@ -53,7 +52,6 @@ const Nav = styled.div`
|
|||||||
svg {
|
svg {
|
||||||
width: 1.5rem;
|
width: 1.5rem;
|
||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
|
|
||||||
fill: ${colors.white};
|
fill: ${colors.white};
|
||||||
color: ${colors.white};
|
color: ${colors.white};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import { renderNavigationItems } from "./Navigation";
|
import { renderNavigationItems } from "./Navigation";
|
||||||
|
|
||||||
const Nav = styled.nav`
|
const Nav = styled.nav`
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import { Link } from "@components/index";
|
import { Link } from "@components/index";
|
||||||
|
|
||||||
interface PageLinkProps {
|
interface PageLinkProps {
|
||||||
@@ -32,8 +32,8 @@ const StyledPageLink = styled.div`
|
|||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
|
||||||
color: ${colors.blue1};
|
color: ${colors.blue1};
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: ${colors.darkBlue};
|
color: ${colors.darkBlue};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,75 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import { Link } from "@components/index";
|
import { Link } from "@components/index";
|
||||||
|
|
||||||
const Section = styled.section<{ colors: string }>`
|
type Colors = "orange1" | "lightBlue" | "darkBlue" | "blue1" | "lightTurquoise" | "sik100Blue";
|
||||||
${(p) => p.colors}
|
|
||||||
|
const textColors = (bgColor: Colors) => {
|
||||||
|
switch (bgColor) {
|
||||||
|
case "orange1": return (
|
||||||
|
`
|
||||||
|
color: ${colors.white};
|
||||||
|
background-color: ${colors[bgColor]};
|
||||||
|
a:hover {
|
||||||
|
color: ${colors.darkBlue};
|
||||||
|
}
|
||||||
|
`
|
||||||
|
);
|
||||||
|
case "sik100Blue": return (
|
||||||
|
`
|
||||||
|
background-color: ${colors[bgColor]};
|
||||||
|
color: ${colors.sik100Gold};
|
||||||
|
`
|
||||||
|
);
|
||||||
|
case "darkBlue": return (
|
||||||
|
`
|
||||||
|
background-color: ${colors[bgColor]};
|
||||||
|
color: ${colors.white};
|
||||||
|
`
|
||||||
|
);
|
||||||
|
|
||||||
|
case "lightBlue": return (
|
||||||
|
`
|
||||||
|
background-color: ${colors[bgColor]};
|
||||||
|
color: ${colors.darkBlue};
|
||||||
|
a:hover {
|
||||||
|
color: ${colors.white};
|
||||||
|
}
|
||||||
|
`
|
||||||
|
);
|
||||||
|
|
||||||
|
case "lightTurquoise": return (
|
||||||
|
`
|
||||||
|
background-color: ${colors[bgColor]};
|
||||||
|
color: ${colors.darkBlue};
|
||||||
|
a:hover {
|
||||||
|
color: ${colors.white};
|
||||||
|
}
|
||||||
|
`
|
||||||
|
);
|
||||||
|
case "blue1": return (
|
||||||
|
`
|
||||||
|
background-color: ${colors[bgColor]};
|
||||||
|
color: ${colors.white};
|
||||||
|
a:hover {
|
||||||
|
color: ${colors.darkBlue};
|
||||||
|
}
|
||||||
|
`
|
||||||
|
);
|
||||||
|
default: return "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const Section = styled.section<{ bgColor: Colors }>`
|
||||||
|
${({ bgColor }) => textColors(bgColor)}
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
padding: 2rem 0;
|
padding: 2rem 0;
|
||||||
border: 0.5rem colors.sik100Gold;
|
border: 0.5rem ${colors.sik100Gold};
|
||||||
flex-flow: row wrap;
|
flex-flow: row wrap;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
@@ -29,71 +87,25 @@ const Section = styled.section<{ colors: string }>`
|
|||||||
|
|
||||||
& > h1 {
|
& > h1 {
|
||||||
a {
|
a {
|
||||||
|
text-decoration: underline;
|
||||||
text-decoration: underline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
type Colors = "orange1" | "lightBlue" | "darkBlue" | "blue1" | "lightTurquoise" | "sik100Blue";
|
|
||||||
|
|
||||||
interface CTASectionProps extends React.HTMLAttributes<HTMLDivElement> {
|
interface CTASectionProps extends React.HTMLAttributes<HTMLDivElement> {
|
||||||
bgColor?: Colors;
|
bgColor?: Colors;
|
||||||
link?: string;
|
link?: string;
|
||||||
linkText?: string;
|
linkText?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const textColors = (bgColor: Colors) => {
|
|
||||||
switch (bgColor) {
|
|
||||||
case "orange1": return `
|
|
||||||
color: ${colors.white};
|
|
||||||
background-color: ${colors[bgColor]};
|
|
||||||
a:hover {
|
|
||||||
color: ${colors.darkBlue};
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
case "sik100Blue": return `
|
|
||||||
background-color: ${colors[bgColor]};
|
|
||||||
color: ${colors.sik100Gold};
|
|
||||||
`;
|
|
||||||
case "darkBlue": return `
|
|
||||||
background-color: ${colors[bgColor]};
|
|
||||||
color: ${colors.white};
|
|
||||||
`;
|
|
||||||
|
|
||||||
case "lightBlue": return `
|
|
||||||
background-color: ${colors[bgColor]};
|
|
||||||
color: ${colors.darkBlue};
|
|
||||||
a:hover {
|
|
||||||
color: ${colors.white};
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
|
|
||||||
case "lightTurquoise": return `
|
|
||||||
background-color: ${colors[bgColor]};
|
|
||||||
color: ${colors.darkBlue};
|
|
||||||
a:hover {
|
|
||||||
color: ${colors.white};
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
case "blue1": return `
|
|
||||||
background-color: ${colors[bgColor]};
|
|
||||||
color: ${colors.white};
|
|
||||||
a:hover {
|
|
||||||
color: ${colors.darkBlue};
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
default: return "";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const CTASection: React.FC<CTASectionProps> = ({
|
const CTASection: React.FC<CTASectionProps> = ({
|
||||||
bgColor = "orange1", link, linkText, children, ...props
|
bgColor = "orange1", link, linkText, children, ...props
|
||||||
}) => (
|
}) => (
|
||||||
<Section colors={textColors(bgColor)} {...props}>
|
<Section bgColor={bgColor} {...props}>
|
||||||
<h1>{children}</h1>
|
<h1>{children}</h1>
|
||||||
{link && (
|
{link && (
|
||||||
<Link to={link}>
|
<Link to={link}>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import colors from "@theme/colors";
|
|||||||
import breakpoints from "@theme/breakpoints";
|
import breakpoints from "@theme/breakpoints";
|
||||||
|
|
||||||
const CardSection = styled.section`
|
const CardSection = styled.section`
|
||||||
|
|
||||||
h6 {
|
h6 {
|
||||||
color: ${colors.orange1};
|
color: ${colors.orange1};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import styled from "styled-components";
|
|||||||
const StyledSection = styled.section`
|
const StyledSection = styled.section`
|
||||||
display: block;
|
display: block;
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
|
|
||||||
grid-template-columns: 1fr auto;
|
grid-template-columns: 1fr auto;
|
||||||
grid-template-rows: auto 1fr;
|
grid-template-rows: auto 1fr;
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
|
|||||||
@@ -6,10 +6,8 @@ import breakpoints from "@theme/breakpoints";
|
|||||||
const StyledSection = styled.section`
|
const StyledSection = styled.section`
|
||||||
display: grid;
|
display: grid;
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
|
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
|
|
||||||
grid-template-columns: 1fr 2fr 1fr;
|
grid-template-columns: 1fr 2fr 1fr;
|
||||||
grid-template-rows: 1fr auto;
|
grid-template-rows: 1fr auto;
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
@@ -45,7 +43,8 @@ const StyledSection = styled.section`
|
|||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
& > div, p {
|
& > div,
|
||||||
|
p {
|
||||||
grid-area: content;
|
grid-area: content;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,13 +68,16 @@ const StyledSection = styled.section`
|
|||||||
& > aside:first-of-type {
|
& > aside:first-of-type {
|
||||||
grid-area: rightaside;
|
grid-area: rightaside;
|
||||||
padding-left: 1.5rem;
|
padding-left: 1.5rem;
|
||||||
|
|
||||||
@media screen and (max-width: ${breakpoints.mobile}) {
|
@media screen and (max-width: ${breakpoints.mobile}) {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
& > aside:nth-of-type(2) {
|
& > aside:nth-of-type(2) {
|
||||||
grid-area: leftaside;
|
grid-area: leftaside;
|
||||||
padding-right: 1.5rem;
|
padding-right: 1.5rem;
|
||||||
|
|
||||||
@media screen and (max-width: ${breakpoints.mobile}) {
|
@media screen and (max-width: ${breakpoints.mobile}) {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
const Container = styled.label`
|
const Container = styled.label`
|
||||||
display: block;
|
display: block;
|
||||||
@@ -34,7 +34,7 @@ const CustomCBoxElement = styled.span<{ checked?: boolean }>`
|
|||||||
width: 1em;
|
width: 1em;
|
||||||
background-color: ${(props) => (props.checked ? colors.blue1 : colors.grey2)};
|
background-color: ${(props) => (props.checked ? colors.blue1 : colors.grey2)};
|
||||||
|
|
||||||
&:focus &:before {
|
&:focus &::before {
|
||||||
transition: box-shadow 150ms ease;
|
transition: box-shadow 150ms ease;
|
||||||
content: '';
|
content: '';
|
||||||
display: block;
|
display: block;
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ const CustomRadioElement = styled.span<{ checked?: boolean }>`
|
|||||||
left: 0;
|
left: 0;
|
||||||
height: 1em;
|
height: 1em;
|
||||||
width: 1em;
|
width: 1em;
|
||||||
background-color: ${(props) => (props.checked ? "#57b2df" : "#efece4")}; /* blue1 or grey2 */
|
|
||||||
|
/* blue1 or grey2 */
|
||||||
|
background-color: ${(props) => (props.checked ? "#57b2df" : "#efece4")};
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { ButtonHTMLAttributes } from "react";
|
import React, { ButtonHTMLAttributes } from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
const RemoveButton = styled.button`
|
const RemoveButton = styled.button`
|
||||||
background-color: ${colors.orange1} !important;
|
background-color: ${colors.orange1} !important;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { ReactNode } from "react";
|
import React, { ReactNode } from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { Draggable } from "react-beautiful-dnd";
|
import { Draggable } from "react-beautiful-dnd";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import { Question, InputProps } from "./common";
|
import { Question, InputProps } from "./common";
|
||||||
import OptionsWidget from "./OptionsWidget";
|
import OptionsWidget from "./OptionsWidget";
|
||||||
import TypeWidget from "./TypeWidget";
|
import TypeWidget from "./TypeWidget";
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ const Widget = styled.div`
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row nowrap;
|
flex-flow: row nowrap;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
background: none;
|
background: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 1rem 0;
|
margin: 1rem 0;
|
||||||
@@ -21,7 +20,6 @@ const Widget = styled.div`
|
|||||||
margin-right: 8px !important;
|
margin-right: 8px !important;
|
||||||
margin-top: -2px !important;
|
margin-top: -2px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ const NotFound = styled.main`
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 4rem;
|
font-size: 4rem;
|
||||||
|
|||||||
+2
-2
@@ -3,7 +3,7 @@ import Head from "next/head";
|
|||||||
import { AppProps } from "next/app";
|
import { AppProps } from "next/app";
|
||||||
import styled, { createGlobalStyle } from "styled-components";
|
import styled, { createGlobalStyle } from "styled-components";
|
||||||
import { ToastContainer } from "react-toastify";
|
import { ToastContainer } from "react-toastify";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import breakpoints from "@theme/breakpoints";
|
import breakpoints from "@theme/breakpoints";
|
||||||
import LocaleStore from "../i18n";
|
import LocaleStore from "../i18n";
|
||||||
|
|
||||||
@@ -21,6 +21,7 @@ const GlobalCommonStyles = createGlobalStyle`
|
|||||||
|
|
||||||
html {
|
html {
|
||||||
font-family: ${fontFamily};
|
font-family: ${fontFamily};
|
||||||
|
|
||||||
/* 12px */
|
/* 12px */
|
||||||
font-size: ${fontSize * 0.75}pt;
|
font-size: ${fontSize * 0.75}pt;
|
||||||
line-height: ${lineHeight};
|
line-height: ${lineHeight};
|
||||||
@@ -106,7 +107,6 @@ li {
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
a {
|
a {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
color: ${colors.blue1};
|
color: ${colors.blue1};
|
||||||
|
|||||||
+1
-45
@@ -1,41 +1,4 @@
|
|||||||
export type Colors =
|
const colors = {
|
||||||
"sik100-gold"|
|
|
||||||
"sik100-blue"|
|
|
||||||
"dark-blue" |
|
|
||||||
"light-blue" |
|
|
||||||
"white1" |
|
|
||||||
"black1" |
|
|
||||||
"grey1" |
|
|
||||||
"grey2" |
|
|
||||||
"orange1" |
|
|
||||||
"orange2" |
|
|
||||||
"blue1" |
|
|
||||||
"light-turquoise" |
|
|
||||||
"green1" |
|
|
||||||
"sand" |
|
|
||||||
"transparent" |
|
|
||||||
"inherit";
|
|
||||||
|
|
||||||
export const ColorMapper = new Map<Colors, string>([
|
|
||||||
["sik100-gold", "#fee469"],
|
|
||||||
["sik100-blue", "#12123d"],
|
|
||||||
["dark-blue", "#002d3a"],
|
|
||||||
["light-blue", "#bfdbd9"],
|
|
||||||
["white1", "#fff"],
|
|
||||||
["black1", "#000"],
|
|
||||||
["grey1", "#d4d0c7"],
|
|
||||||
["grey2", "#efece4"],
|
|
||||||
["orange1", "#d57a2d"],
|
|
||||||
["orange2", "#dd934e"],
|
|
||||||
["blue1", "#57b2df"],
|
|
||||||
["light-turquoise", "#beddeb"],
|
|
||||||
["green1", "#c0dcd9"],
|
|
||||||
["sand", "#fdf9d7"],
|
|
||||||
["transparent", "transparent"],
|
|
||||||
["inherit", "inherit"],
|
|
||||||
]);
|
|
||||||
|
|
||||||
export const colors = {
|
|
||||||
sik100Gold: "#fee469",
|
sik100Gold: "#fee469",
|
||||||
sik100Blue: "#12123d",
|
sik100Blue: "#12123d",
|
||||||
darkBlue: "#002d3a",
|
darkBlue: "#002d3a",
|
||||||
@@ -54,11 +17,4 @@ export const colors = {
|
|||||||
inherit: "inherit",
|
inherit: "inherit",
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Colors2 = keyof typeof colors;
|
|
||||||
|
|
||||||
export const colorToClass = (color: Colors): string => (color ? `color-div__${color}` : undefined);
|
|
||||||
export const bgColorToClass = (color: Colors): string => (color ? `color-div__background_${color}` : undefined);
|
|
||||||
export const hoverColorToClass = (color: Colors): string => (color ? `color-div__${color}Hoverable` : undefined);
|
|
||||||
export const bgHoverColorToClass = (color: Colors): string => (color ? `color-div__background_${color}Hoverable` : undefined);
|
|
||||||
|
|
||||||
export default colors;
|
export default colors;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ const Gallery = styled.div`
|
|||||||
|
|
||||||
@media screen and (max-width: ${breakpoints.mobile}) {
|
@media screen and (max-width: ${breakpoints.mobile}) {
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
min-height: 100vw;
|
min-height: 100vw;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { Divider, TextSection, Link } from "@components/index";
|
import { Divider, TextSection, Link } from "@components/index";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import ContactCard from "@components/ContactCard";
|
import ContactCard from "@components/ContactCard";
|
||||||
|
|
||||||
import BoardJson from "./board.json";
|
import BoardJson from "./board.json";
|
||||||
@@ -9,11 +9,26 @@ import HvtmkJson from "./hvtmk.json";
|
|||||||
import MtmkJson from "./mtmk.json";
|
import MtmkJson from "./mtmk.json";
|
||||||
import OptmkJson from "./optmk.json";
|
import OptmkJson from "./optmk.json";
|
||||||
import OtmkJson from "./otmk.json";
|
import OtmkJson from "./otmk.json";
|
||||||
import PtmkJson from "./ptmk.json";
|
import EPtmkJson from "./eptmk.json";
|
||||||
import SstmkJson from "./sstmk.json";
|
import SstmkJson from "./sstmk.json";
|
||||||
import TtmkJson from "./ttmk.json";
|
import TtmkJson from "./ttmk.json";
|
||||||
import UtmkJson from "./utmk.json";
|
import UtmkJson from "./utmk.json";
|
||||||
import YtmkJson from "./ytmk.json";
|
import YtmkJson from "./ytmk.json";
|
||||||
|
import Others from "./others.json";
|
||||||
|
|
||||||
|
const orderedCommittees = [
|
||||||
|
BoardJson,
|
||||||
|
HvtmkJson,
|
||||||
|
MtmkJson,
|
||||||
|
OptmkJson,
|
||||||
|
OtmkJson,
|
||||||
|
EPtmkJson,
|
||||||
|
SstmkJson,
|
||||||
|
TtmkJson,
|
||||||
|
UtmkJson,
|
||||||
|
YtmkJson,
|
||||||
|
Others,
|
||||||
|
];
|
||||||
|
|
||||||
const blank_profile = "/img/blank_profile.png";
|
const blank_profile = "/img/blank_profile.png";
|
||||||
|
|
||||||
@@ -25,6 +40,28 @@ const BlueLink = styled(Link)`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
const IndexUL = styled.ul`
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
li::before {
|
||||||
|
content: attr(data-icon);
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const Index: React.FC<{ committees: typeof orderedCommittees }> = ({ committees }) => (
|
||||||
|
<IndexUL>
|
||||||
|
{committees.map(({ slug, name_fi }) => (
|
||||||
|
<BlueLink to={`#${slug}`} key={slug}>
|
||||||
|
<li data-icon="»">
|
||||||
|
{name_fi}
|
||||||
|
</li>
|
||||||
|
</BlueLink>
|
||||||
|
))}
|
||||||
|
</IndexUL>
|
||||||
|
);
|
||||||
|
|
||||||
const Container = styled.div`
|
const Container = styled.div`
|
||||||
color: ${colors.darkBlue};
|
color: ${colors.darkBlue};
|
||||||
|
|
||||||
@@ -92,74 +129,33 @@ const ContactsPageView: React.FC = () => (
|
|||||||
Asiaa olisi, mutta kehen ottaa yhteyttä?<br />
|
Asiaa olisi, mutta kehen ottaa yhteyttä?<br />
|
||||||
Tämä sivu yrittää valottaa sen oikean ihmisen puhelinnumeroa ja sähköpostiosoitetta.
|
Tämä sivu yrittää valottaa sen oikean ihmisen puhelinnumeroa ja sähköpostiosoitetta.
|
||||||
</p>
|
</p>
|
||||||
|
<aside>
|
||||||
|
<div>
|
||||||
|
<h6>Toimikuntaluettelo</h6>
|
||||||
|
<Index committees={orderedCommittees} />
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
</TextSection>
|
</TextSection>
|
||||||
|
|
||||||
<TextSection>
|
{orderedCommittees.map((json) => (
|
||||||
<CommitteeContainer committee={BoardJson}>
|
<React.Fragment key={json.slug}>
|
||||||
<p>
|
{(json.slug !== "board") && (
|
||||||
{"Hallitukseen saa yhteyden lähettämällä sähköpostia "}
|
<Divider />
|
||||||
<BlueLink to="mailto:hallitus@sahkoinsinoorikilta.fi">
|
)}
|
||||||
hallitus@sahkoinsinoorikilta.fi
|
<TextSection id={json.slug}>
|
||||||
</BlueLink>
|
<CommitteeContainer committee={json}>
|
||||||
</p>
|
{(json.slug === "board") && (
|
||||||
</CommitteeContainer>
|
<p>
|
||||||
</TextSection>
|
{"Hallitukseen saa yhteyden lähettämällä sähköpostia "}
|
||||||
|
<BlueLink to="mailto:hallitus@sahkoinsinoorikilta.fi">
|
||||||
<Divider />
|
hallitus@sahkoinsinoorikilta.fi
|
||||||
|
</BlueLink>
|
||||||
<TextSection>
|
</p>
|
||||||
<CommitteeContainer committee={HvtmkJson} />
|
)}
|
||||||
</TextSection>
|
</CommitteeContainer>
|
||||||
|
</TextSection>
|
||||||
<Divider />
|
</React.Fragment>
|
||||||
|
))}
|
||||||
<TextSection>
|
|
||||||
<CommitteeContainer committee={MtmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<TextSection>
|
|
||||||
<CommitteeContainer committee={OptmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<TextSection>
|
|
||||||
<CommitteeContainer committee={OtmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<TextSection id="eptmk">
|
|
||||||
<CommitteeContainer committee={PtmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<TextSection>
|
|
||||||
<CommitteeContainer committee={SstmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<TextSection id="ttmk">
|
|
||||||
<CommitteeContainer committee={TtmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<TextSection>
|
|
||||||
<CommitteeContainer committee={UtmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<TextSection>
|
|
||||||
<CommitteeContainer committee={YtmkJson} />
|
|
||||||
</TextSection>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
+160
-159
@@ -1,160 +1,161 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Hallitus",
|
"slug": "board",
|
||||||
"name_en": "Board",
|
"name_fi": "Hallitus",
|
||||||
"roles": [
|
"name_en": "Board",
|
||||||
{
|
"roles": [
|
||||||
"name_fi": "Puheenjohtaja",
|
{
|
||||||
"name_en": "Chairman of the Board",
|
"name_fi": "Puheenjohtaja",
|
||||||
"representatives": [
|
"name_en": "Chairman of the Board",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Johannes Ora",
|
{
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/chairman.jpg"
|
"name": "Johannes Ora",
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/chairman.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Sihteeri",
|
{
|
||||||
"name_en": "Secretary",
|
"name_fi": "Sihteeri",
|
||||||
"representatives": [
|
"name_en": "Secretary",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Salla Lyytikäinen",
|
{
|
||||||
"phone_number": null,
|
"name": "Salla Lyytikäinen",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/secretary.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/secretary.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Rahastonhoitaja",
|
{
|
||||||
"name_en": "Treasurer",
|
"name_fi": "Rahastonhoitaja",
|
||||||
"representatives": [
|
"name_en": "Treasurer",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Santeri Huhtala",
|
{
|
||||||
"phone_number": null,
|
"name": "Santeri Huhtala",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/treasurer.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/treasurer.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Fuksitoimikunnan Puheenjohtaja",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Fuksitoimikunnan Puheenjohtaja",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Toni Ojala",
|
{
|
||||||
"phone_number": null,
|
"name": "Toni Ojala",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/captain1.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/captain1.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Fuksitoimikunnan puheenjohtajan adjutantti",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Fuksitoimikunnan puheenjohtajan adjutantti",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Toni Lyttinen",
|
{
|
||||||
"phone_number": null,
|
"name": "Toni Lyttinen",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/captain2.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/captain2.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Hovimestari",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Hovimestari",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Eveliina Ahonen",
|
{
|
||||||
"phone_number": null,
|
"name": "Eveliina Ahonen",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/ceremonies.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/ceremonies.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Hovineuvos",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Hovineuvos",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Melisa Dönmez",
|
{
|
||||||
"phone_number": null,
|
"name": "Melisa Dönmez",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/court_cancelor.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/court_cancelor.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "ISOvastaava",
|
{
|
||||||
"name_en": "",
|
"name_fi": "ISOvastaava",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Heidi Mäkitalo",
|
{
|
||||||
"phone_number": null,
|
"name": "Heidi Mäkitalo",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/isocoordinator.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/isocoordinator.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Hyvinvointimestari",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Hyvinvointimestari",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Sauli Norja",
|
{
|
||||||
"phone_number": null,
|
"name": "Sauli Norja",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/wellbeing.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/wellbeing.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Opintomestari",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Opintomestari",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Simo Hakanummi",
|
{
|
||||||
"phone_number": null,
|
"name": "Simo Hakanummi",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/studies.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/studies.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Teknologiamestari",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Teknologiamestari",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Oskari Ponkala",
|
{
|
||||||
"phone_number": null,
|
"name": "Oskari Ponkala",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/technology.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/technology.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Ulkomestari",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Ulkomestari",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Oliver Hiekkamies",
|
{
|
||||||
"phone_number": null,
|
"name": "Oliver Hiekkamies",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/external.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/external.jpg"
|
||||||
]
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"name_fi": "Yrityssuhdemestari",
|
{
|
||||||
"name_en": "",
|
"name_fi": "Yrityssuhdemestari",
|
||||||
"representatives": [
|
"name_en": "",
|
||||||
{
|
"representatives": [
|
||||||
"name": "Otto Julkunen",
|
{
|
||||||
"phone_number": null,
|
"name": "Otto Julkunen",
|
||||||
"email": null,
|
"phone_number": null,
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/corporate.jpg"
|
"email": null,
|
||||||
}
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/corporate.jpg"
|
||||||
]
|
}
|
||||||
}
|
]
|
||||||
]
|
}
|
||||||
}
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"slug": "eptmk",
|
||||||
|
"name_fi": "Elepajatoimikunta",
|
||||||
|
"name_en": "",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Pajavastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Karl Lipping"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Pajakisälli",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Tommi Sytelä"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Eerikki Eskola"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Arkadii Kolchin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Samu Nyman"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Konsta Langi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Johannes Viirimäki"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Justus Ojala"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ville Tujunen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Antti Tarkka"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pyry Vaara"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,55 +1,82 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Hyvinvointitoimikunta",
|
"slug": "hvtmk",
|
||||||
"name_en": "Committee of Wellbeing",
|
"name_fi": "Hyvinvointitoimikunta",
|
||||||
"roles": [
|
"name_en": "Committee of Wellbeing",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Hyvinvointimestari",
|
||||||
|
"name_en": "Master of Wellbeing",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Hyvinvointimestari",
|
"name": "Sauli Norja"
|
||||||
"name_en": "Master of Wellbeing",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Sauli Norja" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Kulttuurivastaava",
|
|
||||||
"name_en": "Culture Representative",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Juha Anttila" },
|
|
||||||
{ "name": "Aino Suomi" },
|
|
||||||
{ "name": "Nestori Yrjönkoski" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Liikuntavastaava",
|
|
||||||
"name_en": "Sports Representative",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Elmeri Pälikkö" },
|
|
||||||
{ "name": "Joel Wickström" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Kiltahuonevastaava",
|
|
||||||
"name_en": "Guild Room Representative",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Ilari Ojakorpi" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Kiltapäiväkerhovastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Samuel Laine" },
|
|
||||||
{ "name": "Aleksanteri Vesala" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Retkivastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Jarno Mustonen" },
|
|
||||||
{ "name": "Suvi Karanta" },
|
|
||||||
{ "name": "Jesse Räisänen" },
|
|
||||||
{ "name": "Mikko Suhonen" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Kulttuurivastaava",
|
||||||
|
"name_en": "Culture Representative",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Juha Anttila"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Aino Suomi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nestori Yrjönkoski"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Liikuntavastaava",
|
||||||
|
"name_en": "Sports Representative",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Elmeri Pälikkö"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Joel Wickström"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Kiltahuonevastaava",
|
||||||
|
"name_en": "Guild Room Representative",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Ilari Ojakorpi"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Kiltapäiväkerhovastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Samuel Laine"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Aleksanteri Vesala"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Retkivastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Jarno Mustonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Suvi Karanta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jesse Räisänen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mikko Suhonen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,89 +1,136 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Mediatoimikunta",
|
"slug": "mtmk",
|
||||||
"name_en": "Media Committee",
|
"name_fi": "Mediatoimikunta",
|
||||||
"roles": [
|
"name_en": "Media Committee",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Puheenjohtaja, Päätoimittaja",
|
||||||
|
"name_en": "Chair, Editor in Chief",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Puheenjohtaja, Päätoimittaja",
|
"name": "Sasu Saalasti",
|
||||||
"name_en": "Chair, Editor in Chief",
|
"phone_number": null,
|
||||||
"representatives": [
|
"email": null,
|
||||||
{
|
"image": null
|
||||||
"name": "Sasu Saalasti",
|
|
||||||
"phone_number": null,
|
|
||||||
"email": null,
|
|
||||||
"image": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Mediamestari",
|
|
||||||
"name_en": "Master of Media",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Salla Lyytikäinen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Toimittaja",
|
|
||||||
"name_en": "Journalist",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Tuukka Syrjänen" },
|
|
||||||
{ "name": "Ilmari Kasvi" },
|
|
||||||
{ "name": "Elias Hirvonen" },
|
|
||||||
{ "name": "Miika Koskela" },
|
|
||||||
{ "name": "Taneli Myllykangas" },
|
|
||||||
{ "name": "Emmaleena Ahonen" },
|
|
||||||
{ "name": "Ville-Pekka Laakkonen" },
|
|
||||||
{ "name": "Sofia Öhman" },
|
|
||||||
{ "name": "Nestori Yrjönkoski" },
|
|
||||||
{ "name": "Jami Hyytiäinen" },
|
|
||||||
{ "name": "Aleksanteri Vesala" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Toimittaja & Valokuvaaja",
|
|
||||||
"name_en": "Journalist & Photographer",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Kiia Einola" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Taittaja",
|
|
||||||
"name_en": "Layout Artist",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Aino Suomi" },
|
|
||||||
{ "name": "Olli Komulainen" },
|
|
||||||
{ "name": "Emilia Kortelainen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Taittaja & Valokuvaaja",
|
|
||||||
"name_en": "Layout Artist & Photographer",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Jonna Tammikivi" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Valokuvaaja",
|
|
||||||
"name_en": "Photographer",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Suvi Karanta" },
|
|
||||||
{ "name": "Mikko Haaparanta" },
|
|
||||||
{ "name": "Johannes Viirimäki" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Valokuvaaja & Graafikko",
|
|
||||||
"name_en": "Photographer & Graphic Artist",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Kalle Petäjäaho" },
|
|
||||||
{ "name": "Maria Pöllä" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Videokuvaaja",
|
|
||||||
"name_en": "Videographer",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Aaro Rasilainen" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Mediamestari",
|
||||||
|
"name_en": "Master of Media",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Salla Lyytikäinen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Toimittaja",
|
||||||
|
"name_en": "Journalist",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Tuukka Syrjänen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ilmari Kasvi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Elias Hirvonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Miika Koskela"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Taneli Myllykangas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Emmaleena Ahonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ville-Pekka Laakkonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sofia Öhman"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nestori Yrjönkoski"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jami Hyytiäinen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Aleksanteri Vesala"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Toimittaja & Valokuvaaja",
|
||||||
|
"name_en": "Journalist & Photographer",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Kiia Einola"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Taittaja",
|
||||||
|
"name_en": "Layout Artist",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Aino Suomi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Olli Komulainen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Emilia Kortelainen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Taittaja & Valokuvaaja",
|
||||||
|
"name_en": "Layout Artist & Photographer",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Jonna Tammikivi"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Valokuvaaja",
|
||||||
|
"name_en": "Photographer",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Suvi Karanta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mikko Haaparanta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Johannes Viirimäki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Valokuvaaja & Graafikko",
|
||||||
|
"name_en": "Photographer & Graphic Artist",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Kalle Petäjäaho"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Maria Pöllä"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Videokuvaaja",
|
||||||
|
"name_en": "Videographer",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Aaro Rasilainen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,46 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Opintotoimikunta",
|
"slug": "optmk",
|
||||||
"name_en": "Study Committee",
|
"name_fi": "Opintotoimikunta",
|
||||||
"roles": [
|
"name_en": "Study Committee",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Opintomestari",
|
||||||
|
"name_en": "Master of Studies",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Opintomestari",
|
"name": "Simo Hakanummi"
|
||||||
"name_en": "Master of Studies",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Simo Hakanummi" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Opintovastaava",
|
|
||||||
"name_en": "Study Coordinator",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Miina-Maija Simonen" },
|
|
||||||
{ "name": "Tomi Valkonen" },
|
|
||||||
{ "name": "Leo Lahti" },
|
|
||||||
{ "name": "Ville-Pekka Laakkonen" },
|
|
||||||
{ "name": "Samu Nyman" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Abimarkkinointi Vastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Iikka Huttu" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Opintovastaava",
|
||||||
|
"name_en": "Study Coordinator",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Miina-Maija Simonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tomi Valkonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Leo Lahti"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ville-Pekka Laakkonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Samu Nyman"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Abimarkkinointi Vastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Iikka Huttu"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"slug": "others",
|
||||||
|
"name_fi": "Muut",
|
||||||
|
"name_en": "Other officials",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Kiltapatruuna",
|
||||||
|
"name_en": "Guild elder",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Erna Virtanen",
|
||||||
|
"phone_number": null,
|
||||||
|
"email": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Emmaleena Ahonen",
|
||||||
|
"phone_number": null,
|
||||||
|
"email": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "TEK-yhdyshenkilö",
|
||||||
|
"name_en": "TEK contact person",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Mikael Liimatainen",
|
||||||
|
"phone_number": null,
|
||||||
|
"email": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Sklubi-yhdyshenkilö",
|
||||||
|
"name_en": "Sklubi contact person",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Ella Eilola",
|
||||||
|
"phone_number": null,
|
||||||
|
"email": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Arkistonhoitaja",
|
||||||
|
"name_en": "Archivist",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Antti Mäki",
|
||||||
|
"phone_number": null,
|
||||||
|
"email": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jonna Tammikivi",
|
||||||
|
"phone_number": null,
|
||||||
|
"email": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,66 +1,115 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Ohjelmatoimikunta",
|
"slug": "otmk",
|
||||||
"name_en": "Entertainment Committee",
|
"name_fi": "Ohjelmatoimikunta",
|
||||||
"roles": [
|
"name_en": "Entertainment Committee",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Hovimestari",
|
||||||
|
"name_en": "Master of Ceremonies",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Hovimestari",
|
"name": "Eveliina Ahonen"
|
||||||
"name_en": "Master of Ceremonies",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Eveliina Ahonen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Hovineuvos",
|
|
||||||
"name_en": "Court Counsellor",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Melisa Dönmez" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Emäntä",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Oona Karjalainen" },
|
|
||||||
{ "name": "Emilia Kortelainen" },
|
|
||||||
{ "name": "Venla Vastamäki" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Isäntä",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Henry Jaakkola" },
|
|
||||||
{ "name": "Sakke Kangas" },
|
|
||||||
{ "name": "Otto Torkkeli" },
|
|
||||||
{ "name": "Tommi Oinonen" },
|
|
||||||
{ "name": "Eero Ketonen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Lukkari",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Tuomo Leino" },
|
|
||||||
{ "name": "Jami Hyytiäinen" },
|
|
||||||
{ "name": "Tuomas Pajunpää" },
|
|
||||||
{ "name": "Samuel Laine" },
|
|
||||||
{ "name": "Toni Miilunpalo" },
|
|
||||||
{ "name": "Ville Kaakinen"},
|
|
||||||
{ "name": "Eero Torpo"},
|
|
||||||
{ "name": "Sauli Norja"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Lukkarikisällit",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Jesse Räisänen" },
|
|
||||||
{ "name": "Eino Laakso" },
|
|
||||||
{ "name": "Sakari Harjunpää" },
|
|
||||||
{ "name": "Niilo Ojala" },
|
|
||||||
{ "name": "Iikka Huttu" },
|
|
||||||
{ "name": "Akseli Järvinen" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Hovineuvos",
|
||||||
|
"name_en": "Court Counsellor",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Melisa Dönmez"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Emäntä",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Oona Karjalainen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Emilia Kortelainen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Venla Vastamäki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Isäntä",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Henry Jaakkola"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sakke Kangas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Otto Torkkeli"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tommi Oinonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Eero Ketonen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Lukkari",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Tuomo Leino"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jami Hyytiäinen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tuomas Pajunpää"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Samuel Laine"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Toni Miilunpalo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ville Kaakinen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Eero Torpo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sauli Norja"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Lukkarikisällit",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Jesse Räisänen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Eino Laakso"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sakari Harjunpää"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Niilo Ojala"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Iikka Huttu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Akseli Järvinen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"name_fi": "Elepajatoimikunta",
|
|
||||||
"name_en": "",
|
|
||||||
"roles": [
|
|
||||||
{
|
|
||||||
"name_fi": "Pajavastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Karl Lipping" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Pajakisälli",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Tommi Sytelä" },
|
|
||||||
{ "name": "Eerikki Eskola" },
|
|
||||||
{ "name": "Arkadii Kolchin" },
|
|
||||||
{ "name": "Samu Nyman" },
|
|
||||||
{ "name": "Konsta Langi" },
|
|
||||||
{ "name": "Johannes Viirimäki" },
|
|
||||||
{ "name": "Justus Ojala" },
|
|
||||||
{ "name": "Ville Tujunen" },
|
|
||||||
{ "name": "Antti Tarkka" },
|
|
||||||
{ "name": "Pyry Vaara" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,70 +1,91 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "SIK100-toimikunta",
|
"slug": "sstmk",
|
||||||
"name_en": "",
|
"name_fi": "SIK100-toimikunta",
|
||||||
"roles": [
|
"name_en": "",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Puheenjohtaja",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Puheenjohtaja",
|
"name": "Erna Virtanen"
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Erna Virtanen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Webivastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Jaakko Koskela" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Markkinointivastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Sasu Saalasti" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Yritysvastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Juuli Leppänen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Seminaarivastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Sini Huhtinen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Kevätkarnevaalimajuri",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Olli Komulainen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "PoTa100-pääjuhlatirehtööri",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Emmaleena Ahonen" },
|
|
||||||
{ "name": "Jonna Tammikivi" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "PoTa100-jatkokuvernööri",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Mikael Liimatainen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "PoTa100-sillistirehtööri",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Tuomo Leino" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Webivastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Jaakko Koskela"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Markkinointivastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Sasu Saalasti"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Yritysvastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Juuli Leppänen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Seminaarivastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Sini Huhtinen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Kevätkarnevaalimajuri",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Olli Komulainen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "PoTa100-pääjuhlatirehtööri",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Emmaleena Ahonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jonna Tammikivi"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "PoTa100-jatkokuvernööri",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Mikael Liimatainen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "PoTa100-sillistirehtööri",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Tuomo Leino"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,35 +1,55 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Teknologiatoimikunta",
|
"slug": "ttmk",
|
||||||
"name_en": "",
|
"name_fi": "Teknologiatoimikunta",
|
||||||
"roles": [
|
"name_en": "",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Teknologiamestari",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Teknologiamestari",
|
"name": "Oskari Ponkala"
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Oskari Ponkala" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Tekniikkavastaava",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Antti Mäki" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Web-Kisälli",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Ilari Ojakorpi" },
|
|
||||||
{ "name": "Leo Lahti" },
|
|
||||||
{ "name": "Jyri Korhonen" },
|
|
||||||
{ "name": "Tuukka Syrjänen" },
|
|
||||||
{ "name": "Emmaleena Ahonen" },
|
|
||||||
{ "name": "Mikko Suhonen" },
|
|
||||||
{ "name": "Jaakko Koskela" },
|
|
||||||
{ "name": "Justus Ojala" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Tekniikkavastaava",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Antti Mäki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Web-Kisälli",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Ilari Ojakorpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Leo Lahti"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jyri Korhonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tuukka Syrjänen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Emmaleena Ahonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mikko Suhonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jaakko Koskela"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Justus Ojala"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,43 +1,58 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Ulkotoimikunta",
|
"slug": "utmk",
|
||||||
"name_en": "External Affairs Committeee",
|
"name_fi": "Ulkotoimikunta",
|
||||||
"roles": [
|
"name_en": "External Affairs Committeee",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Ulkomestari",
|
||||||
|
"name_en": "Master of External Affairs",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Ulkomestari",
|
"name": "Oliver Hiekkamies"
|
||||||
"name_en": "Master of External Affairs",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Oliver Hiekkamies" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Kv-ISOvastaava",
|
|
||||||
"name_en": "International Tutor Coordinator",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Elias Hirvonen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "International Helper",
|
|
||||||
"name_en": "International Helper",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Ville-Pekka Laakkonen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Ulkosuhdevastaava",
|
|
||||||
"name_en": "Apprentice of External Affairs",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Leo Müller" },
|
|
||||||
{ "name": "Eino Tyrvänen" },
|
|
||||||
{ "name": "Pekka Aho" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Ulkowanhus",
|
|
||||||
"name_en": "",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Jyri Korhonen" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Kv-ISOvastaava",
|
||||||
|
"name_en": "International Tutor Coordinator",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Elias Hirvonen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "International Helper",
|
||||||
|
"name_en": "International Helper",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Ville-Pekka Laakkonen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Ulkosuhdevastaava",
|
||||||
|
"name_en": "Apprentice of External Affairs",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Leo Müller"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Eino Tyrvänen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pekka Aho"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Ulkowanhus",
|
||||||
|
"name_en": "",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Jyri Korhonen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,52 @@
|
|||||||
{
|
{
|
||||||
"name_fi": "Yrityssuhdetoimikunta",
|
"slug": "ytmk",
|
||||||
"name_en": "Corporate Relations Committee",
|
"name_fi": "Yrityssuhdetoimikunta",
|
||||||
"roles": [
|
"name_en": "Corporate Relations Committee",
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name_fi": "Yrityssuhdemestari",
|
||||||
|
"name_en": "Master of Corporate Relations",
|
||||||
|
"representatives": [
|
||||||
{
|
{
|
||||||
"name_fi": "Yrityssuhdemestari",
|
"name": "Otto Julkunen"
|
||||||
"name_en": "Master of Corporate Relations",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Otto Julkunen" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Excursiopäävastaava",
|
|
||||||
"name_en": "Head of Excursions",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Henry Gustafsson" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name_fi": "Yrityssuhdevastaava",
|
|
||||||
"name_en": "Apprentice of Corporate Relations",
|
|
||||||
"representatives": [
|
|
||||||
{ "name": "Iikka Huttu" },
|
|
||||||
{ "name": "Arkadii Kolchin" },
|
|
||||||
{ "name": "Oskari Luukkonen" },
|
|
||||||
{ "name": "Niilo Ojala" },
|
|
||||||
{ "name": "Emma Reinikainen" },
|
|
||||||
{ "name": "Melina Sundell" },
|
|
||||||
{ "name": "Elma Tuohimetsä" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Excursiopäävastaava",
|
||||||
|
"name_en": "Head of Excursions",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Henry Gustafsson"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name_fi": "Yrityssuhdevastaava",
|
||||||
|
"name_en": "Apprentice of Corporate Relations",
|
||||||
|
"representatives": [
|
||||||
|
{
|
||||||
|
"name": "Iikka Huttu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Arkadii Kolchin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Oskari Luukkonen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Niilo Ojala"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Emma Reinikainen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Melina Sundell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Elma Tuohimetsä"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ interface JobAdListProps {
|
|||||||
|
|
||||||
const List = styled.ul`
|
const List = styled.ul`
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
margin: 1rem 0;
|
margin: 1rem 0;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ const StyledTextSection = styled(TextSection)`
|
|||||||
|
|
||||||
& > h1 {
|
& > h1 {
|
||||||
color: ${colors.darkBlue};
|
color: ${colors.darkBlue};
|
||||||
|
|
||||||
p {
|
p {
|
||||||
color: ${colors.orange1};
|
color: ${colors.orange1};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ const StyledTextSection = styled(TextSection)`
|
|||||||
|
|
||||||
& > h1 {
|
& > h1 {
|
||||||
color: ${colors.darkBlue};
|
color: ${colors.darkBlue};
|
||||||
|
|
||||||
p {
|
p {
|
||||||
color: ${colors.orange1};
|
color: ${colors.orange1};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const EMAIL_LINK_MAILTO = `mailto:${EMAIL_LINK}`;
|
|||||||
|
|
||||||
const ImageContainer = styled.div`
|
const ImageContainer = styled.div`
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: block
|
display: block;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const FreshmenPageView: React.FC = () => (
|
const FreshmenPageView: React.FC = () => (
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
} from "@components/index";
|
} from "@components/index";
|
||||||
import Event from "@models/Event";
|
import Event from "@models/Event";
|
||||||
import Post from "@models/Feed";
|
import Post from "@models/Feed";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
|
|
||||||
import FullWidthSection from "@components/Sections/FullWidthSection";
|
import FullWidthSection from "@components/Sections/FullWidthSection";
|
||||||
import noop from "@utils/noop";
|
import noop from "@utils/noop";
|
||||||
@@ -42,6 +42,7 @@ const cardTimeOpts: Intl.DateTimeFormatOptions = {
|
|||||||
|
|
||||||
const SponsorReel = styled.div`
|
const SponsorReel = styled.div`
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row wrap;
|
flex-flow: row wrap;
|
||||||
@@ -54,6 +55,7 @@ const SponsorReel = styled.div`
|
|||||||
min-width: 200px;
|
min-width: 200px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: ${colors.blue1};
|
color: ${colors.blue1};
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
|
|||||||
@@ -30,16 +30,18 @@ const Column = styled.div`
|
|||||||
|
|
||||||
section:last-of-type {
|
section:last-of-type {
|
||||||
background-color: ${colors.lightBlue};
|
background-color: ${colors.lightBlue};
|
||||||
|
|
||||||
p {
|
p {
|
||||||
a {
|
a {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|
||||||
li:before {
|
li::before {
|
||||||
content: attr(data-icon);
|
content: attr(data-icon);
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ const Gallery = styled.div`
|
|||||||
|
|
||||||
@media screen and (max-width: ${breakpoints.mobile}) {
|
@media screen and (max-width: ${breakpoints.mobile}) {
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
min-height: 100vw;
|
min-height: 100vw;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { SignupForm } from "@models/Signup";
|
|||||||
import Checkboxes from "@components/Widgets/Checkbox/Checkboxes";
|
import Checkboxes from "@components/Widgets/Checkbox/Checkboxes";
|
||||||
import RadioButtonWidget from "@components/Widgets/RadioButton/RadioButtonWidget";
|
import RadioButtonWidget from "@components/Widgets/RadioButton/RadioButtonWidget";
|
||||||
import { TextSection, ChangeLanguageButton } from "@components/index";
|
import { TextSection, ChangeLanguageButton } from "@components/index";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import FormWrapper from "@views/common/FormWrapper";
|
import FormWrapper from "@views/common/FormWrapper";
|
||||||
import Loader from "@components/Loader";
|
import Loader from "@components/Loader";
|
||||||
import { buildFormSchema, buildUISchema } from "./FormUtils";
|
import { buildFormSchema, buildUISchema } from "./FormUtils";
|
||||||
@@ -32,6 +32,7 @@ const StyledSection = styled(TextSection)`
|
|||||||
|
|
||||||
& > aside {
|
& > aside {
|
||||||
justify-content: start;
|
justify-content: start;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
padding-bottom: 0.3rem;
|
padding-bottom: 0.3rem;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { ISubmitEvent, IChangeEvent, ErrorSchema } from "react-jsonschema-form";
|
import { ISubmitEvent, IChangeEvent, ErrorSchema } from "react-jsonschema-form";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import Event from "@models/Event";
|
import Event from "@models/Event";
|
||||||
import Post from "@models/Feed";
|
import Post from "@models/Feed";
|
||||||
import { SignupForm } from "@models/Signup";
|
import { SignupForm } from "@models/Signup";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { colors } from "@theme/colors";
|
import colors from "@theme/colors";
|
||||||
import AdminPageWrapper from "@views/common/AdminPageWrapper";
|
import AdminPageWrapper from "@views/common/AdminPageWrapper";
|
||||||
|
|
||||||
const Main = styled.div`
|
const Main = styled.div`
|
||||||
|
|||||||
@@ -53,8 +53,7 @@ const FormStyleWrapper = styled(Form)`
|
|||||||
input[type="email"],
|
input[type="email"],
|
||||||
input[type="number"],
|
input[type="number"],
|
||||||
textarea,
|
textarea,
|
||||||
select
|
select {
|
||||||
{
|
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,10 +22,13 @@ const DotPulse = styled.div`
|
|||||||
0% {
|
0% {
|
||||||
box-shadow: 9984px 0 0 -5px ${colors.white};
|
box-shadow: 9984px 0 0 -5px ${colors.white};
|
||||||
}
|
}
|
||||||
|
|
||||||
30% {
|
30% {
|
||||||
box-shadow: 9984px 0 0 2px ${colors.white};
|
box-shadow: 9984px 0 0 2px ${colors.white};
|
||||||
}
|
}
|
||||||
60%, 100% {
|
|
||||||
|
60%,
|
||||||
|
100% {
|
||||||
box-shadow: 9984px 0 0 -5px ${colors.white};
|
box-shadow: 9984px 0 0 -5px ${colors.white};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,10 +37,13 @@ const DotPulse = styled.div`
|
|||||||
0% {
|
0% {
|
||||||
box-shadow: 9999px 0 0 -5px ${colors.white};
|
box-shadow: 9999px 0 0 -5px ${colors.white};
|
||||||
}
|
}
|
||||||
|
|
||||||
30% {
|
30% {
|
||||||
box-shadow: 9999px 0 0 2px ${colors.white};
|
box-shadow: 9999px 0 0 2px ${colors.white};
|
||||||
}
|
}
|
||||||
60%, 100% {
|
|
||||||
|
60%,
|
||||||
|
100% {
|
||||||
box-shadow: 9999px 0 0 -5px ${colors.white};
|
box-shadow: 9999px 0 0 -5px ${colors.white};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,17 +52,19 @@ const DotPulse = styled.div`
|
|||||||
0% {
|
0% {
|
||||||
box-shadow: 10014px 0 0 -5px ${colors.white};
|
box-shadow: 10014px 0 0 -5px ${colors.white};
|
||||||
}
|
}
|
||||||
|
|
||||||
30% {
|
30% {
|
||||||
box-shadow: 10014px 0 0 2px ${colors.white};
|
box-shadow: 10014px 0 0 2px ${colors.white};
|
||||||
}
|
}
|
||||||
60%, 100% {
|
|
||||||
|
60%,
|
||||||
|
100% {
|
||||||
box-shadow: 10014px 0 0 -5px ${colors.white};
|
box-shadow: 10014px 0 0 -5px ${colors.white};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 1.5rem;
|
margin-left: 1.5rem;
|
||||||
|
|
||||||
position: relative;
|
position: relative;
|
||||||
left: -9999px;
|
left: -9999px;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
@@ -66,9 +74,10 @@ const DotPulse = styled.div`
|
|||||||
color: ${colors.white};
|
color: ${colors.white};
|
||||||
box-shadow: 9999px 0 0 -5px ${colors.white};
|
box-shadow: 9999px 0 0 -5px ${colors.white};
|
||||||
animation: dotPulse 1.5s infinite linear;
|
animation: dotPulse 1.5s infinite linear;
|
||||||
animation-delay: .25s;
|
animation-delay: 0.25s;
|
||||||
|
|
||||||
&::before, &::after {
|
&::before,
|
||||||
|
&::after {
|
||||||
content: '';
|
content: '';
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -89,7 +98,7 @@ const DotPulse = styled.div`
|
|||||||
&::after {
|
&::after {
|
||||||
box-shadow: 10014px 0 0 -5px ${colors.white};
|
box-shadow: 10014px 0 0 -5px ${colors.white};
|
||||||
animation: dotPulseAfter 1.5s infinite linear;
|
animation: dotPulseAfter 1.5s infinite linear;
|
||||||
animation-delay: .5s;
|
animation-delay: 0.5s;
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ const MarkdownStyles = styled(ReactMarkdown)`
|
|||||||
color: ${colors.black};
|
color: ${colors.black};
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h3 {
|
h1,
|
||||||
|
h3 {
|
||||||
color: ${colors.orange2};
|
color: ${colors.orange2};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user