diff --git a/.babelrc b/.babelrc index 3554dc78e426ff..1bc508d70423c4 100644 --- a/.babelrc +++ b/.babelrc @@ -1,4 +1,7 @@ { "presets": ["es2015", "react", "stage-0"], - "plugins": ["babel-plugin-add-module-exports"] + "plugins": [ + "babel-plugin-add-module-exports", + "lodash" + ] } diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index 5914c6f0de62a6..00000000000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory" : "public/bower_components" -} diff --git a/.eslintrc b/.eslintrc index e435aa4148d3fc..ea51953e9ec811 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,262 +1,3 @@ { - "parserOption": { - "ecmaVersion": 6, - "ecmaFeatures": { - "jsx": true - } - }, - "env": { - "es6": true, - "browser": true, - "mocha": true, - "node": true - }, - "parser": "babel-eslint", - "plugins": [ - "react", - "import" - ], - "settings": { - "import/ignore": [ - "node_modules", - "\\.json$" - ], - "import/extensions": [ - ".js", - ".jsx" - ] - }, - "globals": { - "Promise": true, - "window": true, - "$": true, - "ga": true, - "jQuery": true, - "router": true - }, - "rules": { - "comma-dangle": 2, - "no-cond-assign": 2, - "no-console": 0, - "no-constant-condition": 2, - "no-control-regex": 2, - "no-debugger": 2, - "no-dupe-keys": 2, - "no-empty": 2, - "no-empty-character-class": 2, - "no-ex-assign": 2, - "no-extra-boolean-cast": 2, - "no-extra-parens": 0, - "no-extra-semi": 2, - "no-func-assign": 2, - "no-inner-declarations": 2, - "no-invalid-regexp": 2, - "no-irregular-whitespace": 2, - "no-negated-in-lhs": 2, - "no-obj-calls": 2, - "no-regex-spaces": 2, - "no-reserved-keys": 0, - "no-sparse-arrays": 2, - "no-unreachable": 2, - "use-isnan": 2, - "valid-jsdoc": 2, - "valid-typeof": 2, - - "block-scoped-var": 0, - "complexity": 0, - "consistent-return": 2, - "curly": 2, - "default-case": 2, - "dot-notation": 0, - "eqeqeq": 2, - "guard-for-in": 2, - "no-alert": 2, - "no-caller": 2, - "no-div-regex": 2, - "no-else-return": 0, - "no-eq-null": 2, - "no-eval": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-fallthrough": 2, - "no-floating-decimal": 2, - "no-implied-eval": 2, - "no-iterator": 2, - "no-labels": 2, - "no-lone-blocks": 2, - "no-loop-func": 2, - "no-multi-spaces": 2, - "no-multi-str": 2, - "no-native-reassign": 2, - "no-new": 2, - "no-new-func": 2, - "no-new-wrappers": 2, - "no-octal": 2, - "no-octal-escape": 2, - "no-process-env": 0, - "no-proto": 2, - "no-redeclare": 2, - "no-return-assign": 2, - "no-script-url": 2, - "no-self-compare": 2, - "no-sequences": 2, - "no-unused-expressions": 2, - "no-void": 2, - "no-warning-comments": [ - 2, - { - "terms": [ - "fixme" - ], - "location": "start" - } - ], - "no-with": 2, - "radix": 2, - "vars-on-top": 0, - "wrap-iife": [2, "any"], - "yoda": 0, - - "strict": 0, - - "no-catch-shadow": 2, - "no-delete-var": 2, - "no-label-var": 2, - "no-shadow": 0, - "no-shadow-restricted-names": 2, - "no-undef": 2, - "no-undef-init": 2, - "no-undefined": 2, - "no-unused-vars": 2, - "no-use-before-define": 0, - - "handle-callback-err": 2, - "no-mixed-requires": 0, - "no-new-require": 2, - "no-path-concat": 2, - "no-process-exit": 2, - "no-restricted-modules": 0, - "no-sync": 0, - - "brace-style": [ - 2, - "1tbs", - { "allowSingleLine": true } - ], - "camelcase": 2, - "comma-spacing": [ - 2, - { - "before": false, - "after": true - } - ], - "comma-style": [ - 2, "last" - ], - "consistent-this": 0, - "eol-last": 2, - "func-names": 0, - "func-style": 0, - "key-spacing": [ - 2, - { - "beforeColon": false, - "afterColon": true - } - ], - "max-nested-callbacks": 0, - "new-cap": 0, - "new-parens": 2, - "no-array-constructor": 2, - "no-inline-comments": 2, - "no-lonely-if": 2, - "no-mixed-spaces-and-tabs": 2, - "no-multiple-empty-lines": [ - 2, - { "max": 2 } - ], - "no-nested-ternary": 2, - "no-new-object": 2, - "semi-spacing": [2, { "before": false, "after": true }], - "no-spaced-func": 2, - "no-ternary": 0, - "no-trailing-spaces": 2, - "no-underscore-dangle": 0, - "one-var": 0, - "operator-assignment": 0, - "padded-blocks": 0, - "quote-props": [2, "as-needed"], - "quotes": [ - 2, - "single", - "avoid-escape" - ], - "semi": [ - 2, - "always" - ], - "sort-vars": 0, - "keyword-spacing": [ 2 ], - "space-before-function-paren": [ - 2, - "never" - ], - "space-before-blocks": [ - 2, - "always" - ], - "space-in-brackets": 0, - "space-in-parens": 0, - "space-infix-ops": 2, - "space-unary-ops": [ - 2, - { - "words": true, - "nonwords": false - } - ], - "spaced-comment": [ - 2, - "always", - { "exceptions": ["-"] } - ], - "wrap-regex": 2, - - "max-depth": 0, - "max-len": [ - 2, - 80, - 2 - ], - "max-params": 0, - "max-statements": 0, - "no-bitwise": 2, - "no-plusplus": 0, - - "jsx-quotes": [2, "prefer-single"], - "react/display-name": 2, - "react/jsx-boolean-value": [2, "always"], - "react/jsx-no-undef": 2, - "react/jsx-sort-props": [2, { "ignoreCase": true }], - "react/jsx-uses-react": 2, - "react/jsx-uses-vars": 2, - "react/no-did-mount-set-state": 2, - "react/no-did-update-set-state": 2, - "react/no-multi-comp": [2, { "ignoreStateless": true } ], - "react/prop-types": 2, - "react/react-in-jsx-scope": 2, - "react/self-closing-comp": 2, - "react/wrap-multilines": 2, - "react/jsx-closing-bracket-location": [ 2, { "selfClosing": "line-aligned", "nonEmpty": "props-aligned" } ], - - "import/no-unresolved": 2, - "import/named": 2, - "import/namespace": 2, - "import/default": 2, - "import/export": 2, - "import/imports-first": 2, - "import/no-duplicates": 2, - "import/newline-after-import": 2 - } + "extends": "freecodecamp" } diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 798213cf418584..ecf63a8ebd7736 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,8 +1,11 @@ - + + + + #### Challenge Name @@ -21,9 +24,9 @@ #### Your Code ```js - - - + + + ``` #### Screenshot diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 98abfe73b25e99..380d3f4e58014a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,17 +1,17 @@ - + - - + + #### Pre-Submission Checklist -- [ ] Your pull request targets the `staging` branch of FreeCodeCamp. +- [ ] Your pull request targets the `staging` branch of freeCodeCamp. - [ ] Branch starts with either `fix/`, `feature/`, or `translate/` (e.g. `fix/signin-issue`) -- [ ] You have only one commit (if not, [squash](http://forum.freecodecamp.com/t/how-to-squash-multiple-commits-into-one-with-git/13231) them into one commit). -- [ ] All new and existing tests pass the command `npm run test-challenges`. Use `git commit --amend` to amend any fixes. +- [ ] You have only one commit (if not, [squash](http://forum.freecodecamp.org/t/how-to-squash-multiple-commits-into-one-with-git/13231) them into one commit). +- [ ] All new and existing tests pass the command `npm test`. Use `git commit --amend` to amend any fixes. #### Type of Change @@ -22,9 +22,11 @@ #### Checklist: - + - [ ] Tested changes locally. -- [ ] Closes currently open issue (replace XXXX with an issue no): Closes #XXXX +- [ ] Addressed currently open issue (replace XXXXX with an issue no in next line) + +Closes #XXXXX #### Description diff --git a/.gitignore b/.gitignore index b6cc283154338a..dd1401f7cd2f17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ lib-cov +*~ *.seed *.log *.csv @@ -17,6 +18,7 @@ logs results tmp .ds_store +.vscode npm-debug.log node_modules @@ -53,3 +55,4 @@ public/js/frame-runner* public/css/main* server/rev-manifest.json +google-credentials.json diff --git a/.snyk b/.snyk index 3a43aa6d9d2f4c..08e6b0f2855ebd 100644 --- a/.snyk +++ b/.snyk @@ -1,5 +1,7 @@ -version: v1.5.0 +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.7.1 ignore: {} +# patches apply the minimum changes required to fix a vulnerability patch: 'npm:marked:20150520': - gulp-notify > node-notifier > cli-usage > marked: @@ -49,9 +51,34 @@ patch: patched: '2016-09-03T18:30:05.313Z' - loopback > loopback-connector-remote > strong-remoting > strong-globalize > fs-sync > glob > minimatch: patched: '2016-09-03T18:30:05.313Z' + - loopback > strong-remoting > loopback-phase > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback-component-passport > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback > loopback-connector-remote > loopback-datasource-juggler > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback > loopback-phase > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback-boot > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback > loopback-connector-remote > strong-remoting > loopback-phase > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback > strong-remoting > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - loopback > loopback-connector-remote > strong-remoting > strong-globalize > fs-sync > glob > minimatch: + patched: '2016-09-20T18:38:48.774Z' + - jsonlint-cli > minimatch: + patched: '2016-10-27T21:56:34.219Z' 'npm:uglify-js:20151024': - jade > transformers > uglify-js: patched: '2016-07-29T23:00:15.905Z' + - jade > transformers > uglify-js: + patched: '2016-09-20T18:38:48.774Z' 'npm:uglify-js:20150824': - jade > transformers > uglify-js: patched: '2016-07-29T23:00:15.905Z' + 'npm:ms:20170412': + - compression > debug > ms: + patched: '2017-05-25T00:47:03.990Z' diff --git a/.travis.yml b/.travis.yml index d1fdb2051578c0..708ec478f0caf3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,7 @@ language: node_js node_js: - - '4.2.1' - -before_install: if [[ `npm -v` != 3* ]]; then npm i -g npm@3; fi + - '8' cache: directories: diff --git a/.varci.yml b/.varci.yml deleted file mode 100644 index f173bd5759d74f..00000000000000 --- a/.varci.yml +++ /dev/null @@ -1,22 +0,0 @@ -ruleset: - label_and_comment_help_questions: - name: "Label & comment on issues with help in title or description" - events: [ issues ] - label: question - when: - - title matches "/help/i" or body matches "/help/i" - - action = "opened" or action = "reopened" - comment: > - Hi @{{ user.login }} - - - The issue tracker is for reporting bugs only. If this is a request - for help with a challenge, please use the [help chat room](https://gitter.im/FreeCodeCamp/Help) - or try looking through the [forum](http://forum.freecodecamp.com/c/free-code-camp) for help - with a specific challenge. - - - If this is the case, please close this issue. - - - Happy Coding. diff --git a/.vcmrc b/.vcmrc new file mode 100644 index 00000000000000..1111a9df8500a7 --- /dev/null +++ b/.vcmrc @@ -0,0 +1,15 @@ +{ + "types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"], + "scope": { + "required": false, + "allowed": ["*"], + "validate": false, + "multiple": true + }, + "warnOnFail": false, + "maxSubjectLength": 100, + "subjectPattern": ".+", + "subjectPatternErrorMsg": "subject does not match subject pattern!", + "helpMessage": "\nPlease use conventional commit messages.\nLearn more at: http://conventionalcommits.org/,\nfor additional information check CONTRIBUTING guidelines of this repo.\n\n Alternatively You can use inbuilt command: \"npm run commit\" right now.", + "autoFix": false +} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000000..b4454e13acd3bf --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at team@freecodecamp.org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52bc961beac906..27af9b4376acc8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,190 +1,317 @@ # Contributor's Guide -## Table of Contents +We welcome pull requests from freeCodeCamp campers (our students) and seasoned JavaScript developers alike! Follow these steps to contribute: -- [I want to help!](#i-want-to-help) -- [Contribution Guidelines](#contribution-guidelines) -- [Prerequisites](#prerequisites) -- [Getting Started](#getting-started) -- [Linting Setup](#linting-setup) -- [Found a bug?](#found-a-bug) -- [Creating Pull Requests](#creating-pull-requests) -- [Common Steps](#common-steps) -- [Next Steps](#next-steps) +1. Find an issue that needs assistance by searching for the [Help Wanted](https://github.com/freeCodeCamp/freeCodeCamp/labels/help%20wanted) tag. -### I want to help! +2. Let us know you are working on it by posting a comment on the issue. -We welcome pull requests from Free Code Camp campers (our students) and seasoned -JavaScript developers alike! Follow these steps to contribute: +3. Follow the [Contribution Guidelines](#contribution-guidelines) to start working on the issue. -1. Find an issue that needs assistance by searching for the [Help Wanted](https://github.com/FreeCodeCamp/FreeCodeCamp/labels/help%20wanted) tag. +Remember to feel free to ask for help in our [Contributors](https://gitter.im/FreeCodeCamp/Contributors) Gitter room. -2. Let us know you are working on it by posting a comment on the issue. +Working on your first Pull Request? You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) -3. Feel free to ask for help in our [Help - Contributors](https://gitter.im/FreeCodeCamp/HelpContributors) Gitter room. +###### If you've found a bug that is not on the board, [follow these steps](README.md#found-a-bug). -If you've found a bug that is not on the board, [follow these steps](#found-a-bug). +-------------------------------------------------------------------------------- -### Contribution Guidelines +## Contribution Guidelines -1. Fork the project: [How To Fork And Maintain a Local Instance of Free Code - Camp](http://forum.freecodecamp.com/t/how-to-fork-and-maintain-a-local-instance-of-free-code-camp/19116) +- [Prerequisites](#prerequisites) +- [Forking The Project](#forking-the-project) +- [Create A Branch](#create-a-branch) +- [Setup Linting](#setup-linting) +- [Setup freeCodeCamp](#setup-freecodecamp) +- [Make Changes](#make-changes) +- [Run The Test Suite](#run-the-test-suite) +- [Squash Your Commits](#squash-your-commits) +- [Commit Message](#commit-message) +- [Creating A Pull Request](#creating-a-pull-request) +- [Common Steps](#common-steps) +- [How We Review and Merge Pull Requests](#how-we-review-and-merge-pull-requests) +- [How We Close Stale Issues](#how-we-close-stale-issues) +- [Next Steps](#next-steps) +- [Other resources](#other-resources) -2. Create a branch specific to the issue or feature you are working on. Push - your work to that branch. ([Need help with - branching?](https://github.com/Kunena/Kunena-Forum/wiki/Create-a-new-branch-with-git-and-manage-branches)) +### Prerequisites -3. Name the branch something like `fix/xxx` or `feature/xxx` where `xxx` is a - short description of the changes or feature you are attempting to add. For - example `fix/email-login` would be a branch where I fix something specific - to email login. +| Prerequisite | Version | +| ------------------------------------------- | ------- | +| [MongoDB Community Server](https://docs.mongodb.com/manual/administration/install-community/) | `~ ^3` | +| [MailHog](https://github.com/mailhog/MailHog) | `~ ^1` | +| [Node.js](http://nodejs.org) | `~ ^8.9.3` | +| npm (comes with Node) | `~ ^5` | -4. [Set up Linting](#linting-setup) to run as you make changes. +> _Updating to the latest releases is recommended_. -5. When you are ready to share your code, run the test suite `npm test` and - ensure all tests pass. For Windows contributors, skip the jsonlint pretest - run by using `npm run test-challenges`, as jsonlint will always fail on - Windows, given the wildcard parameters. +If Node or MongoDB is already installed in your machine, run the following commands to validate the versions: -6. Squash your Commits. Ref: [rebasing](http://forum.freecodecamp.com/t/how-to-use-git-rebase/13226) +```shell +node -v +mongo --version +``` -7. Submit a [pull - request](http://forum.freecodecamp.com/t/how-to-make-a-pull-request-on-free-code-camp/19114) - from your branch to Free Code Camp's `staging` branch. [Travis - CI](https://travis-ci.org/FreeCodeCamp/FreeCodeCamp) will then take your - code and run `npm test`. Make sure this passes, then we'll do a quick code - review and give you feedback, then iterate from there. +To check your MongoDB version on Windows, you have to locate the installation directory. It is probably located at something like `C:\Program Files\MongoDB\Server\3.4\` where 3.4 is your version number. -### Prerequisites +If your versions are lower than the prerequisite versions, you should update. -| Prerequisite | Version | -| ------------------------------------------- | ------- | -| [MongoDB](http://www.mongodb.org/downloads) | `~ ^3` | -| [Node.js](http://nodejs.org) | `~ ^4` | -| npm (comes with Node) | `~ ^2` | +Platform-specific guides to setting up a development environment: +- [How to clone and setup the freeCodeCamp website on a Windows pc](https://forum.freecodecamp.org/t/how-to-clone-and-setup-the-free-code-camp-website-on-a-windows-pc/19366) +- [How to Clone and Setup the freeCodeCamp Website on a Mac](https://forum.freecodecamp.org/t/how-to-clone-and-setup-the-freecodecamp-website-on-a-mac/78450) -> _Updating to the latest releases is recommended_. +### Forking The Project -### Getting Started +#### Setting Up Your System -Note: If this is your first time working with a node-gyp dependent module, -please follow the [node-gyp installation -guide](https://github.com/nodejs/node-gyp#installation) to ensure a working npm -build. +1. Install [Git](https://git-scm.com/) or your favorite Git client. +2. (Optional) [Setup an SSH Key](https://help.github.com/articles/generating-an-ssh-key/) for GitHub. +3. Create a parent projects directory on your system. For this guide, it will be assumed that it is `/mean/` -The easiest way to get started is to clone the repository: +#### Forking freeCodeCamp -```bash -# Get the latest snapshot -git clone --depth=1 https://github.com/freecodecamp/freecodecamp.git freecodecamp +1. Go to the top level freeCodeCamp repository: +2. Click the "Fork" Button in the upper right hand corner of the interface ([More Details Here](https://help.github.com/articles/fork-a-repo/)) +3. After the repository has been forked, you will be taken to your copy of the FCC repo at `yourUsername/freeCodeCamp` -# Change directory -cd freecodecamp +#### Cloning Your Fork -# Install NPM dependencies -npm install +1. Open a Terminal / Command Line / Bash Shell in your projects directory (_i.e.: `/yourprojectdirectory/`_) +2. Clone your fork of freeCodeCamp + +```shell +$ git clone https://github.com/yourUsername/freeCodeCamp.git +``` + +##### (make sure to replace `yourUsername` with your GitHub Username) -# Install Gulp globally -npm install -g gulp +This will download the entire FCC repo to your projects directory. -# Install Bower globally -npm install -g bower +#### Setup Your Upstream + +1. Change directory to the new freeCodeCamp directory (`cd freeCodeCamp`) +2. Add a remote to the official FCC repo: + +```shell +$ git remote add upstream https://github.com/freeCodeCamp/freeCodeCamp.git +``` + +Congratulations, you now have a local copy of the FCC repo! + +#### Maintaining Your Fork + +Now that you have a copy of your fork, there is work you will need to do to keep it current. + +##### **Rebasing from Upstream** + +Do this prior to every time you create a branch for a PR: + +1. Make sure you are on the `staging` branch + +```shell +$ git status +On branch staging +Your branch is up-to-date with 'origin/staging'. +``` +If your aren't on `staging`, resolve outstanding files / commits and checkout the `staging` branch -# Install Bower dependencies -bower install +```shell +$ git checkout staging ``` -_Private Environment Variables (API Keys)_ +2. Do a pull with rebase against `upstream` + +```shell +$ git pull --rebase upstream staging +``` + +This will pull down all of the changes to the official staging branch, without making an additional commit in your local repo. + +3. (_Optional_) Force push your updated staging branch to your GitHub fork + +```shell +$ git push origin staging --force +``` + +This will overwrite the staging branch of your fork. + +### Create A Branch + +Before you start working, you will need to create a separate branch specific to the issue / feature you're working on. You will push your work to this branch. + +#### Naming Your Branch + +Name the branch something like `fix/xxx` or `feature/xxx` where `xxx` is a short description of the changes or feature you are attempting to add. For example `fix/email-login` would be a branch where you fix something specific to email login. + +#### Adding Your Branch + +To create a branch on your local machine (and switch to this branch): + +```shell +$ git checkout -b [name_of_your_new_branch] +``` + +and to push to GitHub: + +```shell +$ git push origin [name_of_your_new_branch] +``` + +##### If you need more help with branching, take a look at _[this](https://github.com/Kunena/Kunena-Forum/wiki/Create-a-new-branch-with-git-and-manage-branches)_. + +### Setup Linting + +You should have [ESLint running in your editor](http://eslint.org/docs/user-guide/integrations.html), and it will highlight anything doesn't conform to [freeCodeCamp's JavaScript Style Guide](http://forum.freecodecamp.org/t/free-code-camp-javascript-style-guide/19121) (you can find a summary of those rules [here](https://github.com/freeCodeCamp/freeCodeCamp/blob/staging/.eslintrc)). + +> Please do not ignore any linting errors, as they are meant to **help** you and to ensure a clean and simple code base. + + +### Setup freeCodeCamp +Once you have freeCodeCamp cloned, before you start the application, you first need to install all of the dependencies: + +```bash +# Install NPM dependencies +npm install + +``` + +Then you need to add the private environment variables (API Keys): ```bash # Create a copy of the "sample.env" and name it as ".env". # Populate it with the necessary API keys and secrets: cp sample.env .env ``` +Then edit the `.env` file and modify the API keys only for services that you will use. + +Note: Not all keys are required, to run the app locally, however `MONGOHQ_URL` is the most important one. Unless you have MongoDB running in a setup different than the defaults, the URL in the sample.env should work fine. + +You can leave the other keys as they are. Keep in mind if you want to use more services you'll have to get your own API keys for those services and edit those entries accordingly in the .env file. + +Next you should setup MailHog, a local SMTP mail server that will catch all the outgoing freeCodeCamp messages generated locally. How you start up MailHog is dependent upon your OS. + +Here is how to set up MailHog on macOS with [Homebrew](https://brew.sh/): + +```bash +brew install mailhog +brew services start mailhog +``` + +Here is how to set up MailHog on Windows: -Edit your `.env` file and modify the API keys only for services that you will -use. +Download the latest MailHog version from [MailHog's official repository](https://github.com/mailhog/MailHog/blob/master/docs/RELEASES.md). Click on the link for your Windows version (32 or 64 bit) and .exe file will be downloaded to your computer. -Note : Not all keys are required, to run the app locally, however `MONGOHQ_URL` -is the most important one. Unless you have MongoDB running in a setup different -than the defaults, the URL in the `sample.env` should work fine. +Once it finishes downloading, click on the file. You will probably get a Windows firewall notification where you will have to allow access to MailHog. Once you do, a standard Windows command line prompt will open with MailHog already running. -You can leave the other keys as they are. Keep in mind if you want to use more -services you'll have to get your own API keys for those services and edit those -entries accordingly in the `.env` file. +If you want to close MailHog, simply close the command prompt. To run it again, click on the same .exe file, there is no need to download a new one. + +To access your MailHog inbox, open your browser and navigate to [http://localhost:8025](http://localhost:8025). For any other questions related to MailHog or for instructions on custom configurations, check out the [MailHog](https://github.com/mailhog/MailHog) repository. + +Now you will need to start MongoDB, and then seed the database, then you can start the application: ```bash # Start the mongo server in a separate terminal +# On OS X: mongod -# Initialize Free Code Camp +# If you are using Windows, you have to instead specify the full path to the mongod binary +# Make sure to replace 3.4 with the version you have installed +"C:\Program Files\MongoDB\Server\3.4\bin\mongod" + +# Initialize freeCodeCamp # This will seed the database for the first time. # This command should only be run once. npm run only-once # start the application -gulp +npm run develop ``` Now navigate to your browser and open -. If the app loads, -congratulations – you're all set. Otherwise, let us know by opening a GitHub -issue and with your error. +. If the app loads, +congratulations – you're all set. Otherwise, let us know by asking in the [Contributors chat room](https://gitter.im/FreeCodeCamp/Contributors) on Gitter. There also might be an error in the console of your browser or in Bash / Terminal / Command Line that will help identify the problem. If the app launches but you are encountering errors with the UI itself, for example if fonts are not being loaded or if the code editor is not displaying properly, you may try the following: -### Linting Setup +```bash +# Remove all installed node modules +rm -rf node_modules -You should have [ESLint running in your -editor](http://eslint.org/docs/user-guide/integrations.html), and it will -highlight anything doesn't conform to [Free Code Camp's JavaScript Style -Guide](http://forum.freecodecamp.com/t/free-code-camp-javascript-style-guide/19121) -(you can find a summary of those rules -[here](https://github.com/FreeCodeCamp/FreeCodeCamp/blob/staging/.eslintrc). -Please do not ignore any linting errors, as they are meant to **help** you and -to ensure a clean and simple code base. Make sure none of your JavaScript is -longer than 80 characters per line. The reason we enforce this is because one -of our dependent NPM modules, [jsonlint](https://github.com/zaach/jsonlint), -does not fully support wildcard paths in Windows. +# Reinstall npm packages +npm install -### Found a bug? +# Seed the database (optional) +node seed -Do not file an issue until you have followed these steps: +# Re-start the application +npm run develop +``` -1. Read [Help I've Found a - Bug](http://forum.freecodecamp.com/t/how-to-report-a-bug/19543) - wiki page and follow the instructions there. +### Make Changes +This bit is up to you! -2. Asked for confirmation in the appropriate [Help Room](http://forum.freecodecamp.com/t/free-code-camp-official-chat-rooms/19390/2) +#### How to find the code in the freeCodeCamp codebase to fix/edit? -3. Please _do not_ open an issue without a 3rd party confirmation of your - problem. +The best way to find out any code you wish to change/add or remove is using +the GitHub search bar at the top of the repository page. For example, you could +search for a challenge name and the results will display all the files along +with line numbers. Then you can proceed to the files and verify this is the area +that you were looking forward to edit. Always feel free to reach out to the chat +room when you are not certain of any thing specific in the code. -### Creating Pull Requests +#### Changes to the seed files +If you made changes to any file in the `/seed` directory, you need to run +```shell +$ node seed +``` +in order to see the changes. -#### What is a Pull Request? +### Run The Test Suite +When you're ready to share your code, run the test suite: -A pull request (PR) is a method of submitting proposed changes to the Free Code -Camp Repo (or any Repo, for that matter). You will make changes to copies of the -files which make up Free Code Camp in a personal fork, then apply to have them -accepted by Free Code Camp proper. +```shell +$ npm test +``` -#### Need Help? +and ensure all tests pass. -Free Code Camp Issue Mods and staff are on hand to assist with Pull Request -related issues on our Help Contributors Chat Room +### Squash Your Commits +When you make a pull request, all of your changes need to be in one commit. -#### How to find the code in the Free Code Camp codebase to fix/edit? +If you have made more than one commit, then you will need to _squash_ your commits. -The best way to find out any code you wish to change/add or remove is using -the GitHub search bar at the top of the repository page. For example, you could -search for a challenge name and the results will display all the files along -with line numbers. Then you can proceed to the files and verify this is the area -that you were looking forward to edit. Always feel free to reach out to the chat -room when you are not certain of any thing specific in the code. +To do this, see [Squashing Your Commits](http://forum.freecodecamp.org/t/how-to-squash-multiple-commits-into-one-with-git/13231). + +### Commit Message +When you commit your changes, please use conventional commit messages. + +The commit message should be structured as follows: +``` +[optional scope]: + +[optional body] + +[optional footer] +``` +For help writing your commit message, execute `npm run commit` from the command line and the [commitizen](http://commitizen.github.io/cz-cli/) CLI tool will assist you in creating a conventional commit message. + +Learn more at [Conventional Commits](http://conventionalcommits.org). + +### Creating A Pull Request + +#### What is a Pull Request? + +A pull request (PR) is a method of submitting proposed changes to the freeCodeCamp +Repo (or any Repo, for that matter). You will make changes to copies of the +files which make up freeCodeCamp in a personal fork, then apply to have them +accepted by freeCodeCamp proper. + +#### Need Help? + +freeCodeCamp Issue Mods and staff are on hand to assist with Pull Request +related issues in our [Contributors chat room](https://gitter.im/FreeCodeCamp/Contributors). #### Important: ALWAYS EDIT ON A BRANCH -Take away only one thing from this document, it should be this: Never, **EVER** +Take away only one thing from this document: Never, **EVER** make edits to the `staging` branch. ALWAYS make a new branch BEFORE you edit files. This is critical, because if your PR is not accepted, your copy of staging will be forever sullied and the only way to fix it is to delete your @@ -192,15 +319,15 @@ fork and re-fork. #### Methods -There are two methods of creating a pull request for Free Code Camp: +There are two methods of creating a pull request for freeCodeCamp: +- Editing files on a local clone (recommended) - Editing files via the GitHub Interface -- Editing files on a local clone ##### Method 1: Editing via your Local Fork _(Recommended)_ -This is the recommended method. Read about How to Setup and Maintain a Local -Instance of Free Code Camp. +This is the recommended method. Read about [How to Setup and Maintain a Local +Instance of freeCodeCamp](#maintaining-your-fork). 1. Perform the maintenance step of rebasing `staging`. 2. Ensure you are on the `staging` branch using `git status`: @@ -229,13 +356,22 @@ nothing to commit, working directory clean add .` to add all unstaged files. Take care, though, because you can accidentally add files you don't want added. Review your `git status` first. -6. Commit your edits: `git commit -m "Brief Description of Commit"` +6. Commit your edits (follow any one of the below methods): + + a. Using the inbuilt script (_recommended_): + - We have a [tool](https://commitizen.github.io/cz-cli/) that helps you to make standard commit messages. Simply execute `npm run commit` after you have added the necessary files as mentioned in the step earlier. + + b. Using Commitizen CLI: + - If you are already using [commitizen](http://commitizen.github.io/cz-cli/), simply doing a `git cz` works as expected too! 7. Squash your commits, if there are more than one. -8. Push your commits to your GitHub Fork: `git push -u origin branch/name-here` +8. If you would want to add/remove changes to previous commit simply add the files as in Step 5 earlier, + and use `git commit --amend` or `git commit --amend --no-edit` (for keeping the same commit message). + +9. Push your commits to your GitHub Fork: `git push -u origin branch/name-here` -9. Go to [Common Steps](#common-steps) +10. Go to [Common Steps](#common-steps) ##### Method 2: Editing via the GitHub Interface @@ -244,7 +380,7 @@ possible to update your fork via GitHub's interface without deleting and recreating your fork. Read the [Wiki -article](http://forum.freecodecamp.com/t/how-to-make-a-pull-request-on-free-code-camp/19114) +article](http://forum.freecodecamp.org/t/how-to-make-a-pull-request-on-free-code-camp/19114) for further information ### Common Steps @@ -256,13 +392,13 @@ for further information branch. 3. Submit a [pull - request](http://forum.freecodecamp.com/t/how-to-contribute-via-a-pull-request/19368) - from your branch to Free Code Camp's `staging` branch. + request](http://forum.freecodecamp.org/t/how-to-contribute-via-a-pull-request/19368) + from your branch to freeCodeCamp's `staging` branch. 4. The title (also called the subject) of your PR should be descriptive of your changes and succinctly indicates what is being fixed. - - **Do not add the issue number in the PR title**. + - **Do not add the issue number in the PR title or commit message.** - Examples: `Add Test Cases to Bonfire Drop It` `Correct typo in Waypoint Size Your Images` @@ -270,13 +406,32 @@ for further information 5. In the body of your PR include a more detailed summary of the changes you made and why. - - If the PR is meant to fix an existing bug/issue, then, at the end of + - If the PR is meant to fix an existing bug/issue then, at the end of your PR's description, append the keyword `closes` and #xxxx (where xxxx is the issue number). Example: `closes #1337`. This tells GitHub to close the existing issue, if the PR is merged. 6. Indicate if you have tested on a local copy of the site or not. + +### How We Review and Merge Pull Requests + +freeCodeCamp has a team of volunteer Issue Moderators. These Issue Moderators routinely go through open pull requests in a process called [Quality Assurance](https://en.wikipedia.org/wiki/Quality_assurance) (QA). + +1. If an Issue Moderator QA's a pull request and confirms that the new code does what it is supposed without seeming to introduce any new bugs, they will comment "LGTM" which means "Looks good to me." + +2. Another Issue Moderator will QA the same pull request. Once they have also confirmed that the new code does what it is supposed to without seeming to introduce any new bugs, they will merge the pull request. + +If you would like to apply to join our Issue Moderator team - which is a Core Team position - message [@BerkeleyTrue](https://gitter.im/berkeleytrue) with links to 5 of your pull requests that have been accepted and 5 issues where you have helped someone else through commenting or QA'ing. + + +### How We Close Stale Issues + +We will close any issues or pull requests that have been inactive for more than 15 days, except those that match the following criteria: +- bugs that are confirmed +- pull requests that are waiting on other pull requests to be merged +- features that are a part of a GitHub project + ### Next Steps #### If your PR is accepted @@ -305,23 +460,26 @@ Be sure to post in the PR conversation that you have made the requested changes. ### Other resources +- [Style Guide for freeCodeCamp + Challenges](https://github.com/freeCodeCamp/freeCodeCamp/blob/staging/seed/challenge-style-guide.md) + - [Searching for Your Issue on - GitHub](http://forum.freecodecamp.com/t/searching-for-existing-issues/19139) + GitHub](http://forum.freecodecamp.org/t/searching-for-existing-issues/19139) - [Creating a New GitHub - Issue](http://forum.freecodecamp.com/t/creating-a-new-github-issue/18392) + Issue](http://forum.freecodecamp.org/t/creating-a-new-github-issue/18392) - [Select Issues for Contributing Using - Labels](http://forum.freecodecamp.com/t/free-code-camp-issue-labels/19556) + Labels](http://forum.freecodecamp.org/t/free-code-camp-issue-labels/19556) -- [How to clone the FreeCodeCamp website on a Windows - pc](http://forum.freecodecamp.com/t/how-to-clone-and-setup-the-free-code-camp-website-on-a-windows-pc/19366) +- [How to clone the freeCodeCamp website on a Windows + pc](http://forum.freecodecamp.org/t/how-to-clone-and-setup-the-free-code-camp-website-on-a-windows-pc/19366) - [How to log in to your local FCC site - using - GitHub](http://forum.freecodecamp.com/t/how-to-log-in-to-your-local-instance-of-free-code-camp/19552) + GitHub](http://forum.freecodecamp.org/t/how-to-log-in-to-your-local-instance-of-free-code-camp/19552) - [Writing great git commit - message](http://forum.freecodecamp.com/t/writing-good-git-commit-messages/13210) + messages](http://forum.freecodecamp.org/t/writing-good-git-commit-messages/13210) - [Contributor Chat Support - For the FCC Repositories, and running a local - instance](https://gitter.im/FreeCodeCamp/HelpContributors) + instance](https://gitter.im/FreeCodeCamp/Contributors) diff --git a/LICENSE.md b/LICENSE.md index 9512df6fec9b59..4f2a58360711e0 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,170 +1,29 @@ -Copyright (c) 2016 Free Code Camp. +BSD 3-Clause License -# Computer Software +Copyright (c) 2017, freeCodeCamp. +All rights reserved. -With respect to the computer software contained in this repository: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: -> Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -> -> 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -> -> 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -> -> 3. Neither the name of Free Code Camp nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. -> -> ***THIS SOFTWARE IS PROVIDED BY FREE CODE CAMP AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FREE CODE CAMP OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*** +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. -# Curricular Content +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -With respect to the curricular content contained in this repository, as in the `./seed/challenges` and subdirectories and our wiki: +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -> By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. -> -> **Section 1 – Definitions.** -> -> a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. -> -> b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. -> -> c. BY-SA Compatible License means a license listed at [creativecommons.org/compatiblelicenses](http://creativecommons.org/compatiblelicenses), approved by Creative Commons as essentially the equivalent of this Public License. -> -> d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. -> -> e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. -> -> f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. -> -> g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. -> -> h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. -> -> i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. -> -> j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. -> -> k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. -> -> l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. -> -> m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. -> -> **Section 2 – Scope.** -> -> a. License grant. -> -> 1\. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: -> reproduce and Share the Licensed Material, in whole or in part; and -> produce, reproduce, and Share Adapted Material. -> -> 2\. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. -> -> 3\. Term. The term of this Public License is specified in Section 6(a). -> Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. -> -> 5\. Downstream recipients. -> -> A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. -> -> B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. -> -> C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. -> -> 6\. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). -> -> b. Other rights. -> -> 1\. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. -> -> 2\. Patent and trademark rights are not licensed under this Public License. -> -> 3\. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. -> -> **Section 3 – License Conditions.** -> -> Your exercise of the Licensed Rights is expressly made subject to the following conditions. -> -> a. Attribution. -> -> 1\. If You Share the Licensed Material (including in modified form), You must: -> -> A. retain the following if it is supplied by the Licensor with the Licensed Material: -> -> i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); -> -> ii. a copyright notice; -> -> iii. a notice that refers to this Public License; -> -> iv. a notice that refers to the disclaimer of warranties; -> -> v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; -> -> B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and -> -> C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. -> -> 2\. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. -> -> 3\. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. -> -> b. ShareAlike. -> -> In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. -> -> 1\. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. -> -> 2\. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. -> -> 3\. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. -> -> **Section 4 – Sui Generis Database Rights.** -> -> Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: -> -> a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; -> -> b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and -> -> c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. -> -> For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. -> -> **Section 5 – Disclaimer of Warranties and Limitation of Liability.** -> -> ***a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.*** -> -> ***b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.*** -> -> ***c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.*** -> -> **Section 6 – Term and Termination.** -> -> a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. -> -> b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: -> -> 1\. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or -> -> 2\. upon express reinstatement by the Licensor. -> -> For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. -> -> c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. -> -> d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. -> -> **Section 7 – Other Terms and Conditions.** -> -> a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. -> -> b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. -> -> **Section 8 – Interpretation.** -> -> a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. -> -> b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. -> -> c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. -> -> d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 0d5f66a8954a1b..d4f4bd14c5364e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,17 @@ -![](https://s3.amazonaws.com/freecodecamp/wide-social-banner.png) +![freeCodeCamp Social Banner](https://s3.amazonaws.com/freecodecamp/wide-social-banner.png) [![Throughput Graph](https://graphs.waffle.io/freecodecamp/freecodecamp/throughput.svg)](https://waffle.io/freecodecamp/freecodecamp/metrics) [![Join the chat at https://gitter.im/freecodecamp/freecodecamp](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/freecodecamp/freecodecamp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Known Vulnerabilities](https://snyk.io/test/github/freecodecamp/freecodecamp/badge.svg)](https://snyk.io/test/github/freecodecamp/freecodecamp) +[![Build Status](https://travis-ci.org/freeCodeCamp/freeCodeCamp.svg?branch=staging)](https://travis-ci.org/freeCodeCamp/freeCodeCamp) +[![Pull Requests Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com) +[![first-timers-only Friendly](https://img.shields.io/badge/first--timers--only-friendly-blue.svg)](http://www.firsttimersonly.com/) -Welcome to Free Code Camp's open source codebase and curriculum! +Welcome to freeCodeCamp's open source codebase and curriculum! ======================= -Free Code Camp is a friendly open source community where you learn to code and help nonprofits. +freeCodeCamp is a friendly open source community where you learn to code and help nonprofits. **We help our campers build job-worthy portfolios of real apps used by real people, while helping nonprofits.** @@ -17,17 +21,17 @@ You start by working through our self-paced, browser-based full stack JavaScript ##### 1. Front End Certification The first section will teach you the basics of how webpages work and also introduce you to JavaScript programming. -Skills you'll practice include `HTML, CSS, JavaScript, jQuery` and `Bootstrap`. +Skills you'll practice include `HTML`, `CSS`, `JavaScript`, `jQuery` and `Bootstrap`. To earn this certification, you'll build **10 front-end projects** and implement many **JavaScript algorithms**. ##### 2. Data Visualization Certification -The second section builds upon the first and introduces you to more advanced topics such as `Sass, React` and `D3`. +The second section builds upon the first and introduces you to more advanced topics such as `Sass`, `React` and `D3`. To earn this certification, you'll build **5 React-apps** and **5 Data visualization apps** using `D3.js`. ##### 3. Back End Certification -The third section introduces you to back end development using `Node.js, Express,` and `MongoDB`. It also teaches you about the important concept of source control using `Git`. +The third section introduces you to back end development using `Node.js`, `Express,` and `MongoDB`. It also teaches you about the important concept of source control using `Git`. To earn this certification, you'll build **5 APIs** and **5 full stack apps**. @@ -41,38 +45,29 @@ For this certification, you'll work on **two projects from scratch** and then ** --- -This code is running live at [FreeCodeCamp.com](http://www.FreeCodeCamp.com). We also have [Gitter chat room](https://gitter.im/FreeCodeCamp/FreeCodeCamp), a [Medium publication](http://medium.freecodecamp.com), and even a [YouTube channel](http://youtube.com/freecodecamp). +This code is running live at [freeCodeCamp.org](https://www.freecodecamp.org). We also have [Gitter chat rooms](https://gitter.im/FreeCodeCamp/FreeCodeCamp), a [Medium publication](https://medium.freecodecamp.org), an [interactive forum](https://forum.freecodecamp.org), a [wiki knowledgebase](https://forum.freecodecamp.org/c/wiki), local [FaceBook groups](https://study-group-directory.freecodecamp.org/), and even a [YouTube channel](https://youtube.com/freecodecamp). -### [Join our community here](http://www.freecodecamp.com/signin). +### [Join our community here](https://www.freecodecamp.org/signin). Found a bug? ------------ Do not file an issue until you have followed these steps: -1. Read the [Help I've Found a Bug](http://forum.freecodecamp.com/t/how-to-report-a-bug/19543) article and follow its instructions. -2. Ask for confirmation in the appropriate [Help Room](http://forum.freecodecamp.com/t/free-code-camp-official-chat-rooms/19390/2). +1. Read the [Help I've Found a Bug](https://forum.freecodecamp.org/t/how-to-report-a-bug/19543) article and follow its instructions. +2. Ask for confirmation in the appropriate [Help Room](https://forum.freecodecamp.org/t/free-code-camp-official-chat-rooms/19390/2). 3. Please *do not* open an issue without a 3rd party confirmation of your problem. Contributing ------------ -We welcome pull requests from Free Code Camp campers (our students) and seasoned JavaScript developers alike! Please follow [these steps](CONTRIBUTING.md) to contribute. +We welcome pull requests from freeCodeCamp campers (our students) and seasoned JavaScript developers alike! Please follow [these steps](CONTRIBUTING.md) to contribute. License ------- -The BSD-3-Clause +Copyright (c) 2017 freeCodeCamp. -Copyright (c) 2016, Free Code Camp -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of Free Code Camp nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY FREE CODE CAMP AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +The content of this repository bound by the following LICENSE(S) +- The computer software is licensed under the [BSD-3-Clause](./LICENSE.md). +- The curricular content in the [`/seed`](/seed) and subdirectories are licensed under the [CC-BY-SA-4.0](./seed/LICENSE.md) diff --git a/bower.json b/bower.json deleted file mode 100644 index 6ef5a0ba82666a..00000000000000 --- a/bower.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "freecodecamp", - "version": "0.0.0", - "homepage": "http://freecodecamp.com", - "private": true, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "public/bower_components", - "test", - "tests" - ], - "dependencies": { - "d3": "~3.5.5", - "jquery": "~2.1.4", - "cal-heatmap": "~3.5.2", - "bootstrap": "~3.3.4", - "font-awesome": "~4.5.0", - "moment": "~2.10.2", - "moment-timezone": "~0.5.0", - "jshint": "~2.9.0", - "lightbox2": "~2.8.1", - "rxjs": "~4.0.6", - "CodeMirror": "~5.15.2", - "chai": "~3.4.1", - "clipboard": "~1.5.5", - "mousetrap": "~1.5.3" - } -} diff --git a/client/commonFramework/add-loop-protect.js b/client/commonFramework/add-loop-protect.js deleted file mode 100644 index 56ad7389b2ec64..00000000000000 --- a/client/commonFramework/add-loop-protect.js +++ /dev/null @@ -1,21 +0,0 @@ -window.common = (function(global) { - const { - loopProtect, - common = { init: [] } - } = global; - - loopProtect.hit = function hit(line) { - var err = 'Error: Exiting potential infinite loop at line ' + - line + - '. To disable loop protection, write: \n\\/\\/ noprotect\nas the first' + - 'line. Beware that if you do have an infinite loop in your code' + - 'this will crash your browser.'; - console.error(err); - }; - - common.addLoopProtect = function addLoopProtect(code = '') { - return loopProtect(code); - }; - - return common; -})(window); diff --git a/client/commonFramework/bindings.js b/client/commonFramework/bindings.js deleted file mode 100644 index e2165848bc9b02..00000000000000 --- a/client/commonFramework/bindings.js +++ /dev/null @@ -1,217 +0,0 @@ -window.common = (function(global) { - const { - $, - Rx: { Observable }, - common = { init: [] }, - Mousetrap - } = global; - - common.ctrlEnterClickHandler = function ctrlEnterClickHandler(e) { - // ctrl + enter or cmd + enter - if ( - e.keyCode === 13 && - (e.metaKey || e.ctrlKey) - ) { - $('#complete-courseware-dialog').off('keydown', ctrlEnterClickHandler); - if ($('#submit-challenge').length > 0) { - $('#submit-challenge').click(); - } else { - window.location = '/challenges/next-challenge?id=' + common.challengeId; - } - } - }; - - common.init.push(function($) { - - var $marginFix = $('.innerMarginFix'); - $marginFix.css('min-height', $marginFix.height()); - - common.submitBtn$ = Observable.fromEvent($('#submitButton'), 'click'); - - common.resetBtn$ = Observable.fromEvent($('#reset-button'), 'click'); - - // init modal keybindings on open - $('#complete-courseware-dialog').on('shown.bs.modal', function() { - $('#complete-courseware-dialog').keydown(common.ctrlEnterClickHandler); - }); - - // remove modal keybinds on close - $('#complete-courseware-dialog').on('hidden.bs.modal', function() { - $('#complete-courseware-dialog').off( - 'keydown', - common.ctrlEnterClickHandler - ); - }); - - // set focus keybind - Mousetrap.bind(['command+shift+e', 'ctrl+shift+e'], () => { - common.editor.focus(); - }); - - // video checklist binding - $('.challenge-list-checkbox').on('change', function() { - var checkboxId = $(this).parent().parent().attr('id'); - if ($(this).is(':checked')) { - $(this).parent().siblings().children().addClass('faded'); - if (!localStorage || !localStorage[checkboxId]) { - localStorage[checkboxId] = true; - } - } - - if (!$(this).is(':checked')) { - $(this).parent().siblings().children().removeClass('faded'); - if (localStorage[checkboxId]) { - localStorage.removeItem(checkboxId); - } - } - }); - - $('.checklist-element').each(function() { - var checklistElementId = $(this).attr('id'); - if (localStorage[checklistElementId]) { - $(this).children().children('li').addClass('faded'); - $(this).children().children('input').trigger('click'); - } - }); - - - // video challenge submit - $('#next-courseware-button').on('click', function() { - $('#next-courseware-button').unbind('click'); - if ($('.signup-btn-nav').length < 1) { - var data; - var solution = $('#public-url').val() || null; - var githubLink = $('#github-url').val() || null; - switch (common.challengeType) { - case common.challengeTypes.VIDEO: - data = { - id: common.challengeId, - name: common.challengeName, - challengeType: +common.challengeType - }; - $.ajax({ - url: '/completed-challenge/', - type: 'POST', - data: JSON.stringify(data), - contentType: 'application/json', - dataType: 'json' - }) - .success(function(res) { - if (!res) { - return; - } - window.location.href = '/challenges/next-challenge?id=' + - common.challengeId; - }) - .fail(function() { - window.location.replace(window.location.href); - }); - - break; - case common.challengeTypes.BASEJUMP: - case common.challengeTypes.ZIPLINE: - data = { - id: common.challengeId, - name: common.challengeName, - challengeType: +common.challengeType, - solution, - githubLink - }; - - $.ajax({ - url: '/completed-zipline-or-basejump/', - type: 'POST', - data: JSON.stringify(data), - contentType: 'application/json', - dataType: 'json' - }) - .success(function() { - window.location.href = '/challenges/next-challenge?id=' + - common.challengeId; - }) - .fail(function() { - window.location.replace(window.location.href); - }); - break; - - case common.challengeTypes.BONFIRE: - window.location.href = '/challenges/next-challenge?id=' + - common.challengeId; - break; - - default: - console.log('Happy Coding!'); - break; - } - } - }); - - if (common.challengeName) { - window.ga('send', 'event', 'Challenge', 'loaded', common.gaName); - } - - $('.modal').on('show.bs.modal', function() { - $('.gitter-chat-embed, .map-aside') - .addClass('is-collapsed'); - }); - - $('#complete-courseware-dialog').on('hidden.bs.modal', function() { - if (common.editor.focus) { - common.editor.focus(); - } - }); - - $('#trigger-issue-modal').on('click', function() { - $('#issue-modal').modal('show'); - }); - - $('#trigger-help-modal').on('click', function() { - $('#help-modal').modal('show'); - }); - - $('#trigger-reset-modal').on('click', function() { - $('#reset-modal').modal('show'); - }); - - $('#trigger-pair-modal').on('click', function() { - $('#pair-modal').modal('show'); - }); - - $('#completed-courseware').on('click', function() { - $('#complete-courseware-dialog').modal('show'); - }); - - $('#show-solution').on('click', function() { - $('#complete-courseware-dialog').modal('hide'); - }); - - $('#challenge-help-btn').on('click', function() { - $('.map-aside, #chat-embed-main').addClass('is-collapsed'); - }); - - $('#help-ive-found-a-bug-wiki-article').on('click', function() { - window.open( - 'http://forum.freecodecamp.com/t/how-to-report-a-bug/19543', - '_blank' - ); - }); - - $('#search-issue').on('click', function() { - var queryIssue = window.location.href - .toString() - .split('?')[0] - .replace(/(#*)$/, ''); - window.open( - 'https://github.com/FreeCodeCamp/FreeCodeCamp/issues?q=' + - 'is:issue is:all ' + - (common.challengeName) + - ' OR ' + - queryIssue - .substr(queryIssue.lastIndexOf('challenges/') + 11) - .replace('/', ''), '_blank'); - }); - - }); - - return common; -}(window)); diff --git a/client/commonFramework/code-storage.js b/client/commonFramework/code-storage.js deleted file mode 100644 index 4eca143dad9de2..00000000000000 --- a/client/commonFramework/code-storage.js +++ /dev/null @@ -1,69 +0,0 @@ -// depends on: codeUri -window.common = (function(global) { - const { - localStorage, - common = { init: [] } - } = global; - - const { - replaceNoprotect - } = common; - - var challengePrefix = [ - 'Bonfire: ', - 'Waypoint: ', - 'Zipline: ', - 'Basejump: ', - 'Checkpoint: '], - item; - - var codeStorage = { - getStoredValue(key) { - if ( - !localStorage || - typeof localStorage.getItem !== 'function' || - !key || - typeof key !== 'string' - ) { - console.log('unable to read from storage'); - return ''; - } - if (localStorage.getItem(key + 'Val')) { - return '' + localStorage.getItem(key + 'Val'); - } else { - for (var i = 0; i <= challengePrefix.length; i++) { - item = localStorage.getItem(challengePrefix[i] + key + 'Val'); - if (item) { - return '' + item; - } - } - } - return null; - }, - - isAlive: function(key) { - var val = this.getStoredValue(key); - return val !== 'null' && - val !== 'undefined' && - (val && val.length > 0); - }, - - updateStorage(key, code) { - if ( - !localStorage || - typeof localStorage.setItem !== 'function' || - !key || - typeof key !== 'string' - ) { - console.log('unable to save to storage'); - return code; - } - localStorage.setItem(key + 'Val', replaceNoprotect(code)); - return code; - } - }; - - common.codeStorage = codeStorage; - - return common; -}(window, window.common)); diff --git a/client/commonFramework/code-uri.js b/client/commonFramework/code-uri.js deleted file mode 100644 index c2642aa26416d9..00000000000000 --- a/client/commonFramework/code-uri.js +++ /dev/null @@ -1,148 +0,0 @@ -// store code in the URL -window.common = (function(global) { - const { - encodeURIComponent: encode, - decodeURIComponent: decode, - location, - history, - common = { init: [] } - } = global; - - const { - replaceScriptTags, - replaceSafeTags, - replaceFormActionAttr, - replaceFccfaaAttr, - replaceNoprotect - } = common; - - const queryRegex = /^(\?|#\?)/; - function encodeFcc(val) { - return replaceScriptTags(replaceFormActionAttr(replaceNoprotect(val))); - } - - function decodeFcc(val) { - return replaceSafeTags(replaceFccfaaAttr(val)); - } - - var codeUri = { - encode: function(code) { - return encode(code); - }, - decode: function(code) { - try { - return decode(code); - } catch (ignore) { - return null; - } - }, - isInQuery: function(query) { - var decoded = codeUri.decode(query); - if (!decoded || typeof decoded.split !== 'function') { - return false; - } - return decoded - .replace(queryRegex, '') - .split('&') - .reduce(function(found, param) { - var key = param.split('=')[0]; - if (key === 'solution') { - return true; - } - return found; - }, false); - }, - isAlive: function() { - return codeUri.enabled && - codeUri.isInQuery(location.search) || - codeUri.isInQuery(location.hash); - }, - getKeyInQuery(query, keyToFind = '') { - return query - .split('&') - .reduce(function(oldValue, param) { - var key = param.split('=')[0]; - var value = param - .split('=') - .slice(1) - .join('='); - - if (key === keyToFind) { - return value; - } - return oldValue; - }, null); - }, - getSolutionFromQuery(query = '') { - return decodeFcc( - codeUri.decode(codeUri.getKeyInQuery(query, 'solution')) - ); - }, - parse: function() { - if (!codeUri.enabled) { - return null; - } - var query; - if (location.search && codeUri.isInQuery(location.search)) { - query = location.search.replace(/^\?/, ''); - - if (history && typeof history.replaceState === 'function') { - history.replaceState( - history.state, - null, - location.href.split('?')[0] - ); - location.hash = '#?' + encodeFcc(query); - } - } else { - query = location.hash.replace(/^\#\?/, ''); - } - - if (!query) { - return null; - } - - return this.getSolutionFromQuery(query); - }, - querify: function(solution) { - if (!codeUri.enabled) { - return null; - } - if (history && typeof history.replaceState === 'function') { - // grab the url up to the query - // destroy any hash symbols still clinging to life - const url = (location.href.split('?')[0]).replace(/(#*)$/, ''); - history.replaceState( - history.state, - null, - url + - '#?' + - (codeUri.shouldRun() ? '' : 'run=disabled&') + - 'solution=' + - codeUri.encode(encodeFcc(solution)) - ); - } else { - location.hash = '?solution=' + - codeUri.encode(encodeFcc(solution)); - } - - return solution; - }, - enabled: true, - shouldRun() { - return !this.getKeyInQuery( - (location.search || location.hash).replace(queryRegex, ''), - 'run' - ); - } - }; - - common.init.push(function() { - codeUri.parse(); - }); - - common.codeUri = codeUri; - common.shouldRun = () => codeUri.shouldRun(); - - return common; -}(window)); diff --git a/client/commonFramework/create-editor.js b/client/commonFramework/create-editor.js deleted file mode 100644 index 09efed144bb7e6..00000000000000 --- a/client/commonFramework/create-editor.js +++ /dev/null @@ -1,119 +0,0 @@ -window.common = (function(global) { - const { - Rx: { Subject, Observable }, - CodeMirror, - emmetCodeMirror, - common = { init: [] } - } = global; - - const { challengeType = '0', challengeTypes } = common; - - if ( - !CodeMirror || - challengeType === challengeTypes.BASEJUMP || - challengeType === challengeTypes.ZIPLINE || - challengeType === challengeTypes.VIDEO || - challengeType === challengeTypes.STEP || - challengeType === challengeTypes.HIKES - ) { - common.editor = {}; - return common; - } - - var editor = CodeMirror.fromTextArea( - document.getElementById('codeEditor'), - { - lint: true, - lineNumbers: true, - mode: 'javascript', - theme: 'monokai', - runnable: true, - matchBrackets: true, - autoCloseBrackets: true, - scrollbarStyle: 'null', - lineWrapping: true, - gutters: ['CodeMirror-lint-markers'] - } - ); - - editor.setSize('100%', 'auto'); - - common.editorExecute$ = new Subject(); - common.editorKeyUp$ = Observable.fromEventPattern( - (handler) => editor.on('keyup', handler), - (handler) => editor.off('keyup', handler) - ); - - editor.setOption('extraKeys', { - Tab: function(cm) { - if (cm.somethingSelected()) { - cm.indentSelection('add'); - } else { - var spaces = Array(cm.getOption('indentUnit') + 1).join(' '); - cm.replaceSelection(spaces); - } - }, - 'Shift-Tab': function(cm) { - if (cm.somethingSelected()) { - cm.indentSelection('subtract'); - } else { - var spaces = Array(cm.getOption('indentUnit') + 1).join(' '); - cm.replaceSelection(spaces); - } - }, - 'Ctrl-Enter': function() { - common.editorExecute$.onNext(); - return false; - }, - 'Cmd-Enter': function() { - common.editorExecute$.onNext(); - return false; - }, - 'Ctrl-/': function(cm) { - cm.toggleComment(); - }, - 'Cmd-/': function(cm) { - cm.toggleComment(); - } - }); - - - var info = editor.getScrollInfo(); - - var after = editor.charCoords({ - line: editor.getCursor().line + 1, - ch: 0 - }, 'local').top; - - if (info.top + info.clientHeight < after) { - editor.scrollTo(null, after - info.clientHeight + 3); - } - - if (emmetCodeMirror) { - emmetCodeMirror( - editor, - { - 'Cmd-E': 'emmet.expand_abbreviation', - Tab: 'emmet.expand_abbreviation_with_tab', - Enter: 'emmet.insert_formatted_line_break_only' - } - ); - } - common.init.push(function() { - let editorValue; - if (common.codeUri.isAlive()) { - editorValue = common.codeUri.parse(); - } else { - editorValue = common.codeStorage.isAlive(common.challengeName) ? - common.codeStorage.getStoredValue(common.challengeName) : - common.seed; - } - - editor.setValue(common.replaceSafeTags(editorValue)); - editor.refresh(); - }); - - common.editor = editor; - - return common; -}(window)); diff --git a/client/commonFramework/detect-unsafe-code-stream.js b/client/commonFramework/detect-unsafe-code-stream.js deleted file mode 100644 index 14ed08f77bd4e4..00000000000000 --- a/client/commonFramework/detect-unsafe-code-stream.js +++ /dev/null @@ -1,55 +0,0 @@ -window.common = (function(global) { - const { - Rx: { Observable }, - common = { init: [] } - } = global; - - const detectFunctionCall = /function\s*?\(|function\s+\w+\s*?\(/gi; - const detectUnsafeJQ = /\$\s*?\(\s*?\$\s*?\)/gi; - const detectUnsafeConsoleCall = /if\s\(null\)\sconsole\.log\(1\);/gi; - - common.detectUnsafeCode$ = function detectUnsafeCode$(code) { - const openingComments = code.match(/\/\*/gi); - const closingComments = code.match(/\*\//gi); - - // checks if the number of opening comments(/*) matches the number of - // closing comments(*/) - if ( - openingComments && - ( - !closingComments || - openingComments.length > closingComments.length - ) - ) { - - return Observable.throw( - new Error('SyntaxError: Unfinished multi-line comment') - ); - } - - if (code.match(detectUnsafeJQ)) { - return Observable.throw( - new Error('Unsafe $($)') - ); - } - - if ( - code.match(/function/g) && - !code.match(detectFunctionCall) - ) { - return Observable.throw( - new Error('SyntaxError: Unsafe or unfinished function declaration') - ); - } - - if (code.match(detectUnsafeConsoleCall)) { - return Observable.throw( - new Error('Invalid if (null) console.log(1); detected') - ); - } - - return Observable.just(code); - }; - - return common; -}(window)); diff --git a/client/commonFramework/display-test-results.js b/client/commonFramework/display-test-results.js deleted file mode 100644 index df09d26734488d..00000000000000 --- a/client/commonFramework/display-test-results.js +++ /dev/null @@ -1,32 +0,0 @@ -window.common = (function({ $, common = { init: [] }}) { - - common.displayTestResults = function displayTestResults(data = [], down) { - $('#testSuite').children().remove(); - data.forEach(({ err = false, text = '' }) => { - var iconClass = err ? - '"ion-close-circled big-error-icon"' : - '"ion-checkmark-circled big-success-icon"'; - - $('
').html(` -
-
- -
-
- ${text.split('message: ').pop().replace(/\'\);/g, '')} -
-
-
- `) - .appendTo($('#testSuite')); - }); - if (down) { - $('#scroll-locker').animate( - { scrollTop: $(document).height() }, 'slow' - ); - } - return data; - }; - - return common; -}(window)); diff --git a/client/commonFramework/end.js b/client/commonFramework/end.js deleted file mode 100644 index 7dec122ff71119..00000000000000 --- a/client/commonFramework/end.js +++ /dev/null @@ -1,177 +0,0 @@ -$(document).ready(function() { - const common = window.common; - const { Observable } = window.Rx; - const { - addLoopProtect, - challengeName, - challengeType, - challengeTypes - } = common; - - common.init.forEach(function(init) { - init($); - }); - - // only run if editor present - if (common.editor.getValue) { - const code$ = common.editorKeyUp$ - .debounce(750) - .map(() => common.editor.getValue()) - .distinctUntilChanged() - .shareReplay(); - - // update storage - code$.subscribe( - code => { - common.codeStorage.updateStorage(common.challengeName, code); - common.codeUri.querify(code); - }, - err => console.error(err) - ); - - code$ - // only run for HTML - .filter(() => common.challengeType === challengeTypes.HTML) - .flatMap(code => { - return common.detectUnsafeCode$(code) - .map(() => { - const combinedCode = common.head + code + common.tail; - - return addLoopProtect(combinedCode); - }) - .flatMap(code => common.updatePreview$(code)) - .flatMap(() => common.checkPreview$({ code })) - .catch(err => Observable.just({ err })); - }) - .subscribe( - ({ err }) => { - if (err) { - console.error(err); - return common.updatePreview$(` -

${err}

- `).subscribe(() => {}); - } - return null; - }, - err => console.error(err) - ); - } - - common.resetBtn$ - .doOnNext(() => { - common.editor.setValue(common.replaceSafeTags(common.seed)); - }) - .flatMap(() => { - return common.executeChallenge$() - .catch(err => Observable.just({ err })); - }) - .subscribe( - ({ err, output, originalCode, tests }) => { - if (err) { - console.error(err); - return common.updateOutputDisplay('' + err); - } - common.codeStorage.updateStorage(challengeName, originalCode); - common.codeUri.querify(originalCode); - common.displayTestResults(tests, true); - common.updateOutputDisplay(output); - return null; - }, - (err) => { - if (err) { - console.error(err); - } - common.updateOutputDisplay('' + err); - } - ); - - Observable.merge( - common.editorExecute$, - common.submitBtn$ - ) - .flatMap(() => { - common.appendToOutputDisplay('\n// testing challenge...'); - return common.executeChallenge$() - .map(({ tests, ...rest }) => { - const solved = tests.every(test => !test.err); - return { ...rest, tests, solved }; - }) - .catch(err => Observable.just({ err })); - }) - .subscribe( - ({ err, solved, output, tests }) => { - if (err) { - console.error(err); - if (common.challengeType === common.challengeTypes.HTML) { - return common.updatePreview$(` -

${err}

- `).first().subscribe(() => {}); - } - return common.updateOutputDisplay('' + err); - } - common.updateOutputDisplay(output); - common.displayTestResults(tests, true); - if (solved) { - common.showCompletion(); - } - return null; - }, - ({ err }) => { - console.error(err); - common.updateOutputDisplay('' + err); - } - ); - - // initial challenge run to populate tests - if (challengeType === challengeTypes.HTML) { - var $preview = $('#preview'); - return Observable.fromCallback($preview.ready, $preview)() - .delay(500) - .flatMap(() => common.executeChallenge$()) - .catch(err => Observable.just({ err })) - .subscribe( - ({ err, tests }) => { - if (err) { - console.error(err); - if (common.challengeType === common.challengeTypes.HTML) { - return common.updatePreview$(` -

${err}

- `).subscribe(() => {}); - } - return common.updateOutputDisplay('' + err); - } - common.displayTestResults(tests, false); - return null; - }, - ({ err }) => { - console.error(err); - } - ); - } - - if ( - challengeType === challengeTypes.BONFIRE || - challengeType === challengeTypes.JS - ) { - return Observable.just({}) - .delay(500) - .flatMap(() => common.executeChallenge$()) - .catch(err => Observable.just({ err })) - .subscribe( - ({ err, originalCode, tests }) => { - if (err) { - console.error(err); - return common.updateOutputDisplay('' + err); - } - common.codeStorage.updateStorage(challengeName, originalCode); - common.displayTestResults(tests, false); - return null; - }, - (err) => { - console.error(err); - common.updateOutputDisplay('' + err); - } - ); - } - return null; -}); diff --git a/client/commonFramework/execute-challenge-stream.js b/client/commonFramework/execute-challenge-stream.js deleted file mode 100644 index 18f7b161b57170..00000000000000 --- a/client/commonFramework/execute-challenge-stream.js +++ /dev/null @@ -1,57 +0,0 @@ -window.common = (function(global) { - const { - ga, - common = { init: [] } - } = global; - - const { - addLoopProtect, - getJsFromHtml, - detectUnsafeCode$, - updatePreview$, - challengeType, - challengeTypes - } = common; - - common.executeChallenge$ = function executeChallenge$() { - const code = common.editor.getValue(); - const originalCode = code; - const head = common.arrayToNewLineString(common.head); - const tail = common.arrayToNewLineString(common.tail); - const combinedCode = head + code + tail; - - ga('send', 'event', 'Challenge', 'ran-code', common.gaName); - - // run checks for unsafe code - return detectUnsafeCode$(code) - // add head and tail and detect loops - .map(() => { - if (challengeType !== challengeTypes.HTML) { - return ``; - } - - return addLoopProtect(combinedCode); - }) - .flatMap(code => updatePreview$(code)) - .flatMap(code => { - let output; - - if ( - challengeType === challengeTypes.HTML && - common.hasJs(code) - ) { - output = common.getJsOutput(getJsFromHtml(code)); - } else if (challengeType !== challengeTypes.HTML) { - output = common.getJsOutput(addLoopProtect(combinedCode)); - } - - return common.runPreviewTests$({ - tests: common.tests.slice(), - originalCode, - output - }); - }); - }; - - return common; -}(window)); diff --git a/client/commonFramework/get-iframe.js b/client/commonFramework/get-iframe.js deleted file mode 100644 index 012dce7b50da80..00000000000000 --- a/client/commonFramework/get-iframe.js +++ /dev/null @@ -1,23 +0,0 @@ -window.common = (function(global) { - const { - common = { init: [] }, - document: doc - } = global; - - common.getIframe = function getIframe(id = 'preview') { - let previewFrame = doc.getElementById(id); - - // create and append a hidden preview frame - if (!previewFrame) { - previewFrame = doc.createElement('iframe'); - previewFrame.id = id; - previewFrame.setAttribute('style', 'display: none'); - doc.body.appendChild(previewFrame); - } - - return previewFrame.contentDocument || - previewFrame.contentWindow.document; - }; - - return common; -})(window); diff --git a/client/commonFramework/init.js b/client/commonFramework/init.js deleted file mode 100644 index 7344e6f0be3fb8..00000000000000 --- a/client/commonFramework/init.js +++ /dev/null @@ -1,124 +0,0 @@ -window.common = (function(global) { - // common namespace - // all classes should be stored here - // called at the beginning of dom ready - const { - Rx: { Disposable, Observable, config }, - common = { init: [] } - } = global; - - config.longStackSupport = true; - common.head = common.head || []; - common.tail = common.tail || []; - common.salt = Math.random(); - - common.challengeTypes = { - HTML: '0', - JS: '1', - VIDEO: '2', - ZIPLINE: '3', - BASEJUMP: '4', - BONFIRE: '5', - HIKES: '6', - STEP: '7' - }; - - - common.arrayToNewLineString = function arrayToNewLineString(seedData) { - seedData = Array.isArray(seedData) ? seedData : [seedData]; - return seedData.reduce(function(seed, line) { - return '' + seed + line + '\n'; - }, '\n'); - }; - - common.seed = common.arrayToNewLineString(common.challengeSeed); - - common.replaceNoprotect = function replaceNoprotect(value) { - return value.replace(/noprotect/gi, ''); - }; - - common.replaceScriptTags = function replaceScriptTags(value) { - return value - .replace(/'); - }; - - common.replaceFormActionAttr = function replaceFormAction(value) { - return value.replace(/]*>/, function(val) { - return val.replace(/action(\s*?)=/, 'fccfaa$1='); - }); - }; - - common.replaceFccfaaAttr = function replaceFccfaaAttr(value) { - return value.replace(/]*>/, function(val) { - return val.replace(/fccfaa(\s*?)=/, 'action$1='); - }); - }; - - common.scopejQuery = function scopejQuery(str) { - return str - .replace(/\$/gi, 'j$') - .replace(/document/gi, 'jdocument') - .replace(/jQuery/gi, 'jjQuery'); - }; - - common.unScopeJQuery = function unScopeJQuery(str) { - return str - .replace(/j\$/gi, '$') - .replace(/jdocument/gi, 'document') - .replace(/jjQuery/gi, 'jQuery'); - }; - - const commentRegex = /(\/\*[^(\*\/)]*\*\/)|([ \n]\/\/[^\n]*)/g; - common.removeComments = function removeComments(str) { - return str.replace(commentRegex, ''); - }; - - const logRegex = /(console\.[\w]+\s*\(.*\;)/g; - common.removeLogs = function removeLogs(str) { - return str.replace(logRegex, ''); - }; - - common.reassembleTest = function reassembleTest(code = '', { line, text }) { - var regexp = new RegExp('//' + line + common.salt); - return code.replace(regexp, text); - }; - - common.getScriptContent$ = function getScriptContent$(script) { - return Observable.create(function(observer) { - const jqXHR = $.get(script, null, null, 'text') - .success(data => { - observer.onNext(data); - observer.onCompleted(); - }) - .fail(e => observer.onError(e)) - .always(() => observer.onCompleted()); - - return new Disposable(() => { - jqXHR.abort(); - }); - }); - }; - - const openScript = /\<\s?script\s?\>/gi; - const closingScript = /\<\s?\/\s?script\s?\>/gi; - - // detects if there is JavaScript in the first script tag - common.hasJs = function hasJs(code) { - return !!common.getJsFromHtml(code); - }; - - // grabs the content from the first script tag in the code - common.getJsFromHtml = function getJsFromHtml(code) { - // grab user javaScript - return (code.split(openScript)[1] || '').split(closingScript)[0] || ''; - }; - - return common; -})(window); diff --git a/client/commonFramework/output-display.js b/client/commonFramework/output-display.js deleted file mode 100644 index 700194e500721c..00000000000000 --- a/client/commonFramework/output-display.js +++ /dev/null @@ -1,58 +0,0 @@ -window.common = (function(global) { - const { - CodeMirror, - document: doc, - common = { init: [] } - } = global; - - const { challengeTypes, challengeType = '0' } = common; - - if ( - !CodeMirror || - challengeType !== challengeTypes.JS && - challengeType !== challengeTypes.BONFIRE - ) { - common.updateOutputDisplay = () => {}; - common.appendToOutputDisplay = () => {}; - return common; - } - - var codeOutput = CodeMirror.fromTextArea( - doc.getElementById('codeOutput'), - { - lineNumbers: false, - mode: 'text', - theme: 'monokai', - readOnly: 'nocursor', - lineWrapping: true - } - ); - - codeOutput.setValue(`/** - * Your output will go here. - * Any console.log() - type - * statements will appear in - * your browser\'s DevTools - * JavaScript console as well. - */`); - - codeOutput.setSize('100%', '100%'); - - common.updateOutputDisplay = function updateOutputDisplay(str = '') { - if (typeof str === 'function') { - str = str.toString(); - } - if (typeof str !== 'string') { - str = JSON.stringify(str); - } - codeOutput.setValue(str); - return str; - }; - - common.appendToOutputDisplay = function appendToOutputDisplay(str = '') { - codeOutput.setValue(codeOutput.getValue() + str); - return str; - }; - - return common; -}(window)); diff --git a/client/commonFramework/phone-scroll-lock.js b/client/commonFramework/phone-scroll-lock.js deleted file mode 100644 index a1ab157a71d72f..00000000000000 --- a/client/commonFramework/phone-scroll-lock.js +++ /dev/null @@ -1,132 +0,0 @@ -window.common = (function({ common = { init: [] }}) { - - common.lockTop = function lockTop() { - var magiVal; - - if ($(window).width() >= 990) { - if ($('.editorScrollDiv').html()) { - - magiVal = $(window).height() - $('.navbar').height(); - - if (magiVal < 0) { - magiVal = 0; - } - $('.editorScrollDiv').css('height', magiVal - 50 + 'px'); - } - - magiVal = $(window).height() - $('.navbar').height(); - - if (magiVal < 0) { - magiVal = 0; - } - - $('.scroll-locker') - .css('min-height', $('.editorScrollDiv').height()) - .css('height', magiVal - 50); - } else { - $('.editorScrollDiv').css('max-height', 500 + 'px'); - - $('.scroll-locker') - .css('position', 'inherit') - .css('top', 'inherit') - .css('width', '100%') - .css('max-height', '100%'); - } - }; - - common.init.push(function($) { - // fakeiphone positioning hotfix - if ( - $('.iphone-position').html() || - $('.iphone').html() - ) { - var startIphonePosition = parseInt( - $('.iphone-position') - .css('top') - .replace('px', ''), - 10 - ); - - var startIphone = parseInt( - $('.iphone') - .css('top') - .replace('px', ''), - 10 - ); - - $(window).on('scroll', function() { - var courseHeight = $('.courseware-height').height(); - var courseTop = $('.courseware-height').offset().top; - var windowScrollTop = $(window).scrollTop(); - var phoneHeight = $('.iphone-position').height(); - - if (courseHeight + courseTop - windowScrollTop - phoneHeight <= 0) { - $('.iphone-position').css( - 'top', - startIphonePosition + - courseHeight + - courseTop - - windowScrollTop - - phoneHeight - ); - - $('.iphone').css( - 'top', - startIphonePosition + - courseHeight + - courseTop - - windowScrollTop - - phoneHeight + - 120 - ); - } else { - $('.iphone-position').css('top', startIphonePosition); - $('.iphone').css('top', startIphone); - } - }); - } - - if ($('.scroll-locker').html()) { - - if ($('.scroll-locker').html()) { - common.lockTop(); - $(window).on('resize', function() { - common.lockTop(); - }); - $(window).on('scroll', function() { - common.lockTop(); - }); - } - - var execInProgress = false; - - // why is this not $??? - document - .getElementById('scroll-locker') - .addEventListener( - 'previewUpdateSpy', - function(e) { - if (execInProgress) { - return null; - } - execInProgress = true; - return setTimeout(function() { - if ( - $($('.scroll-locker').children()[0]).height() - 800 > e.detail - ) { - $('.scroll-locker').scrollTop(e.detail); - } else { - var scrollTop = $($('.scroll-locker').children()[0]).height(); - - $('.scroll-locker').animate({ scrollTop: scrollTop }, 175); - } - execInProgress = false; - }, 750); - }, - false - ); - } - }); - - return common; -}(window)); diff --git a/client/commonFramework/report-issue.js b/client/commonFramework/report-issue.js deleted file mode 100644 index 9218df0594617f..00000000000000 --- a/client/commonFramework/report-issue.js +++ /dev/null @@ -1,56 +0,0 @@ -window.common = (function({ common = { init: [] } }) { - common.init.push(function($) { - $('#report-issue').on('click', function() { - var textMessage = [ - 'Challenge [', - (common.challengeName || window.location.pathname), - '](', - window.location.href, - ') has an issue.\n', - 'User Agent is: ', - navigator.userAgent, - '.\n', - 'Please describe how to reproduce this issue, and include ', - 'links to screenshots if possible.\n\n' - ].join(''); - - if ( - common.editor && - typeof common.editor.getValue === 'function' && - common.editor.getValue().trim() - ) { - var type; - switch (common.challengeType) { - case common.challengeTypes.HTML: - type = 'html'; - break; - case common.challengeTypes.JS: - case common.challengeTypes.BONFIRE: - type = 'javascript'; - break; - default: - type = ''; - } - - textMessage += [ - 'My code:\n```', - type, - '\n', - common.editor.getValue(), - '\n```\n\n' - ].join(''); - } - - textMessage = encodeURIComponent(textMessage); - - $('#issue-modal').modal('hide'); - window.open( - 'https://github.com/freecodecamp/freecodecamp/issues/new?&body=' + - textMessage, - '_blank' - ); - }); - }); - - return common; -}(window)); diff --git a/client/commonFramework/run-tests-stream.js b/client/commonFramework/run-tests-stream.js deleted file mode 100644 index df5bc39dbd1000..00000000000000 --- a/client/commonFramework/run-tests-stream.js +++ /dev/null @@ -1,40 +0,0 @@ -window.common = (function(global) { - const { - Rx: { Observable }, - chai, - common = { init: [] } - } = global; - - common.runTests$ = function runTests$({ - code, - originalCode, - userTests, - ...rest - }) { - - return Observable.from(userTests) - .map(function(test) { - - /* eslint-disable no-unused-vars */ - const assert = chai.assert; - const editor = { getValue() { return originalCode; }}; - /* eslint-enable no-unused-vars */ - - try { - if (test) { - /* eslint-disable no-eval */ - eval(common.reassembleTest(code, test)); - /* eslint-enable no-eval */ - } - } catch (e) { - test.err = e.message; - } - - return test; - }) - .toArray() - .map(tests => ({ ...rest, tests })); - }; - - return common; -}(window)); diff --git a/client/commonFramework/show-completion.js b/client/commonFramework/show-completion.js deleted file mode 100644 index f38f1281c22574..00000000000000 --- a/client/commonFramework/show-completion.js +++ /dev/null @@ -1,90 +0,0 @@ -window.common = (function(global) { - const { - $, - moment, - ga = (() => {}), - common = { init: [] } - } = global; - - function submitChallengeHandler(e) { - e.preventDefault(); - - var solution = common.editor.getValue(); - - $('#submit-challenge') - .attr('disabled', 'true') - .removeClass('btn-primary') - .addClass('btn-warning disabled'); - - var $checkmarkContainer = $('#checkmark-container'); - $checkmarkContainer.css({ height: $checkmarkContainer.innerHeight() }); - - $('#challenge-checkmark') - .addClass('zoomOutUp') - // .removeClass('zoomInDown') - .delay(1000) - .queue(function(next) { - $(this).replaceWith( - '
' + - 'submitting...
' - ); - next(); - }); - - let timezone = 'UTC'; - try { - timezone = moment.tz.guess(); - } catch (err) { - err.message = ` - known bug, see: https://github.com/moment/moment-timezone/issues/294: - ${err.message} - `; - console.error(err); - } - const data = JSON.stringify({ - id: common.challengeId, - name: common.challengeName, - challengeType: +common.challengeType, - solution, - timezone - }); - - $.ajax({ - url: '/completed-challenge/', - type: 'POST', - data, - contentType: 'application/json', - dataType: 'json' - }) - .success(function(res) { - if (res) { - window.location = - '/challenges/next-challenge?id=' + common.challengeId; - } - }) - .fail(function() { - window.location.replace(window.location.href); - }); - } - - common.showCompletion = function showCompletion() { - - ga( - 'send', - 'event', - 'Challenge', - 'solved', - common.gaName, - true - ); - - $('#complete-courseware-dialog').modal('show'); - $('#complete-courseware-dialog .modal-header').click(); - - $('#submit-challenge').off('click'); - $('#submit-challenge').on('click', submitChallengeHandler); - }; - - return common; -}(window)); diff --git a/client/commonFramework/step-challenge.js b/client/commonFramework/step-challenge.js deleted file mode 100644 index 97a19754d3dd18..00000000000000 --- a/client/commonFramework/step-challenge.js +++ /dev/null @@ -1,200 +0,0 @@ -window.common = (function({ $, common = { init: [] }}) { - const stepClass = '.challenge-step'; - const prevBtnClass = '.challenge-step-btn-prev'; - const nextBtnClass = '.challenge-step-btn-next'; - const actionBtnClass = '.challenge-step-btn-action'; - const finishBtnClass = '.challenge-step-btn-finish'; - const submitBtnId = '#challenge-step-btn-submit'; - const submitModalId = '#challenge-step-modal'; - - function getPreviousStep($challengeSteps) { - var $prevStep = false; - var prevStepIndex = 0; - $challengeSteps.each(function(index) { - var $step = $(this); - if (!$step.hasClass('hidden')) { - prevStepIndex = index - 1; - } - }); - - $prevStep = $challengeSteps[prevStepIndex]; - - return $prevStep; - } - - function getNextStep($challengeSteps) { - var length = $challengeSteps.length; - var $nextStep = false; - var nextStepIndex = 0; - $challengeSteps.each(function(index) { - var $step = $(this); - if ( - !$step.hasClass('hidden') && - index + 1 !== length - ) { - nextStepIndex = index + 1; - } - }); - - $nextStep = $challengeSteps[nextStepIndex]; - - return $nextStep; - } - - function handlePrevStepClick(e) { - e.preventDefault(); - var prevStep = getPreviousStep($(stepClass)); - $(this) - .parent() - .parent() - .removeClass('slideInLeft slideInRight') - .addClass('animated fadeOutRight fast-animation') - .delay(250) - .queue(function(prev) { - $(this).addClass('hidden'); - if (prevStep) { - $(prevStep) - .removeClass('hidden') - .removeClass('fadeOutLeft fadeOutRight') - .addClass('animated slideInLeft fast-animation') - .delay(500) - .queue(function(prev) { - prev(); - }); - } - prev(); - }); - } - - function handleNextStepClick(e) { - e.preventDefault(); - var nextStep = getNextStep($(stepClass)); - $(this) - .parent() - .parent() - .removeClass('slideInRight slideInLeft') - .addClass('animated fadeOutLeft fast-animation') - .delay(250) - .queue(function(next) { - $(this).addClass('hidden'); - if (nextStep) { - $(nextStep) - .removeClass('hidden') - .removeClass('fadeOutRight fadeOutLeft') - .addClass('animated slideInRight fast-animation') - .delay(500) - .queue(function(next) { - next(); - }); - } - next(); - }); - } - - function handleActionClick(e) { - var props = common.challengeSeed[0] || { stepIndex: [] }; - - var $el = $(this); - var index = +$el.attr('id'); - var propIndex = props.stepIndex.indexOf(index); - - if (propIndex === -1) { - return $el.parent() - .find('.disabled') - .removeClass('disabled'); - } - - // an API action - // prevent link from opening - e.preventDefault(); - var prop = props.properties[propIndex]; - var api = props.apis[propIndex]; - if (common[prop]) { - return $el.parent() - .find('.disabled') - .removeClass('disabled'); - } - return $.post(api) - .done(function(data) { - // assume a boolean indicates passing - if (typeof data === 'boolean') { - return $el.parent() - .find('.disabled') - .removeClass('disabled'); - } - // assume api returns string when fails - return $el.parent() - .find('.disabled') - .replaceWith('

' + data + '

'); - }) - .fail(function() { - console.log('failed'); - }); - } - - function handleFinishClick(e) { - e.preventDefault(); - $(submitModalId).modal('show'); - $(submitModalId + '.modal-header').click(); - $(submitBtnId).click(handleSubmitClick); - } - - function handleSubmitClick(e) { - e.preventDefault(); - - $('#submit-challenge') - .attr('disabled', 'true') - .removeClass('btn-primary') - .addClass('btn-warning disabled'); - - var $checkmarkContainer = $('#checkmark-container'); - $checkmarkContainer.css({ height: $checkmarkContainer.innerHeight() }); - - $('#challenge-checkmark') - .addClass('zoomOutUp') - .delay(1000) - .queue(function(next) { - $(this).replaceWith( - '
' + - 'submitting...
' - ); - next(); - }); - - $.ajax({ - url: '/completed-challenge/', - type: 'POST', - data: JSON.stringify({ - id: common.challengeId, - name: common.challengeName, - challengeType: +common.challengeType - }), - contentType: 'application/json', - dataType: 'json' - }) - .success(function(res) { - if (res) { - window.location = - '/challenges/next-challenge?id=' + common.challengeId; - } - }) - .fail(function() { - window.location.replace(window.location.href); - }); - } - - common.init.push(function($) { - if (common.challengeType !== '7') { - return null; - } - - $(prevBtnClass).click(handlePrevStepClick); - $(nextBtnClass).click(handleNextStepClick); - $(actionBtnClass).click(handleActionClick); - $(finishBtnClass).click(handleFinishClick); - return null; - }); - - return common; -}(window)); diff --git a/client/commonFramework/update-preview.js b/client/commonFramework/update-preview.js deleted file mode 100644 index db6888cadf1a5a..00000000000000 --- a/client/commonFramework/update-preview.js +++ /dev/null @@ -1,154 +0,0 @@ -window.common = (function(global) { - const { - Rx: { BehaviorSubject, Observable }, - common = { init: [] } - } = global; - - // the first script tag here is to proxy jQuery - // We use the same jQuery on the main window but we change the - // context to that of the iframe. - var libraryIncludes = ` - - - - - - - `; - const codeDisabledError = ` - - `; - - const iFrameScript$ = - common.getScriptContent$('/js/iFrameScripts.js').shareReplay(); - const jQueryScript$ = common.getScriptContent$( - '/bower_components/jquery/dist/jquery.js' - ).shareReplay(); - - // behavior subject allways remembers the last value - // we use this to determine if runPreviewTest$ is defined - // and prime it with false - common.previewReady$ = new BehaviorSubject(false); - - // These should be set up in the preview window - // if this error is seen it is because the function tried to run - // before the iframe has completely loaded - common.runPreviewTests$ = - common.checkPreview$ = - () => Observable.throw(new Error('Preview not fully loaded')); - - - common.updatePreview$ = function updatePreview$(code = '') { - const preview = common.getIframe('preview'); - - return Observable.combineLatest( - iFrameScript$, - jQueryScript$, - (iframe, jQuery) => ({ - iframeScript: ``, - jQuery: `` - }) - ) - .first() - .flatMap(({ iframeScript, jQuery }) => { - // we make sure to override the last value in the - // subject to false here. - common.previewReady$.onNext(false); - preview.open(); - preview.write( - libraryIncludes + - jQuery + - (common.shouldRun() ? code : codeDisabledError) + - '' + - iframeScript - ); - preview.close(); - // now we filter false values and wait for the first true - return common.previewReady$ - .filter(ready => ready) - .first() - // the delay here is to give code within the iframe - // control to run - .delay(400); - }) - .map(() => code); - }; - - return common; -}(window)); diff --git a/client/sagas/README.md b/client/epics/README.md similarity index 100% rename from client/sagas/README.md rename to client/epics/README.md diff --git a/client/sagas/analytics-saga.js b/client/epics/analytics-epic.js similarity index 88% rename from client/sagas/analytics-saga.js rename to client/epics/analytics-epic.js index 9df6fcbf99cf11..da9207d167ce44 100644 --- a/client/sagas/analytics-saga.js +++ b/client/epics/analytics-epic.js @@ -1,5 +1,5 @@ import { Observable } from 'rx'; -import { createErrorObservable } from '../../common/app/redux/actions'; +import { createErrorObservable } from '../../common/app/redux'; import capitalize from 'lodash/capitalize'; // analytics types @@ -27,7 +27,7 @@ function formatFields({ type, ...fields }) { }, { type }); } -export default function analyticsSaga(actions, getState, { window }) { +export default function analyticsSaga(actions, _, { window }) { const { ga } = window; if (typeof ga !== 'function') { console.log('GA not found'); @@ -39,5 +39,6 @@ export default function analyticsSaga(actions, getState, { window }) { .filter(Boolean) // ga always returns undefined .map(({ type, ...fields }) => ga('send', type, fields)) + .ignoreElements() .catch(createErrorObservable); } diff --git a/client/epics/err-epic.js b/client/epics/err-epic.js new file mode 100644 index 00000000000000..12c0689843575e --- /dev/null +++ b/client/epics/err-epic.js @@ -0,0 +1,10 @@ +import { makeToast } from '../../common/app/Toasts/redux'; + +export default function errorSaga(actions) { + return actions.filter(({ error }) => !!error) + .map(({ error }) => error) + .doOnNext(error => console.error(error)) + .map(() => makeToast({ + message: 'Something went wrong, please try again later' + })); +} diff --git a/client/epics/hard-go-to-epic.js b/client/epics/hard-go-to-epic.js new file mode 100644 index 00000000000000..895ee49b70986d --- /dev/null +++ b/client/epics/hard-go-to-epic.js @@ -0,0 +1,14 @@ +import _ from 'lodash'; +import { ofType } from 'redux-epic'; + +import { types } from '../../common/app/redux'; + +export default function hardGoToSaga(actions, store, { location }) { + return actions::ofType(types.hardGoTo) + .pluck('payload') + .filter(_.isString) + .do((payload = '/') => { + location.pathname = payload; + }) + .ignoreElements(); +} diff --git a/client/epics/index.js b/client/epics/index.js new file mode 100644 index 00000000000000..d17b5a70e5aa32 --- /dev/null +++ b/client/epics/index.js @@ -0,0 +1,15 @@ +import analyticsEpic from './analytics-epic.js'; +import errEpic from './err-epic.js'; +import hardGoToEpic from './hard-go-to-epic.js'; +import mouseTrapEpic from './mouse-trap-epic.js'; +import nightModeEpic from './night-mode-epic.js'; +import titleEpic from './title-epic.js'; + +export default [ + analyticsEpic, + errEpic, + hardGoToEpic, + mouseTrapEpic, + nightModeEpic, + titleEpic +]; diff --git a/client/epics/mouse-trap-epic.js b/client/epics/mouse-trap-epic.js new file mode 100644 index 00000000000000..b5a6298d66b437 --- /dev/null +++ b/client/epics/mouse-trap-epic.js @@ -0,0 +1,52 @@ +import { Observable } from 'rx'; +import MouseTrap from 'mousetrap'; +import { push } from 'redux-first-router'; +import { + toggleNightMode, + hardGoTo +} from '../../common/app/redux'; +import { + aboutUrl, + donateUrl, + forumUrl, + githubUrl +} from '../../common/utils/constantStrings.json'; + +function bindKey(key, actionCreator) { + return Observable.fromEventPattern( + h => MouseTrap.bind(key, h), + h => MouseTrap.unbind(key, h) + ) + .map(actionCreator); +} + +const softRedirects = { + 'g n n': '/challenges/next-challenge', + 'g n m': '/map', + 'g n o': '/settings' +}; + +export default function mouseTrapSaga(actions) { + const traps = [ + ...Object.keys(softRedirects) + .map(key => bindKey(key, () => push(softRedirects[key]))), + bindKey( + 'g n a', + () => hardGoTo(aboutUrl) + ), + bindKey( + 'g n r', + () => hardGoTo(githubUrl) + ), + bindKey( + 'g n d', + () => hardGoTo(donateUrl) + ), + bindKey( + 'g n w', + () => hardGoTo(forumUrl) + ), + bindKey('g t n', toggleNightMode) + ]; + return Observable.merge(traps).takeUntil(actions.last()); +} diff --git a/client/epics/night-mode-epic.js b/client/epics/night-mode-epic.js new file mode 100644 index 00000000000000..58b4b013546e33 --- /dev/null +++ b/client/epics/night-mode-epic.js @@ -0,0 +1,59 @@ +import _ from 'lodash'; +import { Observable } from 'rx'; +import { ofType } from 'redux-epic'; +import store from 'store'; + +import { themes } from '../../common/utils/themes.js'; +import { postJSON$ } from '../../common/utils/ajax-stream.js'; +import { + types, + + postThemeComplete, + createErrorObservable, + + themeSelector, + usernameSelector, + csrfSelector +} from '../../common/app/redux'; + +function persistTheme(theme) { + store.set('fcc-theme', theme); +} + +export default function nightModeSaga( + actions, + { getState }, + { document: { body } } +) { + const toggleBodyClass = actions + ::ofType( + types.fetchUser.complete, + types.toggleNightMode, + types.postThemeComplete + ) + .map(_.flow(getState, themeSelector)) + // catch existing night mode users + .do(persistTheme) + .do(theme => { + if (theme === themes.night) { + body.classList.add(themes.night); + } else { + body.classList.remove(themes.night); + } + }) + .ignoreElements(); + + const postThemeEpic = actions::ofType(types.toggleNightMode) + .debounce(250) + .flatMapLatest(() => { + const _csrf = csrfSelector(getState()); + const theme = themeSelector(getState()); + const username = usernameSelector(getState()); + return postJSON$('/update-my-theme', { _csrf, theme }) + .pluck('updatedTo') + .map(theme => postThemeComplete(username, theme)) + .catch(createErrorObservable); + }); + + return Observable.merge(toggleBodyClass, postThemeEpic); +} diff --git a/client/epics/title-epic.js b/client/epics/title-epic.js new file mode 100644 index 00000000000000..4a9656c4f8cba8 --- /dev/null +++ b/client/epics/title-epic.js @@ -0,0 +1,10 @@ +import { ofType } from 'redux-epic'; +import { types, titleSelector } from '../../common/app/redux'; + +export default function titleSage(actions, { getState }, { document }) { + return actions::ofType(types.updateTitle) + .do(() => { + document.title = titleSelector(getState()); + }) + .ignoreElements(); +} diff --git a/client/frame-runner.js b/client/frame-runner.js index e6e038a248aca4..3f995abce017da 100644 --- a/client/frame-runner.js +++ b/client/frame-runner.js @@ -1,14 +1,41 @@ document.addEventListener('DOMContentLoaded', function() { - var common = parent.__common; - var frameId = window.__frameId; - var frameReady = common[frameId + 'Ready$'] || { onNext() {} }; + var testTimeout = 5000; var Rx = document.Rx; + var frameReady = document.__frameReady; + var helpers = Rx.helpers; var chai = parent.chai; var source = document.__source; + var __getUserInput = document.__getUserInput || (x => x); + var checkChallengePayload = document.__checkChallengePayload; + + // Fake Deep Equal dependency + /* eslint-disable no-unused-vars */ + const DeepEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b); + + // Hardcode Deep Freeze dependency + var DeepFreeze = (o) => { + Object.freeze(o); + Object.getOwnPropertyNames(o).forEach(function(prop) { + if (o.hasOwnProperty(prop) + && o[prop] !== null + && ( + typeof o[prop] === 'object' || + typeof o[prop] === 'function' + ) + && !Object.isFrozen(o[prop])) { + DeepFreeze(o[prop]); + } + }); + return o; + }; + + if (document.Enzyme) { + window.Enzyme = document.Enzyme; + } document.__getJsOutput = function getJsOutput() { - if (window.__err || !common.shouldRun()) { - return window.__err || 'source disabled'; + if (window.__err) { + return window.__err; } let output; try { @@ -22,13 +49,25 @@ document.addEventListener('DOMContentLoaded', function() { return output; }; - document.__runTests$ = function runTests$(tests = []) { + document.__runTests = function runTests(tests = []) { /* eslint-disable no-unused-vars */ - const editor = { getValue() { return source; } }; const code = source; + const editor = { + getValue() { return source; } + }; /* eslint-enable no-unused-vars */ if (window.__err) { - return Rx.Observable.throw(window.__err); + return Rx.Observable.from(tests) + .map(test => { + return { + ...test, + err: window.__err.message + '\n' + window.__err.stack, + message: window.__err.message, + stack: window.__err.stack + }; + }) + .toArray() + .do(() => { window.__err = null; }); } // Iterate through the test one at a time @@ -37,37 +76,75 @@ document.addEventListener('DOMContentLoaded', function() { // add delay here for firefox to catch up .delay(200) /* eslint-disable no-unused-vars */ - .map(({ text, testString }) => { + .flatMap(({ text, testString }) => { const assert = chai.assert; - /* eslint-enable no-unused-vars */ + const getUserInput = __getUserInput; + /* eslint-enable no-unused-vars */ const newTest = { text, testString }; let test; + let __result; + + // uncomment the following line to inspect + // the framerunner as it runs tests + // make sure the dev tools console is open + // debugger; try { /* eslint-disable no-eval */ + // eval test string to actual JavaScript + // This return can be a function + // i.e. function() { assert(true, 'happy coding'); } test = eval(testString); /* eslint-enable no-eval */ if (typeof test === 'function') { - // maybe sync/promise/observable - if (test.length === 0) { - test(); - } - // callback test - if (test.length === 1) { - console.log('callback test'); + + // all async tests must return a promise or observable + // sync tests can return Any type + __result = test(getUserInput); + + if (helpers.isPromise(__result)) { + // turn promise into an observable + __result = Rx.Observable.fromPromise(__result); } } + + if (!__result || typeof __result.subscribe !== 'function') { + // make sure result is an observable + __result = Rx.Observable.of(null); + } } catch (e) { - newTest.err = e.message + '\n' + e.stack; - } - if (!newTest.err) { - newTest.pass = true; + // something threw an uncaught error + // we catch here and wrap it in an observable + __result = Rx.Observable.throw(e); } - return newTest; + return __result + .timeout(testTimeout) + .map(() => { + // we don't need the result of a promise/observable/cb here + // all data asserts should happen further up the chain + // mark test as passing + newTest.pass = true; + return newTest; + }) + .catch(err => { + // we catch the error here to prevent the error from bubbling up + // and collapsing the pipe + let message = (err.message || ''); + const assertIndex = message.indexOf(': expected'); + if (assertIndex !== -1) { + message = message.slice(0, assertIndex); + } + message = message.replace(/(.*?)<\/code>/g, '$1'); + newTest.err = err.message + '\n' + err.stack; + newTest.stack = err.stack; + newTest.message = message; + // RxJS catch expects an observable as a return + return Rx.Observable.of(newTest); + }); }) // gather tests back into an array .toArray(); }; // notify that the window methods are ready to run - frameReady.onNext(null); + frameReady.onNext({ checkChallengePayload }); }); diff --git a/client/index.js b/client/index.js index c2c98abb6f47c9..d67cd8f7b941a2 100644 --- a/client/index.js +++ b/client/index.js @@ -1,24 +1,17 @@ import './es6-shims'; import Rx from 'rx'; -import React from 'react'; import debug from 'debug'; -import { Router } from 'react-router'; -import { - routerMiddleware, - routerReducer as routing, - syncHistoryWithStore -} from 'react-router-redux'; import { render } from 'redux-epic'; -import { createHistory } from 'history'; +import createHistory from 'history/createBrowserHistory'; import useLangRoutes from './utils/use-lang-routes'; import sendPageAnalytics from './utils/send-page-analytics'; import flashToToast from './utils/flash-to-toast'; -import createApp from '../common/app'; -import provideStore from '../common/app/provide-store'; +import { App, createApp, provideStore } from '../common/app'; +import { getLangFromPath } from '../common/app/utils/lang'; -// client specific sagas -import sagas from './sagas'; +// client specific epics +import epics from './epics'; import { isColdStored, @@ -28,26 +21,28 @@ import { const isDev = Rx.config.longStackSupport = debug.enabled('fcc:*'); const log = debug('fcc:client'); -const hotReloadTimeout = 5000; -const csrfToken = window.__fcc__.csrf.token; +const hotReloadTimeout = 2000; +const { csrf: { token: csrfToken } = {} } = window.__fcc__; const DOMContainer = document.getElementById('fcc'); -const initialState = isColdStored() ? +const defaultState = isColdStored() ? getColdStorage() : window.__fcc__.data; -initialState.app.csrfToken = csrfToken; -initialState.toasts = flashToToast(window.__fcc__.flash); +const primaryLang = getLangFromPath(window.location.pathname); + +defaultState.app.csrfToken = csrfToken; +defaultState.toasts = flashToToast(window.__fcc__.flash); -delete window.__fcc__; +// make empty object so hot reload works +window.__fcc__ = {}; const serviceOptions = { xhrPath: '/services', context: { _csrf: csrfToken } }; -const history = useLangRoutes(createHistory)(); +const history = useLangRoutes(createHistory, primaryLang)(); sendPageAnalytics(history, window.ga); const devTools = window.devToolsExtension ? window.devToolsExtension() : f => f; -const adjustUrlOnReplay = !!window.devToolsExtension; -const sagaOptions = { +const epicOptions = { isDev, window, document: window.document, @@ -57,32 +52,25 @@ const sagaOptions = { createApp({ history, - syncHistoryWithStore, - syncOptions: { adjustUrlOnReplay }, serviceOptions, - initialState, - middlewares: [ routerMiddleware(history) ], - sagas: [...sagas ], - sagaOptions, - reducers: { routing }, + defaultState, + epics, + epicOptions, enhancers: [ devTools ] }) .doOnNext(({ store }) => { if (module.hot && typeof module.hot.accept === 'function') { - module.hot.accept('../common/app', function() { + module.hot.accept(err => { + if (err) { console.error(err); } + log('saving state and refreshing.'); + log('ignore react ssr warning.'); saveToColdStorage(store.getState()); setTimeout(() => window.location.reload(), hotReloadTimeout); }); } }) .doOnNext(() => log('rendering')) - .flatMap( - ({ props, store }) => render( - provideStore(React.createElement(Router, props), store), - DOMContainer - ), - ({ store }) => store - ) + .flatMap(({ store }) => render(provideStore(App, store), DOMContainer)) .subscribe( () => debug('react rendered'), err => { throw err; }, diff --git a/client/less/challenge.less b/client/less/challenge.less deleted file mode 100644 index ceaf40c2a82f76..00000000000000 --- a/client/less/challenge.less +++ /dev/null @@ -1,220 +0,0 @@ -.challenges-instructions-panel { - clear: both; - overflow-x: hidden; - overflow-y: auto; - padding-left: 5px; - padding-right: 5px; - margin-bottom: 10px; -} - -.challenge-step-description { - font-size: 1.5em; -} -.challenge-step-counter { - font-size: 20px; - line-height: 44px; -} - -.challenge-step-forward-leave { - transition: opacity .4s ease-in, transform .3s ease-in-out; - opacity: 1; - transform: translate(0, 0); -} - -.challenge-step-forward-leave-active { - opacity: 0; - transform: translate(-100%, 0); -} - -.challenge-step-forward-enter { - transition: opacity .4s ease-in, transform .3s ease-in-out; - opacity: 0; - transform: translate(100%, 0); -} - -.challenge-step-forward-enter-active { - opacity: 1; - transform: translate(0, 0); -} - -.challenge-step-backward-leave { - transition: opacity .4s ease-in, transform .3s ease-in-out; - opacity: 1; - transform: translate(0, 0); -} - -.challenge-step-backward-leave-active { - opacity: 0; - transform: translate(100%, 0); -} - -.challenge-step-backward-enter { - transition: opacity .4s ease-in, transform .3s ease-in-out; - opacity: 0; - transform: translate(-100%, 0); -} - -.challenge-step-backward-enter-active { - opacity: 1; - transform: translate(0, 0); -} - -.challenge-instructions-title { - margin-top: 0; - i { - margin-left: 5px; - line-height: 20px; - } -} - -.challenge-instructions { - margin-bottom: 5px; - h4 { - margin-bottom: 0; - } - blockquote { - font-size: 90%; - font-family: @font-family-monospace; - color: @code-color; - background-color: #fffbe5; - border-radius: @border-radius-base; - border: 1px solid @pre-border-color; - white-space: pre; - padding: 5px 10px; - margin-bottom: 10px; - margin-top: -5px; - overflow: auto; - } - dfn { - font-family: @font-family-monospace; - color: @code-color; - background-color: @code-bg; - border-radius: @border-radius-base; - } - & a, #MDN-links a { - color: #31708f; - } - & a::after, #MDN-links a::after { - font-size: 70%; - font-family: FontAwesome; - content: " \f08e"; - } - ol { - font-size: 16px; - } -} - -.challenge-test-suite { - margin-top: 10px; - & .row { - margin: 0!important; - } -} - -.test-output { - font-size: 15px; - font-family: "Ubuntu Mono"; - margin-top: 8px; - line-height:20px; -} - -.grayed-out-test-output { - color: @gray-light; -} - -.big-icon { - font-size: 30px; -} - -.error-icon { - color: @brand-danger; - top: 50%; -} - -.success-icon { - color: @brand-primary; -} - -.refresh-icon { - color: @alert-info-bg; -} - -.night { - .challenge-instructions blockquote { - background-color: #242424; - border-color: #515151; - color: #ABABAB - } - .CodeMirror { - background-color:#242424; - color:#ABABAB; - &-gutters { - background-color:#242424; - color:#ABABAB; - } - .cm-bracket, .cm-tag { - color:#5CAFD6; - } - .cm-property, .cm-string { - color:#B5753A; - } - .cm-keyword, .cm-attribute { - color:#9BBBDC; - } - } -} - -.challenges-editor { - height: auto; - width: 100%; - overflow-y: auto; -} - -.challenges-preview { - clear: both; - overflow: hidden; -} - -@media only screen and (min-width: 993px) { - .iframe-scroll { - z-index: 1; - } -} -@media only screen and (max-width: 992px) { - .iframe-scroll { - height: auto; - overflow: auto; - } -} - -iframe.iphone { - border: none; - @media(min-width: 992px) { - width: 280px; - height: 497px; - position: absolute; - top: 75px; - right: 35px; - overflow-y: scroll; - } - @media(max-width: 991px) { - width: 100%; - border-radius: 5px; - overflow-y: visible; - height: 500px; - } - @media (min-width: 1200px) and (max-width: 1250px){ - right: 22px; - } -} - -// To adjust right margin, negative values bring the image closer to the edge of the screen -.iphone-position { - position: absolute; - top: -45px; - z-index: -1; - right: -195px; - @media (min-width: 1200px) and (max-width: 1250px){ - right: -207px; - } -} \ No newline at end of file diff --git a/client/less/chat.less b/client/less/chat.less deleted file mode 100644 index 17ec64258d2265..00000000000000 --- a/client/less/chat.less +++ /dev/null @@ -1,25 +0,0 @@ -.chat-embed-help-title, -.chat-embed-main-title { - display: flex; - flex-grow: 1; - padding-left: 31px; - padding-top: 7px; -} - -.gitter-chat-embed { - z-index: 100; - position: fixed; - - top: 0; - left: 60%; - bottom: 0; - right: 0; - - display: flex; - flex-direction: row; - transition: transform 0.3s cubic-bezier(0.16, 0.22, 0.22, 1.7); -} - -.gitter-chat-embed.is-collapsed:not(.is-loading) { - transform: translateX(110%); -} diff --git a/client/less/code-mirror.less b/client/less/code-mirror.less index a2535218c1a7c1..79b87878745e9f 100644 --- a/client/less/code-mirror.less +++ b/client/less/code-mirror.less @@ -1,19 +1,25 @@ +.ReactCodeMirror { + height: 100%; +} + +.CodeMirror { + height: 100%; + line-height: 1 !important; +} + .CodeMirror span { - font-size: 18px; + font-size: 15px; font-family: "Ubuntu Mono"; padding-bottom: 0px; margin-bottom: 0px; height: 100%; } -.CodeMirror { - border-radius: 5px; - height: auto; - line-height: 1 !important; +.CodeMirror-gutters { + background-color: @body-bg; } - .CodeMirror-linenumber { - font-size: 18px; + font-size: 15px; font-family: "Ubuntu Mono"; } @@ -25,3 +31,7 @@ height: 100%; width: 100%; } + +.CodeMirror-lint-tooltip { + z-index: 9999; +} \ No newline at end of file diff --git a/client/less/drawers.less b/client/less/drawers.less deleted file mode 100644 index 102e412154bc43..00000000000000 --- a/client/less/drawers.less +++ /dev/null @@ -1,138 +0,0 @@ -/* - * based off of https://github.com/gitterHQ/sidecar - * license: MIT - */ -.drawer { - width:500px; - - z-index: 20000; - position: fixed; - top: 0; - bottom: 0; - right: 0; - - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - flex-direction: row; - background-color: @body-bg; - border-left: 1px solid #ddd; - box-shadow: -12px 0 18px 0 rgba(50, 50, 50, 0.1); - - transition: transform 0.3s cubic-bezier(0.16, 0.22, 0.22, 1.7); - - &.is-collapsed:not(.is-loading) { - -webkit-transform: translateX(110%); - transform: translateX(110%); - } - - /* Add some "extension" so that there isn't a gap - * when we translate(via animation) more than 100% */ - &:after { - content: ''; - - z-index: -1; - position: absolute; - top: 0; - left: 100%; - bottom: 0; - right: -100%; - - background-color: @body-bg; - } - iframe { - width: 100%; - height: 100%; - } - - h2 > a { - font-size: 20px; - } - a > h3 { - font-size: 18px; - font-weight: bold; - } - p { - font-size: 16px; - margin-left: 32px !important; - } - > .challenge-block-time { - width: 100%; - padding-top: 5px; - } -} - -.drawer-content { - overflow-y: auto; -} - -.drawer-action-bar { - position: absolute; - top: 0; - right: 0; - - display: -webkit-flex; - display: flex; - justify-content: flex-end; - - padding-bottom: 5px; - padding-right:10px; - padding-top:5px; - z-index: 100; -} - -.drawer-action-item { - display: -webkit-flex; - display: flex; - /* main axis */ - justify-content: center; - /* cross axis */ - align-items: center; - - width: 40px; - height: 40px; - - padding-left: 0; - padding-right: 0; - - opacity: 0.65; - background: none; - background-position: center center; - background-repeat: no-repeat; - background-size: 22px 22px; - border: 0; - outline: none; - - cursor: pointer; - cursor: hand; - - transition: all 0.2s ease; - - &:hover, - &:focus { - opacity: 1; - } - - &:active { - filter: hue-rotate(80deg) saturate(150); - } -} - -.drawer-action-pop-out { - margin-right: -4px; - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcxLjQyOSIgZmlsbD0iIzNhMzEzMyI+PHBhdGggZD0iTTE1Ny4xNDMsMTAzLjU3MXYzNS43MTRjMCw4Ljg1NC0zLjE0NCwxNi40MjYtOS40MzEsMjIuNzEzcy0xMy44NTgsOS40MzEtMjIuNzEyLDkuNDMxSDMyLjE0MyBjLTguODU0LDAtMTYuNDI1LTMuMTQ0LTIyLjcxMi05LjQzMVMwLDE0OC4xNCwwLDEzOS4yODVWNDYuNDI5YzAtOC44NTQsMy4xNDQtMTYuNDI1LDkuNDMxLTIyLjcxMiBjNi4yODctNi4yODcsMTMuODU4LTkuNDMxLDIyLjcxMi05LjQzMWg3OC41NzJjMS4wNDEsMCwxLjg5NiwwLjMzNSwyLjU2NiwxLjAwNGMwLjY3LDAuNjcsMS4wMDQsMS41MjUsMS4wMDQsMi41NjdWMjUgYzAsMS4wNDItMC4zMzQsMS44OTctMS4wMDQsMi41NjdjLTAuNjcsMC42Ny0xLjUyNSwxLjAwNC0yLjU2NiwxLjAwNEgzMi4xNDNjLTQuOTExLDAtOS4xMTUsMS43NDktMTIuNjEyLDUuMjQ2IHMtNS4yNDYsNy43MDEtNS4yNDYsMTIuNjEydjkyLjg1NmMwLDQuOTExLDEuNzQ5LDkuMTE1LDUuMjQ2LDEyLjYxMnM3LjcwMSw1LjI0NSwxMi42MTIsNS4yNDVIMTI1YzQuOTEsMCw5LjExNS0xLjc0OCwxMi42MTEtNS4yNDUgYzMuNDk3LTMuNDk3LDUuMjQ2LTcuNzAxLDUuMjQ2LTEyLjYxMnYtMzUuNzE0YzAtMS4wNDIsMC4zMzQtMS44OTcsMS4wMDQtMi41NjdjMC42Ny0wLjY2OSwxLjUyNS0xLjAwNCwyLjU2Ny0xLjAwNGg3LjE0MyBjMS4wNDIsMCwxLjg5NywwLjMzNSwyLjU2NywxLjAwNEMxNTYuODA5LDEwMS42NzQsMTU3LjE0MywxMDIuNTI5LDE1Ny4xNDMsMTAzLjU3MXogTTIwMCw3LjE0M3Y1Ny4xNDMgYzAsMS45MzUtMC43MDcsMy42MDktMi4xMjEsNS4wMjJjLTEuNDEzLDEuNDE0LTMuMDg4LDIuMTIxLTUuMDIxLDIuMTIxYy0xLjkzNSwwLTMuNjA5LTAuNzA3LTUuMDIyLTIuMTIxbC0xOS42NDQtMTkuNjQzIGwtNzIuNzY3LDcyLjc2OWMtMC43NDQsMC43NDQtMS42LDEuMTE1LTIuNTY3LDEuMTE1cy0xLjgyMy0wLjM3MS0yLjU2Ny0xLjExNUw3Ny41NjcsMTA5LjcxYy0wLjc0NC0wLjc0NC0xLjExNi0xLjYtMS4xMTYtMi41NjcgYzAtMC45NjcsMC4zNzItMS44MjIsMS4xMTYtMi41NjZsNzIuNzY4LTcyLjc2OGwtMTkuNjQ0LTE5LjY0M2MtMS40MTMtMS40MTQtMi4xMi0zLjA4OC0yLjEyLTUuMDIyYzAtMS45MzUsMC43MDctMy42MDksMi4xMi01LjAyMiBDMTMyLjEwNSwwLjcwNywxMzMuNzc5LDAsMTM1LjcxNSwwaDU3LjE0M2MxLjkzNCwwLDMuNjA4LDAuNzA3LDUuMDIxLDIuMTIxQzE5OS4yOTMsMy41MzQsMjAwLDUuMjA4LDIwMCw3LjE0M3oiLz48L3N2Zz4=) -} - -.drawer-action-collapse { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzEuNDI5IDE3MS40MjkiIGZpbGw9IiMzYTMxMzMiPjxwYXRoIGQ9Ik0xMjIuNDMzLDEwNi4xMzhsLTE2LjI5NSwxNi4yOTVjLTAuNzQ0LDAuNzQ0LTEuNiwxLjExNi0yLjU2NiwxLjExNmMtMC45NjgsMC0xLjgyMy0wLjM3Mi0yLjU2Ny0xLjExNmwtMTUuMjktMTUuMjkgbC0xNS4yOSwxNS4yOWMtMC43NDQsMC43NDQtMS42LDEuMTE2LTIuNTY3LDEuMTE2cy0xLjgyMy0wLjM3Mi0yLjU2Ny0xLjExNmwtMTYuMjk0LTE2LjI5NWMtMC43NDQtMC43NDQtMS4xMTYtMS42LTEuMTE2LTIuNTY2IGMwLTAuOTY4LDAuMzcyLTEuODIzLDEuMTE2LTIuNTY3bDE1LjI5LTE1LjI5bC0xNS4yOS0xNS4yOWMtMC43NDQtMC43NDQtMS4xMTYtMS42LTEuMTE2LTIuNTY3czAuMzcyLTEuODIzLDEuMTE2LTIuNTY3IEw2NS4yOSw0OC45OTZjMC43NDQtMC43NDQsMS42LTEuMTE2LDIuNTY3LTEuMTE2czEuODIzLDAuMzcyLDIuNTY3LDEuMTE2bDE1LjI5LDE1LjI5bDE1LjI5LTE1LjI5IGMwLjc0NC0wLjc0NCwxLjYtMS4xMTYsMi41NjctMS4xMTZjMC45NjcsMCwxLjgyMiwwLjM3MiwyLjU2NiwxLjExNmwxNi4yOTUsMTYuMjk0YzAuNzQ0LDAuNzQ0LDEuMTE2LDEuNiwxLjExNiwyLjU2NyBzLTAuMzcyLDEuODIzLTEuMTE2LDIuNTY3bC0xNS4yOSwxNS4yOWwxNS4yOSwxNS4yOWMwLjc0NCwwLjc0NCwxLjExNiwxLjYsMS4xMTYsMi41NjcgQzEyMy41NDksMTA0LjUzOSwxMjMuMTc3LDEwNS4zOTQsMTIyLjQzMywxMDYuMTM4eiBNMTQ2LjQyOSw4NS43MTRjMC0xMS4wMTItMi43MTctMjEuMTY4LTguMTQ4LTMwLjQ2OSBzLTEyLjc5Ny0xNi42NjctMjIuMDk4LTIyLjA5OFM5Ni43MjYsMjUsODUuNzE0LDI1cy0yMS4xNjgsMi43MTYtMzAuNDY5LDguMTQ3UzM4LjU3OSw0NS45NDUsMzMuMTQ3LDU1LjI0NlMyNSw3NC43MDMsMjUsODUuNzE0IHMyLjcxNiwyMS4xNjgsOC4xNDcsMzAuNDY5czEyLjc5NywxNi42NjYsMjIuMDk4LDIyLjA5OHMxOS40NTcsOC4xNDgsMzAuNDY5LDguMTQ4czIxLjE2OC0yLjcxNywzMC40NjktOC4xNDggczE2LjY2Ni0xMi43OTcsMjIuMDk4LTIyLjA5OFMxNDYuNDI5LDk2LjcyNiwxNDYuNDI5LDg1LjcxNHogTTE3MS40MjksODUuNzE0YzAsMTUuNTUxLTMuODMyLDI5Ljg5My0xMS40OTYsNDMuMDI0IGMtNy42NjQsMTMuMTMzLTE4LjA2MiwyMy41My0zMS4xOTQsMzEuMTk0Yy0xMy4xMzIsNy42NjQtMjcuNDc0LDExLjQ5Ni00My4wMjQsMTEuNDk2cy0yOS44OTItMy44MzItNDMuMDI0LTExLjQ5NiBjLTEzLjEzMy03LjY2NC0yMy41MzEtMTguMDYyLTMxLjE5NC0zMS4xOTRDMy44MzIsMTE1LjYwNywwLDEwMS4yNjUsMCw4NS43MTRTMy44MzIsNTUuODIyLDExLjQ5Niw0Mi42OSBjNy42NjQtMTMuMTMzLDE4LjA2Mi0yMy41MzEsMzEuMTk0LTMxLjE5NEM1NS44MjIsMy44MzIsNzAuMTY0LDAsODUuNzE0LDBzMjkuODkzLDMuODMyLDQzLjAyNCwxMS40OTYgYzEzLjEzMyw3LjY2NCwyMy41MywxOC4wNjIsMzEuMTk0LDMxLjE5NEMxNjcuNTk3LDU1LjgyMiwxNzEuNDI5LDcwLjE2NCwxNzEuNDI5LDg1LjcxNHoiLz48L3N2Zz4=) -} - -.night { - .drawer { - background-color: @night-body-bg; - } - .drawer-action-item{ - filter: brightness(4) saturate(0); - -webkit-filter: brightness(4) saturate(0); - } -} diff --git a/client/less/flexgrid.less b/client/less/flexgrid.less new file mode 100644 index 00000000000000..de154c4482a09c --- /dev/null +++ b/client/less/flexgrid.less @@ -0,0 +1,117 @@ +.justify-mixin(start) { justify-content: flex-start } +.justify-mixin(end) { justify-content: flex-end } +.justify-mixin(center) { justify-content: center } +.justify-mixin(around) { justify-content: space-around } +.justify-mixin(between) { justify-content: between } +.justify-mixin(@_) {} + +.items-mixin(top) { align-items: flex-start; } +.items-mixin(bottom) { align-items: flex-end; } +.items-mixin(center) { align-items: center; } +.items-mixin(stretch) { align-items: stretch; } +.items-mixin(baseline) { align-items: baseline; } +.items-mixin(@_) {} + +.item-mixin(top) { align-self: flex-start; } +.item-mixin(bottom) { align-self: flex-end; } +.item-mixin(center) { align-self: center; } +.item-mixin(stretch) { align-self: stretch; } +.item-mixin(baseline) { align-self: baseline; } +.item-mixin(@_) {} + +.content-mixin(top) { align-content: flex-start; } +.content-mixin(bottom) { align-content: flex-end; } +.content-mixin(center) { align-content: center; } +.content-mixin(stretch) { align-content: stretch; } +.content-mixin(baseline) { align-content: baseline; } +.content-mixin(@_) {} + +.grid(@direction: row; @items: none; @justify: none; @content: none) { + display: flex; + flex-wrap: wrap; + flex-direction: @direction; + + .justify-mixin(@justify); + .items-mixin(@item); + .content-mixin(@content); +} + +.row(@items: none; @justify: none; @content: none) { + .grid(@direction: row, @items, @justify, @content); +} + +.column(@items: none; @justify: none; @content: none) { + .grid(@direction: column; @items; @justify; @content); +} + +.margin-mixin(@g) when not (@g = 0) { + margin: @g / 2; +} + +.cell(@i: 1; @item; @g: @grid-gutter-width; @cols: @grid-columns) { + flex-basis: %('calc(100% * %s - %s)', @i / @cols, @g); + min-width: 0; // FF adjustment for responsive images + .item-mixin(@item); + .margin-mixin(@g); +} + +.cell-offset(@i: 1; @g: @grid-gutter-width; @cols: @grid-columns) { + margin-left: e%('calc(100% * %s + %s)', @i / @cols, @g / 2) !important; +} + +.padding-mixin(@pad) when (@pad) { + padding-left: @pad; + padding-right: @pad; +} + +// center an element +.center(@value: 50%; @padding: 0) { + margin-left: auto; + margin-right: auto; + max-width: @value; + width: 100%; + + .padding-mixin(@padding); +} + +.between(@min; @max; @rules) { + // BS logic to do string building with conditions + .condition-wrapper(@new) { + .redefine-condition() { + @condition: @new; + } + } + .init-condition() { + .condition-wrapper('only screen'); + } + .init-condition(); + .add-min-media(@min) when (iskeyword(@min)) { + .redefine-condition(); + .condition-wrapper(%('%s and (min-width: @{screen-%s})', @condition, @min)); + } + + .add-max-media(@max) when (iskeyword(@max)) { + .redefine-condition(); + .condition-wrapper(%('%s and (max-width: @{screen-%s})', @condition, @max)); + } + .add-min-media(@min); + .add-max-media(@max); + + .add-query() { + .redefine-condition(); + @query: e(@condition); + @media @query { + @rules(); + } + } + + .add-query(); +} + +.below(@max, @rules) { + .between(@empty; @max; @rules); +} + +.above(@min, @rules) { + .between(@min; @empty; @rules); +} diff --git a/client/less/jobs.less b/client/less/jobs.less deleted file mode 100644 index e1d20aa500db8a..00000000000000 --- a/client/less/jobs.less +++ /dev/null @@ -1,16 +0,0 @@ -.jobs-list-highlight { - background-color: #ffc -} - -a.jobs-list-highlight:hover { - background-color: #ffc -} - -.jobs-list { - cursor: pointer; - cursor: hand; -} - -.jobs-checkbox-spacer input[type="checkbox"] { - margin-left: -23px -} diff --git a/client/less/lib/bootstrap/bootstrap.less b/client/less/lib/bootstrap/bootstrap.less index 61b77474f9ad6e..4f85a0dd36f8bf 100755 --- a/client/less/lib/bootstrap/bootstrap.less +++ b/client/less/lib/bootstrap/bootstrap.less @@ -35,7 +35,6 @@ @import "media.less"; @import "list-group.less"; @import "panels.less"; -@import "responsive-embed.less"; @import "wells.less"; @import "close.less"; diff --git a/client/less/lib/bootstrap/dropdowns.less b/client/less/lib/bootstrap/dropdowns.less index 84a48c14135502..19fa1fee157da1 100755 --- a/client/less/lib/bootstrap/dropdowns.less +++ b/client/less/lib/bootstrap/dropdowns.less @@ -33,7 +33,8 @@ z-index: @zindex-dropdown; display: none; // none by default, but block on "open" of the menu float: left; - min-width: 160px; + min-width: 0; + width: 100%; padding: 5px 0; margin: 2px 0 0; // override default ul list-style: none; diff --git a/client/less/lib/bootstrap/modals.less b/client/less/lib/bootstrap/modals.less index 7468b14f97ed26..3671ff07153c48 100755 --- a/client/less/lib/bootstrap/modals.less +++ b/client/less/lib/bootstrap/modals.less @@ -67,6 +67,7 @@ right: 0; bottom: 0; left: 0; + z-index: 1030; background-color: @modal-backdrop-bg; // Fade for backdrop &.fade { .opacity(0); } diff --git a/client/less/lib/bootstrap/navbar.less b/client/less/lib/bootstrap/navbar.less index c0ffe7f9981a72..21f02d52f7efa6 100755 --- a/client/less/lib/bootstrap/navbar.less +++ b/client/less/lib/bootstrap/navbar.less @@ -11,7 +11,6 @@ .navbar { position: relative; min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) - margin-bottom: @navbar-margin-bottom; border: 1px solid transparent; // Prevent floats from breaking the navbar @@ -191,12 +190,13 @@ // Custom button for toggling the `.navbar-collapse`, powered by the collapse // JavaScript plugin. +@navbar-toggle-height: 30px; .navbar-toggle { position: relative; float: right; margin-right: @navbar-padding-horizontal; - padding: 9px 10px; - .navbar-vertical-align(34px); + padding: 6px 10px; + .navbar-vertical-align(@navbar-toggle-height); background-color: transparent; background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 border: 1px solid transparent; diff --git a/client/less/lib/bootstrap/responsive-embed.less b/client/less/lib/bootstrap/responsive-embed.less deleted file mode 100755 index c1fa8f8488b269..00000000000000 --- a/client/less/lib/bootstrap/responsive-embed.less +++ /dev/null @@ -1,35 +0,0 @@ -// Embeds responsive -// -// Credit: Nicolas Gallagher and SUIT CSS. - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; - - .embed-responsive-item, - iframe, - embed, - object, - video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; - } - - // Modifier class for 16:9 aspect ratio - &.embed-responsive-16by9 { - padding-bottom: 56.25%; - } - - // Modifier class for 4:3 aspect ratio - &.embed-responsive-4by3 { - padding-bottom: 75%; - } -} diff --git a/client/less/lib/bootstrap/variables.less b/client/less/lib/bootstrap/variables.less index 0e411ce3c7c696..3fd71498343b26 100755 --- a/client/less/lib/bootstrap/variables.less +++ b/client/less/lib/bootstrap/variables.less @@ -1,6 +1,7 @@ // // Variables // -------------------------------------------------- +@empty: ~''; //== Colors @@ -20,7 +21,8 @@ @brand-warning: #f0ad4e; @brand-danger: #d9534f; - +@icon-gray: #575757; +@icon-light-gray: #888888; //== Scaffolding // //## Settings for some of the most global styles. @@ -39,7 +41,7 @@ //## Night mode styles @night-body-bg: @gray-dark; -@night-text-color: #999; +@night-text-color: #ccc; //== Typography // @@ -51,7 +53,7 @@ @font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace; @font-family-base: @font-family-sans-serif; -@font-size-base: 14px; +@font-size-base: 15px; @font-size-large: ceil((@font-size-base * 1.25)); // ~18px @font-size-small: ceil((@font-size-base * 0.85)); // ~12px @@ -76,7 +78,7 @@ //== Iconography // -//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower. +//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via npm. //** Load fonts from this directory. @icon-font-path: "../fonts/"; @@ -235,9 +237,9 @@ @dropdown-divider-bg: #e5e5e5; //** Dropdown link text color. -@dropdown-link-color: @gray-dark; +@dropdown-link-color: darkgreen; //** Hover color for dropdown links. -@dropdown-link-hover-color: darken(@gray-dark, 5%); +@dropdown-link-hover-color: darkgreen; //** Hover background for dropdown links. @dropdown-link-hover-bg: #f5f5f5; @@ -304,6 +306,10 @@ //** Deprecated `@screen-lg-desktop` as of v3.0.1 @screen-lg-desktop: @screen-lg-min; +// Large screen / wide desktop +@screen-xl: 1400px; +@screen-lg-min: @screen-lg; + // So media queries don't overlap when required, provide a maximum @screen-xs-max: (@screen-sm-min - 1); @screen-sm-max: (@screen-md-min - 1); @@ -344,14 +350,17 @@ //** For `@screen-lg-min` and up. @container-lg: @container-large-desktop; +@container-xl: (1340px + @grid-gutter-width); + //== Navbar // //## // Basics of a navbar -@navbar-height: 50px; +@navbar-height: 36px; @navbar-margin-bottom: @line-height-computed+10px; +@navbar-total-height: @navbar-height + @navbar-margin-bottom; @navbar-border-radius: @border-radius-base; @navbar-padding-horizontal: floor((@grid-gutter-width / 2)); @navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2); @@ -365,8 +374,8 @@ @navbar-default-link-color: @gray-lighter; @navbar-default-link-hover-color: darkgreen; @navbar-default-link-hover-bg: @gray-lighter; -@navbar-default-link-active-color: @gray-lighter; -@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%); +@navbar-default-link-active-color: darkgreen; +@navbar-default-link-active-bg: @gray-lighter; @navbar-default-link-disabled-color: #ccc; @navbar-default-link-disabled-bg: transparent; diff --git a/client/less/lib/font-awesome-4.3.0/css/font-awesome.css b/client/less/lib/font-awesome-4.3.0/css/font-awesome.css deleted file mode 100644 index 2dcdc220722c85..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/css/font-awesome.css +++ /dev/null @@ -1,1801 +0,0 @@ -/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.3.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); -} -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-genderless:before, -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -} diff --git a/client/less/lib/font-awesome-4.3.0/css/font-awesome.min.css b/client/less/lib/font-awesome-4.3.0/css/font-awesome.min.css deleted file mode 100644 index 24fcc04c4ed567..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.3.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} \ No newline at end of file diff --git a/client/less/lib/font-awesome-4.3.0/fonts/FontAwesome.otf b/client/less/lib/font-awesome-4.3.0/fonts/FontAwesome.otf deleted file mode 100644 index f7936cc1e789ee..00000000000000 Binary files a/client/less/lib/font-awesome-4.3.0/fonts/FontAwesome.otf and /dev/null differ diff --git a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.eot b/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.eot deleted file mode 100644 index 33b2bb80055cc4..00000000000000 Binary files a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.svg b/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.svg deleted file mode 100644 index 744c88ad9cba86..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.ttf b/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.ttf deleted file mode 100644 index ed9372f8ea0fba..00000000000000 Binary files a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.woff b/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.woff deleted file mode 100644 index 8b280b98fa2fa2..00000000000000 Binary files a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.woff2 b/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 3311d585145b1c..00000000000000 Binary files a/client/less/lib/font-awesome-4.3.0/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/client/less/lib/font-awesome-4.3.0/less/animated.less b/client/less/lib/font-awesome-4.3.0/less/animated.less deleted file mode 100644 index 66ad52a5ba052c..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/animated.less +++ /dev/null @@ -1,34 +0,0 @@ -// Animated Icons -// -------------------------- - -.@{fa-css-prefix}-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} - -.@{fa-css-prefix}-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} diff --git a/client/less/lib/font-awesome-4.3.0/less/bordered-pulled.less b/client/less/lib/font-awesome-4.3.0/less/bordered-pulled.less deleted file mode 100644 index 0c90eb5672b04f..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/bordered-pulled.less +++ /dev/null @@ -1,16 +0,0 @@ -// Bordered & Pulled -// ------------------------- - -.@{fa-css-prefix}-border { - padding: .2em .25em .15em; - border: solid .08em @fa-border-color; - border-radius: .1em; -} - -.pull-right { float: right; } -.pull-left { float: left; } - -.@{fa-css-prefix} { - &.pull-left { margin-right: .3em; } - &.pull-right { margin-left: .3em; } -} diff --git a/client/less/lib/font-awesome-4.3.0/less/core.less b/client/less/lib/font-awesome-4.3.0/less/core.less deleted file mode 100644 index f814f1e17eb452..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/core.less +++ /dev/null @@ -1,13 +0,0 @@ -// Base Class Definition -// ------------------------- - -.@{fa-css-prefix} { - display: inline-block; - font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration - font-size: inherit; // can't have font-size inherit on line above, so need to override - text-rendering: auto; // optimizelegibility throws things off #1094 - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox - -} diff --git a/client/less/lib/font-awesome-4.3.0/less/fixed-width.less b/client/less/lib/font-awesome-4.3.0/less/fixed-width.less deleted file mode 100644 index 110289f2f4b526..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/fixed-width.less +++ /dev/null @@ -1,6 +0,0 @@ -// Fixed Width Icons -// ------------------------- -.@{fa-css-prefix}-fw { - width: (18em / 14); - text-align: center; -} diff --git a/client/less/lib/font-awesome-4.3.0/less/font-awesome.less b/client/less/lib/font-awesome-4.3.0/less/font-awesome.less deleted file mode 100644 index 1f45c63d154692..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/font-awesome.less +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ - -@import "variables.less"; -@import "mixins.less"; -@import "path.less"; -@import "core.less"; -@import "larger.less"; -@import "fixed-width.less"; -@import "list.less"; -@import "bordered-pulled.less"; -@import "animated.less"; -@import "rotated-flipped.less"; -@import "stacked.less"; -@import "icons.less"; diff --git a/client/less/lib/font-awesome-4.3.0/less/icons.less b/client/less/lib/font-awesome-4.3.0/less/icons.less deleted file mode 100644 index c265de5a6843bf..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/icons.less +++ /dev/null @@ -1,596 +0,0 @@ -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ - -.@{fa-css-prefix}-glass:before { content: @fa-var-glass; } -.@{fa-css-prefix}-music:before { content: @fa-var-music; } -.@{fa-css-prefix}-search:before { content: @fa-var-search; } -.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } -.@{fa-css-prefix}-heart:before { content: @fa-var-heart; } -.@{fa-css-prefix}-star:before { content: @fa-var-star; } -.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } -.@{fa-css-prefix}-user:before { content: @fa-var-user; } -.@{fa-css-prefix}-film:before { content: @fa-var-film; } -.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } -.@{fa-css-prefix}-th:before { content: @fa-var-th; } -.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } -.@{fa-css-prefix}-check:before { content: @fa-var-check; } -.@{fa-css-prefix}-remove:before, -.@{fa-css-prefix}-close:before, -.@{fa-css-prefix}-times:before { content: @fa-var-times; } -.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } -.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } -.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } -.@{fa-css-prefix}-signal:before { content: @fa-var-signal; } -.@{fa-css-prefix}-gear:before, -.@{fa-css-prefix}-cog:before { content: @fa-var-cog; } -.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } -.@{fa-css-prefix}-home:before { content: @fa-var-home; } -.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } -.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } -.@{fa-css-prefix}-road:before { content: @fa-var-road; } -.@{fa-css-prefix}-download:before { content: @fa-var-download; } -.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } -.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } -.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } -.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } -.@{fa-css-prefix}-rotate-right:before, -.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } -.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } -.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } -.@{fa-css-prefix}-lock:before { content: @fa-var-lock; } -.@{fa-css-prefix}-flag:before { content: @fa-var-flag; } -.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } -.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } -.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } -.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } -.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } -.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } -.@{fa-css-prefix}-tag:before { content: @fa-var-tag; } -.@{fa-css-prefix}-tags:before { content: @fa-var-tags; } -.@{fa-css-prefix}-book:before { content: @fa-var-book; } -.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } -.@{fa-css-prefix}-print:before { content: @fa-var-print; } -.@{fa-css-prefix}-camera:before { content: @fa-var-camera; } -.@{fa-css-prefix}-font:before { content: @fa-var-font; } -.@{fa-css-prefix}-bold:before { content: @fa-var-bold; } -.@{fa-css-prefix}-italic:before { content: @fa-var-italic; } -.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } -.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } -.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } -.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } -.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } -.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } -.@{fa-css-prefix}-list:before { content: @fa-var-list; } -.@{fa-css-prefix}-dedent:before, -.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } -.@{fa-css-prefix}-indent:before { content: @fa-var-indent; } -.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } -.@{fa-css-prefix}-photo:before, -.@{fa-css-prefix}-image:before, -.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } -.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } -.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } -.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } -.@{fa-css-prefix}-tint:before { content: @fa-var-tint; } -.@{fa-css-prefix}-edit:before, -.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } -.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } -.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } -.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } -.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } -.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } -.@{fa-css-prefix}-backward:before { content: @fa-var-backward; } -.@{fa-css-prefix}-play:before { content: @fa-var-play; } -.@{fa-css-prefix}-pause:before { content: @fa-var-pause; } -.@{fa-css-prefix}-stop:before { content: @fa-var-stop; } -.@{fa-css-prefix}-forward:before { content: @fa-var-forward; } -.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } -.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } -.@{fa-css-prefix}-eject:before { content: @fa-var-eject; } -.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } -.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } -.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } -.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } -.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } -.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } -.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } -.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } -.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } -.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } -.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } -.@{fa-css-prefix}-ban:before { content: @fa-var-ban; } -.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } -.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } -.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } -.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } -.@{fa-css-prefix}-mail-forward:before, -.@{fa-css-prefix}-share:before { content: @fa-var-share; } -.@{fa-css-prefix}-expand:before { content: @fa-var-expand; } -.@{fa-css-prefix}-compress:before { content: @fa-var-compress; } -.@{fa-css-prefix}-plus:before { content: @fa-var-plus; } -.@{fa-css-prefix}-minus:before { content: @fa-var-minus; } -.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } -.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } -.@{fa-css-prefix}-gift:before { content: @fa-var-gift; } -.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } -.@{fa-css-prefix}-fire:before { content: @fa-var-fire; } -.@{fa-css-prefix}-eye:before { content: @fa-var-eye; } -.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } -.@{fa-css-prefix}-warning:before, -.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } -.@{fa-css-prefix}-plane:before { content: @fa-var-plane; } -.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } -.@{fa-css-prefix}-random:before { content: @fa-var-random; } -.@{fa-css-prefix}-comment:before { content: @fa-var-comment; } -.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } -.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } -.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } -.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } -.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } -.@{fa-css-prefix}-folder:before { content: @fa-var-folder; } -.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } -.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } -.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } -.@{fa-css-prefix}-bar-chart-o:before, -.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; } -.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } -.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } -.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } -.@{fa-css-prefix}-key:before { content: @fa-var-key; } -.@{fa-css-prefix}-gears:before, -.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } -.@{fa-css-prefix}-comments:before { content: @fa-var-comments; } -.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } -.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } -.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } -.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } -.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } -.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } -.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } -.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } -.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } -.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } -.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } -.@{fa-css-prefix}-upload:before { content: @fa-var-upload; } -.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } -.@{fa-css-prefix}-phone:before { content: @fa-var-phone; } -.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } -.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } -.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } -.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } -.@{fa-css-prefix}-facebook-f:before, -.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } -.@{fa-css-prefix}-github:before { content: @fa-var-github; } -.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } -.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } -.@{fa-css-prefix}-rss:before { content: @fa-var-rss; } -.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } -.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } -.@{fa-css-prefix}-bell:before { content: @fa-var-bell; } -.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } -.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } -.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } -.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } -.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } -.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } -.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } -.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } -.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } -.@{fa-css-prefix}-globe:before { content: @fa-var-globe; } -.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } -.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } -.@{fa-css-prefix}-filter:before { content: @fa-var-filter; } -.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } -.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } -.@{fa-css-prefix}-group:before, -.@{fa-css-prefix}-users:before { content: @fa-var-users; } -.@{fa-css-prefix}-chain:before, -.@{fa-css-prefix}-link:before { content: @fa-var-link; } -.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } -.@{fa-css-prefix}-flask:before { content: @fa-var-flask; } -.@{fa-css-prefix}-cut:before, -.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } -.@{fa-css-prefix}-copy:before, -.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } -.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } -.@{fa-css-prefix}-save:before, -.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } -.@{fa-css-prefix}-square:before { content: @fa-var-square; } -.@{fa-css-prefix}-navicon:before, -.@{fa-css-prefix}-reorder:before, -.@{fa-css-prefix}-bars:before { content: @fa-var-bars; } -.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } -.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } -.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } -.@{fa-css-prefix}-underline:before { content: @fa-var-underline; } -.@{fa-css-prefix}-table:before { content: @fa-var-table; } -.@{fa-css-prefix}-magic:before { content: @fa-var-magic; } -.@{fa-css-prefix}-truck:before { content: @fa-var-truck; } -.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } -.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } -.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } -.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } -.@{fa-css-prefix}-money:before { content: @fa-var-money; } -.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } -.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } -.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } -.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } -.@{fa-css-prefix}-columns:before { content: @fa-var-columns; } -.@{fa-css-prefix}-unsorted:before, -.@{fa-css-prefix}-sort:before { content: @fa-var-sort; } -.@{fa-css-prefix}-sort-down:before, -.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } -.@{fa-css-prefix}-sort-up:before, -.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } -.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } -.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } -.@{fa-css-prefix}-rotate-left:before, -.@{fa-css-prefix}-undo:before { content: @fa-var-undo; } -.@{fa-css-prefix}-legal:before, -.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } -.@{fa-css-prefix}-dashboard:before, -.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } -.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } -.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } -.@{fa-css-prefix}-flash:before, -.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } -.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } -.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } -.@{fa-css-prefix}-paste:before, -.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } -.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } -.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } -.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } -.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } -.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } -.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } -.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } -.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } -.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } -.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } -.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } -.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } -.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } -.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } -.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } -.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } -.@{fa-css-prefix}-beer:before { content: @fa-var-beer; } -.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } -.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } -.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } -.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } -.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } -.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } -.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } -.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } -.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } -.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } -.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } -.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } -.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } -.@{fa-css-prefix}-mobile-phone:before, -.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } -.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } -.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } -.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } -.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } -.@{fa-css-prefix}-circle:before { content: @fa-var-circle; } -.@{fa-css-prefix}-mail-reply:before, -.@{fa-css-prefix}-reply:before { content: @fa-var-reply; } -.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } -.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } -.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } -.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } -.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } -.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } -.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } -.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } -.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } -.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } -.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } -.@{fa-css-prefix}-code:before { content: @fa-var-code; } -.@{fa-css-prefix}-mail-reply-all:before, -.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } -.@{fa-css-prefix}-star-half-empty:before, -.@{fa-css-prefix}-star-half-full:before, -.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } -.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } -.@{fa-css-prefix}-crop:before { content: @fa-var-crop; } -.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } -.@{fa-css-prefix}-unlink:before, -.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } -.@{fa-css-prefix}-question:before { content: @fa-var-question; } -.@{fa-css-prefix}-info:before { content: @fa-var-info; } -.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } -.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } -.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } -.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } -.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } -.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } -.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } -.@{fa-css-prefix}-shield:before { content: @fa-var-shield; } -.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } -.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } -.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } -.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } -.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } -.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } -.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } -.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } -.@{fa-css-prefix}-html5:before { content: @fa-var-html5; } -.@{fa-css-prefix}-css3:before { content: @fa-var-css3; } -.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } -.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } -.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } -.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } -.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } -.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } -.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } -.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } -.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } -.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } -.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } -.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } -.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } -.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } -.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } -.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } -.@{fa-css-prefix}-compass:before { content: @fa-var-compass; } -.@{fa-css-prefix}-toggle-down:before, -.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } -.@{fa-css-prefix}-toggle-up:before, -.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } -.@{fa-css-prefix}-toggle-right:before, -.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } -.@{fa-css-prefix}-euro:before, -.@{fa-css-prefix}-eur:before { content: @fa-var-eur; } -.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } -.@{fa-css-prefix}-dollar:before, -.@{fa-css-prefix}-usd:before { content: @fa-var-usd; } -.@{fa-css-prefix}-rupee:before, -.@{fa-css-prefix}-inr:before { content: @fa-var-inr; } -.@{fa-css-prefix}-cny:before, -.@{fa-css-prefix}-rmb:before, -.@{fa-css-prefix}-yen:before, -.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } -.@{fa-css-prefix}-ruble:before, -.@{fa-css-prefix}-rouble:before, -.@{fa-css-prefix}-rub:before { content: @fa-var-rub; } -.@{fa-css-prefix}-won:before, -.@{fa-css-prefix}-krw:before { content: @fa-var-krw; } -.@{fa-css-prefix}-bitcoin:before, -.@{fa-css-prefix}-btc:before { content: @fa-var-btc; } -.@{fa-css-prefix}-file:before { content: @fa-var-file; } -.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } -.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } -.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } -.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } -.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } -.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } -.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } -.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } -.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } -.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } -.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } -.@{fa-css-prefix}-xing:before { content: @fa-var-xing; } -.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } -.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } -.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } -.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } -.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } -.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } -.@{fa-css-prefix}-adn:before { content: @fa-var-adn; } -.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } -.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } -.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } -.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } -.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } -.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } -.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } -.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } -.@{fa-css-prefix}-apple:before { content: @fa-var-apple; } -.@{fa-css-prefix}-windows:before { content: @fa-var-windows; } -.@{fa-css-prefix}-android:before { content: @fa-var-android; } -.@{fa-css-prefix}-linux:before { content: @fa-var-linux; } -.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } -.@{fa-css-prefix}-skype:before { content: @fa-var-skype; } -.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } -.@{fa-css-prefix}-trello:before { content: @fa-var-trello; } -.@{fa-css-prefix}-female:before { content: @fa-var-female; } -.@{fa-css-prefix}-male:before { content: @fa-var-male; } -.@{fa-css-prefix}-gittip:before, -.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; } -.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } -.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } -.@{fa-css-prefix}-archive:before { content: @fa-var-archive; } -.@{fa-css-prefix}-bug:before { content: @fa-var-bug; } -.@{fa-css-prefix}-vk:before { content: @fa-var-vk; } -.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } -.@{fa-css-prefix}-renren:before { content: @fa-var-renren; } -.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } -.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } -.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } -.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } -.@{fa-css-prefix}-toggle-left:before, -.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } -.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } -.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } -.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } -.@{fa-css-prefix}-turkish-lira:before, -.@{fa-css-prefix}-try:before { content: @fa-var-try; } -.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } -.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; } -.@{fa-css-prefix}-slack:before { content: @fa-var-slack; } -.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; } -.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; } -.@{fa-css-prefix}-openid:before { content: @fa-var-openid; } -.@{fa-css-prefix}-institution:before, -.@{fa-css-prefix}-bank:before, -.@{fa-css-prefix}-university:before { content: @fa-var-university; } -.@{fa-css-prefix}-mortar-board:before, -.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; } -.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; } -.@{fa-css-prefix}-google:before { content: @fa-var-google; } -.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } -.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; } -.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; } -.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; } -.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; } -.@{fa-css-prefix}-digg:before { content: @fa-var-digg; } -.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; } -.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } -.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; } -.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; } -.@{fa-css-prefix}-language:before { content: @fa-var-language; } -.@{fa-css-prefix}-fax:before { content: @fa-var-fax; } -.@{fa-css-prefix}-building:before { content: @fa-var-building; } -.@{fa-css-prefix}-child:before { content: @fa-var-child; } -.@{fa-css-prefix}-paw:before { content: @fa-var-paw; } -.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; } -.@{fa-css-prefix}-cube:before { content: @fa-var-cube; } -.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; } -.@{fa-css-prefix}-behance:before { content: @fa-var-behance; } -.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; } -.@{fa-css-prefix}-steam:before { content: @fa-var-steam; } -.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; } -.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } -.@{fa-css-prefix}-automobile:before, -.@{fa-css-prefix}-car:before { content: @fa-var-car; } -.@{fa-css-prefix}-cab:before, -.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; } -.@{fa-css-prefix}-tree:before { content: @fa-var-tree; } -.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; } -.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; } -.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; } -.@{fa-css-prefix}-database:before { content: @fa-var-database; } -.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; } -.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; } -.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; } -.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; } -.@{fa-css-prefix}-file-photo-o:before, -.@{fa-css-prefix}-file-picture-o:before, -.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; } -.@{fa-css-prefix}-file-zip-o:before, -.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; } -.@{fa-css-prefix}-file-sound-o:before, -.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; } -.@{fa-css-prefix}-file-movie-o:before, -.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; } -.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; } -.@{fa-css-prefix}-vine:before { content: @fa-var-vine; } -.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; } -.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; } -.@{fa-css-prefix}-life-bouy:before, -.@{fa-css-prefix}-life-buoy:before, -.@{fa-css-prefix}-life-saver:before, -.@{fa-css-prefix}-support:before, -.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; } -.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; } -.@{fa-css-prefix}-ra:before, -.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } -.@{fa-css-prefix}-ge:before, -.@{fa-css-prefix}-empire:before { content: @fa-var-empire; } -.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } -.@{fa-css-prefix}-git:before { content: @fa-var-git; } -.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } -.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } -.@{fa-css-prefix}-qq:before { content: @fa-var-qq; } -.@{fa-css-prefix}-wechat:before, -.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; } -.@{fa-css-prefix}-send:before, -.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; } -.@{fa-css-prefix}-send-o:before, -.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } -.@{fa-css-prefix}-history:before { content: @fa-var-history; } -.@{fa-css-prefix}-genderless:before, -.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } -.@{fa-css-prefix}-header:before { content: @fa-var-header; } -.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } -.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; } -.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; } -.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; } -.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; } -.@{fa-css-prefix}-soccer-ball-o:before, -.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; } -.@{fa-css-prefix}-tty:before { content: @fa-var-tty; } -.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; } -.@{fa-css-prefix}-plug:before { content: @fa-var-plug; } -.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; } -.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; } -.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; } -.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; } -.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; } -.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } -.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; } -.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; } -.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; } -.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; } -.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; } -.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; } -.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; } -.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; } -.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; } -.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; } -.@{fa-css-prefix}-trash:before { content: @fa-var-trash; } -.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } -.@{fa-css-prefix}-at:before { content: @fa-var-at; } -.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; } -.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; } -.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; } -.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; } -.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; } -.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; } -.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; } -.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; } -.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; } -.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; } -.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; } -.@{fa-css-prefix}-bus:before { content: @fa-var-bus; } -.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; } -.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; } -.@{fa-css-prefix}-cc:before { content: @fa-var-cc; } -.@{fa-css-prefix}-shekel:before, -.@{fa-css-prefix}-sheqel:before, -.@{fa-css-prefix}-ils:before { content: @fa-var-ils; } -.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; } -.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } -.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; } -.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } -.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; } -.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; } -.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; } -.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } -.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; } -.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; } -.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; } -.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; } -.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; } -.@{fa-css-prefix}-ship:before { content: @fa-var-ship; } -.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; } -.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } -.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; } -.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; } -.@{fa-css-prefix}-venus:before { content: @fa-var-venus; } -.@{fa-css-prefix}-mars:before { content: @fa-var-mars; } -.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } -.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } -.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } -.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } -.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; } -.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; } -.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; } -.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } -.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } -.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } -.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } -.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } -.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } -.@{fa-css-prefix}-server:before { content: @fa-var-server; } -.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; } -.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; } -.@{fa-css-prefix}-hotel:before, -.@{fa-css-prefix}-bed:before { content: @fa-var-bed; } -.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; } -.@{fa-css-prefix}-train:before { content: @fa-var-train; } -.@{fa-css-prefix}-subway:before { content: @fa-var-subway; } -.@{fa-css-prefix}-medium:before { content: @fa-var-medium; } diff --git a/client/less/lib/font-awesome-4.3.0/less/larger.less b/client/less/lib/font-awesome-4.3.0/less/larger.less deleted file mode 100644 index c9d646770e2186..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/larger.less +++ /dev/null @@ -1,13 +0,0 @@ -// Icon Sizes -// ------------------------- - -/* makes the font 33% larger relative to the icon container */ -.@{fa-css-prefix}-lg { - font-size: (4em / 3); - line-height: (3em / 4); - vertical-align: -15%; -} -.@{fa-css-prefix}-2x { font-size: 2em; } -.@{fa-css-prefix}-3x { font-size: 3em; } -.@{fa-css-prefix}-4x { font-size: 4em; } -.@{fa-css-prefix}-5x { font-size: 5em; } diff --git a/client/less/lib/font-awesome-4.3.0/less/list.less b/client/less/lib/font-awesome-4.3.0/less/list.less deleted file mode 100644 index 0b440382f61f0b..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/list.less +++ /dev/null @@ -1,19 +0,0 @@ -// List Icons -// ------------------------- - -.@{fa-css-prefix}-ul { - padding-left: 0; - margin-left: @fa-li-width; - list-style-type: none; - > li { position: relative; } -} -.@{fa-css-prefix}-li { - position: absolute; - left: -@fa-li-width; - width: @fa-li-width; - top: (2em / 14); - text-align: center; - &.@{fa-css-prefix}-lg { - left: (-@fa-li-width + (4em / 14)); - } -} diff --git a/client/less/lib/font-awesome-4.3.0/less/mixins.less b/client/less/lib/font-awesome-4.3.0/less/mixins.less deleted file mode 100644 index c97f4604ca5f84..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/mixins.less +++ /dev/null @@ -1,27 +0,0 @@ -// Mixins -// -------------------------- - -.fa-icon() { - display: inline-block; - font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration - font-size: inherit; // can't have font-size inherit on line above, so need to override - text-rendering: auto; // optimizelegibility throws things off #1094 - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox - -} - -.fa-icon-rotate(@degrees, @rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); - -webkit-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); - transform: rotate(@degrees); -} - -.fa-icon-flip(@horiz, @vert, @rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); - -webkit-transform: scale(@horiz, @vert); - -ms-transform: scale(@horiz, @vert); - transform: scale(@horiz, @vert); -} diff --git a/client/less/lib/font-awesome-4.3.0/less/path.less b/client/less/lib/font-awesome-4.3.0/less/path.less deleted file mode 100644 index 9211e66597a034..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/path.less +++ /dev/null @@ -1,15 +0,0 @@ -/* FONT PATH - * -------------------------- */ - -@font-face { - font-family: 'FontAwesome'; - src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); - src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), - url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), - url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), - url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), - url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); -// src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts - font-weight: normal; - font-style: normal; -} diff --git a/client/less/lib/font-awesome-4.3.0/less/rotated-flipped.less b/client/less/lib/font-awesome-4.3.0/less/rotated-flipped.less deleted file mode 100644 index f6ba81475b9235..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/rotated-flipped.less +++ /dev/null @@ -1,20 +0,0 @@ -// Rotated & Flipped Icons -// ------------------------- - -.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } -.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } -.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } - -.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } -.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } - -// Hook for IE8-9 -// ------------------------- - -:root .@{fa-css-prefix}-rotate-90, -:root .@{fa-css-prefix}-rotate-180, -:root .@{fa-css-prefix}-rotate-270, -:root .@{fa-css-prefix}-flip-horizontal, -:root .@{fa-css-prefix}-flip-vertical { - filter: none; -} diff --git a/client/less/lib/font-awesome-4.3.0/less/stacked.less b/client/less/lib/font-awesome-4.3.0/less/stacked.less deleted file mode 100644 index fc53fb0e7ab495..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/stacked.less +++ /dev/null @@ -1,20 +0,0 @@ -// Stacked Icons -// ------------------------- - -.@{fa-css-prefix}-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.@{fa-css-prefix}-stack-1x { line-height: inherit; } -.@{fa-css-prefix}-stack-2x { font-size: 2em; } -.@{fa-css-prefix}-inverse { color: @fa-inverse; } diff --git a/client/less/lib/font-awesome-4.3.0/less/variables.less b/client/less/lib/font-awesome-4.3.0/less/variables.less deleted file mode 100644 index d526064c84c36b..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/less/variables.less +++ /dev/null @@ -1,606 +0,0 @@ -// Variables -// -------------------------- - -@fa-font-path: "../fonts"; -@fa-font-size-base: 14px; -//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts"; // for referencing Bootstrap CDN font files directly -@fa-css-prefix: fa; -@fa-version: "4.3.0"; -@fa-border-color: #eee; -@fa-inverse: #fff; -@fa-li-width: (30em / 14); - -@fa-var-adjust: "\f042"; -@fa-var-adn: "\f170"; -@fa-var-align-center: "\f037"; -@fa-var-align-justify: "\f039"; -@fa-var-align-left: "\f036"; -@fa-var-align-right: "\f038"; -@fa-var-ambulance: "\f0f9"; -@fa-var-anchor: "\f13d"; -@fa-var-android: "\f17b"; -@fa-var-angellist: "\f209"; -@fa-var-angle-double-down: "\f103"; -@fa-var-angle-double-left: "\f100"; -@fa-var-angle-double-right: "\f101"; -@fa-var-angle-double-up: "\f102"; -@fa-var-angle-down: "\f107"; -@fa-var-angle-left: "\f104"; -@fa-var-angle-right: "\f105"; -@fa-var-angle-up: "\f106"; -@fa-var-apple: "\f179"; -@fa-var-archive: "\f187"; -@fa-var-area-chart: "\f1fe"; -@fa-var-arrow-circle-down: "\f0ab"; -@fa-var-arrow-circle-left: "\f0a8"; -@fa-var-arrow-circle-o-down: "\f01a"; -@fa-var-arrow-circle-o-left: "\f190"; -@fa-var-arrow-circle-o-right: "\f18e"; -@fa-var-arrow-circle-o-up: "\f01b"; -@fa-var-arrow-circle-right: "\f0a9"; -@fa-var-arrow-circle-up: "\f0aa"; -@fa-var-arrow-down: "\f063"; -@fa-var-arrow-left: "\f060"; -@fa-var-arrow-right: "\f061"; -@fa-var-arrow-up: "\f062"; -@fa-var-arrows: "\f047"; -@fa-var-arrows-alt: "\f0b2"; -@fa-var-arrows-h: "\f07e"; -@fa-var-arrows-v: "\f07d"; -@fa-var-asterisk: "\f069"; -@fa-var-at: "\f1fa"; -@fa-var-automobile: "\f1b9"; -@fa-var-backward: "\f04a"; -@fa-var-ban: "\f05e"; -@fa-var-bank: "\f19c"; -@fa-var-bar-chart: "\f080"; -@fa-var-bar-chart-o: "\f080"; -@fa-var-barcode: "\f02a"; -@fa-var-bars: "\f0c9"; -@fa-var-bed: "\f236"; -@fa-var-beer: "\f0fc"; -@fa-var-behance: "\f1b4"; -@fa-var-behance-square: "\f1b5"; -@fa-var-bell: "\f0f3"; -@fa-var-bell-o: "\f0a2"; -@fa-var-bell-slash: "\f1f6"; -@fa-var-bell-slash-o: "\f1f7"; -@fa-var-bicycle: "\f206"; -@fa-var-binoculars: "\f1e5"; -@fa-var-birthday-cake: "\f1fd"; -@fa-var-bitbucket: "\f171"; -@fa-var-bitbucket-square: "\f172"; -@fa-var-bitcoin: "\f15a"; -@fa-var-bold: "\f032"; -@fa-var-bolt: "\f0e7"; -@fa-var-bomb: "\f1e2"; -@fa-var-book: "\f02d"; -@fa-var-bookmark: "\f02e"; -@fa-var-bookmark-o: "\f097"; -@fa-var-briefcase: "\f0b1"; -@fa-var-btc: "\f15a"; -@fa-var-bug: "\f188"; -@fa-var-building: "\f1ad"; -@fa-var-building-o: "\f0f7"; -@fa-var-bullhorn: "\f0a1"; -@fa-var-bullseye: "\f140"; -@fa-var-bus: "\f207"; -@fa-var-buysellads: "\f20d"; -@fa-var-cab: "\f1ba"; -@fa-var-calculator: "\f1ec"; -@fa-var-calendar: "\f073"; -@fa-var-calendar-o: "\f133"; -@fa-var-camera: "\f030"; -@fa-var-camera-retro: "\f083"; -@fa-var-car: "\f1b9"; -@fa-var-caret-down: "\f0d7"; -@fa-var-caret-left: "\f0d9"; -@fa-var-caret-right: "\f0da"; -@fa-var-caret-square-o-down: "\f150"; -@fa-var-caret-square-o-left: "\f191"; -@fa-var-caret-square-o-right: "\f152"; -@fa-var-caret-square-o-up: "\f151"; -@fa-var-caret-up: "\f0d8"; -@fa-var-cart-arrow-down: "\f218"; -@fa-var-cart-plus: "\f217"; -@fa-var-cc: "\f20a"; -@fa-var-cc-amex: "\f1f3"; -@fa-var-cc-discover: "\f1f2"; -@fa-var-cc-mastercard: "\f1f1"; -@fa-var-cc-paypal: "\f1f4"; -@fa-var-cc-stripe: "\f1f5"; -@fa-var-cc-visa: "\f1f0"; -@fa-var-certificate: "\f0a3"; -@fa-var-chain: "\f0c1"; -@fa-var-chain-broken: "\f127"; -@fa-var-check: "\f00c"; -@fa-var-check-circle: "\f058"; -@fa-var-check-circle-o: "\f05d"; -@fa-var-check-square: "\f14a"; -@fa-var-check-square-o: "\f046"; -@fa-var-chevron-circle-down: "\f13a"; -@fa-var-chevron-circle-left: "\f137"; -@fa-var-chevron-circle-right: "\f138"; -@fa-var-chevron-circle-up: "\f139"; -@fa-var-chevron-down: "\f078"; -@fa-var-chevron-left: "\f053"; -@fa-var-chevron-right: "\f054"; -@fa-var-chevron-up: "\f077"; -@fa-var-child: "\f1ae"; -@fa-var-circle: "\f111"; -@fa-var-circle-o: "\f10c"; -@fa-var-circle-o-notch: "\f1ce"; -@fa-var-circle-thin: "\f1db"; -@fa-var-clipboard: "\f0ea"; -@fa-var-clock-o: "\f017"; -@fa-var-close: "\f00d"; -@fa-var-cloud: "\f0c2"; -@fa-var-cloud-download: "\f0ed"; -@fa-var-cloud-upload: "\f0ee"; -@fa-var-cny: "\f157"; -@fa-var-code: "\f121"; -@fa-var-code-fork: "\f126"; -@fa-var-codepen: "\f1cb"; -@fa-var-coffee: "\f0f4"; -@fa-var-cog: "\f013"; -@fa-var-cogs: "\f085"; -@fa-var-columns: "\f0db"; -@fa-var-comment: "\f075"; -@fa-var-comment-o: "\f0e5"; -@fa-var-comments: "\f086"; -@fa-var-comments-o: "\f0e6"; -@fa-var-compass: "\f14e"; -@fa-var-compress: "\f066"; -@fa-var-connectdevelop: "\f20e"; -@fa-var-copy: "\f0c5"; -@fa-var-copyright: "\f1f9"; -@fa-var-credit-card: "\f09d"; -@fa-var-crop: "\f125"; -@fa-var-crosshairs: "\f05b"; -@fa-var-css3: "\f13c"; -@fa-var-cube: "\f1b2"; -@fa-var-cubes: "\f1b3"; -@fa-var-cut: "\f0c4"; -@fa-var-cutlery: "\f0f5"; -@fa-var-dashboard: "\f0e4"; -@fa-var-dashcube: "\f210"; -@fa-var-database: "\f1c0"; -@fa-var-dedent: "\f03b"; -@fa-var-delicious: "\f1a5"; -@fa-var-desktop: "\f108"; -@fa-var-deviantart: "\f1bd"; -@fa-var-diamond: "\f219"; -@fa-var-digg: "\f1a6"; -@fa-var-dollar: "\f155"; -@fa-var-dot-circle-o: "\f192"; -@fa-var-download: "\f019"; -@fa-var-dribbble: "\f17d"; -@fa-var-dropbox: "\f16b"; -@fa-var-drupal: "\f1a9"; -@fa-var-edit: "\f044"; -@fa-var-eject: "\f052"; -@fa-var-ellipsis-h: "\f141"; -@fa-var-ellipsis-v: "\f142"; -@fa-var-empire: "\f1d1"; -@fa-var-envelope: "\f0e0"; -@fa-var-envelope-o: "\f003"; -@fa-var-envelope-square: "\f199"; -@fa-var-eraser: "\f12d"; -@fa-var-eur: "\f153"; -@fa-var-euro: "\f153"; -@fa-var-exchange: "\f0ec"; -@fa-var-exclamation: "\f12a"; -@fa-var-exclamation-circle: "\f06a"; -@fa-var-exclamation-triangle: "\f071"; -@fa-var-expand: "\f065"; -@fa-var-external-link: "\f08e"; -@fa-var-external-link-square: "\f14c"; -@fa-var-eye: "\f06e"; -@fa-var-eye-slash: "\f070"; -@fa-var-eyedropper: "\f1fb"; -@fa-var-facebook: "\f09a"; -@fa-var-facebook-f: "\f09a"; -@fa-var-facebook-official: "\f230"; -@fa-var-facebook-square: "\f082"; -@fa-var-fast-backward: "\f049"; -@fa-var-fast-forward: "\f050"; -@fa-var-fax: "\f1ac"; -@fa-var-female: "\f182"; -@fa-var-fighter-jet: "\f0fb"; -@fa-var-file: "\f15b"; -@fa-var-file-archive-o: "\f1c6"; -@fa-var-file-audio-o: "\f1c7"; -@fa-var-file-code-o: "\f1c9"; -@fa-var-file-excel-o: "\f1c3"; -@fa-var-file-image-o: "\f1c5"; -@fa-var-file-movie-o: "\f1c8"; -@fa-var-file-o: "\f016"; -@fa-var-file-pdf-o: "\f1c1"; -@fa-var-file-photo-o: "\f1c5"; -@fa-var-file-picture-o: "\f1c5"; -@fa-var-file-powerpoint-o: "\f1c4"; -@fa-var-file-sound-o: "\f1c7"; -@fa-var-file-text: "\f15c"; -@fa-var-file-text-o: "\f0f6"; -@fa-var-file-video-o: "\f1c8"; -@fa-var-file-word-o: "\f1c2"; -@fa-var-file-zip-o: "\f1c6"; -@fa-var-files-o: "\f0c5"; -@fa-var-film: "\f008"; -@fa-var-filter: "\f0b0"; -@fa-var-fire: "\f06d"; -@fa-var-fire-extinguisher: "\f134"; -@fa-var-flag: "\f024"; -@fa-var-flag-checkered: "\f11e"; -@fa-var-flag-o: "\f11d"; -@fa-var-flash: "\f0e7"; -@fa-var-flask: "\f0c3"; -@fa-var-flickr: "\f16e"; -@fa-var-floppy-o: "\f0c7"; -@fa-var-folder: "\f07b"; -@fa-var-folder-o: "\f114"; -@fa-var-folder-open: "\f07c"; -@fa-var-folder-open-o: "\f115"; -@fa-var-font: "\f031"; -@fa-var-forumbee: "\f211"; -@fa-var-forward: "\f04e"; -@fa-var-foursquare: "\f180"; -@fa-var-frown-o: "\f119"; -@fa-var-futbol-o: "\f1e3"; -@fa-var-gamepad: "\f11b"; -@fa-var-gavel: "\f0e3"; -@fa-var-gbp: "\f154"; -@fa-var-ge: "\f1d1"; -@fa-var-gear: "\f013"; -@fa-var-gears: "\f085"; -@fa-var-genderless: "\f1db"; -@fa-var-gift: "\f06b"; -@fa-var-git: "\f1d3"; -@fa-var-git-square: "\f1d2"; -@fa-var-github: "\f09b"; -@fa-var-github-alt: "\f113"; -@fa-var-github-square: "\f092"; -@fa-var-gittip: "\f184"; -@fa-var-glass: "\f000"; -@fa-var-globe: "\f0ac"; -@fa-var-google: "\f1a0"; -@fa-var-google-plus: "\f0d5"; -@fa-var-google-plus-square: "\f0d4"; -@fa-var-google-wallet: "\f1ee"; -@fa-var-graduation-cap: "\f19d"; -@fa-var-gratipay: "\f184"; -@fa-var-group: "\f0c0"; -@fa-var-h-square: "\f0fd"; -@fa-var-hacker-news: "\f1d4"; -@fa-var-hand-o-down: "\f0a7"; -@fa-var-hand-o-left: "\f0a5"; -@fa-var-hand-o-right: "\f0a4"; -@fa-var-hand-o-up: "\f0a6"; -@fa-var-hdd-o: "\f0a0"; -@fa-var-header: "\f1dc"; -@fa-var-headphones: "\f025"; -@fa-var-heart: "\f004"; -@fa-var-heart-o: "\f08a"; -@fa-var-heartbeat: "\f21e"; -@fa-var-history: "\f1da"; -@fa-var-home: "\f015"; -@fa-var-hospital-o: "\f0f8"; -@fa-var-hotel: "\f236"; -@fa-var-html5: "\f13b"; -@fa-var-ils: "\f20b"; -@fa-var-image: "\f03e"; -@fa-var-inbox: "\f01c"; -@fa-var-indent: "\f03c"; -@fa-var-info: "\f129"; -@fa-var-info-circle: "\f05a"; -@fa-var-inr: "\f156"; -@fa-var-instagram: "\f16d"; -@fa-var-institution: "\f19c"; -@fa-var-ioxhost: "\f208"; -@fa-var-italic: "\f033"; -@fa-var-joomla: "\f1aa"; -@fa-var-jpy: "\f157"; -@fa-var-jsfiddle: "\f1cc"; -@fa-var-key: "\f084"; -@fa-var-keyboard-o: "\f11c"; -@fa-var-krw: "\f159"; -@fa-var-language: "\f1ab"; -@fa-var-laptop: "\f109"; -@fa-var-lastfm: "\f202"; -@fa-var-lastfm-square: "\f203"; -@fa-var-leaf: "\f06c"; -@fa-var-leanpub: "\f212"; -@fa-var-legal: "\f0e3"; -@fa-var-lemon-o: "\f094"; -@fa-var-level-down: "\f149"; -@fa-var-level-up: "\f148"; -@fa-var-life-bouy: "\f1cd"; -@fa-var-life-buoy: "\f1cd"; -@fa-var-life-ring: "\f1cd"; -@fa-var-life-saver: "\f1cd"; -@fa-var-lightbulb-o: "\f0eb"; -@fa-var-line-chart: "\f201"; -@fa-var-link: "\f0c1"; -@fa-var-linkedin: "\f0e1"; -@fa-var-linkedin-square: "\f08c"; -@fa-var-linux: "\f17c"; -@fa-var-list: "\f03a"; -@fa-var-list-alt: "\f022"; -@fa-var-list-ol: "\f0cb"; -@fa-var-list-ul: "\f0ca"; -@fa-var-location-arrow: "\f124"; -@fa-var-lock: "\f023"; -@fa-var-long-arrow-down: "\f175"; -@fa-var-long-arrow-left: "\f177"; -@fa-var-long-arrow-right: "\f178"; -@fa-var-long-arrow-up: "\f176"; -@fa-var-magic: "\f0d0"; -@fa-var-magnet: "\f076"; -@fa-var-mail-forward: "\f064"; -@fa-var-mail-reply: "\f112"; -@fa-var-mail-reply-all: "\f122"; -@fa-var-male: "\f183"; -@fa-var-map-marker: "\f041"; -@fa-var-mars: "\f222"; -@fa-var-mars-double: "\f227"; -@fa-var-mars-stroke: "\f229"; -@fa-var-mars-stroke-h: "\f22b"; -@fa-var-mars-stroke-v: "\f22a"; -@fa-var-maxcdn: "\f136"; -@fa-var-meanpath: "\f20c"; -@fa-var-medium: "\f23a"; -@fa-var-medkit: "\f0fa"; -@fa-var-meh-o: "\f11a"; -@fa-var-mercury: "\f223"; -@fa-var-microphone: "\f130"; -@fa-var-microphone-slash: "\f131"; -@fa-var-minus: "\f068"; -@fa-var-minus-circle: "\f056"; -@fa-var-minus-square: "\f146"; -@fa-var-minus-square-o: "\f147"; -@fa-var-mobile: "\f10b"; -@fa-var-mobile-phone: "\f10b"; -@fa-var-money: "\f0d6"; -@fa-var-moon-o: "\f186"; -@fa-var-mortar-board: "\f19d"; -@fa-var-motorcycle: "\f21c"; -@fa-var-music: "\f001"; -@fa-var-navicon: "\f0c9"; -@fa-var-neuter: "\f22c"; -@fa-var-newspaper-o: "\f1ea"; -@fa-var-openid: "\f19b"; -@fa-var-outdent: "\f03b"; -@fa-var-pagelines: "\f18c"; -@fa-var-paint-brush: "\f1fc"; -@fa-var-paper-plane: "\f1d8"; -@fa-var-paper-plane-o: "\f1d9"; -@fa-var-paperclip: "\f0c6"; -@fa-var-paragraph: "\f1dd"; -@fa-var-paste: "\f0ea"; -@fa-var-pause: "\f04c"; -@fa-var-paw: "\f1b0"; -@fa-var-paypal: "\f1ed"; -@fa-var-pencil: "\f040"; -@fa-var-pencil-square: "\f14b"; -@fa-var-pencil-square-o: "\f044"; -@fa-var-phone: "\f095"; -@fa-var-phone-square: "\f098"; -@fa-var-photo: "\f03e"; -@fa-var-picture-o: "\f03e"; -@fa-var-pie-chart: "\f200"; -@fa-var-pied-piper: "\f1a7"; -@fa-var-pied-piper-alt: "\f1a8"; -@fa-var-pinterest: "\f0d2"; -@fa-var-pinterest-p: "\f231"; -@fa-var-pinterest-square: "\f0d3"; -@fa-var-plane: "\f072"; -@fa-var-play: "\f04b"; -@fa-var-play-circle: "\f144"; -@fa-var-play-circle-o: "\f01d"; -@fa-var-plug: "\f1e6"; -@fa-var-plus: "\f067"; -@fa-var-plus-circle: "\f055"; -@fa-var-plus-square: "\f0fe"; -@fa-var-plus-square-o: "\f196"; -@fa-var-power-off: "\f011"; -@fa-var-print: "\f02f"; -@fa-var-puzzle-piece: "\f12e"; -@fa-var-qq: "\f1d6"; -@fa-var-qrcode: "\f029"; -@fa-var-question: "\f128"; -@fa-var-question-circle: "\f059"; -@fa-var-quote-left: "\f10d"; -@fa-var-quote-right: "\f10e"; -@fa-var-ra: "\f1d0"; -@fa-var-random: "\f074"; -@fa-var-rebel: "\f1d0"; -@fa-var-recycle: "\f1b8"; -@fa-var-reddit: "\f1a1"; -@fa-var-reddit-square: "\f1a2"; -@fa-var-refresh: "\f021"; -@fa-var-remove: "\f00d"; -@fa-var-renren: "\f18b"; -@fa-var-reorder: "\f0c9"; -@fa-var-repeat: "\f01e"; -@fa-var-reply: "\f112"; -@fa-var-reply-all: "\f122"; -@fa-var-retweet: "\f079"; -@fa-var-rmb: "\f157"; -@fa-var-road: "\f018"; -@fa-var-rocket: "\f135"; -@fa-var-rotate-left: "\f0e2"; -@fa-var-rotate-right: "\f01e"; -@fa-var-rouble: "\f158"; -@fa-var-rss: "\f09e"; -@fa-var-rss-square: "\f143"; -@fa-var-rub: "\f158"; -@fa-var-ruble: "\f158"; -@fa-var-rupee: "\f156"; -@fa-var-save: "\f0c7"; -@fa-var-scissors: "\f0c4"; -@fa-var-search: "\f002"; -@fa-var-search-minus: "\f010"; -@fa-var-search-plus: "\f00e"; -@fa-var-sellsy: "\f213"; -@fa-var-send: "\f1d8"; -@fa-var-send-o: "\f1d9"; -@fa-var-server: "\f233"; -@fa-var-share: "\f064"; -@fa-var-share-alt: "\f1e0"; -@fa-var-share-alt-square: "\f1e1"; -@fa-var-share-square: "\f14d"; -@fa-var-share-square-o: "\f045"; -@fa-var-shekel: "\f20b"; -@fa-var-sheqel: "\f20b"; -@fa-var-shield: "\f132"; -@fa-var-ship: "\f21a"; -@fa-var-shirtsinbulk: "\f214"; -@fa-var-shopping-cart: "\f07a"; -@fa-var-sign-in: "\f090"; -@fa-var-sign-out: "\f08b"; -@fa-var-signal: "\f012"; -@fa-var-simplybuilt: "\f215"; -@fa-var-sitemap: "\f0e8"; -@fa-var-skyatlas: "\f216"; -@fa-var-skype: "\f17e"; -@fa-var-slack: "\f198"; -@fa-var-sliders: "\f1de"; -@fa-var-slideshare: "\f1e7"; -@fa-var-smile-o: "\f118"; -@fa-var-soccer-ball-o: "\f1e3"; -@fa-var-sort: "\f0dc"; -@fa-var-sort-alpha-asc: "\f15d"; -@fa-var-sort-alpha-desc: "\f15e"; -@fa-var-sort-amount-asc: "\f160"; -@fa-var-sort-amount-desc: "\f161"; -@fa-var-sort-asc: "\f0de"; -@fa-var-sort-desc: "\f0dd"; -@fa-var-sort-down: "\f0dd"; -@fa-var-sort-numeric-asc: "\f162"; -@fa-var-sort-numeric-desc: "\f163"; -@fa-var-sort-up: "\f0de"; -@fa-var-soundcloud: "\f1be"; -@fa-var-space-shuttle: "\f197"; -@fa-var-spinner: "\f110"; -@fa-var-spoon: "\f1b1"; -@fa-var-spotify: "\f1bc"; -@fa-var-square: "\f0c8"; -@fa-var-square-o: "\f096"; -@fa-var-stack-exchange: "\f18d"; -@fa-var-stack-overflow: "\f16c"; -@fa-var-star: "\f005"; -@fa-var-star-half: "\f089"; -@fa-var-star-half-empty: "\f123"; -@fa-var-star-half-full: "\f123"; -@fa-var-star-half-o: "\f123"; -@fa-var-star-o: "\f006"; -@fa-var-steam: "\f1b6"; -@fa-var-steam-square: "\f1b7"; -@fa-var-step-backward: "\f048"; -@fa-var-step-forward: "\f051"; -@fa-var-stethoscope: "\f0f1"; -@fa-var-stop: "\f04d"; -@fa-var-street-view: "\f21d"; -@fa-var-strikethrough: "\f0cc"; -@fa-var-stumbleupon: "\f1a4"; -@fa-var-stumbleupon-circle: "\f1a3"; -@fa-var-subscript: "\f12c"; -@fa-var-subway: "\f239"; -@fa-var-suitcase: "\f0f2"; -@fa-var-sun-o: "\f185"; -@fa-var-superscript: "\f12b"; -@fa-var-support: "\f1cd"; -@fa-var-table: "\f0ce"; -@fa-var-tablet: "\f10a"; -@fa-var-tachometer: "\f0e4"; -@fa-var-tag: "\f02b"; -@fa-var-tags: "\f02c"; -@fa-var-tasks: "\f0ae"; -@fa-var-taxi: "\f1ba"; -@fa-var-tencent-weibo: "\f1d5"; -@fa-var-terminal: "\f120"; -@fa-var-text-height: "\f034"; -@fa-var-text-width: "\f035"; -@fa-var-th: "\f00a"; -@fa-var-th-large: "\f009"; -@fa-var-th-list: "\f00b"; -@fa-var-thumb-tack: "\f08d"; -@fa-var-thumbs-down: "\f165"; -@fa-var-thumbs-o-down: "\f088"; -@fa-var-thumbs-o-up: "\f087"; -@fa-var-thumbs-up: "\f164"; -@fa-var-ticket: "\f145"; -@fa-var-times: "\f00d"; -@fa-var-times-circle: "\f057"; -@fa-var-times-circle-o: "\f05c"; -@fa-var-tint: "\f043"; -@fa-var-toggle-down: "\f150"; -@fa-var-toggle-left: "\f191"; -@fa-var-toggle-off: "\f204"; -@fa-var-toggle-on: "\f205"; -@fa-var-toggle-right: "\f152"; -@fa-var-toggle-up: "\f151"; -@fa-var-train: "\f238"; -@fa-var-transgender: "\f224"; -@fa-var-transgender-alt: "\f225"; -@fa-var-trash: "\f1f8"; -@fa-var-trash-o: "\f014"; -@fa-var-tree: "\f1bb"; -@fa-var-trello: "\f181"; -@fa-var-trophy: "\f091"; -@fa-var-truck: "\f0d1"; -@fa-var-try: "\f195"; -@fa-var-tty: "\f1e4"; -@fa-var-tumblr: "\f173"; -@fa-var-tumblr-square: "\f174"; -@fa-var-turkish-lira: "\f195"; -@fa-var-twitch: "\f1e8"; -@fa-var-twitter: "\f099"; -@fa-var-twitter-square: "\f081"; -@fa-var-umbrella: "\f0e9"; -@fa-var-underline: "\f0cd"; -@fa-var-undo: "\f0e2"; -@fa-var-university: "\f19c"; -@fa-var-unlink: "\f127"; -@fa-var-unlock: "\f09c"; -@fa-var-unlock-alt: "\f13e"; -@fa-var-unsorted: "\f0dc"; -@fa-var-upload: "\f093"; -@fa-var-usd: "\f155"; -@fa-var-user: "\f007"; -@fa-var-user-md: "\f0f0"; -@fa-var-user-plus: "\f234"; -@fa-var-user-secret: "\f21b"; -@fa-var-user-times: "\f235"; -@fa-var-users: "\f0c0"; -@fa-var-venus: "\f221"; -@fa-var-venus-double: "\f226"; -@fa-var-venus-mars: "\f228"; -@fa-var-viacoin: "\f237"; -@fa-var-video-camera: "\f03d"; -@fa-var-vimeo-square: "\f194"; -@fa-var-vine: "\f1ca"; -@fa-var-vk: "\f189"; -@fa-var-volume-down: "\f027"; -@fa-var-volume-off: "\f026"; -@fa-var-volume-up: "\f028"; -@fa-var-warning: "\f071"; -@fa-var-wechat: "\f1d7"; -@fa-var-weibo: "\f18a"; -@fa-var-weixin: "\f1d7"; -@fa-var-whatsapp: "\f232"; -@fa-var-wheelchair: "\f193"; -@fa-var-wifi: "\f1eb"; -@fa-var-windows: "\f17a"; -@fa-var-won: "\f159"; -@fa-var-wordpress: "\f19a"; -@fa-var-wrench: "\f0ad"; -@fa-var-xing: "\f168"; -@fa-var-xing-square: "\f169"; -@fa-var-yahoo: "\f19e"; -@fa-var-yelp: "\f1e9"; -@fa-var-yen: "\f157"; -@fa-var-youtube: "\f167"; -@fa-var-youtube-play: "\f16a"; -@fa-var-youtube-square: "\f166"; - diff --git a/client/less/lib/font-awesome-4.3.0/scss/_animated.scss b/client/less/lib/font-awesome-4.3.0/scss/_animated.scss deleted file mode 100644 index 8a020dbfff7822..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_animated.scss +++ /dev/null @@ -1,34 +0,0 @@ -// Spinning Icons -// -------------------------- - -.#{$fa-css-prefix}-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} - -.#{$fa-css-prefix}-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_bordered-pulled.scss b/client/less/lib/font-awesome-4.3.0/scss/_bordered-pulled.scss deleted file mode 100644 index 9d3fdf3a0b477f..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_bordered-pulled.scss +++ /dev/null @@ -1,16 +0,0 @@ -// Bordered & Pulled -// ------------------------- - -.#{$fa-css-prefix}-border { - padding: .2em .25em .15em; - border: solid .08em $fa-border-color; - border-radius: .1em; -} - -.pull-right { float: right; } -.pull-left { float: left; } - -.#{$fa-css-prefix} { - &.pull-left { margin-right: .3em; } - &.pull-right { margin-left: .3em; } -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_core.scss b/client/less/lib/font-awesome-4.3.0/scss/_core.scss deleted file mode 100644 index 5a2db9d5612d02..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_core.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Base Class Definition -// ------------------------- - -.#{$fa-css-prefix} { - display: inline-block; - font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration - font-size: inherit; // can't have font-size inherit on line above, so need to override - text-rendering: auto; // optimizelegibility throws things off #1094 - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox - -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_fixed-width.scss b/client/less/lib/font-awesome-4.3.0/scss/_fixed-width.scss deleted file mode 100644 index b221c98133a4d4..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_fixed-width.scss +++ /dev/null @@ -1,6 +0,0 @@ -// Fixed Width Icons -// ------------------------- -.#{$fa-css-prefix}-fw { - width: (18em / 14); - text-align: center; -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_icons.scss b/client/less/lib/font-awesome-4.3.0/scss/_icons.scss deleted file mode 100644 index fbcfe81237b527..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_icons.scss +++ /dev/null @@ -1,596 +0,0 @@ -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ - -.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; } -.#{$fa-css-prefix}-music:before { content: $fa-var-music; } -.#{$fa-css-prefix}-search:before { content: $fa-var-search; } -.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } -.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } -.#{$fa-css-prefix}-star:before { content: $fa-var-star; } -.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } -.#{$fa-css-prefix}-user:before { content: $fa-var-user; } -.#{$fa-css-prefix}-film:before { content: $fa-var-film; } -.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } -.#{$fa-css-prefix}-th:before { content: $fa-var-th; } -.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } -.#{$fa-css-prefix}-check:before { content: $fa-var-check; } -.#{$fa-css-prefix}-remove:before, -.#{$fa-css-prefix}-close:before, -.#{$fa-css-prefix}-times:before { content: $fa-var-times; } -.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } -.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } -.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } -.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } -.#{$fa-css-prefix}-gear:before, -.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } -.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } -.#{$fa-css-prefix}-home:before { content: $fa-var-home; } -.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } -.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } -.#{$fa-css-prefix}-road:before { content: $fa-var-road; } -.#{$fa-css-prefix}-download:before { content: $fa-var-download; } -.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } -.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } -.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } -.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } -.#{$fa-css-prefix}-rotate-right:before, -.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } -.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } -.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } -.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } -.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } -.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } -.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } -.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } -.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } -.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } -.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } -.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } -.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } -.#{$fa-css-prefix}-book:before { content: $fa-var-book; } -.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } -.#{$fa-css-prefix}-print:before { content: $fa-var-print; } -.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } -.#{$fa-css-prefix}-font:before { content: $fa-var-font; } -.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } -.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } -.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } -.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } -.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } -.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } -.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } -.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } -.#{$fa-css-prefix}-list:before { content: $fa-var-list; } -.#{$fa-css-prefix}-dedent:before, -.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } -.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } -.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } -.#{$fa-css-prefix}-photo:before, -.#{$fa-css-prefix}-image:before, -.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } -.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } -.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } -.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } -.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } -.#{$fa-css-prefix}-edit:before, -.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } -.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } -.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } -.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } -.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } -.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } -.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } -.#{$fa-css-prefix}-play:before { content: $fa-var-play; } -.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } -.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } -.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } -.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } -.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } -.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } -.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } -.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } -.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } -.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } -.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } -.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } -.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } -.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } -.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } -.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } -.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } -.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } -.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } -.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } -.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } -.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } -.#{$fa-css-prefix}-mail-forward:before, -.#{$fa-css-prefix}-share:before { content: $fa-var-share; } -.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } -.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } -.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } -.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } -.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } -.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } -.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } -.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } -.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } -.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } -.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } -.#{$fa-css-prefix}-warning:before, -.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } -.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } -.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } -.#{$fa-css-prefix}-random:before { content: $fa-var-random; } -.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } -.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } -.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } -.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } -.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } -.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } -.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } -.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } -.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } -.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } -.#{$fa-css-prefix}-bar-chart-o:before, -.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; } -.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } -.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } -.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } -.#{$fa-css-prefix}-key:before { content: $fa-var-key; } -.#{$fa-css-prefix}-gears:before, -.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } -.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } -.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } -.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } -.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } -.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } -.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } -.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } -.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } -.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } -.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } -.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } -.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } -.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } -.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } -.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } -.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } -.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } -.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } -.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } -.#{$fa-css-prefix}-facebook-f:before, -.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } -.#{$fa-css-prefix}-github:before { content: $fa-var-github; } -.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } -.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } -.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } -.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } -.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } -.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } -.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } -.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } -.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } -.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } -.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } -.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } -.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } -.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } -.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } -.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } -.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } -.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } -.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } -.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } -.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } -.#{$fa-css-prefix}-group:before, -.#{$fa-css-prefix}-users:before { content: $fa-var-users; } -.#{$fa-css-prefix}-chain:before, -.#{$fa-css-prefix}-link:before { content: $fa-var-link; } -.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } -.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } -.#{$fa-css-prefix}-cut:before, -.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } -.#{$fa-css-prefix}-copy:before, -.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } -.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } -.#{$fa-css-prefix}-save:before, -.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } -.#{$fa-css-prefix}-square:before { content: $fa-var-square; } -.#{$fa-css-prefix}-navicon:before, -.#{$fa-css-prefix}-reorder:before, -.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } -.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } -.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } -.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } -.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } -.#{$fa-css-prefix}-table:before { content: $fa-var-table; } -.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } -.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } -.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } -.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } -.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } -.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } -.#{$fa-css-prefix}-money:before { content: $fa-var-money; } -.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } -.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } -.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } -.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } -.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } -.#{$fa-css-prefix}-unsorted:before, -.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } -.#{$fa-css-prefix}-sort-down:before, -.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } -.#{$fa-css-prefix}-sort-up:before, -.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } -.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } -.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } -.#{$fa-css-prefix}-rotate-left:before, -.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } -.#{$fa-css-prefix}-legal:before, -.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } -.#{$fa-css-prefix}-dashboard:before, -.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } -.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } -.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } -.#{$fa-css-prefix}-flash:before, -.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } -.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } -.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } -.#{$fa-css-prefix}-paste:before, -.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } -.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } -.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } -.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } -.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } -.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } -.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } -.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } -.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } -.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } -.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } -.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } -.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } -.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } -.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } -.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } -.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } -.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } -.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } -.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } -.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } -.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } -.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } -.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } -.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } -.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } -.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } -.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } -.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } -.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } -.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } -.#{$fa-css-prefix}-mobile-phone:before, -.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } -.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } -.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } -.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } -.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } -.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } -.#{$fa-css-prefix}-mail-reply:before, -.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } -.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } -.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } -.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } -.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } -.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } -.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } -.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } -.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } -.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } -.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } -.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } -.#{$fa-css-prefix}-code:before { content: $fa-var-code; } -.#{$fa-css-prefix}-mail-reply-all:before, -.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } -.#{$fa-css-prefix}-star-half-empty:before, -.#{$fa-css-prefix}-star-half-full:before, -.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } -.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } -.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } -.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } -.#{$fa-css-prefix}-unlink:before, -.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } -.#{$fa-css-prefix}-question:before { content: $fa-var-question; } -.#{$fa-css-prefix}-info:before { content: $fa-var-info; } -.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } -.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } -.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } -.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } -.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } -.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } -.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } -.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } -.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } -.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } -.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } -.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } -.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } -.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } -.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } -.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } -.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } -.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } -.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } -.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } -.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } -.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } -.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } -.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } -.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } -.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } -.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } -.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } -.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } -.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } -.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } -.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } -.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } -.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } -.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } -.#{$fa-css-prefix}-toggle-down:before, -.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } -.#{$fa-css-prefix}-toggle-up:before, -.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } -.#{$fa-css-prefix}-toggle-right:before, -.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } -.#{$fa-css-prefix}-euro:before, -.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } -.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } -.#{$fa-css-prefix}-dollar:before, -.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } -.#{$fa-css-prefix}-rupee:before, -.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } -.#{$fa-css-prefix}-cny:before, -.#{$fa-css-prefix}-rmb:before, -.#{$fa-css-prefix}-yen:before, -.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } -.#{$fa-css-prefix}-ruble:before, -.#{$fa-css-prefix}-rouble:before, -.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } -.#{$fa-css-prefix}-won:before, -.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } -.#{$fa-css-prefix}-bitcoin:before, -.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } -.#{$fa-css-prefix}-file:before { content: $fa-var-file; } -.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } -.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } -.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } -.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } -.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } -.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } -.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } -.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } -.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } -.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } -.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } -.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } -.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } -.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } -.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } -.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } -.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } -.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } -.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } -.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } -.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } -.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } -.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } -.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } -.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } -.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } -.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } -.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } -.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } -.#{$fa-css-prefix}-android:before { content: $fa-var-android; } -.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } -.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } -.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } -.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } -.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } -.#{$fa-css-prefix}-female:before { content: $fa-var-female; } -.#{$fa-css-prefix}-male:before { content: $fa-var-male; } -.#{$fa-css-prefix}-gittip:before, -.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; } -.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } -.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } -.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } -.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } -.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } -.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } -.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } -.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } -.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } -.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } -.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } -.#{$fa-css-prefix}-toggle-left:before, -.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } -.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } -.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } -.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } -.#{$fa-css-prefix}-turkish-lira:before, -.#{$fa-css-prefix}-try:before { content: $fa-var-try; } -.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } -.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; } -.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; } -.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; } -.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; } -.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; } -.#{$fa-css-prefix}-institution:before, -.#{$fa-css-prefix}-bank:before, -.#{$fa-css-prefix}-university:before { content: $fa-var-university; } -.#{$fa-css-prefix}-mortar-board:before, -.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; } -.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; } -.#{$fa-css-prefix}-google:before { content: $fa-var-google; } -.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; } -.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; } -.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; } -.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } -.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } -.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } -.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } -.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } -.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } -.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } -.#{$fa-css-prefix}-language:before { content: $fa-var-language; } -.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; } -.#{$fa-css-prefix}-building:before { content: $fa-var-building; } -.#{$fa-css-prefix}-child:before { content: $fa-var-child; } -.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; } -.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; } -.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; } -.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; } -.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; } -.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; } -.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; } -.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; } -.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; } -.#{$fa-css-prefix}-automobile:before, -.#{$fa-css-prefix}-car:before { content: $fa-var-car; } -.#{$fa-css-prefix}-cab:before, -.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; } -.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; } -.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; } -.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; } -.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; } -.#{$fa-css-prefix}-database:before { content: $fa-var-database; } -.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; } -.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; } -.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; } -.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; } -.#{$fa-css-prefix}-file-photo-o:before, -.#{$fa-css-prefix}-file-picture-o:before, -.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; } -.#{$fa-css-prefix}-file-zip-o:before, -.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; } -.#{$fa-css-prefix}-file-sound-o:before, -.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; } -.#{$fa-css-prefix}-file-movie-o:before, -.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; } -.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; } -.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; } -.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; } -.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; } -.#{$fa-css-prefix}-life-bouy:before, -.#{$fa-css-prefix}-life-buoy:before, -.#{$fa-css-prefix}-life-saver:before, -.#{$fa-css-prefix}-support:before, -.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } -.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } -.#{$fa-css-prefix}-ra:before, -.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } -.#{$fa-css-prefix}-ge:before, -.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } -.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } -.#{$fa-css-prefix}-git:before { content: $fa-var-git; } -.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } -.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } -.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } -.#{$fa-css-prefix}-wechat:before, -.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; } -.#{$fa-css-prefix}-send:before, -.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; } -.#{$fa-css-prefix}-send-o:before, -.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } -.#{$fa-css-prefix}-history:before { content: $fa-var-history; } -.#{$fa-css-prefix}-genderless:before, -.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } -.#{$fa-css-prefix}-header:before { content: $fa-var-header; } -.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } -.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; } -.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; } -.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; } -.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; } -.#{$fa-css-prefix}-soccer-ball-o:before, -.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; } -.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; } -.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; } -.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; } -.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; } -.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; } -.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; } -.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; } -.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; } -.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; } -.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; } -.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; } -.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; } -.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; } -.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; } -.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; } -.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; } -.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; } -.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; } -.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; } -.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; } -.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; } -.#{$fa-css-prefix}-at:before { content: $fa-var-at; } -.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; } -.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; } -.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; } -.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; } -.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; } -.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; } -.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; } -.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; } -.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; } -.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; } -.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; } -.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; } -.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; } -.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; } -.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; } -.#{$fa-css-prefix}-shekel:before, -.#{$fa-css-prefix}-sheqel:before, -.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; } -.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; } -.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; } -.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; } -.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; } -.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; } -.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; } -.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; } -.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; } -.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; } -.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; } -.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; } -.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; } -.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; } -.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; } -.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; } -.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; } -.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; } -.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; } -.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } -.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } -.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } -.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } -.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } -.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } -.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; } -.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; } -.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; } -.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } -.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } -.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } -.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } -.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } -.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } -.#{$fa-css-prefix}-server:before { content: $fa-var-server; } -.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; } -.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; } -.#{$fa-css-prefix}-hotel:before, -.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; } -.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; } -.#{$fa-css-prefix}-train:before { content: $fa-var-train; } -.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } -.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } diff --git a/client/less/lib/font-awesome-4.3.0/scss/_larger.scss b/client/less/lib/font-awesome-4.3.0/scss/_larger.scss deleted file mode 100644 index 41e9a8184aa287..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_larger.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Icon Sizes -// ------------------------- - -/* makes the font 33% larger relative to the icon container */ -.#{$fa-css-prefix}-lg { - font-size: (4em / 3); - line-height: (3em / 4); - vertical-align: -15%; -} -.#{$fa-css-prefix}-2x { font-size: 2em; } -.#{$fa-css-prefix}-3x { font-size: 3em; } -.#{$fa-css-prefix}-4x { font-size: 4em; } -.#{$fa-css-prefix}-5x { font-size: 5em; } diff --git a/client/less/lib/font-awesome-4.3.0/scss/_list.scss b/client/less/lib/font-awesome-4.3.0/scss/_list.scss deleted file mode 100644 index 7d1e4d54d6c293..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_list.scss +++ /dev/null @@ -1,19 +0,0 @@ -// List Icons -// ------------------------- - -.#{$fa-css-prefix}-ul { - padding-left: 0; - margin-left: $fa-li-width; - list-style-type: none; - > li { position: relative; } -} -.#{$fa-css-prefix}-li { - position: absolute; - left: -$fa-li-width; - width: $fa-li-width; - top: (2em / 14); - text-align: center; - &.#{$fa-css-prefix}-lg { - left: -$fa-li-width + (4em / 14); - } -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_mixins.scss b/client/less/lib/font-awesome-4.3.0/scss/_mixins.scss deleted file mode 100644 index 6b7f16093120f1..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_mixins.scss +++ /dev/null @@ -1,27 +0,0 @@ -// Mixins -// -------------------------- - -@mixin fa-icon() { - display: inline-block; - font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration - font-size: inherit; // can't have font-size inherit on line above, so need to override - text-rendering: auto; // optimizelegibility throws things off #1094 - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox - -} - -@mixin fa-icon-rotate($degrees, $rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); - -webkit-transform: rotate($degrees); - -ms-transform: rotate($degrees); - transform: rotate($degrees); -} - -@mixin fa-icon-flip($horiz, $vert, $rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); - -webkit-transform: scale($horiz, $vert); - -ms-transform: scale($horiz, $vert); - transform: scale($horiz, $vert); -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_path.scss b/client/less/lib/font-awesome-4.3.0/scss/_path.scss deleted file mode 100644 index bb457c23a8e4e0..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_path.scss +++ /dev/null @@ -1,15 +0,0 @@ -/* FONT PATH - * -------------------------- */ - -@font-face { - font-family: 'FontAwesome'; - src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); - src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), - url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), - url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), - url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), - url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); -// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts - font-weight: normal; - font-style: normal; -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_rotated-flipped.scss b/client/less/lib/font-awesome-4.3.0/scss/_rotated-flipped.scss deleted file mode 100644 index a3558fd09ca7cb..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_rotated-flipped.scss +++ /dev/null @@ -1,20 +0,0 @@ -// Rotated & Flipped Icons -// ------------------------- - -.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } -.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } -.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } - -.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } -.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } - -// Hook for IE8-9 -// ------------------------- - -:root .#{$fa-css-prefix}-rotate-90, -:root .#{$fa-css-prefix}-rotate-180, -:root .#{$fa-css-prefix}-rotate-270, -:root .#{$fa-css-prefix}-flip-horizontal, -:root .#{$fa-css-prefix}-flip-vertical { - filter: none; -} diff --git a/client/less/lib/font-awesome-4.3.0/scss/_stacked.scss b/client/less/lib/font-awesome-4.3.0/scss/_stacked.scss deleted file mode 100644 index aef7403660c9a2..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_stacked.scss +++ /dev/null @@ -1,20 +0,0 @@ -// Stacked Icons -// ------------------------- - -.#{$fa-css-prefix}-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.#{$fa-css-prefix}-stack-1x { line-height: inherit; } -.#{$fa-css-prefix}-stack-2x { font-size: 2em; } -.#{$fa-css-prefix}-inverse { color: $fa-inverse; } diff --git a/client/less/lib/font-awesome-4.3.0/scss/_variables.scss b/client/less/lib/font-awesome-4.3.0/scss/_variables.scss deleted file mode 100644 index 9b7210e23bd8e3..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/_variables.scss +++ /dev/null @@ -1,606 +0,0 @@ -// Variables -// -------------------------- - -$fa-font-path: "../fonts" !default; -$fa-font-size-base: 14px !default; -//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts" !default; // for referencing Bootstrap CDN font files directly -$fa-css-prefix: fa !default; -$fa-version: "4.3.0" !default; -$fa-border-color: #eee !default; -$fa-inverse: #fff !default; -$fa-li-width: (30em / 14) !default; - -$fa-var-adjust: "\f042"; -$fa-var-adn: "\f170"; -$fa-var-align-center: "\f037"; -$fa-var-align-justify: "\f039"; -$fa-var-align-left: "\f036"; -$fa-var-align-right: "\f038"; -$fa-var-ambulance: "\f0f9"; -$fa-var-anchor: "\f13d"; -$fa-var-android: "\f17b"; -$fa-var-angellist: "\f209"; -$fa-var-angle-double-down: "\f103"; -$fa-var-angle-double-left: "\f100"; -$fa-var-angle-double-right: "\f101"; -$fa-var-angle-double-up: "\f102"; -$fa-var-angle-down: "\f107"; -$fa-var-angle-left: "\f104"; -$fa-var-angle-right: "\f105"; -$fa-var-angle-up: "\f106"; -$fa-var-apple: "\f179"; -$fa-var-archive: "\f187"; -$fa-var-area-chart: "\f1fe"; -$fa-var-arrow-circle-down: "\f0ab"; -$fa-var-arrow-circle-left: "\f0a8"; -$fa-var-arrow-circle-o-down: "\f01a"; -$fa-var-arrow-circle-o-left: "\f190"; -$fa-var-arrow-circle-o-right: "\f18e"; -$fa-var-arrow-circle-o-up: "\f01b"; -$fa-var-arrow-circle-right: "\f0a9"; -$fa-var-arrow-circle-up: "\f0aa"; -$fa-var-arrow-down: "\f063"; -$fa-var-arrow-left: "\f060"; -$fa-var-arrow-right: "\f061"; -$fa-var-arrow-up: "\f062"; -$fa-var-arrows: "\f047"; -$fa-var-arrows-alt: "\f0b2"; -$fa-var-arrows-h: "\f07e"; -$fa-var-arrows-v: "\f07d"; -$fa-var-asterisk: "\f069"; -$fa-var-at: "\f1fa"; -$fa-var-automobile: "\f1b9"; -$fa-var-backward: "\f04a"; -$fa-var-ban: "\f05e"; -$fa-var-bank: "\f19c"; -$fa-var-bar-chart: "\f080"; -$fa-var-bar-chart-o: "\f080"; -$fa-var-barcode: "\f02a"; -$fa-var-bars: "\f0c9"; -$fa-var-bed: "\f236"; -$fa-var-beer: "\f0fc"; -$fa-var-behance: "\f1b4"; -$fa-var-behance-square: "\f1b5"; -$fa-var-bell: "\f0f3"; -$fa-var-bell-o: "\f0a2"; -$fa-var-bell-slash: "\f1f6"; -$fa-var-bell-slash-o: "\f1f7"; -$fa-var-bicycle: "\f206"; -$fa-var-binoculars: "\f1e5"; -$fa-var-birthday-cake: "\f1fd"; -$fa-var-bitbucket: "\f171"; -$fa-var-bitbucket-square: "\f172"; -$fa-var-bitcoin: "\f15a"; -$fa-var-bold: "\f032"; -$fa-var-bolt: "\f0e7"; -$fa-var-bomb: "\f1e2"; -$fa-var-book: "\f02d"; -$fa-var-bookmark: "\f02e"; -$fa-var-bookmark-o: "\f097"; -$fa-var-briefcase: "\f0b1"; -$fa-var-btc: "\f15a"; -$fa-var-bug: "\f188"; -$fa-var-building: "\f1ad"; -$fa-var-building-o: "\f0f7"; -$fa-var-bullhorn: "\f0a1"; -$fa-var-bullseye: "\f140"; -$fa-var-bus: "\f207"; -$fa-var-buysellads: "\f20d"; -$fa-var-cab: "\f1ba"; -$fa-var-calculator: "\f1ec"; -$fa-var-calendar: "\f073"; -$fa-var-calendar-o: "\f133"; -$fa-var-camera: "\f030"; -$fa-var-camera-retro: "\f083"; -$fa-var-car: "\f1b9"; -$fa-var-caret-down: "\f0d7"; -$fa-var-caret-left: "\f0d9"; -$fa-var-caret-right: "\f0da"; -$fa-var-caret-square-o-down: "\f150"; -$fa-var-caret-square-o-left: "\f191"; -$fa-var-caret-square-o-right: "\f152"; -$fa-var-caret-square-o-up: "\f151"; -$fa-var-caret-up: "\f0d8"; -$fa-var-cart-arrow-down: "\f218"; -$fa-var-cart-plus: "\f217"; -$fa-var-cc: "\f20a"; -$fa-var-cc-amex: "\f1f3"; -$fa-var-cc-discover: "\f1f2"; -$fa-var-cc-mastercard: "\f1f1"; -$fa-var-cc-paypal: "\f1f4"; -$fa-var-cc-stripe: "\f1f5"; -$fa-var-cc-visa: "\f1f0"; -$fa-var-certificate: "\f0a3"; -$fa-var-chain: "\f0c1"; -$fa-var-chain-broken: "\f127"; -$fa-var-check: "\f00c"; -$fa-var-check-circle: "\f058"; -$fa-var-check-circle-o: "\f05d"; -$fa-var-check-square: "\f14a"; -$fa-var-check-square-o: "\f046"; -$fa-var-chevron-circle-down: "\f13a"; -$fa-var-chevron-circle-left: "\f137"; -$fa-var-chevron-circle-right: "\f138"; -$fa-var-chevron-circle-up: "\f139"; -$fa-var-chevron-down: "\f078"; -$fa-var-chevron-left: "\f053"; -$fa-var-chevron-right: "\f054"; -$fa-var-chevron-up: "\f077"; -$fa-var-child: "\f1ae"; -$fa-var-circle: "\f111"; -$fa-var-circle-o: "\f10c"; -$fa-var-circle-o-notch: "\f1ce"; -$fa-var-circle-thin: "\f1db"; -$fa-var-clipboard: "\f0ea"; -$fa-var-clock-o: "\f017"; -$fa-var-close: "\f00d"; -$fa-var-cloud: "\f0c2"; -$fa-var-cloud-download: "\f0ed"; -$fa-var-cloud-upload: "\f0ee"; -$fa-var-cny: "\f157"; -$fa-var-code: "\f121"; -$fa-var-code-fork: "\f126"; -$fa-var-codepen: "\f1cb"; -$fa-var-coffee: "\f0f4"; -$fa-var-cog: "\f013"; -$fa-var-cogs: "\f085"; -$fa-var-columns: "\f0db"; -$fa-var-comment: "\f075"; -$fa-var-comment-o: "\f0e5"; -$fa-var-comments: "\f086"; -$fa-var-comments-o: "\f0e6"; -$fa-var-compass: "\f14e"; -$fa-var-compress: "\f066"; -$fa-var-connectdevelop: "\f20e"; -$fa-var-copy: "\f0c5"; -$fa-var-copyright: "\f1f9"; -$fa-var-credit-card: "\f09d"; -$fa-var-crop: "\f125"; -$fa-var-crosshairs: "\f05b"; -$fa-var-css3: "\f13c"; -$fa-var-cube: "\f1b2"; -$fa-var-cubes: "\f1b3"; -$fa-var-cut: "\f0c4"; -$fa-var-cutlery: "\f0f5"; -$fa-var-dashboard: "\f0e4"; -$fa-var-dashcube: "\f210"; -$fa-var-database: "\f1c0"; -$fa-var-dedent: "\f03b"; -$fa-var-delicious: "\f1a5"; -$fa-var-desktop: "\f108"; -$fa-var-deviantart: "\f1bd"; -$fa-var-diamond: "\f219"; -$fa-var-digg: "\f1a6"; -$fa-var-dollar: "\f155"; -$fa-var-dot-circle-o: "\f192"; -$fa-var-download: "\f019"; -$fa-var-dribbble: "\f17d"; -$fa-var-dropbox: "\f16b"; -$fa-var-drupal: "\f1a9"; -$fa-var-edit: "\f044"; -$fa-var-eject: "\f052"; -$fa-var-ellipsis-h: "\f141"; -$fa-var-ellipsis-v: "\f142"; -$fa-var-empire: "\f1d1"; -$fa-var-envelope: "\f0e0"; -$fa-var-envelope-o: "\f003"; -$fa-var-envelope-square: "\f199"; -$fa-var-eraser: "\f12d"; -$fa-var-eur: "\f153"; -$fa-var-euro: "\f153"; -$fa-var-exchange: "\f0ec"; -$fa-var-exclamation: "\f12a"; -$fa-var-exclamation-circle: "\f06a"; -$fa-var-exclamation-triangle: "\f071"; -$fa-var-expand: "\f065"; -$fa-var-external-link: "\f08e"; -$fa-var-external-link-square: "\f14c"; -$fa-var-eye: "\f06e"; -$fa-var-eye-slash: "\f070"; -$fa-var-eyedropper: "\f1fb"; -$fa-var-facebook: "\f09a"; -$fa-var-facebook-f: "\f09a"; -$fa-var-facebook-official: "\f230"; -$fa-var-facebook-square: "\f082"; -$fa-var-fast-backward: "\f049"; -$fa-var-fast-forward: "\f050"; -$fa-var-fax: "\f1ac"; -$fa-var-female: "\f182"; -$fa-var-fighter-jet: "\f0fb"; -$fa-var-file: "\f15b"; -$fa-var-file-archive-o: "\f1c6"; -$fa-var-file-audio-o: "\f1c7"; -$fa-var-file-code-o: "\f1c9"; -$fa-var-file-excel-o: "\f1c3"; -$fa-var-file-image-o: "\f1c5"; -$fa-var-file-movie-o: "\f1c8"; -$fa-var-file-o: "\f016"; -$fa-var-file-pdf-o: "\f1c1"; -$fa-var-file-photo-o: "\f1c5"; -$fa-var-file-picture-o: "\f1c5"; -$fa-var-file-powerpoint-o: "\f1c4"; -$fa-var-file-sound-o: "\f1c7"; -$fa-var-file-text: "\f15c"; -$fa-var-file-text-o: "\f0f6"; -$fa-var-file-video-o: "\f1c8"; -$fa-var-file-word-o: "\f1c2"; -$fa-var-file-zip-o: "\f1c6"; -$fa-var-files-o: "\f0c5"; -$fa-var-film: "\f008"; -$fa-var-filter: "\f0b0"; -$fa-var-fire: "\f06d"; -$fa-var-fire-extinguisher: "\f134"; -$fa-var-flag: "\f024"; -$fa-var-flag-checkered: "\f11e"; -$fa-var-flag-o: "\f11d"; -$fa-var-flash: "\f0e7"; -$fa-var-flask: "\f0c3"; -$fa-var-flickr: "\f16e"; -$fa-var-floppy-o: "\f0c7"; -$fa-var-folder: "\f07b"; -$fa-var-folder-o: "\f114"; -$fa-var-folder-open: "\f07c"; -$fa-var-folder-open-o: "\f115"; -$fa-var-font: "\f031"; -$fa-var-forumbee: "\f211"; -$fa-var-forward: "\f04e"; -$fa-var-foursquare: "\f180"; -$fa-var-frown-o: "\f119"; -$fa-var-futbol-o: "\f1e3"; -$fa-var-gamepad: "\f11b"; -$fa-var-gavel: "\f0e3"; -$fa-var-gbp: "\f154"; -$fa-var-ge: "\f1d1"; -$fa-var-gear: "\f013"; -$fa-var-gears: "\f085"; -$fa-var-genderless: "\f1db"; -$fa-var-gift: "\f06b"; -$fa-var-git: "\f1d3"; -$fa-var-git-square: "\f1d2"; -$fa-var-github: "\f09b"; -$fa-var-github-alt: "\f113"; -$fa-var-github-square: "\f092"; -$fa-var-gittip: "\f184"; -$fa-var-glass: "\f000"; -$fa-var-globe: "\f0ac"; -$fa-var-google: "\f1a0"; -$fa-var-google-plus: "\f0d5"; -$fa-var-google-plus-square: "\f0d4"; -$fa-var-google-wallet: "\f1ee"; -$fa-var-graduation-cap: "\f19d"; -$fa-var-gratipay: "\f184"; -$fa-var-group: "\f0c0"; -$fa-var-h-square: "\f0fd"; -$fa-var-hacker-news: "\f1d4"; -$fa-var-hand-o-down: "\f0a7"; -$fa-var-hand-o-left: "\f0a5"; -$fa-var-hand-o-right: "\f0a4"; -$fa-var-hand-o-up: "\f0a6"; -$fa-var-hdd-o: "\f0a0"; -$fa-var-header: "\f1dc"; -$fa-var-headphones: "\f025"; -$fa-var-heart: "\f004"; -$fa-var-heart-o: "\f08a"; -$fa-var-heartbeat: "\f21e"; -$fa-var-history: "\f1da"; -$fa-var-home: "\f015"; -$fa-var-hospital-o: "\f0f8"; -$fa-var-hotel: "\f236"; -$fa-var-html5: "\f13b"; -$fa-var-ils: "\f20b"; -$fa-var-image: "\f03e"; -$fa-var-inbox: "\f01c"; -$fa-var-indent: "\f03c"; -$fa-var-info: "\f129"; -$fa-var-info-circle: "\f05a"; -$fa-var-inr: "\f156"; -$fa-var-instagram: "\f16d"; -$fa-var-institution: "\f19c"; -$fa-var-ioxhost: "\f208"; -$fa-var-italic: "\f033"; -$fa-var-joomla: "\f1aa"; -$fa-var-jpy: "\f157"; -$fa-var-jsfiddle: "\f1cc"; -$fa-var-key: "\f084"; -$fa-var-keyboard-o: "\f11c"; -$fa-var-krw: "\f159"; -$fa-var-language: "\f1ab"; -$fa-var-laptop: "\f109"; -$fa-var-lastfm: "\f202"; -$fa-var-lastfm-square: "\f203"; -$fa-var-leaf: "\f06c"; -$fa-var-leanpub: "\f212"; -$fa-var-legal: "\f0e3"; -$fa-var-lemon-o: "\f094"; -$fa-var-level-down: "\f149"; -$fa-var-level-up: "\f148"; -$fa-var-life-bouy: "\f1cd"; -$fa-var-life-buoy: "\f1cd"; -$fa-var-life-ring: "\f1cd"; -$fa-var-life-saver: "\f1cd"; -$fa-var-lightbulb-o: "\f0eb"; -$fa-var-line-chart: "\f201"; -$fa-var-link: "\f0c1"; -$fa-var-linkedin: "\f0e1"; -$fa-var-linkedin-square: "\f08c"; -$fa-var-linux: "\f17c"; -$fa-var-list: "\f03a"; -$fa-var-list-alt: "\f022"; -$fa-var-list-ol: "\f0cb"; -$fa-var-list-ul: "\f0ca"; -$fa-var-location-arrow: "\f124"; -$fa-var-lock: "\f023"; -$fa-var-long-arrow-down: "\f175"; -$fa-var-long-arrow-left: "\f177"; -$fa-var-long-arrow-right: "\f178"; -$fa-var-long-arrow-up: "\f176"; -$fa-var-magic: "\f0d0"; -$fa-var-magnet: "\f076"; -$fa-var-mail-forward: "\f064"; -$fa-var-mail-reply: "\f112"; -$fa-var-mail-reply-all: "\f122"; -$fa-var-male: "\f183"; -$fa-var-map-marker: "\f041"; -$fa-var-mars: "\f222"; -$fa-var-mars-double: "\f227"; -$fa-var-mars-stroke: "\f229"; -$fa-var-mars-stroke-h: "\f22b"; -$fa-var-mars-stroke-v: "\f22a"; -$fa-var-maxcdn: "\f136"; -$fa-var-meanpath: "\f20c"; -$fa-var-medium: "\f23a"; -$fa-var-medkit: "\f0fa"; -$fa-var-meh-o: "\f11a"; -$fa-var-mercury: "\f223"; -$fa-var-microphone: "\f130"; -$fa-var-microphone-slash: "\f131"; -$fa-var-minus: "\f068"; -$fa-var-minus-circle: "\f056"; -$fa-var-minus-square: "\f146"; -$fa-var-minus-square-o: "\f147"; -$fa-var-mobile: "\f10b"; -$fa-var-mobile-phone: "\f10b"; -$fa-var-money: "\f0d6"; -$fa-var-moon-o: "\f186"; -$fa-var-mortar-board: "\f19d"; -$fa-var-motorcycle: "\f21c"; -$fa-var-music: "\f001"; -$fa-var-navicon: "\f0c9"; -$fa-var-neuter: "\f22c"; -$fa-var-newspaper-o: "\f1ea"; -$fa-var-openid: "\f19b"; -$fa-var-outdent: "\f03b"; -$fa-var-pagelines: "\f18c"; -$fa-var-paint-brush: "\f1fc"; -$fa-var-paper-plane: "\f1d8"; -$fa-var-paper-plane-o: "\f1d9"; -$fa-var-paperclip: "\f0c6"; -$fa-var-paragraph: "\f1dd"; -$fa-var-paste: "\f0ea"; -$fa-var-pause: "\f04c"; -$fa-var-paw: "\f1b0"; -$fa-var-paypal: "\f1ed"; -$fa-var-pencil: "\f040"; -$fa-var-pencil-square: "\f14b"; -$fa-var-pencil-square-o: "\f044"; -$fa-var-phone: "\f095"; -$fa-var-phone-square: "\f098"; -$fa-var-photo: "\f03e"; -$fa-var-picture-o: "\f03e"; -$fa-var-pie-chart: "\f200"; -$fa-var-pied-piper: "\f1a7"; -$fa-var-pied-piper-alt: "\f1a8"; -$fa-var-pinterest: "\f0d2"; -$fa-var-pinterest-p: "\f231"; -$fa-var-pinterest-square: "\f0d3"; -$fa-var-plane: "\f072"; -$fa-var-play: "\f04b"; -$fa-var-play-circle: "\f144"; -$fa-var-play-circle-o: "\f01d"; -$fa-var-plug: "\f1e6"; -$fa-var-plus: "\f067"; -$fa-var-plus-circle: "\f055"; -$fa-var-plus-square: "\f0fe"; -$fa-var-plus-square-o: "\f196"; -$fa-var-power-off: "\f011"; -$fa-var-print: "\f02f"; -$fa-var-puzzle-piece: "\f12e"; -$fa-var-qq: "\f1d6"; -$fa-var-qrcode: "\f029"; -$fa-var-question: "\f128"; -$fa-var-question-circle: "\f059"; -$fa-var-quote-left: "\f10d"; -$fa-var-quote-right: "\f10e"; -$fa-var-ra: "\f1d0"; -$fa-var-random: "\f074"; -$fa-var-rebel: "\f1d0"; -$fa-var-recycle: "\f1b8"; -$fa-var-reddit: "\f1a1"; -$fa-var-reddit-square: "\f1a2"; -$fa-var-refresh: "\f021"; -$fa-var-remove: "\f00d"; -$fa-var-renren: "\f18b"; -$fa-var-reorder: "\f0c9"; -$fa-var-repeat: "\f01e"; -$fa-var-reply: "\f112"; -$fa-var-reply-all: "\f122"; -$fa-var-retweet: "\f079"; -$fa-var-rmb: "\f157"; -$fa-var-road: "\f018"; -$fa-var-rocket: "\f135"; -$fa-var-rotate-left: "\f0e2"; -$fa-var-rotate-right: "\f01e"; -$fa-var-rouble: "\f158"; -$fa-var-rss: "\f09e"; -$fa-var-rss-square: "\f143"; -$fa-var-rub: "\f158"; -$fa-var-ruble: "\f158"; -$fa-var-rupee: "\f156"; -$fa-var-save: "\f0c7"; -$fa-var-scissors: "\f0c4"; -$fa-var-search: "\f002"; -$fa-var-search-minus: "\f010"; -$fa-var-search-plus: "\f00e"; -$fa-var-sellsy: "\f213"; -$fa-var-send: "\f1d8"; -$fa-var-send-o: "\f1d9"; -$fa-var-server: "\f233"; -$fa-var-share: "\f064"; -$fa-var-share-alt: "\f1e0"; -$fa-var-share-alt-square: "\f1e1"; -$fa-var-share-square: "\f14d"; -$fa-var-share-square-o: "\f045"; -$fa-var-shekel: "\f20b"; -$fa-var-sheqel: "\f20b"; -$fa-var-shield: "\f132"; -$fa-var-ship: "\f21a"; -$fa-var-shirtsinbulk: "\f214"; -$fa-var-shopping-cart: "\f07a"; -$fa-var-sign-in: "\f090"; -$fa-var-sign-out: "\f08b"; -$fa-var-signal: "\f012"; -$fa-var-simplybuilt: "\f215"; -$fa-var-sitemap: "\f0e8"; -$fa-var-skyatlas: "\f216"; -$fa-var-skype: "\f17e"; -$fa-var-slack: "\f198"; -$fa-var-sliders: "\f1de"; -$fa-var-slideshare: "\f1e7"; -$fa-var-smile-o: "\f118"; -$fa-var-soccer-ball-o: "\f1e3"; -$fa-var-sort: "\f0dc"; -$fa-var-sort-alpha-asc: "\f15d"; -$fa-var-sort-alpha-desc: "\f15e"; -$fa-var-sort-amount-asc: "\f160"; -$fa-var-sort-amount-desc: "\f161"; -$fa-var-sort-asc: "\f0de"; -$fa-var-sort-desc: "\f0dd"; -$fa-var-sort-down: "\f0dd"; -$fa-var-sort-numeric-asc: "\f162"; -$fa-var-sort-numeric-desc: "\f163"; -$fa-var-sort-up: "\f0de"; -$fa-var-soundcloud: "\f1be"; -$fa-var-space-shuttle: "\f197"; -$fa-var-spinner: "\f110"; -$fa-var-spoon: "\f1b1"; -$fa-var-spotify: "\f1bc"; -$fa-var-square: "\f0c8"; -$fa-var-square-o: "\f096"; -$fa-var-stack-exchange: "\f18d"; -$fa-var-stack-overflow: "\f16c"; -$fa-var-star: "\f005"; -$fa-var-star-half: "\f089"; -$fa-var-star-half-empty: "\f123"; -$fa-var-star-half-full: "\f123"; -$fa-var-star-half-o: "\f123"; -$fa-var-star-o: "\f006"; -$fa-var-steam: "\f1b6"; -$fa-var-steam-square: "\f1b7"; -$fa-var-step-backward: "\f048"; -$fa-var-step-forward: "\f051"; -$fa-var-stethoscope: "\f0f1"; -$fa-var-stop: "\f04d"; -$fa-var-street-view: "\f21d"; -$fa-var-strikethrough: "\f0cc"; -$fa-var-stumbleupon: "\f1a4"; -$fa-var-stumbleupon-circle: "\f1a3"; -$fa-var-subscript: "\f12c"; -$fa-var-subway: "\f239"; -$fa-var-suitcase: "\f0f2"; -$fa-var-sun-o: "\f185"; -$fa-var-superscript: "\f12b"; -$fa-var-support: "\f1cd"; -$fa-var-table: "\f0ce"; -$fa-var-tablet: "\f10a"; -$fa-var-tachometer: "\f0e4"; -$fa-var-tag: "\f02b"; -$fa-var-tags: "\f02c"; -$fa-var-tasks: "\f0ae"; -$fa-var-taxi: "\f1ba"; -$fa-var-tencent-weibo: "\f1d5"; -$fa-var-terminal: "\f120"; -$fa-var-text-height: "\f034"; -$fa-var-text-width: "\f035"; -$fa-var-th: "\f00a"; -$fa-var-th-large: "\f009"; -$fa-var-th-list: "\f00b"; -$fa-var-thumb-tack: "\f08d"; -$fa-var-thumbs-down: "\f165"; -$fa-var-thumbs-o-down: "\f088"; -$fa-var-thumbs-o-up: "\f087"; -$fa-var-thumbs-up: "\f164"; -$fa-var-ticket: "\f145"; -$fa-var-times: "\f00d"; -$fa-var-times-circle: "\f057"; -$fa-var-times-circle-o: "\f05c"; -$fa-var-tint: "\f043"; -$fa-var-toggle-down: "\f150"; -$fa-var-toggle-left: "\f191"; -$fa-var-toggle-off: "\f204"; -$fa-var-toggle-on: "\f205"; -$fa-var-toggle-right: "\f152"; -$fa-var-toggle-up: "\f151"; -$fa-var-train: "\f238"; -$fa-var-transgender: "\f224"; -$fa-var-transgender-alt: "\f225"; -$fa-var-trash: "\f1f8"; -$fa-var-trash-o: "\f014"; -$fa-var-tree: "\f1bb"; -$fa-var-trello: "\f181"; -$fa-var-trophy: "\f091"; -$fa-var-truck: "\f0d1"; -$fa-var-try: "\f195"; -$fa-var-tty: "\f1e4"; -$fa-var-tumblr: "\f173"; -$fa-var-tumblr-square: "\f174"; -$fa-var-turkish-lira: "\f195"; -$fa-var-twitch: "\f1e8"; -$fa-var-twitter: "\f099"; -$fa-var-twitter-square: "\f081"; -$fa-var-umbrella: "\f0e9"; -$fa-var-underline: "\f0cd"; -$fa-var-undo: "\f0e2"; -$fa-var-university: "\f19c"; -$fa-var-unlink: "\f127"; -$fa-var-unlock: "\f09c"; -$fa-var-unlock-alt: "\f13e"; -$fa-var-unsorted: "\f0dc"; -$fa-var-upload: "\f093"; -$fa-var-usd: "\f155"; -$fa-var-user: "\f007"; -$fa-var-user-md: "\f0f0"; -$fa-var-user-plus: "\f234"; -$fa-var-user-secret: "\f21b"; -$fa-var-user-times: "\f235"; -$fa-var-users: "\f0c0"; -$fa-var-venus: "\f221"; -$fa-var-venus-double: "\f226"; -$fa-var-venus-mars: "\f228"; -$fa-var-viacoin: "\f237"; -$fa-var-video-camera: "\f03d"; -$fa-var-vimeo-square: "\f194"; -$fa-var-vine: "\f1ca"; -$fa-var-vk: "\f189"; -$fa-var-volume-down: "\f027"; -$fa-var-volume-off: "\f026"; -$fa-var-volume-up: "\f028"; -$fa-var-warning: "\f071"; -$fa-var-wechat: "\f1d7"; -$fa-var-weibo: "\f18a"; -$fa-var-weixin: "\f1d7"; -$fa-var-whatsapp: "\f232"; -$fa-var-wheelchair: "\f193"; -$fa-var-wifi: "\f1eb"; -$fa-var-windows: "\f17a"; -$fa-var-won: "\f159"; -$fa-var-wordpress: "\f19a"; -$fa-var-wrench: "\f0ad"; -$fa-var-xing: "\f168"; -$fa-var-xing-square: "\f169"; -$fa-var-yahoo: "\f19e"; -$fa-var-yelp: "\f1e9"; -$fa-var-yen: "\f157"; -$fa-var-youtube: "\f167"; -$fa-var-youtube-play: "\f16a"; -$fa-var-youtube-square: "\f166"; - diff --git a/client/less/lib/font-awesome-4.3.0/scss/font-awesome.scss b/client/less/lib/font-awesome-4.3.0/scss/font-awesome.scss deleted file mode 100644 index 388ac6b0cd6738..00000000000000 --- a/client/less/lib/font-awesome-4.3.0/scss/font-awesome.scss +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ - -@import "variables"; -@import "mixins"; -@import "path"; -@import "core"; -@import "larger"; -@import "fixed-width"; -@import "list"; -@import "bordered-pulled"; -@import "animated"; -@import "rotated-flipped"; -@import "stacked"; -@import "icons"; diff --git a/client/less/main.less b/client/less/main.less index 334356617d7b8a..8c4c3c3bd64888 100644 --- a/client/less/main.less +++ b/client/less/main.less @@ -1,8 +1,9 @@ -@import "lib/bootstrap/bootstrap"; -@import "lib/bootstrap-social/bootstrap-social"; -@import "lib/ionicons/ionicons"; -@import "lib/animate"; -@import "lib/bootstrap/variables"; +@import "./lib/bootstrap/bootstrap"; +@import "./lib/bootstrap-social/bootstrap-social"; +@import "./lib/ionicons/ionicons"; +@import "./lib/animate"; +@import "./lib/bootstrap/variables"; +@import "./flexgrid.less"; html,body,div,span,a,li,td,th { font-family: 'Lato', sans-serif; @@ -34,13 +35,6 @@ pre.wrappable { word-wrap: break-word; /* IE 5+ */ } -html { - position: relative; - min-height: 100%; - // hack to prevent horizontal overflow problem on showHTML view - overflow-x: hidden; -} - //input[type=checkbox] { // /* Double-sized Checkboxes */ // -ms-transform: scale(2); /* IE */ @@ -54,28 +48,14 @@ html { border-color: @brand-primary; } -body.full-screen-body-background { +.full-screen-body-background { background-color: @body-bg; } -body.top-and-bottom-margins { - padding-top: 80px; - margin-bottom: 60px; -} - -body.no-top-and-bottom-margins { +.no-top-and-bottom-margins { margin: 75px 20px 0px 20px; } -body.react-layout { - margin-top: 75px; - margin-bottom: 15px; - width: auto; - padding-left: 15px; - padding-right: 15px; - min-height: 650px; -} - h1, h2 { font-weight: 400; } @@ -132,10 +112,6 @@ h1, h2, h3, h4, h5, h6, p, li { box-shadow: 2px 4px 1px rgba(0, 0, 0, 0.3); } -.btn-nav { - margin-top: 10px; -} - .large-li > li { list-style: none; } @@ -150,24 +126,16 @@ h1, h2, h3, h4, h5, h6, p, li { margin: 2px; } -.navbar-brand { - font-size: 26px; -} - -.navbar > .container { - width: auto; - padding-left: 0px; - padding-right: 0px; -} - -.nav-height { - height: 50px; - border: none; +.hide-test-frame { + position: absolute; + top: -9999px; + left: -9999px; + visibility: hidden; } .landing-icon { - height: 200px; - width: 200px; + height: 100px; + width: 100px; } .completion-icon { @@ -280,46 +248,6 @@ h1, h2, h3, h4, h5, h6, p, li { display: none; } -.nav-logo { - height: 40px; - margin-top: -10px; - - @media (max-width: 397px) { - height: 30px; - margin-top: -5px; - } - @media (max-width: 335px) { - height: 25px; - margin-top: -2px; - } -} - -.navbar-right { - @media (min-width: 767px) { - margin-right:0; - } - @media (max-width: 991px) and (min-width: 767px) { - position: absolute; - left: 0; - right: 0; - margin-right: 0px; - white-space: nowrap; - } - background-color: @brand-primary; - text-align: center; -} -.navbar { - white-space: nowrap; - border: none; - line-height: 1; - @media (min-width: 767px) { - padding-left: 15px; - padding-right: 30px; - } -} - -li.avatar, li.avatar > a { padding:0; margin:0 } - .thin-progress-bar { height: 8px; margin-top: 3px; @@ -338,7 +266,8 @@ li.avatar, li.avatar > a { padding:0; margin:0 } } .btn-social { - width: 250px; + width: 100%; + max-width: 260px; margin: auto; } @@ -348,29 +277,19 @@ li.avatar, li.avatar > a { padding:0; margin:0 } margin-bottom: 10px; } -.navbar { - background-color: @brand-primary; -} - a { font-weight: bold; + font-size : 15px; } p { - font-size: 16px; + font-size: 15px; } .map-aside-body p { line-height: 1.8; } -.navbar-nav > li > a { - color: @body-bg; - &:hover { - color: @brand-primary; - } -} - .hug-top { margin-top: -35px; margin-bottom: -10px; @@ -468,52 +387,6 @@ thead { margin-bottom: 50px; } -.profile-picture { - height: 50px; - width: 50px; -} - -.brownie-points-nav { - @media (min-width: 991px) and (max-width: 999px) { - margin-right: -10px; - } -} - -.navbar-nav a { - color: @body-bg; - font-size: 20px; - margin-top: -5px; - margin-bottom: -5px; -} - -.navbar-toggle { - color: @body-bg; - - &:hover, - &:focus { - color: #4a2b0f; - } -} - - -.signup-btn-nav { - margin-top: -2px !important; - padding-top: 10px !important; - padding-bottom: 10px !important; - margin-right: -12px; - @media (min-width: 991px) and (max-width: 1010px) { - margin-left: -10px; - margin-right: -5px; - } -} - -a[href="/email-signup"], a[href="/email-signin"] { - &.btn-social.btn-lg > :first-child { - line-height:43px; - font-size:26px; - } -} - form.update-email .btn{ margin:0; width:40%; @@ -523,19 +396,6 @@ form.update-email .btn{ } } -.public-profile-img { - height: 200px; - width: 200px; - border-radius: 5px; -} - -.ng-invalid.ng-dirty { - border-color: #FA787E; -} -.ng-valid.ng-dirty { - border-color: #78FA89; -} - .flat-top { margin-top: -5px; } @@ -602,7 +462,6 @@ form.update-email .btn{ color: #009900 } - .default-border-radius { border-radius: 5px; } @@ -616,7 +475,7 @@ form.update-email .btn{ } .testimonial-copy { - text-align: justify; + text-align: center; font-size: 18px !important; margin-left: 20px; margin-right: 20px; @@ -641,10 +500,6 @@ form.update-email .btn{ } } -.navbar-collapse { - border-top: 0; -} - .challenge-list-header { background-color: @brand-primary; color: @gray-lighter; @@ -661,53 +516,10 @@ form.update-email .btn{ text-align: right; } -.fcc-footer { - width: 100%; - height: 50px; - text-align: center; - background-color: @brand-primary; - padding: 12px; - bottom: 0; - left: 0; - position: absolute; - a { - font-size: 20px; - color: @gray-lighter; - margin-left: 0px; - margin-right: 0px; - padding-left: 10px; - padding-right: 10px; - padding-top: 14px; - padding-bottom: 12px; - &:hover { - color: @brand-primary; - background-color: @gray-lighter; - text-decoration: none; - } - } -} - -.embed-responsive-twitch-chat { - padding-bottom: 117%; -} - .graph-rect { fill: #ddd !important } -.scroll-locker { - overflow-x: hidden; - overflow-y: auto; -} - -.test-vertical-center { - margin-top: 8px; -} - -.courseware-height { - min-height: 650px; -} - .btn { font-weight: 400; white-space: normal; @@ -745,65 +557,6 @@ form.update-email .btn{ } } -@media (max-width: 991px) { - .navbar-header { - float: none; - } - - .navbar-toggle { - display: block; - } - - .navbar-collapse.collapse { - display: none !important; - } - - .navbar-nav { - margin-top: 0; - } - - .navbar-nav > li { - float: none; - } - - .navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - } - - .navbar-text { - float: none; - margin: 15px 0; - } - - /* since 3.1.0 */ - .navbar-collapse.collapse.in { - display: block !important; - } - - .collapsing { - overflow: hidden !important; - position: absolute; - left: 0; - right: 0; - } -} - -.navbar-toggle { - width: 80px; - padding-left: 0; - padding-right: 8px; - margin: 7px 2px 7px 0; - text-align: left; - font-size: 10px; -} - -.hamburger-text { - line-height: 0.75em; - margin-top: 10px; - font-size: 18px; -} - .story-list { padding-bottom: 30px; margin-bottom: 30px; @@ -894,8 +647,13 @@ hr { } .checklist-element { - margin-left: -60px; - margin-right: -20px; + margin-left: -60px; + margin-right: -20px; +} + +.public-profile-img { + height: 200px; + width: 200px; } .profile-social-icons { @@ -933,6 +691,26 @@ code { z-index: 20000 !important; } +.email-settings { + @media (max-width: 768px) { + text-align: center; + } +} + +.toggle-btn-group { + float: right; + .btn[disabled] { + opacity: 1; + } + @media (max-width: 768px) { + float: none; + .btn-toggle { + margin-top: 10px; + margin-bottom: 20px; + } + } +} + //uncomment this to see the dimensions of all elements outlined in red //* { @@ -1054,14 +832,20 @@ code { hr { background-image: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0)); } - .navbar-default .navbar-nav > li > a { - color: #CCC; - &:hover { - background-color: #666; + .modal-dialog { + .modal-content { + background-color: @gray; + } + .modal-header, + .modal-footer { + border: none; + } + .fa-check-circle { + color: darken(@brand-primary, 5%); } } a, .input-group-addon, .challenge-instructions a, .challenge-instructions #MDN-links a { - color: #CCC; + color: #f8f8f8; } .fa-github-square { color: @brand-primary; @@ -1073,8 +857,8 @@ code { color:#111; } code { - background-color: #999; - color: @brand-primary; + background-color: #242424; + color: #02a902; } .fcc-footer { a { @@ -1085,7 +869,7 @@ code { } .btn-primary { background-color: @brand-primary; - border-color: #292929; + border-color: #777; color:#CCC; transition: color 0.2s, background-color 0.2s; &:hover { @@ -1107,6 +891,12 @@ code { .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { border-color: @night-text-color; } + .btn-toggle { + background-color: transparent; + } + .btn-toggle.active { + background-color: @brand-primary; + } } //make about page contact table reponsive on small screens @@ -1129,10 +919,71 @@ and (max-width : 400px) { font-size: 17px; } -@import "chat.less"; -@import "jobs.less"; -@import 'code-mirror.less'; -@import "challenge.less"; -@import "toastr.less"; -@import "map.less"; -@import "drawers.less"; + +.editorScrollDiv { + -webkit-overflow-scrolling: touch; +} + +// Account Modal Styles +.modal-dialog { + margin: 80px; + + .modal-content { + background-color: #f9f9f9; + } + + .modal-header .close { + font-size: 30px; + padding-left: 10px; + } + + .modal-header { + text-align: center; + padding: 5px 20px; + } + + .modal-footer { + .spacer { + padding: 8px 0 8px 0; + } + + .btn { + padding: 12px; + } + + .btn-success { + color: darkgreen; + border-color: darkgreen; + } + + .btn-success:hover, + .btn-success:focus, + .btn-success:active { + color: #eee; + background-color: #208e36; + border-color: darkgreen; + } + + .modal-textarea { + width: 100%; + max-width: 590px; + border: 2px solid #ccc; + border-radius: 5px; + padding: 5px; + } + } +} + +@media (min-width: 768px) { + .modal-dialog { + width: 620px; + margin: 150px auto; + } +} + +// surrounding downstream import with &{} +// creates locally scoped imports +// and prevents vaiables from overwriting each other +&{ @import "./code-mirror.less"; } +&{ @import "./toastr.less"; } +&{ @import "../../common/index.less"; } diff --git a/client/less/map.less b/client/less/map.less deleted file mode 100644 index 3a2311aa286cd4..00000000000000 --- a/client/less/map.less +++ /dev/null @@ -1,290 +0,0 @@ -/* - * based off of https://github.com/gitterHQ/sidecar - * license: MIT - */ -.map-buttons { - margin-top: -10px; - & button, - & .input-group{ - width:300px; - } - .input-group{ - margin-top: 15px; - margin-left: auto; - margin-right: auto; - } -} - -.map-filter { - background:#fff; - border-color: darkgreen; -} - -.map-filter + .input-group-addon { - width: 40px; - color: darkgreen; - background-color: #fff; - border-color: darkgreen; - .fa { - position:absolute; - top:50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - right:10px; - } -} - -.map-filter.filled + span.input-group-addon { - background: darkgreen; - border-color: #000d00; - color: #fff; - cursor: pointer; - padding: 0; - span { - display: inline-block; - min-height: 30px; - width: 100%; - } -} - -.map-wrapper { - display: block; - height: 100%; - width: 100%; -} - - -.drawer .map-fixed-header { - padding-top: 30px; -} - -.map-accordion { - width: 100%; - max-width: 700px; - overflow-y: auto; - - .map-accordion-panel-title { - padding-bottom: 0px; - } - - .map-accordion-panel-collapse { - transition: height 0.001s; - } - - .map-accordion-panel-nested-collapse { - transition: height 0.001s; - } - - .map-accordion-panel-nested { - margin: 0 20px; - } - - .map-accordion-panel-nested-body { - padding-left: 36px; - } - - .map-accordion-panel-nested-title > a { - cursor: pointer; - } - - @media (max-width: 400px) { - .map-accordion-panel-nested { - margin: 0; - } - .map-accordion-panel-nested-title { - padding-left: 9px; - } - .map-accordion-panel-nested-body { - padding-left: 18px; - } - } - - a:focus { - text-decoration: none; - color:darkgreen; - } - a:focus:hover { - text-decoration: underline; - color:#001800; - } - - h2 > a { - width:100%; - display:block; - background:#efefef; - padding:10px 0; - padding-left:50px; - padding-right:20px; - cursor: pointer; - } - - a > h3 { - padding-left: 40px; - padding-bottom: 10px; - display: block; - } - - .map-accordion-block { - :before { - margin-right: 15px; - } - - p { - text-indent: -15px; - margin-left: 60px; - padding-right: 20px; - @media (max-width: 400px) { - margin-left:30px; - } - } - } - - @media (max-width: 720px) { - left: 0; - right: 0; - width: 100%; - top: 195px; - bottom: 0; - margin: 0; - // position:absolute; - overflow-x: hidden; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - h2 { - margin:15px 0; - padding:0; - &:first-of-type { - margin-top:0; - } - > a { - padding: 10px 0; - padding-left: 50px; - padding-right: 20px; - font-size: 20px; - } - } - a { - margin: 10px 0; - padding: 0; - > h3 { - clear:both; - font-size:20px; - } - } - } - - .challenge-block-description { - margin:0; - margin-top:-10px; - padding:0 15px 23px 30px; - } - - span.no-link-underline { - margin-left:-30px; - color: #666; - } - div > div:last-child { - margin-bottom:30px - } -} - -.challenge-block-time { - font-size: 18px; - color: #BBBBBB; - margin-bottom: 20px; - @media (min-width: 721px) { - // margin-right: 20px; - // margin-top: -30px; - float: right; - } -} - -#noneFound { - display:none; - margin:60px 30px 0; - font-size:30px; - text-align: center; - color:darkgreen; - .fa { - display:block; - font-size:300px; - } -} - - -.map-aside-body { - .map-fixed-header { - p { - margin-top: 0; - font-size: 16px; - } - .row.map-buttons { - float: none; - width: 100%; - text-align: center; - button { - width: 300px; - } - .input-group { - width: 300px; - padding-top: 5px; - } - } - } - .map-buttons:first-of-type { - float: none; - padding-left: 0; - } - .map-accordion { - top: 180px; - h2 { - margin: 15px 0; - a { - padding: 10px 0; - padding-left: 50px; - padding-right: 20px; - font-size: 20px; - } - } - h3 > a { - font-size: 20px; - } - } -} - -.night { - .map-fixed-header { - background-color: @night-body-bg; - } - .map-aside { - border-left-color:#222; - &-action-item { - filter: brightness(2) saturate(0); - -webkit-filter: brightness(2) saturate(0); - } - } - #map-filter, .input-group-addon { - border-color: #292929; - background-color: #666; - color:#ABABAB; - } - .map-accordion span.no-link-underline { - color: @brand-primary; - } - .map-accordion h2 > a { - background:#666; - } - .map-accordion a:focus, #noneFound { - color: #ABABAB; - } - .input-group-addon { - &.filled{ - background: @gray; - border-color: #292929; - color: white; - } - } - .challenge-title { - color: @night-text-color; - } -} diff --git a/client/less/toastr.less b/client/less/toastr.less index de17335ed3ca8b..018c3aff77a762 100644 --- a/client/less/toastr.less +++ b/client/less/toastr.less @@ -8,3 +8,9 @@ .notification-bar-message { padding-right: 2rem; } + +.notification-bar-action > a { + &:hover { + color: #007c00; + } +} diff --git a/client/main.js b/client/main.js index 3670e120ddce2f..bb60948d10410b 100644 --- a/client/main.js +++ b/client/main.js @@ -1,137 +1,9 @@ +import { aboutUrl, donateUrl } from '../common/utils/constantStrings.json'; + var main = window.main || {}; main.ga = window.ga || function() {}; -main = (function(main, global) { - const { Mousetrap } = global; - - // should be set before gitter script loads - ((window.gitter = {}).chat = {}).options = { - disableDefaultChat: true - }; - // wait for sidecar to load - - main.chat = {}; - main.chat.isOpen = false; - main.chat.createHelpChat = function createHelpChat() { - throw new Error('Sidecar chat has not initialized'); - }; - - document.addEventListener('gitter-sidecar-ready', function(e) { - main.chat.GitterChat = e.detail.Chat; - - main.chat.createHelpChat = function(room, helpChatBtnClass, roomTitle) { - // room is always in PascalCase - roomTitle = room - .replace(/([A-Z])/g, ' $1') - .replace('Java Script', 'JavaScript'); - - $('body').append( - '