Compare commits
247 Commits
v8.0.0.M26
...
v8.2.0
Author | SHA1 | Date | |
---|---|---|---|
e9df66ca1f | |||
1381daf06e | |||
ac542ad8b8 | |||
a2677cee58 | |||
a641a19615 | |||
a91d45dea5 | |||
81c551552b | |||
69a370f438 | |||
3aa791bc1b | |||
a53ba0af5c | |||
a1071e9c00 | |||
70cda80176 | |||
ac0cb3560c | |||
d9712e7589 | |||
cfe763f98d | |||
4869616176 | |||
30abcc0a1a | |||
38f1d52bf3 | |||
e49f5d610f | |||
04d065fd87 | |||
d345a9a716 | |||
2d8d898fb7 | |||
ad9ee094b4 | |||
cb2277628c | |||
5869b64ee0 | |||
6ae9e44e84 | |||
d0f36f5227 | |||
5d45fd6260 | |||
b3f7a5338e | |||
b858484b97 | |||
b76330f20f | |||
ee1d4b0ac1 | |||
abf431fffb | |||
3e8dbc9bc9 | |||
721edc9985 | |||
82198424df | |||
ba2cb7d14f | |||
de453fad84 | |||
59c96f9890 | |||
f7d3fd586e | |||
798afc756b | |||
59aaab52a9 | |||
14621003d7 | |||
23f67b3d25 | |||
1c6de07a54 | |||
cda852f4e8 | |||
1d6a5ca01b | |||
c574a6610b | |||
ae6d448aa0 | |||
b8bdb8f432 | |||
3300c47c03 | |||
d077a76063 | |||
43d13dd1f9 | |||
072d99040f | |||
4d5968da1a | |||
5a3843cf1f | |||
5fd0f03fd4 | |||
1cd115ace5 | |||
a9f8ff1090 | |||
e114360a5f | |||
b16e60f691 | |||
f959e0387e | |||
425eb03a6e | |||
8e312204ee | |||
2e733f8594 | |||
4e308d7880 | |||
935871c39a | |||
ce6e4d2090 | |||
68a53bc5dc | |||
459d9ad74c | |||
e40a26f193 | |||
59e04dee6e | |||
5a16ea514a | |||
8d2d82764f | |||
dedb2f9fef | |||
8b89667d9d | |||
d4da2d0efa | |||
c798e4be32 | |||
1ebd50cb5b | |||
f2ab5c1968 | |||
ead1d6fffb | |||
9b81cb44fa | |||
142631c7a0 | |||
e78549fb72 | |||
431da30946 | |||
ad5ab4ca2e | |||
522f6b5fff | |||
c6789d7ce3 | |||
215b3b4e78 | |||
00c4be63f0 | |||
2e581d6bdb | |||
b20f6492a3 | |||
74b218b2a7 | |||
b219854f81 | |||
dea4a9d2a9 | |||
6d3f38e2df | |||
60c7fdd0db | |||
bce4c775bf | |||
8bed91a8dc | |||
e78420fa8e | |||
f676b3a3d6 | |||
8b4240889a | |||
262afedb08 | |||
9dbd41c830 | |||
3aab59e326 | |||
0f7a556b9c | |||
48b3c6a07d | |||
649fce6f42 | |||
b1495a8cd5 | |||
69c19d19d4 | |||
89f43229ab | |||
8235ea0f58 | |||
6bee0f3fa6 | |||
574039902d | |||
090263b279 | |||
74cca6d185 | |||
f3e3cbd45f | |||
db3015e0bc | |||
fa9b5ae87d | |||
36cf028334 | |||
488a8e934a | |||
753a2db958 | |||
37e9359c9e | |||
7b8523dcab | |||
dac011db78 | |||
41879c4603 | |||
641d75e734 | |||
e4ec90db8a | |||
d5f78351a2 | |||
ef6993c636 | |||
2d2dc22e19 | |||
db9e1c4c4f | |||
317573c897 | |||
ba8444dd85 | |||
219aad0bbc | |||
1cbaade9ab | |||
98d17433f1 | |||
11a7814626 | |||
5311db8564 | |||
ae156a4a0f | |||
9576c6b9da | |||
6c83457231 | |||
060851a4a2 | |||
671691a5ed | |||
f326755190 | |||
99edda6029 | |||
717f852680 | |||
c42d6b15c3 | |||
dfa3242aeb | |||
23762885fa | |||
60087e441d | |||
2e8d0dd9b5 | |||
966d7a7aed | |||
851fd9ae03 | |||
637d393889 | |||
2dad97bdcb | |||
90ea59cfca | |||
c695614fac | |||
304312018b | |||
3a2bfc9c24 | |||
3d0f879c12 | |||
61720b29ea | |||
75700597e6 | |||
39740e069e | |||
5739705d8a | |||
9b72610510 | |||
c4a046bd12 | |||
f520c3589c | |||
832d6432fc | |||
f4838e1233 | |||
70771ee854 | |||
9dea696c4c | |||
2398949396 | |||
57c008a697 | |||
2614044918 | |||
1aad57ba55 | |||
54610868fe | |||
4831338649 | |||
3bb7ee46bd | |||
1a9ce15e99 | |||
9063b4137f | |||
d7ae3a4391 | |||
db66c1dd02 | |||
608728b135 | |||
88eb4d7b26 | |||
58bc94d1f6 | |||
6f532683a1 | |||
6b68a12449 | |||
27bf08ad5c | |||
52b66ed506 | |||
a5350060e1 | |||
4f649234a9 | |||
96412da04e | |||
0015394582 | |||
9cb63a7c43 | |||
561fb1f7f4 | |||
3b7481c2a7 | |||
f1768bd9a5 | |||
407e19638f | |||
122cc323f2 | |||
9509993a8f | |||
25e66ae412 | |||
089952e9ad | |||
efc5a870a0 | |||
0638cae6e5 | |||
b8abc99faf | |||
e921fb66a9 | |||
e25f7a7560 | |||
c4ae9ae2ab | |||
c4153ecbfb | |||
bb6d06713f | |||
14022d88c9 | |||
d4966b5e71 | |||
b3840e60e3 | |||
3ece45b3d4 | |||
6b7678fb1d | |||
6c25cf8e43 | |||
c4c28f544f | |||
3b050a856a | |||
71d9c4b61a | |||
a8118a14cd | |||
5f3dff4921 | |||
208aa42fdb | |||
cd3fb8040f | |||
9d5fa6f4ef | |||
6797033a09 | |||
9eee726eb5 | |||
4e371b63d0 | |||
edd6b7d7cf | |||
5de82c0a06 | |||
71f2d2968f | |||
0d7daf60d9 | |||
bb80e11665 | |||
8088465652 | |||
035c8662d4 | |||
a831d949b2 | |||
4c45a1e68c | |||
f79ad452d2 | |||
59076fc9ef | |||
b6aa677594 | |||
681a20a7c3 | |||
c5ec2d40a1 | |||
b5e5dd1d13 | |||
9c0b7f8233 | |||
5dd6b31905 | |||
f40b6ffd31 | |||
7313fc6c08 |
7
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
# Maintain dependencies for GitHub Actions
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
58
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
name: "Build"
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- '.txt'
|
||||||
|
- '*.MD'
|
||||||
|
- '*.md'
|
||||||
|
- 'LICENSE'
|
||||||
|
- 'docs/**'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- release/*
|
||||||
|
tags-ignore:
|
||||||
|
- '*'
|
||||||
|
paths-ignore:
|
||||||
|
- '.txt'
|
||||||
|
- '*.MD'
|
||||||
|
- '*.md'
|
||||||
|
- 'LICENSE'
|
||||||
|
- 'docs/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
java: [15]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up JDK ${{ matrix.java }}
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: 'zulu'
|
||||||
|
java-version: ${{ matrix.java }}
|
||||||
|
architecture: x64
|
||||||
|
- name: Cache Maven packages
|
||||||
|
uses: actions/cache@v2.1.5
|
||||||
|
with:
|
||||||
|
path: ~/.m2
|
||||||
|
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
|
restore-keys: ${{ runner.os }}-m2
|
||||||
|
- name: Build with Maven
|
||||||
|
run: mvn clean install
|
||||||
|
|
||||||
|
notify-slack:
|
||||||
|
if: github.event_name == 'push' && (success() || failure())
|
||||||
|
needs:
|
||||||
|
- build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: "Slack workflow notification"
|
||||||
|
uses: Gamesight/slack-workflow-status@master
|
||||||
|
with:
|
||||||
|
repo_token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
slack_webhook_url: ${{secrets.SLACK_WEBHOOK_URL}}
|
19
.github/workflows/rebase.yml
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
name: "Automatic Rebase"
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
jobs:
|
||||||
|
rebase:
|
||||||
|
name: Rebase
|
||||||
|
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') && github.event.comment.author_association == 'MEMBER'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout the latest code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
fetch-depth: 0 # otherwise, you will fail to push refs to dest repo
|
||||||
|
- name: Automatic Rebase
|
||||||
|
uses: cirrus-actions/rebase@1.4
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
131
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
name: "Release Pipeline"
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- v*
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
name: Release WebGoat
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: release
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2.3.4
|
||||||
|
|
||||||
|
- name: "Get tag name"
|
||||||
|
id: tag
|
||||||
|
uses: dawidd6/action-get-tag@v1
|
||||||
|
|
||||||
|
- name: Set up JDK 15
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: 'zulu'
|
||||||
|
java-version: 15
|
||||||
|
architecture: x64
|
||||||
|
|
||||||
|
- name: Cache Maven packages
|
||||||
|
uses: actions/cache@v2.1.5
|
||||||
|
with:
|
||||||
|
path: ~/.m2
|
||||||
|
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
|
restore-keys: ${{ runner.os }}-m2
|
||||||
|
|
||||||
|
- name: "Set labels for ${{ github.ref }}"
|
||||||
|
run: |
|
||||||
|
echo "WEBGOAT_TAG_VERSION=${{ steps.tag.outputs.tag }}" >> $GITHUB_ENV
|
||||||
|
WEBGOAT_MAVEN_VERSION=${{ steps.tag.outputs.tag }}
|
||||||
|
echo "WEBGOAT_MAVEN_VERSION=${WEBGOAT_MAVEN_VERSION:1}" >> $GITHUB_ENV
|
||||||
|
- name: Build with Maven
|
||||||
|
run: |
|
||||||
|
mvn versions:set -DnewVersion=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||||
|
mvn clean install -DskipTests
|
||||||
|
|
||||||
|
- name: "Create release"
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
draft: false
|
||||||
|
files: |
|
||||||
|
webgoat-server/target/webgoat-server-${{ env.WEBGOAT_MAVEN_VERSION }}.jar
|
||||||
|
webwolf/target/webwolf-${{ env.WEBGOAT_MAVEN_VERSION }}.jar
|
||||||
|
body: |
|
||||||
|
## Version ${{ steps.tag.outputs.tag }}
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- test
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
|
||||||
|
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
Special thanks to the following contributors providing us with a pull request:
|
||||||
|
|
||||||
|
- Person 1
|
||||||
|
- Person 2
|
||||||
|
|
||||||
|
And everyone who provided feedback through Github.
|
||||||
|
|
||||||
|
|
||||||
|
Team WebGoat
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: "Set up QEMU"
|
||||||
|
uses: docker/setup-qemu-action@v1.1.0
|
||||||
|
|
||||||
|
- name: "Set up Docker Buildx"
|
||||||
|
uses: docker/setup-buildx-action@v1
|
||||||
|
|
||||||
|
- name: "Login to dockerhub"
|
||||||
|
uses: docker/login-action@v1.9.0
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: "Build and push"
|
||||||
|
uses: docker/build-push-action@v2.4.0
|
||||||
|
with:
|
||||||
|
context: ./docker
|
||||||
|
file: docker/Dockerfile
|
||||||
|
push: false #todo enable
|
||||||
|
platforms: linux/amd64
|
||||||
|
tags: |
|
||||||
|
webgoat/goatandwolf:${{ env.WEBGOAT_TAG_VERSION }}
|
||||||
|
webgoat/goatandwolf:latest
|
||||||
|
build-args: |
|
||||||
|
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||||
|
|
||||||
|
- name: "Image digest"
|
||||||
|
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||||
|
new_version:
|
||||||
|
name: Update development version
|
||||||
|
needs: [ release ]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: release
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
ref: develop
|
||||||
|
token: ${{ secrets.WEBGOAT_DEPLOYER_TOKEN }}
|
||||||
|
|
||||||
|
- name: Set up JDK 15
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
java-version: 15
|
||||||
|
architecture: x64
|
||||||
|
|
||||||
|
- name: Set version to next snapshot
|
||||||
|
run: |
|
||||||
|
mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion}-SNAPSHOT versions:commit
|
||||||
|
|
||||||
|
- name: Commit pom.xml
|
||||||
|
run: |
|
||||||
|
git config user.name webgoat-github
|
||||||
|
git config user.email owasp.webgoat@gmail.com
|
||||||
|
find . -name 'pom.xml' | xargs git add
|
||||||
|
git commit -m "Updating to the new development version"
|
||||||
|
git push
|
13
.github/workflows/welcome.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
name: Welcome
|
||||||
|
|
||||||
|
on: [pull_request, issues]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
greeting:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/first-interaction@v1.1.0
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
issue-message: 'Thanks for submitting your first issue, we will have a look as quickly as possible.'
|
||||||
|
pr-message: 'Thanks so much for your contribution, really appreciated! We will have a look and merge it if everything checks out!'
|
3
.gitignore
vendored
@ -15,6 +15,7 @@
|
|||||||
/.externalToolBuilders/
|
/.externalToolBuilders/
|
||||||
.project
|
.project
|
||||||
*/target/*
|
*/target/*
|
||||||
|
*.pmd
|
||||||
mongo-data/*
|
mongo-data/*
|
||||||
.classpath
|
.classpath
|
||||||
.idea/
|
.idea/
|
||||||
@ -52,3 +53,5 @@ webgoat.log
|
|||||||
webgoat.properties
|
webgoat.properties
|
||||||
webgoat.script
|
webgoat.script
|
||||||
TestClass.class
|
TestClass.class
|
||||||
|
**/*.flattened-pom.xml
|
||||||
|
/.gitconfig
|
||||||
|
4
.mvn/wrapper/maven-wrapper.properties
vendored
@ -1,2 +1,2 @@
|
|||||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.2.1/apache-maven-3.2.1-bin.zip
|
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip
|
||||||
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar
|
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
|
||||||
|
47
.travis.yml
@ -1,47 +0,0 @@
|
|||||||
services:
|
|
||||||
- docker
|
|
||||||
language: java
|
|
||||||
jdk:
|
|
||||||
- openjdk11
|
|
||||||
install: "/bin/true"
|
|
||||||
script:
|
|
||||||
- export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
|
|
||||||
- echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
|
|
||||||
- if [ ! -z "${TRAVIS_TAG}" ]; then mvn versions:set -DnewVersion=${TRAVIS_TAG:1}; fi
|
|
||||||
- mvn clean install -q
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- "$HOME/.m2"
|
|
||||||
before_deploy:
|
|
||||||
- export WEBGOAT_SERVER_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webgoat-server/target
|
|
||||||
- export WEBWOLF_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webwolf/target
|
|
||||||
- export WEBGOAT_ARTIFACTS_FOLDER=$HOME/build/$TRAVIS_REPO_SLUG/Deployable_Artifacts/
|
|
||||||
- mkdir -p $WEBGOAT_ARTIFACTS_FOLDER
|
|
||||||
- cp -fa $WEBGOAT_SERVER_TARGET_DIR/*.jar $WEBGOAT_ARTIFACTS_FOLDER/
|
|
||||||
- cp -fa $WEBWOLF_TARGET_DIR/*.jar $WEBGOAT_ARTIFACTS_FOLDER/
|
|
||||||
- echo "Contents of artifacts folder:"
|
|
||||||
- ls $WEBGOAT_ARTIFACTS_FOLDER
|
|
||||||
deploy:
|
|
||||||
- provider: script
|
|
||||||
skip_cleanup: true
|
|
||||||
script: bash scripts/deploy-webgoat.sh
|
|
||||||
on:
|
|
||||||
repo: WebGoat/WebGoat
|
|
||||||
tags: true
|
|
||||||
- provider: releases
|
|
||||||
skip_cleanup: true
|
|
||||||
overwrite: true
|
|
||||||
api_key:
|
|
||||||
#api-key from webgoat-github user
|
|
||||||
secure: pJOLBnl6427PcVg/tVy/qB18JC7b8cKpffau+IP0pjdSt7KUfBdBY3QuJ7mrM65zRoVILzggLckaew2PlRmYQRdumyWlyRn44XiJ9KO4n6Bsufbz+ictB4ggtozpp9+I9IIUh1TmqypL9lhkX2ONM9dSHmyblYpAAgMuYSK8FYc=
|
|
||||||
file_glob: true
|
|
||||||
file: $WEBGOAT_ARTIFACTS_FOLDER/*
|
|
||||||
on:
|
|
||||||
repo: WebGoat/WebGoat
|
|
||||||
tags: true
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
#Docker login
|
|
||||||
- secure: XgPc0UKRTUI70I4YWNQpThPPWeQIxkmzh1GNoR/SSDC2GPIBq3EfkkbSQewqil8stTy+S1/xSzc0JXG8NTn7UOxHVHA/2nhI6jX9E+DKtXQ89YwmaDNQjkbMjziAtDCIex+5TRykxNfkxj6VPYbDssrzI7iJXOIZVj/HoyO3O5E=
|
|
||||||
#Docker password
|
|
||||||
- secure: aly5TKBUK9sIiqtMbytNNPZHQhC0a7Yond5tEtuJ8fO+j/KZB4Uro3I6BhzYjGWFb5Kndd0j2TXHPFvtOl402J1CmFsY3v0BhilQd0g6zOssp5T0A73m8Jgq4ItV8wQJJy2bQsXqL1B+uFYieYPiMchj7JxWW0vBn7TV5b68l6U=
|
|
19
COPYRIGHT.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
This file is part of WebGoat, an Open Web Application Security Project utility. For details, please see http://www.owasp.org/
|
||||||
|
|
||||||
|
Copyright (c) 2002 - $today.year Bruce Mayhew
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||||
|
GNU General Public License as published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
|
||||||
|
even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with this program; if
|
||||||
|
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
02111-1307, USA.
|
||||||
|
|
||||||
|
Getting Source ==============
|
||||||
|
|
||||||
|
Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects.
|
@ -5,7 +5,11 @@
|
|||||||
|
|
||||||
For WebGoat we use milestone releases first before we release the official version, we use `v8.0.0.M3` while tagging
|
For WebGoat we use milestone releases first before we release the official version, we use `v8.0.0.M3` while tagging
|
||||||
and 8.0.0.M3 in the `pom.xml`. When we create the final release we remove the milestone release and use
|
and 8.0.0.M3 in the `pom.xml`. When we create the final release we remove the milestone release and use
|
||||||
`v8.0.0` and 8.0.0 in the `pom.xml`
|
`v8.0.0` in the `pom.xml`
|
||||||
|
|
||||||
|
### Release notes:
|
||||||
|
Update the release notes with the correct version. Use `git shortlog -s -n --since "SEP 31 2019"` for the list of
|
||||||
|
committers.
|
||||||
|
|
||||||
At the moment we use Gitflow, for a release you create a new release branch and take the following steps:
|
At the moment we use Gitflow, for a release you create a new release branch and take the following steps:
|
||||||
|
|
||||||
|
81
README.MD
@ -3,9 +3,9 @@
|
|||||||
[](https://travis-ci.org/WebGoat/WebGoat)
|
[](https://travis-ci.org/WebGoat/WebGoat)
|
||||||
[](https://coveralls.io/github/WebGoat/WebGoat?branch=master)
|
[](https://coveralls.io/github/WebGoat/WebGoat?branch=master)
|
||||||
[](https://www.codacy.com/app/dm/WebGoat)
|
[](https://www.codacy.com/app/dm/WebGoat)
|
||||||
[](https://www.versioneye.com/user/projects/562da95ae346d7000e0369aa)
|
[](https://www.owasp.org/index.php/OWASP_Project_Inventory#tab=Labs_Projects)
|
||||||
[](https://www.owasp.org/index.php/OWASP_Project_Inventory#tab=Labs_Projects)
|
[](https://github.com/WebGoat/WebGoat/releases/latest)
|
||||||
[](https://github.com/WebGoat/WebGoat/releases/latest)
|
[](https://gitter.im/OWASPWebGoat/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
@ -29,42 +29,50 @@ first thing that all hackers claim.*
|
|||||||
|
|
||||||
# Installation Instructions:
|
# Installation Instructions:
|
||||||
|
|
||||||
## 1. Standalone
|
## 1. Run using Docker
|
||||||
|
|
||||||
Download the latest WebGoat release from [https://github.com/WebGoat/WebGoat/releases](https://github.com/WebGoat/WebGoat/releases)
|
|
||||||
|
|
||||||
```Shell
|
|
||||||
java -jar webgoat-server-8.0.0.VERSION.jar [--server.port=8080] [--server.address=localhost]
|
|
||||||
```
|
|
||||||
|
|
||||||
The latest version of WebGoat needs Java 11. By default WebGoat starts on port 8080 with `--server.port` you can specify a different port. With `server.address` you
|
|
||||||
can bind it to a different address (default localhost)
|
|
||||||
|
|
||||||
|
|
||||||
## 2. Run using Docker
|
|
||||||
|
|
||||||
Every release is also published on [DockerHub]((https://hub.docker.com/r/webgoat/webgoat-8.0/)).
|
Every release is also published on [DockerHub]((https://hub.docker.com/r/webgoat/webgoat-8.0/)).
|
||||||
|
|
||||||
### Using docker-compose
|
### Using docker run
|
||||||
|
|
||||||
The easiest way to start WebGoat as a Docker container is to use the `docker-compose.yml` [file](https://raw.githubusercontent.com/WebGoat/WebGoat/develop/docker-compose.yml)
|
The easiest way to start WebGoat as a Docker container is to use the all-in-one docker container. This is a docker image that has WebGoat and WebWolf running inside.
|
||||||
from our Github repository. This will start both containers and it also takes care of setting up the
|
|
||||||
connection between WebGoat and WebWolf.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
curl https://raw.githubusercontent.com/WebGoat/WebGoat/develop/docker-compose.yml | docker-compose -f - up
|
docker run -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e TZ=Europe/Amsterdam webgoat/goatandwolf
|
||||||
```
|
```
|
||||||
|
|
||||||
**Important**: the current directory on your host will be mapped into the container for keeping state.
|
WebGoat will be located at: http://127.0.0.1:8080/WebGoat
|
||||||
|
WebWolf will be located at: http://127.0.0.1:9090/WebWolf
|
||||||
|
|
||||||
Using the `docker-compose` file will simplify getting WebGoat and WebWolf up and running.
|
**Important**: Choose the correct timezone, so that the docker container and your host are in the same timezone. As it is important for the validity of JWT tokens used in certain exercises.
|
||||||
|
|
||||||
|
|
||||||
|
## 2. Standalone
|
||||||
|
|
||||||
|
Download the latest WebGoat and WebWolf release from [https://github.com/WebGoat/WebGoat/releases](https://github.com/WebGoat/WebGoat/releases)
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
java -jar webgoat-server-8.1.0.jar [--server.port=8080] [--server.address=localhost]
|
||||||
|
java -jar webwolf-8.1.0.jar [--server.port=9090] [--server.address=localhost]
|
||||||
|
```
|
||||||
|
|
||||||
|
The latest version of WebGoat needs Java 15 or above. By default, WebGoat and Webwolf start on port 8080, 9000 and 9090 with the environment variable WEBGOAT_PORT, WEBGOAT_HSQLPORT and WEBWOLF_PORT you can set different values.
|
||||||
|
```Shell
|
||||||
|
export WEBGOAT_PORT=18080
|
||||||
|
export WEBGOAT_HSQLPORT=19001
|
||||||
|
export WEBWOLF_PORT=19090
|
||||||
|
java -jar webgoat-server-8.1.0.jar
|
||||||
|
java -jar webwolf-8.1.0.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `set` instead of export if you're using Windows cmd.
|
||||||
|
|
||||||
|
|
||||||
## 3. Run from the sources
|
## 3. Run from the sources
|
||||||
|
|
||||||
### Prerequisites:
|
### Prerequisites:
|
||||||
|
|
||||||
* Java 11
|
* Java 15
|
||||||
* Maven > 3.2.1
|
* Maven > 3.2.1
|
||||||
* Your favorite IDE
|
* Your favorite IDE
|
||||||
* Git, or Git support in your IDE
|
* Git, or Git support in your IDE
|
||||||
@ -91,26 +99,23 @@ mvn -pl webgoat-server spring-boot:run
|
|||||||
... you should be running webgoat on localhost:8080/WebGoat momentarily
|
... you should be running webgoat on localhost:8080/WebGoat momentarily
|
||||||
|
|
||||||
|
|
||||||
To change IP address add the following variable to WebGoat/webgoat-container/src/main/resources/application.properties file
|
To change the IP address add the following variable to the WebGoat/webgoat-container/src/main/resources/application.properties file:
|
||||||
|
|
||||||
```
|
```
|
||||||
server.address=x.x.x.x
|
server.address=x.x.x.x
|
||||||
```
|
```
|
||||||
|
|
||||||
# Building a new Docker image
|
## 4. Run with custom menu
|
||||||
|
|
||||||
NOTE: Travis will create a new Docker image automatically when making a new release.
|
For specialist only. There is a way to set up WebGoat with a personalized menu. You can leave out some menu categories or individual lessons by setting certain environment variables.
|
||||||
|
|
||||||
|
For instance running as a jar on a Linux/macOS it will look like this:
|
||||||
```Shell
|
```Shell
|
||||||
cd WebGoat/
|
export EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE"
|
||||||
mvn install
|
export EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations"
|
||||||
cd webgoat-server
|
java -jar webgoat-server/target/webgoat-server-v8.2.0-SNAPSHOT.jar
|
||||||
docker build -t webgoat/webgoat-8.0 .
|
```
|
||||||
docker tag webgoat/webgoat-8.0 webgoat/webgoat-8.0:8.0
|
Or in a docker run it would (once this version is pushed into docker hub) look like this:
|
||||||
docker login
|
```Shell
|
||||||
docker push webgoat/webgoat-8.0
|
docker run -d -p 80:8888 -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam -e EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE" -e EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations" webgoat/goatandwolf
|
||||||
```
|
```
|
||||||
|
|
||||||
# Run Instructions:
|
|
||||||
|
|
||||||
Once installed connect to http://localhost:8080/WebGoat and http://localhost:9090/WebWolf
|
|
||||||
|
89
RELEASE_NOTES.md
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# WebGoat release notes
|
||||||
|
|
||||||
|
## Version 8.2.0
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- Add new zip slip lesson (part of path traversal)
|
||||||
|
- SQL lessons are now separate for each user, database are now per user and no longer shared across users
|
||||||
|
- Moved to Java 15 & Spring Boot 2.4 & moved to JUnit 5
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- [#974 SQL injection Intro 5 not solvable](https://github.com/WebGoat/WebGoat/issues/974)
|
||||||
|
- [#962 SQL-Lesson 5 (Advanced) Solvable with wrong anwser](https://github.com/WebGoat/WebGoat/issues/962)
|
||||||
|
- [#961 SQl-Injection lesson 4 not deleting created row](https://github.com/WebGoat/WebGoat/issues/961)
|
||||||
|
- [#949 Challenge: Admin password reset always solvable](https://github.com/WebGoat/WebGoat/issues/949)
|
||||||
|
- [#923 - Upgrade to Java 15](https://github.com/WebGoat/WebGoat/issues/923)
|
||||||
|
- [#922 - Vulnerable components lesson](https://github.com/WebGoat/WebGoat/issues/922)
|
||||||
|
- [#891 - Update the OWASP website with the new all-in-one Docker container](https://github.com/WebGoat/WebGoat/issues/891)
|
||||||
|
- [#844 - Suggestion: Update navigation](https://github.com/WebGoat/WebGoat/issues/844)
|
||||||
|
- [#843 - Bypass front-end restrictions: Field restrictions - confusing text in form](https://github.com/WebGoat/WebGoat/issues/843)
|
||||||
|
- [#841 - XSS - Reflected XSS confusing instruction and success messages](https://github.com/WebGoat/WebGoat/issues/841)
|
||||||
|
- [#839 - SQL Injection (mitigation) Order by clause confusing](https://github.com/WebGoat/WebGoat/issues/839)
|
||||||
|
- [#838 - SQL mitigation (filtering) can only be passed by updating table](https://github.com/WebGoat/WebGoat/issues/838)
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
Special thanks to the following contributors providing us with a pull request:
|
||||||
|
|
||||||
|
- nicholas-quirk
|
||||||
|
- VijoPlays
|
||||||
|
- aolle
|
||||||
|
- trollingHeifer
|
||||||
|
- maximmasiutin
|
||||||
|
- toshihue
|
||||||
|
- avivmu
|
||||||
|
- KellyMarchewa
|
||||||
|
- NatasG
|
||||||
|
- gabe-sky
|
||||||
|
|
||||||
|
|
||||||
|
## Version 8.1.0
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- Added new lessons for cryptography and path-traversal
|
||||||
|
- Extra content added to the XXE lesson
|
||||||
|
- Explanation of the assignments will be part of WebGoat, in this release we added detailed descriptions on how to solve the XXE lesson. In the upcoming releases new explanations will be added. If you want to contribute please create a pull request on Github.
|
||||||
|
- Docker improvements + docker stack for complete container with nginx
|
||||||
|
- Included JWT token decoding and generation, since jwt.io does not support None anymore
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
|
||||||
|
- [#811 - Flag submission fails](https://github.com/WebGoat/WebGoat/issues/811)
|
||||||
|
- [#810 - Scoreboard for challenges shows csrf users](https://github.com/WebGoat/WebGoat/issues/810)
|
||||||
|
- [#788 - strange copy in constructor](https://github.com/WebGoat/WebGoat/issues/788)
|
||||||
|
- [#760 - Execution of standalone jar fails (Flyway migration step](https://github.com/WebGoat/WebGoat/issues/760)
|
||||||
|
- [#766 - Unclear objective of vulnerable components practical assignment](https://github.com/WebGoat/WebGoat/issues/766)
|
||||||
|
- [#708 - Seems like the home directory of WebGoat always use @project.version@](https://github.com/WebGoat/WebGoat/issues/708)
|
||||||
|
- [#719 - WebGoat: 'Contact Us' email link in header is not correctly set](https://github.com/WebGoat/WebGoat/issues/719)
|
||||||
|
- [#715 - Reset lesson doesn't reset the "HTML lesson" => forms stay succesful](https://github.com/WebGoat/WebGoat/issues/715)
|
||||||
|
- [#725 - Vulnerable Components lesson 12 broken due to too new dependency](https://github.com/WebGoat/WebGoat/issues/725)
|
||||||
|
- [#716 - On M26 @project.version@ is not "interpreted" #7](https://github.com/WebGoat/WebGoat/issues/716)
|
||||||
|
- [#721 couldn't be able to run CSRF lesson 3: Receive Whitelabel Error Page](https://github.com/WebGoat/WebGoat/issues/721)
|
||||||
|
- [#724 - Dead link in VulnerableComponents lesson 11](https://github.com/WebGoat/WebGoat/issues/724)
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
Special thanks to the following contributors providing us with a pull request:
|
||||||
|
|
||||||
|
- Satoshi SAKAO
|
||||||
|
- Philippe Lafoucrière
|
||||||
|
- Cotonne
|
||||||
|
- Tiago Mussi
|
||||||
|
- thegoodcrumpets
|
||||||
|
- Atharva Vaidya
|
||||||
|
- torleif
|
||||||
|
- August Detlefsen
|
||||||
|
- Choe Hyeong Jin
|
||||||
|
|
||||||
|
And everyone who provided feedback through Github.
|
||||||
|
|
||||||
|
|
||||||
|
Team WebGoat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
version: 0.1
|
|
||||||
|
|
||||||
phases:
|
|
||||||
build:
|
|
||||||
commands:
|
|
||||||
- mvn package
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
files:
|
|
||||||
- webgoat-server/target/webgoat-server-8.0-SNAPSHOT.jar
|
|
||||||
discard-paths: yes
|
|
||||||
|
|
42
config/dependency-check/project-suppression.xml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
|
||||||
|
<suppress base="true">
|
||||||
|
<notes><![CDATA[
|
||||||
|
This suppresses false positives identified on spring framework.
|
||||||
|
]]></notes>
|
||||||
|
<cpe>cpe:/a:pivotal_software:spring_framework</cpe>
|
||||||
|
<cve>CVE-2020-5398</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress base="true">
|
||||||
|
<notes><![CDATA[
|
||||||
|
This suppresses false positives identified on spring framework.
|
||||||
|
]]></notes>
|
||||||
|
<cpe>cpe:/a:redhat:undertow</cpe>
|
||||||
|
<cve>CVE-2019-14888</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress base="true">
|
||||||
|
<notes><![CDATA[
|
||||||
|
This suppresses false positives identified on spring framework.
|
||||||
|
]]></notes>
|
||||||
|
<cpe>cpe:/a:pivotal_software:spring_security</cpe>
|
||||||
|
<cve>CVE-2018-1258</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress base="true">
|
||||||
|
<cpe>cpe:/a:jruby:jruby</cpe>
|
||||||
|
<cve>CVE-2018-1000613</cve>
|
||||||
|
<cve>CVE-2018-1000180</cve>
|
||||||
|
<cve>CVE-2017-18640</cve>
|
||||||
|
<cve>CVE-2011-4838</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress base="true"><!-- vulnerable components lesson -->
|
||||||
|
<cpe>cpe:/a:xstream_project:xstream</cpe>
|
||||||
|
<cve>CVE-2017-7957</cve>
|
||||||
|
<cve>CVE-2016-3674</cve>
|
||||||
|
<cve>CVE-2020-26217</cve>
|
||||||
|
<cve>CVE-2020-26258</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress base="true"><!-- webgoat-server -->
|
||||||
|
<cpe>cpe:/a:postgresql:postgresql</cpe>
|
||||||
|
<cve>CVE-2018-10936</cve>
|
||||||
|
</suppress>
|
||||||
|
</suppressions>
|
1746
config/pmd/pmd-ruleset.xml
Normal file
@ -1,13 +0,0 @@
|
|||||||
version: '2.1'
|
|
||||||
|
|
||||||
services:
|
|
||||||
webgoat:
|
|
||||||
image: webgoat/webgoat-v8.0.0.snapshot
|
|
||||||
extends:
|
|
||||||
file: docker-compose.yml
|
|
||||||
service: webgoat
|
|
||||||
webwolf:
|
|
||||||
extends:
|
|
||||||
file: docker-compose.yml
|
|
||||||
service: webwolf
|
|
||||||
image: webgoat/webwolf-v8.0.0.snapshot
|
|
@ -1,40 +0,0 @@
|
|||||||
version: '2.0'
|
|
||||||
|
|
||||||
services:
|
|
||||||
webgoat:
|
|
||||||
image: webgoat/webgoat-8.0
|
|
||||||
user: webgoat
|
|
||||||
environment:
|
|
||||||
- WEBWOLF_HOST=webwolf
|
|
||||||
- WEBWOLF_PORT=9090
|
|
||||||
- spring.datasource.url=jdbc:postgresql://webgoat_db:5432/webgoat?user=webgoat&password=webgoat
|
|
||||||
- spring.datasource.username=webgoat
|
|
||||||
- spring.datasource.password=webgoat
|
|
||||||
- spring.datasource.driver-class-name=org.postgresql.Driver
|
|
||||||
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL94Dialect
|
|
||||||
- webgoat.server.directory=/home/webgoat/.webgoat/
|
|
||||||
- webgoat.user.directory=/home/webgoat/.webgoat/
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
webwolf:
|
|
||||||
image: webgoat/webwolf
|
|
||||||
environment:
|
|
||||||
- spring.datasource.url=jdbc:postgresql://webgoat_db:5432/webgoat?user=webgoat&password=webgoat
|
|
||||||
- spring.datasource.username=webgoat
|
|
||||||
- spring.datasource.password=webgoat
|
|
||||||
- spring.datasource.driver-class-name=org.postgresql.Driver
|
|
||||||
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL94Dialect
|
|
||||||
ports:
|
|
||||||
- "9090:9090"
|
|
||||||
webgoat_db:
|
|
||||||
image: postgres:9.4
|
|
||||||
# Uncomment to store the state of the database on the host.
|
|
||||||
# volumes:
|
|
||||||
# - ./database:/var/lib/postgresql
|
|
||||||
environment:
|
|
||||||
- POSTGRES_PASSWORD=webgoat
|
|
||||||
- POSTGRES_USER=webgoat
|
|
||||||
- POSTGRES_DB=webgoat
|
|
||||||
ports:
|
|
||||||
- "5432:5432"
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
version: '2.1'
|
|
||||||
|
|
||||||
services:
|
|
||||||
webgoat:
|
|
||||||
image: webgoat/webgoat-8.0
|
|
||||||
environment:
|
|
||||||
- WEBWOLF_HOST=webwolf
|
|
||||||
- WEBWOLF_PORT=9090
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
- "9001:9001"
|
|
||||||
volumes:
|
|
||||||
- .:/home/webgoat/.webgoat
|
|
||||||
webwolf:
|
|
||||||
image: webgoat/webwolf
|
|
||||||
ports:
|
|
||||||
- "9090:9090"
|
|
||||||
command: --spring.datasource.url=jdbc:hsqldb:hsql://webgoat:9001/webgoat --server.address=0.0.0.0
|
|
29
docker/Dockerfile
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
FROM openjdk:15.0.2-slim
|
||||||
|
|
||||||
|
ARG webgoat_version=8.2.0-SNAPSHOT
|
||||||
|
ENV webgoat_version_env=${webgoat_version}
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN useradd -ms /bin/bash webgoat
|
||||||
|
RUN apt-get -y install apt-utils nginx
|
||||||
|
|
||||||
|
USER webgoat
|
||||||
|
|
||||||
|
COPY --chown=webgoat nginx.conf /etc/nginx/nginx.conf
|
||||||
|
COPY --chown=webgoat index.html /usr/share/nginx/html/
|
||||||
|
COPY --chown=webgoat target/webgoat-server-${webgoat_version}.jar /home/webgoat/webgoat.jar
|
||||||
|
COPY --chown=webgoat target/webwolf-${webgoat_version}.jar /home/webgoat/webwolf.jar
|
||||||
|
COPY --chown=webgoat start.sh /home/webgoat
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
EXPOSE 9090
|
||||||
|
|
||||||
|
ENV WEBGOAT_PORT 8080
|
||||||
|
ENV WEBGOAT_SSLENABLED false
|
||||||
|
|
||||||
|
ENV GOATURL https://127.0.0.1:$WEBGOAT_PORT
|
||||||
|
ENV WOLFURL http://127.0.0.1:9090
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR /home/webgoat
|
||||||
|
ENTRYPOINT /bin/bash /home/webgoat/start.sh $webgoat_version_env
|
13
docker/Readme.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Docker all-in-one image
|
||||||
|
|
||||||
|
## Docker build
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker build --no-cache --build-arg webgoat_version=8.2.0-SNAPSHOT -t webgoat/goatandwolf:latest .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker run
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run -p 80:8888 -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam webgoat/goatandwolf:latest
|
||||||
|
```
|
43
docker/index.html
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<h1>OWASP WebGoat Training tools</h1>
|
||||||
|
<p>
|
||||||
|
Use the following links to access the WebGoat and WebWolf applications.
|
||||||
|
Register a user using WebGoat. The same user can access WebWolf.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Use without special host name entries</h2>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>WebGoat URL</td>
|
||||||
|
<td><a href="http://127.0.0.1:8080/WebGoat" target="_blank">http://127.0.0.1:8080/WebGoat</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WebWolf URL</td>
|
||||||
|
<td><a href="http://127.0.0.1:9090/WebWolf" target="_blank">http://127.0.0.1:9090/WebWolf</a></td>
|
||||||
|
</tr>
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<h2>Use with www.webgoat.local and www.webwolf.local</h2>
|
||||||
|
<p>
|
||||||
|
Add the following entries to your local <b><i>hosts</i></b> file on Windows (c:\Windows\System32\drivers\etc\hosts) or Linux (/etc/hosts)
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
127.0.0.1 www.webgoat.local www.webwolf.local
|
||||||
|
</pre>
|
||||||
|
Then use the following URL's:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>WebGoat URL</td>
|
||||||
|
<td><a href="http://www.webgoat.local/WebGoat" target="_blank">http://www.webgoat.local/WebGoat</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WebWolf URL</td>
|
||||||
|
<td><a href="http://www.webwolf.local/WebWolf" target="_blank">http://www.webwolf.local/WebWolf</a></td>
|
||||||
|
</tr>
|
||||||
|
<table>
|
||||||
|
</body>
|
||||||
|
</html>
|
140
docker/nginx.conf
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
error_log /tmp/error.log;
|
||||||
|
pid /tmp/nginx.pid;
|
||||||
|
|
||||||
|
worker_processes 1;
|
||||||
|
|
||||||
|
events { worker_connections 1024; }
|
||||||
|
|
||||||
|
http {
|
||||||
|
|
||||||
|
client_body_temp_path /tmp/client_body;
|
||||||
|
fastcgi_temp_path /tmp/fastcgi_temp;
|
||||||
|
proxy_temp_path /tmp/proxy_temp;
|
||||||
|
scgi_temp_path /tmp/scgi_temp;
|
||||||
|
uwsgi_temp_path /tmp/uwsgi_temp;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
|
||||||
|
upstream docker-webgoat {
|
||||||
|
server 127.0.0.1:8080;
|
||||||
|
}
|
||||||
|
|
||||||
|
upstream docker-webwolf {
|
||||||
|
server 127.0.0.1:9090;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Host $server_name;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 8888;
|
||||||
|
server_name www.webgoat.local;
|
||||||
|
|
||||||
|
root /var/www;
|
||||||
|
|
||||||
|
access_log /tmp/goataccess.log;
|
||||||
|
error_log /tmp/goaterror.log;
|
||||||
|
|
||||||
|
location ~* \.(png|jpg|jpeg|gif|ico|woff|otf|ttf|mvc|svg|txt|pdf|docx?|xlsx?)$ {
|
||||||
|
access_log off;
|
||||||
|
proxy_pass http://docker-webgoat;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html;
|
||||||
|
add_header Cache-Control no-cache;
|
||||||
|
expires 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /WebGoat {
|
||||||
|
proxy_pass http://docker-webgoat;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 8888;
|
||||||
|
server_name www.webwolf.local;
|
||||||
|
|
||||||
|
root /var/www;
|
||||||
|
|
||||||
|
access_log /tmp/wolfaccess.log;
|
||||||
|
error_log /tmp/wolferror.log;
|
||||||
|
|
||||||
|
location /WebGoat/PasswordReset/ForgotPassword/create-password-reset-link {
|
||||||
|
proxy_pass http://docker-webgoat;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /PasswordReset/reset/reset-password {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /files {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /tmpdir {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /webjars {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /css {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /login {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /images {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /mail {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /upload {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /js {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /landing {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /logout {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /WebWolf {
|
||||||
|
proxy_pass http://docker-webwolf;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
40
docker/pom.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>webgoat-all-in-one-docker</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.owasp.webgoat</groupId>
|
||||||
|
<artifactId>webgoat-parent</artifactId>
|
||||||
|
<version>8.2.0</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>install</phase>
|
||||||
|
<configuration>
|
||||||
|
<target>
|
||||||
|
<copy file="../webgoat-server/target/webgoat-server-${project.version}.jar" tofile="target/webgoat-server-${project.version}.jar"/>
|
||||||
|
<copy file="../webwolf/target/webwolf-${project.version}.jar" tofile="target/webwolf-${project.version}.jar"/>
|
||||||
|
</target>
|
||||||
|
</configuration>
|
||||||
|
<goals>
|
||||||
|
<goal>run</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
16
docker/start.sh
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cd /home/webgoat
|
||||||
|
service nginx start
|
||||||
|
sleep 1
|
||||||
|
echo "Starting WebGoat..."
|
||||||
|
java -Duser.home=/home/webgoat -Dfile.encoding=UTF-8 -jar webgoat.jar --webgoat.build.version=$1 --server.address=0.0.0.0 > webgoat.log &
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
echo "Starting WebWolf..."
|
||||||
|
java -Duser.home=/home/webgoat -Dfile.encoding=UTF-8 -jar webwolf.jar --webgoat.build.version=$1 --server.address=0.0.0.0 > webwolf.log &
|
||||||
|
|
||||||
|
echo "Browse to http://localhost" to get started >> webgoat.log
|
||||||
|
|
||||||
|
tail -300f webgoat.log
|
21
docs/LICENSE
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013-2019 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
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
@ -1,20 +1,5 @@
|
|||||||
# WebGoat landing page
|
# WebGoat landing page
|
||||||
|
|
||||||
This serves the Github pages for the landing page of WebGoat.
|
Old Github page which now redirects to OWASP website.
|
||||||
|
|
||||||
# Running locally
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run -t --rm -v "$PWD":/usr/src/app -p "4000:4000" starefossen/github-pages
|
|
||||||
```
|
|
||||||
|
|
||||||
And then browse to http://localhost:4000/docs
|
|
||||||
|
|
||||||
# Thanks to
|
|
||||||
|
|
||||||
[Freelancer](http://startbootstrap.com/template-overviews/freelancer/) is a one page freelancer 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, and a working PHP contact form.
|
|
||||||
|
|
||||||
## Copyright and License
|
|
||||||
|
|
||||||
Copyright 2013-2018 Blackrock Digital LLC. Code released under the [MIT](https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/gh-pages/LICENSE) license.
|
|
||||||
|
|
||||||
|
@ -1,380 +0,0 @@
|
|||||||
body {
|
|
||||||
font-family: 'Lato';
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6 {
|
|
||||||
font-weight: 700;
|
|
||||||
font-family: 'Montserrat';
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light,
|
|
||||||
hr.star-dark {
|
|
||||||
max-width: 15rem;
|
|
||||||
padding: 0;
|
|
||||||
text-align: center;
|
|
||||||
border: none;
|
|
||||||
border-top: solid 0.25rem;
|
|
||||||
margin-top: 2.5rem;
|
|
||||||
margin-bottom: 2.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light:after,
|
|
||||||
hr.star-dark:after {
|
|
||||||
position: relative;
|
|
||||||
top: -.8em;
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 0.25em;
|
|
||||||
content: '\f005';
|
|
||||||
font-family: FontAwesome;
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light {
|
|
||||||
border-color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light:after {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-dark {
|
|
||||||
border-color: #2C3E50;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-dark:after {
|
|
||||||
color: #2C3E50;
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
section {
|
|
||||||
padding: 6rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
section h2 {
|
|
||||||
font-size: 2.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
section h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 2.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-xl {
|
|
||||||
padding: 1rem 1.75rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-social {
|
|
||||||
width: 3.25rem;
|
|
||||||
height: 3.25rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-to-top {
|
|
||||||
z-index: 1042;
|
|
||||||
right: 1rem;
|
|
||||||
bottom: 1rem;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-to-top a {
|
|
||||||
width: 3.5rem;
|
|
||||||
height: 3.5rem;
|
|
||||||
background-color: rgba(33, 37, 41, 0.5);
|
|
||||||
line-height: 3.1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1rem;
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
font-weight: 700;
|
|
||||||
font-family: 'Montserrat';
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-brand {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav {
|
|
||||||
margin-top: 1rem;
|
|
||||||
letter-spacing: 0.0625rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link:hover {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link:active, #mainNav .navbar-nav li.nav-item a.nav-link:focus {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link.active {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-toggler {
|
|
||||||
font-size: 80%;
|
|
||||||
padding: 0.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1.5rem;
|
|
||||||
padding-bottom: 1.5rem;
|
|
||||||
-webkit-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
-moz-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-brand {
|
|
||||||
font-size: 2em;
|
|
||||||
-webkit-transition: font-size 0.3s;
|
|
||||||
-moz-transition: font-size 0.3s;
|
|
||||||
transition: font-size 0.3s;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-nav {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-nav > li.nav-item > a.nav-link.active {
|
|
||||||
color: #fff;
|
|
||||||
background: #18BC9C;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-nav > li.nav-item > a.nav-link.active:active, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:focus, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:hover {
|
|
||||||
color: #fff;
|
|
||||||
background: #18BC9C;
|
|
||||||
}
|
|
||||||
#mainNav.navbar-shrink {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
#mainNav.navbar-shrink .navbar-brand {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 72px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
header.masthead h1 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
header.masthead h2 {
|
|
||||||
font-size: 1.3rem;
|
|
||||||
font-family: 'Lato';
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 106px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
}
|
|
||||||
header.masthead h1 {
|
|
||||||
font-size: 4.75em;
|
|
||||||
line-height: 4rem;
|
|
||||||
}
|
|
||||||
header.masthead h2 {
|
|
||||||
font-size: 1.75em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio {
|
|
||||||
margin-bottom: -15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
max-width: 25rem;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item .portfolio-item-caption {
|
|
||||||
-webkit-transition: all ease 0.5s;
|
|
||||||
-moz-transition: all ease 0.5s;
|
|
||||||
transition: all ease 0.5s;
|
|
||||||
opacity: 0;
|
|
||||||
background-color: rgba(24, 188, 156, 0.9);
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item .portfolio-item-caption:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item .portfolio-item-caption .portfolio-item-caption-content {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 576px) {
|
|
||||||
.portfolio {
|
|
||||||
margin-bottom: -30px;
|
|
||||||
}
|
|
||||||
.portfolio .portfolio-item {
|
|
||||||
margin-bottom: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog {
|
|
||||||
padding: 3rem 1rem;
|
|
||||||
min-height: calc(100vh - 2rem);
|
|
||||||
margin: 1rem calc(1rem - 8px);
|
|
||||||
position: relative;
|
|
||||||
z-index: 2;
|
|
||||||
-moz-box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
|
||||||
-webkit-box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
|
||||||
box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog .close-button {
|
|
||||||
position: absolute;
|
|
||||||
top: 2rem;
|
|
||||||
right: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog .close-button i {
|
|
||||||
line-height: 38px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog h2 {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
|
||||||
.portfolio-modal .portfolio-modal-dialog {
|
|
||||||
min-height: 100vh;
|
|
||||||
padding: 5rem;
|
|
||||||
margin: 3rem calc(3rem - 8px);
|
|
||||||
}
|
|
||||||
.portfolio-modal .portfolio-modal-dialog h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group {
|
|
||||||
position: relative;
|
|
||||||
border-bottom: 1px solid #e9ecef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group input,
|
|
||||||
.floating-label-form-group textarea {
|
|
||||||
font-size: 1.5em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
padding-right: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
resize: none;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
background: none;
|
|
||||||
box-shadow: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group label {
|
|
||||||
font-size: 0.85em;
|
|
||||||
line-height: 1.764705882em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 0;
|
|
||||||
top: 2em;
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
-webkit-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-moz-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-ms-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
vertical-align: middle;
|
|
||||||
vertical-align: baseline;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group:not(:first-child) {
|
|
||||||
padding-left: 14px;
|
|
||||||
border-left: 1px solid #e9ecef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-value label {
|
|
||||||
top: 0;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-focus label {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
form .row:first-child .floating-label-form-group {
|
|
||||||
border-top: 1px solid #e9ecef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
padding-top: 5rem;
|
|
||||||
padding-bottom: 5rem;
|
|
||||||
background-color: #2C3E50;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.copyright {
|
|
||||||
background-color: #1a252f;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:focus, a:hover, a:active {
|
|
||||||
color: #128f76;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
border-width: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-primary {
|
|
||||||
background-color: #18BC9C !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-secondary {
|
|
||||||
background-color: #2C3E50 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-primary {
|
|
||||||
color: #18BC9C !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-secondary {
|
|
||||||
color: #2C3E50 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary {
|
|
||||||
background-color: #18BC9C;
|
|
||||||
border-color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary:hover, .btn-primary:focus, .btn-primary:active {
|
|
||||||
background-color: #128f76;
|
|
||||||
border-color: #128f76;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-secondary {
|
|
||||||
background-color: #2C3E50;
|
|
||||||
border-color: #2C3E50;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-secondary:hover, .btn-secondary:focus, .btn-secondary:active {
|
|
||||||
background-color: #1a252f;
|
|
||||||
border-color: #1a252f;
|
|
||||||
}
|
|
1
docs/css/freelancer.min.css
vendored
137
docs/gulpfile.js
@ -1,137 +0,0 @@
|
|||||||
// Load plugins
|
|
||||||
const autoprefixer = require("gulp-autoprefixer");
|
|
||||||
const browsersync = require("browser-sync").create();
|
|
||||||
const cleanCSS = require("gulp-clean-css");
|
|
||||||
const gulp = require("gulp");
|
|
||||||
const header = require("gulp-header");
|
|
||||||
const plumber = require("gulp-plumber");
|
|
||||||
const rename = require("gulp-rename");
|
|
||||||
const sass = require("gulp-sass");
|
|
||||||
const uglify = require("gulp-uglify");
|
|
||||||
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('');
|
|
||||||
|
|
||||||
// Copy third party libraries from /node_modules into /vendor
|
|
||||||
gulp.task('vendor', function(cb) {
|
|
||||||
|
|
||||||
// Bootstrap
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/bootstrap/dist/**/*',
|
|
||||||
'!./node_modules/bootstrap/dist/css/bootstrap-grid*',
|
|
||||||
'!./node_modules/bootstrap/dist/css/bootstrap-reboot*'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/bootstrap'))
|
|
||||||
|
|
||||||
// Font Awesome
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/@fortawesome/**/*',
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor'))
|
|
||||||
|
|
||||||
// jQuery
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/jquery/dist/*',
|
|
||||||
'!./node_modules/jquery/dist/core.js'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/jquery'))
|
|
||||||
|
|
||||||
// jQuery Easing
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/jquery.easing/*.js'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/jquery-easing'))
|
|
||||||
|
|
||||||
// Magnific Popup
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/magnific-popup/dist/*'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/magnific-popup'))
|
|
||||||
|
|
||||||
cb();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// CSS task
|
|
||||||
function css() {
|
|
||||||
return gulp
|
|
||||||
.src("./scss/*.scss")
|
|
||||||
.pipe(plumber())
|
|
||||||
.pipe(sass({
|
|
||||||
outputStyle: "expanded"
|
|
||||||
}))
|
|
||||||
.on("error", sass.logError)
|
|
||||||
.pipe(autoprefixer({
|
|
||||||
browsers: ['last 2 versions'],
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tasks
|
|
||||||
gulp.task("css", css);
|
|
||||||
gulp.task("js", js);
|
|
||||||
|
|
||||||
// BrowserSync
|
|
||||||
function browserSync(done) {
|
|
||||||
browsersync.init({
|
|
||||||
server: {
|
|
||||||
baseDir: "./"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
// BrowserSync Reload
|
|
||||||
function browserSyncReload(done) {
|
|
||||||
browsersync.reload();
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Watch files
|
|
||||||
function watchFiles() {
|
|
||||||
gulp.watch("./scss/**/*", css);
|
|
||||||
gulp.watch(["./js/**/*.js", "!./js/*.min.js"], js);
|
|
||||||
gulp.watch("./**/*.html", browserSyncReload);
|
|
||||||
}
|
|
||||||
|
|
||||||
gulp.task("default", gulp.parallel('vendor', css, js));
|
|
||||||
|
|
||||||
// dev task
|
|
||||||
gulp.task("dev", gulp.parallel(watchFiles, browserSync));
|
|
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 978 KiB |
Before Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 483 KiB |
Before Width: | Height: | Size: 418 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.3 KiB |
288
docs/index.html
@ -2,289 +2,13 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta http-equiv="refresh" content="0;url=https://owasp.org/www-project-webgoat/" />
|
||||||
<meta name="description" content="WebGoat is a deliberately insecure application that allows interested developers just like you to test vulnerabilities
|
<link rel="canonical" href="https://owasp.org/www-project-webgoat/" />
|
||||||
commonly found in Java-based applications that use common and popular open source components">
|
|
||||||
<meta name="author" content="WebGoat">
|
|
||||||
|
|
||||||
<title>WebGoat</title>
|
|
||||||
|
|
||||||
<!-- Bootstrap core CSS -->
|
|
||||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- Custom fonts for this template -->
|
|
||||||
<link href="vendor/font-awesome/css/font-awesome.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=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css">
|
|
||||||
|
|
||||||
<!-- Plugin CSS -->
|
|
||||||
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet" type="text/css">
|
|
||||||
|
|
||||||
<!-- Custom styles for this template -->
|
|
||||||
<link href="css/freelancer.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
<body>
|
||||||
<body id="page-top">
|
<h1>
|
||||||
|
The page been moved to <a href="https://owasp.org/www-project-webgoat/">https://owasp.org/www-project-webgoat/</a>
|
||||||
<!-- Navigation -->
|
</h1>
|
||||||
<nav class="navbar navbar-expand-lg bg-secondary fixed-top text-uppercase" id="mainNav">
|
|
||||||
<div class="container">
|
|
||||||
<!-- Brand and toggle get grouped for better mobile display -->
|
|
||||||
<div class="navbar-header page-scroll">
|
|
||||||
<img class="img-responsive" src="img/profile.png" alt="">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<!-- Header -->
|
|
||||||
<header class="masthead bg-primary text-white text-center">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<h2 class="text-center text-uppercase mb-5">Learn the hack - Stop the attack</h2>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-8 mx-auto">
|
|
||||||
<p>WebGoat is a deliberately insecure application that allows interested developers just like you to test vulnerabilities
|
|
||||||
commonly found in Java-based applications that use common and popular open source components.</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-8 mx-auto">
|
|
||||||
<a href="https://github.com/WebGoat/WebGoat/releases" class="btn btn-xl btn-outline-light">
|
|
||||||
<i class="fa fa-download"></i> Download standalone
|
|
||||||
</a>
|
|
||||||
<a href="https://hub.docker.com/r/webgoat/webgoat-8.0/" class="btn btn-xl btn-outline-light">
|
|
||||||
<i class="fa fa-download"></i> Run using Docker
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<!-- Portfolio Grid Section -->
|
|
||||||
<section class="portfolio" id="portfolio">
|
|
||||||
<div class="container">
|
|
||||||
<h3 class="text-center text-uppercase text-secondary mb-0">Learn in 3 steps</h3>
|
|
||||||
<hr class="star-dark mb-5">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 col-lg-4 text-center">
|
|
||||||
<a class="portfolio-item d-block mx-auto" href="#portfolio-modal-1">
|
|
||||||
<div class="portfolio-item-caption d-flex position-absolute h-100 w-100">
|
|
||||||
<div class="portfolio-item-caption-content my-auto w-100 text-center text-white">
|
|
||||||
<i class="fa fa-search-plus fa-3x"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<img class="img-fluid" src="img/portfolio/teach.png" alt="">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 col-lg-4 text-center">
|
|
||||||
<a class="portfolio-item d-block mx-auto" href="#portfolio-modal-2">
|
|
||||||
<div class="portfolio-item-caption d-flex position-absolute h-100 w-100">
|
|
||||||
<div class="portfolio-item-caption-content my-auto w-100 text-center text-white">
|
|
||||||
<i class="fa fa-search-plus fa-3x"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<img class="img-fluid" src="img/portfolio/assignment.png" alt="">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 col-lg-4 text-center" >
|
|
||||||
<a class="portfolio-item d-block mx-auto" href="#portfolio-modal-3">
|
|
||||||
<div class="portfolio-item-caption d-flex position-absolute h-100 w-100">
|
|
||||||
<div class="portfolio-item-caption-content my-auto w-100 text-center text-white">
|
|
||||||
<i class="fa fa-search-plus fa-3x"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<img class="img-fluid" src="img/portfolio/mitigation.png" alt="">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Goals Section -->
|
|
||||||
<section class="bg-primary text-white mb-0" id="goals">
|
|
||||||
<div class="container">
|
|
||||||
<h3 class="text-center text-uppercase text-white">Goals</h3>
|
|
||||||
<hr class="star-light mb-5">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-6 ml-auto">
|
|
||||||
<p class="lead">
|
|
||||||
Web application security is difficult to learn and practice. Not many people have full blown web applications like online book
|
|
||||||
stores or online banks that can be used to scan for vulnerabilities. In addition, security professionals frequently need to test
|
|
||||||
tools against a platform known to be vulnerable to ensure that they perform as advertised. All of this needs to happen in a safe
|
|
||||||
and legal environment.
|
|
||||||
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-6 mr-auto">
|
|
||||||
<p class="lead">Even if your intentions are good, we believe you should never attempt to find vulnerabilities without
|
|
||||||
permission. The primary goal of the WebGoat project is simple: create a de-facto interactive teaching environment for web application security.
|
|
||||||
In the future, the project team hopes to extend WebGoat into becoming a security benchmarking platform and a Java-based Web site Honeypot.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Contributing Section -->
|
|
||||||
<section class="portfolio" id="portfolio">
|
|
||||||
<div class="container">
|
|
||||||
<h3 class="text-center text-uppercase text-secondary mb-0">More information</h3>
|
|
||||||
<hr class="star-dark mb-5">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-4 ml-auto">
|
|
||||||
<p class="lead">For more information about running WebGoat / FAQ see our <a href="https://github.com/WebGoat/WebGoat/wiki">wiki pages.</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4 mr-auto">
|
|
||||||
<p class="lead">Interested in contributing to WebGoat, take a look at our <a href="https://github.com/WebGoat/WebGoat/issues">issues.</a> </p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Footer -->
|
|
||||||
<footer class="footer text-center">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-4 mb-5 mb-lg-0">
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4 mb-5 mb-lg-0">
|
|
||||||
<h4 class="text-uppercase mb-4">Around the Web</h4>
|
|
||||||
<ul class="list-inline mb-0">
|
|
||||||
<li class="list-inline-item">
|
|
||||||
<a class="btn btn-outline-light btn-social text-center rounded-circle" href="mailto:webgoat@owasp.org">
|
|
||||||
<i class="fa fa-fw fa-at"></i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="list-inline-item">
|
|
||||||
<a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://github.com/WebGoat">
|
|
||||||
<i class="fa fa-fw fa-github"></i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="list-inline-item">
|
|
||||||
<a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://stackoverflow.com/search?q=webgoat">
|
|
||||||
<i class="fa fa-fw fa-stack-overflow"></i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="list-inline-item">
|
|
||||||
<a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://twitter.com/OWASP_WebGoat">
|
|
||||||
<i class="fa fa-fw fa-twitter"></i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="list-inline-item">
|
|
||||||
<a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://owasp.slack.com/messages/#project-webgoat/">
|
|
||||||
<i class="fa fa-fw fa-slack"></i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<div class="copyright py-4 text-center text-white">
|
|
||||||
<div class="container">
|
|
||||||
<small>Team WebGoat 2019</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Scroll to Top Button (Only visible on small and extra-small screen sizes) -->
|
|
||||||
<div class="scroll-to-top d-lg-none position-fixed ">
|
|
||||||
<a class="js-scroll-trigger d-block text-center text-white rounded" href="#page-top">
|
|
||||||
<i class="fa fa-chevron-up"></i>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Explain modal -->
|
|
||||||
<div class="portfolio-modal mfp-hide" id="portfolio-modal-1">
|
|
||||||
<div class="portfolio-modal-dialog bg-white">
|
|
||||||
<a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">
|
|
||||||
<i class="fa fa-3x fa-times"></i>
|
|
||||||
</a>
|
|
||||||
<div class="container text-center">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-8 mx-auto">
|
|
||||||
<h3 class="text-secondary text-uppercase mb-0">Explain the vulnerability</h3>
|
|
||||||
<hr class="star-dark mb-5">
|
|
||||||
<img class="img-fluid mb-5" src="img/portfolio/lesson.png" alt="">
|
|
||||||
<p class="mb-5">Teaching is now a first class citizen of WebGoat, we explain explain the vulnerability. Instead of 'just hacking' we now focus on explaining from the beginning what for example a SQL injection is.
|
|
||||||
</p>
|
|
||||||
<a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">
|
|
||||||
<i class="fa fa-close"></i>
|
|
||||||
Close</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Assignment modal -->
|
|
||||||
<div class="portfolio-modal mfp-hide" id="portfolio-modal-2">
|
|
||||||
<div class="portfolio-modal-dialog bg-white">
|
|
||||||
<a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">
|
|
||||||
<i class="fa fa-3x fa-times"></i>
|
|
||||||
</a>
|
|
||||||
<div class="container text-center">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-8 mx-auto">
|
|
||||||
<h3 class="text-secondary text-uppercase mb-0">Learn by doing</h3>
|
|
||||||
<hr class="star-dark mb-5">
|
|
||||||
<img class="img-fluid mb-5" src="img/portfolio/assignment-example.png" alt="">
|
|
||||||
<p class="mb-5">During the explanation of a vulnerability we build assignments which will help you understand how it works.</p>
|
|
||||||
<a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">
|
|
||||||
<i class="fa fa-close"></i>
|
|
||||||
Close</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Mitigation modal -->
|
|
||||||
<div class="portfolio-modal mfp-hide" id="portfolio-modal-3">
|
|
||||||
<div class="portfolio-modal-dialog bg-white">
|
|
||||||
<a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">
|
|
||||||
<i class="fa fa-3x fa-times"></i>
|
|
||||||
</a>
|
|
||||||
<div class="container text-center">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-8 mx-auto">
|
|
||||||
<h3 class="text-secondary text-uppercase mb-0">Explain mitigations</h3>
|
|
||||||
<hr class="star-dark mb-5">
|
|
||||||
<img class="img-fluid mb-5" src="img/portfolio/mitigation-example.png" alt="">
|
|
||||||
<p class="mb-5">At the end of each lesson you will receive an overview of possible mitigations which will help you during your development work.</p>
|
|
||||||
<a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">
|
|
||||||
<i class="fa fa-close"></i>
|
|
||||||
Close</a>
|
|
||||||
</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>
|
|
||||||
<script src="vendor/magnific-popup/jquery.magnific-popup.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/freelancer.min.js"></script>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
@ -1,75 +0,0 @@
|
|||||||
$(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: "././mail/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('');
|
|
||||||
});
|
|
@ -1,75 +0,0 @@
|
|||||||
(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 - 70)
|
|
||||||
}, 1000, "easeInOutExpo");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Scroll to top button appear
|
|
||||||
$(document).scroll(function() {
|
|
||||||
var scrollDistance = $(this).scrollTop();
|
|
||||||
if (scrollDistance > 100) {
|
|
||||||
$('.scroll-to-top').fadeIn();
|
|
||||||
} else {
|
|
||||||
$('.scroll-to-top').fadeOut();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 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: 80
|
|
||||||
});
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
// Modal popup$(function () {
|
|
||||||
$('.portfolio-item').magnificPopup({
|
|
||||||
type: 'inline',
|
|
||||||
preloader: false,
|
|
||||||
focus: '#username',
|
|
||||||
modal: true
|
|
||||||
});
|
|
||||||
$(document).on('click', '.portfolio-modal-dismiss', function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
$.magnificPopup.close();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Floating label headings for the contact form
|
|
||||||
$(function() {
|
|
||||||
$("body").on("input propertychange", ".floating-label-form-group", function(e) {
|
|
||||||
$(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val());
|
|
||||||
}).on("focus", ".floating-label-form-group", function() {
|
|
||||||
$(this).addClass("floating-label-form-group-with-focus");
|
|
||||||
}).on("blur", ".floating-label-form-group", function() {
|
|
||||||
$(this).removeClass("floating-label-form-group-with-focus");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
})(jQuery); // End of use strict
|
|
7
docs/js/freelancer.min.js
vendored
@ -1,7 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Start Bootstrap - Freelancer v5.0.2 (https://startbootstrap.com/template-overviews/freelancer)
|
|
||||||
* Copyright 2013-2019 Start Bootstrap
|
|
||||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
|
|
||||||
!function(t){"use strict";t('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function(){if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var o=t(this.hash);if((o=o.length?o:t("[name="+this.hash.slice(1)+"]")).length)return t("html, body").animate({scrollTop:o.offset().top-70},1e3,"easeInOutExpo"),!1}}),t(document).scroll(function(){100<t(this).scrollTop()?t(".scroll-to-top").fadeIn():t(".scroll-to-top").fadeOut()}),t(".js-scroll-trigger").click(function(){t(".navbar-collapse").collapse("hide")}),t("body").scrollspy({target:"#mainNav",offset:80});var o=function(){100<t("#mainNav").offset().top?t("#mainNav").addClass("navbar-shrink"):t("#mainNav").removeClass("navbar-shrink")};o(),t(window).scroll(o),t(".portfolio-item").magnificPopup({type:"inline",preloader:!1,focus:"#username",modal:!0}),t(document).on("click",".portfolio-modal-dismiss",function(o){o.preventDefault(),t.magnificPopup.close()}),t(function(){t("body").on("input propertychange",".floating-label-form-group",function(o){t(this).toggleClass("floating-label-form-group-with-value",!!t(o.target).val())}).on("focus",".floating-label-form-group",function(){t(this).addClass("floating-label-form-group-with-focus")}).on("blur",".floating-label-form-group",function(){t(this).removeClass("floating-label-form-group-with-focus")})})}(jQuery);
|
|
@ -1,912 +0,0 @@
|
|||||||
/* 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(".control-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(".control-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(".control-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 );
|
|
@ -1,22 +0,0 @@
|
|||||||
<?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)) {
|
|
||||||
http_response_code(500);
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
$name = strip_tags(htmlspecialchars($_POST['name']));
|
|
||||||
$email = 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 inbetween the "" replacing yourname@yourdomain.com - This is where the form will send a message to.
|
|
||||||
$subject = "Website Contact Form: $name";
|
|
||||||
$body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email\n\nPhone: $phone\n\nMessage:\n$message";
|
|
||||||
$header = "From: noreply@yourdomain.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
|
|
||||||
$header .= "Reply-To: $email";
|
|
||||||
|
|
||||||
if(!mail($to, $subject, $body, $header))
|
|
||||||
http_response_code(500);
|
|
||||||
?>
|
|
6595
docs/package-lock.json
generated
@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
"title": "Freelancer",
|
|
||||||
"name": "startbootstrap-freelancer",
|
|
||||||
"version": "5.0.2",
|
|
||||||
"description": "A freelancer portfolio HTML theme for Bootstrap.",
|
|
||||||
"keywords": [
|
|
||||||
"css",
|
|
||||||
"sass",
|
|
||||||
"html",
|
|
||||||
"responsive",
|
|
||||||
"theme",
|
|
||||||
"template"
|
|
||||||
],
|
|
||||||
"homepage": "https://startbootstrap.com/template-overviews/freelancer",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/BlackrockDigital/startbootstrap-freelancer/issues",
|
|
||||||
"email": "feedback@startbootstrap.com"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"author": "Start Bootstrap",
|
|
||||||
"contributors": [
|
|
||||||
"David Miller (http://davidmiller.io/)"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/BlackrockDigital/startbootstrap-freelancer.git"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@fortawesome/fontawesome-free": "5.7.0",
|
|
||||||
"bootstrap": "4.2.1",
|
|
||||||
"jquery": "3.3.1",
|
|
||||||
"jquery.easing": "^1.4.1",
|
|
||||||
"magnific-popup": "^1.1.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"browser-sync": "2.26.3",
|
|
||||||
"gulp": "4.0.0",
|
|
||||||
"gulp-autoprefixer": "6.0.0",
|
|
||||||
"gulp-clean-css": "4.0.0",
|
|
||||||
"gulp-filter": "5.1.0",
|
|
||||||
"gulp-header": "2.0.7",
|
|
||||||
"gulp-plumber": "^1.2.1",
|
|
||||||
"gulp-rename": "1.4.0",
|
|
||||||
"gulp-sass": "4.0.2",
|
|
||||||
"gulp-uglify": "3.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
// Bootstrap overrides for this template
|
|
||||||
a {
|
|
||||||
color: $primary;
|
|
||||||
&:focus,
|
|
||||||
&:hover,
|
|
||||||
&:active {
|
|
||||||
color: darken($primary, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
border-width: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-primary {
|
|
||||||
background-color: $primary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-secondary {
|
|
||||||
background-color: $secondary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-primary {
|
|
||||||
color: $primary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-secondary {
|
|
||||||
color: $secondary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary {
|
|
||||||
background-color: $primary;
|
|
||||||
border-color: $primary;
|
|
||||||
&:hover,
|
|
||||||
&:focus,
|
|
||||||
&:active {
|
|
||||||
background-color: darken($primary, 10%);
|
|
||||||
border-color: darken($primary, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-secondary {
|
|
||||||
background-color: $secondary;
|
|
||||||
border-color: $secondary;
|
|
||||||
&:hover,
|
|
||||||
&:focus,
|
|
||||||
&:active {
|
|
||||||
background-color: darken($secondary, 10%);
|
|
||||||
border-color: darken($secondary, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
// Styling for the contact section
|
|
||||||
.floating-label-form-group {
|
|
||||||
position: relative;
|
|
||||||
border-bottom: 1px solid $gray-200;
|
|
||||||
input,
|
|
||||||
textarea {
|
|
||||||
font-size: 1.5em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
padding-right: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
resize: none;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
background: none;
|
|
||||||
box-shadow: none !important;
|
|
||||||
}
|
|
||||||
label {
|
|
||||||
font-size: 0.85em;
|
|
||||||
line-height: 1.764705882em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 0;
|
|
||||||
top: 2em;
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
-webkit-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-moz-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-ms-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
vertical-align: middle;
|
|
||||||
vertical-align: baseline;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
&:not(:first-child) {
|
|
||||||
padding-left: 14px;
|
|
||||||
border-left: 1px solid $gray-200;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-value {
|
|
||||||
label {
|
|
||||||
top: 0;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-focus {
|
|
||||||
label {
|
|
||||||
color: $primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
form .row:first-child .floating-label-form-group {
|
|
||||||
border-top: 1px solid $gray-200;
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
.footer {
|
|
||||||
padding-top: 5rem;
|
|
||||||
padding-bottom: 5rem;
|
|
||||||
background-color: $secondary;
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.copyright {
|
|
||||||
background-color: darken($secondary, 10%);
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
// Typography
|
|
||||||
body {
|
|
||||||
@include body-font;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6 {
|
|
||||||
@include heading-font;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom Horizontal Rule with Star Icon
|
|
||||||
hr.star-light,
|
|
||||||
hr.star-dark {
|
|
||||||
max-width: 15rem;
|
|
||||||
padding: 0;
|
|
||||||
text-align: center;
|
|
||||||
border: none;
|
|
||||||
border-top: solid 0.25rem;
|
|
||||||
margin-top: 2.5rem;
|
|
||||||
margin-bottom: 2.5rem;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light:after,
|
|
||||||
hr.star-dark:after {
|
|
||||||
position: relative;
|
|
||||||
top: -.8em;
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 0.25em;
|
|
||||||
content: '\f005';
|
|
||||||
font-family: "Font Awesome 5 Free";
|
|
||||||
font-weight: 900;
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light {
|
|
||||||
border-color: $white;
|
|
||||||
}
|
|
||||||
hr.star-light:after {
|
|
||||||
color: $white;
|
|
||||||
background-color: $primary;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-dark {
|
|
||||||
border-color: $secondary;
|
|
||||||
}
|
|
||||||
hr.star-dark:after {
|
|
||||||
color: $secondary;
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Section Padding Settings
|
|
||||||
section {
|
|
||||||
padding: 6rem 0;
|
|
||||||
h2 {
|
|
||||||
font-size: 2.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 2.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom Button Size
|
|
||||||
.btn-xl {
|
|
||||||
padding: 1rem 1.75rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom Rounded Social Button
|
|
||||||
.btn-social {
|
|
||||||
width: 3.25rem;
|
|
||||||
height: 3.25rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scroll to Top Button
|
|
||||||
.scroll-to-top {
|
|
||||||
z-index: 1042;
|
|
||||||
right: 1rem;
|
|
||||||
bottom: 1rem;
|
|
||||||
display: none;
|
|
||||||
a {
|
|
||||||
width: 3.5rem;
|
|
||||||
height: 3.5rem;
|
|
||||||
background-color: fade-out($gray-900, 0.5);
|
|
||||||
line-height: 3.1rem;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 72px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
h1 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 3rem;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
font-size: 1.3rem;
|
|
||||||
@include body-font;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 106px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
h1 {
|
|
||||||
font-size: 4.75em;
|
|
||||||
line-height: 4rem;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
font-size: 1.75em;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
@mixin body-font() {
|
|
||||||
font-family: 'Lato';
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin heading-font() {
|
|
||||||
font-weight: 700;
|
|
||||||
font-family: 'Montserrat';
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
// Styling for the navbar
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1rem;
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
@include heading-font;
|
|
||||||
.navbar-brand {
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
.navbar-nav {
|
|
||||||
margin-top: 1rem;
|
|
||||||
letter-spacing: 0.0625rem;
|
|
||||||
li.nav-item {
|
|
||||||
a.nav-link {
|
|
||||||
color: $white;
|
|
||||||
&:hover {
|
|
||||||
color: $primary;
|
|
||||||
}
|
|
||||||
&:active,
|
|
||||||
&:focus {
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
&.active {
|
|
||||||
color: $primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.navbar-toggler {
|
|
||||||
font-size: 80%;
|
|
||||||
padding: 0.8rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media(min-width:992px) {
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1.5rem;
|
|
||||||
padding-bottom: 1.5rem;
|
|
||||||
-webkit-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
-moz-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
.navbar-brand {
|
|
||||||
font-size: 2em;
|
|
||||||
-webkit-transition: font-size 0.3s;
|
|
||||||
-moz-transition: font-size 0.3s;
|
|
||||||
transition: font-size 0.3s;
|
|
||||||
}
|
|
||||||
.navbar-nav {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
.navbar-nav > li.nav-item > a.nav-link.active {
|
|
||||||
color: $white;
|
|
||||||
background: $primary;
|
|
||||||
&:active,
|
|
||||||
&:focus,
|
|
||||||
&:hover {
|
|
||||||
color: $white;
|
|
||||||
background: $primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#mainNav.navbar-shrink {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
.navbar-brand {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,63 +0,0 @@
|
|||||||
// Styling for the portfolio section
|
|
||||||
.portfolio {
|
|
||||||
margin-bottom: -15px;
|
|
||||||
.portfolio-item {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
max-width: 25rem;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
.portfolio-item-caption {
|
|
||||||
-webkit-transition: all ease 0.5s;
|
|
||||||
-moz-transition: all ease 0.5s;
|
|
||||||
transition: all ease 0.5s;
|
|
||||||
opacity: 0;
|
|
||||||
background-color: fade-out($primary, .1);
|
|
||||||
&:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
.portfolio-item-caption-content {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (min-width: 576px) {
|
|
||||||
margin-bottom: -30px;
|
|
||||||
.portfolio-item {
|
|
||||||
margin-bottom: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal {
|
|
||||||
.portfolio-modal-dialog {
|
|
||||||
padding: 3rem 1rem;
|
|
||||||
min-height: calc(100vh - 2rem);
|
|
||||||
margin: 1rem calc(1rem - 8px);
|
|
||||||
position: relative;
|
|
||||||
z-index: 2;
|
|
||||||
-moz-box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
|
||||||
-webkit-box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
|
||||||
box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
|
||||||
.close-button {
|
|
||||||
position: absolute;
|
|
||||||
top: 2rem;
|
|
||||||
right: 2rem;
|
|
||||||
i {
|
|
||||||
line-height: 38px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media(min-width: 768px) {
|
|
||||||
.portfolio-modal-dialog {
|
|
||||||
min-height: 100vh;
|
|
||||||
padding: 5rem;
|
|
||||||
margin: 3rem calc(3rem - 8px);
|
|
||||||
h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
// Variables
|
|
||||||
|
|
||||||
$white: #fff !default;
|
|
||||||
$gray-100: #f8f9fa !default;
|
|
||||||
$gray-200: #e9ecef !default;
|
|
||||||
$gray-300: #dee2e6 !default;
|
|
||||||
$gray-400: #ced4da !default;
|
|
||||||
$gray-500: #adb5bd !default;
|
|
||||||
$gray-600: #868e96 !default;
|
|
||||||
$gray-700: #495057 !default;
|
|
||||||
$gray-800: #343a40 !default;
|
|
||||||
$gray-900: #212529 !default;
|
|
||||||
$black: #000 !default;
|
|
||||||
|
|
||||||
$primary: #18BC9C !default;
|
|
||||||
$secondary: #2C3E50 !default;
|
|
@ -1,9 +0,0 @@
|
|||||||
@import "variables.scss";
|
|
||||||
@import "mixins.scss";
|
|
||||||
@import "global.scss";
|
|
||||||
@import "navbar.scss";
|
|
||||||
@import "masthead.scss";
|
|
||||||
@import "portfolio.scss";
|
|
||||||
@import "contact.scss";
|
|
||||||
@import "footer.scss";
|
|
||||||
@import "bootstrap-overrides.scss";
|
|
9887
docs/vendor/bootstrap/css/bootstrap.css
vendored
1
docs/vendor/bootstrap/css/bootstrap.css.map
vendored
7
docs/vendor/bootstrap/css/bootstrap.min.css
vendored
6818
docs/vendor/bootstrap/js/bootstrap.bundle.js
vendored
4249
docs/vendor/bootstrap/js/bootstrap.js
vendored
1
docs/vendor/bootstrap/js/bootstrap.js.map
vendored
7
docs/vendor/bootstrap/js/bootstrap.min.js
vendored
2337
docs/vendor/font-awesome/css/font-awesome.css
vendored
BIN
docs/vendor/font-awesome/fonts/FontAwesome.otf
vendored
2671
docs/vendor/font-awesome/fonts/fontawesome-webfont.svg
vendored
Before Width: | Height: | Size: 434 KiB |
34
docs/vendor/font-awesome/less/animated.less
vendored
@ -1,34 +0,0 @@
|
|||||||
// Animated Icons
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-spin {
|
|
||||||
-webkit-animation: fa-spin 2s infinite linear;
|
|
||||||
animation: fa-spin 2s infinite linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-pulse {
|
|
||||||
-webkit-animation: fa-spin 1s infinite steps(8);
|
|
||||||
animation: fa-spin 1s infinite steps(8);
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
// Bordered & Pulled
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-border {
|
|
||||||
padding: .2em .25em .15em;
|
|
||||||
border: solid .08em @fa-border-color;
|
|
||||||
border-radius: .1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-pull-left { float: left; }
|
|
||||||
.@{fa-css-prefix}-pull-right { float: right; }
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
&.@{fa-css-prefix}-pull-left { margin-right: .3em; }
|
|
||||||
&.@{fa-css-prefix}-pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Deprecated as of 4.4.0 */
|
|
||||||
.pull-right { float: right; }
|
|
||||||
.pull-left { float: left; }
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
&.pull-left { margin-right: .3em; }
|
|
||||||
&.pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
12
docs/vendor/font-awesome/less/core.less
vendored
@ -1,12 +0,0 @@
|
|||||||
// Base Class Definition
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
|
|
||||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
|
||||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
// Fixed Width Icons
|
|
||||||
// -------------------------
|
|
||||||
.@{fa-css-prefix}-fw {
|
|
||||||
width: (18em / 14);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
18
docs/vendor/font-awesome/less/font-awesome.less
vendored
@ -1,18 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
|
|
||||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
|
||||||
*/
|
|
||||||
|
|
||||||
@import "variables.less";
|
|
||||||
@import "mixins.less";
|
|
||||||
@import "path.less";
|
|
||||||
@import "core.less";
|
|
||||||
@import "larger.less";
|
|
||||||
@import "fixed-width.less";
|
|
||||||
@import "list.less";
|
|
||||||
@import "bordered-pulled.less";
|
|
||||||
@import "animated.less";
|
|
||||||
@import "rotated-flipped.less";
|
|
||||||
@import "stacked.less";
|
|
||||||
@import "icons.less";
|
|
||||||
@import "screen-reader.less";
|
|
789
docs/vendor/font-awesome/less/icons.less
vendored
@ -1,789 +0,0 @@
|
|||||||
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
|
|
||||||
readers do not read off random characters that represent icons */
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
|
|
||||||
.@{fa-css-prefix}-music:before { content: @fa-var-music; }
|
|
||||||
.@{fa-css-prefix}-search:before { content: @fa-var-search; }
|
|
||||||
.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
|
|
||||||
.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
|
|
||||||
.@{fa-css-prefix}-star:before { content: @fa-var-star; }
|
|
||||||
.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
|
|
||||||
.@{fa-css-prefix}-user:before { content: @fa-var-user; }
|
|
||||||
.@{fa-css-prefix}-film:before { content: @fa-var-film; }
|
|
||||||
.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
|
|
||||||
.@{fa-css-prefix}-th:before { content: @fa-var-th; }
|
|
||||||
.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
|
|
||||||
.@{fa-css-prefix}-check:before { content: @fa-var-check; }
|
|
||||||
.@{fa-css-prefix}-remove:before,
|
|
||||||
.@{fa-css-prefix}-close:before,
|
|
||||||
.@{fa-css-prefix}-times:before { content: @fa-var-times; }
|
|
||||||
.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
|
|
||||||
.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
|
|
||||||
.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
|
|
||||||
.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
|
|
||||||
.@{fa-css-prefix}-gear:before,
|
|
||||||
.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
|
|
||||||
.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
|
|
||||||
.@{fa-css-prefix}-home:before { content: @fa-var-home; }
|
|
||||||
.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
|
|
||||||
.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
|
|
||||||
.@{fa-css-prefix}-road:before { content: @fa-var-road; }
|
|
||||||
.@{fa-css-prefix}-download:before { content: @fa-var-download; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
|
|
||||||
.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
|
|
||||||
.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
|
|
||||||
.@{fa-css-prefix}-rotate-right:before,
|
|
||||||
.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
|
|
||||||
.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
|
|
||||||
.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
|
|
||||||
.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
|
|
||||||
.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
|
|
||||||
.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
|
|
||||||
.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
|
|
||||||
.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
|
|
||||||
.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
|
|
||||||
.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
|
|
||||||
.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
|
|
||||||
.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
|
|
||||||
.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
|
|
||||||
.@{fa-css-prefix}-book:before { content: @fa-var-book; }
|
|
||||||
.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
|
|
||||||
.@{fa-css-prefix}-print:before { content: @fa-var-print; }
|
|
||||||
.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
|
|
||||||
.@{fa-css-prefix}-font:before { content: @fa-var-font; }
|
|
||||||
.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
|
|
||||||
.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
|
|
||||||
.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
|
|
||||||
.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
|
|
||||||
.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
|
|
||||||
.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
|
|
||||||
.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
|
|
||||||
.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
|
|
||||||
.@{fa-css-prefix}-list:before { content: @fa-var-list; }
|
|
||||||
.@{fa-css-prefix}-dedent:before,
|
|
||||||
.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
|
|
||||||
.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
|
|
||||||
.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
|
|
||||||
.@{fa-css-prefix}-photo:before,
|
|
||||||
.@{fa-css-prefix}-image:before,
|
|
||||||
.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
|
|
||||||
.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
|
|
||||||
.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
|
|
||||||
.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
|
|
||||||
.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
|
|
||||||
.@{fa-css-prefix}-edit:before,
|
|
||||||
.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
|
|
||||||
.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
|
|
||||||
.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
|
|
||||||
.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
|
|
||||||
.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
|
|
||||||
.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
|
|
||||||
.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
|
|
||||||
.@{fa-css-prefix}-play:before { content: @fa-var-play; }
|
|
||||||
.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
|
|
||||||
.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
|
|
||||||
.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
|
|
||||||
.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
|
|
||||||
.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
|
|
||||||
.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
|
|
||||||
.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
|
|
||||||
.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
|
|
||||||
.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
|
|
||||||
.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
|
|
||||||
.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
|
|
||||||
.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
|
|
||||||
.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
|
|
||||||
.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
|
|
||||||
.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
|
|
||||||
.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
|
|
||||||
.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
|
|
||||||
.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-mail-forward:before,
|
|
||||||
.@{fa-css-prefix}-share:before { content: @fa-var-share; }
|
|
||||||
.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
|
|
||||||
.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
|
|
||||||
.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
|
|
||||||
.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
|
|
||||||
.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
|
|
||||||
.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
|
|
||||||
.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
|
|
||||||
.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
|
|
||||||
.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
|
|
||||||
.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
|
|
||||||
.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
|
|
||||||
.@{fa-css-prefix}-warning:before,
|
|
||||||
.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
|
|
||||||
.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
|
|
||||||
.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
|
|
||||||
.@{fa-css-prefix}-random:before { content: @fa-var-random; }
|
|
||||||
.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
|
|
||||||
.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
|
|
||||||
.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
|
|
||||||
.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
|
|
||||||
.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
|
|
||||||
.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
|
|
||||||
.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
|
|
||||||
.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
|
|
||||||
.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
|
|
||||||
.@{fa-css-prefix}-bar-chart-o:before,
|
|
||||||
.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }
|
|
||||||
.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
|
|
||||||
.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
|
|
||||||
.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
|
|
||||||
.@{fa-css-prefix}-key:before { content: @fa-var-key; }
|
|
||||||
.@{fa-css-prefix}-gears:before,
|
|
||||||
.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
|
|
||||||
.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
|
|
||||||
.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
|
|
||||||
.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
|
|
||||||
.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
|
|
||||||
.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
|
|
||||||
.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
|
|
||||||
.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
|
|
||||||
.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
|
|
||||||
.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
|
|
||||||
.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
|
|
||||||
.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
|
|
||||||
.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
|
|
||||||
.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
|
|
||||||
.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
|
|
||||||
.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
|
|
||||||
.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
|
|
||||||
.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
|
|
||||||
.@{fa-css-prefix}-facebook-f:before,
|
|
||||||
.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
|
|
||||||
.@{fa-css-prefix}-github:before { content: @fa-var-github; }
|
|
||||||
.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
|
|
||||||
.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
|
|
||||||
.@{fa-css-prefix}-feed:before,
|
|
||||||
.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
|
|
||||||
.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
|
|
||||||
.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
|
|
||||||
.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
|
|
||||||
.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
|
|
||||||
.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
|
|
||||||
.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
|
|
||||||
.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
|
|
||||||
.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
|
|
||||||
.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
|
|
||||||
.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
|
|
||||||
.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
|
|
||||||
.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
|
|
||||||
.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
|
|
||||||
.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
|
|
||||||
.@{fa-css-prefix}-group:before,
|
|
||||||
.@{fa-css-prefix}-users:before { content: @fa-var-users; }
|
|
||||||
.@{fa-css-prefix}-chain:before,
|
|
||||||
.@{fa-css-prefix}-link:before { content: @fa-var-link; }
|
|
||||||
.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
|
|
||||||
.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
|
|
||||||
.@{fa-css-prefix}-cut:before,
|
|
||||||
.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
|
|
||||||
.@{fa-css-prefix}-copy:before,
|
|
||||||
.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
|
|
||||||
.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
|
|
||||||
.@{fa-css-prefix}-save:before,
|
|
||||||
.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
|
|
||||||
.@{fa-css-prefix}-square:before { content: @fa-var-square; }
|
|
||||||
.@{fa-css-prefix}-navicon:before,
|
|
||||||
.@{fa-css-prefix}-reorder:before,
|
|
||||||
.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
|
|
||||||
.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
|
|
||||||
.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
|
|
||||||
.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
|
|
||||||
.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
|
|
||||||
.@{fa-css-prefix}-table:before { content: @fa-var-table; }
|
|
||||||
.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
|
|
||||||
.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
|
|
||||||
.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
|
|
||||||
.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
|
|
||||||
.@{fa-css-prefix}-money:before { content: @fa-var-money; }
|
|
||||||
.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
|
|
||||||
.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
|
|
||||||
.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
|
|
||||||
.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
|
|
||||||
.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
|
|
||||||
.@{fa-css-prefix}-unsorted:before,
|
|
||||||
.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
|
|
||||||
.@{fa-css-prefix}-sort-down:before,
|
|
||||||
.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-up:before,
|
|
||||||
.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
|
|
||||||
.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
|
|
||||||
.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
|
|
||||||
.@{fa-css-prefix}-rotate-left:before,
|
|
||||||
.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
|
|
||||||
.@{fa-css-prefix}-legal:before,
|
|
||||||
.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
|
|
||||||
.@{fa-css-prefix}-dashboard:before,
|
|
||||||
.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
|
|
||||||
.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
|
|
||||||
.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
|
|
||||||
.@{fa-css-prefix}-flash:before,
|
|
||||||
.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
|
|
||||||
.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
|
|
||||||
.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
|
|
||||||
.@{fa-css-prefix}-paste:before,
|
|
||||||
.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
|
|
||||||
.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
|
|
||||||
.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
|
|
||||||
.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
|
|
||||||
.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
|
|
||||||
.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
|
|
||||||
.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
|
|
||||||
.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
|
|
||||||
.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
|
|
||||||
.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
|
|
||||||
.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
|
|
||||||
.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
|
|
||||||
.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
|
|
||||||
.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
|
|
||||||
.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
|
|
||||||
.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
|
|
||||||
.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
|
|
||||||
.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
|
|
||||||
.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
|
|
||||||
.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
|
|
||||||
.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
|
|
||||||
.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
|
|
||||||
.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
|
|
||||||
.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
|
|
||||||
.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
|
|
||||||
.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
|
|
||||||
.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
|
|
||||||
.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
|
|
||||||
.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
|
|
||||||
.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
|
|
||||||
.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
|
|
||||||
.@{fa-css-prefix}-mobile-phone:before,
|
|
||||||
.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
|
|
||||||
.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
|
|
||||||
.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
|
|
||||||
.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
|
|
||||||
.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
|
|
||||||
.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
|
|
||||||
.@{fa-css-prefix}-mail-reply:before,
|
|
||||||
.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
|
|
||||||
.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
|
|
||||||
.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
|
|
||||||
.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
|
|
||||||
.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
|
|
||||||
.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
|
|
||||||
.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
|
|
||||||
.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
|
|
||||||
.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
|
|
||||||
.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
|
|
||||||
.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
|
|
||||||
.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
|
|
||||||
.@{fa-css-prefix}-code:before { content: @fa-var-code; }
|
|
||||||
.@{fa-css-prefix}-mail-reply-all:before,
|
|
||||||
.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
|
|
||||||
.@{fa-css-prefix}-star-half-empty:before,
|
|
||||||
.@{fa-css-prefix}-star-half-full:before,
|
|
||||||
.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
|
|
||||||
.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
|
|
||||||
.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
|
|
||||||
.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
|
|
||||||
.@{fa-css-prefix}-unlink:before,
|
|
||||||
.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
|
|
||||||
.@{fa-css-prefix}-question:before { content: @fa-var-question; }
|
|
||||||
.@{fa-css-prefix}-info:before { content: @fa-var-info; }
|
|
||||||
.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
|
|
||||||
.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
|
|
||||||
.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
|
|
||||||
.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
|
|
||||||
.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
|
|
||||||
.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
|
|
||||||
.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
|
|
||||||
.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
|
|
||||||
.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
|
|
||||||
.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
|
|
||||||
.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
|
|
||||||
.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
|
|
||||||
.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
|
|
||||||
.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
|
|
||||||
.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
|
|
||||||
.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
|
|
||||||
.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
|
|
||||||
.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
|
|
||||||
.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
|
|
||||||
.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
|
|
||||||
.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
|
|
||||||
.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
|
|
||||||
.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
|
|
||||||
.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
|
|
||||||
.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
|
|
||||||
.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
|
|
||||||
.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
|
|
||||||
.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
|
|
||||||
.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
|
|
||||||
.@{fa-css-prefix}-toggle-down:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
|
|
||||||
.@{fa-css-prefix}-toggle-up:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
|
|
||||||
.@{fa-css-prefix}-toggle-right:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
|
|
||||||
.@{fa-css-prefix}-euro:before,
|
|
||||||
.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
|
|
||||||
.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
|
|
||||||
.@{fa-css-prefix}-dollar:before,
|
|
||||||
.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
|
|
||||||
.@{fa-css-prefix}-rupee:before,
|
|
||||||
.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
|
|
||||||
.@{fa-css-prefix}-cny:before,
|
|
||||||
.@{fa-css-prefix}-rmb:before,
|
|
||||||
.@{fa-css-prefix}-yen:before,
|
|
||||||
.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
|
|
||||||
.@{fa-css-prefix}-ruble:before,
|
|
||||||
.@{fa-css-prefix}-rouble:before,
|
|
||||||
.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
|
|
||||||
.@{fa-css-prefix}-won:before,
|
|
||||||
.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
|
|
||||||
.@{fa-css-prefix}-bitcoin:before,
|
|
||||||
.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
|
|
||||||
.@{fa-css-prefix}-file:before { content: @fa-var-file; }
|
|
||||||
.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
|
|
||||||
.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
|
|
||||||
.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
|
|
||||||
.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
|
|
||||||
.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
|
|
||||||
.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
|
|
||||||
.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
|
|
||||||
.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
|
|
||||||
.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
|
|
||||||
.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
|
|
||||||
.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
|
|
||||||
.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
|
|
||||||
.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
|
|
||||||
.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
|
|
||||||
.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
|
|
||||||
.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
|
|
||||||
.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
|
|
||||||
.@{fa-css-prefix}-android:before { content: @fa-var-android; }
|
|
||||||
.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
|
|
||||||
.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
|
|
||||||
.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
|
|
||||||
.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
|
|
||||||
.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
|
|
||||||
.@{fa-css-prefix}-female:before { content: @fa-var-female; }
|
|
||||||
.@{fa-css-prefix}-male:before { content: @fa-var-male; }
|
|
||||||
.@{fa-css-prefix}-gittip:before,
|
|
||||||
.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
|
|
||||||
.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
|
|
||||||
.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
|
|
||||||
.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
|
|
||||||
.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
|
|
||||||
.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
|
|
||||||
.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
|
|
||||||
.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
|
|
||||||
.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
|
|
||||||
.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
|
|
||||||
.@{fa-css-prefix}-toggle-left:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
|
|
||||||
.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
|
|
||||||
.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
|
|
||||||
.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
|
|
||||||
.@{fa-css-prefix}-turkish-lira:before,
|
|
||||||
.@{fa-css-prefix}-try:before { content: @fa-var-try; }
|
|
||||||
.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
|
|
||||||
.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
|
|
||||||
.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
|
|
||||||
.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
|
|
||||||
.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
|
|
||||||
.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
|
|
||||||
.@{fa-css-prefix}-institution:before,
|
|
||||||
.@{fa-css-prefix}-bank:before,
|
|
||||||
.@{fa-css-prefix}-university:before { content: @fa-var-university; }
|
|
||||||
.@{fa-css-prefix}-mortar-board:before,
|
|
||||||
.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
|
|
||||||
.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
|
|
||||||
.@{fa-css-prefix}-google:before { content: @fa-var-google; }
|
|
||||||
.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
|
|
||||||
.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
|
|
||||||
.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
|
|
||||||
.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
|
|
||||||
.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
|
|
||||||
.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
|
|
||||||
.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }
|
|
||||||
.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
|
|
||||||
.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
|
|
||||||
.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
|
|
||||||
.@{fa-css-prefix}-language:before { content: @fa-var-language; }
|
|
||||||
.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
|
|
||||||
.@{fa-css-prefix}-building:before { content: @fa-var-building; }
|
|
||||||
.@{fa-css-prefix}-child:before { content: @fa-var-child; }
|
|
||||||
.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
|
|
||||||
.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }
|
|
||||||
.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
|
|
||||||
.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
|
|
||||||
.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
|
|
||||||
.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
|
|
||||||
.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
|
|
||||||
.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
|
|
||||||
.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
|
|
||||||
.@{fa-css-prefix}-automobile:before,
|
|
||||||
.@{fa-css-prefix}-car:before { content: @fa-var-car; }
|
|
||||||
.@{fa-css-prefix}-cab:before,
|
|
||||||
.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
|
|
||||||
.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
|
|
||||||
.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
|
|
||||||
.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
|
|
||||||
.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
|
|
||||||
.@{fa-css-prefix}-database:before { content: @fa-var-database; }
|
|
||||||
.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }
|
|
||||||
.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }
|
|
||||||
.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }
|
|
||||||
.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }
|
|
||||||
.@{fa-css-prefix}-file-photo-o:before,
|
|
||||||
.@{fa-css-prefix}-file-picture-o:before,
|
|
||||||
.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }
|
|
||||||
.@{fa-css-prefix}-file-zip-o:before,
|
|
||||||
.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }
|
|
||||||
.@{fa-css-prefix}-file-sound-o:before,
|
|
||||||
.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }
|
|
||||||
.@{fa-css-prefix}-file-movie-o:before,
|
|
||||||
.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }
|
|
||||||
.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }
|
|
||||||
.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
|
|
||||||
.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
|
|
||||||
.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
|
|
||||||
.@{fa-css-prefix}-life-bouy:before,
|
|
||||||
.@{fa-css-prefix}-life-buoy:before,
|
|
||||||
.@{fa-css-prefix}-life-saver:before,
|
|
||||||
.@{fa-css-prefix}-support:before,
|
|
||||||
.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
|
|
||||||
.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }
|
|
||||||
.@{fa-css-prefix}-ra:before,
|
|
||||||
.@{fa-css-prefix}-resistance:before,
|
|
||||||
.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
|
|
||||||
.@{fa-css-prefix}-ge:before,
|
|
||||||
.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
|
|
||||||
.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
|
|
||||||
.@{fa-css-prefix}-git:before { content: @fa-var-git; }
|
|
||||||
.@{fa-css-prefix}-y-combinator-square:before,
|
|
||||||
.@{fa-css-prefix}-yc-square:before,
|
|
||||||
.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
|
|
||||||
.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
|
|
||||||
.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
|
|
||||||
.@{fa-css-prefix}-wechat:before,
|
|
||||||
.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
|
|
||||||
.@{fa-css-prefix}-send:before,
|
|
||||||
.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
|
|
||||||
.@{fa-css-prefix}-send-o:before,
|
|
||||||
.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }
|
|
||||||
.@{fa-css-prefix}-history:before { content: @fa-var-history; }
|
|
||||||
.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }
|
|
||||||
.@{fa-css-prefix}-header:before { content: @fa-var-header; }
|
|
||||||
.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
|
|
||||||
.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }
|
|
||||||
.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
|
|
||||||
.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
|
|
||||||
.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
|
|
||||||
.@{fa-css-prefix}-soccer-ball-o:before,
|
|
||||||
.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }
|
|
||||||
.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
|
|
||||||
.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
|
|
||||||
.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
|
|
||||||
.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
|
|
||||||
.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
|
|
||||||
.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
|
|
||||||
.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }
|
|
||||||
.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
|
|
||||||
.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
|
|
||||||
.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
|
|
||||||
.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
|
|
||||||
.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
|
|
||||||
.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
|
|
||||||
.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
|
|
||||||
.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
|
|
||||||
.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
|
|
||||||
.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
|
|
||||||
.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
|
|
||||||
.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }
|
|
||||||
.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
|
|
||||||
.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
|
|
||||||
.@{fa-css-prefix}-at:before { content: @fa-var-at; }
|
|
||||||
.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }
|
|
||||||
.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
|
|
||||||
.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
|
|
||||||
.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }
|
|
||||||
.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }
|
|
||||||
.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }
|
|
||||||
.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
|
|
||||||
.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
|
|
||||||
.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
|
|
||||||
.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
|
|
||||||
.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
|
|
||||||
.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
|
|
||||||
.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
|
|
||||||
.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
|
|
||||||
.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }
|
|
||||||
.@{fa-css-prefix}-shekel:before,
|
|
||||||
.@{fa-css-prefix}-sheqel:before,
|
|
||||||
.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }
|
|
||||||
.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }
|
|
||||||
.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
|
|
||||||
.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
|
|
||||||
.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
|
|
||||||
.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
|
|
||||||
.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
|
|
||||||
.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
|
|
||||||
.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
|
|
||||||
.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
|
|
||||||
.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
|
|
||||||
.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
|
|
||||||
.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }
|
|
||||||
.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
|
|
||||||
.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
|
|
||||||
.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
|
|
||||||
.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
|
|
||||||
.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
|
|
||||||
.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
|
|
||||||
.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
|
|
||||||
.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
|
|
||||||
.@{fa-css-prefix}-intersex:before,
|
|
||||||
.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
|
|
||||||
.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
|
|
||||||
.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
|
|
||||||
.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
|
|
||||||
.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
|
|
||||||
.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
|
|
||||||
.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }
|
|
||||||
.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }
|
|
||||||
.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
|
|
||||||
.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
|
|
||||||
.@{fa-css-prefix}-server:before { content: @fa-var-server; }
|
|
||||||
.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
|
|
||||||
.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
|
|
||||||
.@{fa-css-prefix}-hotel:before,
|
|
||||||
.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
|
|
||||||
.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
|
|
||||||
.@{fa-css-prefix}-train:before { content: @fa-var-train; }
|
|
||||||
.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
|
|
||||||
.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }
|
|
||||||
.@{fa-css-prefix}-yc:before,
|
|
||||||
.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }
|
|
||||||
.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }
|
|
||||||
.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }
|
|
||||||
.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }
|
|
||||||
.@{fa-css-prefix}-battery-4:before,
|
|
||||||
.@{fa-css-prefix}-battery:before,
|
|
||||||
.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }
|
|
||||||
.@{fa-css-prefix}-battery-3:before,
|
|
||||||
.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }
|
|
||||||
.@{fa-css-prefix}-battery-2:before,
|
|
||||||
.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }
|
|
||||||
.@{fa-css-prefix}-battery-1:before,
|
|
||||||
.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }
|
|
||||||
.@{fa-css-prefix}-battery-0:before,
|
|
||||||
.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }
|
|
||||||
.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }
|
|
||||||
.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }
|
|
||||||
.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }
|
|
||||||
.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }
|
|
||||||
.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }
|
|
||||||
.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }
|
|
||||||
.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }
|
|
||||||
.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }
|
|
||||||
.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }
|
|
||||||
.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }
|
|
||||||
.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }
|
|
||||||
.@{fa-css-prefix}-hourglass-1:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }
|
|
||||||
.@{fa-css-prefix}-hourglass-2:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }
|
|
||||||
.@{fa-css-prefix}-hourglass-3:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }
|
|
||||||
.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }
|
|
||||||
.@{fa-css-prefix}-hand-grab-o:before,
|
|
||||||
.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }
|
|
||||||
.@{fa-css-prefix}-hand-stop-o:before,
|
|
||||||
.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }
|
|
||||||
.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }
|
|
||||||
.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }
|
|
||||||
.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }
|
|
||||||
.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }
|
|
||||||
.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }
|
|
||||||
.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }
|
|
||||||
.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }
|
|
||||||
.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }
|
|
||||||
.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }
|
|
||||||
.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }
|
|
||||||
.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }
|
|
||||||
.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }
|
|
||||||
.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }
|
|
||||||
.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }
|
|
||||||
.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }
|
|
||||||
.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }
|
|
||||||
.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }
|
|
||||||
.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }
|
|
||||||
.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }
|
|
||||||
.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }
|
|
||||||
.@{fa-css-prefix}-tv:before,
|
|
||||||
.@{fa-css-prefix}-television:before { content: @fa-var-television; }
|
|
||||||
.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }
|
|
||||||
.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }
|
|
||||||
.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }
|
|
||||||
.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }
|
|
||||||
.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }
|
|
||||||
.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }
|
|
||||||
.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }
|
|
||||||
.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }
|
|
||||||
.@{fa-css-prefix}-map:before { content: @fa-var-map; }
|
|
||||||
.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }
|
|
||||||
.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }
|
|
||||||
.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }
|
|
||||||
.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }
|
|
||||||
.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }
|
|
||||||
.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
|
|
||||||
.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }
|
|
||||||
.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }
|
|
||||||
.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }
|
|
||||||
.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }
|
|
||||||
.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }
|
|
||||||
.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }
|
|
||||||
.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }
|
|
||||||
.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }
|
|
||||||
.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }
|
|
||||||
.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }
|
|
||||||
.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }
|
|
||||||
.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }
|
|
||||||
.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }
|
|
||||||
.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }
|
|
||||||
.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }
|
|
||||||
.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }
|
|
||||||
.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }
|
|
||||||
.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }
|
|
||||||
.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }
|
|
||||||
.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }
|
|
||||||
.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }
|
|
||||||
.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }
|
|
||||||
.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }
|
|
||||||
.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }
|
|
||||||
.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }
|
|
||||||
.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }
|
|
||||||
.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }
|
|
||||||
.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }
|
|
||||||
.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }
|
|
||||||
.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }
|
|
||||||
.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }
|
|
||||||
.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }
|
|
||||||
.@{fa-css-prefix}-asl-interpreting:before,
|
|
||||||
.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
|
|
||||||
.@{fa-css-prefix}-deafness:before,
|
|
||||||
.@{fa-css-prefix}-hard-of-hearing:before,
|
|
||||||
.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }
|
|
||||||
.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }
|
|
||||||
.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }
|
|
||||||
.@{fa-css-prefix}-signing:before,
|
|
||||||
.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }
|
|
||||||
.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }
|
|
||||||
.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }
|
|
||||||
.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }
|
|
||||||
.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }
|
|
||||||
.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }
|
|
||||||
.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }
|
|
||||||
.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
|
|
||||||
.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }
|
|
||||||
.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }
|
|
||||||
.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }
|
|
||||||
.@{fa-css-prefix}-google-plus-circle:before,
|
|
||||||
.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }
|
|
||||||
.@{fa-css-prefix}-fa:before,
|
|
||||||
.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }
|
|
||||||
.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }
|
|
||||||
.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }
|
|
||||||
.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }
|
|
||||||
.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }
|
|
||||||
.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }
|
|
||||||
.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }
|
|
||||||
.@{fa-css-prefix}-vcard:before,
|
|
||||||
.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }
|
|
||||||
.@{fa-css-prefix}-vcard-o:before,
|
|
||||||
.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }
|
|
||||||
.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }
|
|
||||||
.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }
|
|
||||||
.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }
|
|
||||||
.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }
|
|
||||||
.@{fa-css-prefix}-drivers-license:before,
|
|
||||||
.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }
|
|
||||||
.@{fa-css-prefix}-drivers-license-o:before,
|
|
||||||
.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }
|
|
||||||
.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }
|
|
||||||
.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }
|
|
||||||
.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }
|
|
||||||
.@{fa-css-prefix}-thermometer-4:before,
|
|
||||||
.@{fa-css-prefix}-thermometer:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }
|
|
||||||
.@{fa-css-prefix}-thermometer-3:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }
|
|
||||||
.@{fa-css-prefix}-thermometer-2:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }
|
|
||||||
.@{fa-css-prefix}-thermometer-1:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }
|
|
||||||
.@{fa-css-prefix}-thermometer-0:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }
|
|
||||||
.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }
|
|
||||||
.@{fa-css-prefix}-bathtub:before,
|
|
||||||
.@{fa-css-prefix}-s15:before,
|
|
||||||
.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }
|
|
||||||
.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }
|
|
||||||
.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }
|
|
||||||
.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }
|
|
||||||
.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }
|
|
||||||
.@{fa-css-prefix}-times-rectangle:before,
|
|
||||||
.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }
|
|
||||||
.@{fa-css-prefix}-times-rectangle-o:before,
|
|
||||||
.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }
|
|
||||||
.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }
|
|
||||||
.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }
|
|
||||||
.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }
|
|
||||||
.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }
|
|
||||||
.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }
|
|
||||||
.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }
|
|
||||||
.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }
|
|
||||||
.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }
|
|
||||||
.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }
|
|
||||||
.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }
|
|
||||||
.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }
|
|
13
docs/vendor/font-awesome/less/larger.less
vendored
@ -1,13 +0,0 @@
|
|||||||
// Icon Sizes
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
/* makes the font 33% larger relative to the icon container */
|
|
||||||
.@{fa-css-prefix}-lg {
|
|
||||||
font-size: (4em / 3);
|
|
||||||
line-height: (3em / 4);
|
|
||||||
vertical-align: -15%;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-2x { font-size: 2em; }
|
|
||||||
.@{fa-css-prefix}-3x { font-size: 3em; }
|
|
||||||
.@{fa-css-prefix}-4x { font-size: 4em; }
|
|
||||||
.@{fa-css-prefix}-5x { font-size: 5em; }
|
|
19
docs/vendor/font-awesome/less/list.less
vendored
@ -1,19 +0,0 @@
|
|||||||
// List Icons
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-ul {
|
|
||||||
padding-left: 0;
|
|
||||||
margin-left: @fa-li-width;
|
|
||||||
list-style-type: none;
|
|
||||||
> li { position: relative; }
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-li {
|
|
||||||
position: absolute;
|
|
||||||
left: -@fa-li-width;
|
|
||||||
width: @fa-li-width;
|
|
||||||
top: (2em / 14);
|
|
||||||
text-align: center;
|
|
||||||
&.@{fa-css-prefix}-lg {
|
|
||||||
left: (-@fa-li-width + (4em / 14));
|
|
||||||
}
|
|
||||||
}
|
|
60
docs/vendor/font-awesome/less/mixins.less
vendored
@ -1,60 +0,0 @@
|
|||||||
// Mixins
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.fa-icon() {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
|
|
||||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
|
||||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-icon-rotate(@degrees, @rotation) {
|
|
||||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
|
|
||||||
-webkit-transform: rotate(@degrees);
|
|
||||||
-ms-transform: rotate(@degrees);
|
|
||||||
transform: rotate(@degrees);
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-icon-flip(@horiz, @vert, @rotation) {
|
|
||||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
|
|
||||||
-webkit-transform: scale(@horiz, @vert);
|
|
||||||
-ms-transform: scale(@horiz, @vert);
|
|
||||||
transform: scale(@horiz, @vert);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Only display content to screen readers. A la Bootstrap 4.
|
|
||||||
//
|
|
||||||
// See: http://a11yproject.com/posts/how-to-hide-content/
|
|
||||||
|
|
||||||
.sr-only() {
|
|
||||||
position: absolute;
|
|
||||||
width: 1px;
|
|
||||||
height: 1px;
|
|
||||||
padding: 0;
|
|
||||||
margin: -1px;
|
|
||||||
overflow: hidden;
|
|
||||||
clip: rect(0,0,0,0);
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use in conjunction with .sr-only to only display content when it's focused.
|
|
||||||
//
|
|
||||||
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
|
|
||||||
//
|
|
||||||
// Credit: HTML5 Boilerplate
|
|
||||||
|
|
||||||
.sr-only-focusable() {
|
|
||||||
&:active,
|
|
||||||
&:focus {
|
|
||||||
position: static;
|
|
||||||
width: auto;
|
|
||||||
height: auto;
|
|
||||||
margin: 0;
|
|
||||||
overflow: visible;
|
|
||||||
clip: auto;
|
|
||||||
}
|
|
||||||
}
|
|
15
docs/vendor/font-awesome/less/path.less
vendored
@ -1,15 +0,0 @@
|
|||||||
/* FONT PATH
|
|
||||||
* -------------------------- */
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'FontAwesome';
|
|
||||||
src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
|
|
||||||
src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
|
|
||||||
url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
|
|
||||||
url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
|
|
||||||
url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
|
|
||||||
url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
|
|
||||||
// src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
// Rotated & Flipped Icons
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
|
|
||||||
.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
|
|
||||||
.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
|
|
||||||
.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
|
|
||||||
|
|
||||||
// Hook for IE8-9
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
:root .@{fa-css-prefix}-rotate-90,
|
|
||||||
:root .@{fa-css-prefix}-rotate-180,
|
|
||||||
:root .@{fa-css-prefix}-rotate-270,
|
|
||||||
:root .@{fa-css-prefix}-flip-horizontal,
|
|
||||||
:root .@{fa-css-prefix}-flip-vertical {
|
|
||||||
filter: none;
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
// Screen Readers
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.sr-only { .sr-only(); }
|
|
||||||
.sr-only-focusable { .sr-only-focusable(); }
|
|
20
docs/vendor/font-awesome/less/stacked.less
vendored
@ -1,20 +0,0 @@
|
|||||||
// Stacked Icons
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-stack {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
width: 2em;
|
|
||||||
height: 2em;
|
|
||||||
line-height: 2em;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-stack-1x { line-height: inherit; }
|
|
||||||
.@{fa-css-prefix}-stack-2x { font-size: 2em; }
|
|
||||||
.@{fa-css-prefix}-inverse { color: @fa-inverse; }
|
|
800
docs/vendor/font-awesome/less/variables.less
vendored
@ -1,800 +0,0 @@
|
|||||||
// Variables
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
@fa-font-path: "../fonts";
|
|
||||||
@fa-font-size-base: 14px;
|
|
||||||
@fa-line-height-base: 1;
|
|
||||||
//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly
|
|
||||||
@fa-css-prefix: fa;
|
|
||||||
@fa-version: "4.7.0";
|
|
||||||
@fa-border-color: #eee;
|
|
||||||
@fa-inverse: #fff;
|
|
||||||
@fa-li-width: (30em / 14);
|
|
||||||
|
|
||||||
@fa-var-500px: "\f26e";
|
|
||||||
@fa-var-address-book: "\f2b9";
|
|
||||||
@fa-var-address-book-o: "\f2ba";
|
|
||||||
@fa-var-address-card: "\f2bb";
|
|
||||||
@fa-var-address-card-o: "\f2bc";
|
|
||||||
@fa-var-adjust: "\f042";
|
|
||||||
@fa-var-adn: "\f170";
|
|
||||||
@fa-var-align-center: "\f037";
|
|
||||||
@fa-var-align-justify: "\f039";
|
|
||||||
@fa-var-align-left: "\f036";
|
|
||||||
@fa-var-align-right: "\f038";
|
|
||||||
@fa-var-amazon: "\f270";
|
|
||||||
@fa-var-ambulance: "\f0f9";
|
|
||||||
@fa-var-american-sign-language-interpreting: "\f2a3";
|
|
||||||
@fa-var-anchor: "\f13d";
|
|
||||||
@fa-var-android: "\f17b";
|
|
||||||
@fa-var-angellist: "\f209";
|
|
||||||
@fa-var-angle-double-down: "\f103";
|
|
||||||
@fa-var-angle-double-left: "\f100";
|
|
||||||
@fa-var-angle-double-right: "\f101";
|
|
||||||
@fa-var-angle-double-up: "\f102";
|
|
||||||
@fa-var-angle-down: "\f107";
|
|
||||||
@fa-var-angle-left: "\f104";
|
|
||||||
@fa-var-angle-right: "\f105";
|
|
||||||
@fa-var-angle-up: "\f106";
|
|
||||||
@fa-var-apple: "\f179";
|
|
||||||
@fa-var-archive: "\f187";
|
|
||||||
@fa-var-area-chart: "\f1fe";
|
|
||||||
@fa-var-arrow-circle-down: "\f0ab";
|
|
||||||
@fa-var-arrow-circle-left: "\f0a8";
|
|
||||||
@fa-var-arrow-circle-o-down: "\f01a";
|
|
||||||
@fa-var-arrow-circle-o-left: "\f190";
|
|
||||||
@fa-var-arrow-circle-o-right: "\f18e";
|
|
||||||
@fa-var-arrow-circle-o-up: "\f01b";
|
|
||||||
@fa-var-arrow-circle-right: "\f0a9";
|
|
||||||
@fa-var-arrow-circle-up: "\f0aa";
|
|
||||||
@fa-var-arrow-down: "\f063";
|
|
||||||
@fa-var-arrow-left: "\f060";
|
|
||||||
@fa-var-arrow-right: "\f061";
|
|
||||||
@fa-var-arrow-up: "\f062";
|
|
||||||
@fa-var-arrows: "\f047";
|
|
||||||
@fa-var-arrows-alt: "\f0b2";
|
|
||||||
@fa-var-arrows-h: "\f07e";
|
|
||||||
@fa-var-arrows-v: "\f07d";
|
|
||||||
@fa-var-asl-interpreting: "\f2a3";
|
|
||||||
@fa-var-assistive-listening-systems: "\f2a2";
|
|
||||||
@fa-var-asterisk: "\f069";
|
|
||||||
@fa-var-at: "\f1fa";
|
|
||||||
@fa-var-audio-description: "\f29e";
|
|
||||||
@fa-var-automobile: "\f1b9";
|
|
||||||
@fa-var-backward: "\f04a";
|
|
||||||
@fa-var-balance-scale: "\f24e";
|
|
||||||
@fa-var-ban: "\f05e";
|
|
||||||
@fa-var-bandcamp: "\f2d5";
|
|
||||||
@fa-var-bank: "\f19c";
|
|
||||||
@fa-var-bar-chart: "\f080";
|
|
||||||
@fa-var-bar-chart-o: "\f080";
|
|
||||||
@fa-var-barcode: "\f02a";
|
|
||||||
@fa-var-bars: "\f0c9";
|
|
||||||
@fa-var-bath: "\f2cd";
|
|
||||||
@fa-var-bathtub: "\f2cd";
|
|
||||||
@fa-var-battery: "\f240";
|
|
||||||
@fa-var-battery-0: "\f244";
|
|
||||||
@fa-var-battery-1: "\f243";
|
|
||||||
@fa-var-battery-2: "\f242";
|
|
||||||
@fa-var-battery-3: "\f241";
|
|
||||||
@fa-var-battery-4: "\f240";
|
|
||||||
@fa-var-battery-empty: "\f244";
|
|
||||||
@fa-var-battery-full: "\f240";
|
|
||||||
@fa-var-battery-half: "\f242";
|
|
||||||
@fa-var-battery-quarter: "\f243";
|
|
||||||
@fa-var-battery-three-quarters: "\f241";
|
|
||||||
@fa-var-bed: "\f236";
|
|
||||||
@fa-var-beer: "\f0fc";
|
|
||||||
@fa-var-behance: "\f1b4";
|
|
||||||
@fa-var-behance-square: "\f1b5";
|
|
||||||
@fa-var-bell: "\f0f3";
|
|
||||||
@fa-var-bell-o: "\f0a2";
|
|
||||||
@fa-var-bell-slash: "\f1f6";
|
|
||||||
@fa-var-bell-slash-o: "\f1f7";
|
|
||||||
@fa-var-bicycle: "\f206";
|
|
||||||
@fa-var-binoculars: "\f1e5";
|
|
||||||
@fa-var-birthday-cake: "\f1fd";
|
|
||||||
@fa-var-bitbucket: "\f171";
|
|
||||||
@fa-var-bitbucket-square: "\f172";
|
|
||||||
@fa-var-bitcoin: "\f15a";
|
|
||||||
@fa-var-black-tie: "\f27e";
|
|
||||||
@fa-var-blind: "\f29d";
|
|
||||||
@fa-var-bluetooth: "\f293";
|
|
||||||
@fa-var-bluetooth-b: "\f294";
|
|
||||||
@fa-var-bold: "\f032";
|
|
||||||
@fa-var-bolt: "\f0e7";
|
|
||||||
@fa-var-bomb: "\f1e2";
|
|
||||||
@fa-var-book: "\f02d";
|
|
||||||
@fa-var-bookmark: "\f02e";
|
|
||||||
@fa-var-bookmark-o: "\f097";
|
|
||||||
@fa-var-braille: "\f2a1";
|
|
||||||
@fa-var-briefcase: "\f0b1";
|
|
||||||
@fa-var-btc: "\f15a";
|
|
||||||
@fa-var-bug: "\f188";
|
|
||||||
@fa-var-building: "\f1ad";
|
|
||||||
@fa-var-building-o: "\f0f7";
|
|
||||||
@fa-var-bullhorn: "\f0a1";
|
|
||||||
@fa-var-bullseye: "\f140";
|
|
||||||
@fa-var-bus: "\f207";
|
|
||||||
@fa-var-buysellads: "\f20d";
|
|
||||||
@fa-var-cab: "\f1ba";
|
|
||||||
@fa-var-calculator: "\f1ec";
|
|
||||||
@fa-var-calendar: "\f073";
|
|
||||||
@fa-var-calendar-check-o: "\f274";
|
|
||||||
@fa-var-calendar-minus-o: "\f272";
|
|
||||||
@fa-var-calendar-o: "\f133";
|
|
||||||
@fa-var-calendar-plus-o: "\f271";
|
|
||||||
@fa-var-calendar-times-o: "\f273";
|
|
||||||
@fa-var-camera: "\f030";
|
|
||||||
@fa-var-camera-retro: "\f083";
|
|
||||||
@fa-var-car: "\f1b9";
|
|
||||||
@fa-var-caret-down: "\f0d7";
|
|
||||||
@fa-var-caret-left: "\f0d9";
|
|
||||||
@fa-var-caret-right: "\f0da";
|
|
||||||
@fa-var-caret-square-o-down: "\f150";
|
|
||||||
@fa-var-caret-square-o-left: "\f191";
|
|
||||||
@fa-var-caret-square-o-right: "\f152";
|
|
||||||
@fa-var-caret-square-o-up: "\f151";
|
|
||||||
@fa-var-caret-up: "\f0d8";
|
|
||||||
@fa-var-cart-arrow-down: "\f218";
|
|
||||||
@fa-var-cart-plus: "\f217";
|
|
||||||
@fa-var-cc: "\f20a";
|
|
||||||
@fa-var-cc-amex: "\f1f3";
|
|
||||||
@fa-var-cc-diners-club: "\f24c";
|
|
||||||
@fa-var-cc-discover: "\f1f2";
|
|
||||||
@fa-var-cc-jcb: "\f24b";
|
|
||||||
@fa-var-cc-mastercard: "\f1f1";
|
|
||||||
@fa-var-cc-paypal: "\f1f4";
|
|
||||||
@fa-var-cc-stripe: "\f1f5";
|
|
||||||
@fa-var-cc-visa: "\f1f0";
|
|
||||||
@fa-var-certificate: "\f0a3";
|
|
||||||
@fa-var-chain: "\f0c1";
|
|
||||||
@fa-var-chain-broken: "\f127";
|
|
||||||
@fa-var-check: "\f00c";
|
|
||||||
@fa-var-check-circle: "\f058";
|
|
||||||
@fa-var-check-circle-o: "\f05d";
|
|
||||||
@fa-var-check-square: "\f14a";
|
|
||||||
@fa-var-check-square-o: "\f046";
|
|
||||||
@fa-var-chevron-circle-down: "\f13a";
|
|
||||||
@fa-var-chevron-circle-left: "\f137";
|
|
||||||
@fa-var-chevron-circle-right: "\f138";
|
|
||||||
@fa-var-chevron-circle-up: "\f139";
|
|
||||||
@fa-var-chevron-down: "\f078";
|
|
||||||
@fa-var-chevron-left: "\f053";
|
|
||||||
@fa-var-chevron-right: "\f054";
|
|
||||||
@fa-var-chevron-up: "\f077";
|
|
||||||
@fa-var-child: "\f1ae";
|
|
||||||
@fa-var-chrome: "\f268";
|
|
||||||
@fa-var-circle: "\f111";
|
|
||||||
@fa-var-circle-o: "\f10c";
|
|
||||||
@fa-var-circle-o-notch: "\f1ce";
|
|
||||||
@fa-var-circle-thin: "\f1db";
|
|
||||||
@fa-var-clipboard: "\f0ea";
|
|
||||||
@fa-var-clock-o: "\f017";
|
|
||||||
@fa-var-clone: "\f24d";
|
|
||||||
@fa-var-close: "\f00d";
|
|
||||||
@fa-var-cloud: "\f0c2";
|
|
||||||
@fa-var-cloud-download: "\f0ed";
|
|
||||||
@fa-var-cloud-upload: "\f0ee";
|
|
||||||
@fa-var-cny: "\f157";
|
|
||||||
@fa-var-code: "\f121";
|
|
||||||
@fa-var-code-fork: "\f126";
|
|
||||||
@fa-var-codepen: "\f1cb";
|
|
||||||
@fa-var-codiepie: "\f284";
|
|
||||||
@fa-var-coffee: "\f0f4";
|
|
||||||
@fa-var-cog: "\f013";
|
|
||||||
@fa-var-cogs: "\f085";
|
|
||||||
@fa-var-columns: "\f0db";
|
|
||||||
@fa-var-comment: "\f075";
|
|
||||||
@fa-var-comment-o: "\f0e5";
|
|
||||||
@fa-var-commenting: "\f27a";
|
|
||||||
@fa-var-commenting-o: "\f27b";
|
|
||||||
@fa-var-comments: "\f086";
|
|
||||||
@fa-var-comments-o: "\f0e6";
|
|
||||||
@fa-var-compass: "\f14e";
|
|
||||||
@fa-var-compress: "\f066";
|
|
||||||
@fa-var-connectdevelop: "\f20e";
|
|
||||||
@fa-var-contao: "\f26d";
|
|
||||||
@fa-var-copy: "\f0c5";
|
|
||||||
@fa-var-copyright: "\f1f9";
|
|
||||||
@fa-var-creative-commons: "\f25e";
|
|
||||||
@fa-var-credit-card: "\f09d";
|
|
||||||
@fa-var-credit-card-alt: "\f283";
|
|
||||||
@fa-var-crop: "\f125";
|
|
||||||
@fa-var-crosshairs: "\f05b";
|
|
||||||
@fa-var-css3: "\f13c";
|
|
||||||
@fa-var-cube: "\f1b2";
|
|
||||||
@fa-var-cubes: "\f1b3";
|
|
||||||
@fa-var-cut: "\f0c4";
|
|
||||||
@fa-var-cutlery: "\f0f5";
|
|
||||||
@fa-var-dashboard: "\f0e4";
|
|
||||||
@fa-var-dashcube: "\f210";
|
|
||||||
@fa-var-database: "\f1c0";
|
|
||||||
@fa-var-deaf: "\f2a4";
|
|
||||||
@fa-var-deafness: "\f2a4";
|
|
||||||
@fa-var-dedent: "\f03b";
|
|
||||||
@fa-var-delicious: "\f1a5";
|
|
||||||
@fa-var-desktop: "\f108";
|
|
||||||
@fa-var-deviantart: "\f1bd";
|
|
||||||
@fa-var-diamond: "\f219";
|
|
||||||
@fa-var-digg: "\f1a6";
|
|
||||||
@fa-var-dollar: "\f155";
|
|
||||||
@fa-var-dot-circle-o: "\f192";
|
|
||||||
@fa-var-download: "\f019";
|
|
||||||
@fa-var-dribbble: "\f17d";
|
|
||||||
@fa-var-drivers-license: "\f2c2";
|
|
||||||
@fa-var-drivers-license-o: "\f2c3";
|
|
||||||
@fa-var-dropbox: "\f16b";
|
|
||||||
@fa-var-drupal: "\f1a9";
|
|
||||||
@fa-var-edge: "\f282";
|
|
||||||
@fa-var-edit: "\f044";
|
|
||||||
@fa-var-eercast: "\f2da";
|
|
||||||
@fa-var-eject: "\f052";
|
|
||||||
@fa-var-ellipsis-h: "\f141";
|
|
||||||
@fa-var-ellipsis-v: "\f142";
|
|
||||||
@fa-var-empire: "\f1d1";
|
|
||||||
@fa-var-envelope: "\f0e0";
|
|
||||||
@fa-var-envelope-o: "\f003";
|
|
||||||
@fa-var-envelope-open: "\f2b6";
|
|
||||||
@fa-var-envelope-open-o: "\f2b7";
|
|
||||||
@fa-var-envelope-square: "\f199";
|
|
||||||
@fa-var-envira: "\f299";
|
|
||||||
@fa-var-eraser: "\f12d";
|
|
||||||
@fa-var-etsy: "\f2d7";
|
|
||||||
@fa-var-eur: "\f153";
|
|
||||||
@fa-var-euro: "\f153";
|
|
||||||
@fa-var-exchange: "\f0ec";
|
|
||||||
@fa-var-exclamation: "\f12a";
|
|
||||||
@fa-var-exclamation-circle: "\f06a";
|
|
||||||
@fa-var-exclamation-triangle: "\f071";
|
|
||||||
@fa-var-expand: "\f065";
|
|
||||||
@fa-var-expeditedssl: "\f23e";
|
|
||||||
@fa-var-external-link: "\f08e";
|
|
||||||
@fa-var-external-link-square: "\f14c";
|
|
||||||
@fa-var-eye: "\f06e";
|
|
||||||
@fa-var-eye-slash: "\f070";
|
|
||||||
@fa-var-eyedropper: "\f1fb";
|
|
||||||
@fa-var-fa: "\f2b4";
|
|
||||||
@fa-var-facebook: "\f09a";
|
|
||||||
@fa-var-facebook-f: "\f09a";
|
|
||||||
@fa-var-facebook-official: "\f230";
|
|
||||||
@fa-var-facebook-square: "\f082";
|
|
||||||
@fa-var-fast-backward: "\f049";
|
|
||||||
@fa-var-fast-forward: "\f050";
|
|
||||||
@fa-var-fax: "\f1ac";
|
|
||||||
@fa-var-feed: "\f09e";
|
|
||||||
@fa-var-female: "\f182";
|
|
||||||
@fa-var-fighter-jet: "\f0fb";
|
|
||||||
@fa-var-file: "\f15b";
|
|
||||||
@fa-var-file-archive-o: "\f1c6";
|
|
||||||
@fa-var-file-audio-o: "\f1c7";
|
|
||||||
@fa-var-file-code-o: "\f1c9";
|
|
||||||
@fa-var-file-excel-o: "\f1c3";
|
|
||||||
@fa-var-file-image-o: "\f1c5";
|
|
||||||
@fa-var-file-movie-o: "\f1c8";
|
|
||||||
@fa-var-file-o: "\f016";
|
|
||||||
@fa-var-file-pdf-o: "\f1c1";
|
|
||||||
@fa-var-file-photo-o: "\f1c5";
|
|
||||||
@fa-var-file-picture-o: "\f1c5";
|
|
||||||
@fa-var-file-powerpoint-o: "\f1c4";
|
|
||||||
@fa-var-file-sound-o: "\f1c7";
|
|
||||||
@fa-var-file-text: "\f15c";
|
|
||||||
@fa-var-file-text-o: "\f0f6";
|
|
||||||
@fa-var-file-video-o: "\f1c8";
|
|
||||||
@fa-var-file-word-o: "\f1c2";
|
|
||||||
@fa-var-file-zip-o: "\f1c6";
|
|
||||||
@fa-var-files-o: "\f0c5";
|
|
||||||
@fa-var-film: "\f008";
|
|
||||||
@fa-var-filter: "\f0b0";
|
|
||||||
@fa-var-fire: "\f06d";
|
|
||||||
@fa-var-fire-extinguisher: "\f134";
|
|
||||||
@fa-var-firefox: "\f269";
|
|
||||||
@fa-var-first-order: "\f2b0";
|
|
||||||
@fa-var-flag: "\f024";
|
|
||||||
@fa-var-flag-checkered: "\f11e";
|
|
||||||
@fa-var-flag-o: "\f11d";
|
|
||||||
@fa-var-flash: "\f0e7";
|
|
||||||
@fa-var-flask: "\f0c3";
|
|
||||||
@fa-var-flickr: "\f16e";
|
|
||||||
@fa-var-floppy-o: "\f0c7";
|
|
||||||
@fa-var-folder: "\f07b";
|
|
||||||
@fa-var-folder-o: "\f114";
|
|
||||||
@fa-var-folder-open: "\f07c";
|
|
||||||
@fa-var-folder-open-o: "\f115";
|
|
||||||
@fa-var-font: "\f031";
|
|
||||||
@fa-var-font-awesome: "\f2b4";
|
|
||||||
@fa-var-fonticons: "\f280";
|
|
||||||
@fa-var-fort-awesome: "\f286";
|
|
||||||
@fa-var-forumbee: "\f211";
|
|
||||||
@fa-var-forward: "\f04e";
|
|
||||||
@fa-var-foursquare: "\f180";
|
|
||||||
@fa-var-free-code-camp: "\f2c5";
|
|
||||||
@fa-var-frown-o: "\f119";
|
|
||||||
@fa-var-futbol-o: "\f1e3";
|
|
||||||
@fa-var-gamepad: "\f11b";
|
|
||||||
@fa-var-gavel: "\f0e3";
|
|
||||||
@fa-var-gbp: "\f154";
|
|
||||||
@fa-var-ge: "\f1d1";
|
|
||||||
@fa-var-gear: "\f013";
|
|
||||||
@fa-var-gears: "\f085";
|
|
||||||
@fa-var-genderless: "\f22d";
|
|
||||||
@fa-var-get-pocket: "\f265";
|
|
||||||
@fa-var-gg: "\f260";
|
|
||||||
@fa-var-gg-circle: "\f261";
|
|
||||||
@fa-var-gift: "\f06b";
|
|
||||||
@fa-var-git: "\f1d3";
|
|
||||||
@fa-var-git-square: "\f1d2";
|
|
||||||
@fa-var-github: "\f09b";
|
|
||||||
@fa-var-github-alt: "\f113";
|
|
||||||
@fa-var-github-square: "\f092";
|
|
||||||
@fa-var-gitlab: "\f296";
|
|
||||||
@fa-var-gittip: "\f184";
|
|
||||||
@fa-var-glass: "\f000";
|
|
||||||
@fa-var-glide: "\f2a5";
|
|
||||||
@fa-var-glide-g: "\f2a6";
|
|
||||||
@fa-var-globe: "\f0ac";
|
|
||||||
@fa-var-google: "\f1a0";
|
|
||||||
@fa-var-google-plus: "\f0d5";
|
|
||||||
@fa-var-google-plus-circle: "\f2b3";
|
|
||||||
@fa-var-google-plus-official: "\f2b3";
|
|
||||||
@fa-var-google-plus-square: "\f0d4";
|
|
||||||
@fa-var-google-wallet: "\f1ee";
|
|
||||||
@fa-var-graduation-cap: "\f19d";
|
|
||||||
@fa-var-gratipay: "\f184";
|
|
||||||
@fa-var-grav: "\f2d6";
|
|
||||||
@fa-var-group: "\f0c0";
|
|
||||||
@fa-var-h-square: "\f0fd";
|
|
||||||
@fa-var-hacker-news: "\f1d4";
|
|
||||||
@fa-var-hand-grab-o: "\f255";
|
|
||||||
@fa-var-hand-lizard-o: "\f258";
|
|
||||||
@fa-var-hand-o-down: "\f0a7";
|
|
||||||
@fa-var-hand-o-left: "\f0a5";
|
|
||||||
@fa-var-hand-o-right: "\f0a4";
|
|
||||||
@fa-var-hand-o-up: "\f0a6";
|
|
||||||
@fa-var-hand-paper-o: "\f256";
|
|
||||||
@fa-var-hand-peace-o: "\f25b";
|
|
||||||
@fa-var-hand-pointer-o: "\f25a";
|
|
||||||
@fa-var-hand-rock-o: "\f255";
|
|
||||||
@fa-var-hand-scissors-o: "\f257";
|
|
||||||
@fa-var-hand-spock-o: "\f259";
|
|
||||||
@fa-var-hand-stop-o: "\f256";
|
|
||||||
@fa-var-handshake-o: "\f2b5";
|
|
||||||
@fa-var-hard-of-hearing: "\f2a4";
|
|
||||||
@fa-var-hashtag: "\f292";
|
|
||||||
@fa-var-hdd-o: "\f0a0";
|
|
||||||
@fa-var-header: "\f1dc";
|
|
||||||
@fa-var-headphones: "\f025";
|
|
||||||
@fa-var-heart: "\f004";
|
|
||||||
@fa-var-heart-o: "\f08a";
|
|
||||||
@fa-var-heartbeat: "\f21e";
|
|
||||||
@fa-var-history: "\f1da";
|
|
||||||
@fa-var-home: "\f015";
|
|
||||||
@fa-var-hospital-o: "\f0f8";
|
|
||||||
@fa-var-hotel: "\f236";
|
|
||||||
@fa-var-hourglass: "\f254";
|
|
||||||
@fa-var-hourglass-1: "\f251";
|
|
||||||
@fa-var-hourglass-2: "\f252";
|
|
||||||
@fa-var-hourglass-3: "\f253";
|
|
||||||
@fa-var-hourglass-end: "\f253";
|
|
||||||
@fa-var-hourglass-half: "\f252";
|
|
||||||
@fa-var-hourglass-o: "\f250";
|
|
||||||
@fa-var-hourglass-start: "\f251";
|
|
||||||
@fa-var-houzz: "\f27c";
|
|
||||||
@fa-var-html5: "\f13b";
|
|
||||||
@fa-var-i-cursor: "\f246";
|
|
||||||
@fa-var-id-badge: "\f2c1";
|
|
||||||
@fa-var-id-card: "\f2c2";
|
|
||||||
@fa-var-id-card-o: "\f2c3";
|
|
||||||
@fa-var-ils: "\f20b";
|
|
||||||
@fa-var-image: "\f03e";
|
|
||||||
@fa-var-imdb: "\f2d8";
|
|
||||||
@fa-var-inbox: "\f01c";
|
|
||||||
@fa-var-indent: "\f03c";
|
|
||||||
@fa-var-industry: "\f275";
|
|
||||||
@fa-var-info: "\f129";
|
|
||||||
@fa-var-info-circle: "\f05a";
|
|
||||||
@fa-var-inr: "\f156";
|
|
||||||
@fa-var-instagram: "\f16d";
|
|
||||||
@fa-var-institution: "\f19c";
|
|
||||||
@fa-var-internet-explorer: "\f26b";
|
|
||||||
@fa-var-intersex: "\f224";
|
|
||||||
@fa-var-ioxhost: "\f208";
|
|
||||||
@fa-var-italic: "\f033";
|
|
||||||
@fa-var-joomla: "\f1aa";
|
|
||||||
@fa-var-jpy: "\f157";
|
|
||||||
@fa-var-jsfiddle: "\f1cc";
|
|
||||||
@fa-var-key: "\f084";
|
|
||||||
@fa-var-keyboard-o: "\f11c";
|
|
||||||
@fa-var-krw: "\f159";
|
|
||||||
@fa-var-language: "\f1ab";
|
|
||||||
@fa-var-laptop: "\f109";
|
|
||||||
@fa-var-lastfm: "\f202";
|
|
||||||
@fa-var-lastfm-square: "\f203";
|
|
||||||
@fa-var-leaf: "\f06c";
|
|
||||||
@fa-var-leanpub: "\f212";
|
|
||||||
@fa-var-legal: "\f0e3";
|
|
||||||
@fa-var-lemon-o: "\f094";
|
|
||||||
@fa-var-level-down: "\f149";
|
|
||||||
@fa-var-level-up: "\f148";
|
|
||||||
@fa-var-life-bouy: "\f1cd";
|
|
||||||
@fa-var-life-buoy: "\f1cd";
|
|
||||||
@fa-var-life-ring: "\f1cd";
|
|
||||||
@fa-var-life-saver: "\f1cd";
|
|
||||||
@fa-var-lightbulb-o: "\f0eb";
|
|
||||||
@fa-var-line-chart: "\f201";
|
|
||||||
@fa-var-link: "\f0c1";
|
|
||||||
@fa-var-linkedin: "\f0e1";
|
|
||||||
@fa-var-linkedin-square: "\f08c";
|
|
||||||
@fa-var-linode: "\f2b8";
|
|
||||||
@fa-var-linux: "\f17c";
|
|
||||||
@fa-var-list: "\f03a";
|
|
||||||
@fa-var-list-alt: "\f022";
|
|
||||||
@fa-var-list-ol: "\f0cb";
|
|
||||||
@fa-var-list-ul: "\f0ca";
|
|
||||||
@fa-var-location-arrow: "\f124";
|
|
||||||
@fa-var-lock: "\f023";
|
|
||||||
@fa-var-long-arrow-down: "\f175";
|
|
||||||
@fa-var-long-arrow-left: "\f177";
|
|
||||||
@fa-var-long-arrow-right: "\f178";
|
|
||||||
@fa-var-long-arrow-up: "\f176";
|
|
||||||
@fa-var-low-vision: "\f2a8";
|
|
||||||
@fa-var-magic: "\f0d0";
|
|
||||||
@fa-var-magnet: "\f076";
|
|
||||||
@fa-var-mail-forward: "\f064";
|
|
||||||
@fa-var-mail-reply: "\f112";
|
|
||||||
@fa-var-mail-reply-all: "\f122";
|
|
||||||
@fa-var-male: "\f183";
|
|
||||||
@fa-var-map: "\f279";
|
|
||||||
@fa-var-map-marker: "\f041";
|
|
||||||
@fa-var-map-o: "\f278";
|
|
||||||
@fa-var-map-pin: "\f276";
|
|
||||||
@fa-var-map-signs: "\f277";
|
|
||||||
@fa-var-mars: "\f222";
|
|
||||||
@fa-var-mars-double: "\f227";
|
|
||||||
@fa-var-mars-stroke: "\f229";
|
|
||||||
@fa-var-mars-stroke-h: "\f22b";
|
|
||||||
@fa-var-mars-stroke-v: "\f22a";
|
|
||||||
@fa-var-maxcdn: "\f136";
|
|
||||||
@fa-var-meanpath: "\f20c";
|
|
||||||
@fa-var-medium: "\f23a";
|
|
||||||
@fa-var-medkit: "\f0fa";
|
|
||||||
@fa-var-meetup: "\f2e0";
|
|
||||||
@fa-var-meh-o: "\f11a";
|
|
||||||
@fa-var-mercury: "\f223";
|
|
||||||
@fa-var-microchip: "\f2db";
|
|
||||||
@fa-var-microphone: "\f130";
|
|
||||||
@fa-var-microphone-slash: "\f131";
|
|
||||||
@fa-var-minus: "\f068";
|
|
||||||
@fa-var-minus-circle: "\f056";
|
|
||||||
@fa-var-minus-square: "\f146";
|
|
||||||
@fa-var-minus-square-o: "\f147";
|
|
||||||
@fa-var-mixcloud: "\f289";
|
|
||||||
@fa-var-mobile: "\f10b";
|
|
||||||
@fa-var-mobile-phone: "\f10b";
|
|
||||||
@fa-var-modx: "\f285";
|
|
||||||
@fa-var-money: "\f0d6";
|
|
||||||
@fa-var-moon-o: "\f186";
|
|
||||||
@fa-var-mortar-board: "\f19d";
|
|
||||||
@fa-var-motorcycle: "\f21c";
|
|
||||||
@fa-var-mouse-pointer: "\f245";
|
|
||||||
@fa-var-music: "\f001";
|
|
||||||
@fa-var-navicon: "\f0c9";
|
|
||||||
@fa-var-neuter: "\f22c";
|
|
||||||
@fa-var-newspaper-o: "\f1ea";
|
|
||||||
@fa-var-object-group: "\f247";
|
|
||||||
@fa-var-object-ungroup: "\f248";
|
|
||||||
@fa-var-odnoklassniki: "\f263";
|
|
||||||
@fa-var-odnoklassniki-square: "\f264";
|
|
||||||
@fa-var-opencart: "\f23d";
|
|
||||||
@fa-var-openid: "\f19b";
|
|
||||||
@fa-var-opera: "\f26a";
|
|
||||||
@fa-var-optin-monster: "\f23c";
|
|
||||||
@fa-var-outdent: "\f03b";
|
|
||||||
@fa-var-pagelines: "\f18c";
|
|
||||||
@fa-var-paint-brush: "\f1fc";
|
|
||||||
@fa-var-paper-plane: "\f1d8";
|
|
||||||
@fa-var-paper-plane-o: "\f1d9";
|
|
||||||
@fa-var-paperclip: "\f0c6";
|
|
||||||
@fa-var-paragraph: "\f1dd";
|
|
||||||
@fa-var-paste: "\f0ea";
|
|
||||||
@fa-var-pause: "\f04c";
|
|
||||||
@fa-var-pause-circle: "\f28b";
|
|
||||||
@fa-var-pause-circle-o: "\f28c";
|
|
||||||
@fa-var-paw: "\f1b0";
|
|
||||||
@fa-var-paypal: "\f1ed";
|
|
||||||
@fa-var-pencil: "\f040";
|
|
||||||
@fa-var-pencil-square: "\f14b";
|
|
||||||
@fa-var-pencil-square-o: "\f044";
|
|
||||||
@fa-var-percent: "\f295";
|
|
||||||
@fa-var-phone: "\f095";
|
|
||||||
@fa-var-phone-square: "\f098";
|
|
||||||
@fa-var-photo: "\f03e";
|
|
||||||
@fa-var-picture-o: "\f03e";
|
|
||||||
@fa-var-pie-chart: "\f200";
|
|
||||||
@fa-var-pied-piper: "\f2ae";
|
|
||||||
@fa-var-pied-piper-alt: "\f1a8";
|
|
||||||
@fa-var-pied-piper-pp: "\f1a7";
|
|
||||||
@fa-var-pinterest: "\f0d2";
|
|
||||||
@fa-var-pinterest-p: "\f231";
|
|
||||||
@fa-var-pinterest-square: "\f0d3";
|
|
||||||
@fa-var-plane: "\f072";
|
|
||||||
@fa-var-play: "\f04b";
|
|
||||||
@fa-var-play-circle: "\f144";
|
|
||||||
@fa-var-play-circle-o: "\f01d";
|
|
||||||
@fa-var-plug: "\f1e6";
|
|
||||||
@fa-var-plus: "\f067";
|
|
||||||
@fa-var-plus-circle: "\f055";
|
|
||||||
@fa-var-plus-square: "\f0fe";
|
|
||||||
@fa-var-plus-square-o: "\f196";
|
|
||||||
@fa-var-podcast: "\f2ce";
|
|
||||||
@fa-var-power-off: "\f011";
|
|
||||||
@fa-var-print: "\f02f";
|
|
||||||
@fa-var-product-hunt: "\f288";
|
|
||||||
@fa-var-puzzle-piece: "\f12e";
|
|
||||||
@fa-var-qq: "\f1d6";
|
|
||||||
@fa-var-qrcode: "\f029";
|
|
||||||
@fa-var-question: "\f128";
|
|
||||||
@fa-var-question-circle: "\f059";
|
|
||||||
@fa-var-question-circle-o: "\f29c";
|
|
||||||
@fa-var-quora: "\f2c4";
|
|
||||||
@fa-var-quote-left: "\f10d";
|
|
||||||
@fa-var-quote-right: "\f10e";
|
|
||||||
@fa-var-ra: "\f1d0";
|
|
||||||
@fa-var-random: "\f074";
|
|
||||||
@fa-var-ravelry: "\f2d9";
|
|
||||||
@fa-var-rebel: "\f1d0";
|
|
||||||
@fa-var-recycle: "\f1b8";
|
|
||||||
@fa-var-reddit: "\f1a1";
|
|
||||||
@fa-var-reddit-alien: "\f281";
|
|
||||||
@fa-var-reddit-square: "\f1a2";
|
|
||||||
@fa-var-refresh: "\f021";
|
|
||||||
@fa-var-registered: "\f25d";
|
|
||||||
@fa-var-remove: "\f00d";
|
|
||||||
@fa-var-renren: "\f18b";
|
|
||||||
@fa-var-reorder: "\f0c9";
|
|
||||||
@fa-var-repeat: "\f01e";
|
|
||||||
@fa-var-reply: "\f112";
|
|
||||||
@fa-var-reply-all: "\f122";
|
|
||||||
@fa-var-resistance: "\f1d0";
|
|
||||||
@fa-var-retweet: "\f079";
|
|
||||||
@fa-var-rmb: "\f157";
|
|
||||||
@fa-var-road: "\f018";
|
|
||||||
@fa-var-rocket: "\f135";
|
|
||||||
@fa-var-rotate-left: "\f0e2";
|
|
||||||
@fa-var-rotate-right: "\f01e";
|
|
||||||
@fa-var-rouble: "\f158";
|
|
||||||
@fa-var-rss: "\f09e";
|
|
||||||
@fa-var-rss-square: "\f143";
|
|
||||||
@fa-var-rub: "\f158";
|
|
||||||
@fa-var-ruble: "\f158";
|
|
||||||
@fa-var-rupee: "\f156";
|
|
||||||
@fa-var-s15: "\f2cd";
|
|
||||||
@fa-var-safari: "\f267";
|
|
||||||
@fa-var-save: "\f0c7";
|
|
||||||
@fa-var-scissors: "\f0c4";
|
|
||||||
@fa-var-scribd: "\f28a";
|
|
||||||
@fa-var-search: "\f002";
|
|
||||||
@fa-var-search-minus: "\f010";
|
|
||||||
@fa-var-search-plus: "\f00e";
|
|
||||||
@fa-var-sellsy: "\f213";
|
|
||||||
@fa-var-send: "\f1d8";
|
|
||||||
@fa-var-send-o: "\f1d9";
|
|
||||||
@fa-var-server: "\f233";
|
|
||||||
@fa-var-share: "\f064";
|
|
||||||
@fa-var-share-alt: "\f1e0";
|
|
||||||
@fa-var-share-alt-square: "\f1e1";
|
|
||||||
@fa-var-share-square: "\f14d";
|
|
||||||
@fa-var-share-square-o: "\f045";
|
|
||||||
@fa-var-shekel: "\f20b";
|
|
||||||
@fa-var-sheqel: "\f20b";
|
|
||||||
@fa-var-shield: "\f132";
|
|
||||||
@fa-var-ship: "\f21a";
|
|
||||||
@fa-var-shirtsinbulk: "\f214";
|
|
||||||
@fa-var-shopping-bag: "\f290";
|
|
||||||
@fa-var-shopping-basket: "\f291";
|
|
||||||
@fa-var-shopping-cart: "\f07a";
|
|
||||||
@fa-var-shower: "\f2cc";
|
|
||||||
@fa-var-sign-in: "\f090";
|
|
||||||
@fa-var-sign-language: "\f2a7";
|
|
||||||
@fa-var-sign-out: "\f08b";
|
|
||||||
@fa-var-signal: "\f012";
|
|
||||||
@fa-var-signing: "\f2a7";
|
|
||||||
@fa-var-simplybuilt: "\f215";
|
|
||||||
@fa-var-sitemap: "\f0e8";
|
|
||||||
@fa-var-skyatlas: "\f216";
|
|
||||||
@fa-var-skype: "\f17e";
|
|
||||||
@fa-var-slack: "\f198";
|
|
||||||
@fa-var-sliders: "\f1de";
|
|
||||||
@fa-var-slideshare: "\f1e7";
|
|
||||||
@fa-var-smile-o: "\f118";
|
|
||||||
@fa-var-snapchat: "\f2ab";
|
|
||||||
@fa-var-snapchat-ghost: "\f2ac";
|
|
||||||
@fa-var-snapchat-square: "\f2ad";
|
|
||||||
@fa-var-snowflake-o: "\f2dc";
|
|
||||||
@fa-var-soccer-ball-o: "\f1e3";
|
|
||||||
@fa-var-sort: "\f0dc";
|
|
||||||
@fa-var-sort-alpha-asc: "\f15d";
|
|
||||||
@fa-var-sort-alpha-desc: "\f15e";
|
|
||||||
@fa-var-sort-amount-asc: "\f160";
|
|
||||||
@fa-var-sort-amount-desc: "\f161";
|
|
||||||
@fa-var-sort-asc: "\f0de";
|
|
||||||
@fa-var-sort-desc: "\f0dd";
|
|
||||||
@fa-var-sort-down: "\f0dd";
|
|
||||||
@fa-var-sort-numeric-asc: "\f162";
|
|
||||||
@fa-var-sort-numeric-desc: "\f163";
|
|
||||||
@fa-var-sort-up: "\f0de";
|
|
||||||
@fa-var-soundcloud: "\f1be";
|
|
||||||
@fa-var-space-shuttle: "\f197";
|
|
||||||
@fa-var-spinner: "\f110";
|
|
||||||
@fa-var-spoon: "\f1b1";
|
|
||||||
@fa-var-spotify: "\f1bc";
|
|
||||||
@fa-var-square: "\f0c8";
|
|
||||||
@fa-var-square-o: "\f096";
|
|
||||||
@fa-var-stack-exchange: "\f18d";
|
|
||||||
@fa-var-stack-overflow: "\f16c";
|
|
||||||
@fa-var-star: "\f005";
|
|
||||||
@fa-var-star-half: "\f089";
|
|
||||||
@fa-var-star-half-empty: "\f123";
|
|
||||||
@fa-var-star-half-full: "\f123";
|
|
||||||
@fa-var-star-half-o: "\f123";
|
|
||||||
@fa-var-star-o: "\f006";
|
|
||||||
@fa-var-steam: "\f1b6";
|
|
||||||
@fa-var-steam-square: "\f1b7";
|
|
||||||
@fa-var-step-backward: "\f048";
|
|
||||||
@fa-var-step-forward: "\f051";
|
|
||||||
@fa-var-stethoscope: "\f0f1";
|
|
||||||
@fa-var-sticky-note: "\f249";
|
|
||||||
@fa-var-sticky-note-o: "\f24a";
|
|
||||||
@fa-var-stop: "\f04d";
|
|
||||||
@fa-var-stop-circle: "\f28d";
|
|
||||||
@fa-var-stop-circle-o: "\f28e";
|
|
||||||
@fa-var-street-view: "\f21d";
|
|
||||||
@fa-var-strikethrough: "\f0cc";
|
|
||||||
@fa-var-stumbleupon: "\f1a4";
|
|
||||||
@fa-var-stumbleupon-circle: "\f1a3";
|
|
||||||
@fa-var-subscript: "\f12c";
|
|
||||||
@fa-var-subway: "\f239";
|
|
||||||
@fa-var-suitcase: "\f0f2";
|
|
||||||
@fa-var-sun-o: "\f185";
|
|
||||||
@fa-var-superpowers: "\f2dd";
|
|
||||||
@fa-var-superscript: "\f12b";
|
|
||||||
@fa-var-support: "\f1cd";
|
|
||||||
@fa-var-table: "\f0ce";
|
|
||||||
@fa-var-tablet: "\f10a";
|
|
||||||
@fa-var-tachometer: "\f0e4";
|
|
||||||
@fa-var-tag: "\f02b";
|
|
||||||
@fa-var-tags: "\f02c";
|
|
||||||
@fa-var-tasks: "\f0ae";
|
|
||||||
@fa-var-taxi: "\f1ba";
|
|
||||||
@fa-var-telegram: "\f2c6";
|
|
||||||
@fa-var-television: "\f26c";
|
|
||||||
@fa-var-tencent-weibo: "\f1d5";
|
|
||||||
@fa-var-terminal: "\f120";
|
|
||||||
@fa-var-text-height: "\f034";
|
|
||||||
@fa-var-text-width: "\f035";
|
|
||||||
@fa-var-th: "\f00a";
|
|
||||||
@fa-var-th-large: "\f009";
|
|
||||||
@fa-var-th-list: "\f00b";
|
|
||||||
@fa-var-themeisle: "\f2b2";
|
|
||||||
@fa-var-thermometer: "\f2c7";
|
|
||||||
@fa-var-thermometer-0: "\f2cb";
|
|
||||||
@fa-var-thermometer-1: "\f2ca";
|
|
||||||
@fa-var-thermometer-2: "\f2c9";
|
|
||||||
@fa-var-thermometer-3: "\f2c8";
|
|
||||||
@fa-var-thermometer-4: "\f2c7";
|
|
||||||
@fa-var-thermometer-empty: "\f2cb";
|
|
||||||
@fa-var-thermometer-full: "\f2c7";
|
|
||||||
@fa-var-thermometer-half: "\f2c9";
|
|
||||||
@fa-var-thermometer-quarter: "\f2ca";
|
|
||||||
@fa-var-thermometer-three-quarters: "\f2c8";
|
|
||||||
@fa-var-thumb-tack: "\f08d";
|
|
||||||
@fa-var-thumbs-down: "\f165";
|
|
||||||
@fa-var-thumbs-o-down: "\f088";
|
|
||||||
@fa-var-thumbs-o-up: "\f087";
|
|
||||||
@fa-var-thumbs-up: "\f164";
|
|
||||||
@fa-var-ticket: "\f145";
|
|
||||||
@fa-var-times: "\f00d";
|
|
||||||
@fa-var-times-circle: "\f057";
|
|
||||||
@fa-var-times-circle-o: "\f05c";
|
|
||||||
@fa-var-times-rectangle: "\f2d3";
|
|
||||||
@fa-var-times-rectangle-o: "\f2d4";
|
|
||||||
@fa-var-tint: "\f043";
|
|
||||||
@fa-var-toggle-down: "\f150";
|
|
||||||
@fa-var-toggle-left: "\f191";
|
|
||||||
@fa-var-toggle-off: "\f204";
|
|
||||||
@fa-var-toggle-on: "\f205";
|
|
||||||
@fa-var-toggle-right: "\f152";
|
|
||||||
@fa-var-toggle-up: "\f151";
|
|
||||||
@fa-var-trademark: "\f25c";
|
|
||||||
@fa-var-train: "\f238";
|
|
||||||
@fa-var-transgender: "\f224";
|
|
||||||
@fa-var-transgender-alt: "\f225";
|
|
||||||
@fa-var-trash: "\f1f8";
|
|
||||||
@fa-var-trash-o: "\f014";
|
|
||||||
@fa-var-tree: "\f1bb";
|
|
||||||
@fa-var-trello: "\f181";
|
|
||||||
@fa-var-tripadvisor: "\f262";
|
|
||||||
@fa-var-trophy: "\f091";
|
|
||||||
@fa-var-truck: "\f0d1";
|
|
||||||
@fa-var-try: "\f195";
|
|
||||||
@fa-var-tty: "\f1e4";
|
|
||||||
@fa-var-tumblr: "\f173";
|
|
||||||
@fa-var-tumblr-square: "\f174";
|
|
||||||
@fa-var-turkish-lira: "\f195";
|
|
||||||
@fa-var-tv: "\f26c";
|
|
||||||
@fa-var-twitch: "\f1e8";
|
|
||||||
@fa-var-twitter: "\f099";
|
|
||||||
@fa-var-twitter-square: "\f081";
|
|
||||||
@fa-var-umbrella: "\f0e9";
|
|
||||||
@fa-var-underline: "\f0cd";
|
|
||||||
@fa-var-undo: "\f0e2";
|
|
||||||
@fa-var-universal-access: "\f29a";
|
|
||||||
@fa-var-university: "\f19c";
|
|
||||||
@fa-var-unlink: "\f127";
|
|
||||||
@fa-var-unlock: "\f09c";
|
|
||||||
@fa-var-unlock-alt: "\f13e";
|
|
||||||
@fa-var-unsorted: "\f0dc";
|
|
||||||
@fa-var-upload: "\f093";
|
|
||||||
@fa-var-usb: "\f287";
|
|
||||||
@fa-var-usd: "\f155";
|
|
||||||
@fa-var-user: "\f007";
|
|
||||||
@fa-var-user-circle: "\f2bd";
|
|
||||||
@fa-var-user-circle-o: "\f2be";
|
|
||||||
@fa-var-user-md: "\f0f0";
|
|
||||||
@fa-var-user-o: "\f2c0";
|
|
||||||
@fa-var-user-plus: "\f234";
|
|
||||||
@fa-var-user-secret: "\f21b";
|
|
||||||
@fa-var-user-times: "\f235";
|
|
||||||
@fa-var-users: "\f0c0";
|
|
||||||
@fa-var-vcard: "\f2bb";
|
|
||||||
@fa-var-vcard-o: "\f2bc";
|
|
||||||
@fa-var-venus: "\f221";
|
|
||||||
@fa-var-venus-double: "\f226";
|
|
||||||
@fa-var-venus-mars: "\f228";
|
|
||||||
@fa-var-viacoin: "\f237";
|
|
||||||
@fa-var-viadeo: "\f2a9";
|
|
||||||
@fa-var-viadeo-square: "\f2aa";
|
|
||||||
@fa-var-video-camera: "\f03d";
|
|
||||||
@fa-var-vimeo: "\f27d";
|
|
||||||
@fa-var-vimeo-square: "\f194";
|
|
||||||
@fa-var-vine: "\f1ca";
|
|
||||||
@fa-var-vk: "\f189";
|
|
||||||
@fa-var-volume-control-phone: "\f2a0";
|
|
||||||
@fa-var-volume-down: "\f027";
|
|
||||||
@fa-var-volume-off: "\f026";
|
|
||||||
@fa-var-volume-up: "\f028";
|
|
||||||
@fa-var-warning: "\f071";
|
|
||||||
@fa-var-wechat: "\f1d7";
|
|
||||||
@fa-var-weibo: "\f18a";
|
|
||||||
@fa-var-weixin: "\f1d7";
|
|
||||||
@fa-var-whatsapp: "\f232";
|
|
||||||
@fa-var-wheelchair: "\f193";
|
|
||||||
@fa-var-wheelchair-alt: "\f29b";
|
|
||||||
@fa-var-wifi: "\f1eb";
|
|
||||||
@fa-var-wikipedia-w: "\f266";
|
|
||||||
@fa-var-window-close: "\f2d3";
|
|
||||||
@fa-var-window-close-o: "\f2d4";
|
|
||||||
@fa-var-window-maximize: "\f2d0";
|
|
||||||
@fa-var-window-minimize: "\f2d1";
|
|
||||||
@fa-var-window-restore: "\f2d2";
|
|
||||||
@fa-var-windows: "\f17a";
|
|
||||||
@fa-var-won: "\f159";
|
|
||||||
@fa-var-wordpress: "\f19a";
|
|
||||||
@fa-var-wpbeginner: "\f297";
|
|
||||||
@fa-var-wpexplorer: "\f2de";
|
|
||||||
@fa-var-wpforms: "\f298";
|
|
||||||
@fa-var-wrench: "\f0ad";
|
|
||||||
@fa-var-xing: "\f168";
|
|
||||||
@fa-var-xing-square: "\f169";
|
|
||||||
@fa-var-y-combinator: "\f23b";
|
|
||||||
@fa-var-y-combinator-square: "\f1d4";
|
|
||||||
@fa-var-yahoo: "\f19e";
|
|
||||||
@fa-var-yc: "\f23b";
|
|
||||||
@fa-var-yc-square: "\f1d4";
|
|
||||||
@fa-var-yelp: "\f1e9";
|
|
||||||
@fa-var-yen: "\f157";
|
|
||||||
@fa-var-yoast: "\f2b1";
|
|
||||||
@fa-var-youtube: "\f167";
|
|
||||||
@fa-var-youtube-play: "\f16a";
|
|
||||||
@fa-var-youtube-square: "\f166";
|
|
||||||
|
|
34
docs/vendor/font-awesome/scss/_animated.scss
vendored
@ -1,34 +0,0 @@
|
|||||||
// Spinning Icons
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.#{$fa-css-prefix}-spin {
|
|
||||||
-webkit-animation: fa-spin 2s infinite linear;
|
|
||||||
animation: fa-spin 2s infinite linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
.#{$fa-css-prefix}-pulse {
|
|
||||||
-webkit-animation: fa-spin 1s infinite steps(8);
|
|
||||||
animation: fa-spin 1s infinite steps(8);
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
// Bordered & Pulled
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.#{$fa-css-prefix}-border {
|
|
||||||
padding: .2em .25em .15em;
|
|
||||||
border: solid .08em $fa-border-color;
|
|
||||||
border-radius: .1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.#{$fa-css-prefix}-pull-left { float: left; }
|
|
||||||
.#{$fa-css-prefix}-pull-right { float: right; }
|
|
||||||
|
|
||||||
.#{$fa-css-prefix} {
|
|
||||||
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
|
|
||||||
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Deprecated as of 4.4.0 */
|
|
||||||
.pull-right { float: right; }
|
|
||||||
.pull-left { float: left; }
|
|
||||||
|
|
||||||
.#{$fa-css-prefix} {
|
|
||||||
&.pull-left { margin-right: .3em; }
|
|
||||||
&.pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
12
docs/vendor/font-awesome/scss/_core.scss
vendored
@ -1,12 +0,0 @@
|
|||||||
// Base Class Definition
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.#{$fa-css-prefix} {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
|
|
||||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
|
||||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
// Fixed Width Icons
|
|
||||||
// -------------------------
|
|
||||||
.#{$fa-css-prefix}-fw {
|
|
||||||
width: (18em / 14);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|