initial v6 structural changes
@ -1,13 +0,0 @@
|
||||
# https://github.com/browserslist/browserslist#readme
|
||||
|
||||
>= 1%
|
||||
last 1 major version
|
||||
not dead
|
||||
Chrome >= 60
|
||||
Firefox >= 60
|
||||
Edge >= 15.15063
|
||||
Explorer 11
|
||||
iOS >= 10
|
||||
Safari >= 10
|
||||
Android >= 6
|
||||
not ExplorerMobile <= 11
|
3
.gitignore
vendored
@ -1 +1,2 @@
|
||||
node_modules
|
||||
node_modules
|
||||
.DS_Store
|
@ -6,7 +6,6 @@ node_js:
|
||||
install: npm install
|
||||
script:
|
||||
- npm test
|
||||
- gulp
|
||||
cache:
|
||||
directories:
|
||||
- node_modules
|
||||
|
2
LICENSE
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-2019 Blackrock Digital LLC
|
||||
Copyright (c) 2013-2020 Blackrock Digital LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
52
README.md
@ -1,6 +1,6 @@
|
||||
# [Start Bootstrap - Agency](https://startbootstrap.com/template-overviews/agency/)
|
||||
# [Start Bootstrap - Agency](https://startbootstrap.com/themes/agency/)
|
||||
|
||||
[Agency](https://startbootstrap.com/template-overviews/agency/) is a one page agency portfolio theme for [Bootstrap](http://getbootstrap.com/) created by [Start Bootstrap](http://startbootstrap.com/). This theme features several content sections, a responsive portfolio grid with hover effects, full page portfolio item modals, a responsive timeline, and a working PHP contact form.
|
||||
[Agency](http://startbootstrap.com/themes/agency/) is a one page, agency portfolio theme built with [Bootstrap](http://getbootstrap.com/) created by [Start Bootstrap](https://startbootstrap.com/). This theme features several content sections, a responsive portfolio grid, modal windows for each portfolio item, and a working PHP based contact form.
|
||||
|
||||
## Preview
|
||||
|
||||
@ -19,50 +19,54 @@
|
||||
## Download and Installation
|
||||
|
||||
To begin using this template, choose one of the following options to get started:
|
||||
* [Download the latest release on Start Bootstrap](https://startbootstrap.com/template-overviews/agency/)
|
||||
* Install via npm: `npm i startbootstrap-agency`
|
||||
* Clone the repo: `git clone https://github.com/BlackrockDigital/startbootstrap-agency.git`
|
||||
* [Fork, Clone, or Download on GitHub](https://github.com/BlackrockDigital/startbootstrap-agency)
|
||||
|
||||
- [Download the latest release on Start Bootstrap](https://startbootstrap.com/themes/agency/)
|
||||
- Install using npm: `npm i startbootstrap-agency`
|
||||
- Clone the repo: `git clone https://github.com/BlackrockDigital/startbootstrap-agency.git`
|
||||
- [Fork, Clone, or Download on GitHub](https://github.com/BlackrockDigital/startbootstrap-agency)
|
||||
|
||||
## Usage
|
||||
|
||||
### Basic Usage
|
||||
|
||||
After downloading, simply edit the HTML and CSS files included with the template in your favorite text editor to make changes. These are the only files you need to worry about, you can ignore everything else! To preview the changes you make to the code, you can open the `index.html` file in your web browser.
|
||||
After downloading, simply edit the HTML and CSS files included with `dist` directory. These are the only files you need to worry about, you can ignore everything else! To preview the changes you make to the code, you can open the `index.html` file in your web browser.
|
||||
|
||||
### Advanced Usage
|
||||
|
||||
After installation, run `npm install` and then run `npm start` which will open up a preview of the template in your default browser, watch for changes to core template files, and live reload the browser when changes are saved. You can view the `gulpfile.js` to see which tasks are included with the dev environment.
|
||||
Clone the source files of the theme and navigate into the theme's root directory. Run `npm install` and then run `npm start` which will open up a preview of the template in your default browser, watch for changes to core template files, and live reload the browser when changes are saved. You can view the `package.json` file to see which scripts are included.
|
||||
|
||||
#### Gulp Tasks
|
||||
#### npm Scripts
|
||||
|
||||
- `gulp` the default task that builds everything
|
||||
- `gulp watch` browserSync opens the project in your default browser and live reloads when changes are made
|
||||
- `gulp css` compiles SCSS files into CSS and minifies the compiled CSS
|
||||
- `gulp js` minifies the themes JS file
|
||||
- `gulp vendor` copies dependencies from node_modules to the vendor directory
|
||||
- `npm run build` builds the project - this builds assets, HTML, JS, and CSS into `dist`
|
||||
- `npm run build:assets` copies the files in the `src/assets/` directory into `dist`
|
||||
- `npm run build:pug` compiles the Pug located in the `src/pug/` directory into `dist`
|
||||
- `npm run build:scripts` brings the `src/js/scripts.js` file into `dist`
|
||||
- `npm run build:scss` compiles the SCSS files located in the `src/scss/` directory into `dist`
|
||||
- `npm run clean` deletes the `dist` directory to prepare for rebuilding the project
|
||||
- `npm run start:debug` runs the project in debug mode
|
||||
- `npm start` or `npm run start` runs the project, launches a live preview in your default browser, and watches for changes made to files in `src`
|
||||
|
||||
You must have npm installed globally in order to use this build environment.
|
||||
You must have npm installed in order to use this build environment.
|
||||
|
||||
## Bugs and Issues
|
||||
|
||||
Have a bug or an issue with this template? [Open a new issue](https://github.com/BlackrockDigital/startbootstrap-agency/issues) here on GitHub or leave a comment on the [template overview page at Start Bootstrap](http://startbootstrap.com/template-overviews/agency/).
|
||||
Have a bug or an issue with this template? [Open a new issue](https://github.com/BlackrockDigital/startbootstrap-agency/issues) here on GitHub or leave a comment on the [theme overview page at Start Bootstrap](http://startbootstrap.com/themes/agency/).
|
||||
|
||||
## About
|
||||
|
||||
Start Bootstrap is an open source library of free Bootstrap templates and themes. All of the free templates and themes on Start Bootstrap are released under the MIT license, which means you can use them for any purpose, even for commercial projects.
|
||||
Start Bootstrap is an open source library of free Bootstrap themes and templates. All of the free themes and templates on Start Bootstrap are released under the MIT license, which means you can use them for any purpose, even for commercial projects.
|
||||
|
||||
* https://startbootstrap.com
|
||||
* https://twitter.com/SBootstrap
|
||||
- <https://startbootstrap.com>
|
||||
- <https://twitter.com/SBootstrap>
|
||||
|
||||
Start Bootstrap was created by and is maintained by **[David Miller](http://davidmiller.io/)**, Owner of [Blackrock Digital](http://blackrockdigital.io/).
|
||||
|
||||
* http://davidmiller.io
|
||||
* https://twitter.com/davidmillerskt
|
||||
* https://github.com/davidtmiller
|
||||
- <http://davidmiller.io>
|
||||
- <https://twitter.com/davidmillerskt>
|
||||
- <https://github.com/davidtmiller>
|
||||
|
||||
Start Bootstrap is based on the [Bootstrap](http://getbootstrap.com/) framework created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thorton](https://twitter.com/fat).
|
||||
Start Bootstrap is based on the [Bootstrap](https://getbootstrap.com/) framework created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thorton](https://twitter.com/fat).
|
||||
|
||||
## Copyright and License
|
||||
|
||||
Copyright 2013-2019 Blackrock Digital LLC. Code released under the [MIT](https://github.com/BlackrockDigital/startbootstrap-agency/blob/gh-pages/LICENSE) license.
|
||||
Copyright 2013-2020 Blackrock Digital LLC. Code released under the [MIT](https://github.com/BlackrockDigital/startbootstrap-agency/blob/gh-pages/LICENSE) license.
|
||||
|
683
css/agency.css
@ -1,683 +0,0 @@
|
||||
/*!
|
||||
* Start Bootstrap - Agency v5.2.2 (https://startbootstrap.com/template-overviews/agency)
|
||||
* Copyright 2013-2019 Start Bootstrap
|
||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-agency/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
body {
|
||||
overflow-x: hidden;
|
||||
font-family: 'Roboto Slab', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.75;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fed136;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #fec503;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: #fed136 !important;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: 700;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
.page-section {
|
||||
padding: 100px 0;
|
||||
}
|
||||
|
||||
.page-section h2.section-heading {
|
||||
font-size: 40px;
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.page-section h3.section-subheading {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
margin-bottom: 75px;
|
||||
text-transform: none;
|
||||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
section {
|
||||
padding: 150px 0;
|
||||
}
|
||||
}
|
||||
|
||||
::-moz-selection {
|
||||
background: #fed136;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: #fed136;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
img::-moz-selection {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
img::selection {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
img::-moz-selection {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.btn {
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.btn-xl {
|
||||
font-size: 18px;
|
||||
padding: 20px 40px;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #fed136;
|
||||
border-color: #fed136;
|
||||
}
|
||||
|
||||
.btn-primary:active, .btn-primary:focus, .btn-primary:hover {
|
||||
background-color: #fec810 !important;
|
||||
border-color: #fec810 !important;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-primary:active, .btn-primary:focus {
|
||||
box-shadow: 0 0 0 0.2rem rgba(254, 209, 55, 0.5) !important;
|
||||
}
|
||||
|
||||
#mainNav {
|
||||
background-color: #212529;
|
||||
}
|
||||
|
||||
#mainNav .navbar-toggler {
|
||||
font-size: 12px;
|
||||
right: 0;
|
||||
padding: 13px;
|
||||
text-transform: uppercase;
|
||||
color: white;
|
||||
border: 0;
|
||||
background-color: #fed136;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
#mainNav .navbar-brand {
|
||||
color: #fed136;
|
||||
font-family: 'Kaushan Script', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
#mainNav .navbar-brand.active, #mainNav .navbar-brand:active, #mainNav .navbar-brand:focus, #mainNav .navbar-brand:hover {
|
||||
color: #fec503;
|
||||
}
|
||||
|
||||
#mainNav .navbar-nav .nav-item .nav-link {
|
||||
font-size: 90%;
|
||||
font-weight: 400;
|
||||
padding: 0.75em 0;
|
||||
letter-spacing: 1px;
|
||||
color: white;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
#mainNav .navbar-nav .nav-item .nav-link.active, #mainNav .navbar-nav .nav-item .nav-link:hover {
|
||||
color: #fed136;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#mainNav {
|
||||
padding-top: 25px;
|
||||
padding-bottom: 25px;
|
||||
transition: padding-top 0.3s, padding-bottom 0.3s;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
#mainNav .navbar-brand {
|
||||
font-size: 1.75em;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
#mainNav .navbar-nav .nav-item .nav-link {
|
||||
padding: 1.1em 1em !important;
|
||||
}
|
||||
#mainNav.navbar-shrink {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
background-color: #212529;
|
||||
}
|
||||
#mainNav.navbar-shrink .navbar-brand {
|
||||
font-size: 1.25em;
|
||||
padding: 12px 0;
|
||||
}
|
||||
}
|
||||
|
||||
header.masthead {
|
||||
text-align: center;
|
||||
color: white;
|
||||
background-image: url("../img/header-bg.jpg");
|
||||
background-repeat: no-repeat;
|
||||
background-attachment: scroll;
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
header.masthead .intro-text {
|
||||
padding-top: 150px;
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
||||
header.masthead .intro-text .intro-lead-in {
|
||||
font-size: 22px;
|
||||
font-style: italic;
|
||||
line-height: 22px;
|
||||
margin-bottom: 25px;
|
||||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
header.masthead .intro-text .intro-heading {
|
||||
font-size: 50px;
|
||||
font-weight: 700;
|
||||
line-height: 50px;
|
||||
margin-bottom: 25px;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
header.masthead .intro-text {
|
||||
padding-top: 300px;
|
||||
padding-bottom: 200px;
|
||||
}
|
||||
header.masthead .intro-text .intro-lead-in {
|
||||
font-size: 40px;
|
||||
font-style: italic;
|
||||
line-height: 40px;
|
||||
margin-bottom: 25px;
|
||||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
header.masthead .intro-text .intro-heading {
|
||||
font-size: 75px;
|
||||
font-weight: 700;
|
||||
line-height: 75px;
|
||||
margin-bottom: 50px;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
}
|
||||
|
||||
.service-heading {
|
||||
margin: 15px 0;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item {
|
||||
right: 0;
|
||||
margin: 0 0 15px;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-link {
|
||||
position: relative;
|
||||
display: block;
|
||||
max-width: 400px;
|
||||
margin: 0 auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-link .portfolio-hover {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transition: all ease 0.5s;
|
||||
opacity: 0;
|
||||
background: rgba(254, 209, 54, 0.9);
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-link .portfolio-hover:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content {
|
||||
font-size: 20px;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
margin-top: -12px;
|
||||
text-align: center;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content i {
|
||||
margin-top: -12px;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content h3,
|
||||
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content h4 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-caption {
|
||||
max-width: 400px;
|
||||
margin: 0 auto;
|
||||
padding: 25px;
|
||||
text-align: center;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-caption h4 {
|
||||
margin: 0;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
#portfolio .portfolio-item .portfolio-caption p {
|
||||
font-size: 16px;
|
||||
font-style: italic;
|
||||
margin: 0;
|
||||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
#portfolio * {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
@media (min-width: 767px) {
|
||||
#portfolio .portfolio-item {
|
||||
margin: 0 0 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-dialog {
|
||||
margin: 1rem;
|
||||
max-width: 100vw;
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-content {
|
||||
padding: 100px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-content h2 {
|
||||
font-size: 3em;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-content p {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-content p.item-intro {
|
||||
font-size: 16px;
|
||||
font-style: italic;
|
||||
margin: 20px 0 30px;
|
||||
font-family: 'Droid Serif', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-content ul.list-inline {
|
||||
margin-top: 0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-content img {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.portfolio-modal .modal-content button {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.portfolio-modal .close-modal {
|
||||
position: absolute;
|
||||
top: 25px;
|
||||
right: 25px;
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
cursor: pointer;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.portfolio-modal .close-modal:hover {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.portfolio-modal .close-modal .lr {
|
||||
/* Safari and Chrome */
|
||||
z-index: 1051;
|
||||
width: 1px;
|
||||
height: 75px;
|
||||
margin-left: 35px;
|
||||
/* IE 9 */
|
||||
transform: rotate(45deg);
|
||||
background-color: #212529;
|
||||
}
|
||||
|
||||
.portfolio-modal .close-modal .lr .rl {
|
||||
/* Safari and Chrome */
|
||||
z-index: 1052;
|
||||
width: 1px;
|
||||
height: 75px;
|
||||
/* IE 9 */
|
||||
transform: rotate(90deg);
|
||||
background-color: #212529;
|
||||
}
|
||||
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 40px;
|
||||
width: 2px;
|
||||
margin-left: -1.5px;
|
||||
content: '';
|
||||
background-color: #e9ecef;
|
||||
}
|
||||
|
||||
.timeline > li {
|
||||
position: relative;
|
||||
min-height: 50px;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.timeline > li:after, .timeline > li:before {
|
||||
display: table;
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
.timeline > li:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.timeline > li .timeline-panel {
|
||||
position: relative;
|
||||
float: right;
|
||||
width: 100%;
|
||||
padding: 0 20px 0 100px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.timeline > li .timeline-panel:before {
|
||||
right: auto;
|
||||
left: -15px;
|
||||
border-right-width: 15px;
|
||||
border-left-width: 0;
|
||||
}
|
||||
|
||||
.timeline > li .timeline-panel:after {
|
||||
right: auto;
|
||||
left: -14px;
|
||||
border-right-width: 14px;
|
||||
border-left-width: 0;
|
||||
}
|
||||
|
||||
.timeline > li .timeline-image {
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
left: 0;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
margin-left: 0;
|
||||
text-align: center;
|
||||
color: white;
|
||||
border: 7px solid #e9ecef;
|
||||
border-radius: 100%;
|
||||
background-color: #fed136;
|
||||
}
|
||||
|
||||
.timeline > li .timeline-image h4 {
|
||||
font-size: 10px;
|
||||
line-height: 14px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.timeline > li.timeline-inverted > .timeline-panel {
|
||||
float: right;
|
||||
padding: 0 20px 0 100px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.timeline > li.timeline-inverted > .timeline-panel:before {
|
||||
right: auto;
|
||||
left: -15px;
|
||||
border-right-width: 15px;
|
||||
border-left-width: 0;
|
||||
}
|
||||
|
||||
.timeline > li.timeline-inverted > .timeline-panel:after {
|
||||
right: auto;
|
||||
left: -14px;
|
||||
border-right-width: 14px;
|
||||
border-left-width: 0;
|
||||
}
|
||||
|
||||
.timeline > li:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.timeline .timeline-heading h4 {
|
||||
margin-top: 0;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.timeline .timeline-heading h4.subheading {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.timeline .timeline-body > ul,
|
||||
.timeline .timeline-body > p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.timeline:before {
|
||||
left: 50%;
|
||||
}
|
||||
.timeline > li {
|
||||
min-height: 100px;
|
||||
margin-bottom: 100px;
|
||||
}
|
||||
.timeline > li .timeline-panel {
|
||||
float: left;
|
||||
width: 41%;
|
||||
padding: 0 20px 20px 30px;
|
||||
text-align: right;
|
||||
}
|
||||
.timeline > li .timeline-image {
|
||||
left: 50%;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
margin-left: -50px;
|
||||
}
|
||||
.timeline > li .timeline-image h4 {
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
.timeline > li.timeline-inverted > .timeline-panel {
|
||||
float: right;
|
||||
padding: 0 30px 20px 20px;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.timeline > li {
|
||||
min-height: 150px;
|
||||
}
|
||||
.timeline > li .timeline-panel {
|
||||
padding: 0 20px 20px;
|
||||
}
|
||||
.timeline > li .timeline-image {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin-left: -75px;
|
||||
}
|
||||
.timeline > li .timeline-image h4 {
|
||||
font-size: 18px;
|
||||
line-height: 26px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
.timeline > li.timeline-inverted > .timeline-panel {
|
||||
padding: 0 20px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.timeline > li {
|
||||
min-height: 170px;
|
||||
}
|
||||
.timeline > li .timeline-panel {
|
||||
padding: 0 20px 20px 100px;
|
||||
}
|
||||
.timeline > li .timeline-image {
|
||||
width: 170px;
|
||||
height: 170px;
|
||||
margin-left: -85px;
|
||||
}
|
||||
.timeline > li .timeline-image h4 {
|
||||
margin-top: 40px;
|
||||
}
|
||||
.timeline > li.timeline-inverted > .timeline-panel {
|
||||
padding: 0 100px 20px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.team-member {
|
||||
margin-bottom: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.team-member img {
|
||||
width: 225px;
|
||||
height: 225px;
|
||||
border: 7px solid rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.team-member h4 {
|
||||
margin-top: 25px;
|
||||
margin-bottom: 0;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.team-member p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
section#contact {
|
||||
background-color: #212529;
|
||||
background-image: url("../img/map-image.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
section#contact .section-heading {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
section#contact .form-group {
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
section#contact .form-group input,
|
||||
section#contact .form-group textarea {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
section#contact .form-group input.form-control {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
section#contact .form-group textarea.form-control {
|
||||
height: 248px;
|
||||
}
|
||||
|
||||
section#contact .form-control:focus {
|
||||
border-color: #fed136;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
section#contact ::-webkit-input-placeholder {
|
||||
font-weight: 700;
|
||||
color: #ced4da;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
section#contact :-moz-placeholder {
|
||||
font-weight: 700;
|
||||
color: #ced4da;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
section#contact ::-moz-placeholder {
|
||||
font-weight: 700;
|
||||
color: #ced4da;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
section#contact :-ms-input-placeholder {
|
||||
font-weight: 700;
|
||||
color: #ced4da;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
.footer {
|
||||
padding: 25px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.footer span.copyright {
|
||||
font-size: 90%;
|
||||
line-height: 40px;
|
||||
text-transform: none;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
.footer ul.quicklinks {
|
||||
font-size: 90%;
|
||||
line-height: 40px;
|
||||
margin-bottom: 0;
|
||||
text-transform: none;
|
||||
font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
ul.social-buttons {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
ul.social-buttons li a {
|
||||
font-size: 20px;
|
||||
line-height: 50px;
|
||||
display: block;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
transition: all 0.3s;
|
||||
color: white;
|
||||
border-radius: 100%;
|
||||
outline: none;
|
||||
background-color: #212529;
|
||||
}
|
||||
|
||||
ul.social-buttons li a:active, ul.social-buttons li a:focus, ul.social-buttons li a:hover {
|
||||
background-color: #fed136;
|
||||
}
|
5
css/agency.min.css
vendored
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 233 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 356 KiB After Width: | Height: | Size: 356 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
0
img/team/1.jpg → dist/assets/img/team/1.jpg
vendored
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 209 KiB |
0
img/team/2.jpg → dist/assets/img/team/2.jpg
vendored
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
0
img/team/3.jpg → dist/assets/img/team/3.jpg
vendored
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 221 KiB |
@ -20,7 +20,7 @@ $(function() {
|
||||
$this = $("#sendMessageButton");
|
||||
$this.prop("disabled", true); // Disable submit button until AJAX call is complete to prevent duplicate messages
|
||||
$.ajax({
|
||||
url: "././mail/contact_me.php",
|
||||
url: "contact_me.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
name: name,
|
@ -16,7 +16,7 @@ $phone = strip_tags(htmlspecialchars($_POST['phone']));
|
||||
$message = strip_tags(htmlspecialchars($_POST['message']));
|
||||
|
||||
// Create the email and send the message
|
||||
$to = 'yourname@yourdomain.com'; // Add your email address inbetween the '' replacing yourname@yourdomain.com - This is where the form will send a message to.
|
||||
$to = 'yourname@yourdomain.com'; // Add your email address in between the '' replacing yourname@yourdomain.com - This is where the form will send a message to.
|
||||
$email_subject = "Website Contact Form: $name";
|
||||
$email_body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
|
||||
$headers = "From: noreply@yourdomain.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
|
4424
vendor/bootstrap/css/bootstrap.css → dist/css/styles.css
vendored
565
dist/index.html
vendored
Normal file
@ -0,0 +1,565 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="" />
|
||||
<title>Freelancer - Start Bootstrap Theme</title>
|
||||
<!-- Font Awesome icons (free version)-->
|
||||
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
|
||||
<!-- Google fonts-->
|
||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" />
|
||||
<link href="https://fonts.googleapis.com/css?family=Kaushan+Script" rel="stylesheet" type="text/css" />
|
||||
<link href="https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic" rel="stylesheet" type="text/css" />
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700" rel="stylesheet" type="text/css" />
|
||||
<!-- Core theme CSS (includes Bootstrap)-->
|
||||
<link href="css/styles.css" rel="stylesheet" />
|
||||
</head>
|
||||
<body id="page-top">
|
||||
<!-- Navigation-->
|
||||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top" id="mainNav">
|
||||
<div class="container">
|
||||
<a class="navbar-brand js-scroll-trigger" href="#page-top">Start Bootstrap</a><button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">Menu<i class="fas fa-bars"></i></button>
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav text-uppercase ml-auto">
|
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#services">Services</a></li>
|
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#portfolio">Portfolio</a></li>
|
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#about">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#team">Team</a></li>
|
||||
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<!-- Masthead-->
|
||||
<header class="masthead">
|
||||
<div class="container">
|
||||
<div class="intro-text">
|
||||
<div class="intro-lead-in">Welcome To Our Studio!</div>
|
||||
<div class="intro-heading text-uppercase">It's Nice To Meet You</div>
|
||||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="#services">Tell Me More</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<!-- Services-->
|
||||
<section class="page-section" id="services">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Services</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col-md-4">
|
||||
<span class="fa-stack fa-4x"><i class="fas fa-circle fa-stack-2x text-primary"></i><i class="fas fa-shopping-cart fa-stack-1x fa-inverse"></i></span>
|
||||
<h4 class="service-heading">E-Commerce</h4>
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<span class="fa-stack fa-4x"><i class="fas fa-circle fa-stack-2x text-primary"></i><i class="fas fa-laptop fa-stack-1x fa-inverse"></i></span>
|
||||
<h4 class="service-heading">Responsive Design</h4>
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<span class="fa-stack fa-4x"><i class="fas fa-circle fa-stack-2x text-primary"></i><i class="fas fa-lock fa-stack-1x fa-inverse"></i></span>
|
||||
<h4 class="service-heading">Web Security</h4>
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Portfolio Grid-->
|
||||
<section class="bg-light page-section" id="portfolio">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Portfolio</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal1"
|
||||
><div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
|
||||
</div>
|
||||
<img class="img-fluid" src="assets/img/portfolio/01-thumbnail.jpg" alt=""
|
||||
/></a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Threads</h4>
|
||||
<p class="text-muted">Illustration</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal2"
|
||||
><div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
|
||||
</div>
|
||||
<img class="img-fluid" src="assets/img/portfolio/02-thumbnail.jpg" alt=""
|
||||
/></a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Explore</h4>
|
||||
<p class="text-muted">Graphic Design</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal3"
|
||||
><div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
|
||||
</div>
|
||||
<img class="img-fluid" src="assets/img/portfolio/03-thumbnail.jpg" alt=""
|
||||
/></a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Finish</h4>
|
||||
<p class="text-muted">Identity</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal4"
|
||||
><div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
|
||||
</div>
|
||||
<img class="img-fluid" src="assets/img/portfolio/04-thumbnail.jpg" alt=""
|
||||
/></a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Lines</h4>
|
||||
<p class="text-muted">Branding</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal5"
|
||||
><div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
|
||||
</div>
|
||||
<img class="img-fluid" src="assets/img/portfolio/05-thumbnail.jpg" alt=""
|
||||
/></a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Southwest</h4>
|
||||
<p class="text-muted">Website Design</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal6"
|
||||
><div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
|
||||
</div>
|
||||
<img class="img-fluid" src="assets/img/portfolio/06-thumbnail.jpg" alt=""
|
||||
/></a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Window</h4>
|
||||
<p class="text-muted">Photography</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- About-->
|
||||
<section class="page-section" id="about">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">About</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<ul class="timeline">
|
||||
<li>
|
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/1.jpg" alt="" /></div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>2009-2011</h4>
|
||||
<h4 class="subheading">Our Humble Beginnings</h4>
|
||||
</div>
|
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="timeline-inverted">
|
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/2.jpg" alt="" /></div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>March 2011</h4>
|
||||
<h4 class="subheading">An Agency is Born</h4>
|
||||
</div>
|
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/3.jpg" alt="" /></div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>December 2012</h4>
|
||||
<h4 class="subheading">Transition to Full Service</h4>
|
||||
</div>
|
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="timeline-inverted">
|
||||
<div class="timeline-image"><img class="rounded-circle img-fluid" src="assets/img/about/4.jpg" alt="" /></div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>July 2014</h4>
|
||||
<h4 class="subheading">Phase Two Expansion</h4>
|
||||
</div>
|
||||
<div class="timeline-body"><p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p></div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="timeline-inverted">
|
||||
<div class="timeline-image">
|
||||
<h4>Be Part<br />Of Our<br />Story!</h4>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Team-->
|
||||
<section class="bg-light page-section" id="team">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Our Amazing Team</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="team-member">
|
||||
<img class="mx-auto rounded-circle" src="assets/img/team/1.jpg" alt="" />
|
||||
<h4>Kay Garland</h4>
|
||||
<p class="text-muted">Lead Designer</p>
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-twitter"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-facebook-f"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-linkedin-in"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="team-member">
|
||||
<img class="mx-auto rounded-circle" src="assets/img/team/2.jpg" alt="" />
|
||||
<h4>Larry Parker</h4>
|
||||
<p class="text-muted">Lead Marketer</p>
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-twitter"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-facebook-f"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-linkedin-in"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="team-member">
|
||||
<img class="mx-auto rounded-circle" src="assets/img/team/3.jpg" alt="" />
|
||||
<h4>Diana Pertersen</h4>
|
||||
<p class="text-muted">Lead Developer</p>
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-twitter"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-facebook-f"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-linkedin-in"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto text-center"><p class="large text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut eaque, laboriosam veritatis, quos non quis ad perspiciatis, totam corporis ea, alias ut unde.</p></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Clients-->
|
||||
<section class="py-5">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/envato.jpg" alt="" /></a>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/designmodo.jpg" alt="" /></a>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/themeforest.jpg" alt="" /></a>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#"><img class="img-fluid d-block mx-auto" src="assets/img/logos/creative-market.jpg" alt="" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Contact-->
|
||||
<section class="page-section" id="contact">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Contact Us</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<form id="contactForm" name="sentMessage" novalidate="novalidate">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="name" type="text" placeholder="Your Name *" required="required" data-validation-required-message="Please enter your name." />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="email" type="email" placeholder="Your Email *" required="required" data-validation-required-message="Please enter your email address." />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="phone" type="tel" placeholder="Your Phone *" required="required" data-validation-required-message="Please enter your phone number." />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<textarea class="form-control" id="message" placeholder="Your Message *" required="required" data-validation-required-message="Please enter a message."></textarea>
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="col-lg-12 text-center">
|
||||
<div id="success"></div>
|
||||
<button class="btn btn-primary btn-xl text-uppercase" id="sendMessageButton" type="submit">Send Message</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Footer-->
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-4"><span class="copyright">Copyright © Your Website 2019</span></div>
|
||||
<div class="col-md-4">
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-twitter"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-facebook-f"></i></a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#"><i class="fab fa-linkedin-in"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<ul class="list-inline quicklinks">
|
||||
<li class="list-inline-item"><a href="#">Privacy Policy</a></li>
|
||||
<li class="list-inline-item"><a href="#">Terms of Use</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<!-- Portfolio Modals--><!-- Modal 1-->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr"><div class="rl"></div></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here-->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/01-full.jpg" alt="" />
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Threads</li>
|
||||
<li>Category: Illustration</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal 2-->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal2" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr"><div class="rl"></div></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here-->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/02-full.jpg" alt="" />
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Explore</li>
|
||||
<li>Category: Graphic Design</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal 3-->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr"><div class="rl"></div></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here-->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/03-full.jpg" alt="" />
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Finish</li>
|
||||
<li>Category: Identity</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal 4-->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal4" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr"><div class="rl"></div></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here-->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/04-full.jpg" alt="" />
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Lines</li>
|
||||
<li>Category: Branding</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal 5-->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr"><div class="rl"></div></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here-->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/05-full.jpg" alt="" />
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Southwest</li>
|
||||
<li>Category: Website Design</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal 6-->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal6" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr"><div class="rl"></div></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here-->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="assets/img/portfolio/06-full.jpg" alt="" />
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Window</li>
|
||||
<li>Category: Photography</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button"><i class="fas fa-times"></i>Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Bootstrap core JS-->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.bundle.min.js"></script>
|
||||
<!-- Third party plugin JS-->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script>
|
||||
<!-- Contact form JS-->
|
||||
<script src="assets/mail/jqBootstrapValidation.js"></script>
|
||||
<script src="assets/mail/contact_me.js"></script>
|
||||
<!-- Core theme JS-->
|
||||
<script src="js/scripts.js"></script>
|
||||
</body>
|
||||
</html>
|
47
dist/js/scripts.js
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
/*!
|
||||
* Start Bootstrap - Agency v6.0.0 (https://startbootstrap.com/template-overviews/agency)
|
||||
* Copyright 2013-2020 Start Bootstrap
|
||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-agency/blob/master/LICENSE)
|
||||
*/
|
||||
(function($) {
|
||||
"use strict"; // Start of use strict
|
||||
|
||||
// Smooth scrolling using jQuery easing
|
||||
$('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() {
|
||||
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
|
||||
var target = $(this.hash);
|
||||
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
|
||||
if (target.length) {
|
||||
$('html, body').animate({
|
||||
scrollTop: (target.offset().top - 54)
|
||||
}, 1000, "easeInOutExpo");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Closes responsive menu when a scroll trigger link is clicked
|
||||
$('.js-scroll-trigger').click(function() {
|
||||
$('.navbar-collapse').collapse('hide');
|
||||
});
|
||||
|
||||
// Activate scrollspy to add active class to navbar items on scroll
|
||||
$('body').scrollspy({
|
||||
target: '#mainNav',
|
||||
offset: 56
|
||||
});
|
||||
|
||||
// Collapse Navbar
|
||||
var navbarCollapse = function() {
|
||||
if ($("#mainNav").offset().top > 100) {
|
||||
$("#mainNav").addClass("navbar-shrink");
|
||||
} else {
|
||||
$("#mainNav").removeClass("navbar-shrink");
|
||||
}
|
||||
};
|
||||
// Collapse now if page is not at top
|
||||
navbarCollapse();
|
||||
// Collapse the navbar when page is scrolled
|
||||
$(window).scroll(navbarCollapse);
|
||||
|
||||
})(jQuery); // End of use strict
|
137
gulpfile.js
@ -1,137 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
// Load plugins
|
||||
const autoprefixer = require("gulp-autoprefixer");
|
||||
const browsersync = require("browser-sync").create();
|
||||
const cleanCSS = require("gulp-clean-css");
|
||||
const del = require("del");
|
||||
const gulp = require("gulp");
|
||||
const header = require("gulp-header");
|
||||
const merge = require("merge-stream");
|
||||
const plumber = require("gulp-plumber");
|
||||
const rename = require("gulp-rename");
|
||||
const sass = require("gulp-sass");
|
||||
const uglify = require("gulp-uglify");
|
||||
|
||||
// Load package.json for banner
|
||||
const pkg = require('./package.json');
|
||||
|
||||
// Set the banner content
|
||||
const banner = ['/*!\n',
|
||||
' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n',
|
||||
' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n',
|
||||
' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n',
|
||||
' */\n',
|
||||
'\n'
|
||||
].join('');
|
||||
|
||||
// BrowserSync
|
||||
function browserSync(done) {
|
||||
browsersync.init({
|
||||
server: {
|
||||
baseDir: "./"
|
||||
},
|
||||
port: 3000
|
||||
});
|
||||
done();
|
||||
}
|
||||
|
||||
// BrowserSync reload
|
||||
function browserSyncReload(done) {
|
||||
browsersync.reload();
|
||||
done();
|
||||
}
|
||||
|
||||
// Clean vendor
|
||||
function clean() {
|
||||
return del(["./vendor/"]);
|
||||
}
|
||||
|
||||
// Bring third party dependencies from node_modules into vendor directory
|
||||
function modules() {
|
||||
// Bootstrap
|
||||
var bootstrap = gulp.src('./node_modules/bootstrap/dist/**/*')
|
||||
.pipe(gulp.dest('./vendor/bootstrap'));
|
||||
// Font Awesome CSS
|
||||
var fontAwesomeCSS = gulp.src('./node_modules/@fortawesome/fontawesome-free/css/**/*')
|
||||
.pipe(gulp.dest('./vendor/fontawesome-free/css'));
|
||||
// Font Awesome Webfonts
|
||||
var fontAwesomeWebfonts = gulp.src('./node_modules/@fortawesome/fontawesome-free/webfonts/**/*')
|
||||
.pipe(gulp.dest('./vendor/fontawesome-free/webfonts'));
|
||||
// jQuery Easing
|
||||
var jqueryEasing = gulp.src('./node_modules/jquery.easing/*.js')
|
||||
.pipe(gulp.dest('./vendor/jquery-easing'));
|
||||
// jQuery
|
||||
var jquery = gulp.src([
|
||||
'./node_modules/jquery/dist/*',
|
||||
'!./node_modules/jquery/dist/core.js'
|
||||
])
|
||||
.pipe(gulp.dest('./vendor/jquery'));
|
||||
return merge(bootstrap, fontAwesomeCSS, fontAwesomeWebfonts, jquery, jqueryEasing);
|
||||
}
|
||||
|
||||
// CSS task
|
||||
function css() {
|
||||
return gulp
|
||||
.src("./scss/**/*.scss")
|
||||
.pipe(plumber())
|
||||
.pipe(sass({
|
||||
outputStyle: "expanded",
|
||||
includePaths: "./node_modules",
|
||||
}))
|
||||
.on("error", sass.logError)
|
||||
.pipe(autoprefixer({
|
||||
cascade: false
|
||||
}))
|
||||
.pipe(header(banner, {
|
||||
pkg: pkg
|
||||
}))
|
||||
.pipe(gulp.dest("./css"))
|
||||
.pipe(rename({
|
||||
suffix: ".min"
|
||||
}))
|
||||
.pipe(cleanCSS())
|
||||
.pipe(gulp.dest("./css"))
|
||||
.pipe(browsersync.stream());
|
||||
}
|
||||
|
||||
// JS task
|
||||
function js() {
|
||||
return gulp
|
||||
.src([
|
||||
'./js/*.js',
|
||||
'!./js/*.min.js',
|
||||
'!./js/contact_me.js',
|
||||
'!./js/jqBootstrapValidation.js'
|
||||
])
|
||||
.pipe(uglify())
|
||||
.pipe(header(banner, {
|
||||
pkg: pkg
|
||||
}))
|
||||
.pipe(rename({
|
||||
suffix: '.min'
|
||||
}))
|
||||
.pipe(gulp.dest('./js'))
|
||||
.pipe(browsersync.stream());
|
||||
}
|
||||
|
||||
// Watch files
|
||||
function watchFiles() {
|
||||
gulp.watch("./scss/**/*", css);
|
||||
gulp.watch(["./js/**/*", "!./js/**/*.min.js"], js);
|
||||
gulp.watch("./**/*.html", browserSyncReload);
|
||||
}
|
||||
|
||||
// Define complex tasks
|
||||
const vendor = gulp.series(clean, modules);
|
||||
const build = gulp.series(vendor, gulp.parallel(css, js));
|
||||
const watch = gulp.series(build, gulp.parallel(watchFiles, browserSync));
|
||||
|
||||
// Export tasks
|
||||
exports.css = css;
|
||||
exports.js = js;
|
||||
exports.clean = clean;
|
||||
exports.vendor = vendor;
|
||||
exports.build = build;
|
||||
exports.watch = watch;
|
||||
exports.default = build;
|
714
index.html
@ -1,714 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Agency - Start Bootstrap Theme</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom fonts for this template -->
|
||||
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
|
||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
|
||||
<link href='https://fonts.googleapis.com/css?family=Kaushan+Script' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700' rel='stylesheet' type='text/css'>
|
||||
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="css/agency.min.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body id="page-top">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top" id="mainNav">
|
||||
<div class="container">
|
||||
<a class="navbar-brand js-scroll-trigger" href="#page-top">Start Bootstrap</a>
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
|
||||
Menu
|
||||
<i class="fas fa-bars"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav text-uppercase ml-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link js-scroll-trigger" href="#services">Services</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link js-scroll-trigger" href="#portfolio">Portfolio</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link js-scroll-trigger" href="#about">About</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link js-scroll-trigger" href="#team">Team</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link js-scroll-trigger" href="#contact">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Header -->
|
||||
<header class="masthead">
|
||||
<div class="container">
|
||||
<div class="intro-text">
|
||||
<div class="intro-lead-in">Welcome To Our Studio!</div>
|
||||
<div class="intro-heading text-uppercase">It's Nice To Meet You</div>
|
||||
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="#services">Tell Me More</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Services -->
|
||||
<section class="page-section" id="services">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Services</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col-md-4">
|
||||
<span class="fa-stack fa-4x">
|
||||
<i class="fas fa-circle fa-stack-2x text-primary"></i>
|
||||
<i class="fas fa-shopping-cart fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
<h4 class="service-heading">E-Commerce</h4>
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<span class="fa-stack fa-4x">
|
||||
<i class="fas fa-circle fa-stack-2x text-primary"></i>
|
||||
<i class="fas fa-laptop fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
<h4 class="service-heading">Responsive Design</h4>
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<span class="fa-stack fa-4x">
|
||||
<i class="fas fa-circle fa-stack-2x text-primary"></i>
|
||||
<i class="fas fa-lock fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
<h4 class="service-heading">Web Security</h4>
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Portfolio Grid -->
|
||||
<section class="bg-light page-section" id="portfolio">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Portfolio</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal1">
|
||||
<div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content">
|
||||
<i class="fas fa-plus fa-3x"></i>
|
||||
</div>
|
||||
</div>
|
||||
<img class="img-fluid" src="img/portfolio/01-thumbnail.jpg" alt="">
|
||||
</a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Threads</h4>
|
||||
<p class="text-muted">Illustration</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal2">
|
||||
<div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content">
|
||||
<i class="fas fa-plus fa-3x"></i>
|
||||
</div>
|
||||
</div>
|
||||
<img class="img-fluid" src="img/portfolio/02-thumbnail.jpg" alt="">
|
||||
</a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Explore</h4>
|
||||
<p class="text-muted">Graphic Design</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal3">
|
||||
<div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content">
|
||||
<i class="fas fa-plus fa-3x"></i>
|
||||
</div>
|
||||
</div>
|
||||
<img class="img-fluid" src="img/portfolio/03-thumbnail.jpg" alt="">
|
||||
</a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Finish</h4>
|
||||
<p class="text-muted">Identity</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal4">
|
||||
<div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content">
|
||||
<i class="fas fa-plus fa-3x"></i>
|
||||
</div>
|
||||
</div>
|
||||
<img class="img-fluid" src="img/portfolio/04-thumbnail.jpg" alt="">
|
||||
</a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Lines</h4>
|
||||
<p class="text-muted">Branding</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal5">
|
||||
<div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content">
|
||||
<i class="fas fa-plus fa-3x"></i>
|
||||
</div>
|
||||
</div>
|
||||
<img class="img-fluid" src="img/portfolio/05-thumbnail.jpg" alt="">
|
||||
</a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Southwest</h4>
|
||||
<p class="text-muted">Website Design</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 portfolio-item">
|
||||
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal6">
|
||||
<div class="portfolio-hover">
|
||||
<div class="portfolio-hover-content">
|
||||
<i class="fas fa-plus fa-3x"></i>
|
||||
</div>
|
||||
</div>
|
||||
<img class="img-fluid" src="img/portfolio/06-thumbnail.jpg" alt="">
|
||||
</a>
|
||||
<div class="portfolio-caption">
|
||||
<h4>Window</h4>
|
||||
<p class="text-muted">Photography</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- About -->
|
||||
<section class="page-section" id="about">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">About</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<ul class="timeline">
|
||||
<li>
|
||||
<div class="timeline-image">
|
||||
<img class="rounded-circle img-fluid" src="img/about/1.jpg" alt="">
|
||||
</div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>2009-2011</h4>
|
||||
<h4 class="subheading">Our Humble Beginnings</h4>
|
||||
</div>
|
||||
<div class="timeline-body">
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="timeline-inverted">
|
||||
<div class="timeline-image">
|
||||
<img class="rounded-circle img-fluid" src="img/about/2.jpg" alt="">
|
||||
</div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>March 2011</h4>
|
||||
<h4 class="subheading">An Agency is Born</h4>
|
||||
</div>
|
||||
<div class="timeline-body">
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="timeline-image">
|
||||
<img class="rounded-circle img-fluid" src="img/about/3.jpg" alt="">
|
||||
</div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>December 2012</h4>
|
||||
<h4 class="subheading">Transition to Full Service</h4>
|
||||
</div>
|
||||
<div class="timeline-body">
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="timeline-inverted">
|
||||
<div class="timeline-image">
|
||||
<img class="rounded-circle img-fluid" src="img/about/4.jpg" alt="">
|
||||
</div>
|
||||
<div class="timeline-panel">
|
||||
<div class="timeline-heading">
|
||||
<h4>July 2014</h4>
|
||||
<h4 class="subheading">Phase Two Expansion</h4>
|
||||
</div>
|
||||
<div class="timeline-body">
|
||||
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="timeline-inverted">
|
||||
<div class="timeline-image">
|
||||
<h4>Be Part
|
||||
<br>Of Our
|
||||
<br>Story!</h4>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Team -->
|
||||
<section class="bg-light page-section" id="team">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Our Amazing Team</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="team-member">
|
||||
<img class="mx-auto rounded-circle" src="img/team/1.jpg" alt="">
|
||||
<h4>Kay Garland</h4>
|
||||
<p class="text-muted">Lead Designer</p>
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-twitter"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-facebook-f"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-linkedin-in"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="team-member">
|
||||
<img class="mx-auto rounded-circle" src="img/team/2.jpg" alt="">
|
||||
<h4>Larry Parker</h4>
|
||||
<p class="text-muted">Lead Marketer</p>
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-twitter"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-facebook-f"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-linkedin-in"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="team-member">
|
||||
<img class="mx-auto rounded-circle" src="img/team/3.jpg" alt="">
|
||||
<h4>Diana Pertersen</h4>
|
||||
<p class="text-muted">Lead Developer</p>
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-twitter"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-facebook-f"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-linkedin-in"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto text-center">
|
||||
<p class="large text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut eaque, laboriosam veritatis, quos non quis ad perspiciatis, totam corporis ea, alias ut unde.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Clients -->
|
||||
<section class="py-5">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#">
|
||||
<img class="img-fluid d-block mx-auto" src="img/logos/envato.jpg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#">
|
||||
<img class="img-fluid d-block mx-auto" src="img/logos/designmodo.jpg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#">
|
||||
<img class="img-fluid d-block mx-auto" src="img/logos/themeforest.jpg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<a href="#">
|
||||
<img class="img-fluid d-block mx-auto" src="img/logos/creative-market.jpg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Contact -->
|
||||
<section class="page-section" id="contact">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h2 class="section-heading text-uppercase">Contact Us</h2>
|
||||
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<form id="contactForm" name="sentMessage" novalidate="novalidate">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="name" type="text" placeholder="Your Name *" required="required" data-validation-required-message="Please enter your name.">
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="email" type="email" placeholder="Your Email *" required="required" data-validation-required-message="Please enter your email address.">
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input class="form-control" id="phone" type="tel" placeholder="Your Phone *" required="required" data-validation-required-message="Please enter your phone number.">
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<textarea class="form-control" id="message" placeholder="Your Message *" required="required" data-validation-required-message="Please enter a message."></textarea>
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="col-lg-12 text-center">
|
||||
<div id="success"></div>
|
||||
<button id="sendMessageButton" class="btn btn-primary btn-xl text-uppercase" type="submit">Send Message</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-4">
|
||||
<span class="copyright">Copyright © Your Website 2019</span>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<ul class="list-inline social-buttons">
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-twitter"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-facebook-f"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">
|
||||
<i class="fab fa-linkedin-in"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<ul class="list-inline quicklinks">
|
||||
<li class="list-inline-item">
|
||||
<a href="#">Privacy Policy</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a href="#">Terms of Use</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Portfolio Modals -->
|
||||
|
||||
<!-- Modal 1 -->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr">
|
||||
<div class="rl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here -->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/01-full.jpg" alt="">
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Threads</li>
|
||||
<li>Category: Illustration</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button">
|
||||
<i class="fas fa-times"></i>
|
||||
Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal 2 -->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal2" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr">
|
||||
<div class="rl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here -->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/02-full.jpg" alt="">
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Explore</li>
|
||||
<li>Category: Graphic Design</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button">
|
||||
<i class="fas fa-times"></i>
|
||||
Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal 3 -->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr">
|
||||
<div class="rl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here -->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/03-full.jpg" alt="">
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Finish</li>
|
||||
<li>Category: Identity</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button">
|
||||
<i class="fas fa-times"></i>
|
||||
Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal 4 -->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal4" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr">
|
||||
<div class="rl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here -->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/04-full.jpg" alt="">
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Lines</li>
|
||||
<li>Category: Branding</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button">
|
||||
<i class="fas fa-times"></i>
|
||||
Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal 5 -->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr">
|
||||
<div class="rl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here -->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/05-full.jpg" alt="">
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Southwest</li>
|
||||
<li>Category: Website Design</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button">
|
||||
<i class="fas fa-times"></i>
|
||||
Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal 6 -->
|
||||
<div class="portfolio-modal modal fade" id="portfolioModal6" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="close-modal" data-dismiss="modal">
|
||||
<div class="lr">
|
||||
<div class="rl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="modal-body">
|
||||
<!-- Project Details Go Here -->
|
||||
<h2 class="text-uppercase">Project Name</h2>
|
||||
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
|
||||
<img class="img-fluid d-block mx-auto" src="img/portfolio/06-full.jpg" alt="">
|
||||
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!</p>
|
||||
<ul class="list-inline">
|
||||
<li>Date: January 2017</li>
|
||||
<li>Client: Window</li>
|
||||
<li>Category: Photography</li>
|
||||
</ul>
|
||||
<button class="btn btn-primary" data-dismiss="modal" type="button">
|
||||
<i class="fas fa-times"></i>
|
||||
Close Project</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bootstrap core JavaScript -->
|
||||
<script src="vendor/jquery/jquery.min.js"></script>
|
||||
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<!-- Plugin JavaScript -->
|
||||
<script src="vendor/jquery-easing/jquery.easing.min.js"></script>
|
||||
|
||||
<!-- Contact form JavaScript -->
|
||||
<script src="js/jqBootstrapValidation.js"></script>
|
||||
<script src="js/contact_me.js"></script>
|
||||
|
||||
<!-- Custom scripts for this template -->
|
||||
<script src="js/agency.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
7
js/agency.min.js
vendored
@ -1,7 +0,0 @@
|
||||
/*!
|
||||
* Start Bootstrap - Agency v5.2.2 (https://startbootstrap.com/template-overviews/agency)
|
||||
* Copyright 2013-2019 Start Bootstrap
|
||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-agency/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
!function(e){"use strict";e('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function(){if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var a=e(this.hash);if((a=a.length?a:e("[name="+this.hash.slice(1)+"]")).length)return e("html, body").animate({scrollTop:a.offset().top-54},1e3,"easeInOutExpo"),!1}}),e(".js-scroll-trigger").click(function(){e(".navbar-collapse").collapse("hide")}),e("body").scrollspy({target:"#mainNav",offset:56});function a(){100<e("#mainNav").offset().top?e("#mainNav").addClass("navbar-shrink"):e("#mainNav").removeClass("navbar-shrink")}a(),e(window).scroll(a)}(jQuery);
|
3686
package-lock.json
generated
34
package.json
@ -1,9 +1,16 @@
|
||||
{
|
||||
"title": "Agency",
|
||||
"name": "startbootstrap-agency",
|
||||
"version": "5.2.2",
|
||||
"version": "6.0.0",
|
||||
"scripts": {
|
||||
"start": "node_modules/.bin/gulp watch"
|
||||
"build": "npm run clean && npm run build:pug && npm run build:scss && npm run build:scripts && npm run build:assets",
|
||||
"build:assets": "node scripts/build-assets.js",
|
||||
"build:pug": "node scripts/build-pug.js",
|
||||
"build:scripts": "node scripts/build-scripts.js",
|
||||
"build:scss": "node scripts/build-scss.js",
|
||||
"clean": "node scripts/clean.js",
|
||||
"start": "npm run build && node scripts/start.js",
|
||||
"start:debug": "npm run build && node scripts/start-debug.js"
|
||||
},
|
||||
"description": "Agency is a one page HTML theme for Bootstrap.",
|
||||
"keywords": [
|
||||
@ -29,22 +36,17 @@
|
||||
"url": "https://github.com/BlackrockDigital/startbootstrap-agency.git"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "5.10.2",
|
||||
"bootstrap": "4.3.1",
|
||||
"jquery": "3.4.1",
|
||||
"jquery.easing": "^1.4.1"
|
||||
"bootstrap": "4.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "9.7.6",
|
||||
"browser-sync": "2.26.7",
|
||||
"del": "5.1.0",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-autoprefixer": "7.0.0",
|
||||
"gulp-clean-css": "4.2.0",
|
||||
"gulp-header": "2.0.9",
|
||||
"gulp-plumber": "^1.2.1",
|
||||
"gulp-rename": "1.4.0",
|
||||
"gulp-sass": "4.0.2",
|
||||
"gulp-uglify": "3.0.2",
|
||||
"merge-stream": "2.0.0"
|
||||
"chokidar": "3.3.1",
|
||||
"concurrently": "5.1.0",
|
||||
"postcss": "7.0.27",
|
||||
"prettier": "2.0.4",
|
||||
"pug": "2.0.4",
|
||||
"sass": "1.26.3",
|
||||
"shelljs": "0.8.3"
|
||||
}
|
||||
}
|
||||
|
5
scripts/build-assets.js
Normal file
@ -0,0 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
const renderAssets = require('./render-assets');
|
||||
|
||||
renderAssets();
|
19
scripts/build-pug.js
Normal file
@ -0,0 +1,19 @@
|
||||
'use strict';
|
||||
const path = require('path');
|
||||
const sh = require('shelljs');
|
||||
const renderPug = require('./render-pug');
|
||||
|
||||
const srcPath = path.resolve(path.dirname(__filename), '../src');
|
||||
|
||||
sh.find(srcPath).forEach(_processFile);
|
||||
|
||||
function _processFile(filePath) {
|
||||
if (
|
||||
filePath.match(/\.pug$/)
|
||||
&& !filePath.match(/include/)
|
||||
&& !filePath.match(/mixin/)
|
||||
&& !filePath.match(/\/pug\/layouts\//)
|
||||
) {
|
||||
renderPug(filePath);
|
||||
}
|
||||
}
|
5
scripts/build-scripts.js
Normal file
@ -0,0 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
const renderScripts = require('./render-scripts');
|
||||
|
||||
renderScripts();
|
5
scripts/build-scss.js
Normal file
@ -0,0 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
const renderSCSS = require('./render-scss');
|
||||
|
||||
renderSCSS();
|
7
scripts/clean.js
Normal file
@ -0,0 +1,7 @@
|
||||
const sh = require('shelljs');
|
||||
const path = require('path');
|
||||
|
||||
const destPath = path.resolve(path.dirname(__filename), '../dist');
|
||||
|
||||
sh.rm('-rf', `${destPath}/*`)
|
||||
|
11
scripts/render-assets.js
Normal file
@ -0,0 +1,11 @@
|
||||
'use strict';
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const sh = require('shelljs');
|
||||
|
||||
module.exports = function renderAssets() {
|
||||
const sourcePath = path.resolve(path.dirname(__filename), '../src/assets');
|
||||
const destPath = path.resolve(path.dirname(__filename), '../dist/.');
|
||||
|
||||
sh.cp('-R', sourcePath, destPath)
|
||||
};
|
34
scripts/render-pug.js
Normal file
@ -0,0 +1,34 @@
|
||||
'use strict';
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const pug = require('pug');
|
||||
const sh = require('shelljs');
|
||||
const prettier = require('prettier');
|
||||
|
||||
module.exports = function renderPug(filePath) {
|
||||
const destPath = filePath.replace(/src\/pug\//, 'dist/').replace(/\.pug$/, '.html');
|
||||
const srcPath = path.resolve(path.dirname(__filename), '../src');
|
||||
|
||||
console.log(`### INFO: Rendering ${filePath} to ${destPath}`);
|
||||
const html = pug.renderFile(filePath, {
|
||||
doctype: 'html',
|
||||
filename: filePath,
|
||||
basedir: srcPath
|
||||
});
|
||||
|
||||
const destPathDirname = path.dirname(destPath);
|
||||
if (!sh.test('-e', destPathDirname)) {
|
||||
sh.mkdir('-p', destPathDirname);
|
||||
}
|
||||
|
||||
const prettified = prettier.format(html, {
|
||||
printWidth: 1000,
|
||||
tabWidth: 4,
|
||||
singleQuote: true,
|
||||
proseWrap: 'preserve',
|
||||
endOfLine: 'lf',
|
||||
parser: 'html'
|
||||
});
|
||||
|
||||
fs.writeFileSync(destPath, prettified);
|
||||
};
|
25
scripts/render-scripts.js
Normal file
@ -0,0 +1,25 @@
|
||||
'use strict';
|
||||
const fs = require('fs');
|
||||
const packageJSON = require('../package.json');
|
||||
const path = require('path');
|
||||
const sh = require('shelljs');
|
||||
|
||||
module.exports = function renderScripts() {
|
||||
const sourcePath = path.resolve(path.dirname(__filename), '../src/js/scripts.js');
|
||||
const destPath = path.resolve(path.dirname(__filename), '../dist/js/scripts.js');
|
||||
|
||||
const copyright = `/*!
|
||||
* Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage})
|
||||
* Copyright 2013-${new Date().getFullYear()} ${packageJSON.author}
|
||||
* Licensed under ${packageJSON.license} (https://github.com/BlackrockDigital/${packageJSON.name}/blob/master/LICENSE)
|
||||
*/
|
||||
`
|
||||
const scriptsJS = fs.readFileSync(sourcePath);
|
||||
const destPathDirname = path.dirname(destPath);
|
||||
|
||||
if (!sh.test('-e', destPathDirname)) {
|
||||
sh.mkdir('-p', destPathDirname);
|
||||
}
|
||||
|
||||
fs.writeFileSync(destPath, copyright + scriptsJS);
|
||||
};
|
42
scripts/render-scss.js
Normal file
@ -0,0 +1,42 @@
|
||||
'use strict';
|
||||
const autoprefixer = require('autoprefixer')
|
||||
const fs = require('fs');
|
||||
const packageJSON = require('../package.json');
|
||||
const path = require('path');
|
||||
const postcss = require('postcss')
|
||||
const sass = require('sass');
|
||||
const sh = require('shelljs');
|
||||
|
||||
const stylesPath = '../src/scss/styles.scss';
|
||||
const destPath = path.resolve(path.dirname(__filename), '../dist/css/styles.css');
|
||||
|
||||
module.exports = function renderSCSS() {
|
||||
|
||||
const results = sass.renderSync({
|
||||
data: entryPoint,
|
||||
includePaths: [
|
||||
path.resolve(path.dirname(__filename), '../node_modules')
|
||||
],
|
||||
});
|
||||
|
||||
const destPathDirname = path.dirname(destPath);
|
||||
if (!sh.test('-e', destPathDirname)) {
|
||||
sh.mkdir('-p', destPathDirname);
|
||||
}
|
||||
|
||||
postcss([ autoprefixer ]).process(results.css, {from: 'styles.css', to: 'styles.css'}).then(result => {
|
||||
result.warnings().forEach(warn => {
|
||||
console.warn(warn.toString())
|
||||
})
|
||||
fs.writeFileSync(destPath, result.css.toString());
|
||||
})
|
||||
|
||||
};
|
||||
|
||||
const entryPoint = `/*!
|
||||
* Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage})
|
||||
* Copyright 2013-${new Date().getFullYear()} ${packageJSON.author}
|
||||
* Licensed under ${packageJSON.license} (https://github.com/BlackrockDigital/${packageJSON.name}/blob/master/LICENSE)
|
||||
*/
|
||||
@import "${stylesPath}"
|
||||
`
|
86
scripts/sb-watch.js
Normal file
@ -0,0 +1,86 @@
|
||||
'use strict';
|
||||
|
||||
const _ = require('lodash');
|
||||
const chokidar = require('chokidar');
|
||||
const path = require('path');
|
||||
const renderAssets = require('./render-assets');
|
||||
const renderPug = require('./render-pug');
|
||||
const renderScripts = require('./render-scripts');
|
||||
const renderSCSS = require('./render-scss');
|
||||
|
||||
const watcher = chokidar.watch('src', {
|
||||
persistent: true,
|
||||
});
|
||||
|
||||
let READY = false;
|
||||
|
||||
process.title = 'pug-watch';
|
||||
process.stdout.write('Loading');
|
||||
let allPugFiles = {};
|
||||
|
||||
watcher.on('add', filePath => _processFile(filePath, 'add'));
|
||||
watcher.on('change', filePath => _processFile(filePath, 'change'));
|
||||
watcher.on('ready', () => {
|
||||
READY = true;
|
||||
console.log(' READY TO ROLL!');
|
||||
});
|
||||
|
||||
_handleSCSS();
|
||||
|
||||
function _processFile(filePath, watchEvent) {
|
||||
|
||||
if (!READY) {
|
||||
if (filePath.match(/\.pug$/)) {
|
||||
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) {
|
||||
allPugFiles[filePath] = true;
|
||||
}
|
||||
}
|
||||
process.stdout.write('.');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`### INFO: File event: ${watchEvent}: ${filePath}`);
|
||||
|
||||
if (filePath.match(/\.pug$/)) {
|
||||
return _handlePug(filePath, watchEvent);
|
||||
}
|
||||
|
||||
if (filePath.match(/\.scss$/)) {
|
||||
if (watchEvent === 'change') {
|
||||
return _handleSCSS(filePath, watchEvent);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (filePath.match(/src\/js\//)) {
|
||||
return renderScripts();
|
||||
}
|
||||
|
||||
if (filePath.match(/src\/assets\//)) {
|
||||
return renderAssets();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function _handlePug(filePath, watchEvent) {
|
||||
if (watchEvent === 'change') {
|
||||
if (filePath.match(/includes/) || filePath.match(/mixins/) || filePath.match(/\/pug\/layouts\//)) {
|
||||
return _renderAllPug();
|
||||
}
|
||||
return renderPug(filePath);
|
||||
}
|
||||
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) {
|
||||
return renderPug(filePath);
|
||||
}
|
||||
}
|
||||
|
||||
function _renderAllPug() {
|
||||
console.log('### INFO: Rendering All');
|
||||
_.each(allPugFiles, (value, filePath) => {
|
||||
renderPug(filePath);
|
||||
});
|
||||
}
|
||||
|
||||
function _handleSCSS() {
|
||||
renderSCSS();
|
||||
}
|
24
scripts/start-debug.js
Normal file
@ -0,0 +1,24 @@
|
||||
const concurrently = require('concurrently');
|
||||
const path = require('path');
|
||||
|
||||
const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync');
|
||||
|
||||
concurrently([
|
||||
{ command: 'node --inspect scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' },
|
||||
{
|
||||
command: `${browserSyncPath} dist -w --no-online`,
|
||||
name: 'SB_BROWSER_SYNC',
|
||||
prefixColor: 'bgBlue.bold',
|
||||
}
|
||||
], {
|
||||
prefix: 'name',
|
||||
killOthers: ['failure', 'success'],
|
||||
}).then(success, failure);
|
||||
|
||||
function success() {
|
||||
console.log('Success');
|
||||
}
|
||||
|
||||
function failure() {
|
||||
console.log('Failure');
|
||||
}
|
24
scripts/start.js
Normal file
@ -0,0 +1,24 @@
|
||||
const concurrently = require('concurrently');
|
||||
const path = require('path');
|
||||
|
||||
const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync');
|
||||
|
||||
concurrently([
|
||||
{ command: 'node scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' },
|
||||
{
|
||||
command: `"${browserSyncPath}" --reload-delay 2000 --reload-debounce 2000 dist -w --no-online`,
|
||||
name: 'SB_BROWSER_SYNC',
|
||||
prefixColor: 'bgGreen.bold',
|
||||
}
|
||||
], {
|
||||
prefix: 'name',
|
||||
killOthers: ['failure', 'success'],
|
||||
}).then(success, failure);
|
||||
|
||||
function success() {
|
||||
console.log('Success');
|
||||
}
|
||||
|
||||
function failure() {
|
||||
console.log('Failure');
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
// Button Styles
|
||||
.btn {
|
||||
@include heading-font;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.btn-xl {
|
||||
font-size: 18px;
|
||||
padding: 20px 40px;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: $primary;
|
||||
border-color: $primary;
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
background-color: darken($primary, 7.5%) !important;
|
||||
border-color: darken($primary, 7.5%) !important;
|
||||
color: white;
|
||||
}
|
||||
&:active,
|
||||
&:focus {
|
||||
box-shadow: 0 0 0 0.2rem rgba(254, 209, 55,.5) !important;
|
||||
}
|
||||
}
|
BIN
src/assets/img/about/1.jpg
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
src/assets/img/about/2.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
src/assets/img/about/3.jpg
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
src/assets/img/about/4.jpg
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
src/assets/img/header-bg.jpg
Normal file
After Width: | Height: | Size: 233 KiB |
BIN
src/assets/img/logos/creative-market.jpg
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/img/logos/designmodo.jpg
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/img/logos/envato.jpg
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
src/assets/img/logos/themeforest.jpg
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/assets/img/map-image.png
Normal file
After Width: | Height: | Size: 356 KiB |
BIN
src/assets/img/portfolio/01-full.jpg
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
src/assets/img/portfolio/01-thumbnail.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/img/portfolio/02-full.jpg
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
src/assets/img/portfolio/02-thumbnail.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/img/portfolio/03-full.jpg
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
src/assets/img/portfolio/03-thumbnail.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/img/portfolio/04-full.jpg
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
src/assets/img/portfolio/04-thumbnail.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/img/portfolio/05-full.jpg
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
src/assets/img/portfolio/05-thumbnail.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
src/assets/img/portfolio/06-full.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
src/assets/img/portfolio/06-thumbnail.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
src/assets/img/team/1.jpg
Normal file
After Width: | Height: | Size: 209 KiB |
BIN
src/assets/img/team/2.jpg
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
src/assets/img/team/3.jpg
Normal file
After Width: | Height: | Size: 221 KiB |
75
src/assets/mail/contact_me.js
Normal file
@ -0,0 +1,75 @@
|
||||
$(function() {
|
||||
|
||||
$("#contactForm input,#contactForm textarea").jqBootstrapValidation({
|
||||
preventSubmit: true,
|
||||
submitError: function($form, event, errors) {
|
||||
// additional error messages or events
|
||||
},
|
||||
submitSuccess: function($form, event) {
|
||||
event.preventDefault(); // prevent default submit behaviour
|
||||
// get values from FORM
|
||||
var name = $("input#name").val();
|
||||
var email = $("input#email").val();
|
||||
var phone = $("input#phone").val();
|
||||
var message = $("textarea#message").val();
|
||||
var firstName = name; // For Success/Failure Message
|
||||
// Check for white space in name for Success/Fail message
|
||||
if (firstName.indexOf(' ') >= 0) {
|
||||
firstName = name.split(' ').slice(0, -1).join(' ');
|
||||
}
|
||||
$this = $("#sendMessageButton");
|
||||
$this.prop("disabled", true); // Disable submit button until AJAX call is complete to prevent duplicate messages
|
||||
$.ajax({
|
||||
url: "contact_me.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
name: name,
|
||||
phone: phone,
|
||||
email: email,
|
||||
message: message
|
||||
},
|
||||
cache: false,
|
||||
success: function() {
|
||||
// Success message
|
||||
$('#success').html("<div class='alert alert-success'>");
|
||||
$('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
|
||||
.append("</button>");
|
||||
$('#success > .alert-success')
|
||||
.append("<strong>Your message has been sent. </strong>");
|
||||
$('#success > .alert-success')
|
||||
.append('</div>');
|
||||
//clear all fields
|
||||
$('#contactForm').trigger("reset");
|
||||
},
|
||||
error: function() {
|
||||
// Fail message
|
||||
$('#success').html("<div class='alert alert-danger'>");
|
||||
$('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×")
|
||||
.append("</button>");
|
||||
$('#success > .alert-danger').append($("<strong>").text("Sorry " + firstName + ", it seems that my mail server is not responding. Please try again later!"));
|
||||
$('#success > .alert-danger').append('</div>');
|
||||
//clear all fields
|
||||
$('#contactForm').trigger("reset");
|
||||
},
|
||||
complete: function() {
|
||||
setTimeout(function() {
|
||||
$this.prop("disabled", false); // Re-enable submit button when AJAX call is complete
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
},
|
||||
filter: function() {
|
||||
return $(this).is(":visible");
|
||||
},
|
||||
});
|
||||
|
||||
$("a[data-toggle=\"tab\"]").click(function(e) {
|
||||
e.preventDefault();
|
||||
$(this).tab("show");
|
||||
});
|
||||
});
|
||||
|
||||
/*When clicking on Full hide fail/success boxes */
|
||||
$('#name').focus(function() {
|
||||
$('#success').html('');
|
||||
});
|
26
src/assets/mail/contact_me.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
// Check for empty fields
|
||||
if(empty($_POST['name']) ||
|
||||
empty($_POST['email']) ||
|
||||
empty($_POST['phone']) ||
|
||||
empty($_POST['message']) ||
|
||||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
|
||||
{
|
||||
echo "No arguments Provided!";
|
||||
return false;
|
||||
}
|
||||
|
||||
$name = strip_tags(htmlspecialchars($_POST['name']));
|
||||
$email_address = strip_tags(htmlspecialchars($_POST['email']));
|
||||
$phone = strip_tags(htmlspecialchars($_POST['phone']));
|
||||
$message = strip_tags(htmlspecialchars($_POST['message']));
|
||||
|
||||
// Create the email and send the message
|
||||
$to = 'yourname@yourdomain.com'; // Add your email address in between the '' replacing yourname@yourdomain.com - This is where the form will send a message to.
|
||||
$email_subject = "Website Contact Form: $name";
|
||||
$email_body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
|
||||
$headers = "From: noreply@yourdomain.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
|
||||
$headers .= "Reply-To: $email_address";
|
||||
mail($to,$email_subject,$email_body,$headers);
|
||||
return true;
|
||||
?>
|
937
src/assets/mail/jqBootstrapValidation.js
Normal file
@ -0,0 +1,937 @@
|
||||
/* jqBootstrapValidation
|
||||
* A plugin for automating validation on Twitter Bootstrap formatted forms.
|
||||
*
|
||||
* v1.3.6
|
||||
*
|
||||
* License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file
|
||||
*
|
||||
* http://ReactiveRaven.github.com/jqBootstrapValidation/
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
|
||||
var createdElements = [];
|
||||
|
||||
var defaults = {
|
||||
options: {
|
||||
prependExistingHelpBlock: false,
|
||||
sniffHtml: true, // sniff for 'required', 'maxlength', etc
|
||||
preventSubmit: true, // stop the form submit event from firing if validation fails
|
||||
submitError: false, // function called if there is an error when trying to submit
|
||||
submitSuccess: false, // function called just before a successful submit event is sent to the server
|
||||
semanticallyStrict: false, // set to true to tidy up generated HTML output
|
||||
autoAdd: {
|
||||
helpBlocks: true
|
||||
},
|
||||
filter: function() {
|
||||
// return $(this).is(":visible"); // only validate elements you can see
|
||||
return true; // validate everything
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init: function(options) {
|
||||
|
||||
var settings = $.extend(true, {}, defaults);
|
||||
|
||||
settings.options = $.extend(true, settings.options, options);
|
||||
|
||||
var $siblingElements = this;
|
||||
|
||||
var uniqueForms = $.unique(
|
||||
$siblingElements.map(function() {
|
||||
return $(this).parents("form")[0];
|
||||
}).toArray()
|
||||
);
|
||||
|
||||
$(uniqueForms).bind("submit", function(e) {
|
||||
var $form = $(this);
|
||||
var warningsFound = 0;
|
||||
var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter);
|
||||
$inputs.trigger("submit.validation").trigger("validationLostFocus.validation");
|
||||
|
||||
$inputs.each(function(i, el) {
|
||||
var $this = $(el),
|
||||
$controlGroup = $this.parents(".form-group").first();
|
||||
if (
|
||||
$controlGroup.hasClass("warning")
|
||||
) {
|
||||
$controlGroup.removeClass("warning").addClass("error");
|
||||
warningsFound++;
|
||||
}
|
||||
});
|
||||
|
||||
$inputs.trigger("validationLostFocus.validation");
|
||||
|
||||
if (warningsFound) {
|
||||
if (settings.options.preventSubmit) {
|
||||
e.preventDefault();
|
||||
}
|
||||
$form.addClass("error");
|
||||
if ($.isFunction(settings.options.submitError)) {
|
||||
settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true));
|
||||
}
|
||||
} else {
|
||||
$form.removeClass("error");
|
||||
if ($.isFunction(settings.options.submitSuccess)) {
|
||||
settings.options.submitSuccess($form, e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return this.each(function() {
|
||||
|
||||
// Get references to everything we're interested in
|
||||
var $this = $(this),
|
||||
$controlGroup = $this.parents(".form-group").first(),
|
||||
$helpBlock = $controlGroup.find(".help-block").first(),
|
||||
$form = $this.parents("form").first(),
|
||||
validatorNames = [];
|
||||
|
||||
// create message container if not exists
|
||||
if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {
|
||||
$helpBlock = $('<div class="help-block" />');
|
||||
$controlGroup.find('.controls').append($helpBlock);
|
||||
createdElements.push($helpBlock[0]);
|
||||
}
|
||||
|
||||
// =============================================================
|
||||
// SNIFF HTML FOR VALIDATORS
|
||||
// =============================================================
|
||||
|
||||
// *snort sniff snuffle*
|
||||
|
||||
if (settings.options.sniffHtml) {
|
||||
var message = "";
|
||||
// ---------------------------------------------------------
|
||||
// PATTERN
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("pattern") !== undefined) {
|
||||
message = "Not in the expected format<!-- data-validation-pattern-message to override -->";
|
||||
if ($this.data("validationPatternMessage")) {
|
||||
message = $this.data("validationPatternMessage");
|
||||
}
|
||||
$this.data("validationPatternMessage", message);
|
||||
$this.data("validationPatternRegex", $this.attr("pattern"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MAX
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) {
|
||||
var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax"));
|
||||
message = "Too high: Maximum of '" + max + "'<!-- data-validation-max-message to override -->";
|
||||
if ($this.data("validationMaxMessage")) {
|
||||
message = $this.data("validationMaxMessage");
|
||||
}
|
||||
$this.data("validationMaxMessage", message);
|
||||
$this.data("validationMaxMax", max);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MIN
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) {
|
||||
var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin"));
|
||||
message = "Too low: Minimum of '" + min + "'<!-- data-validation-min-message to override -->";
|
||||
if ($this.data("validationMinMessage")) {
|
||||
message = $this.data("validationMinMessage");
|
||||
}
|
||||
$this.data("validationMinMessage", message);
|
||||
$this.data("validationMinMin", min);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MAXLENGTH
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("maxlength") !== undefined) {
|
||||
message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters<!-- data-validation-maxlength-message to override -->";
|
||||
if ($this.data("validationMaxlengthMessage")) {
|
||||
message = $this.data("validationMaxlengthMessage");
|
||||
}
|
||||
$this.data("validationMaxlengthMessage", message);
|
||||
$this.data("validationMaxlengthMaxlength", $this.attr("maxlength"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MINLENGTH
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("minlength") !== undefined) {
|
||||
message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters<!-- data-validation-minlength-message to override -->";
|
||||
if ($this.data("validationMinlengthMessage")) {
|
||||
message = $this.data("validationMinlengthMessage");
|
||||
}
|
||||
$this.data("validationMinlengthMessage", message);
|
||||
$this.data("validationMinlengthMinlength", $this.attr("minlength"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// REQUIRED
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) {
|
||||
message = settings.builtInValidators.required.message;
|
||||
if ($this.data("validationRequiredMessage")) {
|
||||
message = $this.data("validationRequiredMessage");
|
||||
}
|
||||
$this.data("validationRequiredMessage", message);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// NUMBER
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") {
|
||||
message = settings.builtInValidators.number.message;
|
||||
if ($this.data("validationNumberMessage")) {
|
||||
message = $this.data("validationNumberMessage");
|
||||
}
|
||||
$this.data("validationNumberMessage", message);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// EMAIL
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") {
|
||||
message = "Not a valid email address<!-- data-validator-validemail-message to override -->";
|
||||
if ($this.data("validationValidemailMessage")) {
|
||||
message = $this.data("validationValidemailMessage");
|
||||
} else if ($this.data("validationEmailMessage")) {
|
||||
message = $this.data("validationEmailMessage");
|
||||
}
|
||||
$this.data("validationValidemailMessage", message);
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MINCHECKED
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("minchecked") !== undefined) {
|
||||
message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required<!-- data-validation-minchecked-message to override -->";
|
||||
if ($this.data("validationMincheckedMessage")) {
|
||||
message = $this.data("validationMincheckedMessage");
|
||||
}
|
||||
$this.data("validationMincheckedMessage", message);
|
||||
$this.data("validationMincheckedMinchecked", $this.attr("minchecked"));
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
// MAXCHECKED
|
||||
// ---------------------------------------------------------
|
||||
if ($this.attr("maxchecked") !== undefined) {
|
||||
message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required<!-- data-validation-maxchecked-message to override -->";
|
||||
if ($this.data("validationMaxcheckedMessage")) {
|
||||
message = $this.data("validationMaxcheckedMessage");
|
||||
}
|
||||
$this.data("validationMaxcheckedMessage", message);
|
||||
$this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked"));
|
||||
}
|
||||
}
|
||||
|
||||
// =============================================================
|
||||
// COLLECT VALIDATOR NAMES
|
||||
// =============================================================
|
||||
|
||||
// Get named validators
|
||||
if ($this.data("validation") !== undefined) {
|
||||
validatorNames = $this.data("validation").split(",");
|
||||
}
|
||||
|
||||
// Get extra ones defined on the element's data attributes
|
||||
$.each($this.data(), function(i, el) {
|
||||
var parts = i.replace(/([A-Z])/g, ",$1").split(",");
|
||||
if (parts[0] === "validation" && parts[1]) {
|
||||
validatorNames.push(parts[1]);
|
||||
}
|
||||
});
|
||||
|
||||
// =============================================================
|
||||
// NORMALISE VALIDATOR NAMES
|
||||
// =============================================================
|
||||
|
||||
var validatorNamesToInspect = validatorNames;
|
||||
var newValidatorNamesToInspect = [];
|
||||
|
||||
do // repeatedly expand 'shortcut' validators into their real validators
|
||||
{
|
||||
// Uppercase only the first letter of each name
|
||||
$.each(validatorNames, function(i, el) {
|
||||
validatorNames[i] = formatValidatorName(el);
|
||||
});
|
||||
|
||||
// Remove duplicate validator names
|
||||
validatorNames = $.unique(validatorNames);
|
||||
|
||||
// Pull out the new validator names from each shortcut
|
||||
newValidatorNamesToInspect = [];
|
||||
$.each(validatorNamesToInspect, function(i, el) {
|
||||
if ($this.data("validation" + el + "Shortcut") !== undefined) {
|
||||
// Are these custom validators?
|
||||
// Pull them out!
|
||||
$.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) {
|
||||
newValidatorNamesToInspect.push(el2);
|
||||
});
|
||||
} else if (settings.builtInValidators[el.toLowerCase()]) {
|
||||
// Is this a recognised built-in?
|
||||
// Pull it out!
|
||||
var validator = settings.builtInValidators[el.toLowerCase()];
|
||||
if (validator.type.toLowerCase() === "shortcut") {
|
||||
$.each(validator.shortcut.split(","), function(i, el) {
|
||||
el = formatValidatorName(el);
|
||||
newValidatorNamesToInspect.push(el);
|
||||
validatorNames.push(el);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
validatorNamesToInspect = newValidatorNamesToInspect;
|
||||
|
||||
} while (validatorNamesToInspect.length > 0)
|
||||
|
||||
// =============================================================
|
||||
// SET UP VALIDATOR ARRAYS
|
||||
// =============================================================
|
||||
|
||||
var validators = {};
|
||||
|
||||
$.each(validatorNames, function(i, el) {
|
||||
// Set up the 'override' message
|
||||
var message = $this.data("validation" + el + "Message");
|
||||
var hasOverrideMessage = (message !== undefined);
|
||||
var foundValidator = false;
|
||||
message =
|
||||
(
|
||||
message ?
|
||||
message :
|
||||
"'" + el + "' validation failed <!-- Add attribute 'data-validation-" + el.toLowerCase() + "-message' to input to change this message -->"
|
||||
);
|
||||
|
||||
$.each(
|
||||
settings.validatorTypes,
|
||||
function(validatorType, validatorTemplate) {
|
||||
if (validators[validatorType] === undefined) {
|
||||
validators[validatorType] = [];
|
||||
}
|
||||
if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {
|
||||
validators[validatorType].push(
|
||||
$.extend(
|
||||
true, {
|
||||
name: formatValidatorName(validatorTemplate.name),
|
||||
message: message
|
||||
},
|
||||
validatorTemplate.init($this, el)
|
||||
)
|
||||
);
|
||||
foundValidator = true;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {
|
||||
|
||||
var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);
|
||||
if (hasOverrideMessage) {
|
||||
validator.message = message;
|
||||
}
|
||||
var validatorType = validator.type.toLowerCase();
|
||||
|
||||
if (validatorType === "shortcut") {
|
||||
foundValidator = true;
|
||||
} else {
|
||||
$.each(
|
||||
settings.validatorTypes,
|
||||
function(validatorTemplateType, validatorTemplate) {
|
||||
if (validators[validatorTemplateType] === undefined) {
|
||||
validators[validatorTemplateType] = [];
|
||||
}
|
||||
if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {
|
||||
$this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]);
|
||||
validators[validatorType].push(
|
||||
$.extend(
|
||||
validator,
|
||||
validatorTemplate.init($this, el)
|
||||
)
|
||||
);
|
||||
foundValidator = true;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundValidator) {
|
||||
$.error("Cannot find validation info for '" + el + "'");
|
||||
}
|
||||
});
|
||||
|
||||
// =============================================================
|
||||
// STORE FALLBACK VALUES
|
||||
// =============================================================
|
||||
|
||||
$helpBlock.data(
|
||||
"original-contents",
|
||||
(
|
||||
$helpBlock.data("original-contents") ?
|
||||
$helpBlock.data("original-contents") :
|
||||
$helpBlock.html()
|
||||
)
|
||||
);
|
||||
|
||||
$helpBlock.data(
|
||||
"original-role",
|
||||
(
|
||||
$helpBlock.data("original-role") ?
|
||||
$helpBlock.data("original-role") :
|
||||
$helpBlock.attr("role")
|
||||
)
|
||||
);
|
||||
|
||||
$controlGroup.data(
|
||||
"original-classes",
|
||||
(
|
||||
$controlGroup.data("original-clases") ?
|
||||
$controlGroup.data("original-classes") :
|
||||
$controlGroup.attr("class")
|
||||
)
|
||||
);
|
||||
|
||||
$this.data(
|
||||
"original-aria-invalid",
|
||||
(
|
||||
$this.data("original-aria-invalid") ?
|
||||
$this.data("original-aria-invalid") :
|
||||
$this.attr("aria-invalid")
|
||||
)
|
||||
);
|
||||
|
||||
// =============================================================
|
||||
// VALIDATION
|
||||
// =============================================================
|
||||
|
||||
$this.bind(
|
||||
"validation.validation",
|
||||
function(event, params) {
|
||||
|
||||
var value = getValue($this);
|
||||
|
||||
// Get a list of the errors to apply
|
||||
var errorsFound = [];
|
||||
|
||||
$.each(validators, function(validatorType, validatorTypeArray) {
|
||||
if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) {
|
||||
$.each(validatorTypeArray, function(i, validator) {
|
||||
if (settings.validatorTypes[validatorType].validate($this, value, validator)) {
|
||||
errorsFound.push(validator.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return errorsFound;
|
||||
}
|
||||
);
|
||||
|
||||
$this.bind(
|
||||
"getValidators.validation",
|
||||
function() {
|
||||
return validators;
|
||||
}
|
||||
);
|
||||
|
||||
// =============================================================
|
||||
// WATCH FOR CHANGES
|
||||
// =============================================================
|
||||
$this.bind(
|
||||
"submit.validation",
|
||||
function() {
|
||||
return $this.triggerHandler("change.validation", {
|
||||
submitting: true
|
||||
});
|
||||
}
|
||||
);
|
||||
$this.bind(
|
||||
[
|
||||
"keyup",
|
||||
"focus",
|
||||
"blur",
|
||||
"click",
|
||||
"keydown",
|
||||
"keypress",
|
||||
"change"
|
||||
].join(".validation ") + ".validation",
|
||||
function(e, params) {
|
||||
|
||||
var value = getValue($this);
|
||||
|
||||
var errorsFound = [];
|
||||
|
||||
$controlGroup.find("input,textarea,select").each(function(i, el) {
|
||||
var oldCount = errorsFound.length;
|
||||
$.each($(el).triggerHandler("validation.validation", params), function(j, message) {
|
||||
errorsFound.push(message);
|
||||
});
|
||||
if (errorsFound.length > oldCount) {
|
||||
$(el).attr("aria-invalid", "true");
|
||||
} else {
|
||||
var original = $this.data("original-aria-invalid");
|
||||
$(el).attr("aria-invalid", (original !== undefined ? original : false));
|
||||
}
|
||||
});
|
||||
|
||||
$form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation");
|
||||
|
||||
errorsFound = $.unique(errorsFound.sort());
|
||||
|
||||
// Were there any errors?
|
||||
if (errorsFound.length) {
|
||||
// Better flag it up as a warning.
|
||||
$controlGroup.removeClass("success error").addClass("warning");
|
||||
|
||||
// How many errors did we find?
|
||||
if (settings.options.semanticallyStrict && errorsFound.length === 1) {
|
||||
// Only one? Being strict? Just output it.
|
||||
$helpBlock.html(errorsFound[0] +
|
||||
(settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : ""));
|
||||
} else {
|
||||
// Multiple? Being sloppy? Glue them together into an UL.
|
||||
$helpBlock.html("<ul role=\"alert\"><li>" + errorsFound.join("</li><li>") + "</li></ul>" +
|
||||
(settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : ""));
|
||||
}
|
||||
} else {
|
||||
$controlGroup.removeClass("warning error success");
|
||||
if (value.length > 0) {
|
||||
$controlGroup.addClass("success");
|
||||
}
|
||||
$helpBlock.html($helpBlock.data("original-contents"));
|
||||
}
|
||||
|
||||
if (e.type === "blur") {
|
||||
$controlGroup.removeClass("success");
|
||||
}
|
||||
}
|
||||
);
|
||||
$this.bind("validationLostFocus.validation", function() {
|
||||
$controlGroup.removeClass("success");
|
||||
});
|
||||
});
|
||||
},
|
||||
destroy: function() {
|
||||
|
||||
return this.each(
|
||||
function() {
|
||||
|
||||
var
|
||||
$this = $(this),
|
||||
$controlGroup = $this.parents(".form-group").first(),
|
||||
$helpBlock = $controlGroup.find(".help-block").first();
|
||||
|
||||
// remove our events
|
||||
$this.unbind('.validation'); // events are namespaced.
|
||||
// reset help text
|
||||
$helpBlock.html($helpBlock.data("original-contents"));
|
||||
// reset classes
|
||||
$controlGroup.attr("class", $controlGroup.data("original-classes"));
|
||||
// reset aria
|
||||
$this.attr("aria-invalid", $this.data("original-aria-invalid"));
|
||||
// reset role
|
||||
$helpBlock.attr("role", $this.data("original-role"));
|
||||
// remove all elements we created
|
||||
if (createdElements.indexOf($helpBlock[0]) > -1) {
|
||||
$helpBlock.remove();
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
},
|
||||
collectErrors: function(includeEmpty) {
|
||||
|
||||
var errorMessages = {};
|
||||
this.each(function(i, el) {
|
||||
var $el = $(el);
|
||||
var name = $el.attr("name");
|
||||
var errors = $el.triggerHandler("validation.validation", {
|
||||
includeEmpty: true
|
||||
});
|
||||
errorMessages[name] = $.extend(true, errors, errorMessages[name]);
|
||||
});
|
||||
|
||||
$.each(errorMessages, function(i, el) {
|
||||
if (el.length === 0) {
|
||||
delete errorMessages[i];
|
||||
}
|
||||
});
|
||||
|
||||
return errorMessages;
|
||||
|
||||
},
|
||||
hasErrors: function() {
|
||||
|
||||
var errorMessages = [];
|
||||
|
||||
this.each(function(i, el) {
|
||||
errorMessages = errorMessages.concat(
|
||||
$(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {
|
||||
submitting: true
|
||||
}) : []
|
||||
);
|
||||
});
|
||||
|
||||
return (errorMessages.length > 0);
|
||||
},
|
||||
override: function(newDefaults) {
|
||||
defaults = $.extend(true, defaults, newDefaults);
|
||||
}
|
||||
},
|
||||
validatorTypes: {
|
||||
callback: {
|
||||
name: "callback",
|
||||
init: function($this, name) {
|
||||
return {
|
||||
validatorName: name,
|
||||
callback: $this.data("validation" + name + "Callback"),
|
||||
lastValue: $this.val(),
|
||||
lastValid: true,
|
||||
lastFinished: true
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
if (validator.lastValue === value && validator.lastFinished) {
|
||||
return !validator.lastValid;
|
||||
}
|
||||
|
||||
if (validator.lastFinished === true) {
|
||||
validator.lastValue = value;
|
||||
validator.lastValid = true;
|
||||
validator.lastFinished = false;
|
||||
|
||||
var rrjqbvValidator = validator;
|
||||
var rrjqbvThis = $this;
|
||||
executeFunctionByName(
|
||||
validator.callback,
|
||||
window,
|
||||
$this,
|
||||
value,
|
||||
function(data) {
|
||||
if (rrjqbvValidator.lastValue === data.value) {
|
||||
rrjqbvValidator.lastValid = data.valid;
|
||||
if (data.message) {
|
||||
rrjqbvValidator.message = data.message;
|
||||
}
|
||||
rrjqbvValidator.lastFinished = true;
|
||||
rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message);
|
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function() {
|
||||
rrjqbvThis.trigger("change.validation");
|
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
},
|
||||
ajax: {
|
||||
name: "ajax",
|
||||
init: function($this, name) {
|
||||
return {
|
||||
validatorName: name,
|
||||
url: $this.data("validation" + name + "Ajax"),
|
||||
lastValue: $this.val(),
|
||||
lastValid: true,
|
||||
lastFinished: true
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
if ("" + validator.lastValue === "" + value && validator.lastFinished === true) {
|
||||
return validator.lastValid === false;
|
||||
}
|
||||
|
||||
if (validator.lastFinished === true) {
|
||||
validator.lastValue = value;
|
||||
validator.lastValid = true;
|
||||
validator.lastFinished = false;
|
||||
$.ajax({
|
||||
url: validator.url,
|
||||
data: "value=" + value + "&field=" + $this.attr("name"),
|
||||
dataType: "json",
|
||||
success: function(data) {
|
||||
if ("" + validator.lastValue === "" + data.value) {
|
||||
validator.lastValid = !!(data.valid);
|
||||
if (data.message) {
|
||||
validator.message = data.message;
|
||||
}
|
||||
validator.lastFinished = true;
|
||||
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function() {
|
||||
$this.trigger("change.validation");
|
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
}
|
||||
},
|
||||
failure: function() {
|
||||
validator.lastValid = true;
|
||||
validator.message = "ajax call failed";
|
||||
validator.lastFinished = true;
|
||||
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
||||
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||
setTimeout(function() {
|
||||
$this.trigger("change.validation");
|
||||
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
},
|
||||
regex: {
|
||||
name: "regex",
|
||||
init: function($this, name) {
|
||||
return {
|
||||
regex: regexFromString($this.data("validation" + name + "Regex"))
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return (!validator.regex.test(value) && !validator.negative) ||
|
||||
(validator.regex.test(value) && validator.negative);
|
||||
}
|
||||
},
|
||||
required: {
|
||||
name: "required",
|
||||
init: function($this, name) {
|
||||
return {};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return !!(value.length === 0 && !validator.negative) ||
|
||||
!!(value.length > 0 && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
},
|
||||
match: {
|
||||
name: "match",
|
||||
init: function($this, name) {
|
||||
var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first();
|
||||
element.bind("validation.validation", function() {
|
||||
$this.trigger("change.validation", {
|
||||
submitting: true
|
||||
});
|
||||
});
|
||||
return {
|
||||
"element": element
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return (value !== validator.element.val() && !validator.negative) ||
|
||||
(value === validator.element.val() && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
},
|
||||
max: {
|
||||
name: "max",
|
||||
init: function($this, name) {
|
||||
return {
|
||||
max: $this.data("validation" + name + "Max")
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return (parseFloat(value, 10) > parseFloat(validator.max, 10) && !validator.negative) ||
|
||||
(parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);
|
||||
}
|
||||
},
|
||||
min: {
|
||||
name: "min",
|
||||
init: function($this, name) {
|
||||
return {
|
||||
min: $this.data("validation" + name + "Min")
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return (parseFloat(value) < parseFloat(validator.min) && !validator.negative) ||
|
||||
(parseFloat(value) >= parseFloat(validator.min) && validator.negative);
|
||||
}
|
||||
},
|
||||
maxlength: {
|
||||
name: "maxlength",
|
||||
init: function($this, name) {
|
||||
return {
|
||||
maxlength: $this.data("validation" + name + "Maxlength")
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return ((value.length > validator.maxlength) && !validator.negative) ||
|
||||
((value.length <= validator.maxlength) && validator.negative);
|
||||
}
|
||||
},
|
||||
minlength: {
|
||||
name: "minlength",
|
||||
init: function($this, name) {
|
||||
return {
|
||||
minlength: $this.data("validation" + name + "Minlength")
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return ((value.length < validator.minlength) && !validator.negative) ||
|
||||
((value.length >= validator.minlength) && validator.negative);
|
||||
}
|
||||
},
|
||||
maxchecked: {
|
||||
name: "maxchecked",
|
||||
init: function($this, name) {
|
||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
||||
elements.bind("click.validation", function() {
|
||||
$this.trigger("change.validation", {
|
||||
includeEmpty: true
|
||||
});
|
||||
});
|
||||
return {
|
||||
maxchecked: $this.data("validation" + name + "Maxchecked"),
|
||||
elements: elements
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return (validator.elements.filter(":checked").length > validator.maxchecked && !validator.negative) ||
|
||||
(validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
},
|
||||
minchecked: {
|
||||
name: "minchecked",
|
||||
init: function($this, name) {
|
||||
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
||||
elements.bind("click.validation", function() {
|
||||
$this.trigger("change.validation", {
|
||||
includeEmpty: true
|
||||
});
|
||||
});
|
||||
return {
|
||||
minchecked: $this.data("validation" + name + "Minchecked"),
|
||||
elements: elements
|
||||
};
|
||||
},
|
||||
validate: function($this, value, validator) {
|
||||
return (validator.elements.filter(":checked").length < validator.minchecked && !validator.negative) ||
|
||||
(validator.elements.filter(":checked").length >= validator.minchecked && validator.negative);
|
||||
},
|
||||
blockSubmit: true
|
||||
}
|
||||
},
|
||||
builtInValidators: {
|
||||
email: {
|
||||
name: "Email",
|
||||
type: "shortcut",
|
||||
shortcut: "validemail"
|
||||
},
|
||||
validemail: {
|
||||
name: "Validemail",
|
||||
type: "regex",
|
||||
regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}",
|
||||
message: "Not a valid email address<!-- data-validator-validemail-message to override -->"
|
||||
},
|
||||
passwordagain: {
|
||||
name: "Passwordagain",
|
||||
type: "match",
|
||||
match: "password",
|
||||
message: "Does not match the given password<!-- data-validator-paswordagain-message to override -->"
|
||||
},
|
||||
positive: {
|
||||
name: "Positive",
|
||||
type: "shortcut",
|
||||
shortcut: "number,positivenumber"
|
||||
},
|
||||
negative: {
|
||||
name: "Negative",
|
||||
type: "shortcut",
|
||||
shortcut: "number,negativenumber"
|
||||
},
|
||||
number: {
|
||||
name: "Number",
|
||||
type: "regex",
|
||||
regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?",
|
||||
message: "Must be a number<!-- data-validator-number-message to override -->"
|
||||
},
|
||||
integer: {
|
||||
name: "Integer",
|
||||
type: "regex",
|
||||
regex: "[+-]?\\\d+",
|
||||
message: "No decimal places allowed<!-- data-validator-integer-message to override -->"
|
||||
},
|
||||
positivenumber: {
|
||||
name: "Positivenumber",
|
||||
type: "min",
|
||||
min: 0,
|
||||
message: "Must be a positive number<!-- data-validator-positivenumber-message to override -->"
|
||||
},
|
||||
negativenumber: {
|
||||
name: "Negativenumber",
|
||||
type: "max",
|
||||
max: 0,
|
||||
message: "Must be a negative number<!-- data-validator-negativenumber-message to override -->"
|
||||
},
|
||||
required: {
|
||||
name: "Required",
|
||||
type: "required",
|
||||
message: "This is required<!-- data-validator-required-message to override -->"
|
||||
},
|
||||
checkone: {
|
||||
name: "Checkone",
|
||||
type: "minchecked",
|
||||
minchecked: 1,
|
||||
message: "Check at least one option<!-- data-validation-checkone-message to override -->"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var formatValidatorName = function(name) {
|
||||
return name
|
||||
.toLowerCase()
|
||||
.replace(
|
||||
/(^|\s)([a-z])/g,
|
||||
function(m, p1, p2) {
|
||||
return p1 + p2.toUpperCase();
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
var getValue = function($this) {
|
||||
// Extract the value we're talking about
|
||||
var value = $this.val();
|
||||
var type = $this.attr("type");
|
||||
if (type === "checkbox") {
|
||||
value = ($this.is(":checked") ? value : "");
|
||||
}
|
||||
if (type === "radio") {
|
||||
value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : "");
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
function regexFromString(inputstring) {
|
||||
return new RegExp("^" + inputstring + "$");
|
||||
}
|
||||
|
||||
/**
|
||||
* Thanks to Jason Bunting via StackOverflow.com
|
||||
*
|
||||
* http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
|
||||
* Short link: http://tinyurl.com/executeFunctionByName
|
||||
**/
|
||||
function executeFunctionByName(functionName, context /*, args*/ ) {
|
||||
var args = Array.prototype.slice.call(arguments).splice(2);
|
||||
var namespaces = functionName.split(".");
|
||||
var func = namespaces.pop();
|
||||
for (var i = 0; i < namespaces.length; i++) {
|
||||
context = context[namespaces[i]];
|
||||
}
|
||||
return context[func].apply(this, args);
|
||||
}
|
||||
|
||||
$.fn.jqBootstrapValidation = function(method) {
|
||||
|
||||
if (defaults.methods[method]) {
|
||||
return defaults.methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
} else if (typeof method === 'object' || !method) {
|
||||
return defaults.methods.init.apply(this, arguments);
|
||||
} else {
|
||||
$.error('Method ' + method + ' does not exist on jQuery.jqBootstrapValidation');
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$.jqBootstrapValidation = function(options) {
|
||||
$(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this, arguments);
|
||||
};
|
||||
|
||||
})(jQuery);
|
494
src/pug/index.pug
Normal file
@ -0,0 +1,494 @@
|
||||
doctype html
|
||||
html(lang='en')
|
||||
|
||||
head
|
||||
|
||||
meta(charset='utf-8')
|
||||
meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no')
|
||||
meta(name='description', content='')
|
||||
meta(name='author', content='')
|
||||
|
||||
title Freelancer - Start Bootstrap Theme
|
||||
|
||||
// Font Awesome icons (free version)
|
||||
script(src='https://use.fontawesome.com/releases/v5.12.1/js/all.js', crossorigin='anonymous')
|
||||
|
||||
// Google fonts
|
||||
link(href='https://fonts.googleapis.com/css?family=Montserrat:400,700', rel='stylesheet', type='text/css')
|
||||
link(href='https://fonts.googleapis.com/css?family=Kaushan+Script', rel='stylesheet', type='text/css')
|
||||
link(href='https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic', rel='stylesheet', type='text/css')
|
||||
link(href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700', rel='stylesheet', type='text/css')
|
||||
|
||||
// Core theme CSS (includes Bootstrap)
|
||||
link(href='css/styles.css', rel='stylesheet')
|
||||
|
||||
body#page-top
|
||||
|
||||
// Navigation
|
||||
nav#mainNav.navbar.navbar-expand-lg.navbar-dark.fixed-top
|
||||
.container
|
||||
a.navbar-brand.js-scroll-trigger(href='#page-top') Start Bootstrap
|
||||
button.navbar-toggler.navbar-toggler-right(type='button', data-toggle='collapse', data-target='#navbarResponsive', aria-controls='navbarResponsive', aria-expanded='false', aria-label='Toggle navigation')
|
||||
| Menu
|
||||
i.fas.fa-bars
|
||||
#navbarResponsive.collapse.navbar-collapse
|
||||
ul.navbar-nav.text-uppercase.ml-auto
|
||||
li.nav-item
|
||||
a.nav-link.js-scroll-trigger(href='#services') Services
|
||||
li.nav-item
|
||||
a.nav-link.js-scroll-trigger(href='#portfolio') Portfolio
|
||||
li.nav-item
|
||||
a.nav-link.js-scroll-trigger(href='#about') About
|
||||
li.nav-item
|
||||
a.nav-link.js-scroll-trigger(href='#team') Team
|
||||
li.nav-item
|
||||
a.nav-link.js-scroll-trigger(href='#contact') Contact
|
||||
// Masthead
|
||||
|
||||
header.masthead
|
||||
.container
|
||||
.intro-text
|
||||
.intro-lead-in Welcome To Our Studio!
|
||||
.intro-heading.text-uppercase It's Nice To Meet You
|
||||
a.btn.btn-primary.btn-xl.text-uppercase.js-scroll-trigger(href='#services') Tell Me More
|
||||
|
||||
// Services
|
||||
section#services.page-section
|
||||
.container
|
||||
.row
|
||||
.col-lg-12.text-center
|
||||
h2.section-heading.text-uppercase Services
|
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
.row.text-center
|
||||
.col-md-4
|
||||
span.fa-stack.fa-4x
|
||||
i.fas.fa-circle.fa-stack-2x.text-primary
|
||||
i.fas.fa-shopping-cart.fa-stack-1x.fa-inverse
|
||||
h4.service-heading E-Commerce
|
||||
p.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.
|
||||
.col-md-4
|
||||
span.fa-stack.fa-4x
|
||||
i.fas.fa-circle.fa-stack-2x.text-primary
|
||||
i.fas.fa-laptop.fa-stack-1x.fa-inverse
|
||||
h4.service-heading Responsive Design
|
||||
p.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.
|
||||
.col-md-4
|
||||
span.fa-stack.fa-4x
|
||||
i.fas.fa-circle.fa-stack-2x.text-primary
|
||||
i.fas.fa-lock.fa-stack-1x.fa-inverse
|
||||
h4.service-heading Web Security
|
||||
p.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.
|
||||
|
||||
// Portfolio Grid
|
||||
section#portfolio.bg-light.page-section
|
||||
.container
|
||||
.row
|
||||
.col-lg-12.text-center
|
||||
h2.section-heading.text-uppercase Portfolio
|
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
.row
|
||||
.col-md-4.col-sm-6.portfolio-item
|
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal1')
|
||||
.portfolio-hover
|
||||
.portfolio-hover-content
|
||||
i.fas.fa-plus.fa-3x
|
||||
img.img-fluid(src='assets/img/portfolio/01-thumbnail.jpg', alt='')
|
||||
.portfolio-caption
|
||||
h4 Threads
|
||||
p.text-muted Illustration
|
||||
.col-md-4.col-sm-6.portfolio-item
|
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal2')
|
||||
.portfolio-hover
|
||||
.portfolio-hover-content
|
||||
i.fas.fa-plus.fa-3x
|
||||
img.img-fluid(src='assets/img/portfolio/02-thumbnail.jpg', alt='')
|
||||
.portfolio-caption
|
||||
h4 Explore
|
||||
p.text-muted Graphic Design
|
||||
.col-md-4.col-sm-6.portfolio-item
|
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal3')
|
||||
.portfolio-hover
|
||||
.portfolio-hover-content
|
||||
i.fas.fa-plus.fa-3x
|
||||
img.img-fluid(src='assets/img/portfolio/03-thumbnail.jpg', alt='')
|
||||
.portfolio-caption
|
||||
h4 Finish
|
||||
p.text-muted Identity
|
||||
.col-md-4.col-sm-6.portfolio-item
|
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal4')
|
||||
.portfolio-hover
|
||||
.portfolio-hover-content
|
||||
i.fas.fa-plus.fa-3x
|
||||
img.img-fluid(src='assets/img/portfolio/04-thumbnail.jpg', alt='')
|
||||
.portfolio-caption
|
||||
h4 Lines
|
||||
p.text-muted Branding
|
||||
.col-md-4.col-sm-6.portfolio-item
|
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal5')
|
||||
.portfolio-hover
|
||||
.portfolio-hover-content
|
||||
i.fas.fa-plus.fa-3x
|
||||
img.img-fluid(src='assets/img/portfolio/05-thumbnail.jpg', alt='')
|
||||
.portfolio-caption
|
||||
h4 Southwest
|
||||
p.text-muted Website Design
|
||||
.col-md-4.col-sm-6.portfolio-item
|
||||
a.portfolio-link(data-toggle='modal', href='#portfolioModal6')
|
||||
.portfolio-hover
|
||||
.portfolio-hover-content
|
||||
i.fas.fa-plus.fa-3x
|
||||
img.img-fluid(src='assets/img/portfolio/06-thumbnail.jpg', alt='')
|
||||
.portfolio-caption
|
||||
h4 Window
|
||||
p.text-muted Photography
|
||||
|
||||
// About
|
||||
section#about.page-section
|
||||
.container
|
||||
.row
|
||||
.col-lg-12.text-center
|
||||
h2.section-heading.text-uppercase About
|
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
.row
|
||||
.col-lg-12
|
||||
ul.timeline
|
||||
li
|
||||
.timeline-image
|
||||
img.rounded-circle.img-fluid(src='assets/img/about/1.jpg', alt='')
|
||||
.timeline-panel
|
||||
.timeline-heading
|
||||
h4 2009-2011
|
||||
h4.subheading Our Humble Beginnings
|
||||
.timeline-body
|
||||
p.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
|
||||
li.timeline-inverted
|
||||
.timeline-image
|
||||
img.rounded-circle.img-fluid(src='assets/img/about/2.jpg', alt='')
|
||||
.timeline-panel
|
||||
.timeline-heading
|
||||
h4 March 2011
|
||||
h4.subheading An Agency is Born
|
||||
.timeline-body
|
||||
p.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
|
||||
li
|
||||
.timeline-image
|
||||
img.rounded-circle.img-fluid(src='assets/img/about/3.jpg', alt='')
|
||||
.timeline-panel
|
||||
.timeline-heading
|
||||
h4 December 2012
|
||||
h4.subheading Transition to Full Service
|
||||
.timeline-body
|
||||
p.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
|
||||
li.timeline-inverted
|
||||
.timeline-image
|
||||
img.rounded-circle.img-fluid(src='assets/img/about/4.jpg', alt='')
|
||||
.timeline-panel
|
||||
.timeline-heading
|
||||
h4 July 2014
|
||||
h4.subheading Phase Two Expansion
|
||||
.timeline-body
|
||||
p.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
|
||||
li.timeline-inverted
|
||||
.timeline-image
|
||||
h4
|
||||
| Be Part
|
||||
br
|
||||
| Of Our
|
||||
br
|
||||
| Story!
|
||||
|
||||
// Team
|
||||
section#team.bg-light.page-section
|
||||
.container
|
||||
.row
|
||||
.col-lg-12.text-center
|
||||
h2.section-heading.text-uppercase Our Amazing Team
|
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
.row
|
||||
.col-sm-4
|
||||
.team-member
|
||||
img.mx-auto.rounded-circle(src='assets/img/team/1.jpg', alt='')
|
||||
h4 Kay Garland
|
||||
p.text-muted Lead Designer
|
||||
ul.list-inline.social-buttons
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-twitter
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-facebook-f
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-linkedin-in
|
||||
.col-sm-4
|
||||
.team-member
|
||||
img.mx-auto.rounded-circle(src='assets/img/team/2.jpg', alt='')
|
||||
h4 Larry Parker
|
||||
p.text-muted Lead Marketer
|
||||
ul.list-inline.social-buttons
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-twitter
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-facebook-f
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-linkedin-in
|
||||
.col-sm-4
|
||||
.team-member
|
||||
img.mx-auto.rounded-circle(src='assets/img/team/3.jpg', alt='')
|
||||
h4 Diana Pertersen
|
||||
p.text-muted Lead Developer
|
||||
ul.list-inline.social-buttons
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-twitter
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-facebook-f
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-linkedin-in
|
||||
.row
|
||||
.col-lg-8.mx-auto.text-center
|
||||
p.large.text-muted
|
||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut eaque, laboriosam veritatis, quos non quis ad perspiciatis, totam corporis ea, alias ut unde.
|
||||
|
||||
// Clients
|
||||
section.py-5
|
||||
.container
|
||||
.row
|
||||
.col-md-3.col-sm-6
|
||||
a(href='#')
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/envato.jpg', alt='')
|
||||
.col-md-3.col-sm-6
|
||||
a(href='#')
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/designmodo.jpg', alt='')
|
||||
.col-md-3.col-sm-6
|
||||
a(href='#')
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/themeforest.jpg', alt='')
|
||||
.col-md-3.col-sm-6
|
||||
a(href='#')
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/logos/creative-market.jpg', alt='')
|
||||
|
||||
// Contact
|
||||
section#contact.page-section
|
||||
.container
|
||||
.row
|
||||
.col-lg-12.text-center
|
||||
h2.section-heading.text-uppercase Contact Us
|
||||
h3.section-subheading.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
.row
|
||||
.col-lg-12
|
||||
form#contactForm(name='sentMessage', novalidate='novalidate')
|
||||
.row
|
||||
.col-md-6
|
||||
.form-group
|
||||
input#name.form-control(type='text', placeholder='Your Name *', required='required', data-validation-required-message='Please enter your name.')
|
||||
p.help-block.text-danger
|
||||
.form-group
|
||||
input#email.form-control(type='email', placeholder='Your Email *', required='required', data-validation-required-message='Please enter your email address.')
|
||||
p.help-block.text-danger
|
||||
.form-group
|
||||
input#phone.form-control(type='tel', placeholder='Your Phone *', required='required', data-validation-required-message='Please enter your phone number.')
|
||||
p.help-block.text-danger
|
||||
.col-md-6
|
||||
.form-group
|
||||
textarea#message.form-control(placeholder='Your Message *', required='required', data-validation-required-message='Please enter a message.')
|
||||
p.help-block.text-danger
|
||||
.clearfix
|
||||
.col-lg-12.text-center
|
||||
#success
|
||||
button#sendMessageButton.btn.btn-primary.btn-xl.text-uppercase(type='submit') Send Message
|
||||
|
||||
// Footer
|
||||
footer.footer
|
||||
.container
|
||||
.row.align-items-center
|
||||
.col-md-4
|
||||
span.copyright Copyright © Your Website 2019
|
||||
.col-md-4
|
||||
ul.list-inline.social-buttons
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-twitter
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-facebook-f
|
||||
li.list-inline-item
|
||||
a(href='#')
|
||||
i.fab.fa-linkedin-in
|
||||
.col-md-4
|
||||
ul.list-inline.quicklinks
|
||||
li.list-inline-item
|
||||
a(href='#') Privacy Policy
|
||||
li.list-inline-item
|
||||
a(href='#') Terms of Use
|
||||
|
||||
// Portfolio Modals
|
||||
// Modal 1
|
||||
#portfolioModal1.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true')
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.close-modal(data-dismiss='modal')
|
||||
.lr
|
||||
.rl
|
||||
.container
|
||||
.row
|
||||
.col-lg-8.mx-auto
|
||||
.modal-body
|
||||
// Project Details Go Here
|
||||
h2.text-uppercase Project Name
|
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/01-full.jpg', alt='')
|
||||
p
|
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
|
||||
ul.list-inline
|
||||
li Date: January 2017
|
||||
li Client: Threads
|
||||
li Category: Illustration
|
||||
button.btn.btn-primary(data-dismiss='modal', type='button')
|
||||
i.fas.fa-times
|
||||
| Close Project
|
||||
// Modal 2
|
||||
#portfolioModal2.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true')
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.close-modal(data-dismiss='modal')
|
||||
.lr
|
||||
.rl
|
||||
.container
|
||||
.row
|
||||
.col-lg-8.mx-auto
|
||||
.modal-body
|
||||
// Project Details Go Here
|
||||
h2.text-uppercase Project Name
|
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/02-full.jpg', alt='')
|
||||
p
|
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
|
||||
ul.list-inline
|
||||
li Date: January 2017
|
||||
li Client: Explore
|
||||
li Category: Graphic Design
|
||||
button.btn.btn-primary(data-dismiss='modal', type='button')
|
||||
i.fas.fa-times
|
||||
| Close Project
|
||||
// Modal 3
|
||||
#portfolioModal3.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true')
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.close-modal(data-dismiss='modal')
|
||||
.lr
|
||||
.rl
|
||||
.container
|
||||
.row
|
||||
.col-lg-8.mx-auto
|
||||
.modal-body
|
||||
// Project Details Go Here
|
||||
h2.text-uppercase Project Name
|
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/03-full.jpg', alt='')
|
||||
p
|
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
|
||||
ul.list-inline
|
||||
li Date: January 2017
|
||||
li Client: Finish
|
||||
li Category: Identity
|
||||
button.btn.btn-primary(data-dismiss='modal', type='button')
|
||||
i.fas.fa-times
|
||||
| Close Project
|
||||
// Modal 4
|
||||
#portfolioModal4.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true')
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.close-modal(data-dismiss='modal')
|
||||
.lr
|
||||
.rl
|
||||
.container
|
||||
.row
|
||||
.col-lg-8.mx-auto
|
||||
.modal-body
|
||||
// Project Details Go Here
|
||||
h2.text-uppercase Project Name
|
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/04-full.jpg', alt='')
|
||||
p
|
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
|
||||
ul.list-inline
|
||||
li Date: January 2017
|
||||
li Client: Lines
|
||||
li Category: Branding
|
||||
button.btn.btn-primary(data-dismiss='modal', type='button')
|
||||
i.fas.fa-times
|
||||
| Close Project
|
||||
// Modal 5
|
||||
#portfolioModal5.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true')
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.close-modal(data-dismiss='modal')
|
||||
.lr
|
||||
.rl
|
||||
.container
|
||||
.row
|
||||
.col-lg-8.mx-auto
|
||||
.modal-body
|
||||
// Project Details Go Here
|
||||
h2.text-uppercase Project Name
|
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/05-full.jpg', alt='')
|
||||
p
|
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
|
||||
ul.list-inline
|
||||
li Date: January 2017
|
||||
li Client: Southwest
|
||||
li Category: Website Design
|
||||
button.btn.btn-primary(data-dismiss='modal', type='button')
|
||||
i.fas.fa-times
|
||||
| Close Project
|
||||
// Modal 6
|
||||
#portfolioModal6.portfolio-modal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true')
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.close-modal(data-dismiss='modal')
|
||||
.lr
|
||||
.rl
|
||||
.container
|
||||
.row
|
||||
.col-lg-8.mx-auto
|
||||
.modal-body
|
||||
// Project Details Go Here
|
||||
h2.text-uppercase Project Name
|
||||
p.item-intro.text-muted Lorem ipsum dolor sit amet consectetur.
|
||||
img.img-fluid.d-block.mx-auto(src='assets/img/portfolio/06-full.jpg', alt='')
|
||||
p
|
||||
| Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
|
||||
ul.list-inline
|
||||
li Date: January 2017
|
||||
li Client: Window
|
||||
li Category: Photography
|
||||
button.btn.btn-primary(data-dismiss='modal', type='button')
|
||||
i.fas.fa-times
|
||||
| Close Project
|
||||
|
||||
// Bootstrap core JS
|
||||
script(src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js')
|
||||
script(src='https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.bundle.min.js')
|
||||
|
||||
// Third party plugin JS
|
||||
script(src='https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js')
|
||||
|
||||
// Contact form JS
|
||||
script(src='assets/mail/jqBootstrapValidation.js')
|
||||
script(src='assets/mail/contact_me.js')
|
||||
|
||||
// Core theme JS
|
||||
script(src='js/scripts.js')
|
8
src/scss/components/_buttons.scss
Normal file
@ -0,0 +1,8 @@
|
||||
// Button Styles
|
||||
|
||||
.btn-xl {
|
||||
@include heading-font;
|
||||
font-weight: 700;
|
||||
font-size: 1.125rem;
|
||||
padding: 1.25rem 2.5rem;
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
// Styling for the contact section
|
||||
section#contact {
|
||||
background-color: $gray-900;
|
||||
background-image: url('../img/map-image.png');
|
||||
background-image: url('../assets/img/map-image.png');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
.section-heading {
|
@ -2,7 +2,7 @@
|
||||
header.masthead {
|
||||
text-align: center;
|
||||
color: white;
|
||||
background-image: url('../img/header-bg.jpg');
|
||||
background-image: url('../assets/img/header-bg.jpg');
|
||||
background-repeat: no-repeat;
|
||||
background-attachment: scroll;
|
||||
background-position: center center;
|
@ -2,6 +2,9 @@
|
||||
@import "base/variables.scss";
|
||||
@import "base/mixins.scss";
|
||||
|
||||
// Import Bootstrap
|
||||
@import "bootstrap/scss/bootstrap.scss";
|
||||
|
||||
// Global CSS
|
||||
@import "base/page.scss";
|
||||
|