Add Prettier
This commit is contained in:
parent
464f77dac2
commit
7069ee8c21
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"bracketSpacing": true,
|
||||
"jsxBracketSameLine": false
|
||||
}
|
|
@ -1,17 +1,17 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import SwiperCore, { Pagination, Autoplay } from "swiper";
|
||||
import { Swiper, SwiperSlide } from "swiper/react";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
import SwiperCore, { Pagination, Autoplay } from 'swiper'
|
||||
import { Swiper, SwiperSlide } from 'swiper/react'
|
||||
|
||||
SwiperCore.use([Pagination, Autoplay]);
|
||||
SwiperCore.use([Pagination, Autoplay])
|
||||
|
||||
import SectionTitle from "./SectionTitle";
|
||||
import SectionTitle from './SectionTitle'
|
||||
|
||||
import img1 from "../assets/img/feature/app-img.png";
|
||||
import img2 from "../assets/img/feature/app-img2.png";
|
||||
import img3 from "../assets/img/feature/app-img3.png";
|
||||
import img4 from "../assets/img/feature/app-img4.png";
|
||||
import img5 from "../assets/img/feature/app-img5.png";
|
||||
import img1 from '../assets/img/feature/app-img.png'
|
||||
import img2 from '../assets/img/feature/app-img2.png'
|
||||
import img3 from '../assets/img/feature/app-img3.png'
|
||||
import img4 from '../assets/img/feature/app-img4.png'
|
||||
import img5 from '../assets/img/feature/app-img5.png'
|
||||
|
||||
const AppShots = () => {
|
||||
const swiperParams = {
|
||||
|
@ -19,34 +19,34 @@ const AppShots = () => {
|
|||
spaceBetween: 30,
|
||||
autoplay: {
|
||||
delay: 3000,
|
||||
disableOnInteraction: false
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
pagination: {
|
||||
el: "#appshot-paginations",
|
||||
type: "bullets",
|
||||
clickable: "true"
|
||||
el: '#appshot-paginations',
|
||||
type: 'bullets',
|
||||
clickable: 'true',
|
||||
},
|
||||
slidesPerView: 5,
|
||||
// Responsive breakpoints
|
||||
breakpoints: {
|
||||
0: {
|
||||
slidesPerGroup: 2,
|
||||
slidesPerView: 2
|
||||
slidesPerView: 2,
|
||||
},
|
||||
767: {
|
||||
slidesPerGroup: 3,
|
||||
slidesPerView: 3
|
||||
slidesPerView: 3,
|
||||
},
|
||||
991: {
|
||||
slidesPerGroup: 2,
|
||||
slidesPerView: 3
|
||||
slidesPerView: 3,
|
||||
},
|
||||
1499: {
|
||||
slidesPerGroup: 5,
|
||||
slidesPerView: 5
|
||||
slidesPerView: 5,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
};
|
||||
return (
|
||||
<section className="pt-120 pb-155 app-shot-one" id="app">
|
||||
<Container>
|
||||
|
@ -170,7 +170,7 @@ const AppShots = () => {
|
|||
</div>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default AppShots;
|
||||
export default AppShots
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
|
||||
import shape1 from "../assets/img/banner/shaps1.png";
|
||||
import shape2 from "../assets/img/banner/shaps2.png";
|
||||
import shape3 from "../assets/img/banner/shaps3.png";
|
||||
import shape4 from "../assets/img/banner/shaps4.png";
|
||||
import shape5 from "../assets/img/banner/shaps5.png";
|
||||
import shape6 from "../assets/img/banner/shaps6.png";
|
||||
import shape7 from "../assets/img/banner/shaps7.png";
|
||||
import shape1 from '../assets/img/banner/shaps1.png'
|
||||
import shape2 from '../assets/img/banner/shaps2.png'
|
||||
import shape3 from '../assets/img/banner/shaps3.png'
|
||||
import shape4 from '../assets/img/banner/shaps4.png'
|
||||
import shape5 from '../assets/img/banner/shaps5.png'
|
||||
import shape6 from '../assets/img/banner/shaps6.png'
|
||||
import shape7 from '../assets/img/banner/shaps7.png'
|
||||
|
||||
import bannerMoc from "../assets/img/banner/mockup.png";
|
||||
import bannerMoc from '../assets/img/banner/mockup.png'
|
||||
|
||||
const Banner = () => {
|
||||
return (
|
||||
|
@ -61,14 +61,19 @@ const Banner = () => {
|
|||
|
||||
<h1>Öppna Skolplattformen</h1>
|
||||
<p>
|
||||
Oavsett om du har tre eller sju barn - det är mycket att hålla reda på. Stövlarna. Frånvaruanmälan nummer 17 i februari. Vad vikarien heter den här veckan.
|
||||
|
||||
En dåligt fungerande Skolplattform som äter tid och ork? Det finns inte plats för det. Så vi har byggt en bättre.
|
||||
|
||||
Med all information du behöver som förälder. Snabbare och framförallt - mycket mindre krångel.
|
||||
Oavsett om du har tre eller sju barn - det är mycket att hålla
|
||||
reda på. Stövlarna. Frånvaruanmälan nummer 17 i februari. Vad
|
||||
vikarien heter den här veckan. En dåligt fungerande
|
||||
Skolplattform som äter tid och ork? Det finns inte plats för
|
||||
det. Så vi har byggt en bättre. Med all information du behöver
|
||||
som förälder. Snabbare och framförallt - mycket mindre
|
||||
krångel.
|
||||
</p>
|
||||
<p>
|
||||
<b>Appen är klar och kommer att dyka upp på App Store och Google Play Store vilken dag som helst.</b>
|
||||
<b>
|
||||
Appen är klar och kommer att dyka upp på App Store och
|
||||
Google Play Store vilken dag som helst.
|
||||
</b>
|
||||
</p>
|
||||
<a href="#" className="btn">
|
||||
App Store
|
||||
|
@ -87,7 +92,7 @@ const Banner = () => {
|
|||
</Container>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Banner;
|
||||
export default Banner
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
|
||||
import shape1 from "../assets/img/banner/shaps1.png";
|
||||
import shape2 from "../assets/img/banner/shaps2.png";
|
||||
import shape3 from "../assets/img/banner/shaps3.png";
|
||||
import shape4 from "../assets/img/banner/shaps4.png";
|
||||
import shape5 from "../assets/img/banner/shaps5.png";
|
||||
import shape6 from "../assets/img/banner/shaps6.png";
|
||||
import shape7 from "../assets/img/banner/shaps7.png";
|
||||
import shape1 from '../assets/img/banner/shaps1.png'
|
||||
import shape2 from '../assets/img/banner/shaps2.png'
|
||||
import shape3 from '../assets/img/banner/shaps3.png'
|
||||
import shape4 from '../assets/img/banner/shaps4.png'
|
||||
import shape5 from '../assets/img/banner/shaps5.png'
|
||||
import shape6 from '../assets/img/banner/shaps6.png'
|
||||
import shape7 from '../assets/img/banner/shaps7.png'
|
||||
|
||||
import bannerMoc from "../assets/img/banner/mockup.png";
|
||||
import bannerMoc from '../assets/img/banner/mockup.png'
|
||||
|
||||
const BannerTwo = () => {
|
||||
return (
|
||||
|
@ -21,7 +21,11 @@ const BannerTwo = () => {
|
|||
<div className="banner-text-inner">
|
||||
<h1>Välkommen till den öppna skolplattformen</h1>
|
||||
<p>
|
||||
Vi tröttnade på att vänta på att Skolplattformen skulle bli användbar så vi tog saken i egna händer och byggde en egen. Appen hämtar samma information som på den gamla Skolplattformen men visar den på ett snabbare och lättare sätt.
|
||||
Vi tröttnade på att vänta på att Skolplattformen skulle bli
|
||||
användbar så vi tog saken i egna händer och byggde en egen.
|
||||
Appen hämtar samma information som på den gamla
|
||||
Skolplattformen men visar den på ett snabbare och lättare
|
||||
sätt.
|
||||
</p>
|
||||
<a href="#" className="btn">
|
||||
App Store
|
||||
|
@ -51,7 +55,7 @@ const BannerTwo = () => {
|
|||
</Container>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default BannerTwo;
|
||||
export default BannerTwo
|
||||
|
|
|
@ -1,51 +1,51 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
|
||||
import BlogPost from "./BlogPost";
|
||||
import SectionTitle from "./SectionTitle";
|
||||
import BlogPost from './BlogPost'
|
||||
import SectionTitle from './SectionTitle'
|
||||
|
||||
import img1 from "../assets/img/blog/blog1.png";
|
||||
import img2 from "../assets/img/blog/blog2.png";
|
||||
import img3 from "../assets/img/blog/blog3.png";
|
||||
import img1 from '../assets/img/blog/blog1.png'
|
||||
import img2 from '../assets/img/blog/blog2.png'
|
||||
import img3 from '../assets/img/blog/blog3.png'
|
||||
|
||||
const BLOG_HOME_DATA = [
|
||||
{
|
||||
title: "Pre and Post Launch Mobile App Marketing Pitfalls to Avoid",
|
||||
title: 'Pre and Post Launch Mobile App Marketing Pitfalls to Avoid',
|
||||
content:
|
||||
"There are many variations of passages of available but majority have alteration in some by inject humour or random words.",
|
||||
link: "/news-details",
|
||||
date: "30",
|
||||
month: "Sep",
|
||||
author: "Admin",
|
||||
commentCount: "2",
|
||||
'There are many variations of passages of available but majority have alteration in some by inject humour or random words.',
|
||||
link: '/news-details',
|
||||
date: '30',
|
||||
month: 'Sep',
|
||||
author: 'Admin',
|
||||
commentCount: '2',
|
||||
image: img1,
|
||||
btnClass: "blog-btn"
|
||||
btnClass: 'blog-btn',
|
||||
},
|
||||
{
|
||||
title: "Pre and Post Launch Mobile App Marketing Pitfalls to Avoid",
|
||||
title: 'Pre and Post Launch Mobile App Marketing Pitfalls to Avoid',
|
||||
content:
|
||||
"There are many variations of passages of available but majority have alteration in some by inject humour or random words.",
|
||||
link: "/news-details",
|
||||
date: "30",
|
||||
month: "Sep",
|
||||
author: "Admin",
|
||||
commentCount: "2",
|
||||
'There are many variations of passages of available but majority have alteration in some by inject humour or random words.',
|
||||
link: '/news-details',
|
||||
date: '30',
|
||||
month: 'Sep',
|
||||
author: 'Admin',
|
||||
commentCount: '2',
|
||||
image: img2,
|
||||
btnClass: "blog-btn"
|
||||
btnClass: 'blog-btn',
|
||||
},
|
||||
{
|
||||
title: "Pre and Post Launch Mobile App Marketing Pitfalls to Avoid",
|
||||
title: 'Pre and Post Launch Mobile App Marketing Pitfalls to Avoid',
|
||||
content:
|
||||
"There are many variations of passages of available but majority have alteration in some by inject humour or random words.",
|
||||
link: "/news-details",
|
||||
date: "30",
|
||||
month: "Sep",
|
||||
author: "Admin",
|
||||
commentCount: "2",
|
||||
'There are many variations of passages of available but majority have alteration in some by inject humour or random words.',
|
||||
link: '/news-details',
|
||||
date: '30',
|
||||
month: 'Sep',
|
||||
author: 'Admin',
|
||||
commentCount: '2',
|
||||
image: img3,
|
||||
btnClass: "blog-btn"
|
||||
}
|
||||
];
|
||||
btnClass: 'blog-btn',
|
||||
},
|
||||
]
|
||||
|
||||
const BlogHome = () => {
|
||||
return (
|
||||
|
@ -78,7 +78,7 @@ const BlogHome = () => {
|
|||
</Row>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default BlogHome;
|
||||
export default BlogHome
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React from "react";
|
||||
import Link from "next/link";
|
||||
import React from 'react'
|
||||
import Link from 'next/link'
|
||||
|
||||
const BlogPost = (props) => {
|
||||
return (
|
||||
|
@ -49,7 +49,7 @@ const BlogPost = (props) => {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default BlogPost;
|
||||
export default BlogPost
|
||||
|
|
|
@ -1,36 +1,36 @@
|
|||
import React from "react";
|
||||
import SwiperCore, { Autoplay } from "swiper";
|
||||
import { Swiper, SwiperSlide } from "swiper/react";
|
||||
import React from 'react'
|
||||
import SwiperCore, { Autoplay } from 'swiper'
|
||||
import { Swiper, SwiperSlide } from 'swiper/react'
|
||||
|
||||
SwiperCore.use([Autoplay]);
|
||||
SwiperCore.use([Autoplay])
|
||||
|
||||
import img1 from "../assets/img/partner2.png";
|
||||
import img1 from '../assets/img/partner2.png'
|
||||
|
||||
const Clients = () => {
|
||||
const params = {
|
||||
spaceBetween: 100,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 3000
|
||||
delay: 3000,
|
||||
},
|
||||
breakpoints: {
|
||||
0: {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 0
|
||||
spaceBetween: 0,
|
||||
},
|
||||
500: {
|
||||
spaceBetween: 50,
|
||||
slidesPerView: 3
|
||||
slidesPerView: 3,
|
||||
},
|
||||
768: {
|
||||
spaceBetween: 50,
|
||||
slidesPerView: 4
|
||||
slidesPerView: 4,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 5
|
||||
slidesPerView: 5,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
};
|
||||
return (
|
||||
<section className="pt-120 pb-120">
|
||||
<div className="container">
|
||||
|
@ -77,7 +77,7 @@ const Clients = () => {
|
|||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Clients;
|
||||
export default Clients
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
|
||||
const CtaOne = () => {
|
||||
return (
|
||||
|
@ -12,9 +12,7 @@ const CtaOne = () => {
|
|||
Ladda ner appen idag &<br />
|
||||
spara flera minuter varje dag
|
||||
</h2>
|
||||
<h3>
|
||||
Du kommer inte att ångra dig.
|
||||
</h3>
|
||||
<h3>Du kommer inte att ångra dig.</h3>
|
||||
<a href="#" className="btn">
|
||||
App Store
|
||||
</a>
|
||||
|
@ -23,7 +21,7 @@ const CtaOne = () => {
|
|||
</Row>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default CtaOne;
|
||||
export default CtaOne
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
|
||||
import img1 from "../assets/img/icons/solution1.svg";
|
||||
import img2 from "../assets/img/girls.png";
|
||||
import img1 from '../assets/img/icons/solution1.svg'
|
||||
import img2 from '../assets/img/girls.png'
|
||||
|
||||
const CtaThree = () => {
|
||||
return (
|
||||
|
@ -13,7 +13,10 @@ const CtaThree = () => {
|
|||
<div className="user-interact-inner">
|
||||
<h2>Se summering för alla dina barn på ett ställe</h2>
|
||||
<p>
|
||||
Vi har räknat, det tar flera minuter att få en uppfattning om vad som händer i skolan imorgon för dina barn. I vår app kan du direkt se allt som är aktuellt för alla barnen på en och samma skärm.
|
||||
Vi har räknat, det tar flera minuter att få en uppfattning om
|
||||
vad som händer i skolan imorgon för dina barn. I vår app kan du
|
||||
direkt se allt som är aktuellt för alla barnen på en och samma
|
||||
skärm.
|
||||
</p>
|
||||
<a href="#" className="btn">
|
||||
App Store
|
||||
|
@ -28,7 +31,7 @@ const CtaThree = () => {
|
|||
</Row>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default CtaThree;
|
||||
export default CtaThree
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
|
||||
import img1 from "../assets/img/boys.png";
|
||||
import img2 from "../assets/img/icons/goal.svg";
|
||||
import img1 from '../assets/img/boys.png'
|
||||
import img2 from '../assets/img/icons/goal.svg'
|
||||
|
||||
const CtaTwo = () => {
|
||||
return (
|
||||
|
@ -18,7 +18,9 @@ const CtaTwo = () => {
|
|||
<div className="user-interact-inner">
|
||||
<h2>Lika säkert</h2>
|
||||
<p>
|
||||
Ingen information om dina barn skickas till oss, all kommunikatoin går direkt mellan din telefon och Skolplattformens servrar. Du loggar in med BankID som vanligt.
|
||||
Ingen information om dina barn skickas till oss, all
|
||||
kommunikatoin går direkt mellan din telefon och Skolplattformens
|
||||
servrar. Du loggar in med BankID som vanligt.
|
||||
</p>
|
||||
<a href="#" className="btn">
|
||||
App Store
|
||||
|
@ -28,7 +30,7 @@ const CtaTwo = () => {
|
|||
</Row>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default CtaTwo;
|
||||
export default CtaTwo
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React from "react";
|
||||
import React from 'react'
|
||||
|
||||
const FeatureCard = (props) => {
|
||||
return (
|
||||
|
@ -9,7 +9,7 @@ const FeatureCard = (props) => {
|
|||
<h5>{props.title}</h5>
|
||||
<p>{props.text}</p>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default FeatureCard;
|
||||
export default FeatureCard
|
||||
|
|
|
@ -1,50 +1,49 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import SwiperCore, { Pagination, Autoplay } from "swiper";
|
||||
import { Swiper, SwiperSlide } from "swiper/react";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
import SwiperCore, { Pagination, Autoplay } from 'swiper'
|
||||
import { Swiper, SwiperSlide } from 'swiper/react'
|
||||
|
||||
SwiperCore.use([Pagination, Autoplay]);
|
||||
SwiperCore.use([Pagination, Autoplay])
|
||||
|
||||
import SectionTitle from "./SectionTitle";
|
||||
import FeatureCard from "./FeatureCard";
|
||||
import SectionTitle from './SectionTitle'
|
||||
import FeatureCard from './FeatureCard'
|
||||
|
||||
import img1 from "../assets/img/icons/project-management.svg";
|
||||
import img2 from "../assets/img/icons/solution.svg";
|
||||
import img3 from "../assets/img/icons/planning.svg";
|
||||
import img4 from "../assets/img/icons/goal.svg";
|
||||
import img1 from '../assets/img/icons/project-management.svg'
|
||||
import img2 from '../assets/img/icons/solution.svg'
|
||||
import img3 from '../assets/img/icons/planning.svg'
|
||||
import img4 from '../assets/img/icons/goal.svg'
|
||||
|
||||
const FEATURES_DATA = [
|
||||
{
|
||||
title: "Öppen källkod",
|
||||
text:
|
||||
"Har du egna förslag på förbättringar? Du kan hjälpa till.",
|
||||
image: img1
|
||||
title: 'Öppen källkod',
|
||||
text: 'Har du egna förslag på förbättringar? Du kan hjälpa till.',
|
||||
image: img1,
|
||||
},
|
||||
{
|
||||
title: "Bygger på ny teknik",
|
||||
title: 'Bygger på ny teknik',
|
||||
text:
|
||||
"Till skillnad från den gamla skolplattformen så bygger den öppna på senaste tekniken.",
|
||||
image: img2
|
||||
'Till skillnad från den gamla skolplattformen så bygger den öppna på senaste tekniken.',
|
||||
image: img2,
|
||||
},
|
||||
{
|
||||
title: "Det här är bara början",
|
||||
title: 'Det här är bara början',
|
||||
text:
|
||||
"Vi hoppas med denna app inspirera till fler initiativ i hela den offentliga digitaliseringen.",
|
||||
image: img4
|
||||
'Vi hoppas med denna app inspirera till fler initiativ i hela den offentliga digitaliseringen.',
|
||||
image: img4,
|
||||
},
|
||||
{
|
||||
title: "Kan byggas ut till fler skolsystem",
|
||||
title: 'Kan byggas ut till fler skolsystem',
|
||||
text:
|
||||
"Just nu stöds bara Stockholm Stads skolplattform men med din hjälp kan fler skolplattformar integreras så att du slipper logga in i flera appar om du har barn i olika skolor.",
|
||||
image: img3
|
||||
'Just nu stöds bara Stockholm Stads skolplattform men med din hjälp kan fler skolplattformar integreras så att du slipper logga in i flera appar om du har barn i olika skolor.',
|
||||
image: img3,
|
||||
},
|
||||
{
|
||||
title: "Skolan är allas vårt ansvar",
|
||||
title: 'Skolan är allas vårt ansvar',
|
||||
text:
|
||||
"Vi insåg att klaga inte hjälper så mycket så vi tog tag i problemet istället. Häng med!",
|
||||
image: img1
|
||||
'Vi insåg att klaga inte hjälper så mycket så vi tog tag i problemet istället. Häng med!',
|
||||
image: img1,
|
||||
},
|
||||
];
|
||||
]
|
||||
|
||||
const Features = () => {
|
||||
const swiperParams = {
|
||||
|
@ -53,39 +52,39 @@ const Features = () => {
|
|||
centeredSlides: true,
|
||||
spaceBetween: 30,
|
||||
autoplay: {
|
||||
delay: 3000
|
||||
delay: 3000,
|
||||
},
|
||||
pagination: {
|
||||
el: "#features-paginations",
|
||||
type: "bullets",
|
||||
clickable: true
|
||||
el: '#features-paginations',
|
||||
type: 'bullets',
|
||||
clickable: true,
|
||||
},
|
||||
loop: true,
|
||||
breakpoints: {
|
||||
0: {
|
||||
slidesPerView: 1,
|
||||
slidesPerGroup: 1,
|
||||
spaceBetween: 0
|
||||
spaceBetween: 0,
|
||||
},
|
||||
575: {
|
||||
slidesPerView: 1,
|
||||
slidesPerGroup: 1,
|
||||
spaceBetween: 0
|
||||
spaceBetween: 0,
|
||||
},
|
||||
768: {
|
||||
slidesPerGroup: 2,
|
||||
slidesPerView: 2
|
||||
slidesPerView: 2,
|
||||
},
|
||||
991: {
|
||||
slidesPerView: 2,
|
||||
slidesPerGroup: 2
|
||||
slidesPerGroup: 2,
|
||||
},
|
||||
992: {
|
||||
slidesPerGroup: 3,
|
||||
slidesPerView: 3
|
||||
slidesPerView: 3,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
};
|
||||
return (
|
||||
<section className="pb-110" id="features">
|
||||
<Container>
|
||||
|
@ -118,7 +117,7 @@ const Features = () => {
|
|||
</Row>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Features;
|
||||
export default Features
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React from "react";
|
||||
import footerBg from "../assets/img/footer-bg.png";
|
||||
import footerLogo from "../assets/img/logo.png";
|
||||
import React from 'react'
|
||||
import footerBg from '../assets/img/footer-bg.png'
|
||||
import footerLogo from '../assets/img/logo.png'
|
||||
|
||||
const Footer = () => {
|
||||
return (
|
||||
|
@ -19,8 +19,12 @@ const Footer = () => {
|
|||
</a>
|
||||
</div>
|
||||
<p>
|
||||
Skolplattformen utvecklas av föräldrar för föräldrar. Vill du hjälpa till? Kom till vår <a href="https://github.com/kolplattformen">Github</a>, där finns all källkod och även uppgifter att ta tag i, vi behöver hjälp med allt från illustrationer, UX, Design och programmering. Vi har även en Discord där vi hjälps åt.
|
||||
|
||||
Skolplattformen utvecklas av föräldrar för föräldrar. Vill du
|
||||
hjälpa till? Kom till vår{' '}
|
||||
<a href="https://github.com/kolplattformen">Github</a>, där
|
||||
finns all källkod och även uppgifter att ta tag i, vi behöver
|
||||
hjälp med allt från illustrationer, UX, Design och
|
||||
programmering. Vi har även en Discord där vi hjälps åt.
|
||||
</p>
|
||||
|
||||
<div className="footer-social-area">
|
||||
|
@ -62,21 +66,26 @@ const Footer = () => {
|
|||
<span>
|
||||
<i className="fa fa-twitter"></i>
|
||||
</span>
|
||||
<a href="https://twitter.com/@landgren">Christian Landgren</a>
|
||||
<a href="https://twitter.com/@landgren">
|
||||
Christian Landgren
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<i className="fa fa-twitter"></i>
|
||||
</span>
|
||||
<a href="https://twitter.com/@erikhellman">Erik Hellman</a>
|
||||
<a href="https://twitter.com/@erikhellman">
|
||||
Erik Hellman
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<i className="fa fa-twitter"></i>
|
||||
</span>
|
||||
<a href="https://twitter.com/@johanobrink">Johan Öbrink</a>
|
||||
<a href="https://twitter.com/@johanobrink">
|
||||
Johan Öbrink
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -159,7 +168,7 @@ const Footer = () => {
|
|||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Footer;
|
||||
export default Footer
|
||||
|
|
|
@ -1,38 +1,38 @@
|
|||
import React, { useState } from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import React, { useState } from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
|
||||
import CountUp from "react-countup";
|
||||
import VisibilitySensor from "react-visibility-sensor";
|
||||
import CountUp from 'react-countup'
|
||||
import VisibilitySensor from 'react-visibility-sensor'
|
||||
|
||||
const FUNFACTS_DATA = [
|
||||
{
|
||||
count: "1000000000",
|
||||
title: "kronor kostade orginalet"
|
||||
count: '1000000000',
|
||||
title: 'kronor kostade orginalet',
|
||||
},
|
||||
{
|
||||
count: "7",
|
||||
title: "år att utveckla"
|
||||
count: '7',
|
||||
title: 'år att utveckla',
|
||||
},
|
||||
{
|
||||
count: "10",
|
||||
title: "kronor kostar vår app :)"
|
||||
count: '10',
|
||||
title: 'kronor kostar vår app :)',
|
||||
},
|
||||
{
|
||||
count: "5",
|
||||
title: "veckors utveckling"
|
||||
}
|
||||
];
|
||||
count: '5',
|
||||
title: 'veckors utveckling',
|
||||
},
|
||||
]
|
||||
|
||||
const FunFacts = () => {
|
||||
const [counter, setCounter] = useState({
|
||||
startCounter: false
|
||||
});
|
||||
startCounter: false,
|
||||
})
|
||||
|
||||
const onVisibilityChange = (isVisible) => {
|
||||
if (isVisible) {
|
||||
setCounter({ startCounter: true });
|
||||
setCounter({ startCounter: true })
|
||||
}
|
||||
}
|
||||
};
|
||||
return (
|
||||
<section className="border-top pt-120 pb-80">
|
||||
<Container>
|
||||
|
@ -56,7 +56,7 @@ const FunFacts = () => {
|
|||
</Row>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default FunFacts;
|
||||
export default FunFacts
|
||||
|
|
|
@ -1,53 +1,53 @@
|
|||
import React, { useState, useEffect } from "react";
|
||||
import NavLinks from "./NavLinks";
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import NavLinks from './NavLinks'
|
||||
|
||||
import headerLogo from "../assets/img/logo.png";
|
||||
import headerLogo from '../assets/img/logo.png'
|
||||
|
||||
const HeaderHome = (props) => {
|
||||
const [sticky, setSticky] = useState(false);
|
||||
const [sticky, setSticky] = useState(false)
|
||||
|
||||
const handleScroll = () => {
|
||||
if (window.scrollY > 70) {
|
||||
setSticky(true);
|
||||
setSticky(true)
|
||||
} else if (window.scrollY < 70) {
|
||||
setSticky(false);
|
||||
setSticky(false)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("scroll", handleScroll);
|
||||
mobileMenu();
|
||||
window.addEventListener('scroll', handleScroll)
|
||||
mobileMenu()
|
||||
return () => {
|
||||
mobileMenu();
|
||||
window.removeEventListener("scroll", handleScroll);
|
||||
};
|
||||
});
|
||||
mobileMenu()
|
||||
window.removeEventListener('scroll', handleScroll)
|
||||
}
|
||||
})
|
||||
|
||||
const mobileMenu = () => {
|
||||
document
|
||||
.querySelector(".side-menu__toggler")
|
||||
.addEventListener("click", function (e) {
|
||||
document.querySelector(".side-menu__block").classList.toggle("active");
|
||||
e.preventDefault();
|
||||
});
|
||||
.querySelector('.side-menu__toggler')
|
||||
.addEventListener('click', function (e) {
|
||||
document.querySelector('.side-menu__block').classList.toggle('active')
|
||||
e.preventDefault()
|
||||
})
|
||||
|
||||
//Close Mobile Menu
|
||||
let sideMenuCloser = document.querySelectorAll(
|
||||
".side-menu__close-btn, .side-menu__block-overlay"
|
||||
);
|
||||
'.side-menu__close-btn, .side-menu__block-overlay'
|
||||
)
|
||||
|
||||
sideMenuCloser.forEach((sideMenuCloserBtn) => {
|
||||
sideMenuCloserBtn.addEventListener("click", function (e) {
|
||||
document.querySelector(".side-menu__block").classList.remove("active");
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
};
|
||||
sideMenuCloserBtn.addEventListener('click', function (e) {
|
||||
document.querySelector('.side-menu__block').classList.remove('active')
|
||||
e.preventDefault()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<header className={`header ${props.extraClassName}`}>
|
||||
<div
|
||||
className={`main-header ${sticky === true ? "sticky fadeInDown" : " "}`}
|
||||
className={`main-header ${sticky === true ? 'sticky fadeInDown' : ' '}`}
|
||||
>
|
||||
<div className="main-menu-wrap">
|
||||
<div className="container">
|
||||
|
@ -78,7 +78,11 @@ const HeaderHome = (props) => {
|
|||
</div>
|
||||
<div className="col-lg-3 col-md-4 col-sm-5 d-md-block d-none">
|
||||
<div className="urgent-call text-right">
|
||||
<a href="#" className="btn" onclick="alert('Håll ut! Appen kommer snart på App Store och Google Play')">
|
||||
<a
|
||||
href="#"
|
||||
className="btn"
|
||||
onclick="alert('Håll ut! Appen kommer snart på App Store och Google Play')"
|
||||
>
|
||||
Ladda ner
|
||||
</a>
|
||||
</div>
|
||||
|
@ -88,7 +92,7 @@ const HeaderHome = (props) => {
|
|||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default HeaderHome;
|
||||
export default HeaderHome
|
||||
|
|
|
@ -1,55 +1,55 @@
|
|||
import React, { useState, useEffect } from "react";
|
||||
import NavLinks from "./NavLinks";
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import NavLinks from './NavLinks'
|
||||
|
||||
import headerLogo from "../assets/img/logo.png";
|
||||
import headerLogoSticky from "../assets/img/logo.png";
|
||||
import headerLogo from '../assets/img/logo.png'
|
||||
import headerLogoSticky from '../assets/img/logo.png'
|
||||
|
||||
const HeaderHome = (props) => {
|
||||
const [sticky, setSticky] = useState(false);
|
||||
const [sticky, setSticky] = useState(false)
|
||||
|
||||
const handleScroll = () => {
|
||||
if (window.scrollY > 70) {
|
||||
setSticky(true);
|
||||
setSticky(true)
|
||||
} else if (window.scrollY < 70) {
|
||||
setSticky(false);
|
||||
setSticky(false)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("scroll", handleScroll);
|
||||
mobileMenu();
|
||||
window.addEventListener('scroll', handleScroll)
|
||||
mobileMenu()
|
||||
return () => {
|
||||
mobileMenu();
|
||||
window.removeEventListener("scroll", handleScroll);
|
||||
};
|
||||
});
|
||||
mobileMenu()
|
||||
window.removeEventListener('scroll', handleScroll)
|
||||
}
|
||||
})
|
||||
|
||||
const mobileMenu = () => {
|
||||
document
|
||||
.querySelector(".side-menu__toggler")
|
||||
.addEventListener("click", function (e) {
|
||||
document.querySelector(".side-menu__block").classList.toggle("active");
|
||||
e.preventDefault();
|
||||
});
|
||||
.querySelector('.side-menu__toggler')
|
||||
.addEventListener('click', function (e) {
|
||||
document.querySelector('.side-menu__block').classList.toggle('active')
|
||||
e.preventDefault()
|
||||
})
|
||||
|
||||
//Close Mobile Menu
|
||||
let sideMenuCloser = document.querySelectorAll(
|
||||
".side-menu__close-btn, .side-menu__block-overlay"
|
||||
);
|
||||
'.side-menu__close-btn, .side-menu__block-overlay'
|
||||
)
|
||||
|
||||
sideMenuCloser.forEach((sideMenuCloserBtn) => {
|
||||
sideMenuCloserBtn.addEventListener("click", function (e) {
|
||||
document.querySelector(".side-menu__block").classList.remove("active");
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
};
|
||||
sideMenuCloserBtn.addEventListener('click', function (e) {
|
||||
document.querySelector('.side-menu__block').classList.remove('active')
|
||||
e.preventDefault()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<header className={`header ${props.extraClassName}`}>
|
||||
<div
|
||||
className={`main-header inner-header header-2 ${
|
||||
sticky === true ? "sticky fadeInDown" : " "
|
||||
sticky === true ? 'sticky fadeInDown' : ' '
|
||||
}`}
|
||||
>
|
||||
<div className="main-menu-wrap">
|
||||
|
@ -86,7 +86,11 @@ const HeaderHome = (props) => {
|
|||
</div>
|
||||
<div className="col-lg-3 col-md-4 col-sm-5 d-md-block d-none">
|
||||
<div className="urgent-call text-right">
|
||||
<a href="#" className="btn" onclick="alert('Håll ut! Appen kommer snart på App Store och Google Play')">
|
||||
<a
|
||||
href="#"
|
||||
className="btn"
|
||||
onclick="alert('Håll ut! Appen kommer snart på App Store och Google Play')"
|
||||
>
|
||||
Ladda ner
|
||||
</a>
|
||||
</div>
|
||||
|
@ -96,7 +100,7 @@ const HeaderHome = (props) => {
|
|||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default HeaderHome;
|
||||
export default HeaderHome
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
import React, { useState, useEffect } from "react";
|
||||
import Head from "next/head";
|
||||
import { Link as ScrollLink, animateScroll as scroll } from "react-scroll";
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import Head from 'next/head'
|
||||
import { Link as ScrollLink, animateScroll as scroll } from 'react-scroll'
|
||||
|
||||
import favImg from "../assets/img/favicon.png";
|
||||
import favImg from '../assets/img/favicon.png'
|
||||
|
||||
const Layout = (props) => {
|
||||
const [scrollTop, setScrollTop] = useState(false);
|
||||
const [scrollTop, setScrollTop] = useState(false)
|
||||
|
||||
const handleScrollTop = () => {
|
||||
if (window.scrollY > 70) {
|
||||
setScrollTop(true);
|
||||
setScrollTop(true)
|
||||
} else if (window.scrollY < 70) {
|
||||
setScrollTop(false);
|
||||
setScrollTop(false)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("scroll", handleScrollTop);
|
||||
window.addEventListener('scroll', handleScrollTop)
|
||||
return () => {
|
||||
window.removeEventListener("scroll", handleScrollTop);
|
||||
};
|
||||
});
|
||||
window.removeEventListener('scroll', handleScrollTop)
|
||||
}
|
||||
})
|
||||
return (
|
||||
<div>
|
||||
<Head>
|
||||
|
@ -36,7 +36,7 @@ const Layout = (props) => {
|
|||
{props.children}
|
||||
</div>
|
||||
{scrollTop === true ? (
|
||||
<div class="back-to-top show" style={{ cursor: "pointer" }}>
|
||||
<div class="back-to-top show" style={{ cursor: 'pointer' }}>
|
||||
<ScrollLink
|
||||
to="wrapper"
|
||||
smooth={true}
|
||||
|
@ -48,7 +48,7 @@ const Layout = (props) => {
|
|||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Layout;
|
||||
export default Layout
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React from "react";
|
||||
import NavLinks from "./NavLinks";
|
||||
import React from 'react'
|
||||
import NavLinks from './NavLinks'
|
||||
|
||||
const MobileMenu = () => {
|
||||
return (
|
||||
|
@ -21,10 +21,14 @@ const MobileMenu = () => {
|
|||
<div className="side-menu__sep"></div>
|
||||
<div className="side-menu__content">
|
||||
<p>
|
||||
Skolplattformen.org är en öppen programvara som byggs av frustrerade föräldrar. Hjälp till du också. Kontakta oss nedan:
|
||||
Skolplattformen.org är en öppen programvara som byggs av frustrerade
|
||||
föräldrar. Hjälp till du också. Kontakta oss nedan:
|
||||
</p>
|
||||
<p>
|
||||
<a href="mailto:info@skolplattformen.org">info@skolplattformen.org</a> <br />
|
||||
<a href="mailto:info@skolplattformen.org">
|
||||
info@skolplattformen.org
|
||||
</a>{' '}
|
||||
<br />
|
||||
<a href="tel:+46707755831">+46 70 775 58 31</a>
|
||||
</p>
|
||||
<div className="side-menu__social">
|
||||
|
@ -44,7 +48,7 @@ const MobileMenu = () => {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default MobileMenu;
|
||||
export default MobileMenu
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
import React, { useState, useEffect } from "react";
|
||||
import Link from "next/link";
|
||||
import { Link as ScrollLink, animateScroll as scroll } from "react-scroll";
|
||||
import React, { useState, useEffect } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { Link as ScrollLink, animateScroll as scroll } from 'react-scroll'
|
||||
|
||||
const NavLinks = () => {
|
||||
// const [dropdownStatus, setDropdownStatus] = useState(false);
|
||||
const handleDropdownStatus = (e) => {
|
||||
// setDropdownStatus(!dropdownStatus);
|
||||
let clickedItem = e.currentTarget.parentNode;
|
||||
clickedItem.querySelector(".dropdown-list").classList.toggle("show");
|
||||
};
|
||||
let clickedItem = e.currentTarget.parentNode
|
||||
clickedItem.querySelector('.dropdown-list').classList.toggle('show')
|
||||
}
|
||||
return (
|
||||
<ul className="main-nav__navigation-box">
|
||||
<li className="dropdown">
|
||||
|
@ -69,7 +69,7 @@ const NavLinks = () => {
|
|||
</ScrollLink>
|
||||
</li>
|
||||
</ul>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default NavLinks;
|
||||
export default NavLinks
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React from "react";
|
||||
import React from 'react'
|
||||
|
||||
const PageBanner = (props) => {
|
||||
return (
|
||||
|
@ -21,7 +21,7 @@ const PageBanner = (props) => {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default PageBanner;
|
||||
export default PageBanner
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React from "react";
|
||||
import React from 'react'
|
||||
|
||||
const Pagination = () => {
|
||||
return (
|
||||
|
@ -26,7 +26,7 @@ const Pagination = () => {
|
|||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Pagination;
|
||||
export default Pagination
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import React, { useState } from "react";
|
||||
import React, { useState } from 'react'
|
||||
|
||||
const Pricing = () => {
|
||||
const [pricing, setPricing] = useState(false);
|
||||
const [pricing, setPricing] = useState(false)
|
||||
const handleClick = (e) => {
|
||||
e.preventDefault();
|
||||
setPricing(!pricing);
|
||||
};
|
||||
e.preventDefault()
|
||||
setPricing(!pricing)
|
||||
}
|
||||
return (
|
||||
<section className="pb-90" id="pricing">
|
||||
<div className="container">
|
||||
|
@ -14,7 +14,10 @@ const Pricing = () => {
|
|||
<div className="section-title text-center">
|
||||
<h2>Vad kostar det och varför är det inte gratis?</h2>
|
||||
<p>
|
||||
Vi som bygger appen vill gärna fortsätta vidareutveckla den och även ha möjlighet att ge ersättning till de som hjälper till. Därför kostar det 10kr att ladda ner appen. Det är en engångskostnad och hjälper oss att göra appen bättre.
|
||||
Vi som bygger appen vill gärna fortsätta vidareutveckla den och
|
||||
även ha möjlighet att ge ersättning till de som hjälper till.
|
||||
Därför kostar det 10kr att ladda ner appen. Det är en
|
||||
engångskostnad och hjälper oss att göra appen bättre.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -296,7 +299,7 @@ const Pricing = () => {
|
|||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Pricing;
|
||||
export default Pricing
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React from "react";
|
||||
import React from 'react'
|
||||
|
||||
const SectionTitle = (props) => {
|
||||
return (
|
||||
|
@ -6,7 +6,7 @@ const SectionTitle = (props) => {
|
|||
<h2>{props.title}</h2>
|
||||
<p>{props.text}</p>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default SectionTitle;
|
||||
export default SectionTitle
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import React from "react";
|
||||
import React from 'react'
|
||||
|
||||
import postImg1 from "../assets/img/blog/latest-blog1.png";
|
||||
import postImg2 from "../assets/img/blog/latest-blog2.png";
|
||||
import postImg3 from "../assets/img/blog/latest-blog3.png";
|
||||
import postImg1 from '../assets/img/blog/latest-blog1.png'
|
||||
import postImg2 from '../assets/img/blog/latest-blog2.png'
|
||||
import postImg3 from '../assets/img/blog/latest-blog3.png'
|
||||
|
||||
const Sidebar = () => {
|
||||
return (
|
||||
|
@ -110,7 +110,7 @@ const Sidebar = () => {
|
|||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Sidebar;
|
||||
export default Sidebar
|
||||
|
|
|
@ -1,48 +1,48 @@
|
|||
import React, { useState } from "react";
|
||||
import SwiperCore, { Autoplay, Thumbs, Navigation } from "swiper";
|
||||
import { Swiper, SwiperSlide } from "swiper/react";
|
||||
import React, { useState } from 'react'
|
||||
import SwiperCore, { Autoplay, Thumbs, Navigation } from 'swiper'
|
||||
import { Swiper, SwiperSlide } from 'swiper/react'
|
||||
|
||||
import img1 from "../assets/img/wass.png";
|
||||
import img2 from "../assets/img/karin.jpg";
|
||||
import img3 from "../assets/img/per.jpg";
|
||||
import img4 from "../assets/img/niels.jpg";
|
||||
import img1 from '../assets/img/wass.png'
|
||||
import img2 from '../assets/img/karin.jpg'
|
||||
import img3 from '../assets/img/per.jpg'
|
||||
import img4 from '../assets/img/niels.jpg'
|
||||
|
||||
SwiperCore.use([Autoplay, Thumbs, Navigation]);
|
||||
SwiperCore.use([Autoplay, Thumbs, Navigation])
|
||||
|
||||
const Testimonials = () => {
|
||||
const [thumbsSwiper, setThumbsSwiper] = useState(null);
|
||||
const [thumbsSwiper, setThumbsSwiper] = useState(null)
|
||||
const testimmonialsParams = {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 0,
|
||||
navigation: {
|
||||
nextEl: "#testi-swiper-button-next",
|
||||
prevEl: "#testi-swiper-button-prev"
|
||||
nextEl: '#testi-swiper-button-next',
|
||||
prevEl: '#testi-swiper-button-prev',
|
||||
},
|
||||
autoplay: {
|
||||
delay: 3000
|
||||
delay: 3000,
|
||||
},
|
||||
}
|
||||
};
|
||||
const thumbnailsParam = {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 20,
|
||||
autoplay: {
|
||||
delay: 3000
|
||||
delay: 3000,
|
||||
},
|
||||
breakpoints: {
|
||||
0: {
|
||||
slidesPerView: 2
|
||||
slidesPerView: 2,
|
||||
},
|
||||
500: {
|
||||
slidesPerView: 2
|
||||
slidesPerView: 2,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 2
|
||||
slidesPerView: 2,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 3
|
||||
slidesPerView: 3,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
};
|
||||
return (
|
||||
<section className="pt-120 pb-110 bg-2">
|
||||
<div className="container">
|
||||
|
@ -79,32 +79,44 @@ const Testimonials = () => {
|
|||
>
|
||||
<SwiperSlide className="single-author-comment">
|
||||
<h4>
|
||||
"Det känns bra att mänskligheten nu befrias från upphandlingshaveriets bojor. Framtiden är här! Och den kostade nästan ingenting. Öppen data är kärlek."
|
||||
"Det känns bra att mänskligheten nu befrias från
|
||||
upphandlingshaveriets bojor. Framtiden är här! Och den
|
||||
kostade nästan ingenting. Öppen data är kärlek."
|
||||
</h4>
|
||||
<p>Fredrik Wass, förälder</p>
|
||||
</SwiperSlide>
|
||||
|
||||
<SwiperSlide className="single-author-comment">
|
||||
<h4>
|
||||
"Oftast när jag behöver kolla upp något är jag stressad och på språng. Om det tar tid att logga in och leta så struntar jag till sist i det."
|
||||
"Oftast när jag behöver kolla upp något är jag stressad och
|
||||
på språng. Om det tar tid att logga in och leta så struntar
|
||||
jag till sist i det."
|
||||
</h4>
|
||||
<p>Karin Nygårds, lärare och förälder</p>
|
||||
</SwiperSlide>
|
||||
<SwiperSlide className="single-author-comment">
|
||||
<h4>
|
||||
Christian Landgren la upp en bild på sin ”Skrota Skolplattformen”-keps, det fick mig att dra igång en Facebook-grupp som utvecklades till ett slags hackathon där Christian och några gjorde en app av Skolplattformen, så som den borde vara. Så nu behövs inte den där kepsen längre, här är appen.
|
||||
Christian Landgren la upp en bild på sin ”Skrota
|
||||
Skolplattformen”-keps, det fick mig att dra igång en
|
||||
Facebook-grupp som utvecklades till ett slags hackathon där
|
||||
Christian och några gjorde en app av Skolplattformen, så som
|
||||
den borde vara. Så nu behövs inte den där kepsen längre, här
|
||||
är appen.
|
||||
</h4>
|
||||
<p>Per Strömbeck, förälder</p>
|
||||
</SwiperSlide>
|
||||
|
||||
<SwiperSlide className="single-author-comment">
|
||||
<h4>
|
||||
Digitala lösningar inom skolan är som på många andra områden inom det offentliga varken användarvänliga eller effektiva. Med öppen källkod och öppen data kan vi få snabbare och billigare få till bättre lösningar. Och dessutom öka insynen i hur systemen som formar vår vardag fungerar. Öppna Skolplattformen är ett bra exempel på detta!
|
||||
Digitala lösningar inom skolan är som på många andra områden
|
||||
inom det offentliga varken användarvänliga eller effektiva.
|
||||
Med öppen källkod och öppen data kan vi få snabbare och
|
||||
billigare få till bättre lösningar. Och dessutom öka insynen
|
||||
i hur systemen som formar vår vardag fungerar. Öppna
|
||||
Skolplattformen är ett bra exempel på detta!
|
||||
</h4>
|
||||
<p>Niels PaarupPetersen, Riksdagsledamot C</p>
|
||||
</SwiperSlide>
|
||||
|
||||
|
||||
</Swiper>
|
||||
<div className="testimonial-author-comment-nav">
|
||||
<button id="testi-swiper-button-prev">
|
||||
|
@ -119,7 +131,7 @@ const Testimonials = () => {
|
|||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Testimonials;
|
||||
export default Testimonials
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
import React, { useState } from "react";
|
||||
import ModalVideo from "react-modal-video";
|
||||
import React, { useState } from 'react'
|
||||
import ModalVideo from 'react-modal-video'
|
||||
|
||||
const Video = () => {
|
||||
const [open, setOpen] = useState({
|
||||
isOpen: false
|
||||
});
|
||||
isOpen: false,
|
||||
})
|
||||
const openModal = (e) => {
|
||||
e.preventDefault();
|
||||
e.preventDefault()
|
||||
setOpen({
|
||||
isOpen: true
|
||||
});
|
||||
};
|
||||
isOpen: true,
|
||||
})
|
||||
}
|
||||
return (
|
||||
<section className="app-video">
|
||||
<ModalVideo
|
||||
|
@ -25,7 +25,7 @@ const Video = () => {
|
|||
<div className="theme-video-wrap">
|
||||
<span
|
||||
onClick={openModal}
|
||||
style={{ cursor: "pointer" }}
|
||||
style={{ cursor: 'pointer' }}
|
||||
className="video-btn"
|
||||
data-popup="video"
|
||||
>
|
||||
|
@ -36,7 +36,7 @@ const Video = () => {
|
|||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default Video;
|
||||
export default Video
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
const withImages = require('next-images')
|
||||
module.exports = withImages();
|
||||
module.exports = withImages()
|
||||
|
|
|
@ -21,5 +21,8 @@
|
|||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start"
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "2.2.1"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import "bootstrap/dist/css/bootstrap.min.css";
|
||||
import "react-modal-video/css/modal-video.min.css";
|
||||
import "../assets/css/font-awesome.min.css";
|
||||
import "swiper/swiper-bundle.min.css";
|
||||
import "../assets/css/style.css";
|
||||
import "../assets/css/responsive.css";
|
||||
import "../assets/css/custom.css";
|
||||
import 'bootstrap/dist/css/bootstrap.min.css'
|
||||
import 'react-modal-video/css/modal-video.min.css'
|
||||
import '../assets/css/font-awesome.min.css'
|
||||
import 'swiper/swiper-bundle.min.css'
|
||||
import '../assets/css/style.css'
|
||||
import '../assets/css/responsive.css'
|
||||
import '../assets/css/custom.css'
|
||||
|
||||
// This default export is required in a new `pages/_app.js` file.
|
||||
export default function MyApp({ Component, pageProps }) {
|
||||
return <Component {...pageProps} />;
|
||||
return <Component {...pageProps} />
|
||||
}
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
import React from "react";
|
||||
import Layout from "../components/Layout";
|
||||
import HeaderTwo from "../components/HeaderTwo";
|
||||
import MobileMenu from "../components/MobileMenu";
|
||||
import BannerTwo from "../components/BannerTwo";
|
||||
import FunFacts from "../components/FunFacts";
|
||||
import CtaTwo from "../components/CtaTwo";
|
||||
import CtaThree from "../components/CtaThree";
|
||||
import Video from "../components/Video";
|
||||
import Pricing from "../components/Pricing";
|
||||
import AppShots from "../components/AppShots";
|
||||
import Features from "../components/Features";
|
||||
import Testimonials from "../components/Testimonials";
|
||||
import BlogHome from "../components/BlogHome";
|
||||
import Clients from "../components/Clients";
|
||||
import CtaOne from "../components/CtaOne";
|
||||
import Footer from "../components/Footer";
|
||||
import React from 'react'
|
||||
import Layout from '../components/Layout'
|
||||
import HeaderTwo from '../components/HeaderTwo'
|
||||
import MobileMenu from '../components/MobileMenu'
|
||||
import BannerTwo from '../components/BannerTwo'
|
||||
import FunFacts from '../components/FunFacts'
|
||||
import CtaTwo from '../components/CtaTwo'
|
||||
import CtaThree from '../components/CtaThree'
|
||||
import Video from '../components/Video'
|
||||
import Pricing from '../components/Pricing'
|
||||
import AppShots from '../components/AppShots'
|
||||
import Features from '../components/Features'
|
||||
import Testimonials from '../components/Testimonials'
|
||||
import BlogHome from '../components/BlogHome'
|
||||
import Clients from '../components/Clients'
|
||||
import CtaOne from '../components/CtaOne'
|
||||
import Footer from '../components/Footer'
|
||||
|
||||
const HomePageTwo = () => {
|
||||
return (
|
||||
|
@ -35,7 +35,7 @@ const HomePageTwo = () => {
|
|||
<CtaOne />
|
||||
<Footer />
|
||||
</Layout>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default HomePageTwo;
|
||||
export default HomePageTwo
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
import React from "react";
|
||||
import Layout from "../components/Layout";
|
||||
import Header from "../components/Header";
|
||||
import MobileMenu from "../components/MobileMenu";
|
||||
import Banner from "../components/Banner";
|
||||
import FunFacts from "../components/FunFacts";
|
||||
import CtaTwo from "../components/CtaTwo";
|
||||
import CtaThree from "../components/CtaThree";
|
||||
import Video from "../components/Video";
|
||||
import Pricing from "../components/Pricing";
|
||||
import AppShots from "../components/AppShots";
|
||||
import Features from "../components/Features";
|
||||
import Testimonials from "../components/Testimonials";
|
||||
import BlogHome from "../components/BlogHome";
|
||||
import Clients from "../components/Clients";
|
||||
import CtaOne from "../components/CtaOne";
|
||||
import Footer from "../components/Footer";
|
||||
import React from 'react'
|
||||
import Layout from '../components/Layout'
|
||||
import Header from '../components/Header'
|
||||
import MobileMenu from '../components/MobileMenu'
|
||||
import Banner from '../components/Banner'
|
||||
import FunFacts from '../components/FunFacts'
|
||||
import CtaTwo from '../components/CtaTwo'
|
||||
import CtaThree from '../components/CtaThree'
|
||||
import Video from '../components/Video'
|
||||
import Pricing from '../components/Pricing'
|
||||
import AppShots from '../components/AppShots'
|
||||
import Features from '../components/Features'
|
||||
import Testimonials from '../components/Testimonials'
|
||||
import BlogHome from '../components/BlogHome'
|
||||
import Clients from '../components/Clients'
|
||||
import CtaOne from '../components/CtaOne'
|
||||
import Footer from '../components/Footer'
|
||||
|
||||
const HomePage = () => {
|
||||
return (
|
||||
|
@ -31,7 +31,7 @@ const HomePage = () => {
|
|||
<Testimonials />
|
||||
<Footer />
|
||||
</Layout>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default HomePage;
|
||||
export default HomePage
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import Link from "next/link";
|
||||
import Layout from "../components/Layout";
|
||||
import HeaderTwo from "../components/HeaderTwo";
|
||||
import MobileMenu from "../components/MobileMenu";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
import Link from 'next/link'
|
||||
import Layout from '../components/Layout'
|
||||
import HeaderTwo from '../components/HeaderTwo'
|
||||
import MobileMenu from '../components/MobileMenu'
|
||||
|
||||
import PageBanner from "../components/PageBanner";
|
||||
import Sidebar from "../components/Sidebar";
|
||||
import Footer from "../components/Footer";
|
||||
import PageBanner from '../components/PageBanner'
|
||||
import Sidebar from '../components/Sidebar'
|
||||
import Footer from '../components/Footer'
|
||||
|
||||
import img1 from "../assets/img/blog/list1.png";
|
||||
import authorImage from "../assets/img/blog/blog-author.png";
|
||||
import commentAuthor1 from "../assets/img/blog/comment-author.png";
|
||||
import commentAuthor2 from "../assets/img/blog/comment-author2.png";
|
||||
import img1 from '../assets/img/blog/list1.png'
|
||||
import authorImage from '../assets/img/blog/blog-author.png'
|
||||
import commentAuthor1 from '../assets/img/blog/comment-author.png'
|
||||
import commentAuthor2 from '../assets/img/blog/comment-author2.png'
|
||||
|
||||
const NewsDetails = () => {
|
||||
return (
|
||||
|
@ -229,7 +229,7 @@ const NewsDetails = () => {
|
|||
</section>
|
||||
<Footer />
|
||||
</Layout>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default NewsDetails;
|
||||
export default NewsDetails
|
||||
|
|
|
@ -1,69 +1,69 @@
|
|||
import React from "react";
|
||||
import { Container, Row, Col } from "react-bootstrap";
|
||||
import Layout from "../components/Layout";
|
||||
import HeaderTwo from "../components/HeaderTwo";
|
||||
import MobileMenu from "../components/MobileMenu";
|
||||
import PageBanner from "../components/PageBanner";
|
||||
import BlogPost from "../components/BlogPost";
|
||||
import Pagination from "../components/Pagination";
|
||||
import Sidebar from "../components/Sidebar";
|
||||
import Footer from "../components/Footer";
|
||||
import React from 'react'
|
||||
import { Container, Row, Col } from 'react-bootstrap'
|
||||
import Layout from '../components/Layout'
|
||||
import HeaderTwo from '../components/HeaderTwo'
|
||||
import MobileMenu from '../components/MobileMenu'
|
||||
import PageBanner from '../components/PageBanner'
|
||||
import BlogPost from '../components/BlogPost'
|
||||
import Pagination from '../components/Pagination'
|
||||
import Sidebar from '../components/Sidebar'
|
||||
import Footer from '../components/Footer'
|
||||
|
||||
import img1 from "../assets/img/blog/list1.png";
|
||||
import img2 from "../assets/img/blog/list2.png";
|
||||
import img3 from "../assets/img/blog/list3.png";
|
||||
import img4 from "../assets/img/blog/list4.png";
|
||||
import img1 from '../assets/img/blog/list1.png'
|
||||
import img2 from '../assets/img/blog/list2.png'
|
||||
import img3 from '../assets/img/blog/list3.png'
|
||||
import img4 from '../assets/img/blog/list4.png'
|
||||
|
||||
const BLOG_DATA = [
|
||||
{
|
||||
title: "Pre and Post Launch Mobile App Marketing Pitfalls to Avoid",
|
||||
title: 'Pre and Post Launch Mobile App Marketing Pitfalls to Avoid',
|
||||
content:
|
||||
"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of you need to be sure there isn't anything embarrassing hidden in the middle of text.",
|
||||
link: "/news-details",
|
||||
date: "30",
|
||||
month: "Sep",
|
||||
author: "Admin",
|
||||
commentCount: "2",
|
||||
link: '/news-details',
|
||||
date: '30',
|
||||
month: 'Sep',
|
||||
author: 'Admin',
|
||||
commentCount: '2',
|
||||
image: img1,
|
||||
btnClass: "btn"
|
||||
btnClass: 'btn',
|
||||
},
|
||||
{
|
||||
title: "Pre and Post Launch Mobile App Marketing Pitfalls to Avoid",
|
||||
title: 'Pre and Post Launch Mobile App Marketing Pitfalls to Avoid',
|
||||
content:
|
||||
"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of you need to be sure there isn't anything embarrassing hidden in the middle of text.",
|
||||
link: "/news-details",
|
||||
date: "30",
|
||||
month: "Sep",
|
||||
author: "Admin",
|
||||
commentCount: "2",
|
||||
link: '/news-details',
|
||||
date: '30',
|
||||
month: 'Sep',
|
||||
author: 'Admin',
|
||||
commentCount: '2',
|
||||
image: img2,
|
||||
btnClass: "btn"
|
||||
btnClass: 'btn',
|
||||
},
|
||||
{
|
||||
title: "Pre and Post Launch Mobile App Marketing Pitfalls to Avoid",
|
||||
title: 'Pre and Post Launch Mobile App Marketing Pitfalls to Avoid',
|
||||
content:
|
||||
"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of you need to be sure there isn't anything embarrassing hidden in the middle of text.",
|
||||
link: "/news-details",
|
||||
date: "30",
|
||||
month: "Sep",
|
||||
author: "Admin",
|
||||
commentCount: "2",
|
||||
link: '/news-details',
|
||||
date: '30',
|
||||
month: 'Sep',
|
||||
author: 'Admin',
|
||||
commentCount: '2',
|
||||
image: img3,
|
||||
btnClass: "btn"
|
||||
btnClass: 'btn',
|
||||
},
|
||||
{
|
||||
title: "Pre and Post Launch Mobile App Marketing Pitfalls to Avoid",
|
||||
title: 'Pre and Post Launch Mobile App Marketing Pitfalls to Avoid',
|
||||
content:
|
||||
"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of you need to be sure there isn't anything embarrassing hidden in the middle of text.",
|
||||
link: "/news-details",
|
||||
date: "30",
|
||||
month: "Sep",
|
||||
author: "Admin",
|
||||
commentCount: "2",
|
||||
link: '/news-details',
|
||||
date: '30',
|
||||
month: 'Sep',
|
||||
author: 'Admin',
|
||||
commentCount: '2',
|
||||
image: img4,
|
||||
btnClass: "btn"
|
||||
}
|
||||
];
|
||||
btnClass: 'btn',
|
||||
},
|
||||
]
|
||||
|
||||
const NewsPage = () => {
|
||||
return (
|
||||
|
@ -101,7 +101,7 @@ const NewsPage = () => {
|
|||
</section>
|
||||
<Footer />
|
||||
</Layout>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default NewsPage;
|
||||
export default NewsPage
|
||||
|
|
Loading…
Reference in New Issue