Merge pull request #1 from rjNemo/landing-page
* lay header out * 🏄🏾♀️ refactor: extract buttonCTA * 🦸♀️ lay header banner out * 🩸 lay about section out * 🧮 lay counters section out * 🛸 lay why section out * 🧀 lay Courses section out * 🥾 lay footer out
102
README.md
|
|
@ -1,99 +1,5 @@
|
|||
<!-- AUTO-GENERATED-CONTENT:START (STARTER) -->
|
||||
<p align="center">
|
||||
<a href="https://www.gatsbyjs.org">
|
||||
<img alt="Gatsby" src="https://www.gatsbyjs.org/monogram.svg" width="60" />
|
||||
</a>
|
||||
</p>
|
||||
<h1 align="center">
|
||||
Gatsby's default starter
|
||||
</h1>
|
||||
# Lékol PLUS
|
||||
|
||||
Kick off your project with this default boilerplate. This starter ships with the main Gatsby configuration files you might need to get up and running blazing fast with the blazing fast app generator for React.
|
||||
|
||||
_Have another more specific idea? You may want to check out our vibrant collection of [official and community-created starters](https://www.gatsbyjs.org/docs/gatsby-starters/)._
|
||||
|
||||
## 🚀 Quick start
|
||||
|
||||
1. **Create a Gatsby site.**
|
||||
|
||||
Use the Gatsby CLI to create a new site, specifying the default starter.
|
||||
|
||||
```shell
|
||||
# create a new Gatsby site using the default starter
|
||||
gatsby new my-default-starter https://github.com/gatsbyjs/gatsby-starter-default
|
||||
```
|
||||
|
||||
1. **Start developing.**
|
||||
|
||||
Navigate into your new site’s directory and start it up.
|
||||
|
||||
```shell
|
||||
cd my-default-starter/
|
||||
gatsby develop
|
||||
```
|
||||
|
||||
1. **Open the source code and start editing!**
|
||||
|
||||
Your site is now running at `http://localhost:8000`!
|
||||
|
||||
_Note: You'll also see a second link: _`http://localhost:8000/___graphql`_. This is a tool you can use to experiment with querying your data. Learn more about using this tool in the [Gatsby tutorial](https://www.gatsbyjs.org/tutorial/part-five/#introducing-graphiql)._
|
||||
|
||||
Open the `my-default-starter` directory in your code editor of choice and edit `src/pages/index.js`. Save your changes and the browser will update in real time!
|
||||
|
||||
## 🧐 What's inside?
|
||||
|
||||
A quick look at the top-level files and directories you'll see in a Gatsby project.
|
||||
|
||||
.
|
||||
├── node_modules
|
||||
├── src
|
||||
├── .gitignore
|
||||
├── .prettierrc
|
||||
├── gatsby-browser.js
|
||||
├── gatsby-config.js
|
||||
├── gatsby-node.js
|
||||
├── gatsby-ssr.js
|
||||
├── LICENSE
|
||||
├── package-lock.json
|
||||
├── package.json
|
||||
└── README.md
|
||||
|
||||
1. **`/node_modules`**: This directory contains all of the modules of code that your project depends on (npm packages) are automatically installed.
|
||||
|
||||
2. **`/src`**: This directory will contain all of the code related to what you will see on the front-end of your site (what you see in the browser) such as your site header or a page template. `src` is a convention for “source code”.
|
||||
|
||||
3. **`.gitignore`**: This file tells git which files it should not track / not maintain a version history for.
|
||||
|
||||
4. **`.prettierrc`**: This is a configuration file for [Prettier](https://prettier.io/). Prettier is a tool to help keep the formatting of your code consistent.
|
||||
|
||||
5. **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.org/docs/browser-apis/) (if any). These allow customization/extension of default Gatsby settings affecting the browser.
|
||||
|
||||
6. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you’d like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail).
|
||||
|
||||
7. **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby Node APIs](https://www.gatsbyjs.org/docs/node-apis/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process.
|
||||
|
||||
8. **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](https://www.gatsbyjs.org/docs/ssr-apis/) (if any). These allow customization of default Gatsby settings affecting server-side rendering.
|
||||
|
||||
9. **`LICENSE`**: This Gatsby starter is licensed under the 0BSD license. This means that you can see this file as a placeholder and replace it with your own license.
|
||||
|
||||
10. **`package-lock.json`** (See `package.json` below, first). This is an automatically generated file based on the exact versions of your npm dependencies that were installed for your project. **(You won’t change this file directly).**
|
||||
|
||||
11. **`package.json`**: A manifest file for Node.js projects, which includes things like metadata (the project’s name, author, etc). This manifest is how npm knows which packages to install for your project.
|
||||
|
||||
12. **`README.md`**: A text file containing useful reference information about your project.
|
||||
|
||||
## 🎓 Learning Gatsby
|
||||
|
||||
Looking for more guidance? Full documentation for Gatsby lives [on the website](https://www.gatsbyjs.org/). Here are some places to start:
|
||||
|
||||
- **For most developers, we recommend starting with our [in-depth tutorial for creating a site with Gatsby](https://www.gatsbyjs.org/tutorial/).** It starts with zero assumptions about your level of ability and walks through every step of the process.
|
||||
|
||||
- **To dive straight into code samples, head [to our documentation](https://www.gatsbyjs.org/docs/).** In particular, check out the _Guides_, _API Reference_, and _Advanced Tutorials_ sections in the sidebar.
|
||||
|
||||
## 💫 Deploy
|
||||
|
||||
[](https://app.netlify.com/start/deploy?repository=https://github.com/gatsbyjs/gatsby-starter-default)
|
||||
|
||||
[](https://vercel.com/import/project?template=https://github.com/gatsbyjs/gatsby-starter-default)
|
||||
|
||||
<!-- AUTO-GENERATED-CONTENT:END -->
|
||||
- [URL](https://lucid-pare-c30a9e.netlify.app/)
|
||||
- deployed on Netlify
|
||||
- using Gatsby
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ module.exports = {
|
|||
subtitle: ``,
|
||||
description: `Institut d'enseignement du primaire au lycée en Guadeloupe`,
|
||||
author: `@lekolplus`,
|
||||
siteUrl: "",
|
||||
// siteUrl: "",
|
||||
},
|
||||
plugins: [
|
||||
`gatsby-plugin-react-helmet`,
|
||||
|
|
|
|||
68
src/components/about.jsx
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import React from "react"
|
||||
import { useStaticQuery, graphql, Link } from "gatsby"
|
||||
import Img from "gatsby-image"
|
||||
|
||||
import * as ROUTES from "../global/routes"
|
||||
|
||||
const Image = () => {
|
||||
const data = useStaticQuery(graphql`
|
||||
query {
|
||||
placeholderImage: file(relativePath: { eq: "about.jpg" }) {
|
||||
childImageSharp {
|
||||
fluid {
|
||||
...GatsbyImageSharpFluid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
||||
return (
|
||||
<Img
|
||||
fluid={data.placeholderImage.childImageSharp.fluid}
|
||||
className="img-fluid"
|
||||
alt=""
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
const About = () => (
|
||||
<section id="about" className="about">
|
||||
<div className="container">
|
||||
<div className="section-title">
|
||||
<h2>À Propos</h2>
|
||||
<p>Qui sommes-nous</p>
|
||||
</div>
|
||||
|
||||
<div className="row">
|
||||
<div className="col-lg-6 order-1 order-lg-2">
|
||||
<Image />
|
||||
</div>
|
||||
<div className="col-lg-6 pt-4 pt-lg-0 order-2 order-lg-1 content">
|
||||
<h3>Éducateurs expérimentés</h3>
|
||||
<p className="font-italic">
|
||||
Des éducateurs innovants au service de la réussite de votre enfant.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<i className="icofont-check-circled"></i> X années d'expériences.
|
||||
</li>
|
||||
<li>
|
||||
<i className="icofont-check-circled"></i> Méthode éprouvée à
|
||||
l'internationale.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Nous nous concentrons sur le développement de l'autonomie de
|
||||
l'étudiant.
|
||||
</p>
|
||||
<Link to={ROUTES.A_PROPOS} className="learn-more-btn">
|
||||
En Savoir Plus
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
||||
export default About
|
||||
29
src/components/buttonCTA.jsx
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
import { Link } from "gatsby"
|
||||
|
||||
import * as ROUTES from "../global/routes"
|
||||
|
||||
const ButtonCTA = ({ text, variant }) => {
|
||||
let className = "get-started-btn"
|
||||
if (variant === "secondary") {
|
||||
className = "btn-get-started"
|
||||
}
|
||||
return (
|
||||
<Link to={ROUTES.CALENDAR} className={className}>
|
||||
{text}
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
|
||||
export default ButtonCTA
|
||||
|
||||
ButtonCTA.propTypes = {
|
||||
text: PropTypes.string,
|
||||
variant: PropTypes.string,
|
||||
}
|
||||
|
||||
ButtonCTA.defaultProps = {
|
||||
text: "Inscription",
|
||||
variant: "primary",
|
||||
}
|
||||
31
src/components/counters.jsx
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import React from "react"
|
||||
|
||||
const Counters = () => (
|
||||
<section id="counts" class="counts section-bg">
|
||||
<div class="container">
|
||||
<div class="row counters">
|
||||
<div class="col-lg-3 col-6 text-center">
|
||||
<span data-toggle="counter-up">1232</span>
|
||||
<p>Élèves</p>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-3 col-6 text-center">
|
||||
<span data-toggle="counter-up">64</span>
|
||||
<p>Cours</p>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-3 col-6 text-center">
|
||||
<span data-toggle="counter-up">42</span>
|
||||
<p>Ateliers</p>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-3 col-6 text-center">
|
||||
<span data-toggle="counter-up">15</span>
|
||||
<p>Enseignants</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
||||
export default Counters
|
||||
32
src/components/courseItem.jsx
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
|
||||
const CourseItem = ({ title, price, description, image }) => {
|
||||
return (
|
||||
<div className="col-lg-4 col-md-6 d-flex align-items-stretch">
|
||||
<div className="course-item">
|
||||
<img src={image} className="img-fluid" alt="..." />
|
||||
<div className="course-content">
|
||||
<div className="d-flex justify-content-between align-items-center mb-3">
|
||||
<h4>{title}</h4>
|
||||
<p className="price">{`${price}€/h`}</p>
|
||||
</div>
|
||||
|
||||
<h3>
|
||||
<a href="course-details.html">{title}</a>
|
||||
</h3>
|
||||
<p>{description}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default CourseItem
|
||||
|
||||
CourseItem.propTypes = {
|
||||
title: PropTypes.string.isRequired,
|
||||
price: PropTypes.number.isRequired,
|
||||
description: PropTypes.string.isRequired,
|
||||
image: PropTypes.node.isRequired,
|
||||
}
|
||||
49
src/components/courses.jsx
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
import React from "react"
|
||||
|
||||
import CourseItem from "./courseItem"
|
||||
|
||||
import img1 from "../static/img/course-1.jpg"
|
||||
import img2 from "../static/img/course-2.jpg"
|
||||
import img3 from "../static/img/course-3.jpg"
|
||||
|
||||
const data = [
|
||||
{
|
||||
title: "Garderie",
|
||||
price: 10,
|
||||
description:
|
||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Esse necessitatibus sunt, porro animi vel officiis?",
|
||||
image: img1,
|
||||
},
|
||||
{
|
||||
title: "Collège",
|
||||
price: 15,
|
||||
description:
|
||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Esse necessitatibus sunt, porro animi vel officiis?",
|
||||
image: img2,
|
||||
},
|
||||
{
|
||||
title: "Lycée",
|
||||
price: 18,
|
||||
description:
|
||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Esse necessitatibus sunt, porro animi vel officiis?",
|
||||
image: img3,
|
||||
},
|
||||
]
|
||||
|
||||
const Courses = () => (
|
||||
<section id="popular-courses" className="courses">
|
||||
<div className="container">
|
||||
<div className="section-title">
|
||||
<h2>Cours</h2>
|
||||
<p>Tous nos niveaux </p>
|
||||
</div>
|
||||
<div className="row">
|
||||
{data.map((props, i) => (
|
||||
<CourseItem key={i} {...props} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
||||
export default Courses
|
||||
|
|
@ -1,11 +1,126 @@
|
|||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
import { Link } from "gatsby"
|
||||
|
||||
const Footer = () => (
|
||||
<footer>
|
||||
© {new Date().getFullYear()}, Built with
|
||||
{` `}
|
||||
<a href="https://www.gatsbyjs.org">Gatsby</a>
|
||||
import * as ROUTES from "../global/routes"
|
||||
|
||||
const Footer = ({ siteTitle }) => (
|
||||
<footer id="footer">
|
||||
<div className="footer-top">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-3 col-md-6 footer-contact">
|
||||
<h3>{siteTitle}</h3>
|
||||
<p>
|
||||
97190, Le Gosier
|
||||
<br />
|
||||
<strong>Téléphone :</strong>{" "}
|
||||
<a href="tel:+33698267634">06 98 26 76 34</a>
|
||||
<br />
|
||||
<strong>Email :</strong>{" "}
|
||||
<a href="mailto:info@lekolplus.com">info@lekolplus.com</a>
|
||||
<br />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-2 col-md-6 footer-links">
|
||||
<h4>Liens</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.HOME}>Accueil</Link>
|
||||
</li>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.A_PROPOS}>À propos</Link>
|
||||
</li>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.CONTACT}>Contact</Link>
|
||||
</li>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.LEGAL}>Mentions légales</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-3 col-md-6 footer-links">
|
||||
<h4>Nos niveaux</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.GARDERIE}>Garderie</Link>
|
||||
</li>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.PRIMAIRE}>Primaire</Link>
|
||||
</li>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.COLLEGE}>Collège</Link>
|
||||
</li>
|
||||
<li>
|
||||
<i className="bx bx-chevron-right"></i>{" "}
|
||||
<Link to={ROUTES.LYCEE}>Lycée</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-4 col-md-6 footer-newsletter">
|
||||
<h4>Restez au courant</h4>
|
||||
<p>
|
||||
Tamen quem nulla quae legam multos aute sint culpa legam noster
|
||||
magna
|
||||
</p>
|
||||
<form action="" method="post">
|
||||
<input type="email" name="email" />
|
||||
<input type="submit" value="S'inscrire" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="container d-md-flex py-4">
|
||||
<div className="mr-md-auto text-center text-md-left">
|
||||
<div className="copyright">
|
||||
© {new Date().getFullYear()}{" "}
|
||||
<strong>
|
||||
<span>{siteTitle}</span>
|
||||
</strong>
|
||||
. Tous droits réservés.
|
||||
</div>
|
||||
<div className="credits">
|
||||
Design par{" "}
|
||||
<a href="http://sage-tech.com" target="_blank">
|
||||
Sage Tech
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="social-links text-center text-md-right pt-3 pt-md-0">
|
||||
<a href="#" className="twitter">
|
||||
<i className="bx bxl-twitter"></i>
|
||||
</a>
|
||||
<a href="#" className="facebook">
|
||||
<i className="bx bxl-facebook"></i>
|
||||
</a>
|
||||
<a href="#" className="instagram">
|
||||
<i className="bx bxl-instagram"></i>
|
||||
</a>
|
||||
<a href="#" className="Whatsapp">
|
||||
<i className="bx bxl-skype"></i>
|
||||
</a>
|
||||
<a href="#" className="linkedin">
|
||||
<i className="bx bxl-linkedin"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
)
|
||||
|
||||
export default Footer
|
||||
|
||||
Footer.propTypes = {
|
||||
siteTitle: PropTypes.string.isRequired,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,31 @@
|
|||
import React from "react"
|
||||
import { Link } from "gatsby"
|
||||
import PropTypes from "prop-types"
|
||||
import React from "react"
|
||||
|
||||
import Logo from "./logo"
|
||||
import ButtonCTA from "./buttonCTA"
|
||||
|
||||
import * as ROUTES from "../global/routes"
|
||||
|
||||
const Header = ({ siteTitle }) => (
|
||||
<header>
|
||||
<div>
|
||||
<h1>
|
||||
<Link to="/">
|
||||
<Logo />
|
||||
{siteTitle}
|
||||
</Link>
|
||||
<header id="header" className="fixed-top">
|
||||
<div className="container d-flex align-items-center">
|
||||
<h1 className="logo mr-auto">
|
||||
<Link to={ROUTES.HOME}>{siteTitle}</Link>
|
||||
</h1>
|
||||
<nav className="nav-menu d-none d-lg-block">
|
||||
<ul>
|
||||
<li>
|
||||
<Link to={ROUTES.COURSES}>Cours</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link to={ROUTES.A_PROPOS}>À propos</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link to={ROUTES.CONTACT}>Contact</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<ButtonCTA />
|
||||
</div>
|
||||
</header>
|
||||
)
|
||||
|
|
|
|||
24
src/components/hero.jsx
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
|
||||
import ButtonCTA from "./buttonCTA"
|
||||
|
||||
const Hero = ({ title, subtitle }) => (
|
||||
<section
|
||||
id="hero"
|
||||
className="d-flex justify-content-center align-items-center"
|
||||
>
|
||||
<div className="container position-relative">
|
||||
<h1>{title}</h1>
|
||||
<h2>{subtitle}</h2>
|
||||
<ButtonCTA variant="secondary" />
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
||||
Hero.propTypes = {
|
||||
title: PropTypes.string.isRequired,
|
||||
subtitle: PropTypes.string.isRequired,
|
||||
}
|
||||
|
||||
export default Hero
|
||||
|
|
@ -5,6 +5,15 @@ import { useStaticQuery, graphql } from "gatsby"
|
|||
import Header from "./header"
|
||||
import Footer from "./footer"
|
||||
|
||||
import "../static/vendor/bootstrap/css/bootstrap.min.css"
|
||||
import "../static/vendor/icofont/icofont.min.css"
|
||||
import "../static/vendor/boxicons/css/boxicons.min.css"
|
||||
import "../static/vendor/remixicon/remixicon.css"
|
||||
import "../static/vendor/owl.carousel/assets/owl.carousel.min.css"
|
||||
import "../static/vendor/animate.css/animate.min.css"
|
||||
import "../static/vendor/aos/aos.css"
|
||||
import "../static/css/style.css"
|
||||
|
||||
const Layout = ({ children }) => {
|
||||
const { site } = useStaticQuery(graphql`
|
||||
query SiteTitleQuery {
|
||||
|
|
@ -20,7 +29,7 @@ const Layout = ({ children }) => {
|
|||
<>
|
||||
<Header siteTitle={site.siteMetadata.title} />
|
||||
<main>{children}</main>
|
||||
<Footer />
|
||||
<Footer siteTitle={site.siteMetadata.title} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ const Logo = () => {
|
|||
<Img
|
||||
fluid={data.placeholderImage.childImageSharp.fluid}
|
||||
style={{ height: "2rem", width: "2rem" }}
|
||||
className="img-fluid"
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
62
src/components/why.jsx
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
import React from "react"
|
||||
import { Link } from "gatsby"
|
||||
|
||||
import * as ROUTES from "../global/routes"
|
||||
|
||||
const Why = () => (
|
||||
<section id="why-us" class="why-us">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-4 d-flex align-items-stretch">
|
||||
<div class="content">
|
||||
<h3>Pourquoi chosir Lékol PLUS ?</h3>
|
||||
<p>Il suffit d'un déclic, d'un PLUS !</p>
|
||||
<div class="text-center">
|
||||
<Link to={ROUTES.CALENDAR} class="more-btn">
|
||||
Inscription <i class="bx bx-chevron-right"></i>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-8 d-flex align-items-stretch">
|
||||
<div class="icon-boxes d-flex flex-column justify-content-center">
|
||||
<div class="row">
|
||||
<div class="col-xl-4 d-flex align-items-stretch">
|
||||
<div class="icon-box mt-4 mt-xl-0">
|
||||
<i class="bx bx-receipt"></i>
|
||||
<h4>Suivi Pédagogique Personnalisé</h4>
|
||||
<p>
|
||||
Consequuntur sunt aut quasi enim aliquam quae harum pariatur
|
||||
laboris nisi ut aliquip
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-4 d-flex align-items-stretch">
|
||||
<div class="icon-box mt-4 mt-xl-0">
|
||||
<i class="bx bx-cube-alt"></i>
|
||||
<h4>Groupes de 4 élèves maximum</h4>
|
||||
<p>
|
||||
Excepteur sint occaecat cupidatat non proident, sunt in
|
||||
culpa qui officia deserunt
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-4 d-flex align-items-stretch">
|
||||
<div class="icon-box mt-4 mt-xl-0">
|
||||
<i class="bx bx-images"></i>
|
||||
<h4>50% Déductible d'impôts</h4>
|
||||
<p>
|
||||
Aut suscipit aut cum nemo deleniti aut omnis. Doloribus ut
|
||||
maiores omnis facere
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
||||
export default Why
|
||||
10
src/global/routes.js
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
export const HOME = "/"
|
||||
export const COURSES = "/cours"
|
||||
export const A_PROPOS = "/a-propos"
|
||||
export const CONTACT = "/contact"
|
||||
export const CALENDAR = "/calendrier"
|
||||
export const LEGAL = "/legal"
|
||||
export const GARDERIE = COURSES + "/garderie"
|
||||
export const PRIMAIRE = COURSES + "/primaire"
|
||||
export const COLLEGE = COURSES + "/college"
|
||||
export const LYCEE = COURSES + "/lycee"
|
||||
BIN
src/images/about.jpg
Normal file
|
After Width: | Height: | Size: 90 KiB |
|
|
@ -1,12 +1,24 @@
|
|||
import React from "react"
|
||||
import { Link } from "gatsby"
|
||||
|
||||
import Layout from "../components/layout"
|
||||
import SEO from "../components/seo"
|
||||
import Hero from "../components/hero"
|
||||
import About from "../components/about"
|
||||
import Counters from "../components/counters"
|
||||
import Why from "../components/why"
|
||||
import Courses from "../components/courses"
|
||||
|
||||
const IndexPage = () => (
|
||||
<Layout>
|
||||
<SEO title="Accueil" />
|
||||
<Hero
|
||||
title="Le PLUS pour mener votre enfant vers la réussite"
|
||||
subtitle="Accompagnement et suivi personnalisé orienté vers l'international"
|
||||
/>
|
||||
<About />
|
||||
<Counters />
|
||||
<Why />
|
||||
<Courses />
|
||||
</Layout>
|
||||
)
|
||||
|
||||
|
|
|
|||
1563
src/static/css/style.css
Normal file
BIN
src/static/img/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/static/img/course-1.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
src/static/img/course-2.jpg
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
src/static/img/course-3.jpg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
src/static/img/course-details-tab-1.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/static/img/course-details-tab-2.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/static/img/course-details-tab-3.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/static/img/course-details-tab-4.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
src/static/img/course-details-tab-5.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/static/img/course-details.jpg
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
src/static/img/events-1.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
src/static/img/events-2.jpg
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
src/static/img/favicon.png
Normal file
|
After Width: | Height: | Size: 491 B |
BIN
src/static/img/hero-bg.jpg
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
src/static/img/testimonials/testimonials-1.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
src/static/img/testimonials/testimonials-2.jpg
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
src/static/img/testimonials/testimonials-3.jpg
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
src/static/img/testimonials/testimonials-4.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/static/img/testimonials/testimonials-5.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
src/static/img/trainers/trainer-1.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
src/static/img/trainers/trainer-2.jpg
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
src/static/img/trainers/trainer-3.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
9
src/static/vendor/animate.css/animate.compat.css
vendored
Normal file
4074
src/static/vendor/animate.css/animate.css
vendored
Normal file
9
src/static/vendor/animate.css/animate.min.css
vendored
Normal file
1
src/static/vendor/aos/aos.css
vendored
Normal file
1
src/static/vendor/aos/aos.js
vendored
Normal file
3904
src/static/vendor/bootstrap/css/bootstrap-grid.css
vendored
Normal file
1
src/static/vendor/bootstrap/css/bootstrap-grid.css.map
vendored
Normal file
7
src/static/vendor/bootstrap/css/bootstrap-grid.min.css
vendored
Normal file
1
src/static/vendor/bootstrap/css/bootstrap-grid.min.css.map
vendored
Normal file
325
src/static/vendor/bootstrap/css/bootstrap-reboot.css
vendored
Normal file
|
|
@ -0,0 +1,325 @@
|
|||
/*!
|
||||
* Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2020 The Bootstrap Authors
|
||||
* Copyright 2011-2020 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
line-height: 1.15;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
font-size: 1rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
color: #212529;
|
||||
text-align: left;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
[tabindex="-1"]:focus:not(:focus-visible) {
|
||||
outline: 0 !important;
|
||||
}
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-original-title] {
|
||||
text-decoration: underline;
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
border-bottom: 0;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: .5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #007bff;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #0056b3;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:not([href]) {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:not([href]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
-ms-overflow-style: scrollbar;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
svg {
|
||||
overflow: hidden;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.75rem;
|
||||
padding-bottom: 0.75rem;
|
||||
color: #6c757d;
|
||||
text-align: left;
|
||||
caption-side: bottom;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus {
|
||||
outline: 1px dotted;
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role="button"] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
|
||||
button,
|
||||
[type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
button:not(:disabled),
|
||||
[type="button"]:not(:disabled),
|
||||
[type="reset"]:not(:disabled),
|
||||
[type="submit"]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
display: block;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: .5rem;
|
||||
font-size: 1.5rem;
|
||||
line-height: inherit;
|
||||
color: inherit;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type="search"] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||
1
src/static/vendor/bootstrap/css/bootstrap-reboot.css.map
vendored
Normal file
8
src/static/vendor/bootstrap/css/bootstrap-reboot.min.css
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
/*!
|
||||
* Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2020 The Bootstrap Authors
|
||||
* Copyright 2011-2020 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
|
||||
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
||||
1
src/static/vendor/bootstrap/css/bootstrap-reboot.min.css.map
vendored
Normal file
10278
src/static/vendor/bootstrap/css/bootstrap.css
vendored
Normal file
1
src/static/vendor/bootstrap/css/bootstrap.css.map
vendored
Normal file
7
src/static/vendor/bootstrap/css/bootstrap.min.css
vendored
Normal file
1
src/static/vendor/bootstrap/css/bootstrap.min.css.map
vendored
Normal file
7033
src/static/vendor/bootstrap/js/bootstrap.bundle.js
vendored
Normal file
1
src/static/vendor/bootstrap/js/bootstrap.bundle.js.map
vendored
Normal file
7
src/static/vendor/bootstrap/js/bootstrap.bundle.min.js
vendored
Normal file
1
src/static/vendor/bootstrap/js/bootstrap.bundle.min.js.map
vendored
Normal file
4420
src/static/vendor/bootstrap/js/bootstrap.js
vendored
Normal file
1
src/static/vendor/bootstrap/js/bootstrap.js.map
vendored
Normal file
7
src/static/vendor/bootstrap/js/bootstrap.min.js
vendored
Normal file
1
src/static/vendor/bootstrap/js/bootstrap.min.js.map
vendored
Normal file
386
src/static/vendor/boxicons/css/animations.css
vendored
Normal file
|
|
@ -0,0 +1,386 @@
|
|||
@-webkit-keyframes spin
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: rotate(0);
|
||||
transform: rotate(0);
|
||||
}
|
||||
100%
|
||||
{
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@keyframes spin
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: rotate(0);
|
||||
transform: rotate(0);
|
||||
}
|
||||
100%
|
||||
{
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes burst
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale(1.5);
|
||||
transform: scale(1.5);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes burst
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale(1.5);
|
||||
transform: scale(1.5);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes flashing
|
||||
{
|
||||
0%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
45%
|
||||
{
|
||||
opacity: 0;
|
||||
}
|
||||
90%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes flashing
|
||||
{
|
||||
0%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
45%
|
||||
{
|
||||
opacity: 0;
|
||||
}
|
||||
90%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-left
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(-20px);
|
||||
transform: translateX(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-left
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(-20px);
|
||||
transform: translateX(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-right
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(20px);
|
||||
transform: translateX(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-right
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(20px);
|
||||
transform: translateX(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-up
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(-20px);
|
||||
transform: translateY(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-up
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(-20px);
|
||||
transform: translateY(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-down
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(20px);
|
||||
transform: translateY(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-down
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(20px);
|
||||
transform: translateY(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes tada
|
||||
{
|
||||
from
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
|
||||
10%,
|
||||
20%
|
||||
{
|
||||
-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
}
|
||||
|
||||
40%,
|
||||
60%,
|
||||
80%
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
|
||||
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
to
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tada
|
||||
{
|
||||
from
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
|
||||
10%,
|
||||
20%
|
||||
{
|
||||
-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
}
|
||||
|
||||
40%,
|
||||
60%,
|
||||
80%
|
||||
{
|
||||
-webkit-transform: rotate3d(0, 0, 1, -10deg);
|
||||
transform: rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
to
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
.bx-spin
|
||||
{
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
.bx-spin-hover:hover
|
||||
{
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
|
||||
.bx-tada
|
||||
{
|
||||
-webkit-animation: tada 1.5s ease infinite;
|
||||
animation: tada 1.5s ease infinite;
|
||||
}
|
||||
.bx-tada-hover:hover
|
||||
{
|
||||
-webkit-animation: tada 1.5s ease infinite;
|
||||
animation: tada 1.5s ease infinite;
|
||||
}
|
||||
|
||||
.bx-flashing
|
||||
{
|
||||
-webkit-animation: flashing 1.5s infinite linear;
|
||||
animation: flashing 1.5s infinite linear;
|
||||
}
|
||||
.bx-flashing-hover:hover
|
||||
{
|
||||
-webkit-animation: flashing 1.5s infinite linear;
|
||||
animation: flashing 1.5s infinite linear;
|
||||
}
|
||||
|
||||
.bx-burst
|
||||
{
|
||||
-webkit-animation: burst 1.5s infinite linear;
|
||||
animation: burst 1.5s infinite linear;
|
||||
}
|
||||
.bx-burst-hover:hover
|
||||
{
|
||||
-webkit-animation: burst 1.5s infinite linear;
|
||||
animation: burst 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-up
|
||||
{
|
||||
-webkit-animation: fade-up 1.5s infinite linear;
|
||||
animation: fade-up 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-up-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-up 1.5s infinite linear;
|
||||
animation: fade-up 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-down
|
||||
{
|
||||
-webkit-animation: fade-down 1.5s infinite linear;
|
||||
animation: fade-down 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-down-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-down 1.5s infinite linear;
|
||||
animation: fade-down 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-left
|
||||
{
|
||||
-webkit-animation: fade-left 1.5s infinite linear;
|
||||
animation: fade-left 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-left-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-left 1.5s infinite linear;
|
||||
animation: fade-left 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-right
|
||||
{
|
||||
-webkit-animation: fade-right 1.5s infinite linear;
|
||||
animation: fade-right 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-right-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-right 1.5s infinite linear;
|
||||
animation: fade-right 1.5s infinite linear;
|
||||
}
|
||||
4911
src/static/vendor/boxicons/css/boxicons.css
vendored
Normal file
1
src/static/vendor/boxicons/css/boxicons.min.css
vendored
Normal file
30
src/static/vendor/boxicons/css/transformations.css
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
.bx-rotate-90
|
||||
{
|
||||
transform: rotate(90deg);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)';
|
||||
}
|
||||
.bx-rotate-180
|
||||
{
|
||||
transform: rotate(180deg);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)';
|
||||
}
|
||||
.bx-rotate-270
|
||||
{
|
||||
transform: rotate(270deg);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)';
|
||||
}
|
||||
.bx-flip-horizontal
|
||||
{
|
||||
transform: scaleX(-1);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)';
|
||||
}
|
||||
.bx-flip-vertical
|
||||
{
|
||||
transform: scaleY(-1);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)';
|
||||
}
|
||||
BIN
src/static/vendor/boxicons/fonts/boxicons.eot
vendored
Normal file
1472
src/static/vendor/boxicons/fonts/boxicons.svg
vendored
Normal file
|
After Width: | Height: | Size: 912 KiB |
BIN
src/static/vendor/boxicons/fonts/boxicons.ttf
vendored
Normal file
BIN
src/static/vendor/boxicons/fonts/boxicons.woff
vendored
Normal file
BIN
src/static/vendor/boxicons/fonts/boxicons.woff2
vendored
Normal file
11
src/static/vendor/counterup/counterup.min.js
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
/*!
|
||||
* jquery.counterup.js 2.1.0
|
||||
*
|
||||
* Copyright 2013, Benjamin Intal http://gambit.ph @bfintal
|
||||
* Released under the GPL v2 License
|
||||
*
|
||||
* Amended by Jeremy Paris, Ciro Mattia Gonano and others
|
||||
*
|
||||
* Date: Feb 24, 2017
|
||||
*/
|
||||
(function($){"use strict";$.fn.counterUp=function(options){var settings=$.extend({time:400,delay:10,offset:100,beginAt:0,formatter:false,context:"window",callback:function(){}},options),s;return this.each(function(){var $this=$(this),counter={time:$(this).data("counterup-time")||settings.time,delay:$(this).data("counterup-delay")||settings.delay,offset:$(this).data("counterup-offset")||settings.offset,beginAt:$(this).data("counterup-beginat")||settings.beginAt,context:$(this).data("counterup-context")||settings.context};var counterUpper=function(){var nums=[];var divisions=counter.time/counter.delay;var num=$(this).attr("data-num")?$(this).attr("data-num"):$this.text();var isComma=/[0-9]+,[0-9]+/.test(num);num=num.replace(/,/g,"");var decimalPlaces=(num.split(".")[1]||[]).length;if(counter.beginAt>num)counter.beginAt=num;var isTime=/[0-9]+:[0-9]+:[0-9]+/.test(num);if(isTime){var times=num.split(":"),m=1;s=0;while(times.length>0){s+=m*parseInt(times.pop(),10);m*=60}}for(var i=divisions;i>=counter.beginAt/num*divisions;i--){var newNum=parseFloat(num/divisions*i).toFixed(decimalPlaces);if(isTime){newNum=parseInt(s/divisions*i);var hours=parseInt(newNum/3600)%24;var minutes=parseInt(newNum/60)%60;var seconds=parseInt(newNum%60,10);newNum=(hours<10?"0"+hours:hours)+":"+(minutes<10?"0"+minutes:minutes)+":"+(seconds<10?"0"+seconds:seconds)}if(isComma){while(/(\d+)(\d{3})/.test(newNum.toString())){newNum=newNum.toString().replace(/(\d+)(\d{3})/,"$1"+","+"$2")}}if(settings.formatter){newNum=settings.formatter.call(this,newNum)}nums.unshift(newNum)}$this.data("counterup-nums",nums);$this.text(counter.beginAt);var f=function(){if(!$this.data("counterup-nums")){settings.callback.call(this);return}$this.html($this.data("counterup-nums").shift());if($this.data("counterup-nums").length){setTimeout($this.data("counterup-func"),counter.delay)}else{$this.data("counterup-nums",null);$this.data("counterup-func",null);settings.callback.call(this)}};$this.data("counterup-func",f);setTimeout($this.data("counterup-func"),counter.delay)};$this.waypoint(function(direction){counterUpper();this.destroy()},{offset:counter.offset+"%",context:counter.context})})}})(jQuery);
|
||||
BIN
src/static/vendor/icofont/fonts/icofont.woff
vendored
Normal file
BIN
src/static/vendor/icofont/fonts/icofont.woff2
vendored
Normal file
7
src/static/vendor/icofont/icofont.min.css
vendored
Normal file
1
src/static/vendor/jquery.easing/jquery.easing.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("jquery"))}else{factory(jQuery)}})(function($){$.easing.jswing=$.easing.swing;var pow=Math.pow,sqrt=Math.sqrt,sin=Math.sin,cos=Math.cos,PI=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI/3,c5=2*PI/4.5;function bounceOut(x){var n1=7.5625,d1=2.75;if(x<1/d1){return n1*x*x}else if(x<2/d1){return n1*(x-=1.5/d1)*x+.75}else if(x<2.5/d1){return n1*(x-=2.25/d1)*x+.9375}else{return n1*(x-=2.625/d1)*x+.984375}}$.extend($.easing,{def:"easeOutQuad",swing:function(x){return $.easing[$.easing.def](x)},easeInQuad:function(x){return x*x},easeOutQuad:function(x){return 1-(1-x)*(1-x)},easeInOutQuad:function(x){return x<.5?2*x*x:1-pow(-2*x+2,2)/2},easeInCubic:function(x){return x*x*x},easeOutCubic:function(x){return 1-pow(1-x,3)},easeInOutCubic:function(x){return x<.5?4*x*x*x:1-pow(-2*x+2,3)/2},easeInQuart:function(x){return x*x*x*x},easeOutQuart:function(x){return 1-pow(1-x,4)},easeInOutQuart:function(x){return x<.5?8*x*x*x*x:1-pow(-2*x+2,4)/2},easeInQuint:function(x){return x*x*x*x*x},easeOutQuint:function(x){return 1-pow(1-x,5)},easeInOutQuint:function(x){return x<.5?16*x*x*x*x*x:1-pow(-2*x+2,5)/2},easeInSine:function(x){return 1-cos(x*PI/2)},easeOutSine:function(x){return sin(x*PI/2)},easeInOutSine:function(x){return-(cos(PI*x)-1)/2},easeInExpo:function(x){return x===0?0:pow(2,10*x-10)},easeOutExpo:function(x){return x===1?1:1-pow(2,-10*x)},easeInOutExpo:function(x){return x===0?0:x===1?1:x<.5?pow(2,20*x-10)/2:(2-pow(2,-20*x+10))/2},easeInCirc:function(x){return 1-sqrt(1-pow(x,2))},easeOutCirc:function(x){return sqrt(1-pow(x-1,2))},easeInOutCirc:function(x){return x<.5?(1-sqrt(1-pow(2*x,2)))/2:(sqrt(1-pow(-2*x+2,2))+1)/2},easeInElastic:function(x){return x===0?0:x===1?1:-pow(2,10*x-10)*sin((x*10-10.75)*c4)},easeOutElastic:function(x){return x===0?0:x===1?1:pow(2,-10*x)*sin((x*10-.75)*c4)+1},easeInOutElastic:function(x){return x===0?0:x===1?1:x<.5?-(pow(2,20*x-10)*sin((20*x-11.125)*c5))/2:pow(2,-20*x+10)*sin((20*x-11.125)*c5)/2+1},easeInBack:function(x){return c3*x*x*x-c1*x*x},easeOutBack:function(x){return 1+c3*pow(x-1,3)+c1*pow(x-1,2)},easeInOutBack:function(x){return x<.5?pow(2*x,2)*((c2+1)*2*x-c2)/2:(pow(2*x-2,2)*((c2+1)*(x*2-2)+c2)+2)/2},easeInBounce:function(x){return 1-bounceOut(1-x)},easeOutBounce:bounceOut,easeInOutBounce:function(x){return x<.5?(1-bounceOut(1-2*x))/2:(1+bounceOut(2*x-1))/2}})});
|
||||
2
src/static/vendor/jquery/jquery.min.js
vendored
Normal file
1
src/static/vendor/jquery/jquery.min.map
vendored
Normal file
23
src/static/vendor/owl.carousel/LICENSE
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
Copyright (c) 2014 Owl
|
||||
Modified work Copyright 2016-2018 David Deutsch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
122
src/static/vendor/owl.carousel/README.md
vendored
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
# Owl Carousel 2
|
||||
|
||||
Touch enabled [jQuery](https://jquery.com/) plugin that lets you create a beautiful, responsive carousel slider. **To get started, check out https://owlcarousel2.github.io/OwlCarousel2/.**
|
||||
|
||||
**Notice:** The old Owl Carousel site (owlgraphic [dot] com) is no longer in use. Please delete all references to this in bookmarks and your own products' documentation as it's being used for malicious purposes.
|
||||
|
||||
## Quick start
|
||||
|
||||
### Install
|
||||
|
||||
This package can be installed with:
|
||||
|
||||
- [npm](https://www.npmjs.com/package/owl.carousel): `npm install --save owl.carousel` or `yarn add owl.carousel jquery`
|
||||
- [bower](http://bower.io/search/?q=owl.carousel): `bower install --save owl.carousel`
|
||||
|
||||
Or download the [latest release](https://github.com/OwlCarousel2/OwlCarousel2/releases).
|
||||
|
||||
### Load
|
||||
|
||||
#### Webpack
|
||||
|
||||
Add jQuery via the "webpack.ProvidePlugin" to your webpack configuration:
|
||||
|
||||
const webpack = require('webpack');
|
||||
|
||||
//...
|
||||
plugins: [
|
||||
new webpack.ProvidePlugin({
|
||||
$: 'jquery',
|
||||
jQuery: 'jquery',
|
||||
'window.jQuery': 'jquery'
|
||||
}),
|
||||
],
|
||||
//...
|
||||
|
||||
Load the required stylesheet and JS:
|
||||
|
||||
```js
|
||||
import 'owl.carousel/dist/assets/owl.carousel.css';
|
||||
import 'owl.carousel';
|
||||
```
|
||||
|
||||
#### Static HTML
|
||||
|
||||
Put the required stylesheet at the [top](https://developer.yahoo.com/performance/rules.html#css_top) of your markup:
|
||||
|
||||
```html
|
||||
<link rel="stylesheet" href="/node_modules/owl.carousel/dist/assets/owl.carousel.min.css" />
|
||||
```
|
||||
|
||||
```html
|
||||
<link rel="stylesheet" href="/bower_components/owl.carousel/dist/assets/owl.carousel.min.css" />
|
||||
```
|
||||
|
||||
**NOTE:** If you want to use the default navigation styles, you will also need to include `owl.theme.default.css`.
|
||||
|
||||
|
||||
Put the script at the [bottom](https://developer.yahoo.com/performance/rules.html#js_bottom) of your markup right after jQuery:
|
||||
|
||||
```html
|
||||
<script src="/node_modules/jquery/dist/jquery.js"></script>
|
||||
<script src="/node_modules/owl.carousel/dist/owl.carousel.min.js"></script>
|
||||
```
|
||||
|
||||
```html
|
||||
<script src="/bower_components/jquery/dist/jquery.js"></script>
|
||||
<script src="/bower_components/owl.carousel/dist/owl.carousel.min.js"></script>
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
Wrap your items (`div`, `a`, `img`, `span`, `li` etc.) with a container element (`div`, `ul` etc.). Only the class `owl-carousel` is mandatory to apply proper styles:
|
||||
|
||||
```html
|
||||
<div class="owl-carousel owl-theme">
|
||||
<div> Your Content </div>
|
||||
<div> Your Content </div>
|
||||
<div> Your Content </div>
|
||||
<div> Your Content </div>
|
||||
<div> Your Content </div>
|
||||
<div> Your Content </div>
|
||||
<div> Your Content </div>
|
||||
</div>
|
||||
```
|
||||
**NOTE:** The `owl-theme` class is optional, but without it, you will need to style navigation features on your own.
|
||||
|
||||
|
||||
Call the [plugin](https://learn.jquery.com/plugins/) function and your carousel is ready.
|
||||
|
||||
```javascript
|
||||
$(document).ready(function(){
|
||||
$('.owl-carousel').owlCarousel();
|
||||
});
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
The documentation, included in this repo in the root directory, is built with [Assemble](http://assemble.io/) and publicly available at https://owlcarousel2.github.io/OwlCarousel2/. The documentation may also be run locally.
|
||||
|
||||
## Building
|
||||
|
||||
This package comes with [Grunt](http://gruntjs.com/) and [Bower](http://bower.io/). The following tasks are available:
|
||||
|
||||
* `default` compiles the CSS and JS into `/dist` and builds the doc.
|
||||
* `dist` compiles the CSS and JS into `/dist` only.
|
||||
* `watch` watches source files and builds them automatically whenever you save.
|
||||
* `test` runs [JSHint](http://www.jshint.com/) and [QUnit](http://qunitjs.com/) tests headlessly in [PhantomJS](http://phantomjs.org/).
|
||||
|
||||
To define which plugins are build into the distribution just edit `/_config.json` to fit your needs.
|
||||
|
||||
## Contributing
|
||||
|
||||
Please read [CONTRIBUTING.md](CONTRIBUTING.md).
|
||||
|
||||
## Roadmap
|
||||
|
||||
Please make sure to check out our [Roadmap Discussion](https://github.com/OwlCarousel2/OwlCarousel2/issues/1756).
|
||||
|
||||
|
||||
## License
|
||||
|
||||
The code and the documentation are released under the [MIT License](LICENSE).
|
||||
BIN
src/static/vendor/owl.carousel/assets/ajax-loader.gif
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
186
src/static/vendor/owl.carousel/assets/owl.carousel.css
vendored
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
/*
|
||||
* Owl Carousel - Core
|
||||
*/
|
||||
.owl-carousel {
|
||||
display: none;
|
||||
width: 100%;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
/* position relative and z-index fix webkit rendering fonts issue */
|
||||
position: relative;
|
||||
z-index: 1; }
|
||||
.owl-carousel .owl-stage {
|
||||
position: relative;
|
||||
-ms-touch-action: pan-Y;
|
||||
touch-action: manipulation;
|
||||
-moz-backface-visibility: hidden;
|
||||
/* fix firefox animation glitch */ }
|
||||
.owl-carousel .owl-stage:after {
|
||||
content: ".";
|
||||
display: block;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
line-height: 0;
|
||||
height: 0; }
|
||||
.owl-carousel .owl-stage-outer {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
/* fix for flashing background */
|
||||
-webkit-transform: translate3d(0px, 0px, 0px); }
|
||||
.owl-carousel .owl-wrapper,
|
||||
.owl-carousel .owl-item {
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0); }
|
||||
.owl-carousel .owl-item {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
float: left;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-touch-callout: none; }
|
||||
.owl-carousel .owl-item img {
|
||||
display: block;
|
||||
width: 100%; }
|
||||
.owl-carousel .owl-nav.disabled,
|
||||
.owl-carousel .owl-dots.disabled {
|
||||
display: none; }
|
||||
.owl-carousel .owl-nav .owl-prev,
|
||||
.owl-carousel .owl-nav .owl-next,
|
||||
.owl-carousel .owl-dot {
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none; }
|
||||
.owl-carousel .owl-nav button.owl-prev,
|
||||
.owl-carousel .owl-nav button.owl-next,
|
||||
.owl-carousel button.owl-dot {
|
||||
background: none;
|
||||
color: inherit;
|
||||
border: none;
|
||||
padding: 0 !important;
|
||||
font: inherit; }
|
||||
.owl-carousel.owl-loaded {
|
||||
display: block; }
|
||||
.owl-carousel.owl-loading {
|
||||
opacity: 0;
|
||||
display: block; }
|
||||
.owl-carousel.owl-hidden {
|
||||
opacity: 0; }
|
||||
.owl-carousel.owl-refresh .owl-item {
|
||||
visibility: hidden; }
|
||||
.owl-carousel.owl-drag .owl-item {
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none; }
|
||||
.owl-carousel.owl-grab {
|
||||
cursor: move;
|
||||
cursor: grab; }
|
||||
.owl-carousel.owl-rtl {
|
||||
direction: rtl; }
|
||||
.owl-carousel.owl-rtl .owl-item {
|
||||
float: right; }
|
||||
|
||||
/* No Js */
|
||||
.no-js .owl-carousel {
|
||||
display: block; }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Animate Plugin
|
||||
*/
|
||||
.owl-carousel .animated {
|
||||
animation-duration: 1000ms;
|
||||
animation-fill-mode: both; }
|
||||
|
||||
.owl-carousel .owl-animated-in {
|
||||
z-index: 0; }
|
||||
|
||||
.owl-carousel .owl-animated-out {
|
||||
z-index: 1; }
|
||||
|
||||
.owl-carousel .fadeOut {
|
||||
animation-name: fadeOut; }
|
||||
|
||||
@keyframes fadeOut {
|
||||
0% {
|
||||
opacity: 1; }
|
||||
100% {
|
||||
opacity: 0; } }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Auto Height Plugin
|
||||
*/
|
||||
.owl-height {
|
||||
transition: height 500ms ease-in-out; }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Lazy Load Plugin
|
||||
*/
|
||||
.owl-carousel .owl-item {
|
||||
/**
|
||||
This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong
|
||||
calculation of the height of the owl-item that breaks page layouts
|
||||
*/ }
|
||||
.owl-carousel .owl-item .owl-lazy {
|
||||
opacity: 0;
|
||||
transition: opacity 400ms ease; }
|
||||
.owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) {
|
||||
max-height: 0; }
|
||||
.owl-carousel .owl-item img.owl-lazy {
|
||||
transform-style: preserve-3d; }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Video Plugin
|
||||
*/
|
||||
.owl-carousel .owl-video-wrapper {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
background: #000; }
|
||||
|
||||
.owl-carousel .owl-video-play-icon {
|
||||
position: absolute;
|
||||
height: 80px;
|
||||
width: 80px;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin-left: -40px;
|
||||
margin-top: -40px;
|
||||
background: url("owl.video.play.png") no-repeat;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
-webkit-backface-visibility: hidden;
|
||||
transition: transform 100ms ease; }
|
||||
|
||||
.owl-carousel .owl-video-play-icon:hover {
|
||||
-ms-transform: scale(1.3, 1.3);
|
||||
transform: scale(1.3, 1.3); }
|
||||
|
||||
.owl-carousel .owl-video-playing .owl-video-tn,
|
||||
.owl-carousel .owl-video-playing .owl-video-play-icon {
|
||||
display: none; }
|
||||
|
||||
.owl-carousel .owl-video-tn {
|
||||
opacity: 0;
|
||||
height: 100%;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
transition: opacity 400ms ease; }
|
||||
|
||||
.owl-carousel .owl-video-frame {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
height: 100%;
|
||||
width: 100%; }
|
||||
6
src/static/vendor/owl.carousel/assets/owl.carousel.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}
|
||||
50
src/static/vendor/owl.carousel/assets/owl.theme.default.css
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
/*
|
||||
* Default theme - Owl Carousel CSS File
|
||||
*/
|
||||
.owl-theme .owl-nav {
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
-webkit-tap-highlight-color: transparent; }
|
||||
.owl-theme .owl-nav [class*='owl-'] {
|
||||
color: #FFF;
|
||||
font-size: 14px;
|
||||
margin: 5px;
|
||||
padding: 4px 7px;
|
||||
background: #D6D6D6;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
border-radius: 3px; }
|
||||
.owl-theme .owl-nav [class*='owl-']:hover {
|
||||
background: #869791;
|
||||
color: #FFF;
|
||||
text-decoration: none; }
|
||||
.owl-theme .owl-nav .disabled {
|
||||
opacity: 0.5;
|
||||
cursor: default; }
|
||||
|
||||
.owl-theme .owl-nav.disabled + .owl-dots {
|
||||
margin-top: 10px; }
|
||||
|
||||
.owl-theme .owl-dots {
|
||||
text-align: center;
|
||||
-webkit-tap-highlight-color: transparent; }
|
||||
.owl-theme .owl-dots .owl-dot {
|
||||
display: inline-block;
|
||||
zoom: 1;
|
||||
*display: inline; }
|
||||
.owl-theme .owl-dots .owl-dot span {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin: 5px 7px;
|
||||
background: #D6D6D6;
|
||||
display: block;
|
||||
-webkit-backface-visibility: visible;
|
||||
transition: opacity 200ms ease;
|
||||
border-radius: 30px; }
|
||||
.owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {
|
||||
background: #869791; }
|
||||
6
src/static/vendor/owl.carousel/assets/owl.theme.default.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791}
|
||||
50
src/static/vendor/owl.carousel/assets/owl.theme.green.css
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
/*
|
||||
* Green theme - Owl Carousel CSS File
|
||||
*/
|
||||
.owl-theme .owl-nav {
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
-webkit-tap-highlight-color: transparent; }
|
||||
.owl-theme .owl-nav [class*='owl-'] {
|
||||
color: #FFF;
|
||||
font-size: 14px;
|
||||
margin: 5px;
|
||||
padding: 4px 7px;
|
||||
background: #D6D6D6;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
border-radius: 3px; }
|
||||
.owl-theme .owl-nav [class*='owl-']:hover {
|
||||
background: #4DC7A0;
|
||||
color: #FFF;
|
||||
text-decoration: none; }
|
||||
.owl-theme .owl-nav .disabled {
|
||||
opacity: 0.5;
|
||||
cursor: default; }
|
||||
|
||||
.owl-theme .owl-nav.disabled + .owl-dots {
|
||||
margin-top: 10px; }
|
||||
|
||||
.owl-theme .owl-dots {
|
||||
text-align: center;
|
||||
-webkit-tap-highlight-color: transparent; }
|
||||
.owl-theme .owl-dots .owl-dot {
|
||||
display: inline-block;
|
||||
zoom: 1;
|
||||
*display: inline; }
|
||||
.owl-theme .owl-dots .owl-dot span {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin: 5px 7px;
|
||||
background: #D6D6D6;
|
||||
display: block;
|
||||
-webkit-backface-visibility: visible;
|
||||
transition: opacity 200ms ease;
|
||||
border-radius: 30px; }
|
||||
.owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {
|
||||
background: #4DC7A0; }
|
||||
6
src/static/vendor/owl.carousel/assets/owl.theme.green.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0}
|
||||
BIN
src/static/vendor/owl.carousel/assets/owl.video.play.png
vendored
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
3448
src/static/vendor/owl.carousel/owl.carousel.js
vendored
Normal file
7
src/static/vendor/owl.carousel/owl.carousel.min.js
vendored
Normal file
10
src/static/vendor/php-email-form/changelog.txt
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
Version: 2.0
|
||||
- The minimum required PHP version is 5.5
|
||||
- Improved error handling and debugging
|
||||
- Added support for cc and bcc
|
||||
- Added "honeypot" spam protection feature
|
||||
- Added support for Google reCaptcha spam protection
|
||||
|
||||
Version: 1.0
|
||||
- Initial Release
|
||||
|
||||
165
src/static/vendor/php-email-form/validate.js
vendored
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
/**
|
||||
* PHP Email Form Validation - v2.0
|
||||
* URL: https://bootstrapmade.com/php-email-form/
|
||||
* Author: BootstrapMade.com
|
||||
*/
|
||||
!(function($) {
|
||||
"use strict";
|
||||
|
||||
$('form.php-email-form').submit(function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var f = $(this).find('.form-group'),
|
||||
ferror = false,
|
||||
emailExp = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i;
|
||||
|
||||
f.children('input').each(function() { // run all inputs
|
||||
|
||||
var i = $(this); // current input
|
||||
var rule = i.attr('data-rule');
|
||||
|
||||
if (rule !== undefined) {
|
||||
var ierror = false; // error flag for current input
|
||||
var pos = rule.indexOf(':', 0);
|
||||
if (pos >= 0) {
|
||||
var exp = rule.substr(pos + 1, rule.length);
|
||||
rule = rule.substr(0, pos);
|
||||
} else {
|
||||
rule = rule.substr(pos + 1, rule.length);
|
||||
}
|
||||
|
||||
switch (rule) {
|
||||
case 'required':
|
||||
if (i.val() === '') {
|
||||
ferror = ierror = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'minlen':
|
||||
if (i.val().length < parseInt(exp)) {
|
||||
ferror = ierror = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'email':
|
||||
if (!emailExp.test(i.val())) {
|
||||
ferror = ierror = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'checked':
|
||||
if (! i.is(':checked')) {
|
||||
ferror = ierror = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'regexp':
|
||||
exp = new RegExp(exp);
|
||||
if (!exp.test(i.val())) {
|
||||
ferror = ierror = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
i.next('.validate').html((ierror ? (i.attr('data-msg') !== undefined ? i.attr('data-msg') : 'wrong Input') : '')).show('blind');
|
||||
}
|
||||
});
|
||||
f.children('textarea').each(function() { // run all inputs
|
||||
|
||||
var i = $(this); // current input
|
||||
var rule = i.attr('data-rule');
|
||||
|
||||
if (rule !== undefined) {
|
||||
var ierror = false; // error flag for current input
|
||||
var pos = rule.indexOf(':', 0);
|
||||
if (pos >= 0) {
|
||||
var exp = rule.substr(pos + 1, rule.length);
|
||||
rule = rule.substr(0, pos);
|
||||
} else {
|
||||
rule = rule.substr(pos + 1, rule.length);
|
||||
}
|
||||
|
||||
switch (rule) {
|
||||
case 'required':
|
||||
if (i.val() === '') {
|
||||
ferror = ierror = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'minlen':
|
||||
if (i.val().length < parseInt(exp)) {
|
||||
ferror = ierror = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
i.next('.validate').html((ierror ? (i.attr('data-msg') != undefined ? i.attr('data-msg') : 'wrong Input') : '')).show('blind');
|
||||
}
|
||||
});
|
||||
if (ferror) return false;
|
||||
|
||||
var this_form = $(this);
|
||||
var action = $(this).attr('action');
|
||||
|
||||
if( ! action ) {
|
||||
this_form.find('.loading').slideUp();
|
||||
this_form.find('.error-message').slideDown().html('The form action property is not set!');
|
||||
return false;
|
||||
}
|
||||
|
||||
this_form.find('.sent-message').slideUp();
|
||||
this_form.find('.error-message').slideUp();
|
||||
this_form.find('.loading').slideDown();
|
||||
|
||||
if ( $(this).data('recaptcha-site-key') ) {
|
||||
var recaptcha_site_key = $(this).data('recaptcha-site-key');
|
||||
grecaptcha.ready(function() {
|
||||
grecaptcha.execute(recaptcha_site_key, {action: 'php_email_form_submit'}).then(function(token) {
|
||||
php_email_form_submit(this_form,action,this_form.serialize() + '&recaptcha-response=' + token);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
php_email_form_submit(this_form,action,this_form.serialize());
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
function php_email_form_submit(this_form, action, data) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: action,
|
||||
data: data,
|
||||
timeout: 40000
|
||||
}).done( function(msg){
|
||||
if (msg == 'OK') {
|
||||
this_form.find('.loading').slideUp();
|
||||
this_form.find('.sent-message').slideDown();
|
||||
this_form.find("input:not(input[type=submit]), textarea").val('');
|
||||
} else {
|
||||
this_form.find('.loading').slideUp();
|
||||
if(!msg) {
|
||||
msg = 'Form submission failed and no error message returned from: ' + action + '<br>';
|
||||
}
|
||||
this_form.find('.error-message').slideDown().html(msg);
|
||||
}
|
||||
}).fail( function(data){
|
||||
console.log(data);
|
||||
var error_msg = "Form submission failed!<br>";
|
||||
if(data.statusText || data.status) {
|
||||
error_msg += 'Status:';
|
||||
if(data.statusText) {
|
||||
error_msg += ' ' + data.statusText;
|
||||
}
|
||||
if(data.status) {
|
||||
error_msg += ' ' + data.status;
|
||||
}
|
||||
error_msg += '<br>';
|
||||
}
|
||||
if(data.responseText) {
|
||||
error_msg += data.responseText;
|
||||
}
|
||||
this_form.find('.loading').slideUp();
|
||||
this_form.find('.error-message').slideDown().html(error_msg);
|
||||
});
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
2317
src/static/vendor/remixicon/remixicon.css
vendored
Normal file
BIN
src/static/vendor/remixicon/remixicon.eot
vendored
Normal file
2319
src/static/vendor/remixicon/remixicon.less
vendored
Normal file
6835
src/static/vendor/remixicon/remixicon.svg
vendored
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
11356
src/static/vendor/remixicon/remixicon.symbol.svg
vendored
Normal file
|
After Width: | Height: | Size: 877 KiB |