├── test
├── index.js
├── .eslintrc
└── add-to-calendar_test.js
├── .gitignore
├── docs-site
├── images
│ └── ribbon.png
├── src
│ ├── breakpoint.scss
│ ├── boot.jsx
│ ├── hero_example.jsx
│ ├── code_example_component.jsx
│ ├── hero.scss
│ ├── examples
│ │ ├── changeLabel.jsx
│ │ ├── textOnlyDropdown.jsx
│ │ ├── textOnlyTemplate.jsx
│ │ ├── removeDropdownItem.jsx
│ │ ├── changeTemplate.jsx
│ │ ├── default.jsx
│ │ ├── changeDropdownLabels.jsx
│ │ └── changeDropdownOrder.jsx
│ ├── reset.scss
│ ├── examples.scss
│ ├── style.scss
│ ├── higlight.scss
│ ├── example_components.jsx
│ └── root.jsx
├── publish.sh
└── index.html
├── src
├── styles
│ ├── font-awesome
│ │ ├── _fixed-width.scss
│ │ ├── _screen-reader.scss
│ │ ├── _larger.scss
│ │ ├── _list.scss
│ │ ├── _core.scss
│ │ ├── font-awesome.scss
│ │ ├── _stacked.scss
│ │ ├── _bordered-pulled.scss
│ │ ├── _rotated-flipped.scss
│ │ ├── _path.scss
│ │ ├── _animated.scss
│ │ ├── _mixins.scss
│ │ ├── _variables.scss
│ │ └── _icons.scss
│ └── ReactAddToCalendar.scss
├── helpers
│ └── index.js
└── ReactAddToCalendar.js
├── .editorconfig
├── .babelrc
├── scripts
├── release.sh
├── buildDocs.sh
└── generateMarkdown.sh
├── .travis.yml
├── server.js
├── LICENSE
├── webpack.config.js
├── webpack.docs.config.js
├── docs
└── ReactAddToCalendar.md
├── package.json
├── karma.conf.js
├── gruntfile.js
├── README.md
├── .scss-lint.yml
└── .eslintrc
/test/index.js:
--------------------------------------------------------------------------------
1 | var context = require.context('.', true, /_test$/)
2 | context.keys().forEach(context)
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .sass-cache
3 | npm-debug.log
4 | .idea
5 | dist
6 | lib
7 | tmp
8 | coverage
9 | 0.md
10 |
--------------------------------------------------------------------------------
/docs-site/images/ribbon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasonsalzman/react-add-to-calendar/HEAD/docs-site/images/ribbon.png
--------------------------------------------------------------------------------
/docs-site/src/breakpoint.scss:
--------------------------------------------------------------------------------
1 | @mixin breakpoint($breakpoint) {
2 | @media (min-width: $breakpoint) { @content; }
3 | }
4 |
--------------------------------------------------------------------------------
/docs-site/src/boot.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom'
3 | import Root from './root'
4 |
5 | ReactDOM.render(, document.getElementById('app'))
6 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_screen-reader.scss:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { @include sr-only(); }
5 | .sr-only-focusable { @include sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/test/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true,
4 | },
5 |
6 | "globals": {
7 | "assert": true,
8 | "describe": true,
9 | "expect": true,
10 | "sinon": true
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/docs-site/src/hero_example.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class HeroExample extends React.Component {
5 | render() {
6 | return ;
7 | }
8 | }
9 |
10 | HeroExample.displayName = "HeroExample";
11 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # This file is for unifying the coding style for different editors and IDEs
2 | # editorconfig.org
3 | root = true
4 |
5 | [*]
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = false
10 | indent_style = space
11 | indent_style = 4
12 |
13 | [*.json]
14 | indent_style = space
15 | indent_size = 2
16 |
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "stage-0", "react"],
3 | "env": {
4 | "development": {
5 | "plugins": [
6 | ["react-transform", {
7 | "transforms": [{
8 | "transform": "react-transform-hmr",
9 | "imports": ["react"],
10 | "locals": ["module"]
11 | }]
12 | }]
13 | ]
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/scripts/release.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | rm -rf ./node_modules ./lib ./dist
4 | npm install
5 |
6 | git checkout .
7 |
8 | npm version $1
9 |
10 | react-docgen ./src/*.js --resolver findAllComponentDefinitions | ./scripts/buildDocs.sh
11 |
12 | git add .
13 |
14 | git commit -m "Publish new API docs (automated commit)"
15 |
16 | git push
17 |
18 | git push --tags
19 |
20 | npm publish
21 |
22 | ./docs-site/publish.sh
23 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "animated";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 | @import "screen-reader";
19 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/docs-site/publish.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
4 |
5 | npm run build
6 |
7 | mkdir -p tmp
8 |
9 | if [ ! -d "tmp/gh-pages" ]; then
10 | git clone git@github.com:jasonsalzman/react-add-to-calendar.git --branch gh-pages --single-branch tmp/gh-pages
11 | fi
12 |
13 | cd tmp/gh-pages
14 |
15 | git pull
16 |
17 | find . -maxdepth 1 ! -name '.git' ! -name '.' -exec rm -r {} \;
18 |
19 | cp -r $DIR/{bundle.js,index.html,style.css,images} ./
20 |
21 | git add --all
22 |
23 | git commit -m "Publish new docs (automated commit)"
24 |
25 | git push
26 |
--------------------------------------------------------------------------------
/docs-site/src/code_example_component.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import PropTypes from "prop-types";
3 |
4 | export default class CodeExampleComponent extends React.Component {
5 | render() {
6 | return (
7 |
11 |
{this.props.title}
12 | {this.props.children}
13 |
14 | );
15 | }
16 | }
17 |
18 | CodeExampleComponent.displayName = "CodeExampleComponent";
19 |
20 | CodeExampleComponent.propTypes = {
21 | children: PropTypes.element,
22 | id: PropTypes.number,
23 | title: PropTypes.string
24 | };
25 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .#{$fa-css-prefix}-pull-left { float: left; }
11 | .#{$fa-css-prefix}-pull-right { float: right; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .#{$fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/docs-site/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | React Add to Calendar Button crafted by Jason Salzman
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: required
2 | dist: trusty
3 | language: node_js
4 | node_js:
5 | - "6"
6 | - "5"
7 | - "4"
8 | env:
9 | - CXX=g++-4.8
10 | addons:
11 | apt:
12 | sources:
13 | - ubuntu-toolchain-r-test
14 | packages:
15 | - g++-4.8
16 | rvm:
17 | - 2.1.7
18 | before_install:
19 | - npm install -g grunt-cli
20 | - gem update --system && gem install scss_lint -v 0.44.0
21 | - export CHROME_BIN=/usr/bin/google-chrome
22 | - export DISPLAY=:99.0
23 | - sh -e /etc/init.d/xvfb start
24 | - sudo apt-get update
25 | - sudo apt-get install -y libappindicator1 fonts-liberation
26 | - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
27 | - sudo dpkg -i google-chrome*.deb
28 | after_success:
29 | - bash <(curl -s https://codecov.io/bash)
30 | notifications:
31 | email:
32 | - jason@project41innovations.com
33 |
--------------------------------------------------------------------------------
/docs-site/src/hero.scss:
--------------------------------------------------------------------------------
1 | .hero {
2 | color: #fff;
3 | background-color: #216ba5;
4 |
5 | &__content {
6 | @extend %container-styling;
7 | text-align: center;
8 | padding: 175px 0;
9 | }
10 |
11 | &__title {
12 | font-size: 34px;
13 | font-weight: 600;
14 | line-height: 1.2;
15 | margin: 0;
16 | padding: 0;
17 | border-bottom: 0;
18 | margin-bottom: 5px;
19 | }
20 |
21 | &__image {
22 | height: 14px;
23 | }
24 |
25 | &__example {
26 | width: 210px;
27 | margin: 0 auto;
28 | }
29 |
30 | &__crafted-by {
31 | margin-bottom: 30px;
32 | }
33 |
34 | &__crafted-by-link {
35 | color: #fff;
36 | }
37 | }
38 |
39 | .github-ribbon {
40 | position: absolute;
41 | top: 0;
42 | right: 0;
43 | border: 0;
44 | }
45 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | var express = require('express')
2 | var webpack = require('webpack')
3 | var merge = require('lodash/merge')
4 | var config = merge({}, require('./webpack.docs.config'))
5 |
6 | config.devtool = 'cheap-module-eval-source-map'
7 | config.entry.unshift('webpack-hot-middleware/client')
8 | config.plugins.push(
9 | new webpack.HotModuleReplacementPlugin(),
10 | new webpack.NoErrorsPlugin()
11 | )
12 |
13 | var app = express()
14 | var compiler = webpack(config)
15 |
16 | app.use(require('webpack-dev-middleware')(compiler, {
17 | noInfo: true,
18 | publicPath: config.output.publicPath
19 | }))
20 |
21 | app.use(require('webpack-hot-middleware')(compiler))
22 |
23 | app.use(express.static('docs-site'))
24 |
25 | app.listen(8080, 'localhost', function (err) {
26 | if (err) {
27 | console.log(err)
28 | return
29 | }
30 |
31 | console.log('Listening at http://localhost:8080')
32 | })
33 |
--------------------------------------------------------------------------------
/docs-site/src/examples/changeLabel.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class ChangeLabel extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | return (
15 |
16 |
17 |
18 | {"
19 |
20 | {"event={event}"}
21 |
22 | {'buttonLabel="Put on my calendar" />'}
23 |
24 |
25 |
28 |
29 | );
30 | }
31 | }
32 |
33 | ChangeLabel.displayName = "ChangeLabel";
34 |
--------------------------------------------------------------------------------
/docs-site/src/examples/textOnlyDropdown.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class TextOnlyDropdown extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | return (
15 |
16 |
17 |
18 | {"
19 |
20 | {"event={event}"}
21 |
22 | {"displayItemIcons={false} />"}
23 |
24 |
25 |
28 |
29 | );
30 | }
31 | }
32 |
33 | TextOnlyDropdown.displayName = "TextOnlyDropdown";
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016-2017 Jason Salzman
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | var webpack = require('webpack')
2 |
3 | module.exports = {
4 | entry: './src/ReactAddToCalendar',
5 | output: {
6 | libraryTarget: 'umd',
7 | library: 'ReactAddToCalendar',
8 | path: './dist/'
9 | },
10 | module: {
11 | loaders: [
12 | {
13 | test: /\.js?$/,
14 | loader: 'babel',
15 | exclude: /node_modules/
16 | }
17 | ]
18 | },
19 | resolve: {
20 | extensions: ['', '.js', '.jsx']
21 | },
22 | externals: [
23 | {
24 | 'react-dom': {
25 | root: 'ReactDOM',
26 | commonjs2: 'react-dom',
27 | commonjs: 'react-dom',
28 | amd: 'react-dom'
29 | }
30 | },
31 | {
32 | 'react': {
33 | root: 'React',
34 | commonjs2: 'react',
35 | commonjs: 'react',
36 | amd: 'react'
37 | }
38 | },
39 | {
40 | 'moment': {
41 | root: 'moment',
42 | commonjs2: 'moment',
43 | commonjs: 'moment',
44 | amd: 'moment'
45 | }
46 | }
47 | ],
48 | node: { Buffer: false },
49 | plugins: [
50 | new webpack.optimize.DedupePlugin(),
51 | new webpack.DefinePlugin({
52 | 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
53 | })
54 | ]
55 | }
56 |
--------------------------------------------------------------------------------
/docs-site/src/examples/textOnlyTemplate.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class TextOnlyTemplate extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | let icon = { textOnly: "none" };
15 |
16 | return (
17 |
18 |
19 |
20 | {"let icon = { textOnly: 'none' };"}
21 |
22 |
23 | {"
24 |
25 | {"event={event}"}
26 |
27 | {"buttonTemplate={icon} />"}
28 |
29 |
30 |
33 |
34 | );
35 | }
36 | }
37 |
38 | TextOnlyTemplate.displayName = "TextOnlyTemplate";
39 |
--------------------------------------------------------------------------------
/scripts/buildDocs.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * This example script expects a JSON blob generated by react-docgen as input,
5 | * e.g. react-docgen components/* | buildDocs.sh
6 | */
7 |
8 | var fs = require('fs');
9 | var generateMarkdown = require('./generateMarkdown.sh');
10 | var path = require('path');
11 |
12 | var json = '';
13 | process.stdin.setEncoding('utf8');
14 | process.stdin.on('readable', function() {
15 | var chunk = process.stdin.read();
16 | if (chunk !== null) {
17 | json += chunk;
18 | }
19 | });
20 |
21 | process.stdin.on('end', function() {
22 | buildDocs(JSON.parse(json));
23 | });
24 |
25 | function buildDocs(api) {
26 | // api is an object keyed by filepath. We use the file name as component name.
27 | for (var filepath in api) {
28 | var name = getComponentName(filepath);
29 | var markdown = generateMarkdown(name, api[filepath]);
30 | var outputLocation = './docs/';
31 | fs.writeFileSync(outputLocation + name + '.md', markdown);
32 | process.stdout.write(filepath + ' -> ' + outputLocation + name + '.md\n');
33 | }
34 | }
35 |
36 | function getComponentName(filepath) {
37 | var name = path.basename(filepath);
38 | var ext;
39 | while ((ext = path.extname(name))) {
40 | name = name.substring(0, name.length - ext.length);
41 | }
42 | return name;
43 | }
44 |
--------------------------------------------------------------------------------
/webpack.docs.config.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var webpack = require('webpack')
3 | var ExtractTextPlugin = require('extract-text-webpack-plugin')
4 |
5 | module.exports = {
6 | entry: [
7 | './docs-site/src/boot'
8 | ],
9 | output: {
10 | path: path.resolve('./docs-site/'),
11 | filename: 'bundle.js',
12 | publicPath: '/'
13 | },
14 | resolve: {
15 | extensions: ['', '.js', '.jsx'],
16 |
17 | // Needed to direct the docs to the local version of the component, this is not needed for
18 | // normal setup.
19 | alias: {
20 | 'react-add-to-calendar/dist/react-add-to-calendar.css': path.resolve('./src/styles/ReactAddToCalendar.scss'),
21 | 'react-add-to-calendar': path.resolve('./src/ReactAddToCalendar.js')
22 | }
23 | },
24 | module: {
25 | loaders: [
26 | { test: /\.js/, loader: 'babel', exclude: /node_modules/ },
27 | { test: /\.scss/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader!sass-loader') },
28 | { test: /\.css/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') }
29 | ]
30 | },
31 | node: { Buffer: false },
32 | plugins: [
33 | new webpack.optimize.DedupePlugin(),
34 | new ExtractTextPlugin('style.css', { allChunks: true }),
35 | new webpack.DefinePlugin({
36 | 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
37 | })
38 | ]
39 | }
40 |
--------------------------------------------------------------------------------
/docs-site/src/examples/removeDropdownItem.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class RemoveDropdownItem extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | let items = [{ outlook: "Outlook" }, { google: "Google" }];
15 |
16 | return (
17 |
18 |
19 |
20 | {"let items = ["}
21 |
22 | {"{ outlook: 'Outlook' }"}
23 |
24 | {"{ google: 'Google' }"}
25 | {"];"}
26 |
27 |
28 | {"
29 |
30 | {"event={event}"}
31 |
32 | {"listItems={items} />"}
33 |
34 |
35 |
38 |
39 | );
40 | }
41 | }
42 |
43 | RemoveDropdownItem.displayName = "Remove Dropdown Item";
44 |
--------------------------------------------------------------------------------
/docs-site/src/examples/changeTemplate.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class ChangeTemplate extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | let icon = { "calendar-plus-o": "left" };
15 |
16 | return (
17 |
18 |
19 |
20 | {"let icon = { 'calendar-plus-o': 'left' };"}
21 | {"/*"}
22 |
23 | {"object property can be any Font Awesome icon"}
24 |
25 | {"and value can be 'left' or 'right'"}
26 | {"*/"}
27 |
28 |
29 | {"
30 |
31 | {"event={event}"}
32 |
33 | {"buttonTemplate={icon} />"}
34 |
35 |
36 |
39 |
40 | );
41 | }
42 | }
43 |
44 | ChangeTemplate.displayName = "ChangeTemplate";
45 |
--------------------------------------------------------------------------------
/src/styles/ReactAddToCalendar.scss:
--------------------------------------------------------------------------------
1 | @import "./font-awesome/font-awesome";
2 |
3 | .react-add-to-calendar {
4 | -webkit-font-smoothing: antialiased;
5 | text-shadow: 1px 1px 1px rgba(0, 0, 0, .004);
6 | position: relative;
7 | display: inline-block;
8 | margin: 0 auto;
9 |
10 | &__wrapper {
11 | zoom: 1;
12 | cursor: pointer;
13 | }
14 |
15 | &__button {
16 | padding: 10px;
17 | background-color: #f9f9f9;
18 | border: 1px solid #aab9d4;
19 | border-radius: 3px;
20 | color: #000;
21 |
22 | &--light {
23 | background-color: #fff;
24 | }
25 | }
26 |
27 | &__icon {
28 | &--right {
29 | padding-left: 5px;
30 | }
31 |
32 | &--left {
33 | padding-right: 5px;
34 | }
35 | }
36 |
37 | &__dropdown {
38 | position: absolute;
39 | top: 30px;
40 | left: 1px;
41 | width: 93%;
42 | padding: 5px 0 5px 8px;
43 | box-shadow: 1px 3px 6px rgba(0, 0, 0, .15);
44 | border: 1px solid #a8a8a8;
45 | background-color: #fff;
46 | text-align: left;
47 |
48 | ul {
49 | list-style: none;
50 | margin: 0;
51 |
52 | li {
53 |
54 | a {
55 | color: #000;
56 | text-decoration: none;
57 |
58 | i {
59 | padding-right: 10px;
60 | }
61 | }
62 | }
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/docs/ReactAddToCalendar.md:
--------------------------------------------------------------------------------
1 | `react-add-to-calendar` (component)
2 | ===============
3 |
4 |
5 |
6 | Props
7 | -----
8 |
9 | ### `buttonClassClosed`
10 |
11 | type: `string`
12 | defaultValue: `'react-add-to-calendar__button'`
13 |
14 |
15 | ### `buttonClassOpen`
16 |
17 | type: `string`
18 | defaultValue: `'react-add-to-calendar__button--light'`
19 |
20 |
21 | ### `buttonLabel`
22 |
23 | type: `string`
24 | defaultValue: `'Add to My Calendar'`
25 |
26 |
27 | ### `buttonTemplate`
28 |
29 | type: `object`
30 | defaultValue: `{ caret: 'right' }`
31 |
32 |
33 | ### `buttonWrapperClass`
34 |
35 | type: `string`
36 | defaultValue: `'react-add-to-calendar__wrapper'`
37 |
38 |
39 | ### `displayItemIcons`
40 |
41 | type: `bool`
42 | defaultValue: `true`
43 |
44 |
45 | ### `dropdownClass`
46 |
47 | type: `string`
48 | defaultValue: `'react-add-to-calendar__dropdown'`
49 |
50 |
51 | ### `event` (required)
52 |
53 | type: `shape[object Object]`
54 | defaultValue: `{
55 | title: 'Sample Event',
56 | description: 'This is the sample event provided as an example only',
57 | location: 'Portland, OR',
58 | startTime: '2016-09-16T20:15:00-04:00',
59 | endTime: '2016-09-16T21:45:00-04:00'
60 | }`
61 |
62 |
63 | ### `listItems`
64 |
65 | type: `arrayOf[object Object]`
66 | defaultValue: `[
67 | { apple: 'Apple Calendar' },
68 | { google: 'Google' },
69 | { outlook: 'Outlook' },
70 | { outlookcom: 'Outlook.com' },
71 | { yahoo: 'Yahoo' }
72 | ]`
73 |
74 |
75 | ### `rootClass`
76 |
77 | type: `string`
78 | defaultValue: `'react-add-to-calendar'`
79 |
80 | ### `optionsOpen`
81 | type: `bool`
82 | defaultValue: `false`
83 |
--------------------------------------------------------------------------------
/docs-site/src/examples/default.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class Default extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | return (
15 |
16 |
17 |
18 | {"let event = {"}
19 |
20 | {" title: 'Sample Event',"}
21 |
22 | {
23 | " description: 'This is the sample event provided as an example only',"
24 | }
25 |
26 |
27 | {" location: 'Portland, OR',"}
28 |
29 | {" startTime: '2016-09-16T20:15:00-04:00',"}
30 |
31 | {" endTime: '2016-09-16T21:45:00-04:00'"}
32 | {"};"}
33 | {"/*"}
34 |
35 | {"startTime and endTime can use any datetime"}
36 |
37 | {"string that is acceptable by MomentJS"}
38 | {"*/"}
39 |
40 |
41 | {""}
42 |
43 |
44 |
47 |
48 | );
49 | }
50 | }
51 |
52 | Default.displayName = "Default";
53 |
--------------------------------------------------------------------------------
/docs-site/src/examples/changeDropdownLabels.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class ChangeDropdownLabels extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | let items = [
15 | { outlook: "Outlook" },
16 | { outlookcom: "Outlook.com" },
17 | { apple: "iCal" },
18 | { yahoo: "Yahoo!" },
19 | { google: "Google" }
20 | ];
21 |
22 | return (
23 |
24 |
25 |
26 | {"let items = ["}
27 |
28 | {"{ outlook: 'Outlook' }"}
29 |
30 | {"{ outlookcom: 'Outlook.com' }"}
31 |
32 | {"{ apple: 'iCal' }"}
33 |
34 | {"{ yahoo: 'Yahoo!' }"}
35 |
36 | {"{ google: 'Google' }"}
37 | {"];"}
38 |
39 |
40 | {"
41 |
42 | {"event={event}"}
43 |
44 | {"listItems={items} />"}
45 |
46 |
47 |
50 |
51 | );
52 | }
53 | }
54 |
55 | ChangeDropdownLabels.displayName = "Change Dropdown Labels";
--------------------------------------------------------------------------------
/docs-site/src/examples/changeDropdownOrder.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import AddToCalendar from "react-add-to-calendar";
3 |
4 | export default class ChangeDropdownOrder extends React.Component {
5 | render() {
6 | let event = {
7 | title: "Sample Event",
8 | description: "This is the sample event provided as an example only",
9 | location: "Portland, OR",
10 | startTime: "2016-09-16T20:15:00-04:00",
11 | endTime: "2016-09-16T21:45:00-04:00"
12 | };
13 |
14 | let items = [
15 | { outlook: "Outlook" },
16 | { outlookcom: "Outlook.com" },
17 | { apple: "Apple Calendar" },
18 | { yahoo: "Yahoo" },
19 | { google: "Google" }
20 | ];
21 |
22 | return (
23 |
24 |
25 |
26 | {"let items = ["}
27 |
28 | {"{ outlook: 'Outlook' }"}
29 |
30 | {"{ outlookcom: 'Outlook.com' }"}
31 |
32 | {"{ apple: 'Apple Calendar' }"}
33 |
34 | {"{ yahoo: 'Yahoo' }"}
35 |
36 | {"{ google: 'Google' }"}
37 | {"];"}
38 |
39 |
40 | {"
41 |
42 | {"event={event}"}
43 |
44 | {"listItems={items} />"}
45 |
46 |
47 |
50 |
51 | );
52 | }
53 | }
54 |
55 | ChangeDropdownOrder.displayName = "Change Dropdown Order";
56 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | @mixin fa-icon-rotate($degrees, $rotation) {
15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
16 | -webkit-transform: rotate($degrees);
17 | -ms-transform: rotate($degrees);
18 | transform: rotate($degrees);
19 | }
20 |
21 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
23 | -webkit-transform: scale($horiz, $vert);
24 | -ms-transform: scale($horiz, $vert);
25 | transform: scale($horiz, $vert);
26 | }
27 |
28 |
29 | // Only display content to screen readers. A la Bootstrap 4.
30 | //
31 | // See: http://a11yproject.com/posts/how-to-hide-content/
32 |
33 | @mixin sr-only {
34 | position: absolute;
35 | width: 1px;
36 | height: 1px;
37 | padding: 0;
38 | margin: -1px;
39 | overflow: hidden;
40 | clip: rect(0,0,0,0);
41 | border: 0;
42 | }
43 |
44 | // Use in conjunction with .sr-only to only display content when it's focused.
45 | //
46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 | //
48 | // Credit: HTML5 Boilerplate
49 |
50 | @mixin sr-only-focusable {
51 | &:active,
52 | &:focus {
53 | position: static;
54 | width: auto;
55 | height: auto;
56 | margin: 0;
57 | overflow: visible;
58 | clip: auto;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/docs-site/src/reset.scss:
--------------------------------------------------------------------------------
1 | html,
2 | body,
3 | div,
4 | span,
5 | applet,
6 | object,
7 | iframe,
8 | h1,
9 | h2,
10 | h3,
11 | h4,
12 | h5,
13 | h6,
14 | p,
15 | blockquote,
16 | pre,
17 | a,
18 | abbr,
19 | acronym,
20 | address,
21 | big,
22 | cite,
23 | code,
24 | del,
25 | dfn,
26 | em,
27 | img,
28 | ins,
29 | kbd,
30 | q,
31 | s,
32 | samp,
33 | small,
34 | strike,
35 | strong,
36 | sub,
37 | sup,
38 | tt,
39 | var,
40 | b,
41 | u,
42 | i,
43 | center,
44 | dl,
45 | dt,
46 | dd,
47 | ol,
48 | ul,
49 | li,
50 | fieldset,
51 | form,
52 | label,
53 | legend,
54 | table,
55 | caption,
56 | tbody,
57 | tfoot,
58 | thead,
59 | tr,
60 | th,
61 | td,
62 | article,
63 | aside,
64 | canvas,
65 | details,
66 | embed,
67 | figure,
68 | figcaption,
69 | footer,
70 | header,
71 | hgroup,
72 | menu,
73 | nav,
74 | output,
75 | ruby,
76 | section,
77 | summary,
78 | time,
79 | mark,
80 | audio,
81 | video {
82 | margin: 0;
83 | padding: 0;
84 | border: 0;
85 | font: inherit;
86 | font-size: 100%;
87 | vertical-align: baseline;
88 | }
89 |
90 | html {
91 | line-height: 1;
92 | }
93 |
94 | ol,
95 | ul {
96 | list-style: none;
97 | }
98 |
99 | table {
100 | border-collapse: collapse;
101 | border-spacing: 0;
102 | }
103 |
104 | caption,
105 | th,
106 | td {
107 | text-align: left;
108 | font-weight: normal;
109 | vertical-align: middle;
110 | }
111 |
112 | q,
113 | blockquote {
114 | quotes: none;
115 | }
116 |
117 | q:before,
118 | q:after,
119 | blockquote:before,
120 | blockquote:after {
121 | content: "";
122 | content: none;
123 | }
124 |
125 | a img {
126 | border: none;
127 | }
128 |
129 | article,
130 | aside,
131 | details,
132 | figcaption,
133 | figure,
134 | footer,
135 | header,
136 | hgroup,
137 | menu,
138 | nav,
139 | section,
140 | summary {
141 | display: block;
142 | }
143 |
--------------------------------------------------------------------------------
/docs-site/src/examples.scss:
--------------------------------------------------------------------------------
1 | .examples__navigation {
2 | display: none;
3 |
4 | @include breakpoint(640px) {
5 | width: 200px;
6 | float: left;
7 | display: block;
8 | list-style: none;
9 | margin: 0;
10 | margin-right: 20px;
11 | border: 1px solid #e4e4e4;
12 | background: #fff;
13 | border-radius: 4px;
14 | overflow: hidden;
15 | }
16 | }
17 |
18 | .examples__navigation-item {
19 | border-bottom: 1px solid #e4e4e4;
20 |
21 | &:last-child {
22 | border-bottom: none;
23 | }
24 |
25 | a {
26 | padding: 10px;
27 | color: inherit;
28 | text-decoration: none;
29 | display: block;
30 |
31 | &:hover {
32 | background: #f5f5f5;
33 | text-decoration: underline;
34 | }
35 | }
36 | }
37 |
38 | .examples {
39 | overflow: hidden;
40 | }
41 |
42 | .example {
43 | background-color: #fff;
44 | border-radius: 4px;
45 | border: 1px solid #e4e4e4;
46 | padding: 20px;
47 | margin-bottom: 20px;
48 |
49 | &__heading {
50 | color: #216ba5;
51 | font-weight: 400;
52 | font-size: 18px;
53 | border: 0;
54 | margin: 0;
55 | padding: 0;
56 | margin-bottom: 20px;
57 | }
58 |
59 | &__code {
60 | background-color: #f5f8fb;
61 | padding: 20px;
62 | margin: 0 -20px 20px;
63 | border-top: 1px solid #d8e4ef;
64 | border-bottom: 1px solid #d8e4ef;
65 | overflow-x: auto;
66 | overflow-y: hidden;
67 | white-space: nowrap;
68 |
69 | @include breakpoint(768px) {
70 | border-top-right-radius: 4px;
71 | border-bottom-right-radius: 4px;
72 | border-right: 1px solid #d8e4ef;
73 | margin-bottom: 0;
74 | }
75 |
76 | code {
77 | background: none;
78 | border: 0;
79 | }
80 | }
81 | }
82 |
83 | .red-border {
84 | border-color: #f00;
85 | }
86 |
87 | .example-custom-input {
88 | cursor: pointer;
89 | padding: 5px 15px;
90 | border: 0;
91 | border-radius: 4px;
92 | background-color: #216ba5;
93 | font: inherit;
94 | color: #fff;
95 | }
96 |
--------------------------------------------------------------------------------
/test/add-to-calendar_test.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import TestUtils from "react-dom/test-utils";
4 | import createReactClass from "create-react-class";
5 | import AddToCalendar from "../src/ReactAddToCalendar.js";
6 |
7 | describe("AddToCalendar", () => {
8 | it("should show the options menu when the button is clicked", () => {
9 | var event = {
10 | title: "Sample Event",
11 | description: "This is the sample event provided as an example only",
12 | location: "Portland, OR",
13 | startTime: "2016-09-16T20:15:00-04:00",
14 | endTime: "2016-09-16T21:45:00-04:00"
15 | };
16 | var addToCalendar = TestUtils.renderIntoDocument(
17 |
18 | );
19 | var button = TestUtils.findRenderedDOMComponentWithTag(addToCalendar, "a");
20 | TestUtils.Simulate.click(ReactDOM.findDOMNode(button));
21 | var dropdown = TestUtils.findRenderedDOMComponentWithClass(
22 | addToCalendar,
23 | "react-add-to-calendar__dropdown"
24 | );
25 | expect(dropdown).to.exist;
26 | });
27 |
28 | it("should show the options menu if optionsOpen is true", () => {
29 | var event = {
30 | title: "Sample Event",
31 | description: "This is the sample event provided as an example only",
32 | location: "Portland, OR",
33 | startTime: "2016-09-16T20:15:00-04:00",
34 | endTime: "2016-09-16T21:45:00-04:00"
35 | };
36 | var addToCalendar = TestUtils.renderIntoDocument(
37 |
38 | );
39 | var dropdown = TestUtils.findRenderedDOMComponentWithClass(
40 | addToCalendar,
41 | "react-add-to-calendar__dropdown"
42 | );
43 | expect(dropdown).to.exist;
44 | });
45 |
46 | it("should mount and unmount properly", done => {
47 | var TestComponent = createReactClass({
48 | displayName: "TestComponent",
49 |
50 | getInitialState() {
51 | return { mounted: true };
52 | },
53 | render() {
54 | return this.state.mounted ? : null;
55 | }
56 | });
57 | var element = TestUtils.renderIntoDocument();
58 | element.setState({ mounted: false }, done);
59 | });
60 | });
61 |
--------------------------------------------------------------------------------
/docs-site/src/style.scss:
--------------------------------------------------------------------------------
1 | @import "reset";
2 | @import "higlight";
3 | @import "breakpoint";
4 | @import "hero";
5 | @import "examples";
6 |
7 | %container-styling {
8 | max-width: 1100px;
9 | margin: 0 auto;
10 | }
11 |
12 | html,
13 | body {
14 | height: 100%;
15 | background: #f5f5f5;
16 | font-family: "Open Sans", sans-serif;
17 | color: #555;
18 | font-size: 14px;
19 | line-height: 21px;
20 |
21 | input {
22 | width: 100%;
23 | }
24 | }
25 |
26 | a {
27 | text-decoration: none;
28 | }
29 |
30 | p {
31 | margin-bottom: 15px;
32 | }
33 |
34 | ul {
35 | list-style: disc;
36 | margin-left: 40px;
37 | margin-bottom: 15px;
38 | }
39 |
40 | h1,
41 | h2 {
42 | margin-top: 1em;
43 | margin-bottom: 16px;
44 | font-weight: bold;
45 | line-height: 1.4;
46 | }
47 |
48 | h1 {
49 | padding-bottom: .3em;
50 | font-size: 2.25em;
51 | line-height: 1.2;
52 | border-bottom: 1px solid #eee;
53 | }
54 |
55 | h2 {
56 | padding-bottom: .3em;
57 | font-size: 1.75em;
58 | line-height: 1.225;
59 | border-bottom: 1px solid #eee;
60 | }
61 |
62 | code {
63 | padding: 2px 4px;
64 | border: 1px solid #ccc;
65 | margin: 0;
66 | font-size: 85%;
67 | background-color: #e8e7e7;
68 | border-radius: 3px;
69 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
70 | }
71 |
72 | strong {
73 | font-weight: 600;
74 | }
75 |
76 | .wrapper {
77 | @extend %container-styling;
78 | padding: 20px;
79 | }
80 |
81 | .row {
82 | @include breakpoint(768px) {
83 | display: flex;
84 | }
85 | }
86 |
87 | .column {
88 | @include breakpoint(768px) {
89 | width: 50%;
90 |
91 | &:first-child {
92 | margin-right: 20px;
93 | }
94 | }
95 | }
96 |
97 | input {
98 | font-size: 13px;
99 | border-radius: 4px;
100 | box-shadow: inset 0 2px 2px #e9e9e9;
101 | border: 1px solid #aeaeae;
102 | line-height: 16px;
103 | padding: 6px 10px 5px;
104 |
105 | &:focus {
106 | outline: none;
107 | border-color: #aeaeae;
108 | box-shadow: inset 0 2px 2px #e9e9e9, 0 0 10px 0 rgba(73, 107, 125, .3);
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/scripts/generateMarkdown.sh:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015, Facebook, Inc.
3 | * All rights reserved.
4 | *
5 | * This source code is licensed under the BSD-style license found in the
6 | * LICENSE file in the root directory of this source tree. An additional grant
7 | * of patent rights can be found in the PATENTS file in the same directory.
8 | */
9 | "use strict";
10 |
11 | function stringOfLength(string, length) {
12 | var newString = '';
13 | for (var i = 0; i < length; i++) {
14 | newString += string;
15 | }
16 | return newString;
17 | }
18 |
19 | function generateTitle(name) {
20 | var title = '`' + name + '` (component)';
21 | return title + '\n' + stringOfLength('=', title.length) + '\n';
22 | }
23 |
24 | function generateDesciption(description) {
25 | return description + '\n';
26 | }
27 |
28 | function generatePropType(type) {
29 | var values;
30 | if (Array.isArray(type.value)) {
31 | values = '(' +
32 | type.value.map(function(typeValue) {
33 | return typeValue.name || typeValue.value;
34 | }).join('|') +
35 | ')';
36 | } else {
37 | values = type.value;
38 | }
39 |
40 | return 'type: `' + type.name + (values ? values: '') + '`\n';
41 | }
42 |
43 | function generatePropDefaultValue(value) {
44 | return 'defaultValue: `' + value.value + '`\n';
45 | }
46 |
47 | function generateProp(propName, prop) {
48 | return (
49 | '### `' + propName + '`' + (prop.required ? ' (required)' : '') + '\n' +
50 | '\n' +
51 | (prop.description ? prop.description + '\n\n' : '') +
52 | (prop.type ? generatePropType(prop.type) : '') +
53 | (prop.defaultValue ? generatePropDefaultValue(prop.defaultValue) : '') +
54 | '\n'
55 | );
56 | }
57 |
58 | function generateProps(props) {
59 | var title = 'Props';
60 |
61 | return (
62 | title + '\n' +
63 | stringOfLength('-', title.length) + '\n' +
64 | '\n' +
65 | Object.keys(props).sort().map(function(propName) {
66 | return generateProp(propName, props[propName]);
67 | }).join('\n')
68 | );
69 | }
70 |
71 | function generateMarkdown(name, reactAPI) {
72 | var markdownString =
73 | generateTitle(name) + '\n' +
74 | generateDesciption(reactAPI.description) + '\n' +
75 | generateProps(reactAPI.props);
76 |
77 | return markdownString;
78 | }
79 |
80 | module.exports = generateMarkdown;
81 |
--------------------------------------------------------------------------------
/docs-site/src/higlight.scss:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | github.com style (c) Vasily Polovnyov
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | color: #333;
12 | -webkit-text-size-adjust: none;
13 | }
14 |
15 | .hljs-comment,
16 | .diff .hljs-header {
17 | color: #998;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .css .rule .hljs-keyword,
23 | .hljs-winutils,
24 | .nginx .hljs-title,
25 | .hljs-subst,
26 | .hljs-request,
27 | .hljs-status {
28 | color: #333;
29 | font-weight: bold;
30 | }
31 |
32 | .hljs-number,
33 | .hljs-hexcolor,
34 | .ruby .hljs-constant {
35 | color: #008080;
36 | }
37 |
38 | .hljs-string,
39 | .hljs-tag .hljs-value,
40 | .hljs-doctag,
41 | .tex .hljs-formula {
42 | color: #d14;
43 | }
44 |
45 | .hljs-title,
46 | .hljs-id,
47 | .scss .hljs-preprocessor {
48 | color: #900;
49 | font-weight: bold;
50 | }
51 |
52 | .hljs-list .hljs-keyword,
53 | .hljs-subst {
54 | font-weight: normal;
55 | }
56 |
57 | .hljs-class .hljs-title,
58 | .hljs-type,
59 | .vhdl .hljs-literal,
60 | .tex .hljs-command {
61 | color: #458;
62 | font-weight: bold;
63 | }
64 |
65 | .hljs-tag,
66 | .hljs-tag .hljs-title,
67 | .hljs-rule .hljs-property,
68 | .django .hljs-tag .hljs-keyword {
69 | color: #000080;
70 | font-weight: normal;
71 | }
72 |
73 | .hljs-attribute,
74 | .hljs-variable,
75 | .lisp .hljs-body,
76 | .hljs-name {
77 | color: #008080;
78 | }
79 |
80 | .hljs-regexp {
81 | color: #009926;
82 | }
83 |
84 | .hljs-symbol,
85 | .ruby .hljs-symbol .hljs-string,
86 | .lisp .hljs-keyword,
87 | .clojure .hljs-keyword,
88 | .scheme .hljs-keyword,
89 | .tex .hljs-special,
90 | .hljs-prompt {
91 | color: #990073;
92 | }
93 |
94 | .hljs-built_in {
95 | color: #0086b3;
96 | }
97 |
98 | .hljs-preprocessor,
99 | .hljs-pragma,
100 | .hljs-pi,
101 | .hljs-doctype,
102 | .hljs-shebang,
103 | .hljs-cdata {
104 | color: #999;
105 | font-weight: bold;
106 | }
107 |
108 | .hljs-deletion {
109 | background: #fdd;
110 | }
111 |
112 | .hljs-addition {
113 | background: #dfd;
114 | }
115 |
116 | .diff .hljs-change {
117 | background: #0086b3;
118 | }
119 |
120 | .hljs-chunk {
121 | color: #aaa;
122 | }
123 |
--------------------------------------------------------------------------------
/docs-site/src/example_components.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import hljs from "highlight.js";
3 | import Default from "./examples/default";
4 | import ChangeLabel from "./examples/changeLabel";
5 | import ChangeTemplate from "./examples/changeTemplate";
6 | import TextOnlyTemplate from "./examples/textOnlyTemplate";
7 | import TextOnlyDropdown from "./examples/textOnlyDropdown";
8 | import ChangeDropdownOrder from "./examples/changeDropdownOrder";
9 | import RemoveDropdownItem from "./examples/removeDropdownItem";
10 | import ChangeDropdownLabels from "./examples/changeDropdownLabels";
11 | import CodeExampleComponent from "./code_example_component";
12 |
13 | import "react-add-to-calendar/dist/react-add-to-calendar.css";
14 | import "./style.scss";
15 |
16 | const examples = [
17 | {
18 | title: "Default",
19 | component: Default
20 | },
21 | {
22 | title: "Change Button Label",
23 | component: ChangeLabel
24 | },
25 | {
26 | title: "Change Button Template",
27 | component: ChangeTemplate
28 | },
29 | {
30 | title: "Text Only Button Template",
31 | component: TextOnlyTemplate
32 | },
33 | {
34 | title: "Text Only Dropdown Items",
35 | component: TextOnlyDropdown
36 | },
37 | {
38 | title: "Change Dropdown Order",
39 | component: ChangeDropdownOrder
40 | },
41 | {
42 | title: "Remove Dropdown Item",
43 | component: RemoveDropdownItem
44 | },
45 | {
46 | title: "Change Dropdown Labels",
47 | component: ChangeDropdownLabels
48 | }
49 | ];
50 |
51 | export default class ExampleComponents extends React.Component {
52 | componentDidMount() {
53 | hljs.initHighlightingOnLoad();
54 | }
55 |
56 | renderExamples() {
57 | return examples.map((example, index) => (
58 |
62 | {}
63 |
64 | ));
65 | }
66 |
67 | renderLeftColumn() {
68 | return examples.map((example, index) => (
69 |
70 |
71 | {example.title}
72 |
73 |
74 | ));
75 | }
76 |
77 | render() {
78 | return (
79 |
80 |
Examples
81 |
82 | {this.renderLeftColumn()}
83 |
84 |
85 | {this.renderExamples()}
86 |
87 |
88 | );
89 | }
90 | }
91 |
92 | ExampleComponents.displayName = "exampleComponents";
93 |
--------------------------------------------------------------------------------
/docs-site/src/root.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import ExampleComponents from "./example_components.jsx";
3 | import HeroExample from "./hero_example.jsx";
4 |
5 | export default class Root extends React.Component {
6 | render() {
7 | return (
8 |
9 |
10 |
11 |
12 | React Add to Calendar Button
13 |
14 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
React Add to Calendar Button
26 |
27 |
28 |
31 |
32 |
33 |
36 |
37 |
38 |
41 |
42 |
43 |
46 |
47 |
48 |
51 |
52 |
53 |
54 | A simple, customizable, and reusable Add to Calendar button component for React.
55 |
56 |
57 |
Installation
58 |
The package can be installed via NPM:
59 |
npm install react-add-to-calendar --save
60 |
61 |
62 |
63 |
64 |
65 |
66 |
70 |
71 |
72 | );
73 | }
74 | }
75 |
76 | Root.displayName = "Root";
77 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "Jason Salzman",
3 | "name": "react-add-to-calendar",
4 | "description":
5 | "A simple and reusable add to calendar button component for React",
6 | "version": "0.1.5",
7 | "license": "MIT",
8 | "homepage": "https://github.com/jasonsalzman/react-add-to-calendar",
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/jasonsalzman/react-add-to-calendar.git"
12 | },
13 | "bugs": {
14 | "url": "https://github.com/jasonsalzman/react-add-to-calendar/issues"
15 | },
16 | "main": "dist/react-add-to-calendar.min.js",
17 | "style": "dist/react-add-to-calendar.min.css",
18 | "files": ["*.md", "dist", "lib"],
19 | "keywords": [
20 | "react",
21 | "add-to-calendar",
22 | "calendar",
23 | "event",
24 | "react-component"
25 | ],
26 | "devDependencies": {
27 | "babel-core": "^6.24.1",
28 | "babel-loader": "^6.4.1",
29 | "babel-plugin-react-transform": "^2.0.2",
30 | "babel-preset-airbnb": "^2.2.3",
31 | "babel-preset-es2015": "^6.24.1",
32 | "babel-preset-react": "^6.24.1",
33 | "babel-preset-stage-0": "^6.24.1",
34 | "chai": "^3.5.0",
35 | "codecov": "^2.2.0",
36 | "create-react-class": "^15.5.3",
37 | "css-loader": "^0.28.2",
38 | "enzyme": "^3.2.0",
39 | "eslint": "^3.19.0",
40 | "eslint-config-standard": "^10.2.1",
41 | "eslint-plugin-import": "^2.2.0",
42 | "eslint-plugin-node": "^4.2.2",
43 | "eslint-plugin-promise": "^3.5.0",
44 | "eslint-plugin-react": "^7.0.1",
45 | "eslint-plugin-standard": "^3.0.1",
46 | "express": "^4.15.3",
47 | "extract-text-webpack-plugin": "^1.0.1",
48 | "grunt": "1.0.1",
49 | "grunt-babel": "^6.0.0",
50 | "grunt-cli": "^1.2.0",
51 | "grunt-contrib-sass": "1.0.0",
52 | "grunt-contrib-watch": "1.0.0",
53 | "grunt-eslint": "^19.0.0",
54 | "grunt-karma": "^2.0.0",
55 | "grunt-scss-lint": "^0.5.0",
56 | "grunt-webpack": "^1.0.18",
57 | "highlight.js": "^9.11.0",
58 | "istanbul-instrumenter-loader": "^2.0.0",
59 | "jsdom": "^9.12.0",
60 | "karma": "^1.7.0",
61 | "karma-chai": "^0.1.0",
62 | "karma-chrome-launcher": "^2.1.1",
63 | "karma-coverage": "^1.1.1",
64 | "karma-firefox-launcher": "^1.0.1",
65 | "karma-mocha": "^1.3.0",
66 | "karma-safari-launcher": "^1.0.0",
67 | "karma-sinon": "^1.0.5",
68 | "karma-sourcemap-loader": "^0.3.7",
69 | "karma-webpack": "^1.8.1",
70 | "lodash": "^4.17.4",
71 | "mocha": "^3.4.1",
72 | "mocha-jsdom": "^1.1.0",
73 | "node-sass": "^4.7.2",
74 | "prop-types": "^15.5.10",
75 | "react": "^16.2.0",
76 | "react-docgen": "^2.15.0",
77 | "react-dom": "^16.2.0",
78 | "react-transform-hmr": "^1.0.4",
79 | "sass-loader": "^4.1.1",
80 | "sinon": "^1.17.7",
81 | "style-loader": "^0.18.0",
82 | "webpack": "^1.15.0",
83 | "webpack-dev-middleware": "^1.10.2",
84 | "webpack-dev-server": "^1.16.4",
85 | "webpack-hot-middleware": "^2.18.0"
86 | },
87 | "peerDependencies": {
88 | "react": "^15.5.4 || ^16.0.0",
89 | "react-dom": "^15.5.4 || ^16.0.0"
90 | },
91 | "optionalDependencies": {
92 | "moment": "^2.18.1"
93 | },
94 | "scripts": {
95 | "build": "NODE_ENV=production grunt build",
96 | "start": "node server.js",
97 | "test": "NODE_ENV=test grunt travis",
98 | "eslint": "eslint **/*.js",
99 | "prepublish": "npm run build",
100 | "codecov": "cat coverage/*/lcov.info | ./node_modules/codecov/bin/codecov"
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration
2 | // Generated on Wed Oct 05 2016 15:34:05 GMT-0700 (PDT)
3 | var webpack = require('webpack')
4 | var path = require('path')
5 |
6 | var BROWSERS = (process.env.TRAVIS) ? ['Chrome_travis_ci', 'Firefox'] : ['Chrome', 'Firefox', 'Safari'];
7 |
8 | module.exports = function(config) {
9 | config.set({
10 |
11 | // base path that will be used to resolve all patterns (eg. files, exclude)
12 | basePath: './',
13 |
14 |
15 | // frameworks to use
16 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
17 | frameworks: ['mocha', 'sinon', 'chai'],
18 |
19 |
20 | // list of files / patterns to load in the browser
21 | files: [
22 | 'test/index.js'
23 | ],
24 |
25 |
26 | // list of files to exclude
27 | exclude: [
28 | 'node_modules/'
29 | ],
30 |
31 |
32 | // preprocess matching files before serving them to the browser
33 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
34 | preprocessors: {
35 | 'test/index.js': ['webpack', 'sourcemap']
36 | },
37 |
38 |
39 | // test results reporter to use
40 | // possible values: 'dots', 'progress'
41 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter
42 | reporters: ['dots', 'coverage'],
43 |
44 | webpack: {
45 | devtool: 'inline-source-map',
46 | module: {
47 | loaders: [
48 | {
49 | test: /\.js?$/,
50 | exclude: /node_modules/,
51 | loader: 'babel',
52 | query: {
53 | presets: ['airbnb']
54 | }
55 | },
56 | {
57 | test: /\.js?$/,
58 | include: path.resolve(__dirname, 'src'),
59 | loader: 'istanbul-instrumenter',
60 | query: {
61 | esModules: true
62 | }
63 | }
64 | ]
65 | },
66 | plugins: [
67 | new webpack.DefinePlugin({
68 | 'process.env.NODE_ENV': JSON.stringify('test')
69 | })
70 | ],
71 | resolve: {
72 | extensions: ['', '.jsx', '.js']
73 | },
74 | externals: {
75 | 'cheerio': 'window',
76 | 'react/addons': true,
77 | 'react/lib/ExecutionEnvironment': true,
78 | 'react/lib/ReactContext': true
79 | }
80 | },
81 |
82 | coverageReporter: {
83 | reporters: [
84 | { type: 'text-summary' },
85 | { type: 'html', dir: 'coverage/' },
86 | { type: 'lcov' }
87 | ]
88 | },
89 |
90 | webpackServer: {
91 | noInfo: true
92 | },
93 |
94 |
95 | // web server port
96 | port: 9876,
97 |
98 |
99 | // enable / disable colors in the output (reporters and logs)
100 | colors: true,
101 |
102 |
103 | // level of logging
104 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
105 | logLevel: config.LOG_INFO,
106 |
107 |
108 | // enable / disable watching file and executing tests whenever any file changes
109 | autoWatch: false,
110 |
111 |
112 | customLaunchers: {
113 | Chrome_travis_ci: {
114 | base: 'Chrome',
115 | flags: ['--no-sandbox']
116 | }
117 | },
118 |
119 |
120 | // start these browsers
121 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
122 | browsers: BROWSERS,
123 |
124 |
125 | // Continuous Integration mode
126 | // if true, Karma captures browsers, runs the tests and exits
127 | singleRun: true,
128 |
129 | // Concurrency level
130 | // how many browser should be started simultaneous
131 | concurrency: Infinity
132 | })
133 | }
--------------------------------------------------------------------------------
/gruntfile.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | var _ = require('lodash')
4 | var webpack = require('webpack')
5 |
6 | var mergeWebpackConfig = function (config) {
7 | // Load webpackConfig only when using `grunt:webpack`
8 | // load of grunt tasks is faster
9 | var webpackConfig = require('./webpack.config')
10 | return _.merge({}, webpackConfig, config, function (a, b) {
11 | if (_.isArray(a)) {
12 | return a.concat(b)
13 | }
14 | })
15 | }
16 |
17 | module.exports = function (grunt) {
18 | grunt.initConfig({
19 | pkg: grunt.file.readJSON('package.json'),
20 | sass: {
21 | min: {
22 | files: {
23 | 'dist/react-add-to-calendar.css': 'src/styles/ReactAddToCalendar.scss'
24 | },
25 | options: {
26 | sourcemap: 'none',
27 | style: 'expanded'
28 | }
29 | },
30 | unmin: {
31 | files: {
32 | 'dist/react-add-to-calendar.min.css': 'src/styles/ReactAddToCalendar.scss'
33 | },
34 | options: {
35 | sourcemap: 'none',
36 | style: 'compressed'
37 | }
38 | }
39 | },
40 |
41 | watch: {
42 | eslint: {
43 | files: ['{src,test,docs-site/src}/**/*.{js,jsx}', '*.js'],
44 | tasks: ['eslint']
45 | },
46 |
47 | css: {
48 | files: '**/*.scss',
49 | tasks: ['sass']
50 | },
51 |
52 | karma: {
53 | files: [
54 | 'src/**/*.jsx',
55 | 'src/**/*.js',
56 | 'test/**/*.jsx',
57 | 'test/**/*.js'
58 | ],
59 | tasks: ['karma']
60 | },
61 |
62 | webpack: {
63 | files: ['src/**/*.js', 'src/**/*.jsx'],
64 | tasks: ['webpack']
65 | }
66 | },
67 |
68 | scsslint: {
69 | files: ['src/styles/*.scss', 'docs-site/src/*.scss'],
70 | options: {
71 | config: '.scss-lint.yml',
72 | colorizeOutput: true,
73 | exclude: ['docs-site/src/higlight.scss', 'docs-site/src/reset.scss']
74 | }
75 | },
76 |
77 | karma: {
78 | unit: {
79 | configFile: 'karma.conf.js',
80 | singleRun: true
81 | }
82 | },
83 |
84 | eslint: {
85 | files: ['{src,test,docs-site/src}/**/*.{js,jsx}', '*.js'],
86 | options: {
87 | configFile: '.eslintrc'
88 | }
89 | },
90 |
91 | // standalone build for ./dist
92 | webpack: {
93 | unmin: mergeWebpackConfig({
94 | output: {
95 | filename: 'react-add-to-calendar.js'
96 | }
97 | }),
98 | min: mergeWebpackConfig({
99 | output: {
100 | filename: 'react-add-to-calendar.min.js'
101 | },
102 | plugins: [
103 | new webpack.optimize.UglifyJsPlugin({
104 | compressor: {
105 | warnings: false
106 | }
107 | })
108 | ]
109 | }),
110 | docs: require('./webpack.docs.config')
111 | },
112 |
113 | // source build for ./lib
114 | babel: {
115 | lib: {
116 | files: [{
117 | expand: true,
118 | cwd: 'src/',
119 | src: ['**/*.js', '**/*.jsx'],
120 | dest: 'lib/',
121 | ext: '.js'
122 | }]
123 | }
124 | }
125 | })
126 |
127 | grunt.loadNpmTasks('grunt-contrib-sass')
128 | grunt.loadNpmTasks('grunt-scss-lint')
129 | grunt.loadNpmTasks('grunt-contrib-watch')
130 | grunt.loadNpmTasks('grunt-babel')
131 | grunt.loadNpmTasks('grunt-webpack')
132 | grunt.loadNpmTasks('grunt-karma')
133 | grunt.loadNpmTasks('grunt-eslint')
134 |
135 | grunt.registerTask('default', ['watch', 'scsslint'])
136 | grunt.registerTask('travis', ['eslint', 'karma', 'scsslint'])
137 | grunt.registerTask('build', ['scsslint', 'babel', 'webpack', 'sass'])
138 | }
139 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React Add to Calendar Button
2 |
3 | [](https://badge.fury.io/js/react-add-to-calendar)
4 | [](https://travis-ci.org/jasonsalzman/react-add-to-calendar)
5 | [](https://david-dm.org/jasonsalzman/react-add-to-calendar)
6 | [](https://david-dm.org/jasonsalzman/react-add-to-calendar)
7 | [](https://codecov.io/gh/jasonsalzman/react-add-to-calendar)
8 | [](https://npmjs.org/package/react-add-to-calendar)
9 |
10 | A simple, customizable, and reusable Add to Calendar button component for React ([Demo](https://jasonsalzman.github.io/react-add-to-calendar/))
11 |
12 | ## Installation
13 |
14 | The package can be installed via NPM:
15 |
16 | ```
17 | npm install react-add-to-calendar --save
18 | ```
19 |
20 | You’ll need to install React and Moment separately since they are not included in the package. Below is a simple example on how to use the Add to Calendar button in a React view.
21 |
22 | ```js
23 | import React from 'react';
24 | import AddToCalendar from 'react-add-to-calendar';
25 |
26 | class Example extends React.Component {
27 | static displayName = 'Example';
28 | state = {
29 | event: {
30 | title: 'Sample Event',
31 | description: 'This is the sample event provided as an example only',
32 | location: 'Portland, OR',
33 | startTime: '2016-09-16T20:15:00-04:00',
34 | endTime: '2016-09-16T21:45:00-04:00'
35 | }
36 | };
37 |
38 | render() {
39 | return ;
40 | };
41 | }
42 | ```
43 |
44 | ## Configuration
45 |
46 | The most basic use of the Add to Calendar button can be described with:
47 |
48 | ```js
49 | let event = {
50 | title: 'Sample Event',
51 | description: 'This is the sample event provided as an example only',
52 | location: 'Portland, OR',
53 | startTime: '2016-09-16T20:15:00-04:00',
54 | endTime: '2016-09-16T21:45:00-04:00'
55 | }
56 |
57 |
58 | ```
59 |
60 | See [here](https://github.com/jasonsalzman/react-add-to-calendar/blob/master/docs/ReactAddToCalendar.md) for a full list of props that may be passed to the component. Examples are given on the [main website](https://jasonsalzman.github.io/react-add-to-calendar).
61 |
62 | ## Compatibility
63 |
64 | ### React
65 |
66 | I'll do my best to stay compatible with the latest version of React. I can't guarantee support for all older versions of React.
67 |
68 | Latest compatible versions:
69 | - React 16.2.0 or newer
70 |
71 | ### Browser Support
72 |
73 | The Add to Calendar button is compatible with the latest versions of Chrome, Firefox, Safari, and IE10+.
74 |
75 | Unfortunately it is difficult to support legacy browsers while maintaining the ability to develop new features in the future. For IE9 support, it is known that the [classlist polyfill](https://www.npmjs.com/package/classlist-polyfill) is needed, but this may change or break at any point in the future.
76 |
77 | ## Local Development
78 |
79 | The `master` branch contains the latest version of the Add to Calendar component. To start your example app, you can run `npm start`. This starts a simple webserver on http://localhost:8080.
80 |
81 | You can run `npm test` to execute the test suite and linters. To help you develop the component I’ve set up some tests that covers the basic functionality (can be found in `/tests`). I highly recommend you add tests when you’re adding new functionality.
82 |
83 | ### The examples
84 | The examples are hosted within the docs folder and are ran in the simple add that loads the Add to Calendar button. To extend the examples with a new example, you can simply duplicate one of the existing examples and change the unique properties of your example.
85 |
86 | ## License
87 |
88 | Copyright (c) 2016-2017 Jason Salzman. Licensed under MIT license, see [LICENSE](LICENSE) for the full license.
89 |
--------------------------------------------------------------------------------
/.scss-lint.yml:
--------------------------------------------------------------------------------
1 | # Documentation about rules https://github.com/causes/scss-lint/blob/master/lib/scss_lint/linter/README.md
2 |
3 | scss_files: "**/*.scss"
4 |
5 | linters:
6 | BangFormat:
7 | enabled: true
8 |
9 | BemDepth:
10 | enabled: false
11 | max_elements: 1
12 |
13 | BorderZero:
14 | enabled: false
15 |
16 | ChainedClasses:
17 | enabled: false
18 |
19 | ColorKeyword:
20 | enabled: true
21 |
22 | ColorVariable:
23 | enabled: false
24 |
25 | Comment:
26 | enabled: false
27 |
28 | DebugStatement:
29 | enabled: true
30 |
31 | DeclarationOrder:
32 | enabled: true
33 |
34 | DisableLinterReason:
35 | enabled: false
36 |
37 | DuplicateProperty:
38 | enabled: true
39 |
40 | ElsePlacement:
41 | enabled: true
42 | style: same_line
43 |
44 | EmptyLineBetweenBlocks:
45 | enabled: true
46 | ignore_single_line_blocks: true
47 |
48 | EmptyRule:
49 | enabled: true
50 |
51 | ExtendDirective:
52 | enabled: false
53 |
54 | FinalNewline:
55 | enabled: true
56 | present: true
57 |
58 | HexLength:
59 | enaled: true
60 | style: short
61 |
62 | HexNotation:
63 | enabled: true
64 | style: lowercase
65 |
66 | HexValidation:
67 | enabled: true
68 |
69 | IdSelector:
70 | enabled: true
71 |
72 | ImportantRule:
73 | enabled: true
74 |
75 | ImportPath:
76 | enabled: true
77 | leading_underscore: false
78 | filename_extension: false
79 |
80 | Indentation:
81 | enabled: true
82 | allow_non_nested_indentation: false
83 | character: space # or 'tab'
84 | width: 4
85 |
86 | LeadingZero:
87 | enabled: true
88 | style: exclude_zero
89 |
90 | MergeableSelector:
91 | enabled: true
92 | force_nesting: true
93 |
94 | NameFormat:
95 | enabled: false
96 | convention: BEM
97 |
98 | NestingDepth:
99 | enabled: true
100 | max_depth: 6
101 |
102 | PlaceholderInExtend:
103 | enabled: true
104 |
105 | PropertyCount:
106 | enabled: false
107 |
108 | PropertySortOrder:
109 | enabled: false
110 |
111 | PropertySpelling:
112 | enabled: true
113 |
114 | PropertyUnits:
115 | enabled: true
116 | global: [
117 | 'ch', 'em', 'ex', 'rem', # Font-relative lengths
118 | 'cm', 'in', 'mm', 'pc', 'pt', 'px', 'q', # Absolute lengths
119 | 'vh', 'vw', 'vmin', 'vmax', # Viewport-percentage lengths
120 | 'deg', 'grad', 'rad', 'turn', # Angle
121 | 'ms', 's', # Duration
122 | 'Hz', 'kHz', # Frequency
123 | 'dpi', 'dpcm', 'dppx', # Resolution
124 | '%'] # Other
125 |
126 | PseudoElement:
127 | enabled: true
128 |
129 | QualifyingElement:
130 | enabled: true
131 | allow_element_with_attribute: false
132 | allow_element_with_class: false
133 | allow_element_with_id: false
134 |
135 | SelectorDepth:
136 | enabled: true
137 | max_depth: 5
138 |
139 | SelectorFormat:
140 | enalbed: true
141 | convention: hyphenated_BEM
142 |
143 | Shorthand:
144 | enabled: true
145 |
146 | SingleLinePerProperty:
147 | enabled: true
148 |
149 | SingleLinePerSelector:
150 | enabled: true
151 |
152 | SpaceAfterComma:
153 | enabled: true
154 | style: one_space
155 |
156 | SpaceAfterPropertyColon:
157 | enabled: true
158 | style: one_space
159 |
160 | SpaceAfterPropertyName:
161 | enabled: true
162 |
163 | SpaceAfterVariableName:
164 | enabled: true
165 |
166 | SpaceAroundOperator:
167 | enabled: true
168 | style: one_space
169 |
170 | SpaceBeforeBrace:
171 | enabled: true
172 | style: space
173 | allow_single_line_padding: false
174 |
175 | SpaceBetweenParens:
176 | enabled: true
177 | spaces: 0
178 |
179 | StringQuotes:
180 | enabled: true
181 | style: double_quotes # or single_quotes
182 |
183 | TrailingSemicolon:
184 | enabled: true
185 |
186 | TrailingWhitespace:
187 | enabled: true
188 |
189 | TrailingZero:
190 | enabled: true
191 |
192 | TransitionAll:
193 | enabled: false
194 |
195 | UnnecessaryMantissa:
196 | enabled: true
197 |
198 | UnnecessaryParentReference:
199 | enabled: true
200 |
201 | UrlFormat:
202 | enabled: true
203 |
204 | UrlQuotes:
205 | enabled: true
206 |
207 | VariableForProperty:
208 | enabled: false
209 |
210 | VendorPrefix:
211 | enabled: false
212 |
213 | ZeroUnit:
214 | enabled: true
215 |
216 | Compass::*:
217 | enabled: false
218 |
--------------------------------------------------------------------------------
/src/helpers/index.js:
--------------------------------------------------------------------------------
1 | import moment from "moment";
2 |
3 | export default class helpers {
4 | getRandomKey() {
5 | let n = Math.floor(Math.random() * 999999999999).toString();
6 | return new Date().getTime().toString() + "_" + n;
7 | }
8 |
9 | formatTime(date) {
10 | let formattedDate = moment.utc(date).format("YYYYMMDDTHHmmssZ");
11 | return formattedDate.replace("+00:00", "Z");
12 | }
13 |
14 | calculateDuration(startTime, endTime) {
15 | // snag parameters and format properly in UTC
16 | let end = moment.utc(endTime).format("DD/MM/YYYY HH:mm:ss");
17 | let start = moment.utc(startTime).format("DD/MM/YYYY HH:mm:ss");
18 |
19 | // calculate the difference in milliseconds between the start and end times
20 | let difference = moment(end, "DD/MM/YYYY HH:mm:ss").diff(
21 | moment(start, "DD/MM/YYYY HH:mm:ss")
22 | );
23 |
24 | // convert difference from above to a proper momentJs duration object
25 | let duration = moment.duration(difference);
26 |
27 | return (
28 | Math.floor(duration.asHours()) + moment.utc(difference).format(":mm")
29 | );
30 | }
31 |
32 | buildUrl(event, type, isCrappyIE) {
33 | let calendarUrl = "";
34 |
35 | // allow mobile browsers to open the gmail data URI within native calendar app
36 | // type = (type == "google" && this.isMobile()) ? "outlook" : type;
37 |
38 | switch (type) {
39 | case "google":
40 | calendarUrl = "https://calendar.google.com/calendar/render";
41 | calendarUrl += "?action=TEMPLATE";
42 | calendarUrl += "&dates=" + this.formatTime(event.startTime);
43 | calendarUrl += "/" + this.formatTime(event.endTime);
44 | calendarUrl += "&location=" + encodeURIComponent(event.location);
45 | calendarUrl += "&text=" + encodeURIComponent(event.title);
46 | calendarUrl += "&details=" + encodeURIComponent(event.description);
47 | break;
48 |
49 | case "yahoo":
50 | // yahoo doesn't utilize endTime so we need to calulate duration
51 | let duration = this.calculateDuration(event.startTime, event.endTime);
52 | calendarUrl = "https://calendar.yahoo.com/?v=60&view=d&type=20";
53 | calendarUrl += "&title=" + encodeURIComponent(event.title);
54 | calendarUrl += "&st=" + this.formatTime(event.startTime);
55 | calendarUrl += "&dur=" + duration;
56 | calendarUrl += "&desc=" + encodeURIComponent(event.description);
57 | calendarUrl += "&in_loc=" + encodeURIComponent(event.location);
58 | break;
59 |
60 | case "outlookcom":
61 | calendarUrl = "https://outlook.live.com/owa/?rru=addevent";
62 | calendarUrl += "&startdt=" + this.formatTime(event.startTime);
63 | calendarUrl += "&enddt=" + this.formatTime(event.endTime);
64 | calendarUrl += "&subject=" + encodeURIComponent(event.title);
65 | calendarUrl += "&location=" + encodeURIComponent(event.location);
66 | calendarUrl += "&body=" + encodeURIComponent(event.description);
67 | calendarUrl += "&allday=false";
68 | calendarUrl += "&uid=" + this.getRandomKey();
69 | calendarUrl += "&path=/calendar/view/Month";
70 | break;
71 |
72 | default:
73 | calendarUrl = [
74 | "BEGIN:VCALENDAR",
75 | "VERSION:2.0",
76 | "BEGIN:VEVENT",
77 | "URL:" + document.URL,
78 | "DTSTART:" + this.formatTime(event.startTime),
79 | "DTEND:" + this.formatTime(event.endTime),
80 | "SUMMARY:" + event.title,
81 | "DESCRIPTION:" + event.description,
82 | "LOCATION:" + event.location,
83 | "END:VEVENT",
84 | "END:VCALENDAR"
85 | ].join("\n");
86 |
87 | if (!isCrappyIE && this.isMobile()) {
88 | calendarUrl = encodeURI(
89 | "data:text/calendar;charset=utf8," + calendarUrl
90 | );
91 | }
92 | }
93 |
94 | return calendarUrl;
95 | }
96 |
97 | // determine if a mobile browser is being used
98 | isMobile() {
99 | let mobile = false;
100 |
101 | (function(a) {
102 | if (
103 | /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
104 | a
105 | ) ||
106 | /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
107 | a.substr(0, 4)
108 | )
109 | )
110 | mobile = true;
111 | })(window.navigator.userAgent || window.navigator.vendor || window.opera);
112 |
113 | return mobile;
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/src/ReactAddToCalendar.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import PropTypes from "prop-types";
3 |
4 | import helpersClass from "./helpers";
5 | const helpers = new helpersClass();
6 |
7 | export default class ReactAddToCalendar extends React.Component {
8 | constructor(props) {
9 | super(props);
10 |
11 | this.state = {
12 | optionsOpen: props.optionsOpen || false,
13 | isCrappyIE: false
14 | };
15 |
16 | this.toggleCalendarDropdown = this.toggleCalendarDropdown.bind(this);
17 | this.handleDropdownLinkClick = this.handleDropdownLinkClick.bind(this);
18 | }
19 |
20 | componentWillMount() {
21 | // polyfill for startsWith to fix IE bug
22 | if (!String.prototype.startsWith) {
23 | String.prototype.startsWith = function(searchString, position) {
24 | position = position || 0;
25 | return this.indexOf(searchString, position) === position;
26 | };
27 | }
28 |
29 | let isCrappyIE = false;
30 | if (
31 | typeof window !== "undefined" &&
32 | window.navigator.msSaveOrOpenBlob &&
33 | window.Blob
34 | ) {
35 | isCrappyIE = true;
36 | }
37 |
38 | this.setState({ isCrappyIE: isCrappyIE });
39 | }
40 |
41 | toggleCalendarDropdown() {
42 | let showOptions = !this.state.optionsOpen;
43 |
44 | if (showOptions) {
45 | document.addEventListener("click", this.toggleCalendarDropdown, false);
46 | } else {
47 | document.removeEventListener("click", this.toggleCalendarDropdown);
48 | }
49 |
50 | this.setState({ optionsOpen: showOptions });
51 | }
52 |
53 | handleDropdownLinkClick(e) {
54 | e.preventDefault();
55 | let url = e.currentTarget.getAttribute("href");
56 |
57 | if (
58 | !helpers.isMobile() &&
59 | (url.startsWith("data") || url.startsWith("BEGIN"))
60 | ) {
61 | let filename = "download.ics";
62 | let blob = new Blob([url], { type: "text/calendar;charset=utf-8" });
63 |
64 | if (this.state.isCrappyIE) {
65 | window.navigator.msSaveOrOpenBlob(blob, filename);
66 | } else {
67 | /****************************************************************
68 | // many browsers do not properly support downloading data URIs
69 | // (even with "download" attribute in use) so this solution
70 | // ensures the event will download cross-browser
71 | ****************************************************************/
72 | let link = document.createElement("a");
73 | link.href = window.URL.createObjectURL(blob);
74 | link.setAttribute("download", filename);
75 | document.body.appendChild(link);
76 | link.click();
77 | document.body.removeChild(link);
78 | }
79 | } else {
80 | window.open(url, "_blank");
81 | }
82 |
83 | this.toggleCalendarDropdown();
84 | }
85 |
86 | renderDropdown() {
87 | let self = this;
88 |
89 | let items = this.props.listItems.map(listItem => {
90 | let currentItem = Object.keys(listItem)[0];
91 | let currentLabel = listItem[currentItem];
92 |
93 | let icon = null;
94 | if (self.props.displayItemIcons) {
95 | let currentIcon =
96 | currentItem === "outlook" || currentItem === "outlookcom"
97 | ? "windows"
98 | : currentItem;
99 | icon = ;
100 | }
101 |
102 | return (
103 |
104 |
114 | {icon}
115 | {currentLabel}
116 |
117 |
118 | );
119 | });
120 |
121 | return (
122 |
125 | );
126 | }
127 |
128 | renderButton() {
129 | let buttonLabel = this.props.buttonLabel;
130 | let buttonIcon = null;
131 | let template = Object.keys(this.props.buttonTemplate);
132 |
133 | if (template[0] !== "textOnly") {
134 | const iconPlacement = this.props.buttonTemplate[template];
135 | const buttonClassPrefix =
136 | this.props.buttonIconClass === "react-add-to-calendar__icon--"
137 | ? `${this.props.buttonIconClass}${iconPlacement}`
138 | : this.props.buttonIconClass;
139 | const iconPrefix = this.props.useFontAwesomeIcons ? "fa fa-" : "";
140 |
141 | const mainButtonIconClass =
142 | template[0] === "caret"
143 | ? this.state.optionsOpen ? "caret-up" : "caret-down"
144 | : template[0];
145 |
146 | let buttonIconClass = `${buttonClassPrefix} ${iconPrefix}${mainButtonIconClass}`;
147 |
148 | buttonIcon = ;
149 | buttonLabel =
150 | iconPlacement === "right" ? (
151 |
152 | {buttonLabel + " "}
153 | {buttonIcon}
154 |
155 | ) : (
156 |
157 | {buttonIcon}
158 | {" " + buttonLabel}
159 |
160 | );
161 | }
162 |
163 | let buttonClass = this.state.optionsOpen
164 | ? this.props.buttonClassClosed + " " + this.props.buttonClassOpen
165 | : this.props.buttonClassClosed;
166 |
167 | return (
168 |
173 | );
174 | }
175 |
176 | render() {
177 | let options = null;
178 | if (this.state.optionsOpen) {
179 | options = this.renderDropdown();
180 | }
181 |
182 | let addToCalendarBtn = null;
183 | if (this.props.event) {
184 | addToCalendarBtn = this.renderButton();
185 | }
186 |
187 | return (
188 |
189 | {addToCalendarBtn}
190 | {options}
191 |
192 | );
193 | }
194 | }
195 |
196 | ReactAddToCalendar.displayName = "Add To Calendar";
197 |
198 | ReactAddToCalendar.propTypes = {
199 | buttonClassClosed: PropTypes.string,
200 | buttonClassOpen: PropTypes.string,
201 | buttonLabel: PropTypes.string,
202 | buttonTemplate: PropTypes.object,
203 | buttonIconClass: PropTypes.string,
204 | useFontAwesomeIcons: PropTypes.bool,
205 | buttonWrapperClass: PropTypes.string,
206 | displayItemIcons: PropTypes.bool,
207 | optionsOpen: PropTypes.bool,
208 | dropdownClass: PropTypes.string,
209 | event: PropTypes.shape({
210 | title: PropTypes.string,
211 | description: PropTypes.string,
212 | location: PropTypes.string,
213 | startTime: PropTypes.string,
214 | endTime: PropTypes.string
215 | }).isRequired,
216 | listItems: PropTypes.arrayOf(PropTypes.object),
217 | rootClass: PropTypes.string
218 | };
219 |
220 | ReactAddToCalendar.defaultProps = {
221 | buttonClassClosed: "react-add-to-calendar__button",
222 | buttonClassOpen: "react-add-to-calendar__button--light",
223 | buttonLabel: "Add to My Calendar",
224 | buttonTemplate: { caret: "right" },
225 | buttonIconClass: "react-add-to-calendar__icon--",
226 | useFontAwesomeIcons: true,
227 | buttonWrapperClass: "react-add-to-calendar__wrapper",
228 | displayItemIcons: true,
229 | optionsOpen: false,
230 | dropdownClass: "react-add-to-calendar__dropdown",
231 | event: {
232 | title: "Sample Event",
233 | description: "This is the sample event provided as an example only",
234 | location: "Portland, OR",
235 | startTime: "2016-09-16T20:15:00-04:00",
236 | endTime: "2016-09-16T21:45:00-04:00"
237 | },
238 | listItems: [
239 | { apple: "Apple Calendar" },
240 | { google: "Google" },
241 | { outlook: "Outlook" },
242 | { outlookcom: "Outlook.com" },
243 | { yahoo: "Yahoo" }
244 | ],
245 | rootClass: "react-add-to-calendar"
246 | };
247 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "standard",
3 |
4 | "ecmaFeatures": {
5 | "arrowFunctions": true, // enable arrow functions
6 | "binaryLiterals": false, // enable binary literals
7 | "blockBindings": true, // enable let and const (aka block bindings)
8 | "classes": true, // enable classes
9 | "defaultParams": true, // enable default function parameters
10 | "destructuring": true, // enable destructuring
11 | "forOf": true, // enable for-of loops
12 | "generators": false, // enable generators
13 | "modules": true, // enable modules and global strict mode
14 | "objectLiteralComputedProperties": true, // enable computed object literal property names
15 | "objectLiteralDuplicateProperties": true, // enable duplicate object literal properties in strict mode
16 | "objectLiteralShorthandMethods": true, // enable object literal shorthand methods
17 | "objectLiteralShorthandProperties": true, // enable object literal shorthand properties
18 | "octalLiterals": false, // enable octal literals
19 | "regexUFlag": false, // enable the regular expression u flag
20 | "regexYFlag": false, // enable the regular expression y flag
21 | "restParams": false, // enable the rest parameters
22 | "spread": true, // enable the spread operator
23 | "superInFunctions": true, // enable super references inside of functions
24 | "templateStrings": true, // enable template strings
25 | "unicodeCodePointEscapes": false, // enable code point escapes
26 | "globalReturn": false, // allow return statements in the global scope
27 | "jsx": true // enable JSX
28 | },
29 |
30 | "env": {
31 | "browser": true, // browser global variables
32 | "node": true, // Node.js global variables and Node.js-specific rules
33 | "mocha": true, // adds all of the Mocha testing global variables
34 | "es6": true,
35 | },
36 |
37 | "plugins": [
38 | "react"
39 | ],
40 |
41 | "parser": null,
42 | "rules": {
43 | "comma-dangle": 0, // disallow trailing commas in object literals
44 | "no-cond-assign": 0, // disallow assignment in conditional expressions
45 | "no-console": 0, // disallow use of console (off by default in the node environment)
46 | "no-constant-condition": 0, // disallow use of constant expressions in conditions
47 | "no-control-regex": 0, // disallow control characters in regular expressions
48 | "no-debugger": 0, // disallow use of debugger
49 | "no-dupe-args": 0, // disallow duplicate arguments in functions
50 | "no-dupe-keys": 0, // disallow duplicate keys when creating object literals
51 | "no-duplicate-case": 0, // disallow a duplicate case label
52 | "no-empty-character-class": 0, // disallow the use of empty character classes in regular expressions
53 | "no-empty": 0, // disallow empty statements
54 | "no-ex-assign": 0, // disallow assigning to the exception in a catch block
55 | "no-extra-boolean-cast": 0, // disallow double-negation boolean casts in a boolean context
56 | "no-extra-parens": 0, // disallow unnecessary parentheses (off by default)
57 | "no-extra-semi": 0, // disallow unnecessary semicolons
58 | "no-func-assign": 0, // disallow overwriting functions written as function declarations
59 | "no-inner-declarations": 0, // disallow function or variable declarations in nested blocks
60 | "no-invalid-regexp": 0, // disallow invalid regular expression strings in the RegExp constructor
61 | "no-irregular-whitespace": 0, // disallow irregular whitespace outside of strings and comments
62 | "no-negated-in-lhs": 0, // disallow negation of the left operand of an in expression
63 | "no-obj-calls": 0, // disallow the use of object properties of the global object (Math and JSON) as functions
64 | "no-regex-spaces": 0, // disallow multiple spaces in a regular expression literal
65 | "no-reserved-keys": 0, // disallow reserved words being used as object literal keys (off by default)
66 | "no-sparse-arrays": 0, // disallow sparse arrays
67 | "no-unreachable": 0, // disallow unreachable statements after a return, throw, continue, or break statement
68 | "no-useless-escape": 0, // disallow useless escape rule
69 | "use-isnan": 0, // disallow comparisons with the value NaN
70 | "valid-jsdoc": 0, // Ensure JSDoc comments are valid (off by default)
71 | "valid-typeof": 0, // Ensure that the results of typeof are compared against a valid string
72 | "no-unexpected-multiline": 0, // Avoid code that looks like two expressions but is actually one (off by default)
73 |
74 | "accessor-pairs": 0, // enforces getter/setter pairs in objects (off by default)
75 | "block-scoped-var": 0, // treat var statements as if they were block scoped (off by default)
76 | "complexity": 0, // specify the maximum cyclomatic complexity allowed in a program (off by default)
77 | "consistent-return": 0, // require return statements to either always or never specify values
78 | "curly": 0, // specify curly brace conventions for all control statements
79 | "default-case": 0, // require default case in switch statements (off by default)
80 | "dot-notation": 0, // encourages use of dot notation whenever possible
81 | "dot-location": 0, // enforces consistent newlines before or after dots (off by default)
82 | "eqeqeq": 0, // require the use of === and !==
83 | "guard-for-in": 0, // make sure for-in loops have an if statement (off by default)
84 | "no-alert": 0, // disallow the use of alert, confirm, and prompt
85 | "no-caller": 0, // disallow use of arguments.caller or arguments.callee
86 | "no-div-regex": 0, // disallow division operators explicitly at beginning of regular expression (off by default)
87 | "no-else-return": 0, // disallow else after a return in an if (off by default)
88 | "no-empty-label": 0, // disallow use of labels for anything other then loops and switches
89 | "no-eq-null": 0, // disallow comparisons to null without a type-checking operator (off by default)
90 | "no-eval": 0, // disallow use of eval()
91 | "no-extend-native": 0, // disallow adding to native types
92 | "no-extra-bind": 0, // disallow unnecessary function binding
93 | "no-fallthrough": 0, // disallow fallthrough of case statements
94 | "no-floating-decimal": 0, // disallow the use of leading or trailing decimal points in numeric literals (off by default)
95 | "no-implied-eval": 0, // disallow use of eval()-like methods
96 | "no-iterator": 0, // disallow usage of __iterator__ property
97 | "no-labels": 0, // disallow use of labeled statements
98 | "no-lone-blocks": 0, // disallow unnecessary nested blocks
99 | "no-loop-func": 0, // disallow creation of functions within loops
100 | "no-multi-spaces": 0, // disallow use of multiple spaces
101 | "no-multi-str": 0, // disallow use of multiline strings
102 | "no-native-reassign": 0, // disallow reassignments of native objects
103 | "no-new-func": 0, // disallow use of new operator for Function object
104 | "no-new-wrappers": 0, // disallows creating new instances of String, Number, and Boolean
105 | "no-new": 0, // disallow use of new operator when not part of the assignment or comparison
106 | "no-octal-escape": 0, // disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251";
107 | "no-octal": 0, // disallow use of octal literals
108 | "no-param-reassign": 0, // disallow reassignment of function parameters (off by default)
109 | "no-process-env": 0, // disallow use of process.env (off by default)
110 | "no-proto": 0, // disallow usage of __proto__ property
111 | "no-redeclare": 0, // disallow declaring the same variable more then once
112 | "no-return-assign": 0, // disallow use of assignment in return statement
113 | "no-script-url": 0, // disallow use of javascript: urls
114 | "no-self-compare": 0, // disallow comparisons where both sides are exactly the same (off by default)
115 | "no-sequences": 0, // disallow use of comma operator
116 | "no-throw-literal": 0, // restrict what can be thrown as an exception (off by default)
117 | "no-unused-expressions": 0, // disallow usage of expressions in statement position
118 | "no-void": 0, // disallow use of void operator (off by default)
119 | "no-warning-comments": 0, // disallow usage of configurable warning terms in comments, e.g. TODO or FIXME (off by default)
120 | "no-with": 0, // disallow use of the with statement
121 | "radix": 0, // require use of the second argument for parseInt() (off by default)
122 | "vars-on-top": 0, // requires to declare all vars on top of their containing scope (off by default)
123 | "wrap-iife": 0, // require immediate function invocation to be wrapped in parentheses (off by default)
124 | "yoda": 0, // require or disallow Yoda conditions
125 |
126 | "strict": 0, // controls location of Use Strict Directives
127 |
128 | "no-catch-shadow": 0, // disallow the catch clause parameter name being the same as a variable in the outer scope (off by default in the node environment)
129 | "no-delete-var": 0, // disallow deletion of variables
130 | "no-label-var": 0, // disallow labels that share a name with a variable
131 | "no-shadow": 0, // disallow declaration of variables already declared in the outer scope
132 | "no-shadow-restricted-names": 0, // disallow shadowing of names such as arguments
133 | "no-undef": 0, // disallow use of undeclared variables unless mentioned in a /*global */ block
134 | "no-undef-init": 0, // disallow use of undefined when initializing variables
135 | "no-undefined": 0, // disallow use of undefined variable (off by default)
136 | "no-unused-vars": 0, // disallow declaration of variables that are not used in the code
137 | "no-use-before-define": 0, // disallow use of variables before they are defined
138 |
139 | "handle-callback-err": 0, // enforces error handling in callbacks (off by default) (on by default in the node environment)
140 | "no-mixed-requires": 0, // disallow mixing regular variable and require declarations (off by default) (on by default in the node environment)
141 | "no-new-require": 0, // disallow use of new operator with the require function (off by default) (on by default in the node environment)
142 | "no-path-concat": 0, // disallow string concatenation with __dirname and __filename (off by default) (on by default in the node environment)
143 | "no-process-exit": 0, // disallow process.exit() (on by default in the node environment)
144 | "no-restricted-modules": 0, // restrict usage of specified node modules (off by default)
145 | "no-sync": 0, // disallow use of synchronous methods (off by default)
146 |
147 | "array-bracket-spacing": 0, // enforce spacing inside array brackets (off by default)
148 | "brace-style": 0, // enforce one true brace style (off by default)
149 | "camelcase": 0, // require camel case names
150 | "comma-spacing": 0, // enforce spacing before and after comma
151 | "comma-style": 0, // enforce one true comma style (off by default)
152 | "computed-property-spacing": 0, // require or disallow padding inside computed properties (off by default)
153 | "consistent-this": 0, // enforces consistent naming when capturing the current execution context (off by default)
154 | "eol-last": 0, // enforce newline at the end of file, with no multiple empty lines
155 | "func-names": 0, // require function expressions to have a name (off by default)
156 | "func-style": 0, // enforces use of function declarations or expressions (off by default)
157 | "indent": 0, // this option sets a specific tab width for your code (off by default)
158 | "key-spacing": 0, // enforces spacing between keys and values in object literal properties
159 | "lines-around-comment": 0, // enforces empty lines around comments (off by default)
160 | "linebreak-style": 0, // disallow mixed 'LF' and 'CRLF' as linebreaks (off by default)
161 | "max-nested-callbacks": 0, // specify the maximum depth callbacks can be nested (off by default)
162 | "new-cap": 0, // require a capital letter for constructors
163 | "new-parens": 0, // disallow the omission of parentheses when invoking a constructor with no arguments
164 | "newline-after-var": 0, // allow/disallow an empty newline after var statement (off by default)
165 | "no-array-constructor": 0, // disallow use of the Array constructor
166 | "no-continue": 0, // disallow use of the continue statement (off by default)
167 | "no-inline-comments": 0, // disallow comments inline after code (off by default)
168 | "no-lonely-if": 0, // disallow if as the only statement in an else block (off by default)
169 | "no-mixed-spaces-and-tabs": 0, // disallow mixed spaces and tabs for indentation
170 | "no-multiple-empty-lines": 0, // disallow multiple empty lines (off by default)
171 | "no-nested-ternary": 0, // disallow nested ternary expressions (off by default)
172 | "no-new-object": 0, // disallow use of the Object constructor
173 | "no-spaced-func": 0, // disallow space between function identifier and application
174 | "no-ternary": 0, // disallow the use of ternary operators (off by default)
175 | "no-trailing-spaces": 0, // disallow trailing whitespace at the end of lines
176 | "no-underscore-dangle": 0, // disallow dangling underscores in identifiers
177 | "one-var": 0, // allow just one var statement per function (off by default)
178 | "operator-assignment": 0, // require assignment operator shorthand where possible or prohibit it entirely (off by default)
179 | "operator-linebreak": 0, // enforce operators to be placed before or after line breaks (off by default)
180 | "padded-blocks": 0, // enforce padding within blocks (off by default)
181 | "quote-props": 0, // require quotes around object literal property names (off by default)
182 | "quotes": 0, // specify whether double or single quotes should be used
183 | "semi-spacing": 0, // enforce spacing before and after semicolons
184 | "semi": 0, // require or disallow use of semicolons instead of ASI
185 | "sort-vars": 0, // sort variables within the same declaration block (off by default)
186 | "space-after-keywords": 0, // require a space after certain keywords (off by default)
187 | "space-before-blocks": 0, // require or disallow space before blocks (off by default)
188 | "space-before-function-paren": 0, // require or disallow space before function opening parenthesis (off by default)
189 | "space-in-parens": 0, // require or disallow spaces inside parentheses (off by default)
190 | "space-infix-ops": 0, // require spaces around operators
191 | "space-return-throw-case": 0, // require a space after return, throw, and case
192 | "space-unary-ops": 0, // require or disallow spaces before/after unary operators (words on by default, nonwords off by default)
193 | "spaced-comment": 0, // require or disallow a space immediately following the // or /* in a comment (off by default)
194 | "wrap-regex": 0, // require regex literals to be wrapped in parentheses (off by default)
195 |
196 | "constructor-super": 0, // verify super() callings in constructors (off by default)
197 | "generator-star-spacing": 0, // enforce the spacing around the * in generator functions (off by default)
198 | "no-this-before-super": 0, // disallow to use this/super before super() calling in constructors (off by default)
199 | "no-var": 0, // require let or const instead of var (off by default)
200 | "object-shorthand": 0, // require method and property shorthand syntax for object literals (off by default)
201 | "prefer-const": 0, // suggest using of const declaration for variables that are never modified after declared (off by default)
202 |
203 | "max-depth": 0, // specify the maximum depth that blocks can be nested (off by default)
204 | "max-len": 0, // specify the maximum length of a line in your program (off by default)
205 | "max-params": 0, // limits the number of parameters that can be used in the function declaration. (off by default)
206 | "max-statements": 0, // specify the maximum number of statement allowed in a function (off by default)
207 | "no-bitwise": 0, // disallow use of bitwise operators (off by default)
208 | "no-plusplus": 0, // disallow use of unary operators, ++ and -- (off by default)
209 |
210 | "react/display-name": 2,
211 | "react/forbid-prop-types": 0,
212 | "react/jsx-boolean-value": 2,
213 | "react/jsx-closing-bracket-location": 0,
214 | "react/jsx-curly-spacing": [2, "never"],
215 | "react/jsx-indent-props": 0,
216 | "react/jsx-key": 2,
217 | "react/jsx-max-props-per-line": [2, { "maximum": 4 }],
218 | "react/jsx-no-duplicate-props": 2,
219 | "react/jsx-no-literals": 0,
220 | "react/jsx-no-undef": 2,
221 | "react/jsx-pascal-case": 2,
222 | "react/jsx-sort-prop-types": 0,
223 | "react/jsx-sort-props": 0,
224 | "react/jsx-uses-react": 2,
225 | "react/jsx-uses-vars": 2,
226 | "react/no-danger": 2,
227 | "react/no-deprecated": 2,
228 | "react/no-did-mount-set-state": 2,
229 | "react/no-did-update-set-state": 2,
230 | "react/no-direct-mutation-state": 2,
231 | "react/no-multi-comp": 2,
232 | "react/no-set-state": 0,
233 | "react/no-unknown-property": 2,
234 | "react/prefer-es6-class": 0,
235 | "react/prop-types": 2,
236 | "react/react-in-jsx-scope": 2,
237 | "react/require-extension": 0,
238 | "react/self-closing-comp": 2,
239 | "react/sort-comp": 2,
240 | "react/wrap-multilines": 0
241 | }
242 | }
243 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_variables.scss:
--------------------------------------------------------------------------------
1 | // Variables
2 | // --------------------------
3 |
4 | /*$fa-font-path: "../fonts" !default;*/
5 | $fa-font-size-base: 14px !default;
6 | $fa-line-height-base: 1 !default;
7 | $fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts" !default; // for referencing Bootstrap CDN font files directly
8 | $fa-css-prefix: fa !default;
9 | $fa-version: "4.6.3" !default;
10 | $fa-border-color: #eee !default;
11 | $fa-inverse: #fff !default;
12 | $fa-li-width: (30em / 14) !default;
13 |
14 | $fa-var-500px: "\f26e";
15 | $fa-var-adjust: "\f042";
16 | $fa-var-adn: "\f170";
17 | $fa-var-align-center: "\f037";
18 | $fa-var-align-justify: "\f039";
19 | $fa-var-align-left: "\f036";
20 | $fa-var-align-right: "\f038";
21 | $fa-var-amazon: "\f270";
22 | $fa-var-ambulance: "\f0f9";
23 | $fa-var-american-sign-language-interpreting: "\f2a3";
24 | $fa-var-anchor: "\f13d";
25 | $fa-var-android: "\f17b";
26 | $fa-var-angellist: "\f209";
27 | $fa-var-angle-double-down: "\f103";
28 | $fa-var-angle-double-left: "\f100";
29 | $fa-var-angle-double-right: "\f101";
30 | $fa-var-angle-double-up: "\f102";
31 | $fa-var-angle-down: "\f107";
32 | $fa-var-angle-left: "\f104";
33 | $fa-var-angle-right: "\f105";
34 | $fa-var-angle-up: "\f106";
35 | $fa-var-apple: "\f179";
36 | $fa-var-archive: "\f187";
37 | $fa-var-area-chart: "\f1fe";
38 | $fa-var-arrow-circle-down: "\f0ab";
39 | $fa-var-arrow-circle-left: "\f0a8";
40 | $fa-var-arrow-circle-o-down: "\f01a";
41 | $fa-var-arrow-circle-o-left: "\f190";
42 | $fa-var-arrow-circle-o-right: "\f18e";
43 | $fa-var-arrow-circle-o-up: "\f01b";
44 | $fa-var-arrow-circle-right: "\f0a9";
45 | $fa-var-arrow-circle-up: "\f0aa";
46 | $fa-var-arrow-down: "\f063";
47 | $fa-var-arrow-left: "\f060";
48 | $fa-var-arrow-right: "\f061";
49 | $fa-var-arrow-up: "\f062";
50 | $fa-var-arrows: "\f047";
51 | $fa-var-arrows-alt: "\f0b2";
52 | $fa-var-arrows-h: "\f07e";
53 | $fa-var-arrows-v: "\f07d";
54 | $fa-var-asl-interpreting: "\f2a3";
55 | $fa-var-assistive-listening-systems: "\f2a2";
56 | $fa-var-asterisk: "\f069";
57 | $fa-var-at: "\f1fa";
58 | $fa-var-audio-description: "\f29e";
59 | $fa-var-automobile: "\f1b9";
60 | $fa-var-backward: "\f04a";
61 | $fa-var-balance-scale: "\f24e";
62 | $fa-var-ban: "\f05e";
63 | $fa-var-bank: "\f19c";
64 | $fa-var-bar-chart: "\f080";
65 | $fa-var-bar-chart-o: "\f080";
66 | $fa-var-barcode: "\f02a";
67 | $fa-var-bars: "\f0c9";
68 | $fa-var-battery-0: "\f244";
69 | $fa-var-battery-1: "\f243";
70 | $fa-var-battery-2: "\f242";
71 | $fa-var-battery-3: "\f241";
72 | $fa-var-battery-4: "\f240";
73 | $fa-var-battery-empty: "\f244";
74 | $fa-var-battery-full: "\f240";
75 | $fa-var-battery-half: "\f242";
76 | $fa-var-battery-quarter: "\f243";
77 | $fa-var-battery-three-quarters: "\f241";
78 | $fa-var-bed: "\f236";
79 | $fa-var-beer: "\f0fc";
80 | $fa-var-behance: "\f1b4";
81 | $fa-var-behance-square: "\f1b5";
82 | $fa-var-bell: "\f0f3";
83 | $fa-var-bell-o: "\f0a2";
84 | $fa-var-bell-slash: "\f1f6";
85 | $fa-var-bell-slash-o: "\f1f7";
86 | $fa-var-bicycle: "\f206";
87 | $fa-var-binoculars: "\f1e5";
88 | $fa-var-birthday-cake: "\f1fd";
89 | $fa-var-bitbucket: "\f171";
90 | $fa-var-bitbucket-square: "\f172";
91 | $fa-var-bitcoin: "\f15a";
92 | $fa-var-black-tie: "\f27e";
93 | $fa-var-blind: "\f29d";
94 | $fa-var-bluetooth: "\f293";
95 | $fa-var-bluetooth-b: "\f294";
96 | $fa-var-bold: "\f032";
97 | $fa-var-bolt: "\f0e7";
98 | $fa-var-bomb: "\f1e2";
99 | $fa-var-book: "\f02d";
100 | $fa-var-bookmark: "\f02e";
101 | $fa-var-bookmark-o: "\f097";
102 | $fa-var-braille: "\f2a1";
103 | $fa-var-briefcase: "\f0b1";
104 | $fa-var-btc: "\f15a";
105 | $fa-var-bug: "\f188";
106 | $fa-var-building: "\f1ad";
107 | $fa-var-building-o: "\f0f7";
108 | $fa-var-bullhorn: "\f0a1";
109 | $fa-var-bullseye: "\f140";
110 | $fa-var-bus: "\f207";
111 | $fa-var-buysellads: "\f20d";
112 | $fa-var-cab: "\f1ba";
113 | $fa-var-calculator: "\f1ec";
114 | $fa-var-calendar: "\f073";
115 | $fa-var-calendar-check-o: "\f274";
116 | $fa-var-calendar-minus-o: "\f272";
117 | $fa-var-calendar-o: "\f133";
118 | $fa-var-calendar-plus-o: "\f271";
119 | $fa-var-calendar-times-o: "\f273";
120 | $fa-var-camera: "\f030";
121 | $fa-var-camera-retro: "\f083";
122 | $fa-var-car: "\f1b9";
123 | $fa-var-caret-down: "\f0d7";
124 | $fa-var-caret-left: "\f0d9";
125 | $fa-var-caret-right: "\f0da";
126 | $fa-var-caret-square-o-down: "\f150";
127 | $fa-var-caret-square-o-left: "\f191";
128 | $fa-var-caret-square-o-right: "\f152";
129 | $fa-var-caret-square-o-up: "\f151";
130 | $fa-var-caret-up: "\f0d8";
131 | $fa-var-cart-arrow-down: "\f218";
132 | $fa-var-cart-plus: "\f217";
133 | $fa-var-cc: "\f20a";
134 | $fa-var-cc-amex: "\f1f3";
135 | $fa-var-cc-diners-club: "\f24c";
136 | $fa-var-cc-discover: "\f1f2";
137 | $fa-var-cc-jcb: "\f24b";
138 | $fa-var-cc-mastercard: "\f1f1";
139 | $fa-var-cc-paypal: "\f1f4";
140 | $fa-var-cc-stripe: "\f1f5";
141 | $fa-var-cc-visa: "\f1f0";
142 | $fa-var-certificate: "\f0a3";
143 | $fa-var-chain: "\f0c1";
144 | $fa-var-chain-broken: "\f127";
145 | $fa-var-check: "\f00c";
146 | $fa-var-check-circle: "\f058";
147 | $fa-var-check-circle-o: "\f05d";
148 | $fa-var-check-square: "\f14a";
149 | $fa-var-check-square-o: "\f046";
150 | $fa-var-chevron-circle-down: "\f13a";
151 | $fa-var-chevron-circle-left: "\f137";
152 | $fa-var-chevron-circle-right: "\f138";
153 | $fa-var-chevron-circle-up: "\f139";
154 | $fa-var-chevron-down: "\f078";
155 | $fa-var-chevron-left: "\f053";
156 | $fa-var-chevron-right: "\f054";
157 | $fa-var-chevron-up: "\f077";
158 | $fa-var-child: "\f1ae";
159 | $fa-var-chrome: "\f268";
160 | $fa-var-circle: "\f111";
161 | $fa-var-circle-o: "\f10c";
162 | $fa-var-circle-o-notch: "\f1ce";
163 | $fa-var-circle-thin: "\f1db";
164 | $fa-var-clipboard: "\f0ea";
165 | $fa-var-clock-o: "\f017";
166 | $fa-var-clone: "\f24d";
167 | $fa-var-close: "\f00d";
168 | $fa-var-cloud: "\f0c2";
169 | $fa-var-cloud-download: "\f0ed";
170 | $fa-var-cloud-upload: "\f0ee";
171 | $fa-var-cny: "\f157";
172 | $fa-var-code: "\f121";
173 | $fa-var-code-fork: "\f126";
174 | $fa-var-codepen: "\f1cb";
175 | $fa-var-codiepie: "\f284";
176 | $fa-var-coffee: "\f0f4";
177 | $fa-var-cog: "\f013";
178 | $fa-var-cogs: "\f085";
179 | $fa-var-columns: "\f0db";
180 | $fa-var-comment: "\f075";
181 | $fa-var-comment-o: "\f0e5";
182 | $fa-var-commenting: "\f27a";
183 | $fa-var-commenting-o: "\f27b";
184 | $fa-var-comments: "\f086";
185 | $fa-var-comments-o: "\f0e6";
186 | $fa-var-compass: "\f14e";
187 | $fa-var-compress: "\f066";
188 | $fa-var-connectdevelop: "\f20e";
189 | $fa-var-contao: "\f26d";
190 | $fa-var-copy: "\f0c5";
191 | $fa-var-copyright: "\f1f9";
192 | $fa-var-creative-commons: "\f25e";
193 | $fa-var-credit-card: "\f09d";
194 | $fa-var-credit-card-alt: "\f283";
195 | $fa-var-crop: "\f125";
196 | $fa-var-crosshairs: "\f05b";
197 | $fa-var-css3: "\f13c";
198 | $fa-var-cube: "\f1b2";
199 | $fa-var-cubes: "\f1b3";
200 | $fa-var-cut: "\f0c4";
201 | $fa-var-cutlery: "\f0f5";
202 | $fa-var-dashboard: "\f0e4";
203 | $fa-var-dashcube: "\f210";
204 | $fa-var-database: "\f1c0";
205 | $fa-var-deaf: "\f2a4";
206 | $fa-var-deafness: "\f2a4";
207 | $fa-var-dedent: "\f03b";
208 | $fa-var-delicious: "\f1a5";
209 | $fa-var-desktop: "\f108";
210 | $fa-var-deviantart: "\f1bd";
211 | $fa-var-diamond: "\f219";
212 | $fa-var-digg: "\f1a6";
213 | $fa-var-dollar: "\f155";
214 | $fa-var-dot-circle-o: "\f192";
215 | $fa-var-download: "\f019";
216 | $fa-var-dribbble: "\f17d";
217 | $fa-var-dropbox: "\f16b";
218 | $fa-var-drupal: "\f1a9";
219 | $fa-var-edge: "\f282";
220 | $fa-var-edit: "\f044";
221 | $fa-var-eject: "\f052";
222 | $fa-var-ellipsis-h: "\f141";
223 | $fa-var-ellipsis-v: "\f142";
224 | $fa-var-empire: "\f1d1";
225 | $fa-var-envelope: "\f0e0";
226 | $fa-var-envelope-o: "\f003";
227 | $fa-var-envelope-square: "\f199";
228 | $fa-var-envira: "\f299";
229 | $fa-var-eraser: "\f12d";
230 | $fa-var-eur: "\f153";
231 | $fa-var-euro: "\f153";
232 | $fa-var-exchange: "\f0ec";
233 | $fa-var-exclamation: "\f12a";
234 | $fa-var-exclamation-circle: "\f06a";
235 | $fa-var-exclamation-triangle: "\f071";
236 | $fa-var-expand: "\f065";
237 | $fa-var-expeditedssl: "\f23e";
238 | $fa-var-external-link: "\f08e";
239 | $fa-var-external-link-square: "\f14c";
240 | $fa-var-eye: "\f06e";
241 | $fa-var-eye-slash: "\f070";
242 | $fa-var-eyedropper: "\f1fb";
243 | $fa-var-fa: "\f2b4";
244 | $fa-var-facebook: "\f09a";
245 | $fa-var-facebook-f: "\f09a";
246 | $fa-var-facebook-official: "\f230";
247 | $fa-var-facebook-square: "\f082";
248 | $fa-var-fast-backward: "\f049";
249 | $fa-var-fast-forward: "\f050";
250 | $fa-var-fax: "\f1ac";
251 | $fa-var-feed: "\f09e";
252 | $fa-var-female: "\f182";
253 | $fa-var-fighter-jet: "\f0fb";
254 | $fa-var-file: "\f15b";
255 | $fa-var-file-archive-o: "\f1c6";
256 | $fa-var-file-audio-o: "\f1c7";
257 | $fa-var-file-code-o: "\f1c9";
258 | $fa-var-file-excel-o: "\f1c3";
259 | $fa-var-file-image-o: "\f1c5";
260 | $fa-var-file-movie-o: "\f1c8";
261 | $fa-var-file-o: "\f016";
262 | $fa-var-file-pdf-o: "\f1c1";
263 | $fa-var-file-photo-o: "\f1c5";
264 | $fa-var-file-picture-o: "\f1c5";
265 | $fa-var-file-powerpoint-o: "\f1c4";
266 | $fa-var-file-sound-o: "\f1c7";
267 | $fa-var-file-text: "\f15c";
268 | $fa-var-file-text-o: "\f0f6";
269 | $fa-var-file-video-o: "\f1c8";
270 | $fa-var-file-word-o: "\f1c2";
271 | $fa-var-file-zip-o: "\f1c6";
272 | $fa-var-files-o: "\f0c5";
273 | $fa-var-film: "\f008";
274 | $fa-var-filter: "\f0b0";
275 | $fa-var-fire: "\f06d";
276 | $fa-var-fire-extinguisher: "\f134";
277 | $fa-var-firefox: "\f269";
278 | $fa-var-first-order: "\f2b0";
279 | $fa-var-flag: "\f024";
280 | $fa-var-flag-checkered: "\f11e";
281 | $fa-var-flag-o: "\f11d";
282 | $fa-var-flash: "\f0e7";
283 | $fa-var-flask: "\f0c3";
284 | $fa-var-flickr: "\f16e";
285 | $fa-var-floppy-o: "\f0c7";
286 | $fa-var-folder: "\f07b";
287 | $fa-var-folder-o: "\f114";
288 | $fa-var-folder-open: "\f07c";
289 | $fa-var-folder-open-o: "\f115";
290 | $fa-var-font: "\f031";
291 | $fa-var-font-awesome: "\f2b4";
292 | $fa-var-fonticons: "\f280";
293 | $fa-var-fort-awesome: "\f286";
294 | $fa-var-forumbee: "\f211";
295 | $fa-var-forward: "\f04e";
296 | $fa-var-foursquare: "\f180";
297 | $fa-var-frown-o: "\f119";
298 | $fa-var-futbol-o: "\f1e3";
299 | $fa-var-gamepad: "\f11b";
300 | $fa-var-gavel: "\f0e3";
301 | $fa-var-gbp: "\f154";
302 | $fa-var-ge: "\f1d1";
303 | $fa-var-gear: "\f013";
304 | $fa-var-gears: "\f085";
305 | $fa-var-genderless: "\f22d";
306 | $fa-var-get-pocket: "\f265";
307 | $fa-var-gg: "\f260";
308 | $fa-var-gg-circle: "\f261";
309 | $fa-var-gift: "\f06b";
310 | $fa-var-git: "\f1d3";
311 | $fa-var-git-square: "\f1d2";
312 | $fa-var-github: "\f09b";
313 | $fa-var-github-alt: "\f113";
314 | $fa-var-github-square: "\f092";
315 | $fa-var-gitlab: "\f296";
316 | $fa-var-gittip: "\f184";
317 | $fa-var-glass: "\f000";
318 | $fa-var-glide: "\f2a5";
319 | $fa-var-glide-g: "\f2a6";
320 | $fa-var-globe: "\f0ac";
321 | $fa-var-google: "\f1a0";
322 | $fa-var-google-plus: "\f0d5";
323 | $fa-var-google-plus-circle: "\f2b3";
324 | $fa-var-google-plus-official: "\f2b3";
325 | $fa-var-google-plus-square: "\f0d4";
326 | $fa-var-google-wallet: "\f1ee";
327 | $fa-var-graduation-cap: "\f19d";
328 | $fa-var-gratipay: "\f184";
329 | $fa-var-group: "\f0c0";
330 | $fa-var-h-square: "\f0fd";
331 | $fa-var-hacker-news: "\f1d4";
332 | $fa-var-hand-grab-o: "\f255";
333 | $fa-var-hand-lizard-o: "\f258";
334 | $fa-var-hand-o-down: "\f0a7";
335 | $fa-var-hand-o-left: "\f0a5";
336 | $fa-var-hand-o-right: "\f0a4";
337 | $fa-var-hand-o-up: "\f0a6";
338 | $fa-var-hand-paper-o: "\f256";
339 | $fa-var-hand-peace-o: "\f25b";
340 | $fa-var-hand-pointer-o: "\f25a";
341 | $fa-var-hand-rock-o: "\f255";
342 | $fa-var-hand-scissors-o: "\f257";
343 | $fa-var-hand-spock-o: "\f259";
344 | $fa-var-hand-stop-o: "\f256";
345 | $fa-var-hard-of-hearing: "\f2a4";
346 | $fa-var-hashtag: "\f292";
347 | $fa-var-hdd-o: "\f0a0";
348 | $fa-var-header: "\f1dc";
349 | $fa-var-headphones: "\f025";
350 | $fa-var-heart: "\f004";
351 | $fa-var-heart-o: "\f08a";
352 | $fa-var-heartbeat: "\f21e";
353 | $fa-var-history: "\f1da";
354 | $fa-var-home: "\f015";
355 | $fa-var-hospital-o: "\f0f8";
356 | $fa-var-hotel: "\f236";
357 | $fa-var-hourglass: "\f254";
358 | $fa-var-hourglass-1: "\f251";
359 | $fa-var-hourglass-2: "\f252";
360 | $fa-var-hourglass-3: "\f253";
361 | $fa-var-hourglass-end: "\f253";
362 | $fa-var-hourglass-half: "\f252";
363 | $fa-var-hourglass-o: "\f250";
364 | $fa-var-hourglass-start: "\f251";
365 | $fa-var-houzz: "\f27c";
366 | $fa-var-html5: "\f13b";
367 | $fa-var-i-cursor: "\f246";
368 | $fa-var-ils: "\f20b";
369 | $fa-var-image: "\f03e";
370 | $fa-var-inbox: "\f01c";
371 | $fa-var-indent: "\f03c";
372 | $fa-var-industry: "\f275";
373 | $fa-var-info: "\f129";
374 | $fa-var-info-circle: "\f05a";
375 | $fa-var-inr: "\f156";
376 | $fa-var-instagram: "\f16d";
377 | $fa-var-institution: "\f19c";
378 | $fa-var-internet-explorer: "\f26b";
379 | $fa-var-intersex: "\f224";
380 | $fa-var-ioxhost: "\f208";
381 | $fa-var-italic: "\f033";
382 | $fa-var-joomla: "\f1aa";
383 | $fa-var-jpy: "\f157";
384 | $fa-var-jsfiddle: "\f1cc";
385 | $fa-var-key: "\f084";
386 | $fa-var-keyboard-o: "\f11c";
387 | $fa-var-krw: "\f159";
388 | $fa-var-language: "\f1ab";
389 | $fa-var-laptop: "\f109";
390 | $fa-var-lastfm: "\f202";
391 | $fa-var-lastfm-square: "\f203";
392 | $fa-var-leaf: "\f06c";
393 | $fa-var-leanpub: "\f212";
394 | $fa-var-legal: "\f0e3";
395 | $fa-var-lemon-o: "\f094";
396 | $fa-var-level-down: "\f149";
397 | $fa-var-level-up: "\f148";
398 | $fa-var-life-bouy: "\f1cd";
399 | $fa-var-life-buoy: "\f1cd";
400 | $fa-var-life-ring: "\f1cd";
401 | $fa-var-life-saver: "\f1cd";
402 | $fa-var-lightbulb-o: "\f0eb";
403 | $fa-var-line-chart: "\f201";
404 | $fa-var-link: "\f0c1";
405 | $fa-var-linkedin: "\f0e1";
406 | $fa-var-linkedin-square: "\f08c";
407 | $fa-var-linux: "\f17c";
408 | $fa-var-list: "\f03a";
409 | $fa-var-list-alt: "\f022";
410 | $fa-var-list-ol: "\f0cb";
411 | $fa-var-list-ul: "\f0ca";
412 | $fa-var-location-arrow: "\f124";
413 | $fa-var-lock: "\f023";
414 | $fa-var-long-arrow-down: "\f175";
415 | $fa-var-long-arrow-left: "\f177";
416 | $fa-var-long-arrow-right: "\f178";
417 | $fa-var-long-arrow-up: "\f176";
418 | $fa-var-low-vision: "\f2a8";
419 | $fa-var-magic: "\f0d0";
420 | $fa-var-magnet: "\f076";
421 | $fa-var-mail-forward: "\f064";
422 | $fa-var-mail-reply: "\f112";
423 | $fa-var-mail-reply-all: "\f122";
424 | $fa-var-male: "\f183";
425 | $fa-var-map: "\f279";
426 | $fa-var-map-marker: "\f041";
427 | $fa-var-map-o: "\f278";
428 | $fa-var-map-pin: "\f276";
429 | $fa-var-map-signs: "\f277";
430 | $fa-var-mars: "\f222";
431 | $fa-var-mars-double: "\f227";
432 | $fa-var-mars-stroke: "\f229";
433 | $fa-var-mars-stroke-h: "\f22b";
434 | $fa-var-mars-stroke-v: "\f22a";
435 | $fa-var-maxcdn: "\f136";
436 | $fa-var-meanpath: "\f20c";
437 | $fa-var-medium: "\f23a";
438 | $fa-var-medkit: "\f0fa";
439 | $fa-var-meh-o: "\f11a";
440 | $fa-var-mercury: "\f223";
441 | $fa-var-microphone: "\f130";
442 | $fa-var-microphone-slash: "\f131";
443 | $fa-var-minus: "\f068";
444 | $fa-var-minus-circle: "\f056";
445 | $fa-var-minus-square: "\f146";
446 | $fa-var-minus-square-o: "\f147";
447 | $fa-var-mixcloud: "\f289";
448 | $fa-var-mobile: "\f10b";
449 | $fa-var-mobile-phone: "\f10b";
450 | $fa-var-modx: "\f285";
451 | $fa-var-money: "\f0d6";
452 | $fa-var-moon-o: "\f186";
453 | $fa-var-mortar-board: "\f19d";
454 | $fa-var-motorcycle: "\f21c";
455 | $fa-var-mouse-pointer: "\f245";
456 | $fa-var-music: "\f001";
457 | $fa-var-navicon: "\f0c9";
458 | $fa-var-neuter: "\f22c";
459 | $fa-var-newspaper-o: "\f1ea";
460 | $fa-var-object-group: "\f247";
461 | $fa-var-object-ungroup: "\f248";
462 | $fa-var-odnoklassniki: "\f263";
463 | $fa-var-odnoklassniki-square: "\f264";
464 | $fa-var-opencart: "\f23d";
465 | $fa-var-openid: "\f19b";
466 | $fa-var-opera: "\f26a";
467 | $fa-var-optin-monster: "\f23c";
468 | $fa-var-outdent: "\f03b";
469 | $fa-var-pagelines: "\f18c";
470 | $fa-var-paint-brush: "\f1fc";
471 | $fa-var-paper-plane: "\f1d8";
472 | $fa-var-paper-plane-o: "\f1d9";
473 | $fa-var-paperclip: "\f0c6";
474 | $fa-var-paragraph: "\f1dd";
475 | $fa-var-paste: "\f0ea";
476 | $fa-var-pause: "\f04c";
477 | $fa-var-pause-circle: "\f28b";
478 | $fa-var-pause-circle-o: "\f28c";
479 | $fa-var-paw: "\f1b0";
480 | $fa-var-paypal: "\f1ed";
481 | $fa-var-pencil: "\f040";
482 | $fa-var-pencil-square: "\f14b";
483 | $fa-var-pencil-square-o: "\f044";
484 | $fa-var-percent: "\f295";
485 | $fa-var-phone: "\f095";
486 | $fa-var-phone-square: "\f098";
487 | $fa-var-photo: "\f03e";
488 | $fa-var-picture-o: "\f03e";
489 | $fa-var-pie-chart: "\f200";
490 | $fa-var-pied-piper: "\f2ae";
491 | $fa-var-pied-piper-alt: "\f1a8";
492 | $fa-var-pied-piper-pp: "\f1a7";
493 | $fa-var-pinterest: "\f0d2";
494 | $fa-var-pinterest-p: "\f231";
495 | $fa-var-pinterest-square: "\f0d3";
496 | $fa-var-plane: "\f072";
497 | $fa-var-play: "\f04b";
498 | $fa-var-play-circle: "\f144";
499 | $fa-var-play-circle-o: "\f01d";
500 | $fa-var-plug: "\f1e6";
501 | $fa-var-plus: "\f067";
502 | $fa-var-plus-circle: "\f055";
503 | $fa-var-plus-square: "\f0fe";
504 | $fa-var-plus-square-o: "\f196";
505 | $fa-var-power-off: "\f011";
506 | $fa-var-print: "\f02f";
507 | $fa-var-product-hunt: "\f288";
508 | $fa-var-puzzle-piece: "\f12e";
509 | $fa-var-qq: "\f1d6";
510 | $fa-var-qrcode: "\f029";
511 | $fa-var-question: "\f128";
512 | $fa-var-question-circle: "\f059";
513 | $fa-var-question-circle-o: "\f29c";
514 | $fa-var-quote-left: "\f10d";
515 | $fa-var-quote-right: "\f10e";
516 | $fa-var-ra: "\f1d0";
517 | $fa-var-random: "\f074";
518 | $fa-var-rebel: "\f1d0";
519 | $fa-var-recycle: "\f1b8";
520 | $fa-var-reddit: "\f1a1";
521 | $fa-var-reddit-alien: "\f281";
522 | $fa-var-reddit-square: "\f1a2";
523 | $fa-var-refresh: "\f021";
524 | $fa-var-registered: "\f25d";
525 | $fa-var-remove: "\f00d";
526 | $fa-var-renren: "\f18b";
527 | $fa-var-reorder: "\f0c9";
528 | $fa-var-repeat: "\f01e";
529 | $fa-var-reply: "\f112";
530 | $fa-var-reply-all: "\f122";
531 | $fa-var-resistance: "\f1d0";
532 | $fa-var-retweet: "\f079";
533 | $fa-var-rmb: "\f157";
534 | $fa-var-road: "\f018";
535 | $fa-var-rocket: "\f135";
536 | $fa-var-rotate-left: "\f0e2";
537 | $fa-var-rotate-right: "\f01e";
538 | $fa-var-rouble: "\f158";
539 | $fa-var-rss: "\f09e";
540 | $fa-var-rss-square: "\f143";
541 | $fa-var-rub: "\f158";
542 | $fa-var-ruble: "\f158";
543 | $fa-var-rupee: "\f156";
544 | $fa-var-safari: "\f267";
545 | $fa-var-save: "\f0c7";
546 | $fa-var-scissors: "\f0c4";
547 | $fa-var-scribd: "\f28a";
548 | $fa-var-search: "\f002";
549 | $fa-var-search-minus: "\f010";
550 | $fa-var-search-plus: "\f00e";
551 | $fa-var-sellsy: "\f213";
552 | $fa-var-send: "\f1d8";
553 | $fa-var-send-o: "\f1d9";
554 | $fa-var-server: "\f233";
555 | $fa-var-share: "\f064";
556 | $fa-var-share-alt: "\f1e0";
557 | $fa-var-share-alt-square: "\f1e1";
558 | $fa-var-share-square: "\f14d";
559 | $fa-var-share-square-o: "\f045";
560 | $fa-var-shekel: "\f20b";
561 | $fa-var-sheqel: "\f20b";
562 | $fa-var-shield: "\f132";
563 | $fa-var-ship: "\f21a";
564 | $fa-var-shirtsinbulk: "\f214";
565 | $fa-var-shopping-bag: "\f290";
566 | $fa-var-shopping-basket: "\f291";
567 | $fa-var-shopping-cart: "\f07a";
568 | $fa-var-sign-in: "\f090";
569 | $fa-var-sign-language: "\f2a7";
570 | $fa-var-sign-out: "\f08b";
571 | $fa-var-signal: "\f012";
572 | $fa-var-signing: "\f2a7";
573 | $fa-var-simplybuilt: "\f215";
574 | $fa-var-sitemap: "\f0e8";
575 | $fa-var-skyatlas: "\f216";
576 | $fa-var-skype: "\f17e";
577 | $fa-var-slack: "\f198";
578 | $fa-var-sliders: "\f1de";
579 | $fa-var-slideshare: "\f1e7";
580 | $fa-var-smile-o: "\f118";
581 | $fa-var-snapchat: "\f2ab";
582 | $fa-var-snapchat-ghost: "\f2ac";
583 | $fa-var-snapchat-square: "\f2ad";
584 | $fa-var-soccer-ball-o: "\f1e3";
585 | $fa-var-sort: "\f0dc";
586 | $fa-var-sort-alpha-asc: "\f15d";
587 | $fa-var-sort-alpha-desc: "\f15e";
588 | $fa-var-sort-amount-asc: "\f160";
589 | $fa-var-sort-amount-desc: "\f161";
590 | $fa-var-sort-asc: "\f0de";
591 | $fa-var-sort-desc: "\f0dd";
592 | $fa-var-sort-down: "\f0dd";
593 | $fa-var-sort-numeric-asc: "\f162";
594 | $fa-var-sort-numeric-desc: "\f163";
595 | $fa-var-sort-up: "\f0de";
596 | $fa-var-soundcloud: "\f1be";
597 | $fa-var-space-shuttle: "\f197";
598 | $fa-var-spinner: "\f110";
599 | $fa-var-spoon: "\f1b1";
600 | $fa-var-spotify: "\f1bc";
601 | $fa-var-square: "\f0c8";
602 | $fa-var-square-o: "\f096";
603 | $fa-var-stack-exchange: "\f18d";
604 | $fa-var-stack-overflow: "\f16c";
605 | $fa-var-star: "\f005";
606 | $fa-var-star-half: "\f089";
607 | $fa-var-star-half-empty: "\f123";
608 | $fa-var-star-half-full: "\f123";
609 | $fa-var-star-half-o: "\f123";
610 | $fa-var-star-o: "\f006";
611 | $fa-var-steam: "\f1b6";
612 | $fa-var-steam-square: "\f1b7";
613 | $fa-var-step-backward: "\f048";
614 | $fa-var-step-forward: "\f051";
615 | $fa-var-stethoscope: "\f0f1";
616 | $fa-var-sticky-note: "\f249";
617 | $fa-var-sticky-note-o: "\f24a";
618 | $fa-var-stop: "\f04d";
619 | $fa-var-stop-circle: "\f28d";
620 | $fa-var-stop-circle-o: "\f28e";
621 | $fa-var-street-view: "\f21d";
622 | $fa-var-strikethrough: "\f0cc";
623 | $fa-var-stumbleupon: "\f1a4";
624 | $fa-var-stumbleupon-circle: "\f1a3";
625 | $fa-var-subscript: "\f12c";
626 | $fa-var-subway: "\f239";
627 | $fa-var-suitcase: "\f0f2";
628 | $fa-var-sun-o: "\f185";
629 | $fa-var-superscript: "\f12b";
630 | $fa-var-support: "\f1cd";
631 | $fa-var-table: "\f0ce";
632 | $fa-var-tablet: "\f10a";
633 | $fa-var-tachometer: "\f0e4";
634 | $fa-var-tag: "\f02b";
635 | $fa-var-tags: "\f02c";
636 | $fa-var-tasks: "\f0ae";
637 | $fa-var-taxi: "\f1ba";
638 | $fa-var-television: "\f26c";
639 | $fa-var-tencent-weibo: "\f1d5";
640 | $fa-var-terminal: "\f120";
641 | $fa-var-text-height: "\f034";
642 | $fa-var-text-width: "\f035";
643 | $fa-var-th: "\f00a";
644 | $fa-var-th-large: "\f009";
645 | $fa-var-th-list: "\f00b";
646 | $fa-var-themeisle: "\f2b2";
647 | $fa-var-thumb-tack: "\f08d";
648 | $fa-var-thumbs-down: "\f165";
649 | $fa-var-thumbs-o-down: "\f088";
650 | $fa-var-thumbs-o-up: "\f087";
651 | $fa-var-thumbs-up: "\f164";
652 | $fa-var-ticket: "\f145";
653 | $fa-var-times: "\f00d";
654 | $fa-var-times-circle: "\f057";
655 | $fa-var-times-circle-o: "\f05c";
656 | $fa-var-tint: "\f043";
657 | $fa-var-toggle-down: "\f150";
658 | $fa-var-toggle-left: "\f191";
659 | $fa-var-toggle-off: "\f204";
660 | $fa-var-toggle-on: "\f205";
661 | $fa-var-toggle-right: "\f152";
662 | $fa-var-toggle-up: "\f151";
663 | $fa-var-trademark: "\f25c";
664 | $fa-var-train: "\f238";
665 | $fa-var-transgender: "\f224";
666 | $fa-var-transgender-alt: "\f225";
667 | $fa-var-trash: "\f1f8";
668 | $fa-var-trash-o: "\f014";
669 | $fa-var-tree: "\f1bb";
670 | $fa-var-trello: "\f181";
671 | $fa-var-tripadvisor: "\f262";
672 | $fa-var-trophy: "\f091";
673 | $fa-var-truck: "\f0d1";
674 | $fa-var-try: "\f195";
675 | $fa-var-tty: "\f1e4";
676 | $fa-var-tumblr: "\f173";
677 | $fa-var-tumblr-square: "\f174";
678 | $fa-var-turkish-lira: "\f195";
679 | $fa-var-tv: "\f26c";
680 | $fa-var-twitch: "\f1e8";
681 | $fa-var-twitter: "\f099";
682 | $fa-var-twitter-square: "\f081";
683 | $fa-var-umbrella: "\f0e9";
684 | $fa-var-underline: "\f0cd";
685 | $fa-var-undo: "\f0e2";
686 | $fa-var-universal-access: "\f29a";
687 | $fa-var-university: "\f19c";
688 | $fa-var-unlink: "\f127";
689 | $fa-var-unlock: "\f09c";
690 | $fa-var-unlock-alt: "\f13e";
691 | $fa-var-unsorted: "\f0dc";
692 | $fa-var-upload: "\f093";
693 | $fa-var-usb: "\f287";
694 | $fa-var-usd: "\f155";
695 | $fa-var-user: "\f007";
696 | $fa-var-user-md: "\f0f0";
697 | $fa-var-user-plus: "\f234";
698 | $fa-var-user-secret: "\f21b";
699 | $fa-var-user-times: "\f235";
700 | $fa-var-users: "\f0c0";
701 | $fa-var-venus: "\f221";
702 | $fa-var-venus-double: "\f226";
703 | $fa-var-venus-mars: "\f228";
704 | $fa-var-viacoin: "\f237";
705 | $fa-var-viadeo: "\f2a9";
706 | $fa-var-viadeo-square: "\f2aa";
707 | $fa-var-video-camera: "\f03d";
708 | $fa-var-vimeo: "\f27d";
709 | $fa-var-vimeo-square: "\f194";
710 | $fa-var-vine: "\f1ca";
711 | $fa-var-vk: "\f189";
712 | $fa-var-volume-control-phone: "\f2a0";
713 | $fa-var-volume-down: "\f027";
714 | $fa-var-volume-off: "\f026";
715 | $fa-var-volume-up: "\f028";
716 | $fa-var-warning: "\f071";
717 | $fa-var-wechat: "\f1d7";
718 | $fa-var-weibo: "\f18a";
719 | $fa-var-weixin: "\f1d7";
720 | $fa-var-whatsapp: "\f232";
721 | $fa-var-wheelchair: "\f193";
722 | $fa-var-wheelchair-alt: "\f29b";
723 | $fa-var-wifi: "\f1eb";
724 | $fa-var-wikipedia-w: "\f266";
725 | $fa-var-windows: "\f17a";
726 | $fa-var-won: "\f159";
727 | $fa-var-wordpress: "\f19a";
728 | $fa-var-wpbeginner: "\f297";
729 | $fa-var-wpforms: "\f298";
730 | $fa-var-wrench: "\f0ad";
731 | $fa-var-xing: "\f168";
732 | $fa-var-xing-square: "\f169";
733 | $fa-var-y-combinator: "\f23b";
734 | $fa-var-y-combinator-square: "\f1d4";
735 | $fa-var-yahoo: "\f19e";
736 | $fa-var-yc: "\f23b";
737 | $fa-var-yc-square: "\f1d4";
738 | $fa-var-yelp: "\f1e9";
739 | $fa-var-yen: "\f157";
740 | $fa-var-yoast: "\f2b1";
741 | $fa-var-youtube: "\f167";
742 | $fa-var-youtube-play: "\f16a";
743 | $fa-var-youtube-square: "\f166";
744 |
745 |
--------------------------------------------------------------------------------
/src/styles/font-awesome/_icons.scss:
--------------------------------------------------------------------------------
1 | /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
2 | readers do not read off random characters that represent icons */
3 |
4 | .#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
5 | .#{$fa-css-prefix}-music:before { content: $fa-var-music; }
6 | .#{$fa-css-prefix}-search:before { content: $fa-var-search; }
7 | .#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
8 | .#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
9 | .#{$fa-css-prefix}-star:before { content: $fa-var-star; }
10 | .#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
11 | .#{$fa-css-prefix}-user:before { content: $fa-var-user; }
12 | .#{$fa-css-prefix}-film:before { content: $fa-var-film; }
13 | .#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
14 | .#{$fa-css-prefix}-th:before { content: $fa-var-th; }
15 | .#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
16 | .#{$fa-css-prefix}-check:before { content: $fa-var-check; }
17 | .#{$fa-css-prefix}-remove:before,
18 | .#{$fa-css-prefix}-close:before,
19 | .#{$fa-css-prefix}-times:before { content: $fa-var-times; }
20 | .#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
21 | .#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
22 | .#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
23 | .#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
24 | .#{$fa-css-prefix}-gear:before,
25 | .#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
26 | .#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
27 | .#{$fa-css-prefix}-home:before { content: $fa-var-home; }
28 | .#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
29 | .#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
30 | .#{$fa-css-prefix}-road:before { content: $fa-var-road; }
31 | .#{$fa-css-prefix}-download:before { content: $fa-var-download; }
32 | .#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
33 | .#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
34 | .#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
35 | .#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
36 | .#{$fa-css-prefix}-rotate-right:before,
37 | .#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
38 | .#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
39 | .#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
40 | .#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
41 | .#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
42 | .#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
43 | .#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
44 | .#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
45 | .#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
46 | .#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
47 | .#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
48 | .#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
49 | .#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
50 | .#{$fa-css-prefix}-book:before { content: $fa-var-book; }
51 | .#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
52 | .#{$fa-css-prefix}-print:before { content: $fa-var-print; }
53 | .#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
54 | .#{$fa-css-prefix}-font:before { content: $fa-var-font; }
55 | .#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
56 | .#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
57 | .#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
58 | .#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
59 | .#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
60 | .#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
61 | .#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
62 | .#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
63 | .#{$fa-css-prefix}-list:before { content: $fa-var-list; }
64 | .#{$fa-css-prefix}-dedent:before,
65 | .#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
66 | .#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
67 | .#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
68 | .#{$fa-css-prefix}-photo:before,
69 | .#{$fa-css-prefix}-image:before,
70 | .#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
71 | .#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
72 | .#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
73 | .#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
74 | .#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
75 | .#{$fa-css-prefix}-edit:before,
76 | .#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
77 | .#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
78 | .#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
79 | .#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
80 | .#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
81 | .#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
82 | .#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
83 | .#{$fa-css-prefix}-play:before { content: $fa-var-play; }
84 | .#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
85 | .#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
86 | .#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
87 | .#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
88 | .#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
89 | .#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
90 | .#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
91 | .#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
92 | .#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
93 | .#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
94 | .#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
95 | .#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
96 | .#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
97 | .#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
98 | .#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
99 | .#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
100 | .#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
101 | .#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
102 | .#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
103 | .#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
104 | .#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
105 | .#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
106 | .#{$fa-css-prefix}-mail-forward:before,
107 | .#{$fa-css-prefix}-share:before { content: $fa-var-share; }
108 | .#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
109 | .#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
110 | .#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
111 | .#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
112 | .#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
113 | .#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
114 | .#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
115 | .#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
116 | .#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
117 | .#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
118 | .#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
119 | .#{$fa-css-prefix}-warning:before,
120 | .#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
121 | .#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
122 | .#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
123 | .#{$fa-css-prefix}-random:before { content: $fa-var-random; }
124 | .#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
125 | .#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
126 | .#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
127 | .#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
128 | .#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
129 | .#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
130 | .#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
131 | .#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
132 | .#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
133 | .#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
134 | .#{$fa-css-prefix}-bar-chart-o:before,
135 | .#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
136 | .#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
137 | .#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
138 | .#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
139 | .#{$fa-css-prefix}-key:before { content: $fa-var-key; }
140 | .#{$fa-css-prefix}-gears:before,
141 | .#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
142 | .#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
143 | .#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
144 | .#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
145 | .#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
146 | .#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
147 | .#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
148 | .#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
149 | .#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
150 | .#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
151 | .#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
152 | .#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
153 | .#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
154 | .#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
155 | .#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
156 | .#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
157 | .#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
158 | .#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
159 | .#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
160 | .#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
161 | .#{$fa-css-prefix}-facebook-f:before,
162 | .#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
163 | .#{$fa-css-prefix}-github:before { content: $fa-var-github; }
164 | .#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
165 | .#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
166 | .#{$fa-css-prefix}-feed:before,
167 | .#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
168 | .#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
169 | .#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
170 | .#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
171 | .#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
172 | .#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
173 | .#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
174 | .#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
175 | .#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
176 | .#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
177 | .#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
178 | .#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
179 | .#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
180 | .#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
181 | .#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
182 | .#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
183 | .#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
184 | .#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
185 | .#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
186 | .#{$fa-css-prefix}-group:before,
187 | .#{$fa-css-prefix}-users:before { content: $fa-var-users; }
188 | .#{$fa-css-prefix}-chain:before,
189 | .#{$fa-css-prefix}-link:before { content: $fa-var-link; }
190 | .#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
191 | .#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
192 | .#{$fa-css-prefix}-cut:before,
193 | .#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
194 | .#{$fa-css-prefix}-copy:before,
195 | .#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
196 | .#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
197 | .#{$fa-css-prefix}-save:before,
198 | .#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
199 | .#{$fa-css-prefix}-square:before { content: $fa-var-square; }
200 | .#{$fa-css-prefix}-navicon:before,
201 | .#{$fa-css-prefix}-reorder:before,
202 | .#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
203 | .#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
204 | .#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
205 | .#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
206 | .#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
207 | .#{$fa-css-prefix}-table:before { content: $fa-var-table; }
208 | .#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
209 | .#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
210 | .#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
211 | .#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
212 | .#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
213 | .#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
214 | .#{$fa-css-prefix}-money:before { content: $fa-var-money; }
215 | .#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
216 | .#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
217 | .#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
218 | .#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
219 | .#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
220 | .#{$fa-css-prefix}-unsorted:before,
221 | .#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
222 | .#{$fa-css-prefix}-sort-down:before,
223 | .#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
224 | .#{$fa-css-prefix}-sort-up:before,
225 | .#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
226 | .#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
227 | .#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
228 | .#{$fa-css-prefix}-rotate-left:before,
229 | .#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
230 | .#{$fa-css-prefix}-legal:before,
231 | .#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
232 | .#{$fa-css-prefix}-dashboard:before,
233 | .#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
234 | .#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
235 | .#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
236 | .#{$fa-css-prefix}-flash:before,
237 | .#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
238 | .#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
239 | .#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
240 | .#{$fa-css-prefix}-paste:before,
241 | .#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
242 | .#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
243 | .#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
244 | .#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
245 | .#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
246 | .#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
247 | .#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
248 | .#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
249 | .#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
250 | .#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
251 | .#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
252 | .#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
253 | .#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
254 | .#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
255 | .#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
256 | .#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
257 | .#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
258 | .#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
259 | .#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
260 | .#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
261 | .#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
262 | .#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
263 | .#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
264 | .#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
265 | .#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
266 | .#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
267 | .#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
268 | .#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
269 | .#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
270 | .#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
271 | .#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
272 | .#{$fa-css-prefix}-mobile-phone:before,
273 | .#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
274 | .#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
275 | .#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
276 | .#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
277 | .#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
278 | .#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
279 | .#{$fa-css-prefix}-mail-reply:before,
280 | .#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
281 | .#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
282 | .#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
283 | .#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
284 | .#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
285 | .#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
286 | .#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
287 | .#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
288 | .#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
289 | .#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
290 | .#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
291 | .#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
292 | .#{$fa-css-prefix}-code:before { content: $fa-var-code; }
293 | .#{$fa-css-prefix}-mail-reply-all:before,
294 | .#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
295 | .#{$fa-css-prefix}-star-half-empty:before,
296 | .#{$fa-css-prefix}-star-half-full:before,
297 | .#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
298 | .#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
299 | .#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
300 | .#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
301 | .#{$fa-css-prefix}-unlink:before,
302 | .#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
303 | .#{$fa-css-prefix}-question:before { content: $fa-var-question; }
304 | .#{$fa-css-prefix}-info:before { content: $fa-var-info; }
305 | .#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
306 | .#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
307 | .#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
308 | .#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
309 | .#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
310 | .#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
311 | .#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
312 | .#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
313 | .#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
314 | .#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
315 | .#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
316 | .#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
317 | .#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
318 | .#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
319 | .#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
320 | .#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
321 | .#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
322 | .#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
323 | .#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
324 | .#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
325 | .#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
326 | .#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
327 | .#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
328 | .#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
329 | .#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
330 | .#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
331 | .#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
332 | .#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
333 | .#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
334 | .#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
335 | .#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
336 | .#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
337 | .#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
338 | .#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
339 | .#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
340 | .#{$fa-css-prefix}-toggle-down:before,
341 | .#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
342 | .#{$fa-css-prefix}-toggle-up:before,
343 | .#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
344 | .#{$fa-css-prefix}-toggle-right:before,
345 | .#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
346 | .#{$fa-css-prefix}-euro:before,
347 | .#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
348 | .#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
349 | .#{$fa-css-prefix}-dollar:before,
350 | .#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
351 | .#{$fa-css-prefix}-rupee:before,
352 | .#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
353 | .#{$fa-css-prefix}-cny:before,
354 | .#{$fa-css-prefix}-rmb:before,
355 | .#{$fa-css-prefix}-yen:before,
356 | .#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
357 | .#{$fa-css-prefix}-ruble:before,
358 | .#{$fa-css-prefix}-rouble:before,
359 | .#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
360 | .#{$fa-css-prefix}-won:before,
361 | .#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
362 | .#{$fa-css-prefix}-bitcoin:before,
363 | .#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
364 | .#{$fa-css-prefix}-file:before { content: $fa-var-file; }
365 | .#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
366 | .#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
367 | .#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
368 | .#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
369 | .#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
370 | .#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
371 | .#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
372 | .#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
373 | .#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
374 | .#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
375 | .#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
376 | .#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
377 | .#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
378 | .#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
379 | .#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
380 | .#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
381 | .#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
382 | .#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
383 | .#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
384 | .#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
385 | .#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
386 | .#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
387 | .#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
388 | .#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
389 | .#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
390 | .#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
391 | .#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
392 | .#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
393 | .#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
394 | .#{$fa-css-prefix}-android:before { content: $fa-var-android; }
395 | .#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
396 | .#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
397 | .#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
398 | .#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
399 | .#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
400 | .#{$fa-css-prefix}-female:before { content: $fa-var-female; }
401 | .#{$fa-css-prefix}-male:before { content: $fa-var-male; }
402 | .#{$fa-css-prefix}-gittip:before,
403 | .#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
404 | .#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
405 | .#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
406 | .#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
407 | .#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
408 | .#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
409 | .#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
410 | .#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
411 | .#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
412 | .#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
413 | .#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
414 | .#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
415 | .#{$fa-css-prefix}-toggle-left:before,
416 | .#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
417 | .#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
418 | .#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
419 | .#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
420 | .#{$fa-css-prefix}-turkish-lira:before,
421 | .#{$fa-css-prefix}-try:before { content: $fa-var-try; }
422 | .#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
423 | .#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
424 | .#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
425 | .#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
426 | .#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
427 | .#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
428 | .#{$fa-css-prefix}-institution:before,
429 | .#{$fa-css-prefix}-bank:before,
430 | .#{$fa-css-prefix}-university:before { content: $fa-var-university; }
431 | .#{$fa-css-prefix}-mortar-board:before,
432 | .#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
433 | .#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
434 | .#{$fa-css-prefix}-google:before { content: $fa-var-google; }
435 | .#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
436 | .#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
437 | .#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
438 | .#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
439 | .#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
440 | .#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
441 | .#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
442 | .#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
443 | .#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
444 | .#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
445 | .#{$fa-css-prefix}-language:before { content: $fa-var-language; }
446 | .#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
447 | .#{$fa-css-prefix}-building:before { content: $fa-var-building; }
448 | .#{$fa-css-prefix}-child:before { content: $fa-var-child; }
449 | .#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
450 | .#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
451 | .#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
452 | .#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
453 | .#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
454 | .#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
455 | .#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
456 | .#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
457 | .#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
458 | .#{$fa-css-prefix}-automobile:before,
459 | .#{$fa-css-prefix}-car:before { content: $fa-var-car; }
460 | .#{$fa-css-prefix}-cab:before,
461 | .#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
462 | .#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
463 | .#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
464 | .#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
465 | .#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
466 | .#{$fa-css-prefix}-database:before { content: $fa-var-database; }
467 | .#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
468 | .#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
469 | .#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
470 | .#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
471 | .#{$fa-css-prefix}-file-photo-o:before,
472 | .#{$fa-css-prefix}-file-picture-o:before,
473 | .#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
474 | .#{$fa-css-prefix}-file-zip-o:before,
475 | .#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
476 | .#{$fa-css-prefix}-file-sound-o:before,
477 | .#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
478 | .#{$fa-css-prefix}-file-movie-o:before,
479 | .#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
480 | .#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
481 | .#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
482 | .#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
483 | .#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
484 | .#{$fa-css-prefix}-life-bouy:before,
485 | .#{$fa-css-prefix}-life-buoy:before,
486 | .#{$fa-css-prefix}-life-saver:before,
487 | .#{$fa-css-prefix}-support:before,
488 | .#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
489 | .#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
490 | .#{$fa-css-prefix}-ra:before,
491 | .#{$fa-css-prefix}-resistance:before,
492 | .#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
493 | .#{$fa-css-prefix}-ge:before,
494 | .#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
495 | .#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
496 | .#{$fa-css-prefix}-git:before { content: $fa-var-git; }
497 | .#{$fa-css-prefix}-y-combinator-square:before,
498 | .#{$fa-css-prefix}-yc-square:before,
499 | .#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
500 | .#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
501 | .#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
502 | .#{$fa-css-prefix}-wechat:before,
503 | .#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
504 | .#{$fa-css-prefix}-send:before,
505 | .#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
506 | .#{$fa-css-prefix}-send-o:before,
507 | .#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
508 | .#{$fa-css-prefix}-history:before { content: $fa-var-history; }
509 | .#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
510 | .#{$fa-css-prefix}-header:before { content: $fa-var-header; }
511 | .#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
512 | .#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
513 | .#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
514 | .#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
515 | .#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
516 | .#{$fa-css-prefix}-soccer-ball-o:before,
517 | .#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
518 | .#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
519 | .#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
520 | .#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
521 | .#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
522 | .#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
523 | .#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
524 | .#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
525 | .#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
526 | .#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
527 | .#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
528 | .#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
529 | .#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
530 | .#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
531 | .#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
532 | .#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
533 | .#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
534 | .#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
535 | .#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
536 | .#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
537 | .#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
538 | .#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
539 | .#{$fa-css-prefix}-at:before { content: $fa-var-at; }
540 | .#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
541 | .#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
542 | .#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
543 | .#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
544 | .#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
545 | .#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
546 | .#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
547 | .#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
548 | .#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
549 | .#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
550 | .#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
551 | .#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
552 | .#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
553 | .#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
554 | .#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
555 | .#{$fa-css-prefix}-shekel:before,
556 | .#{$fa-css-prefix}-sheqel:before,
557 | .#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
558 | .#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
559 | .#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
560 | .#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
561 | .#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
562 | .#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
563 | .#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
564 | .#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
565 | .#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
566 | .#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
567 | .#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
568 | .#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
569 | .#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
570 | .#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
571 | .#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
572 | .#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
573 | .#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
574 | .#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
575 | .#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
576 | .#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
577 | .#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
578 | .#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
579 | .#{$fa-css-prefix}-intersex:before,
580 | .#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
581 | .#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
582 | .#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
583 | .#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
584 | .#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
585 | .#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
586 | .#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
587 | .#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
588 | .#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
589 | .#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
590 | .#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
591 | .#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
592 | .#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
593 | .#{$fa-css-prefix}-server:before { content: $fa-var-server; }
594 | .#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
595 | .#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
596 | .#{$fa-css-prefix}-hotel:before,
597 | .#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
598 | .#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
599 | .#{$fa-css-prefix}-train:before { content: $fa-var-train; }
600 | .#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
601 | .#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
602 | .#{$fa-css-prefix}-yc:before,
603 | .#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
604 | .#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
605 | .#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
606 | .#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
607 | .#{$fa-css-prefix}-battery-4:before,
608 | .#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
609 | .#{$fa-css-prefix}-battery-3:before,
610 | .#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
611 | .#{$fa-css-prefix}-battery-2:before,
612 | .#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
613 | .#{$fa-css-prefix}-battery-1:before,
614 | .#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
615 | .#{$fa-css-prefix}-battery-0:before,
616 | .#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
617 | .#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
618 | .#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
619 | .#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
620 | .#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
621 | .#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
622 | .#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
623 | .#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
624 | .#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
625 | .#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
626 | .#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
627 | .#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
628 | .#{$fa-css-prefix}-hourglass-1:before,
629 | .#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
630 | .#{$fa-css-prefix}-hourglass-2:before,
631 | .#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
632 | .#{$fa-css-prefix}-hourglass-3:before,
633 | .#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
634 | .#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
635 | .#{$fa-css-prefix}-hand-grab-o:before,
636 | .#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
637 | .#{$fa-css-prefix}-hand-stop-o:before,
638 | .#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
639 | .#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
640 | .#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
641 | .#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
642 | .#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
643 | .#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
644 | .#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
645 | .#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
646 | .#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
647 | .#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
648 | .#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
649 | .#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
650 | .#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
651 | .#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
652 | .#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
653 | .#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
654 | .#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
655 | .#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
656 | .#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
657 | .#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
658 | .#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
659 | .#{$fa-css-prefix}-tv:before,
660 | .#{$fa-css-prefix}-television:before { content: $fa-var-television; }
661 | .#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
662 | .#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
663 | .#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
664 | .#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
665 | .#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
666 | .#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
667 | .#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
668 | .#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
669 | .#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
670 | .#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
671 | .#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
672 | .#{$fa-css-prefix}-map:before { content: $fa-var-map; }
673 | .#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
674 | .#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
675 | .#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
676 | .#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
677 | .#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
678 | .#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
679 | .#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
680 | .#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
681 | .#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
682 | .#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
683 | .#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
684 | .#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
685 | .#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
686 | .#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
687 | .#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
688 | .#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
689 | .#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
690 | .#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
691 | .#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
692 | .#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
693 | .#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
694 | .#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
695 | .#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
696 | .#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
697 | .#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
698 | .#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
699 | .#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
700 | .#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
701 | .#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
702 | .#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
703 | .#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
704 | .#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
705 | .#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
706 | .#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
707 | .#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
708 | .#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
709 | .#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
710 | .#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
711 | .#{$fa-css-prefix}-asl-interpreting:before,
712 | .#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
713 | .#{$fa-css-prefix}-deafness:before,
714 | .#{$fa-css-prefix}-hard-of-hearing:before,
715 | .#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
716 | .#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
717 | .#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
718 | .#{$fa-css-prefix}-signing:before,
719 | .#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
720 | .#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
721 | .#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
722 | .#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
723 | .#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
724 | .#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
725 | .#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
726 | .#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
727 | .#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
728 | .#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
729 | .#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
730 | .#{$fa-css-prefix}-google-plus-circle:before,
731 | .#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
732 | .#{$fa-css-prefix}-fa:before,
733 | .#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
734 |
--------------------------------------------------------------------------------