commit 0335f5aa9336023d02085f5c58ded67f545d3c16 Author: Andreas Baldeau Date: Mon May 12 20:08:19 2014 +0200 Initial commit. diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..ba0accc --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "app/bower_components" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c2cdfb8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] + +# Change these settings to your own preference +indent_style = space +indent_size = 2 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2125666 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a526456 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules +dist +.tmp +.swp +.sass-cache +.idea/ diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..38af67f --- /dev/null +++ b/.jshintrc @@ -0,0 +1,24 @@ +{ + "node": true, + "browser": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 4, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "globals": { + "angular": false + } +} diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..d62e415 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,395 @@ +// Generated on 2014-05-12 using generator-angular 0.8.0 +'use strict'; + +module.exports = function (grunt) { + + // Load grunt tasks automatically + require('load-grunt-tasks')(grunt); + + // Time how long tasks take. Can help when optimizing build times + require('time-grunt')(grunt); + + // Define the configuration for all the tasks + grunt.initConfig({ + + // Project settings + yeoman: { + // configurable paths + app: require('./bower.json').appPath || 'app', + dist: 'dist' + }, + + // Watches files for changes and runs tasks based on the changed files + watch: { + bower: { + files: ['bower.json'], + tasks: ['bowerInstall'] + }, + js: { + files: ['<%= yeoman.app %>/scripts/{,**/}*.js', 'shared/{,**/}*.js'], + tasks: ['newer:jshint:all'], + options: { + livereload: true + } + }, + compass: { + files: ['<%= yeoman.app %>/styles/{,**/}*.{scss,sass}'], + tasks: ['compass:server', 'autoprefixer'] + }, + gruntfile: { + files: ['Gruntfile.js'] + }, + livereload: { + options: { + livereload: '<%= connect.options.livereload %>' + }, + files: [ + '<%= yeoman.app %>/{,**/}*.html', + '.tmp/styles/{,**/}*.css', + '<%= yeoman.app %>/images/{,**/}*.{png,jpg,jpeg,gif,webp,svg}' + ] + } + }, + + // The actual grunt server settings + connect: { + options: { + port: 9000, + // Change this to '0.0.0.0' to access the server from outside. + hostname: 'localhost', + livereload: 35729 + }, + livereload: { + options: { + open: true, + base: [ + '.tmp', + '<%= yeoman.app %>' + ] + } + }, + dist: { + options: { + base: '<%= yeoman.dist %>' + } + } + }, + + // The node-server settings + develop: { + server: { + file: 'server/main.js', + nodeArgs: ['--debug'] + } + }, + + // Make sure code styles are up to par and there are no obvious mistakes + jshint: { + options: { + jshintrc: '.jshintrc', + reporter: require('jshint-stylish') + }, + all: [ + 'Gruntfile.js', + '<%= yeoman.app %>/scripts/{,*/}*.js' + ] + }, + + // Empties folders to start fresh + clean: { + dist: { + files: [ + { + dot: true, + src: [ + '.tmp', + '<%= yeoman.dist %>/*', + '!<%= yeoman.dist %>/.git*' + ] + } + ] + }, + server: '.tmp' + }, + + // Add vendor prefixed styles + autoprefixer: { + options: { + browsers: ['last 1 version'] + }, + dist: { + files: [ + { + expand: true, + cwd: '.tmp/styles/', + src: '{,*/}*.css', + dest: '.tmp/styles/' + } + ] + } + }, + + // Automatically inject Bower components into the app + bowerInstall: { + app: { + src: ['<%= yeoman.app %>/index.html'], + ignorePath: '<%= yeoman.app %>/' + }, + sass: { + src: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], + ignorePath: '<%= yeoman.app %>/bower_components/' + } + }, + + // Compiles Sass to CSS and generates necessary files if requested + compass: { + options: { + sassDir: '<%= yeoman.app %>/styles', + cssDir: '.tmp/styles', + generatedImagesDir: '.tmp/images/generated', + imagesDir: '<%= yeoman.app %>/images', + javascriptsDir: '<%= yeoman.app %>/scripts', + fontsDir: '<%= yeoman.app %>/fonts', + importPath: '<%= yeoman.app %>/bower_components', + httpImagesPath: '/images', + httpGeneratedImagesPath: '/images/generated', + httpFontsPath: '/fonts', + relativeAssets: false, + assetCacheBuster: false, + raw: 'Sass::Script::Number.precision = 10\n' + }, + dist: { + options: { + generatedImagesDir: '<%= yeoman.dist %>/client/images/generated' + } + }, + server: { + options: { + debugInfo: true + } + } + }, + + // Renames files for browser caching purposes + rev: { + dist: { + files: { + src: [ + '<%= yeoman.dist %>/client/scripts/{,*/}*.js', + '<%= yeoman.dist %>/client/styles/{,*/}*.css', + '<%= yeoman.dist %>/client/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' + ] + } + } + }, + + // Reads HTML for usemin blocks to enable smart builds that automatically + // concat, minify and revision files. Creates configurations in memory so + // additional tasks can operate on them + useminPrepare: { + html: '<%= yeoman.app %>/index.html', + options: { + dest: '<%= yeoman.dist %>/client', + flow: { + html: { + steps: { + js: ['concat', 'uglifyjs'], + css: ['cssmin'] + }, + post: {} + } + } + } + }, + + // Performs rewrites based on rev and the useminPrepare configuration + usemin: { + html: ['<%= yeoman.dist %>/client/{,*/}*.html'], + css: ['<%= yeoman.dist %>/client/styles/{,*/}*.css'], + options: { + assetsDirs: ['<%= yeoman.dist %>/client'] + } + }, + + // The following *-min tasks produce minified files in the dist folder + cssmin: { + options: { + root: '<%= yeoman.app %>' + } + }, + + imagemin: { + dist: { + files: [ + { + expand: true, + cwd: '<%= yeoman.app %>/images', + src: '{,*/}*.{png,jpg,jpeg,gif}', + dest: '<%= yeoman.dist %>/client/images' + } + ] + } + }, + + svgmin: { + dist: { + files: [ + { + expand: true, + cwd: '<%= yeoman.app %>/images', + src: '{,*/}*.svg', + dest: '<%= yeoman.dist %>/client/images' + } + ] + } + }, + + htmlmin: { + dist: { + options: { + collapseWhitespace: true, + collapseBooleanAttributes: true, + removeCommentsFromCDATA: true, + removeOptionalTags: true + }, + files: [ + { + expand: true, + cwd: '<%= yeoman.dist %>/client', + src: ['*.html', 'views/{,*/}*.html'], + dest: '<%= yeoman.dist %>/client' + } + ] + } + }, + + // ngmin tries to make the code safe for minification automatically by + // using the Angular long form for dependency injection. It doesn't work on + // things like resolve or inject so those have to be done manually. + ngmin: { + dist: { + files: [ + { + expand: true, + cwd: '.tmp/concat/scripts', + src: '*.js', + dest: '.tmp/concat/scripts' + } + ] + } + }, + + uglify: { + options: { + mangle: false + } + }, + + // Copies remaining files to places other tasks can use + copy: { + dist: { + files: [ + { + expand: true, + dot: true, + cwd: '<%= yeoman.app %>', + dest: '<%= yeoman.dist %>/client', + src: [ + '*.{ico,png,txt}', + '.htaccess', + '*.html', + 'views/{,**/}*.html', + 'images/{,**/}*.{webp}', + 'fonts/*' + ] + }, + { + expand: true, + cwd: '.tmp/images', + dest: '<%= yeoman.dist %>/client/images', + src: ['generated/*'] + }, + { + expand: true, + cwd: 'server', + dest: '<%= yeoman.dist %>/server', + src: ['{,**/}*.js'] + }, + { + expand: true, + cwd: 'shared', + dest: '<%= yeoman.dist %>/shared', + src: ['{,**/}*.js'] + }, + { + expand: true, + cwd: '.', + dest: '<%= yeoman.dist %>/', + src: ['package.json'] + } + ] + }, + styles: { + expand: true, + cwd: '<%= yeoman.app %>/styles', + dest: '.tmp/styles/', + src: '{,**/}*.css' + } + }, + + // Run some tasks in parallel to speed up the build process + concurrent: { + server: [ + 'compass:server' + ], + dist: [ + 'compass:dist', + 'imagemin', + 'svgmin' + ] + } + }); + + + grunt.registerTask('serve', function (target) { + if (target === 'dist') { + return grunt.task.run(['build', 'develop', 'connect:dist:keepalive']); + } + + grunt.task.run([ + 'clean:server', + 'bowerInstall', + 'concurrent:server', + 'autoprefixer', + 'connect:livereload', + 'develop', + 'watch' + ]); + }); + + grunt.registerTask('server', function (target) { + grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); + grunt.task.run(['serve:' + target]); + }); + + grunt.registerTask('build', [ + 'clean:dist', + 'bowerInstall', + 'useminPrepare', + 'concurrent:dist', + 'autoprefixer', + 'concat', + 'ngmin', + 'copy:dist', + 'cssmin', + 'uglify', + 'rev', + 'usemin', + 'htmlmin' + ]); + + grunt.registerTask('default', [ + 'newer:jshint', + 'build' + ]); +}; diff --git a/app/bower_components/angular-leaflet-directive/.bower.json b/app/bower_components/angular-leaflet-directive/.bower.json new file mode 100644 index 0000000..f3ab23b --- /dev/null +++ b/app/bower_components/angular-leaflet-directive/.bower.json @@ -0,0 +1,54 @@ +{ + "name": "angular-leaflet-directive", + "description": "AngularJS directive to embed an interact with maps managed by Leaflet library", + "keywords": [ + "angularjs", + "javascript", + "directive", + "leaflet" + ], + "main": [ + "dist/angular-leaflet-directive.js" + ], + "dependencies": { + "angular": "1.2.x", + "leaflet-dist": "0.7.x" + }, + "devDependencies": { + "jquery": "2.1.x", + "bootstrap": "3.1.x", + "angular-route": "1.2.x", + "angular-animate": "1.2.x", + "angular-mocks": "1.2.x", + "leaflet.markerclusterer": "0.4", + "leaflet.draw": "0.2.2", + "Leaflet.label": "0.2.1", + "leaflet-tilelayer-geojson": "*", + "Leaflet.awesome-markers": "*", + "webgl-heatmap-leaflet": "*", + "leaflet-plugins": "1.0.1", + "esri-leaflet": "0.0.1-beta.4" + }, + "ignore": [ + "**/.*", + "src", + "doc", + "examples", + "test", + "*.md", + "Gruntfile.js", + "package.json", + "bower.json" + ], + "homepage": "https://github.com/tombatossals/angular-leaflet-directive", + "version": "0.7.7", + "_release": "0.7.7", + "_resolution": { + "type": "version", + "tag": "v0.7.7", + "commit": "f2b426b3daf3a3753bb76a3526956f14818f358c" + }, + "_source": "git://github.com/tombatossals/angular-leaflet-directive.git", + "_target": "~0.7.6", + "_originalSource": "angular-leaflet-directive" +} \ No newline at end of file diff --git a/app/bower_components/angular-leaflet-directive/LICENSE b/app/bower_components/angular-leaflet-directive/LICENSE new file mode 100644 index 0000000..6896b53 --- /dev/null +++ b/app/bower_components/angular-leaflet-directive/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2012-2013 https://github.com/tombatossals/angular-leaflet-directive + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/app/bower_components/angular-mocks/.bower.json b/app/bower_components/angular-mocks/.bower.json new file mode 100644 index 0000000..1dca4a2 --- /dev/null +++ b/app/bower_components/angular-mocks/.bower.json @@ -0,0 +1,18 @@ +{ + "name": "angular-mocks", + "version": "1.2.15", + "main": "./angular-mocks.js", + "dependencies": { + "angular": "1.2.15" + }, + "homepage": "https://github.com/angular/bower-angular-mocks", + "_release": "1.2.15", + "_resolution": { + "type": "version", + "tag": "v1.2.15", + "commit": "6ea137cb6f72c6b1d424702345b6c077db722214" + }, + "_source": "git://github.com/angular/bower-angular-mocks.git", + "_target": "1.2.15", + "_originalSource": "angular-mocks" +} \ No newline at end of file diff --git a/app/bower_components/angular-mocks/README.md b/app/bower_components/angular-mocks/README.md new file mode 100644 index 0000000..3448d28 --- /dev/null +++ b/app/bower_components/angular-mocks/README.md @@ -0,0 +1,42 @@ +# bower-angular-mocks + +This repo is for distribution on `bower`. The source for this module is in the +[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMock). +Please file issues and pull requests against that repo. + +## Install + +Install with `bower`: + +```shell +bower install angular-mocks +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/guide/dev_guide.unit-testing). + +## License + +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/app/bower_components/angular-mocks/angular-mocks.js b/app/bower_components/angular-mocks/angular-mocks.js new file mode 100644 index 0000000..62e5d08 --- /dev/null +++ b/app/bower_components/angular-mocks/angular-mocks.js @@ -0,0 +1,2159 @@ +/** + * @license AngularJS v1.2.15 + * (c) 2010-2014 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) { + +'use strict'; + +/** + * @ngdoc object + * @name angular.mock + * @description + * + * Namespace from 'angular-mocks.js' which contains testing related code. + */ +angular.mock = {}; + +/** + * ! This is a private undocumented service ! + * + * @name $browser + * + * @description + * This service is a mock implementation of {@link ng.$browser}. It provides fake + * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr, + * cookies, etc... + * + * The api of this service is the same as that of the real {@link ng.$browser $browser}, except + * that there are several helper methods available which can be used in tests. + */ +angular.mock.$BrowserProvider = function() { + this.$get = function() { + return new angular.mock.$Browser(); + }; +}; + +angular.mock.$Browser = function() { + var self = this; + + this.isMock = true; + self.$$url = "http://server/"; + self.$$lastUrl = self.$$url; // used by url polling fn + self.pollFns = []; + + // TODO(vojta): remove this temporary api + self.$$completeOutstandingRequest = angular.noop; + self.$$incOutstandingRequestCount = angular.noop; + + + // register url polling fn + + self.onUrlChange = function(listener) { + self.pollFns.push( + function() { + if (self.$$lastUrl != self.$$url) { + self.$$lastUrl = self.$$url; + listener(self.$$url); + } + } + ); + + return listener; + }; + + self.cookieHash = {}; + self.lastCookieHash = {}; + self.deferredFns = []; + self.deferredNextId = 0; + + self.defer = function(fn, delay) { + delay = delay || 0; + self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId}); + self.deferredFns.sort(function(a,b){ return a.time - b.time;}); + return self.deferredNextId++; + }; + + + /** + * @name $browser#defer.now + * + * @description + * Current milliseconds mock time. + */ + self.defer.now = 0; + + + self.defer.cancel = function(deferId) { + var fnIndex; + + angular.forEach(self.deferredFns, function(fn, index) { + if (fn.id === deferId) fnIndex = index; + }); + + if (fnIndex !== undefined) { + self.deferredFns.splice(fnIndex, 1); + return true; + } + + return false; + }; + + + /** + * @name $browser#defer.flush + * + * @description + * Flushes all pending requests and executes the defer callbacks. + * + * @param {number=} number of milliseconds to flush. See {@link #defer.now} + */ + self.defer.flush = function(delay) { + if (angular.isDefined(delay)) { + self.defer.now += delay; + } else { + if (self.deferredFns.length) { + self.defer.now = self.deferredFns[self.deferredFns.length-1].time; + } else { + throw new Error('No deferred tasks to be flushed'); + } + } + + while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) { + self.deferredFns.shift().fn(); + } + }; + + self.$$baseHref = ''; + self.baseHref = function() { + return this.$$baseHref; + }; +}; +angular.mock.$Browser.prototype = { + +/** + * @name $browser#poll + * + * @description + * run all fns in pollFns + */ + poll: function poll() { + angular.forEach(this.pollFns, function(pollFn){ + pollFn(); + }); + }, + + addPollFn: function(pollFn) { + this.pollFns.push(pollFn); + return pollFn; + }, + + url: function(url, replace) { + if (url) { + this.$$url = url; + return this; + } + + return this.$$url; + }, + + cookies: function(name, value) { + if (name) { + if (angular.isUndefined(value)) { + delete this.cookieHash[name]; + } else { + if (angular.isString(value) && //strings only + value.length <= 4096) { //strict cookie storage limits + this.cookieHash[name] = value; + } + } + } else { + if (!angular.equals(this.cookieHash, this.lastCookieHash)) { + this.lastCookieHash = angular.copy(this.cookieHash); + this.cookieHash = angular.copy(this.cookieHash); + } + return this.cookieHash; + } + }, + + notifyWhenNoOutstandingRequests: function(fn) { + fn(); + } +}; + + +/** + * @ngdoc provider + * @name $exceptionHandlerProvider + * + * @description + * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors + * passed into the `$exceptionHandler`. + */ + +/** + * @ngdoc service + * @name $exceptionHandler + * + * @description + * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed + * into it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration + * information. + * + * + * ```js + * describe('$exceptionHandlerProvider', function() { + * + * it('should capture log messages and exceptions', function() { + * + * module(function($exceptionHandlerProvider) { + * $exceptionHandlerProvider.mode('log'); + * }); + * + * inject(function($log, $exceptionHandler, $timeout) { + * $timeout(function() { $log.log(1); }); + * $timeout(function() { $log.log(2); throw 'banana peel'; }); + * $timeout(function() { $log.log(3); }); + * expect($exceptionHandler.errors).toEqual([]); + * expect($log.assertEmpty()); + * $timeout.flush(); + * expect($exceptionHandler.errors).toEqual(['banana peel']); + * expect($log.log.logs).toEqual([[1], [2], [3]]); + * }); + * }); + * }); + * ``` + */ + +angular.mock.$ExceptionHandlerProvider = function() { + var handler; + + /** + * @ngdoc method + * @name $exceptionHandlerProvider#mode + * + * @description + * Sets the logging mode. + * + * @param {string} mode Mode of operation, defaults to `rethrow`. + * + * - `rethrow`: If any errors are passed into the handler in tests, it typically + * means that there is a bug in the application or test, so this mock will + * make these tests fail. + * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` + * mode stores an array of errors in `$exceptionHandler.errors`, to allow later + * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and + * {@link ngMock.$log#reset reset()} + */ + this.mode = function(mode) { + switch(mode) { + case 'rethrow': + handler = function(e) { + throw e; + }; + break; + case 'log': + var errors = []; + + handler = function(e) { + if (arguments.length == 1) { + errors.push(e); + } else { + errors.push([].slice.call(arguments, 0)); + } + }; + + handler.errors = errors; + break; + default: + throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); + } + }; + + this.$get = function() { + return handler; + }; + + this.mode('rethrow'); +}; + + +/** + * @ngdoc service + * @name $log + * + * @description + * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays + * (one array per logging level). These arrays are exposed as `logs` property of each of the + * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`. + * + */ +angular.mock.$LogProvider = function() { + var debug = true; + + function concat(array1, array2, index) { + return array1.concat(Array.prototype.slice.call(array2, index)); + } + + this.debugEnabled = function(flag) { + if (angular.isDefined(flag)) { + debug = flag; + return this; + } else { + return debug; + } + }; + + this.$get = function () { + var $log = { + log: function() { $log.log.logs.push(concat([], arguments, 0)); }, + warn: function() { $log.warn.logs.push(concat([], arguments, 0)); }, + info: function() { $log.info.logs.push(concat([], arguments, 0)); }, + error: function() { $log.error.logs.push(concat([], arguments, 0)); }, + debug: function() { + if (debug) { + $log.debug.logs.push(concat([], arguments, 0)); + } + } + }; + + /** + * @ngdoc method + * @name $log#reset + * + * @description + * Reset all of the logging arrays to empty. + */ + $log.reset = function () { + /** + * @ngdoc property + * @name $log#log.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#log}. + * + * @example + * ```js + * $log.log('Some Log'); + * var first = $log.log.logs.unshift(); + * ``` + */ + $log.log.logs = []; + /** + * @ngdoc property + * @name $log#info.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#info}. + * + * @example + * ```js + * $log.info('Some Info'); + * var first = $log.info.logs.unshift(); + * ``` + */ + $log.info.logs = []; + /** + * @ngdoc property + * @name $log#warn.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#warn}. + * + * @example + * ```js + * $log.warn('Some Warning'); + * var first = $log.warn.logs.unshift(); + * ``` + */ + $log.warn.logs = []; + /** + * @ngdoc property + * @name $log#error.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#error}. + * + * @example + * ```js + * $log.error('Some Error'); + * var first = $log.error.logs.unshift(); + * ``` + */ + $log.error.logs = []; + /** + * @ngdoc property + * @name $log#debug.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#debug}. + * + * @example + * ```js + * $log.debug('Some Error'); + * var first = $log.debug.logs.unshift(); + * ``` + */ + $log.debug.logs = []; + }; + + /** + * @ngdoc method + * @name $log#assertEmpty + * + * @description + * Assert that the all of the logging methods have no logged messages. If messages present, an + * exception is thrown. + */ + $log.assertEmpty = function() { + var errors = []; + angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) { + angular.forEach($log[logLevel].logs, function(log) { + angular.forEach(log, function (logItem) { + errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + + (logItem.stack || '')); + }); + }); + }); + if (errors.length) { + errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or "+ + "an expected log message was not checked and removed:"); + errors.push(''); + throw new Error(errors.join('\n---------\n')); + } + }; + + $log.reset(); + return $log; + }; +}; + + +/** + * @ngdoc service + * @name $interval + * + * @description + * Mock implementation of the $interval service. + * + * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to + * move forward by `millis` milliseconds and trigger any functions scheduled to run in that + * time. + * + * @param {function()} fn A function that should be called repeatedly. + * @param {number} delay Number of milliseconds between each function call. + * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat + * indefinitely. + * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise + * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. + * @returns {promise} A promise which will be notified on each iteration. + */ +angular.mock.$IntervalProvider = function() { + this.$get = ['$rootScope', '$q', + function($rootScope, $q) { + var repeatFns = [], + nextRepeatId = 0, + now = 0; + + var $interval = function(fn, delay, count, invokeApply) { + var deferred = $q.defer(), + promise = deferred.promise, + iteration = 0, + skipApply = (angular.isDefined(invokeApply) && !invokeApply); + + count = (angular.isDefined(count)) ? count : 0, + promise.then(null, null, fn); + + promise.$$intervalId = nextRepeatId; + + function tick() { + deferred.notify(iteration++); + + if (count > 0 && iteration >= count) { + var fnIndex; + deferred.resolve(iteration); + + angular.forEach(repeatFns, function(fn, index) { + if (fn.id === promise.$$intervalId) fnIndex = index; + }); + + if (fnIndex !== undefined) { + repeatFns.splice(fnIndex, 1); + } + } + + if (!skipApply) $rootScope.$apply(); + } + + repeatFns.push({ + nextTime:(now + delay), + delay: delay, + fn: tick, + id: nextRepeatId, + deferred: deferred + }); + repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); + + nextRepeatId++; + return promise; + }; + /** + * @ngdoc method + * @name $interval#cancel + * + * @description + * Cancels a task associated with the `promise`. + * + * @param {promise} promise A promise from calling the `$interval` function. + * @returns {boolean} Returns `true` if the task was successfully cancelled. + */ + $interval.cancel = function(promise) { + if(!promise) return false; + var fnIndex; + + angular.forEach(repeatFns, function(fn, index) { + if (fn.id === promise.$$intervalId) fnIndex = index; + }); + + if (fnIndex !== undefined) { + repeatFns[fnIndex].deferred.reject('canceled'); + repeatFns.splice(fnIndex, 1); + return true; + } + + return false; + }; + + /** + * @ngdoc method + * @name $interval#flush + * @description + * + * Runs interval tasks scheduled to be run in the next `millis` milliseconds. + * + * @param {number=} millis maximum timeout amount to flush up until. + * + * @return {number} The amount of time moved forward. + */ + $interval.flush = function(millis) { + now += millis; + while (repeatFns.length && repeatFns[0].nextTime <= now) { + var task = repeatFns[0]; + task.fn(); + task.nextTime += task.delay; + repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); + } + return millis; + }; + + return $interval; + }]; +}; + + +/* jshint -W101 */ +/* The R_ISO8061_STR regex is never going to fit into the 100 char limit! + * This directive should go inside the anonymous function but a bug in JSHint means that it would + * not be enacted early enough to prevent the warning. + */ +var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; + +function jsonStringToDate(string) { + var match; + if (match = string.match(R_ISO8061_STR)) { + var date = new Date(0), + tzHour = 0, + tzMin = 0; + if (match[9]) { + tzHour = int(match[9] + match[10]); + tzMin = int(match[9] + match[11]); + } + date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3])); + date.setUTCHours(int(match[4]||0) - tzHour, + int(match[5]||0) - tzMin, + int(match[6]||0), + int(match[7]||0)); + return date; + } + return string; +} + +function int(str) { + return parseInt(str, 10); +} + +function padNumber(num, digits, trim) { + var neg = ''; + if (num < 0) { + neg = '-'; + num = -num; + } + num = '' + num; + while(num.length < digits) num = '0' + num; + if (trim) + num = num.substr(num.length - digits); + return neg + num; +} + + +/** + * @ngdoc type + * @name angular.mock.TzDate + * @description + * + * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`. + * + * Mock of the Date type which has its timezone specified via constructor arg. + * + * The main purpose is to create Date-like instances with timezone fixed to the specified timezone + * offset, so that we can test code that depends on local timezone settings without dependency on + * the time zone settings of the machine where the code is running. + * + * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored) + * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC* + * + * @example + * !!!! WARNING !!!!! + * This is not a complete Date object so only methods that were implemented can be called safely. + * To make matters worse, TzDate instances inherit stuff from Date via a prototype. + * + * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is + * incomplete we might be missing some non-standard methods. This can result in errors like: + * "Date.prototype.foo called on incompatible Object". + * + * ```js + * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z'); + * newYearInBratislava.getTimezoneOffset() => -60; + * newYearInBratislava.getFullYear() => 2010; + * newYearInBratislava.getMonth() => 0; + * newYearInBratislava.getDate() => 1; + * newYearInBratislava.getHours() => 0; + * newYearInBratislava.getMinutes() => 0; + * newYearInBratislava.getSeconds() => 0; + * ``` + * + */ +angular.mock.TzDate = function (offset, timestamp) { + var self = new Date(0); + if (angular.isString(timestamp)) { + var tsStr = timestamp; + + self.origDate = jsonStringToDate(timestamp); + + timestamp = self.origDate.getTime(); + if (isNaN(timestamp)) + throw { + name: "Illegal Argument", + message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string" + }; + } else { + self.origDate = new Date(timestamp); + } + + var localOffset = new Date(timestamp).getTimezoneOffset(); + self.offsetDiff = localOffset*60*1000 - offset*1000*60*60; + self.date = new Date(timestamp + self.offsetDiff); + + self.getTime = function() { + return self.date.getTime() - self.offsetDiff; + }; + + self.toLocaleDateString = function() { + return self.date.toLocaleDateString(); + }; + + self.getFullYear = function() { + return self.date.getFullYear(); + }; + + self.getMonth = function() { + return self.date.getMonth(); + }; + + self.getDate = function() { + return self.date.getDate(); + }; + + self.getHours = function() { + return self.date.getHours(); + }; + + self.getMinutes = function() { + return self.date.getMinutes(); + }; + + self.getSeconds = function() { + return self.date.getSeconds(); + }; + + self.getMilliseconds = function() { + return self.date.getMilliseconds(); + }; + + self.getTimezoneOffset = function() { + return offset * 60; + }; + + self.getUTCFullYear = function() { + return self.origDate.getUTCFullYear(); + }; + + self.getUTCMonth = function() { + return self.origDate.getUTCMonth(); + }; + + self.getUTCDate = function() { + return self.origDate.getUTCDate(); + }; + + self.getUTCHours = function() { + return self.origDate.getUTCHours(); + }; + + self.getUTCMinutes = function() { + return self.origDate.getUTCMinutes(); + }; + + self.getUTCSeconds = function() { + return self.origDate.getUTCSeconds(); + }; + + self.getUTCMilliseconds = function() { + return self.origDate.getUTCMilliseconds(); + }; + + self.getDay = function() { + return self.date.getDay(); + }; + + // provide this method only on browsers that already have it + if (self.toISOString) { + self.toISOString = function() { + return padNumber(self.origDate.getUTCFullYear(), 4) + '-' + + padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' + + padNumber(self.origDate.getUTCDate(), 2) + 'T' + + padNumber(self.origDate.getUTCHours(), 2) + ':' + + padNumber(self.origDate.getUTCMinutes(), 2) + ':' + + padNumber(self.origDate.getUTCSeconds(), 2) + '.' + + padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'; + }; + } + + //hide all methods not implemented in this mock that the Date prototype exposes + var unimplementedMethods = ['getUTCDay', + 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', + 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', + 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', + 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString', + 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf']; + + angular.forEach(unimplementedMethods, function(methodName) { + self[methodName] = function() { + throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock"); + }; + }); + + return self; +}; + +//make "tzDateInstance instanceof Date" return true +angular.mock.TzDate.prototype = Date.prototype; +/* jshint +W101 */ + +angular.mock.animate = angular.module('ngAnimateMock', ['ng']) + + .config(['$provide', function($provide) { + + var reflowQueue = []; + $provide.value('$$animateReflow', function(fn) { + var index = reflowQueue.length; + reflowQueue.push(fn); + return function cancel() { + reflowQueue.splice(index, 1); + }; + }); + + $provide.decorator('$animate', function($delegate, $$asyncCallback) { + var animate = { + queue : [], + enabled : $delegate.enabled, + triggerCallbacks : function() { + $$asyncCallback.flush(); + }, + triggerReflow : function() { + angular.forEach(reflowQueue, function(fn) { + fn(); + }); + reflowQueue = []; + } + }; + + angular.forEach( + ['enter','leave','move','addClass','removeClass','setClass'], function(method) { + animate[method] = function() { + animate.queue.push({ + event : method, + element : arguments[0], + args : arguments + }); + $delegate[method].apply($delegate, arguments); + }; + }); + + return animate; + }); + + }]); + + +/** + * @ngdoc function + * @name angular.mock.dump + * @description + * + * *NOTE*: this is not an injectable instance, just a globally available function. + * + * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for + * debugging. + * + * This method is also available on window, where it can be used to display objects on debug + * console. + * + * @param {*} object - any object to turn into string. + * @return {string} a serialized string of the argument + */ +angular.mock.dump = function(object) { + return serialize(object); + + function serialize(object) { + var out; + + if (angular.isElement(object)) { + object = angular.element(object); + out = angular.element('
'); + angular.forEach(object, function(element) { + out.append(angular.element(element).clone()); + }); + out = out.html(); + } else if (angular.isArray(object)) { + out = []; + angular.forEach(object, function(o) { + out.push(serialize(o)); + }); + out = '[ ' + out.join(', ') + ' ]'; + } else if (angular.isObject(object)) { + if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) { + out = serializeScope(object); + } else if (object instanceof Error) { + out = object.stack || ('' + object.name + ': ' + object.message); + } else { + // TODO(i): this prevents methods being logged, + // we should have a better way to serialize objects + out = angular.toJson(object, true); + } + } else { + out = String(object); + } + + return out; + } + + function serializeScope(scope, offset) { + offset = offset || ' '; + var log = [offset + 'Scope(' + scope.$id + '): {']; + for ( var key in scope ) { + if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) { + log.push(' ' + key + ': ' + angular.toJson(scope[key])); + } + } + var child = scope.$$childHead; + while(child) { + log.push(serializeScope(child, offset + ' ')); + child = child.$$nextSibling; + } + log.push('}'); + return log.join('\n' + offset); + } +}; + +/** + * @ngdoc service + * @name $httpBackend + * @description + * Fake HTTP backend implementation suitable for unit testing applications that use the + * {@link ng.$http $http service}. + * + * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less + * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}. + * + * During unit testing, we want our unit tests to run quickly and have no external dependencies so + * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or + * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is + * to verify whether a certain request has been sent or not, or alternatively just let the + * application make requests, respond with pre-trained responses and assert that the end result is + * what we expect it to be. + * + * This mock implementation can be used to respond with static or dynamic responses via the + * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc). + * + * When an Angular application needs some data from a server, it calls the $http service, which + * sends the request to a real server using $httpBackend service. With dependency injection, it is + * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify + * the requests and respond with some testing data without sending a request to real server. + * + * There are two ways to specify what test data should be returned as http responses by the mock + * backend when the code under test makes http requests: + * + * - `$httpBackend.expect` - specifies a request expectation + * - `$httpBackend.when` - specifies a backend definition + * + * + * # Request Expectations vs Backend Definitions + * + * Request expectations provide a way to make assertions about requests made by the application and + * to define responses for those requests. The test will fail if the expected requests are not made + * or they are made in the wrong order. + * + * Backend definitions allow you to define a fake backend for your application which doesn't assert + * if a particular request was made or not, it just returns a trained response if a request is made. + * The test will pass whether or not the request gets made during testing. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Request expectationsBackend definitions
Syntax.expect(...).respond(...).when(...).respond(...)
Typical usagestrict unit testsloose (black-box) unit testing
Fulfills multiple requestsNOYES
Order of requests mattersYESNO
Request requiredYESNO
Response requiredoptional (see below)YES
+ * + * In cases where both backend definitions and request expectations are specified during unit + * testing, the request expectations are evaluated first. + * + * If a request expectation has no response specified, the algorithm will search your backend + * definitions for an appropriate response. + * + * If a request didn't match any expectation or if the expectation doesn't have the response + * defined, the backend definitions are evaluated in sequential order to see if any of them match + * the request. The response from the first matched definition is returned. + * + * + * # Flushing HTTP requests + * + * The $httpBackend used in production always responds to requests asynchronously. If we preserved + * this behavior in unit testing, we'd have to create async unit tests, which are hard to write, + * to follow and to maintain. But neither can the testing mock respond synchronously; that would + * change the execution of the code under test. For this reason, the mock $httpBackend has a + * `flush()` method, which allows the test to explicitly flush pending requests. This preserves + * the async api of the backend, while allowing the test to execute synchronously. + * + * + * # Unit testing with mock $httpBackend + * The following code shows how to setup and use the mock backend when unit testing a controller. + * First we create the controller under test: + * + ```js + // The controller code + function MyController($scope, $http) { + var authToken; + + $http.get('/auth.py').success(function(data, status, headers) { + authToken = headers('A-Token'); + $scope.user = data; + }); + + $scope.saveMessage = function(message) { + var headers = { 'Authorization': authToken }; + $scope.status = 'Saving...'; + + $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) { + $scope.status = ''; + }).error(function() { + $scope.status = 'ERROR!'; + }); + }; + } + ``` + * + * Now we setup the mock backend and create the test specs: + * + ```js + // testing controller + describe('MyController', function() { + var $httpBackend, $rootScope, createController; + + beforeEach(inject(function($injector) { + // Set up the mock http service responses + $httpBackend = $injector.get('$httpBackend'); + // backend definition common for all tests + $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'}); + + // Get hold of a scope (i.e. the root scope) + $rootScope = $injector.get('$rootScope'); + // The $controller service is used to create instances of controllers + var $controller = $injector.get('$controller'); + + createController = function() { + return $controller('MyController', {'$scope' : $rootScope }); + }; + })); + + + afterEach(function() { + $httpBackend.verifyNoOutstandingExpectation(); + $httpBackend.verifyNoOutstandingRequest(); + }); + + + it('should fetch authentication token', function() { + $httpBackend.expectGET('/auth.py'); + var controller = createController(); + $httpBackend.flush(); + }); + + + it('should send msg to server', function() { + var controller = createController(); + $httpBackend.flush(); + + // now you don’t care about the authentication, but + // the controller will still send the request and + // $httpBackend will respond without you having to + // specify the expectation and response for this request + + $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, ''); + $rootScope.saveMessage('message content'); + expect($rootScope.status).toBe('Saving...'); + $httpBackend.flush(); + expect($rootScope.status).toBe(''); + }); + + + it('should send auth header', function() { + var controller = createController(); + $httpBackend.flush(); + + $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) { + // check if the header was send, if it wasn't the expectation won't + // match the request and the test will fail + return headers['Authorization'] == 'xxx'; + }).respond(201, ''); + + $rootScope.saveMessage('whatever'); + $httpBackend.flush(); + }); + }); + ``` + */ +angular.mock.$HttpBackendProvider = function() { + this.$get = ['$rootScope', createHttpBackendMock]; +}; + +/** + * General factory function for $httpBackend mock. + * Returns instance for unit testing (when no arguments specified): + * - passing through is disabled + * - auto flushing is disabled + * + * Returns instance for e2e testing (when `$delegate` and `$browser` specified): + * - passing through (delegating request to real backend) is enabled + * - auto flushing is enabled + * + * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified) + * @param {Object=} $browser Auto-flushing enabled if specified + * @return {Object} Instance of $httpBackend mock + */ +function createHttpBackendMock($rootScope, $delegate, $browser) { + var definitions = [], + expectations = [], + responses = [], + responsesPush = angular.bind(responses, responses.push), + copy = angular.copy; + + function createResponse(status, data, headers) { + if (angular.isFunction(status)) return status; + + return function() { + return angular.isNumber(status) + ? [status, data, headers] + : [200, status, data]; + }; + } + + // TODO(vojta): change params to: method, url, data, headers, callback + function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) { + var xhr = new MockXhr(), + expectation = expectations[0], + wasExpected = false; + + function prettyPrint(data) { + return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp) + ? data + : angular.toJson(data); + } + + function wrapResponse(wrapped) { + if (!$browser && timeout && timeout.then) timeout.then(handleTimeout); + + return handleResponse; + + function handleResponse() { + var response = wrapped.response(method, url, data, headers); + xhr.$$respHeaders = response[2]; + callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders()); + } + + function handleTimeout() { + for (var i = 0, ii = responses.length; i < ii; i++) { + if (responses[i] === handleResponse) { + responses.splice(i, 1); + callback(-1, undefined, ''); + break; + } + } + } + } + + if (expectation && expectation.match(method, url)) { + if (!expectation.matchData(data)) + throw new Error('Expected ' + expectation + ' with different data\n' + + 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data); + + if (!expectation.matchHeaders(headers)) + throw new Error('Expected ' + expectation + ' with different headers\n' + + 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + + prettyPrint(headers)); + + expectations.shift(); + + if (expectation.response) { + responses.push(wrapResponse(expectation)); + return; + } + wasExpected = true; + } + + var i = -1, definition; + while ((definition = definitions[++i])) { + if (definition.match(method, url, data, headers || {})) { + if (definition.response) { + // if $browser specified, we do auto flush all requests + ($browser ? $browser.defer : responsesPush)(wrapResponse(definition)); + } else if (definition.passThrough) { + $delegate(method, url, data, callback, headers, timeout, withCredentials); + } else throw new Error('No response defined !'); + return; + } + } + throw wasExpected ? + new Error('No response defined !') : + new Error('Unexpected request: ' + method + ' ' + url + '\n' + + (expectation ? 'Expected ' + expectation : 'No more request expected')); + } + + /** + * @ngdoc method + * @name $httpBackend#when + * @description + * Creates a new backend definition. + * + * @param {string} method HTTP method. + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. + * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header + * object and returns true if the headers match the current definition. + * @returns {requestHandler} Returns an object with `respond` method that controls how a matched + * request is handled. + * + * - respond – + * `{function([status,] data[, headers])|function(function(method, url, data, headers)}` + * – The respond method takes a set of static data to be returned or a function that can return + * an array containing response status (number), response data (string) and response headers + * (Object). + */ + $httpBackend.when = function(method, url, data, headers) { + var definition = new MockHttpExpectation(method, url, data, headers), + chain = { + respond: function(status, data, headers) { + definition.response = createResponse(status, data, headers); + } + }; + + if ($browser) { + chain.passThrough = function() { + definition.passThrough = true; + }; + } + + definitions.push(definition); + return chain; + }; + + /** + * @ngdoc method + * @name $httpBackend#whenGET + * @description + * Creates a new backend definition for GET requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenHEAD + * @description + * Creates a new backend definition for HEAD requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenDELETE + * @description + * Creates a new backend definition for DELETE requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenPOST + * @description + * Creates a new backend definition for POST requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenPUT + * @description + * Creates a new backend definition for PUT requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenJSONP + * @description + * Creates a new backend definition for JSONP requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + createShortMethods('when'); + + + /** + * @ngdoc method + * @name $httpBackend#expect + * @description + * Creates a new request expectation. + * + * @param {string} method HTTP method. + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header + * object and returns true if the headers match the current expectation. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + * + * - respond – + * `{function([status,] data[, headers])|function(function(method, url, data, headers)}` + * – The respond method takes a set of static data to be returned or a function that can return + * an array containing response status (number), response data (string) and response headers + * (Object). + */ + $httpBackend.expect = function(method, url, data, headers) { + var expectation = new MockHttpExpectation(method, url, data, headers); + expectations.push(expectation); + return { + respond: function(status, data, headers) { + expectation.response = createResponse(status, data, headers); + } + }; + }; + + + /** + * @ngdoc method + * @name $httpBackend#expectGET + * @description + * Creates a new request expectation for GET requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. See #expect for more info. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectHEAD + * @description + * Creates a new request expectation for HEAD requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectDELETE + * @description + * Creates a new request expectation for DELETE requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectPOST + * @description + * Creates a new request expectation for POST requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectPUT + * @description + * Creates a new request expectation for PUT requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectPATCH + * @description + * Creates a new request expectation for PATCH requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectJSONP + * @description + * Creates a new request expectation for JSONP requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + createShortMethods('expect'); + + + /** + * @ngdoc method + * @name $httpBackend#flush + * @description + * Flushes all pending requests using the trained responses. + * + * @param {number=} count Number of responses to flush (in the order they arrived). If undefined, + * all pending requests will be flushed. If there are no pending requests when the flush method + * is called an exception is thrown (as this typically a sign of programming error). + */ + $httpBackend.flush = function(count) { + $rootScope.$digest(); + if (!responses.length) throw new Error('No pending request to flush !'); + + if (angular.isDefined(count)) { + while (count--) { + if (!responses.length) throw new Error('No more pending request to flush !'); + responses.shift()(); + } + } else { + while (responses.length) { + responses.shift()(); + } + } + $httpBackend.verifyNoOutstandingExpectation(); + }; + + + /** + * @ngdoc method + * @name $httpBackend#verifyNoOutstandingExpectation + * @description + * Verifies that all of the requests defined via the `expect` api were made. If any of the + * requests were not made, verifyNoOutstandingExpectation throws an exception. + * + * Typically, you would call this method following each test case that asserts requests using an + * "afterEach" clause. + * + * ```js + * afterEach($httpBackend.verifyNoOutstandingExpectation); + * ``` + */ + $httpBackend.verifyNoOutstandingExpectation = function() { + $rootScope.$digest(); + if (expectations.length) { + throw new Error('Unsatisfied requests: ' + expectations.join(', ')); + } + }; + + + /** + * @ngdoc method + * @name $httpBackend#verifyNoOutstandingRequest + * @description + * Verifies that there are no outstanding requests that need to be flushed. + * + * Typically, you would call this method following each test case that asserts requests using an + * "afterEach" clause. + * + * ```js + * afterEach($httpBackend.verifyNoOutstandingRequest); + * ``` + */ + $httpBackend.verifyNoOutstandingRequest = function() { + if (responses.length) { + throw new Error('Unflushed requests: ' + responses.length); + } + }; + + + /** + * @ngdoc method + * @name $httpBackend#resetExpectations + * @description + * Resets all request expectations, but preserves all backend definitions. Typically, you would + * call resetExpectations during a multiple-phase test when you want to reuse the same instance of + * $httpBackend mock. + */ + $httpBackend.resetExpectations = function() { + expectations.length = 0; + responses.length = 0; + }; + + return $httpBackend; + + + function createShortMethods(prefix) { + angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) { + $httpBackend[prefix + method] = function(url, headers) { + return $httpBackend[prefix](method, url, undefined, headers); + }; + }); + + angular.forEach(['PUT', 'POST', 'PATCH'], function(method) { + $httpBackend[prefix + method] = function(url, data, headers) { + return $httpBackend[prefix](method, url, data, headers); + }; + }); + } +} + +function MockHttpExpectation(method, url, data, headers) { + + this.data = data; + this.headers = headers; + + this.match = function(m, u, d, h) { + if (method != m) return false; + if (!this.matchUrl(u)) return false; + if (angular.isDefined(d) && !this.matchData(d)) return false; + if (angular.isDefined(h) && !this.matchHeaders(h)) return false; + return true; + }; + + this.matchUrl = function(u) { + if (!url) return true; + if (angular.isFunction(url.test)) return url.test(u); + return url == u; + }; + + this.matchHeaders = function(h) { + if (angular.isUndefined(headers)) return true; + if (angular.isFunction(headers)) return headers(h); + return angular.equals(headers, h); + }; + + this.matchData = function(d) { + if (angular.isUndefined(data)) return true; + if (data && angular.isFunction(data.test)) return data.test(d); + if (data && angular.isFunction(data)) return data(d); + if (data && !angular.isString(data)) return angular.equals(data, angular.fromJson(d)); + return data == d; + }; + + this.toString = function() { + return method + ' ' + url; + }; +} + +function createMockXhr() { + return new MockXhr(); +} + +function MockXhr() { + + // hack for testing $http, $httpBackend + MockXhr.$$lastInstance = this; + + this.open = function(method, url, async) { + this.$$method = method; + this.$$url = url; + this.$$async = async; + this.$$reqHeaders = {}; + this.$$respHeaders = {}; + }; + + this.send = function(data) { + this.$$data = data; + }; + + this.setRequestHeader = function(key, value) { + this.$$reqHeaders[key] = value; + }; + + this.getResponseHeader = function(name) { + // the lookup must be case insensitive, + // that's why we try two quick lookups first and full scan last + var header = this.$$respHeaders[name]; + if (header) return header; + + name = angular.lowercase(name); + header = this.$$respHeaders[name]; + if (header) return header; + + header = undefined; + angular.forEach(this.$$respHeaders, function(headerVal, headerName) { + if (!header && angular.lowercase(headerName) == name) header = headerVal; + }); + return header; + }; + + this.getAllResponseHeaders = function() { + var lines = []; + + angular.forEach(this.$$respHeaders, function(value, key) { + lines.push(key + ': ' + value); + }); + return lines.join('\n'); + }; + + this.abort = angular.noop; +} + + +/** + * @ngdoc service + * @name $timeout + * @description + * + * This service is just a simple decorator for {@link ng.$timeout $timeout} service + * that adds a "flush" and "verifyNoPendingTasks" methods. + */ + +angular.mock.$TimeoutDecorator = function($delegate, $browser) { + + /** + * @ngdoc method + * @name $timeout#flush + * @description + * + * Flushes the queue of pending tasks. + * + * @param {number=} delay maximum timeout amount to flush up until + */ + $delegate.flush = function(delay) { + $browser.defer.flush(delay); + }; + + /** + * @ngdoc method + * @name $timeout#verifyNoPendingTasks + * @description + * + * Verifies that there are no pending tasks that need to be flushed. + */ + $delegate.verifyNoPendingTasks = function() { + if ($browser.deferredFns.length) { + throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + + formatPendingTasksAsString($browser.deferredFns)); + } + }; + + function formatPendingTasksAsString(tasks) { + var result = []; + angular.forEach(tasks, function(task) { + result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); + }); + + return result.join(', '); + } + + return $delegate; +}; + +angular.mock.$RAFDecorator = function($delegate) { + var queue = []; + var rafFn = function(fn) { + var index = queue.length; + queue.push(fn); + return function() { + queue.splice(index, 1); + }; + }; + + rafFn.supported = $delegate.supported; + + rafFn.flush = function() { + if(queue.length === 0) { + throw new Error('No rAF callbacks present'); + } + + var length = queue.length; + for(var i=0;i'); + }; +}; + +/** + * @ngdoc module + * @name ngMock + * @description + * + * # ngMock + * + * The `ngMock` module providers support to inject and mock Angular services into unit tests. + * In addition, ngMock also extends various core ng services such that they can be + * inspected and controlled in a synchronous manner within test code. + * + * + *
+ * + */ +angular.module('ngMock', ['ng']).provider({ + $browser: angular.mock.$BrowserProvider, + $exceptionHandler: angular.mock.$ExceptionHandlerProvider, + $log: angular.mock.$LogProvider, + $interval: angular.mock.$IntervalProvider, + $httpBackend: angular.mock.$HttpBackendProvider, + $rootElement: angular.mock.$RootElementProvider +}).config(['$provide', function($provide) { + $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); + $provide.decorator('$$rAF', angular.mock.$RAFDecorator); + $provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator); +}]); + +/** + * @ngdoc module + * @name ngMockE2E + * @module ngMockE2E + * @description + * + * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing. + * Currently there is only one mock present in this module - + * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock. + */ +angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) { + $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator); +}]); + +/** + * @ngdoc service + * @name $httpBackend + * @module ngMockE2E + * @description + * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of + * applications that use the {@link ng.$http $http service}. + * + * *Note*: For fake http backend implementation suitable for unit testing please see + * {@link ngMock.$httpBackend unit-testing $httpBackend mock}. + * + * This implementation can be used to respond with static or dynamic responses via the `when` api + * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the + * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch + * templates from a webserver). + * + * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application + * is being developed with the real backend api replaced with a mock, it is often desirable for + * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch + * templates or static files from the webserver). To configure the backend with this behavior + * use the `passThrough` request handler of `when` instead of `respond`. + * + * Additionally, we don't want to manually have to flush mocked out requests like we do during unit + * testing. For this reason the e2e $httpBackend automatically flushes mocked out requests + * automatically, closely simulating the behavior of the XMLHttpRequest object. + * + * To setup the application to run with this http backend, you have to create a module that depends + * on the `ngMockE2E` and your application modules and defines the fake backend: + * + * ```js + * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']); + * myAppDev.run(function($httpBackend) { + * phones = [{name: 'phone1'}, {name: 'phone2'}]; + * + * // returns the current list of phones + * $httpBackend.whenGET('/phones').respond(phones); + * + * // adds a new phone to the phones array + * $httpBackend.whenPOST('/phones').respond(function(method, url, data) { + * phones.push(angular.fromJson(data)); + * }); + * $httpBackend.whenGET(/^\/templates\//).passThrough(); + * //... + * }); + * ``` + * + * Afterwards, bootstrap your app with this new module. + */ + +/** + * @ngdoc method + * @name $httpBackend#when + * @module ngMockE2E + * @description + * Creates a new backend definition. + * + * @param {string} method HTTP method. + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header + * object and returns true if the headers match the current definition. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + * + * - respond – + * `{function([status,] data[, headers])|function(function(method, url, data, headers)}` + * – The respond method takes a set of static data to be returned or a function that can return + * an array containing response status (number), response data (string) and response headers + * (Object). + * - passThrough – `{function()}` – Any request matching a backend definition with `passThrough` + * handler will be passed through to the real backend (an XHR request will be made to the + * server.) + */ + +/** + * @ngdoc method + * @name $httpBackend#whenGET + * @module ngMockE2E + * @description + * Creates a new backend definition for GET requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenHEAD + * @module ngMockE2E + * @description + * Creates a new backend definition for HEAD requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenDELETE + * @module ngMockE2E + * @description + * Creates a new backend definition for DELETE requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenPOST + * @module ngMockE2E + * @description + * Creates a new backend definition for POST requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenPUT + * @module ngMockE2E + * @description + * Creates a new backend definition for PUT requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenPATCH + * @module ngMockE2E + * @description + * Creates a new backend definition for PATCH requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenJSONP + * @module ngMockE2E + * @description + * Creates a new backend definition for JSONP requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ +angular.mock.e2e = {}; +angular.mock.e2e.$httpBackendDecorator = + ['$rootScope', '$delegate', '$browser', createHttpBackendMock]; + + +angular.mock.clearDataCache = function() { + var key, + cache = angular.element.cache; + + for(key in cache) { + if (Object.prototype.hasOwnProperty.call(cache,key)) { + var handle = cache[key].handle; + + handle && angular.element(handle.elem).off(); + delete cache[key]; + } + } +}; + + +if(window.jasmine || window.mocha) { + + var currentSpec = null, + isSpecRunning = function() { + return !!currentSpec; + }; + + + beforeEach(function() { + currentSpec = this; + }); + + afterEach(function() { + var injector = currentSpec.$injector; + + currentSpec.$injector = null; + currentSpec.$modules = null; + currentSpec = null; + + if (injector) { + injector.get('$rootElement').off(); + injector.get('$browser').pollFns.length = 0; + } + + angular.mock.clearDataCache(); + + // clean up jquery's fragment cache + angular.forEach(angular.element.fragments, function(val, key) { + delete angular.element.fragments[key]; + }); + + MockXhr.$$lastInstance = null; + + angular.forEach(angular.callbacks, function(val, key) { + delete angular.callbacks[key]; + }); + angular.callbacks.counter = 0; + }); + + /** + * @ngdoc function + * @name angular.mock.module + * @description + * + * *NOTE*: This function is also published on window for easy access.
+ * + * This function registers a module configuration code. It collects the configuration information + * which will be used when the injector is created by {@link angular.mock.inject inject}. + * + * See {@link angular.mock.inject inject} for usage example + * + * @param {...(string|Function|Object)} fns any number of modules which are represented as string + * aliases or as anonymous module initialization functions. The modules are used to + * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an + * object literal is passed they will be register as values in the module, the key being + * the module name and the value being what is returned. + */ + window.module = angular.mock.module = function() { + var moduleFns = Array.prototype.slice.call(arguments, 0); + return isSpecRunning() ? workFn() : workFn; + ///////////////////// + function workFn() { + if (currentSpec.$injector) { + throw new Error('Injector already created, can not register a module!'); + } else { + var modules = currentSpec.$modules || (currentSpec.$modules = []); + angular.forEach(moduleFns, function(module) { + if (angular.isObject(module) && !angular.isArray(module)) { + modules.push(function($provide) { + angular.forEach(module, function(value, key) { + $provide.value(key, value); + }); + }); + } else { + modules.push(module); + } + }); + } + } + }; + + /** + * @ngdoc function + * @name angular.mock.inject + * @description + * + * *NOTE*: This function is also published on window for easy access.
+ * + * The inject function wraps a function into an injectable function. The inject() creates new + * instance of {@link auto.$injector $injector} per test, which is then used for + * resolving references. + * + * + * ## Resolving References (Underscore Wrapping) + * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this + * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable + * that is declared in the scope of the `describe()` block. Since we would, most likely, want + * the variable to have the same name of the reference we have a problem, since the parameter + * to the `inject()` function would hide the outer variable. + * + * To help with this, the injected parameters can, optionally, be enclosed with underscores. + * These are ignored by the injector when the reference name is resolved. + * + * For example, the parameter `_myService_` would be resolved as the reference `myService`. + * Since it is available in the function body as _myService_, we can then assign it to a variable + * defined in an outer scope. + * + * ``` + * // Defined out reference variable outside + * var myService; + * + * // Wrap the parameter in underscores + * beforeEach( inject( function(_myService_){ + * myService = _myService_; + * })); + * + * // Use myService in a series of tests. + * it('makes use of myService', function() { + * myService.doStuff(); + * }); + * + * ``` + * + * See also {@link angular.mock.module angular.mock.module} + * + * ## Example + * Example of what a typical jasmine tests looks like with the inject method. + * ```js + * + * angular.module('myApplicationModule', []) + * .value('mode', 'app') + * .value('version', 'v1.0.1'); + * + * + * describe('MyApp', function() { + * + * // You need to load modules that you want to test, + * // it loads only the "ng" module by default. + * beforeEach(module('myApplicationModule')); + * + * + * // inject() is used to inject arguments of all given functions + * it('should provide a version', inject(function(mode, version) { + * expect(version).toEqual('v1.0.1'); + * expect(mode).toEqual('app'); + * })); + * + * + * // The inject and module method can also be used inside of the it or beforeEach + * it('should override a version and test the new version is injected', function() { + * // module() takes functions or strings (module aliases) + * module(function($provide) { + * $provide.value('version', 'overridden'); // override version here + * }); + * + * inject(function(version) { + * expect(version).toEqual('overridden'); + * }); + * }); + * }); + * + * ``` + * + * @param {...Function} fns any number of functions which will be injected using the injector. + */ + + + + var ErrorAddingDeclarationLocationStack = function(e, errorForStack) { + this.message = e.message; + this.name = e.name; + if (e.line) this.line = e.line; + if (e.sourceId) this.sourceId = e.sourceId; + if (e.stack && errorForStack) + this.stack = e.stack + '\n' + errorForStack.stack; + if (e.stackArray) this.stackArray = e.stackArray; + }; + ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString; + + window.inject = angular.mock.inject = function() { + var blockFns = Array.prototype.slice.call(arguments, 0); + var errorForStack = new Error('Declaration Location'); + return isSpecRunning() ? workFn.call(currentSpec) : workFn; + ///////////////////// + function workFn() { + var modules = currentSpec.$modules || []; + + modules.unshift('ngMock'); + modules.unshift('ng'); + var injector = currentSpec.$injector; + if (!injector) { + injector = currentSpec.$injector = angular.injector(modules); + } + for(var i = 0, ii = blockFns.length; i < ii; i++) { + try { + /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */ + injector.invoke(blockFns[i] || angular.noop, this); + /* jshint +W040 */ + } catch (e) { + if (e.stack && errorForStack) { + throw new ErrorAddingDeclarationLocationStack(e, errorForStack); + } + throw e; + } finally { + errorForStack = null; + } + } + } + }; +} + + +})(window, window.angular); diff --git a/app/bower_components/angular-mocks/bower.json b/app/bower_components/angular-mocks/bower.json new file mode 100644 index 0000000..cf7b342 --- /dev/null +++ b/app/bower_components/angular-mocks/bower.json @@ -0,0 +1,8 @@ +{ + "name": "angular-mocks", + "version": "1.2.15", + "main": "./angular-mocks.js", + "dependencies": { + "angular": "1.2.15" + } +} diff --git a/app/bower_components/angular-route/.bower.json b/app/bower_components/angular-route/.bower.json new file mode 100644 index 0000000..d923df2 --- /dev/null +++ b/app/bower_components/angular-route/.bower.json @@ -0,0 +1,18 @@ +{ + "name": "angular-route", + "version": "1.2.15", + "main": "./angular-route.js", + "dependencies": { + "angular": "1.2.15" + }, + "homepage": "https://github.com/angular/bower-angular-route", + "_release": "1.2.15", + "_resolution": { + "type": "version", + "tag": "v1.2.15", + "commit": "a8368eb5c47746681feea7f73d712be47418865a" + }, + "_source": "git://github.com/angular/bower-angular-route.git", + "_target": "1.2.15", + "_originalSource": "angular-route" +} \ No newline at end of file diff --git a/app/bower_components/angular-route/README.md b/app/bower_components/angular-route/README.md new file mode 100644 index 0000000..49f55fc --- /dev/null +++ b/app/bower_components/angular-route/README.md @@ -0,0 +1,54 @@ +# bower-angular-route + +This repo is for distribution on `bower`. The source for this module is in the +[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngRoute). +Please file issues and pull requests against that repo. + +## Install + +Install with `bower`: + +```shell +bower install angular-route +``` + +Add a ` +``` + +And add `ngRoute` as a dependency for your app: + +```javascript +angular.module('myApp', ['ngRoute']); +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/api/ngRoute). + +## License + +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/app/bower_components/angular-route/angular-route.js b/app/bower_components/angular-route/angular-route.js new file mode 100644 index 0000000..b4779bf --- /dev/null +++ b/app/bower_components/angular-route/angular-route.js @@ -0,0 +1,927 @@ +/** + * @license AngularJS v1.2.15 + * (c) 2010-2014 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +/** + * @ngdoc module + * @name ngRoute + * @description + * + * # ngRoute + * + * The `ngRoute` module provides routing and deeplinking services and directives for angular apps. + * + * ## Example + * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`. + * + * + *
+ */ + /* global -ngRouteModule */ +var ngRouteModule = angular.module('ngRoute', ['ng']). + provider('$route', $RouteProvider); + +/** + * @ngdoc provider + * @name $routeProvider + * @function + * + * @description + * + * Used for configuring routes. + * + * ## Example + * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`. + * + * ## Dependencies + * Requires the {@link ngRoute `ngRoute`} module to be installed. + */ +function $RouteProvider(){ + function inherit(parent, extra) { + return angular.extend(new (angular.extend(function() {}, {prototype:parent}))(), extra); + } + + var routes = {}; + + /** + * @ngdoc method + * @name $routeProvider#when + * + * @param {string} path Route path (matched against `$location.path`). If `$location.path` + * contains redundant trailing slash or is missing one, the route will still match and the + * `$location.path` will be updated to add or drop the trailing slash to exactly match the + * route definition. + * + * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up + * to the next slash are matched and stored in `$routeParams` under the given `name` + * when the route matches. + * * `path` can contain named groups starting with a colon and ending with a star: + * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name` + * when the route matches. + * * `path` can contain optional named groups with a question mark: e.g.`:name?`. + * + * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match + * `/color/brown/largecode/code/with/slashes/edit` and extract: + * + * * `color: brown` + * * `largecode: code/with/slashes`. + * + * + * @param {Object} route Mapping information to be assigned to `$route.current` on route + * match. + * + * Object properties: + * + * - `controller` – `{(string|function()=}` – Controller fn that should be associated with + * newly created scope or the name of a {@link angular.Module#controller registered + * controller} if passed as a string. + * - `controllerAs` – `{string=}` – A controller alias name. If present the controller will be + * published to scope under the `controllerAs` name. + * - `template` – `{string=|function()=}` – html template as a string or a function that + * returns an html template as a string which should be used by {@link + * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives. + * This property takes precedence over `templateUrl`. + * + * If `template` is a function, it will be called with the following parameters: + * + * - `{Array.}` - route parameters extracted from the current + * `$location.path()` by applying the current route + * + * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html + * template that should be used by {@link ngRoute.directive:ngView ngView}. + * + * If `templateUrl` is a function, it will be called with the following parameters: + * + * - `{Array.}` - route parameters extracted from the current + * `$location.path()` by applying the current route + * + * - `resolve` - `{Object.=}` - An optional map of dependencies which should + * be injected into the controller. If any of these dependencies are promises, the router + * will wait for them all to be resolved or one to be rejected before the controller is + * instantiated. + * If all the promises are resolved successfully, the values of the resolved promises are + * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is + * fired. If any of the promises are rejected the + * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. The map object + * is: + * + * - `key` – `{string}`: a name of a dependency to be injected into the controller. + * - `factory` - `{string|function}`: If `string` then it is an alias for a service. + * Otherwise if function, then it is {@link auto.$injector#invoke injected} + * and the return value is treated as the dependency. If the result is a promise, it is + * resolved before its value is injected into the controller. Be aware that + * `ngRoute.$routeParams` will still refer to the previous route within these resolve + * functions. Use `$route.current.params` to access the new route parameters, instead. + * + * - `redirectTo` – {(string|function())=} – value to update + * {@link ng.$location $location} path with and trigger route redirection. + * + * If `redirectTo` is a function, it will be called with the following parameters: + * + * - `{Object.}` - route parameters extracted from the current + * `$location.path()` by applying the current route templateUrl. + * - `{string}` - current `$location.path()` + * - `{Object}` - current `$location.search()` + * + * The custom `redirectTo` function is expected to return a string which will be used + * to update `$location.path()` and `$location.search()`. + * + * - `[reloadOnSearch=true]` - {boolean=} - reload route when only `$location.search()` + * or `$location.hash()` changes. + * + * If the option is set to `false` and url in the browser changes, then + * `$routeUpdate` event is broadcasted on the root scope. + * + * - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive + * + * If the option is set to `true`, then the particular route can be matched without being + * case sensitive + * + * @returns {Object} self + * + * @description + * Adds a new route definition to the `$route` service. + */ + this.when = function(path, route) { + routes[path] = angular.extend( + {reloadOnSearch: true}, + route, + path && pathRegExp(path, route) + ); + + // create redirection for trailing slashes + if (path) { + var redirectPath = (path[path.length-1] == '/') + ? path.substr(0, path.length-1) + : path +'/'; + + routes[redirectPath] = angular.extend( + {redirectTo: path}, + pathRegExp(redirectPath, route) + ); + } + + return this; + }; + + /** + * @param path {string} path + * @param opts {Object} options + * @return {?Object} + * + * @description + * Normalizes the given path, returning a regular expression + * and the original path. + * + * Inspired by pathRexp in visionmedia/express/lib/utils.js. + */ + function pathRegExp(path, opts) { + var insensitive = opts.caseInsensitiveMatch, + ret = { + originalPath: path, + regexp: path + }, + keys = ret.keys = []; + + path = path + .replace(/([().])/g, '\\$1') + .replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option){ + var optional = option === '?' ? option : null; + var star = option === '*' ? option : null; + keys.push({ name: key, optional: !!optional }); + slash = slash || ''; + return '' + + (optional ? '' : slash) + + '(?:' + + (optional ? slash : '') + + (star && '(.+?)' || '([^/]+)') + + (optional || '') + + ')' + + (optional || ''); + }) + .replace(/([\/$\*])/g, '\\$1'); + + ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : ''); + return ret; + } + + /** + * @ngdoc method + * @name $routeProvider#otherwise + * + * @description + * Sets route definition that will be used on route change when no other route definition + * is matched. + * + * @param {Object} params Mapping information to be assigned to `$route.current`. + * @returns {Object} self + */ + this.otherwise = function(params) { + this.when(null, params); + return this; + }; + + + this.$get = ['$rootScope', + '$location', + '$routeParams', + '$q', + '$injector', + '$http', + '$templateCache', + '$sce', + function($rootScope, $location, $routeParams, $q, $injector, $http, $templateCache, $sce) { + + /** + * @ngdoc service + * @name $route + * @requires $location + * @requires $routeParams + * + * @property {Object} current Reference to the current route definition. + * The route definition contains: + * + * - `controller`: The controller constructor as define in route definition. + * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for + * controller instantiation. The `locals` contain + * the resolved values of the `resolve` map. Additionally the `locals` also contain: + * + * - `$scope` - The current route scope. + * - `$template` - The current route template HTML. + * + * @property {Object} routes Object with all route configuration Objects as its properties. + * + * @description + * `$route` is used for deep-linking URLs to controllers and views (HTML partials). + * It watches `$location.url()` and tries to map the path to an existing route definition. + * + * Requires the {@link ngRoute `ngRoute`} module to be installed. + * + * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API. + * + * The `$route` service is typically used in conjunction with the + * {@link ngRoute.directive:ngView `ngView`} directive and the + * {@link ngRoute.$routeParams `$routeParams`} service. + * + * @example + * This example shows how changing the URL hash causes the `$route` to match a route against the + * URL, and the `ngView` pulls in the partial. + * + * Note that this example is using {@link ng.directive:script inlined templates} + * to get it working on jsfiddle as well. + * + * + * + *
+ * Choose: + * Moby | + * Moby: Ch1 | + * Gatsby | + * Gatsby: Ch4 | + * Scarlet Letter
+ * + *
+ * + *
+ * + *
$location.path() = {{$location.path()}}
+ *
$route.current.templateUrl = {{$route.current.templateUrl}}
+ *
$route.current.params = {{$route.current.params}}
+ *
$route.current.scope.name = {{$route.current.scope.name}}
+ *
$routeParams = {{$routeParams}}
+ *
+ *
+ * + * + * controller: {{name}}
+ * Book Id: {{params.bookId}}
+ *
+ * + * + * controller: {{name}}
+ * Book Id: {{params.bookId}}
+ * Chapter Id: {{params.chapterId}} + *
+ * + * + * angular.module('ngRouteExample', ['ngRoute']) + * + * .controller('MainController', function($scope, $route, $routeParams, $location) { + * $scope.$route = $route; + * $scope.$location = $location; + * $scope.$routeParams = $routeParams; + * }) + * + * .controller('BookController', function($scope, $routeParams) { + * $scope.name = "BookController"; + * $scope.params = $routeParams; + * }) + * + * .controller('ChapterController', function($scope, $routeParams) { + * $scope.name = "ChapterController"; + * $scope.params = $routeParams; + * }) + * + * .config(function($routeProvider, $locationProvider) { + * $routeProvider + * .when('/Book/:bookId', { + * templateUrl: 'book.html', + * controller: 'BookController', + * resolve: { + * // I will cause a 1 second delay + * delay: function($q, $timeout) { + * var delay = $q.defer(); + * $timeout(delay.resolve, 1000); + * return delay.promise; + * } + * } + * }) + * .when('/Book/:bookId/ch/:chapterId', { + * templateUrl: 'chapter.html', + * controller: 'ChapterController' + * }); + * + * // configure html5 to get links working on jsfiddle + * $locationProvider.html5Mode(true); + * }); + * + * + * + * + * it('should load and compile correct template', function() { + * element(by.linkText('Moby: Ch1')).click(); + * var content = element(by.css('[ng-view]')).getText(); + * expect(content).toMatch(/controller\: ChapterController/); + * expect(content).toMatch(/Book Id\: Moby/); + * expect(content).toMatch(/Chapter Id\: 1/); + * + * element(by.partialLinkText('Scarlet')).click(); + * + * content = element(by.css('[ng-view]')).getText(); + * expect(content).toMatch(/controller\: BookController/); + * expect(content).toMatch(/Book Id\: Scarlet/); + * }); + * + *
+ */ + + /** + * @ngdoc event + * @name $route#$routeChangeStart + * @eventType broadcast on root scope + * @description + * Broadcasted before a route change. At this point the route services starts + * resolving all of the dependencies needed for the route change to occur. + * Typically this involves fetching the view template as well as any dependencies + * defined in `resolve` route property. Once all of the dependencies are resolved + * `$routeChangeSuccess` is fired. + * + * @param {Object} angularEvent Synthetic event object. + * @param {Route} next Future route information. + * @param {Route} current Current route information. + */ + + /** + * @ngdoc event + * @name $route#$routeChangeSuccess + * @eventType broadcast on root scope + * @description + * Broadcasted after a route dependencies are resolved. + * {@link ngRoute.directive:ngView ngView} listens for the directive + * to instantiate the controller and render the view. + * + * @param {Object} angularEvent Synthetic event object. + * @param {Route} current Current route information. + * @param {Route|Undefined} previous Previous route information, or undefined if current is + * first route entered. + */ + + /** + * @ngdoc event + * @name $route#$routeChangeError + * @eventType broadcast on root scope + * @description + * Broadcasted if any of the resolve promises are rejected. + * + * @param {Object} angularEvent Synthetic event object + * @param {Route} current Current route information. + * @param {Route} previous Previous route information. + * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise. + */ + + /** + * @ngdoc event + * @name $route#$routeUpdate + * @eventType broadcast on root scope + * @description + * + * The `reloadOnSearch` property has been set to false, and we are reusing the same + * instance of the Controller. + */ + + var forceReload = false, + $route = { + routes: routes, + + /** + * @ngdoc method + * @name $route#reload + * + * @description + * Causes `$route` service to reload the current route even if + * {@link ng.$location $location} hasn't changed. + * + * As a result of that, {@link ngRoute.directive:ngView ngView} + * creates new scope, reinstantiates the controller. + */ + reload: function() { + forceReload = true; + $rootScope.$evalAsync(updateRoute); + } + }; + + $rootScope.$on('$locationChangeSuccess', updateRoute); + + return $route; + + ///////////////////////////////////////////////////// + + /** + * @param on {string} current url + * @param route {Object} route regexp to match the url against + * @return {?Object} + * + * @description + * Check if the route matches the current url. + * + * Inspired by match in + * visionmedia/express/lib/router/router.js. + */ + function switchRouteMatcher(on, route) { + var keys = route.keys, + params = {}; + + if (!route.regexp) return null; + + var m = route.regexp.exec(on); + if (!m) return null; + + for (var i = 1, len = m.length; i < len; ++i) { + var key = keys[i - 1]; + + var val = 'string' == typeof m[i] + ? decodeURIComponent(m[i]) + : m[i]; + + if (key && val) { + params[key.name] = val; + } + } + return params; + } + + function updateRoute() { + var next = parseRoute(), + last = $route.current; + + if (next && last && next.$$route === last.$$route + && angular.equals(next.pathParams, last.pathParams) + && !next.reloadOnSearch && !forceReload) { + last.params = next.params; + angular.copy(last.params, $routeParams); + $rootScope.$broadcast('$routeUpdate', last); + } else if (next || last) { + forceReload = false; + $rootScope.$broadcast('$routeChangeStart', next, last); + $route.current = next; + if (next) { + if (next.redirectTo) { + if (angular.isString(next.redirectTo)) { + $location.path(interpolate(next.redirectTo, next.params)).search(next.params) + .replace(); + } else { + $location.url(next.redirectTo(next.pathParams, $location.path(), $location.search())) + .replace(); + } + } + } + + $q.when(next). + then(function() { + if (next) { + var locals = angular.extend({}, next.resolve), + template, templateUrl; + + angular.forEach(locals, function(value, key) { + locals[key] = angular.isString(value) ? + $injector.get(value) : $injector.invoke(value); + }); + + if (angular.isDefined(template = next.template)) { + if (angular.isFunction(template)) { + template = template(next.params); + } + } else if (angular.isDefined(templateUrl = next.templateUrl)) { + if (angular.isFunction(templateUrl)) { + templateUrl = templateUrl(next.params); + } + templateUrl = $sce.getTrustedResourceUrl(templateUrl); + if (angular.isDefined(templateUrl)) { + next.loadedTemplateUrl = templateUrl; + template = $http.get(templateUrl, {cache: $templateCache}). + then(function(response) { return response.data; }); + } + } + if (angular.isDefined(template)) { + locals['$template'] = template; + } + return $q.all(locals); + } + }). + // after route change + then(function(locals) { + if (next == $route.current) { + if (next) { + next.locals = locals; + angular.copy(next.params, $routeParams); + } + $rootScope.$broadcast('$routeChangeSuccess', next, last); + } + }, function(error) { + if (next == $route.current) { + $rootScope.$broadcast('$routeChangeError', next, last, error); + } + }); + } + } + + + /** + * @returns {Object} the current active route, by matching it against the URL + */ + function parseRoute() { + // Match a route + var params, match; + angular.forEach(routes, function(route, path) { + if (!match && (params = switchRouteMatcher($location.path(), route))) { + match = inherit(route, { + params: angular.extend({}, $location.search(), params), + pathParams: params}); + match.$$route = route; + } + }); + // No route matched; fallback to "otherwise" route + return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); + } + + /** + * @returns {string} interpolation of the redirect path with the parameters + */ + function interpolate(string, params) { + var result = []; + angular.forEach((string||'').split(':'), function(segment, i) { + if (i === 0) { + result.push(segment); + } else { + var segmentMatch = segment.match(/(\w+)(.*)/); + var key = segmentMatch[1]; + result.push(params[key]); + result.push(segmentMatch[2] || ''); + delete params[key]; + } + }); + return result.join(''); + } + }]; +} + +ngRouteModule.provider('$routeParams', $RouteParamsProvider); + + +/** + * @ngdoc service + * @name $routeParams + * @requires $route + * + * @description + * The `$routeParams` service allows you to retrieve the current set of route parameters. + * + * Requires the {@link ngRoute `ngRoute`} module to be installed. + * + * The route parameters are a combination of {@link ng.$location `$location`}'s + * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}. + * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched. + * + * In case of parameter name collision, `path` params take precedence over `search` params. + * + * The service guarantees that the identity of the `$routeParams` object will remain unchanged + * (but its properties will likely change) even when a route change occurs. + * + * Note that the `$routeParams` are only updated *after* a route change completes successfully. + * This means that you cannot rely on `$routeParams` being correct in route resolve functions. + * Instead you can use `$route.current.params` to access the new route's parameters. + * + * @example + * ```js + * // Given: + * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby + * // Route: /Chapter/:chapterId/Section/:sectionId + * // + * // Then + * $routeParams ==> {chapterId:1, sectionId:2, search:'moby'} + * ``` + */ +function $RouteParamsProvider() { + this.$get = function() { return {}; }; +} + +ngRouteModule.directive('ngView', ngViewFactory); +ngRouteModule.directive('ngView', ngViewFillContentFactory); + + +/** + * @ngdoc directive + * @name ngView + * @restrict ECA + * + * @description + * # Overview + * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by + * including the rendered template of the current route into the main layout (`index.html`) file. + * Every time the current route changes, the included view changes with it according to the + * configuration of the `$route` service. + * + * Requires the {@link ngRoute `ngRoute`} module to be installed. + * + * @animations + * enter - animation is used to bring new content into the browser. + * leave - animation is used to animate existing content away. + * + * The enter and leave animation occur concurrently. + * + * @scope + * @priority 400 + * @param {string=} onload Expression to evaluate whenever the view updates. + * + * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll + * $anchorScroll} to scroll the viewport after the view is updated. + * + * - If the attribute is not set, disable scrolling. + * - If the attribute is set without value, enable scrolling. + * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated + * as an expression yields a truthy value. + * @example + + +
+ Choose: + Moby | + Moby: Ch1 | + Gatsby | + Gatsby: Ch4 | + Scarlet Letter
+ +
+
+
+
+ +
$location.path() = {{main.$location.path()}}
+
$route.current.templateUrl = {{main.$route.current.templateUrl}}
+
$route.current.params = {{main.$route.current.params}}
+
$route.current.scope.name = {{main.$route.current.scope.name}}
+
$routeParams = {{main.$routeParams}}
+
+
+ + +
+ controller: {{book.name}}
+ Book Id: {{book.params.bookId}}
+
+
+ + +
+ controller: {{chapter.name}}
+ Book Id: {{chapter.params.bookId}}
+ Chapter Id: {{chapter.params.chapterId}} +
+
+ + + .view-animate-container { + position:relative; + height:100px!important; + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .view-animate { + padding:10px; + } + + .view-animate.ng-enter, .view-animate.ng-leave { + -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; + + display:block; + width:100%; + border-left:1px solid black; + + position:absolute; + top:0; + left:0; + right:0; + bottom:0; + padding:10px; + } + + .view-animate.ng-enter { + left:100%; + } + .view-animate.ng-enter.ng-enter-active { + left:0; + } + .view-animate.ng-leave.ng-leave-active { + left:-100%; + } + + + + angular.module('ngViewExample', ['ngRoute', 'ngAnimate']) + .config(['$routeProvider', '$locationProvider', + function($routeProvider, $locationProvider) { + $routeProvider + .when('/Book/:bookId', { + templateUrl: 'book.html', + controller: 'BookCtrl', + controllerAs: 'book' + }) + .when('/Book/:bookId/ch/:chapterId', { + templateUrl: 'chapter.html', + controller: 'ChapterCtrl', + controllerAs: 'chapter' + }); + + // configure html5 to get links working on jsfiddle + $locationProvider.html5Mode(true); + }]) + .controller('MainCtrl', ['$route', '$routeParams', '$location', + function($route, $routeParams, $location) { + this.$route = $route; + this.$location = $location; + this.$routeParams = $routeParams; + }]) + .controller('BookCtrl', ['$routeParams', function($routeParams) { + this.name = "BookCtrl"; + this.params = $routeParams; + }]) + .controller('ChapterCtrl', ['$routeParams', function($routeParams) { + this.name = "ChapterCtrl"; + this.params = $routeParams; + }]); + + + + + it('should load and compile correct template', function() { + element(by.linkText('Moby: Ch1')).click(); + var content = element(by.css('[ng-view]')).getText(); + expect(content).toMatch(/controller\: ChapterCtrl/); + expect(content).toMatch(/Book Id\: Moby/); + expect(content).toMatch(/Chapter Id\: 1/); + + element(by.partialLinkText('Scarlet')).click(); + + content = element(by.css('[ng-view]')).getText(); + expect(content).toMatch(/controller\: BookCtrl/); + expect(content).toMatch(/Book Id\: Scarlet/); + }); + +
+ */ + + +/** + * @ngdoc event + * @name ngView#$viewContentLoaded + * @eventType emit on the current ngView scope + * @description + * Emitted every time the ngView content is reloaded. + */ +ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate']; +function ngViewFactory( $route, $anchorScroll, $animate) { + return { + restrict: 'ECA', + terminal: true, + priority: 400, + transclude: 'element', + link: function(scope, $element, attr, ctrl, $transclude) { + var currentScope, + currentElement, + previousElement, + autoScrollExp = attr.autoscroll, + onloadExp = attr.onload || ''; + + scope.$on('$routeChangeSuccess', update); + update(); + + function cleanupLastView() { + if(previousElement) { + previousElement.remove(); + previousElement = null; + } + if(currentScope) { + currentScope.$destroy(); + currentScope = null; + } + if(currentElement) { + $animate.leave(currentElement, function() { + previousElement = null; + }); + previousElement = currentElement; + currentElement = null; + } + } + + function update() { + var locals = $route.current && $route.current.locals, + template = locals && locals.$template; + + if (angular.isDefined(template)) { + var newScope = scope.$new(); + var current = $route.current; + + // Note: This will also link all children of ng-view that were contained in the original + // html. If that content contains controllers, ... they could pollute/change the scope. + // However, using ng-view on an element with additional content does not make sense... + // Note: We can't remove them in the cloneAttchFn of $transclude as that + // function is called before linking the content, which would apply child + // directives to non existing elements. + var clone = $transclude(newScope, function(clone) { + $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () { + if (angular.isDefined(autoScrollExp) + && (!autoScrollExp || scope.$eval(autoScrollExp))) { + $anchorScroll(); + } + }); + cleanupLastView(); + }); + + currentElement = clone; + currentScope = current.scope = newScope; + currentScope.$emit('$viewContentLoaded'); + currentScope.$eval(onloadExp); + } else { + cleanupLastView(); + } + } + } + }; +} + +// This directive is called during the $transclude call of the first `ngView` directive. +// It will replace and compile the content of the element with the loaded template. +// We need this directive so that the element content is already filled when +// the link function of another directive on the same element as ngView +// is called. +ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route']; +function ngViewFillContentFactory($compile, $controller, $route) { + return { + restrict: 'ECA', + priority: -400, + link: function(scope, $element) { + var current = $route.current, + locals = current.locals; + + $element.html(locals.$template); + + var link = $compile($element.contents()); + + if (current.controller) { + locals.$scope = scope; + var controller = $controller(current.controller, locals); + if (current.controllerAs) { + scope[current.controllerAs] = controller; + } + $element.data('$ngControllerController', controller); + $element.children().data('$ngControllerController', controller); + } + + link(scope); + } + }; +} + + +})(window, window.angular); diff --git a/app/bower_components/angular-route/angular-route.min.js b/app/bower_components/angular-route/angular-route.min.js new file mode 100644 index 0000000..c831a02 --- /dev/null +++ b/app/bower_components/angular-route/angular-route.min.js @@ -0,0 +1,14 @@ +/* + AngularJS v1.2.15 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(n,e,A){'use strict';function x(s,g,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,w){function y(){p&&(p.remove(),p=null);h&&(h.$destroy(),h=null);l&&(k.leave(l,function(){p=null}),p=l,l=null)}function v(){var b=s.current&&s.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),d=s.current;l=w(b,function(d){k.enter(d,null,l||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||g()});y()});h=d.scope=b;h.$emit("$viewContentLoaded");h.$eval(u)}else y()} +var h,l,p,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",v);v()}}}function z(e,g,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var w=e(c.contents());b.controller&&(f.$scope=a,f=g(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));w(a)}}}n=e.module("ngRoute",["ng"]).provider("$route",function(){function s(a,c){return e.extend(new (e.extend(function(){}, +{prototype:a})),c)}function g(a,e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},k=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;k.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&g(a,c));if(a){var b= +"/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";k[b]=e.extend({redirectTo:a},g(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,g,n,v,h){function l(){var d=p(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!u)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)u=!1,a.$broadcast("$routeChangeStart", +d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(t(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?g.get(d):g.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=h.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl= +b,c=n.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function p(){var a,b;e.forEach(k,function(f,k){var q;if(q=!b){var g=c.path();q=f.keys;var l={};if(f.regexp)if(g=f.regexp.exec(g)){for(var h=1,p=g.length;h` to your `index.html`: + +```html + +``` + +And add `ngSanitize` as a dependency for your app: + +```javascript +angular.module('myApp', ['ngSanitize']); +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). + +## License + +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/app/bower_components/angular-sanitize/angular-sanitize.js b/app/bower_components/angular-sanitize/angular-sanitize.js new file mode 100644 index 0000000..9d0c947 --- /dev/null +++ b/app/bower_components/angular-sanitize/angular-sanitize.js @@ -0,0 +1,624 @@ +/** + * @license AngularJS v1.2.15 + * (c) 2010-2014 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +var $sanitizeMinErr = angular.$$minErr('$sanitize'); + +/** + * @ngdoc module + * @name ngSanitize + * @description + * + * # ngSanitize + * + * The `ngSanitize` module provides functionality to sanitize HTML. + * + * + *
+ * + * See {@link ngSanitize.$sanitize `$sanitize`} for usage. + */ + +/* + * HTML Parser By Misko Hevery (misko@hevery.com) + * based on: HTML Parser By John Resig (ejohn.org) + * Original code by Erik Arvidsson, Mozilla Public License + * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js + * + * // Use like so: + * htmlParser(htmlString, { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * }); + * + */ + + +/** + * @ngdoc service + * @name $sanitize + * @function + * + * @description + * The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are + * then serialized back to properly escaped html string. This means that no unsafe input can make + * it into the returned string, however, since our parser is more strict than a typical browser + * parser, it's possible that some obscure input, which would be recognized as valid HTML by a + * browser, won't make it through the sanitizer. + * The whitelist is configured using the functions `aHrefSanitizationWhitelist` and + * `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}. + * + * @param {string} html Html input. + * @returns {string} Sanitized html. + * + * @example + + + +
+ Snippet: + + + + + + + + + + + + + + + + + + + + + + + + + +
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html="snippet">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value +
<div ng-bind-html="deliberatelyTrustDangerousSnippet()">
+</div>
+
ng-bindAutomatically escapes
<div ng-bind="snippet">
</div>
+
+
+ + it('should sanitize the html snippet by default', function() { + expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). + toBe('

an html\nclick here\nsnippet

'); + }); + + it('should inline raw snippet if bound to a trusted value', function() { + expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()). + toBe("

an html\n" + + "click here\n" + + "snippet

"); + }); + + it('should escape snippet without any filter', function() { + expect(element(by.css('#bind-default div')).getInnerHtml()). + toBe("<p style=\"color:blue\">an html\n" + + "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + + "snippet</p>"); + }); + + it('should update', function() { + element(by.model('snippet')).clear(); + element(by.model('snippet')).sendKeys('new text'); + expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). + toBe('new text'); + expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe( + 'new text'); + expect(element(by.css('#bind-default div')).getInnerHtml()).toBe( + "new <b onclick=\"alert(1)\">text</b>"); + }); +
+
+ */ +function $SanitizeProvider() { + this.$get = ['$$sanitizeUri', function($$sanitizeUri) { + return function(html) { + var buf = []; + htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) { + return !/^unsafe/.test($$sanitizeUri(uri, isImage)); + })); + return buf.join(''); + }; + }]; +} + +function sanitizeText(chars) { + var buf = []; + var writer = htmlSanitizeWriter(buf, angular.noop); + writer.chars(chars); + return buf.join(''); +} + + +// Regular Expressions for parsing tags and attributes +var START_TAG_REGEXP = + /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/, + END_TAG_REGEXP = /^<\s*\/\s*([\w:-]+)[^>]*>/, + ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, + BEGIN_TAG_REGEXP = /^/g, + DOCTYPE_REGEXP = /]*?)>/i, + CDATA_REGEXP = //g, + // Match everything outside of normal chars and " (quote character) + NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; + + +// Good source of info about elements and attributes +// http://dev.w3.org/html5/spec/Overview.html#semantics +// http://simon.html5.org/html-elements + +// Safe Void Elements - HTML5 +// http://dev.w3.org/html5/spec/Overview.html#void-elements +var voidElements = makeMap("area,br,col,hr,img,wbr"); + +// Elements that you can, intentionally, leave open (and which close themselves) +// http://dev.w3.org/html5/spec/Overview.html#optional-tags +var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), + optionalEndTagInlineElements = makeMap("rp,rt"), + optionalEndTagElements = angular.extend({}, + optionalEndTagInlineElements, + optionalEndTagBlockElements); + +// Safe Block Elements - HTML5 +var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," + + "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," + + "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")); + +// Inline Elements - HTML5 +var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," + + "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," + + "samp,small,span,strike,strong,sub,sup,time,tt,u,var")); + + +// Special Elements (can contain anything) +var specialElements = makeMap("script,style"); + +var validElements = angular.extend({}, + voidElements, + blockElements, + inlineElements, + optionalEndTagElements); + +//Attributes that have href and hence need to be sanitized +var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap"); +var validAttrs = angular.extend({}, uriAttrs, makeMap( + 'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+ + 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+ + 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+ + 'scope,scrolling,shape,size,span,start,summary,target,title,type,'+ + 'valign,value,vspace,width')); + +function makeMap(str) { + var obj = {}, items = str.split(','), i; + for (i = 0; i < items.length; i++) obj[items[i]] = true; + return obj; +} + + +/** + * @example + * htmlParser(htmlString, { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * }); + * + * @param {string} html string + * @param {object} handler + */ +function htmlParser( html, handler ) { + var index, chars, match, stack = [], last = html; + stack.last = function() { return stack[ stack.length - 1 ]; }; + + while ( html ) { + chars = true; + + // Make sure we're not in a script or style element + if ( !stack.last() || !specialElements[ stack.last() ] ) { + + // Comment + if ( html.indexOf("", index) === index) { + if (handler.comment) handler.comment( html.substring( 4, index ) ); + html = html.substring( index + 3 ); + chars = false; + } + // DOCTYPE + } else if ( DOCTYPE_REGEXP.test(html) ) { + match = html.match( DOCTYPE_REGEXP ); + + if ( match ) { + html = html.replace( match[0], ''); + chars = false; + } + // end tag + } else if ( BEGING_END_TAGE_REGEXP.test(html) ) { + match = html.match( END_TAG_REGEXP ); + + if ( match ) { + html = html.substring( match[0].length ); + match[0].replace( END_TAG_REGEXP, parseEndTag ); + chars = false; + } + + // start tag + } else if ( BEGIN_TAG_REGEXP.test(html) ) { + match = html.match( START_TAG_REGEXP ); + + if ( match ) { + html = html.substring( match[0].length ); + match[0].replace( START_TAG_REGEXP, parseStartTag ); + chars = false; + } + } + + if ( chars ) { + index = html.indexOf("<"); + + var text = index < 0 ? html : html.substring( 0, index ); + html = index < 0 ? "" : html.substring( index ); + + if (handler.chars) handler.chars( decodeEntities(text) ); + } + + } else { + html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), + function(all, text){ + text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1"); + + if (handler.chars) handler.chars( decodeEntities(text) ); + + return ""; + }); + + parseEndTag( "", stack.last() ); + } + + if ( html == last ) { + throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " + + "of html: {0}", html); + } + last = html; + } + + // Clean up any remaining tags + parseEndTag(); + + function parseStartTag( tag, tagName, rest, unary ) { + tagName = angular.lowercase(tagName); + if ( blockElements[ tagName ] ) { + while ( stack.last() && inlineElements[ stack.last() ] ) { + parseEndTag( "", stack.last() ); + } + } + + if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) { + parseEndTag( "", tagName ); + } + + unary = voidElements[ tagName ] || !!unary; + + if ( !unary ) + stack.push( tagName ); + + var attrs = {}; + + rest.replace(ATTR_REGEXP, + function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) { + var value = doubleQuotedValue + || singleQuotedValue + || unquotedValue + || ''; + + attrs[name] = decodeEntities(value); + }); + if (handler.start) handler.start( tagName, attrs, unary ); + } + + function parseEndTag( tag, tagName ) { + var pos = 0, i; + tagName = angular.lowercase(tagName); + if ( tagName ) + // Find the closest opened tag of the same type + for ( pos = stack.length - 1; pos >= 0; pos-- ) + if ( stack[ pos ] == tagName ) + break; + + if ( pos >= 0 ) { + // Close all the open elements, up the stack + for ( i = stack.length - 1; i >= pos; i-- ) + if (handler.end) handler.end( stack[ i ] ); + + // Remove the open elements from the stack + stack.length = pos; + } + } +} + +var hiddenPre=document.createElement("pre"); +var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/; +/** + * decodes all entities into regular string + * @param value + * @returns {string} A string with decoded entities. + */ +function decodeEntities(value) { + if (!value) { return ''; } + + // Note: IE8 does not preserve spaces at the start/end of innerHTML + // so we must capture them and reattach them afterward + var parts = spaceRe.exec(value); + var spaceBefore = parts[1]; + var spaceAfter = parts[3]; + var content = parts[2]; + if (content) { + hiddenPre.innerHTML=content.replace(//g, '>'); +} + +/** + * create an HTML/XML writer which writes to buffer + * @param {Array} buf use buf.jain('') to get out sanitized html string + * @returns {object} in the form of { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * } + */ +function htmlSanitizeWriter(buf, uriValidator){ + var ignore = false; + var out = angular.bind(buf, buf.push); + return { + start: function(tag, attrs, unary){ + tag = angular.lowercase(tag); + if (!ignore && specialElements[tag]) { + ignore = tag; + } + if (!ignore && validElements[tag] === true) { + out('<'); + out(tag); + angular.forEach(attrs, function(value, key){ + var lkey=angular.lowercase(key); + var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); + if (validAttrs[lkey] === true && + (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { + out(' '); + out(key); + out('="'); + out(encodeEntities(value)); + out('"'); + } + }); + out(unary ? '/>' : '>'); + } + }, + end: function(tag){ + tag = angular.lowercase(tag); + if (!ignore && validElements[tag] === true) { + out(''); + } + if (tag == ignore) { + ignore = false; + } + }, + chars: function(chars){ + if (!ignore) { + out(encodeEntities(chars)); + } + } + }; +} + + +// define ngSanitize module and register $sanitize service +angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); + +/* global sanitizeText: false */ + +/** + * @ngdoc filter + * @name linky + * @function + * + * @description + * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and + * plain email address links. + * + * Requires the {@link ngSanitize `ngSanitize`} module to be installed. + * + * @param {string} text Input text. + * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in. + * @returns {string} Html-linkified text. + * + * @usage + + * + * @example + + + +
+ Snippet: + + + + + + + + + + + + + + + + + + + + + +
FilterSourceRendered
linky filter +
<div ng-bind-html="snippet | linky">
</div>
+
+
+
linky target +
<div ng-bind-html="snippetWithTarget | linky:'_blank'">
</div>
+
+
+
no filter
<div ng-bind="snippet">
</div>
+ + + it('should linkify the snippet with urls', function() { + expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). + toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' + + 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); + expect(element.all(by.css('#linky-filter a')).count()).toEqual(4); + }); + + it('should not linkify snippet without the linky filter', function() { + expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()). + toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' + + 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); + expect(element.all(by.css('#escaped-html a')).count()).toEqual(0); + }); + + it('should update', function() { + element(by.model('snippet')).clear(); + element(by.model('snippet')).sendKeys('new http://link.'); + expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). + toBe('new http://link.'); + expect(element.all(by.css('#linky-filter a')).count()).toEqual(1); + expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()) + .toBe('new http://link.'); + }); + + it('should work with the target property', function() { + expect(element(by.id('linky-target')). + element(by.binding("snippetWithTarget | linky:'_blank'")).getText()). + toBe('http://angularjs.org/'); + expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank'); + }); + + + */ +angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { + var LINKY_URL_REGEXP = + /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/, + MAILTO_REGEXP = /^mailto:/; + + return function(text, target) { + if (!text) return text; + var match; + var raw = text; + var html = []; + var url; + var i; + while ((match = raw.match(LINKY_URL_REGEXP))) { + // We can not end in these as they are sometimes found at the end of the sentence + url = match[0]; + // if we did not match ftp/http/mailto then assume mailto + if (match[2] == match[3]) url = 'mailto:' + url; + i = match.index; + addText(raw.substr(0, i)); + addLink(url, match[0].replace(MAILTO_REGEXP, '')); + raw = raw.substring(i + match[0].length); + } + addText(raw); + return $sanitize(html.join('')); + + function addText(text) { + if (!text) { + return; + } + html.push(sanitizeText(text)); + } + + function addLink(url, text) { + html.push(''); + addText(text); + html.push(''); + } + }; +}]); + + +})(window, window.angular); diff --git a/app/bower_components/angular-sanitize/angular-sanitize.min.js b/app/bower_components/angular-sanitize/angular-sanitize.min.js new file mode 100644 index 0000000..d69fe25 --- /dev/null +++ b/app/bower_components/angular-sanitize/angular-sanitize.min.js @@ -0,0 +1,14 @@ +/* + AngularJS v1.2.15 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(p,h,q){'use strict';function E(a){var e=[];s(e,h.noop).chars(a);return e.join("")}function k(a){var e={};a=a.split(",");var d;for(d=0;d=c;d--)e.end&&e.end(f[d]);f.length=c}}var b,g,f=[],l=a;for(f.last=function(){return f[f.length-1]};a;){g=!0;if(f.last()&&x[f.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(b,a){a=a.replace(H,"$1").replace(I,"$1");e.chars&&e.chars(r(a));return""}),c("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(e.comment&&e.comment(a.substring(4,b)),a=a.substring(b+3),g=!1);else if(y.test(a)){if(b=a.match(y))a= +a.replace(b[0],""),g=!1}else if(J.test(a)){if(b=a.match(z))a=a.substring(b[0].length),b[0].replace(z,c),g=!1}else K.test(a)&&(b=a.match(A))&&(a=a.substring(b[0].length),b[0].replace(A,d),g=!1);g&&(b=a.indexOf("<"),g=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),e.chars&&e.chars(r(g)))}if(a==l)throw L("badparse",a);l=a}c()}function r(a){if(!a)return"";var e=M.exec(a);a=e[1];var d=e[3];if(e=e[2])n.innerHTML=e.replace(//g,">")}function s(a,e){var d=!1,c=h.bind(a,a.push);return{start:function(a,g,f){a=h.lowercase(a);!d&&x[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(g,function(d,f){var g=h.lowercase(f),k="img"===a&&"src"===g||"background"===g;!0!==O[g]||!0===D[g]&&!e(d,k)||(c(" "),c(f),c('="'),c(B(d)),c('"'))}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c(""));a==d&&(d=!1)},chars:function(a){d|| +c(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,z=/^<\s*\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^]*?)>/i,I=/]/,d=/^mailto:/;return function(c,b){function g(a){a&&m.push(E(a))}function f(a,c){m.push("');g(c);m.push("")}if(!c)return c;for(var l,k=c,m=[],n,p;l=k.match(e);)n=l[0],l[2]==l[3]&&(n="mailto:"+n),p=l.index,g(k.substr(0,p)),f(n,l[0].replace(d,"")),k=k.substring(p+l[0].length);g(k);return a(m.join(""))}}])})(window,window.angular); +//# sourceMappingURL=angular-sanitize.min.js.map diff --git a/app/bower_components/angular-sanitize/angular-sanitize.min.js.map b/app/bower_components/angular-sanitize/angular-sanitize.min.js.map new file mode 100644 index 0000000..dbf6b25 --- /dev/null +++ b/app/bower_components/angular-sanitize/angular-sanitize.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-sanitize.min.js", +"lineCount":13, +"mappings":"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", +"sources":["angular-sanitize.js"], +"names":["window","angular","undefined","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","makeMap","str","obj","items","split","i","length","htmlParser","html","handler","parseStartTag","tag","tagName","rest","unary","lowercase","blockElements","stack","last","inlineElements","parseEndTag","optionalEndTagElements","voidElements","push","attrs","replace","ATTR_REGEXP","match","name","doubleQuotedValue","singleQuotedValue","unquotedValue","decodeEntities","start","pos","end","index","stack.last","specialElements","RegExp","all","text","COMMENT_REGEXP","CDATA_REGEXP","indexOf","lastIndexOf","comment","substring","DOCTYPE_REGEXP","test","BEGING_END_TAGE_REGEXP","END_TAG_REGEXP","BEGIN_TAG_REGEXP","START_TAG_REGEXP","$sanitizeMinErr","value","parts","spaceRe","exec","spaceBefore","spaceAfter","content","hiddenPre","innerHTML","textContent","innerText","encodeEntities","NON_ALPHANUMERIC_REGEXP","charCodeAt","uriValidator","ignore","out","bind","validElements","forEach","key","lkey","isImage","validAttrs","uriAttrs","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","extend","document","createElement","module","provider","$SanitizeProvider","$get","$$sanitizeUri","uri","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","target","addText","addLink","url","isDefined","raw","substr"] +} diff --git a/app/bower_components/angular-sanitize/bower.json b/app/bower_components/angular-sanitize/bower.json new file mode 100644 index 0000000..b18165a --- /dev/null +++ b/app/bower_components/angular-sanitize/bower.json @@ -0,0 +1,8 @@ +{ + "name": "angular-sanitize", + "version": "1.2.15", + "main": "./angular-sanitize.js", + "dependencies": { + "angular": "1.2.15" + } +} diff --git a/app/bower_components/angular-scenario/.bower.json b/app/bower_components/angular-scenario/.bower.json new file mode 100644 index 0000000..efe3999 --- /dev/null +++ b/app/bower_components/angular-scenario/.bower.json @@ -0,0 +1,18 @@ +{ + "name": "angular-scenario", + "version": "1.2.15", + "main": "./angular-scenario.js", + "dependencies": { + "angular": "1.2.15" + }, + "homepage": "https://github.com/angular/bower-angular-scenario", + "_release": "1.2.15", + "_resolution": { + "type": "version", + "tag": "v1.2.15", + "commit": "6aac81c1bfc9c78920e6e962a838f24ab85aa7cc" + }, + "_source": "git://github.com/angular/bower-angular-scenario.git", + "_target": "1.2.15", + "_originalSource": "angular-scenario" +} \ No newline at end of file diff --git a/app/bower_components/angular-scenario/README.md b/app/bower_components/angular-scenario/README.md new file mode 100644 index 0000000..7f80a8c --- /dev/null +++ b/app/bower_components/angular-scenario/README.md @@ -0,0 +1,42 @@ +# bower-angular-scenario + +This repo is for distribution on `bower`. The source for this module is in the +[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngScenario). +Please file issues and pull requests against that repo. + +## Install + +Install with `bower`: + +```shell +bower install angular-scenario +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/). + +## License + +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/app/bower_components/angular-scenario/angular-scenario.js b/app/bower_components/angular-scenario/angular-scenario.js new file mode 100644 index 0000000..a645dc7 --- /dev/null +++ b/app/bower_components/angular-scenario/angular-scenario.js @@ -0,0 +1,33168 @@ +/*! + * jQuery JavaScript Library v1.10.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03T13:48Z + */ +(function( window, undefined ) {'use strict'; + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var + // The deferred used on DOM ready + readyList, + + // A central reference to the root jQuery(document) + rootjQuery, + + // Support: IE<10 + // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` + core_strundefined = typeof undefined, + + // Use the correct document accordingly with window argument (sandbox) + location = window.location, + document = window.document, + docElem = document.documentElement, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // [[Class]] -> type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.10.2", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( jQuery.support.ownLast ) { + for ( key in obj ) { + return core_hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations. + // Note: this method belongs to the css module but it's needed here for the support module. + // If support gets modularized, this method should be moved back to the css module. + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +/*! + * Sizzle CSS Selector Engine v1.10.2 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03 + */ +(function( window, undefined ) { + +var i, + support, + cachedruns, + Expr, + getText, + isXML, + compile, + outermostContext, + sortInput, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + hasDuplicate = false, + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rsibling = new RegExp( whitespace + "*[+~]" ), + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent.attachEvent && parent !== parent.top ) { + parent.attachEvent( "onbeforeunload", function() { + setDocument(); + }); + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = assert(function( div ) { + div.innerHTML = "
"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Support: Opera 10-12/IE8 + // ^= $= *= and empty values + // Should not select anything + // Support: Windows 8 Native Apps + // The type attribute is restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "t", "" ); + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); + + if ( compare ) { + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } + + // Not directly comparable, sort on existence of method + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val === undefined ? + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null : + val; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + } + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) + ); + return results; +} + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + elem[ name ] === true ? name.toLowerCase() : null; + } + }); +} + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function( support ) { + + var all, a, input, select, fragment, opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
a"; + + // Finish early in limited (non-browser) environments + all = div.getElementsByTagName("*") || []; + a = div.getElementsByTagName("a")[ 0 ]; + if ( !a || !a.style || !all.length ) { + return support; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + support.getSetAttribute = div.className !== "t"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName("tbody").length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName("link").length; + + // Get the style information from getAttribute + // (IE uses .cssText instead) + support.style = /top/.test( a.getAttribute("style") ); + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + support.hrefNormalized = a.getAttribute("href") === "/a"; + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + support.opacity = /^0.5/.test( a.style.opacity ); + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + support.cssFloat = !!a.style.cssFloat; + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + support.checkOn = !!input.value; + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + support.optSelected = opt.selected; + + // Tests for enctype support on a form (#6743) + support.enctype = !!document.createElement("form").enctype; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>"; + + // Will be defined later + support.inlineBlockNeedsLayout = false; + support.shrinkWrapBlocks = false; + support.pixelPosition = false; + support.deleteExpando = true; + support.noCloneEvent = true; + support.reliableMarginRight = true; + support.boxSizingReliable = true; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Support: IE<9 + // Iteration over object's inherited properties before its own. + for ( i in jQuery( support ) ) { + break; + } + support.ownLast = i !== "0"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "
t
"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior. + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + + // Workaround failing boxSizing test due to offsetWidth returning wrong value + // with some non-1 values of body zoom, ticket #13543 + jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { + support.boxSizing = div.offsetWidth === 4; + }); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "
"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})({}); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "applet": true, + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + data = null, + i = 0, + elem = this[0]; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( name.indexOf("data-") === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n\f]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // Use proper attribute retrieval(#6932, #12072) + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { + optionSet = true; + } + } + + // force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + elem[ propName ] = false; + // Support: IE<9 + // Also clear defaultChecked/defaultSelected (if appropriate) + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? + ret : + ( elem[ name ] = value ); + + } else { + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? + ret : + elem[ name ]; + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + } +}); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; + + jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? + function( elem, name, isXML ) { + var fn = jQuery.expr.attrHandle[ name ], + ret = isXML ? + undefined : + /* jshint eqeqeq: false */ + (jQuery.expr.attrHandle[ name ] = undefined) != + getter( elem, name, isXML ) ? + + name.toLowerCase() : + null; + jQuery.expr.attrHandle[ name ] = fn; + return ret; + } : + function( elem, name, isXML ) { + return isXML ? + undefined : + elem[ jQuery.camelCase( "default-" + name ) ] ? + name.toLowerCase() : + null; + }; +}); + +// fix oldIE attroperties +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = { + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = + // Some attributes are constructed with empty-string values when not defined + function( elem, name, isXML ) { + var ret; + return isXML ? + undefined : + (ret = elem.getAttributeNode( name )) && ret.value !== "" ? + ret.value : + null; + }; + jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ret.specified ? + ret.value : + undefined; + }, + set: nodeHook.set + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }; + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }; +} + +jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +}); + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }; + if ( !jQuery.support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + // Support: Webkit + // "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +var isSimple = /^.[^:#\[\.,]*$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + cur = ret.push( cur ); + break; + } + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( isSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var + // Snapshot the DOM in case .domManip sweeps something relevant into its fragment + args = jQuery.map( this, function( elem ) { + return [ elem.nextSibling, elem.parentNode ]; + }), + i = 0; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + var next = args[ i++ ], + parent = args[ i++ ]; + + if ( parent ) { + // Don't use the snapshot next if it has moved (#13810) + if ( next && next.parentNode !== parent ) { + next = this.nextSibling; + } + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + // Allow new content to include elements from the context set + }, true ); + + // Force removal if there was no new content (e.g., from empty arguments) + return i ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback, allowIntersection ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback, allowIntersection ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery._evalUrl( node.src ); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + }, + + _evalUrl: function( url ) { + return jQuery.ajax({ + url: url, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } +}); +jQuery.fn.extend({ + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each(function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery(" + +
  • + +
  • + +
  • + +
  • + + + + + +
    + +
    +
    +
    + +

    + Print this page to PDF for the complete set of vectors. Or to use on the desktop, install FontAwesome.otf and copy + and paste the icons (not the unicode) directly into your designs. +

    + +
    +
    +
    + +
    +
    +
    + + + + +
    + +
    + + icon-glass + (&#xf000;) +
    + +
    + + icon-music + (&#xf001;) +
    + +
    + + icon-search + (&#xf002;) +
    + +
    + + icon-envelope-alt + (&#xf003;) +
    + +
    + + icon-heart + (&#xf004;) +
    + +
    + + icon-star + (&#xf005;) +
    + +
    + + icon-star-empty + (&#xf006;) +
    + +
    + + icon-user + (&#xf007;) +
    + +
    + + icon-film + (&#xf008;) +
    + +
    + + icon-th-large + (&#xf009;) +
    + +
    + + icon-th + (&#xf00a;) +
    + +
    + + icon-th-list + (&#xf00b;) +
    + +
    + + icon-ok + (&#xf00c;) +
    + +
    + + icon-remove + (&#xf00d;) +
    + +
    + + icon-zoom-in + (&#xf00e;) +
    + +
    + + icon-zoom-out + (&#xf010;) +
    + +
    + + icon-off + (&#xf011;) +
    + +
    + + icon-signal + (&#xf012;) +
    + +
    + + icon-cog + (&#xf013;) +
    + +
    + + icon-trash + (&#xf014;) +
    + +
    + + icon-home + (&#xf015;) +
    + +
    + + icon-file-alt + (&#xf016;) +
    + +
    + + icon-time + (&#xf017;) +
    + +
    + + icon-road + (&#xf018;) +
    + +
    + + icon-download-alt + (&#xf019;) +
    + +
    + + icon-download + (&#xf01a;) +
    + +
    + + icon-upload + (&#xf01b;) +
    + +
    + + icon-inbox + (&#xf01c;) +
    + +
    + + icon-play-circle + (&#xf01d;) +
    + +
    + + icon-repeat + (&#xf01e;) +
    + +
    + + icon-refresh + (&#xf021;) +
    + +
    + + icon-list-alt + (&#xf022;) +
    + +
    + + icon-lock + (&#xf023;) +
    + +
    + + icon-flag + (&#xf024;) +
    + +
    + + icon-headphones + (&#xf025;) +
    + +
    + + icon-volume-off + (&#xf026;) +
    + +
    + + icon-volume-down + (&#xf027;) +
    + +
    + + icon-volume-up + (&#xf028;) +
    + +
    + + icon-qrcode + (&#xf029;) +
    + +
    + + icon-barcode + (&#xf02a;) +
    + +
    + + icon-tag + (&#xf02b;) +
    + +
    + + icon-tags + (&#xf02c;) +
    + +
    + + icon-book + (&#xf02d;) +
    + +
    + + icon-bookmark + (&#xf02e;) +
    + +
    + + icon-print + (&#xf02f;) +
    + +
    + + icon-camera + (&#xf030;) +
    + +
    + + icon-font + (&#xf031;) +
    + +
    + + icon-bold + (&#xf032;) +
    + +
    + + icon-italic + (&#xf033;) +
    + +
    + + icon-text-height + (&#xf034;) +
    + +
    + + icon-text-width + (&#xf035;) +
    + +
    + + icon-align-left + (&#xf036;) +
    + +
    + + icon-align-center + (&#xf037;) +
    + +
    + + icon-align-right + (&#xf038;) +
    + +
    + + icon-align-justify + (&#xf039;) +
    + +
    + + icon-list + (&#xf03a;) +
    + +
    + + icon-indent-left + (&#xf03b;) +
    + +
    + + icon-indent-right + (&#xf03c;) +
    + +
    + + icon-facetime-video + (&#xf03d;) +
    + +
    + + icon-picture + (&#xf03e;) +
    + +
    + + icon-pencil + (&#xf040;) +
    + +
    + + icon-map-marker + (&#xf041;) +
    + +
    + + icon-adjust + (&#xf042;) +
    + +
    + + icon-tint + (&#xf043;) +
    + +
    + + icon-edit + (&#xf044;) +
    + +
    + + icon-share + (&#xf045;) +
    + +
    + + icon-check + (&#xf046;) +
    + +
    + + icon-move + (&#xf047;) +
    + +
    + + icon-step-backward + (&#xf048;) +
    + +
    + + icon-fast-backward + (&#xf049;) +
    + +
    + + icon-backward + (&#xf04a;) +
    + +
    + + icon-play + (&#xf04b;) +
    + +
    + + icon-pause + (&#xf04c;) +
    + +
    + + icon-stop + (&#xf04d;) +
    + +
    + + icon-forward + (&#xf04e;) +
    + +
    + + icon-fast-forward + (&#xf050;) +
    + +
    + + icon-step-forward + (&#xf051;) +
    + +
    + + icon-eject + (&#xf052;) +
    + +
    + + icon-chevron-left + (&#xf053;) +
    + +
    + + icon-chevron-right + (&#xf054;) +
    + +
    + + icon-plus-sign + (&#xf055;) +
    + +
    + + icon-minus-sign + (&#xf056;) +
    + +
    + + icon-remove-sign + (&#xf057;) +
    + +
    + + icon-ok-sign + (&#xf058;) +
    + +
    + + icon-question-sign + (&#xf059;) +
    + +
    + + icon-info-sign + (&#xf05a;) +
    + +
    + + icon-screenshot + (&#xf05b;) +
    + +
    + + icon-remove-circle + (&#xf05c;) +
    + +
    + + icon-ok-circle + (&#xf05d;) +
    + +
    + + icon-ban-circle + (&#xf05e;) +
    + +
    + + icon-arrow-left + (&#xf060;) +
    + +
    + + icon-arrow-right + (&#xf061;) +
    + +
    + + icon-arrow-up + (&#xf062;) +
    + +
    + + icon-arrow-down + (&#xf063;) +
    + +
    + + icon-share-alt + (&#xf064;) +
    + +
    + + icon-resize-full + (&#xf065;) +
    + +
    + + icon-resize-small + (&#xf066;) +
    + +
    + + icon-plus + (&#xf067;) +
    + +
    + + icon-minus + (&#xf068;) +
    + +
    + + icon-asterisk + (&#xf069;) +
    + +
    + + icon-exclamation-sign + (&#xf06a;) +
    + +
    + + icon-gift + (&#xf06b;) +
    + +
    + + icon-leaf + (&#xf06c;) +
    + +
    + + icon-fire + (&#xf06d;) +
    + +
    + + icon-eye-open + (&#xf06e;) +
    + +
    + + icon-eye-close + (&#xf070;) +
    + +
    + + icon-warning-sign + (&#xf071;) +
    + +
    + + icon-plane + (&#xf072;) +
    + +
    + + icon-calendar + (&#xf073;) +
    + +
    + + icon-random + (&#xf074;) +
    + +
    + + icon-comment + (&#xf075;) +
    + +
    + + icon-magnet + (&#xf076;) +
    + +
    + + icon-chevron-up + (&#xf077;) +
    + +
    + + icon-chevron-down + (&#xf078;) +
    + +
    + + icon-retweet + (&#xf079;) +
    + +
    + + icon-shopping-cart + (&#xf07a;) +
    + +
    + + icon-folder-close + (&#xf07b;) +
    + +
    + + icon-folder-open + (&#xf07c;) +
    + +
    + + icon-resize-vertical + (&#xf07d;) +
    + +
    + + icon-resize-horizontal + (&#xf07e;) +
    + +
    + + icon-bar-chart + (&#xf080;) +
    + +
    + + icon-twitter-sign + (&#xf081;) +
    + +
    + + icon-facebook-sign + (&#xf082;) +
    + +
    + + icon-camera-retro + (&#xf083;) +
    + +
    + + icon-key + (&#xf084;) +
    + +
    + + icon-cogs + (&#xf085;) +
    + +
    + + icon-comments + (&#xf086;) +
    + +
    + + icon-thumbs-up-alt + (&#xf087;) +
    + +
    + + icon-thumbs-down-alt + (&#xf088;) +
    + +
    + + icon-star-half + (&#xf089;) +
    + +
    + + icon-heart-empty + (&#xf08a;) +
    + +
    + + icon-signout + (&#xf08b;) +
    + +
    + + icon-linkedin-sign + (&#xf08c;) +
    + +
    + + icon-pushpin + (&#xf08d;) +
    + +
    + + icon-external-link + (&#xf08e;) +
    + +
    + + icon-signin + (&#xf090;) +
    + +
    + + icon-trophy + (&#xf091;) +
    + +
    + + icon-github-sign + (&#xf092;) +
    + +
    + + icon-upload-alt + (&#xf093;) +
    + +
    + + icon-lemon + (&#xf094;) +
    + +
    + + icon-phone + (&#xf095;) +
    + +
    + + icon-check-empty + (&#xf096;) +
    + +
    + + icon-bookmark-empty + (&#xf097;) +
    + +
    + + icon-phone-sign + (&#xf098;) +
    + +
    + + icon-twitter + (&#xf099;) +
    + +
    + + icon-facebook + (&#xf09a;) +
    + +
    + + icon-github + (&#xf09b;) +
    + +
    + + icon-unlock + (&#xf09c;) +
    + +
    + + icon-credit-card + (&#xf09d;) +
    + +
    + + icon-rss + (&#xf09e;) +
    + +
    + + icon-hdd + (&#xf0a0;) +
    + +
    + + icon-bullhorn + (&#xf0a1;) +
    + +
    + + icon-bell + (&#xf0a2;) +
    + +
    + + icon-certificate + (&#xf0a3;) +
    + +
    + + icon-hand-right + (&#xf0a4;) +
    + +
    + + icon-hand-left + (&#xf0a5;) +
    + +
    + + icon-hand-up + (&#xf0a6;) +
    + +
    + + icon-hand-down + (&#xf0a7;) +
    + +
    + + icon-circle-arrow-left + (&#xf0a8;) +
    + +
    + + icon-circle-arrow-right + (&#xf0a9;) +
    + +
    + + icon-circle-arrow-up + (&#xf0aa;) +
    + +
    + + icon-circle-arrow-down + (&#xf0ab;) +
    + +
    + + icon-globe + (&#xf0ac;) +
    + +
    + + icon-wrench + (&#xf0ad;) +
    + +
    + + icon-tasks + (&#xf0ae;) +
    + +
    + + icon-filter + (&#xf0b0;) +
    + +
    + + icon-briefcase + (&#xf0b1;) +
    + +
    + + icon-fullscreen + (&#xf0b2;) +
    + +
    + + icon-group + (&#xf0c0;) +
    + +
    + + icon-link + (&#xf0c1;) +
    + +
    + + icon-cloud + (&#xf0c2;) +
    + +
    + + icon-beaker + (&#xf0c3;) +
    + +
    + + icon-cut + (&#xf0c4;) +
    + +
    + + icon-copy + (&#xf0c5;) +
    + +
    + + icon-paper-clip + (&#xf0c6;) +
    + +
    + + icon-save + (&#xf0c7;) +
    + +
    + + icon-sign-blank + (&#xf0c8;) +
    + +
    + + icon-reorder + (&#xf0c9;) +
    + +
    + + icon-list-ul + (&#xf0ca;) +
    + +
    + + icon-list-ol + (&#xf0cb;) +
    + +
    + + icon-strikethrough + (&#xf0cc;) +
    + +
    + + icon-underline + (&#xf0cd;) +
    + +
    + + icon-table + (&#xf0ce;) +
    + +
    + + icon-magic + (&#xf0d0;) +
    + +
    + + icon-truck + (&#xf0d1;) +
    + +
    + + icon-pinterest + (&#xf0d2;) +
    + +
    + + icon-pinterest-sign + (&#xf0d3;) +
    + +
    + + icon-google-plus-sign + (&#xf0d4;) +
    + +
    + + icon-google-plus + (&#xf0d5;) +
    + +
    + + icon-money + (&#xf0d6;) +
    + +
    + + icon-caret-down + (&#xf0d7;) +
    + +
    + + icon-caret-up + (&#xf0d8;) +
    + +
    + + icon-caret-left + (&#xf0d9;) +
    + +
    + + icon-caret-right + (&#xf0da;) +
    + +
    + + icon-columns + (&#xf0db;) +
    + +
    + + icon-sort + (&#xf0dc;) +
    + +
    + + icon-sort-down + (&#xf0dd;) +
    + +
    + + icon-sort-up + (&#xf0de;) +
    + +
    + + icon-envelope + (&#xf0e0;) +
    + +
    + + icon-linkedin + (&#xf0e1;) +
    + +
    + + icon-undo + (&#xf0e2;) +
    + +
    + + icon-legal + (&#xf0e3;) +
    + +
    + + icon-dashboard + (&#xf0e4;) +
    + +
    + + icon-comment-alt + (&#xf0e5;) +
    + +
    + + icon-comments-alt + (&#xf0e6;) +
    + +
    + + icon-bolt + (&#xf0e7;) +
    + +
    + + icon-sitemap + (&#xf0e8;) +
    + +
    + + icon-umbrella + (&#xf0e9;) +
    + +
    + + icon-paste + (&#xf0ea;) +
    + +
    + + icon-lightbulb + (&#xf0eb;) +
    + +
    + + icon-exchange + (&#xf0ec;) +
    + +
    + + icon-cloud-download + (&#xf0ed;) +
    + +
    + + icon-cloud-upload + (&#xf0ee;) +
    + +
    + + icon-user-md + (&#xf0f0;) +
    + +
    + + icon-stethoscope + (&#xf0f1;) +
    + +
    + + icon-suitcase + (&#xf0f2;) +
    + +
    + + icon-bell-alt + (&#xf0f3;) +
    + +
    + + icon-coffee + (&#xf0f4;) +
    + +
    + + icon-food + (&#xf0f5;) +
    + +
    + + icon-file-text-alt + (&#xf0f6;) +
    + +
    + + icon-building + (&#xf0f7;) +
    + +
    + + icon-hospital + (&#xf0f8;) +
    + +
    + + icon-ambulance + (&#xf0f9;) +
    + +
    + + icon-medkit + (&#xf0fa;) +
    + +
    + + icon-fighter-jet + (&#xf0fb;) +
    + +
    + + icon-beer + (&#xf0fc;) +
    + +
    + + icon-h-sign + (&#xf0fd;) +
    + +
    + + icon-plus-sign-alt + (&#xf0fe;) +
    + +
    + + icon-double-angle-left + (&#xf100;) +
    + +
    + + icon-double-angle-right + (&#xf101;) +
    + +
    + + icon-double-angle-up + (&#xf102;) +
    + +
    + + icon-double-angle-down + (&#xf103;) +
    + +
    + + icon-angle-left + (&#xf104;) +
    + +
    + + icon-angle-right + (&#xf105;) +
    + +
    + + icon-angle-up + (&#xf106;) +
    + +
    + + icon-angle-down + (&#xf107;) +
    + +
    + + icon-desktop + (&#xf108;) +
    + +
    + + icon-laptop + (&#xf109;) +
    + +
    + + icon-tablet + (&#xf10a;) +
    + +
    + + icon-mobile-phone + (&#xf10b;) +
    + +
    + + icon-circle-blank + (&#xf10c;) +
    + +
    + + icon-quote-left + (&#xf10d;) +
    + +
    + + icon-quote-right + (&#xf10e;) +
    + +
    + + icon-spinner + (&#xf110;) +
    + +
    + + icon-circle + (&#xf111;) +
    + +
    + + icon-reply + (&#xf112;) +
    + +
    + + icon-github-alt + (&#xf113;) +
    + +
    + + icon-folder-close-alt + (&#xf114;) +
    + +
    + + icon-folder-open-alt + (&#xf115;) +
    + +
    + + icon-expand-alt + (&#xf116;) +
    + +
    + + icon-collapse-alt + (&#xf117;) +
    + +
    + + icon-smile + (&#xf118;) +
    + +
    + + icon-frown + (&#xf119;) +
    + +
    + + icon-meh + (&#xf11a;) +
    + +
    + + icon-gamepad + (&#xf11b;) +
    + +
    + + icon-keyboard + (&#xf11c;) +
    + +
    + + icon-flag-alt + (&#xf11d;) +
    + +
    + + icon-flag-checkered + (&#xf11e;) +
    + +
    + + icon-terminal + (&#xf120;) +
    + +
    + + icon-code + (&#xf121;) +
    + +
    + + icon-reply-all + (&#xf122;) +
    + +
    + + icon-mail-reply-all + (&#xf122;) +
    + +
    + + icon-star-half-empty + (&#xf123;) +
    + +
    + + icon-location-arrow + (&#xf124;) +
    + +
    + + icon-crop + (&#xf125;) +
    + +
    + + icon-code-fork + (&#xf126;) +
    + +
    + + icon-unlink + (&#xf127;) +
    + +
    + + icon-question + (&#xf128;) +
    + +
    + + icon-info + (&#xf129;) +
    + +
    + + icon-exclamation + (&#xf12a;) +
    + +
    + + icon-superscript + (&#xf12b;) +
    + +
    + + icon-subscript + (&#xf12c;) +
    + +
    + + icon-eraser + (&#xf12d;) +
    + +
    + + icon-puzzle-piece + (&#xf12e;) +
    + +
    + + icon-microphone + (&#xf130;) +
    + +
    + + icon-microphone-off + (&#xf131;) +
    + +
    + + icon-shield + (&#xf132;) +
    + +
    + + icon-calendar-empty + (&#xf133;) +
    + +
    + + icon-fire-extinguisher + (&#xf134;) +
    + +
    + + icon-rocket + (&#xf135;) +
    + +
    + + icon-maxcdn + (&#xf136;) +
    + +
    + + icon-chevron-sign-left + (&#xf137;) +
    + +
    + + icon-chevron-sign-right + (&#xf138;) +
    + +
    + + icon-chevron-sign-up + (&#xf139;) +
    + +
    + + icon-chevron-sign-down + (&#xf13a;) +
    + +
    + + icon-html5 + (&#xf13b;) +
    + +
    + + icon-css3 + (&#xf13c;) +
    + +
    + + icon-anchor + (&#xf13d;) +
    + +
    + + icon-unlock-alt + (&#xf13e;) +
    + +
    + + icon-bullseye + (&#xf140;) +
    + +
    + + icon-ellipsis-horizontal + (&#xf141;) +
    + +
    + + icon-ellipsis-vertical + (&#xf142;) +
    + +
    + + icon-rss-sign + (&#xf143;) +
    + +
    + + icon-play-sign + (&#xf144;) +
    + +
    + + icon-ticket + (&#xf145;) +
    + +
    + + icon-minus-sign-alt + (&#xf146;) +
    + +
    + + icon-check-minus + (&#xf147;) +
    + +
    + + icon-level-up + (&#xf148;) +
    + +
    + + icon-level-down + (&#xf149;) +
    + +
    + + icon-check-sign + (&#xf14a;) +
    + +
    + + icon-edit-sign + (&#xf14b;) +
    + +
    + + icon-external-link-sign + (&#xf14c;) +
    + +
    + + icon-share-sign + (&#xf14d;) +
    + +
    + + icon-compass + (&#xf14e;) +
    + +
    + + icon-collapse + (&#xf150;) +
    + +
    + + icon-collapse-top + (&#xf151;) +
    + +
    + + icon-expand + (&#xf152;) +
    + +
    + + icon-eur + (&#xf153;) +
    + +
    + + icon-gbp + (&#xf154;) +
    + +
    + + icon-usd + (&#xf155;) +
    + +
    + + icon-inr + (&#xf156;) +
    + +
    + + icon-jpy + (&#xf157;) +
    + +
    + + icon-cny + (&#xf158;) +
    + +
    + + icon-krw + (&#xf159;) +
    + +
    + + icon-btc + (&#xf15a;) +
    + +
    + + icon-file + (&#xf15b;) +
    + +
    + + icon-file-text + (&#xf15c;) +
    + +
    + + icon-sort-by-alphabet + (&#xf15d;) +
    + +
    + + icon-sort-by-alphabet-alt + (&#xf15e;) +
    + +
    + + icon-sort-by-attributes + (&#xf160;) +
    + +
    + + icon-sort-by-attributes-alt + (&#xf161;) +
    + +
    + + icon-sort-by-order + (&#xf162;) +
    + +
    + + icon-sort-by-order-alt + (&#xf163;) +
    + +
    + + icon-thumbs-up + (&#xf164;) +
    + +
    + + icon-thumbs-down + (&#xf165;) +
    + +
    + + icon-youtube-sign + (&#xf166;) +
    + +
    + + icon-youtube + (&#xf167;) +
    + +
    + + icon-xing + (&#xf168;) +
    + +
    + + icon-xing-sign + (&#xf169;) +
    + +
    + + icon-youtube-play + (&#xf16a;) +
    + +
    + + icon-dropbox + (&#xf16b;) +
    + +
    + + icon-stackexchange + (&#xf16c;) +
    + +
    + + icon-instagram + (&#xf16d;) +
    + +
    + + icon-flickr + (&#xf16e;) +
    + +
    + + icon-adn + (&#xf170;) +
    + +
    + + icon-bitbucket + (&#xf171;) +
    + +
    + + icon-bitbucket-sign + (&#xf172;) +
    + +
    + + icon-tumblr + (&#xf173;) +
    + +
    + + icon-tumblr-sign + (&#xf174;) +
    + +
    + + icon-long-arrow-down + (&#xf175;) +
    + +
    + + icon-long-arrow-up + (&#xf176;) +
    + +
    + + icon-long-arrow-left + (&#xf177;) +
    + +
    + + icon-long-arrow-right + (&#xf178;) +
    + +
    + + icon-apple + (&#xf179;) +
    + +
    + + icon-windows + (&#xf17a;) +
    + +
    + + icon-android + (&#xf17b;) +
    + +
    + + icon-linux + (&#xf17c;) +
    + +
    + + icon-dribbble + (&#xf17d;) +
    + +
    + + icon-skype + (&#xf17e;) +
    + +
    + + icon-foursquare + (&#xf180;) +
    + +
    + + icon-trello + (&#xf181;) +
    + +
    + + icon-female + (&#xf182;) +
    + +
    + + icon-male + (&#xf183;) +
    + +
    + + icon-gittip + (&#xf184;) +
    + +
    + + icon-sun + (&#xf185;) +
    + +
    + + icon-moon + (&#xf186;) +
    + +
    + + icon-archive + (&#xf187;) +
    + +
    + + icon-bug + (&#xf188;) +
    + +
    + + icon-vk + (&#xf189;) +
    + +
    + + icon-weibo + (&#xf18a;) +
    + +
    + + icon-renren + (&#xf18b;) +
    + +
    + +
    + +
    + + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/community/index.html b/app/bower_components/font-awesome/src/3.2.1/community/index.html new file mode 100644 index 0000000..264a015 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/community/index.html @@ -0,0 +1,354 @@ + + + + + + + + + + The Font Awesome Community + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +
    +

      Community

    +

    Lots of ways to get involved with Font Awesome

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +

    + Font Awesome has a vibrant community of folks helping each other out. You can + get support, + report bugs, + request new icons, + submit pull requests, and + check upcoming milestones. +

    + +
    +
    +
    + +
    +
    +
    + + +
    + +

    + Having trouble getting Font Awesome up and running? Something not working the way you think it should? I hate that + I don't have time to answer Font Awesome support emails anymore. So here are some things you might wanna do: +

    +
      +
    1. + Make sure you've read the latest version of how to get started. + It's been updated recently to make Font Awesome even easier to use. +
    2. +
    3. + Check out the existing questions tagged as + Font Awesome over on Stack Overflow. Other folks might have had the same question you've had. +
    4. +
    5. + Can't find the answer to your question on Stack Overflow? + Ask a new question, then + send me an email and I might be able to take a look. +
    6. +
    +
    + +
    + +

    + Found a problem with Font Awesome? Feel free to submit an issue on the GitHub project. But please keep the following in mind: +

    +
      +
    1. Please be nice. Font Awesome is a happy place.
    2. +
    3. Please search to see if your icon request already exists.
    4. +
    5. + Before opening any issue, please read the generic issue + guidelines, by Nicolas Gallagher. +
    6. +
    7. + After doing everything above, feel free to + submit an issue. +
    8. +
    +
    + +
    + +

    + New icons mostly start as requests by the + Font Awesome community on GitHub. Want to request a new + icon? Here are some things to keep in mind: +

    +
      +
    1. Please be nice. Font Awesome is a happy place.
    2. +
    3. Please search to see if your icon request already exists.
    4. +
    5. + Please and thank you if you include the following: +
        +
      • + Title your new issue + Icon request: icon-name. +
      • +
      • Include a few use cases for your requested icon. How do you plan on using it?
      • +
      • Attach a single color image or two that represent the idea you're going for.
      • +
      +
    6. +
    7. + Concrete objects make good icons, since abstract concepts are, well, abstract. It's harder to make an icon + to represent happiness. It's easier to make a smiley face. +
    8. +
    +
    + +
    + + Found a way to solve a bug in Font Awesome? Want to contribute new features? Here are a few things to remember: +
      +
    1. Please submit all pull requests against *-wip branches.
    2. +
    3. All pull requests submitted against master will be sumarily closed and this guide referenced.
    4. +
    5. + After doing everything above, feel free to + submit a pull request. +
    6. +
    +
    + +
    + +

    + Want to keep up with what's planned for Font Awesome? Check out our + milestones on the GitHub project. +

    +
    + + +
    + +
    +
    +

    + Thanks to @robmadole and + @supercodepoet for icon design + review, advice, some Jekyll help, and being all around badass coders. +

    +
    +
    +

    + Thanks to @grantgordon and + @johnsmclay for developing and hosting + icnfnt, the best way to subset Font Awesome. +

    +
    +
    +

    + Thanks to MaxCDN for providing the excellent + BootstrapCDN, the fastest and easiest way to + get started with Font Awesome. +

    +
    +
    +
    + +
    + +

    + Hopefully you think Font Awesome is awesome. I've put hundreds of hours into the project to give back to the + open source community. If you'd like, here are a couple of ways you can tell me thanks for all my hard work. +

    +
    +
    +

    Tip me on Gittip

    +

    + Gittip is a great way to let developers know you appreciate their work. +

    +
    +
    +

    My Amazon Wish List

    +

    + Or pick something straight + from my wish list. Gift cards are great. +

    +
    +
    +
    + + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/design.html b/app/bower_components/font-awesome/src/3.2.1/design.html new file mode 100644 index 0000000..9c5830d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/design.html @@ -0,0 +1 @@ + diff --git a/app/bower_components/font-awesome/src/3.2.1/examples/index.html b/app/bower_components/font-awesome/src/3.2.1/examples/index.html new file mode 100644 index 0000000..c3d25ad --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/examples/index.html @@ -0,0 +1,671 @@ + + + + + + + + + + Font Awesome Examples + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +
    +

      Examples

    +

    Lots of easy ways to use Font Awesome

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +

    + After you get up and running, you can place Font Awesome icons just about + anywhere with the <i> tag. + Many examples appreciatively re-used from the Bootstrap documentation. +

    + +
    +
    +
    + +
    +
    +
    + + +
    + +
    +
    +

    Rotated and Flipped Icons

    +
    +   normal
    +   icon-rotate-90
    +   icon-rotate-180
    +   icon-rotate-270
    +   icon-flip-horizontal
    +   icon-flip-vertical +
    +
    +
    +

    Stacked Icons

    +
    + + + + + icon-twitter on icon-check-empty
    + + + + + icon-flag on icon-circle
    + + + + + icon-terminal on icon-sign-blank +
    +
    +
    +

    Better Bulleted Lists

    +
    +
      +
    • New bulleted lists
    • +
    • Fix some old bugs
    • +
    • And deal with arbitrary
    • +
    • Font sizes better
    • +
    +
    +
    +
    +
    + + +
    + +
    +
    +

    Place Font Awesome icons just about anywhere with the <i> tag.

    +
    +
    +
    +
    + icon-camera-retro +
    +
    +
    <i class="icon-camera-retro"></i> icon-camera-retro
    +
    +
    Icon classes are echoed via CSS :before.
    +
    +
    +
    + +
    + +
    +
    +

    + To increase the size of icons relative to its container, use icon-large, icon-2x, + icon-3x, or icon-4x. +

    +
    +
    +

    + Increase the icon size by using the icon-large (33% increase), icon-2x, + icon-3x, or icon-4x classes. +

    +
    +
    +

    icon-camera-retro

    +

    icon-camera-retro

    +

    icon-camera-retro

    +

    icon-camera-retro

    +
    +
    +
    <p><i class="icon-camera-retro icon-large"></i> icon-camera-retro</p>
    +<p><i class="icon-camera-retro icon-2x"></i> icon-camera-retro</p>
    +<p><i class="icon-camera-retro icon-3x"></i> icon-camera-retro</p>
    +<p><i class="icon-camera-retro icon-4x"></i> icon-camera-retro</p>
    +
    +
    + If your icons are getting chopped off on top and bottom, make sure you have + sufficient line-height. +
    +
    +
    +
    + +
    + +
    +
    +

    + Use icon-border and pull-right or pull-left for easy pull quotes or + article graphics. +

    +
    +
    +
    + + Use a few of the new styles together, and you've got easy pull quotes or a great introductory article image. + Or spinning icons for loading and refreshing content. Or fun big icons in multi-line buttons. You can combine all + of them in any combination to get lots of new possibilities. +
    +
    <i class="icon-quote-left icon-4x pull-left icon-muted"></i>
    +Use a few of the new styles together ... lots of new possibilities.
    +
    +
    + + Use a few of the new styles together, and you've got easy pull quotes or a great introductory article image. + Or spinning icons for loading and refreshing content. Or fun big icons in multi-line buttons. You can combine all + of them in any combination to get lots of new possibilities. +
    +
    <i class="icon-flag icon-4x pull-left icon-border"></i>
    +Use a few of the new styles together ... lots of new possibilities.
    +
    +
    +
    +
    + +
    + +
    + +
    +

    + Font Awesome icons work great in buttons. You can even combine them with larger icon styles, + pull-right and pull-left, and icon-spin. +

    +
    <a class="btn" href="#">
    +  <i class="icon-repeat"></i> Reload</a>
    +<a class="btn btn-success" href="#">
    +  <i class="icon-shopping-cart icon-large"></i> Checkout</a>
    +<a class="btn btn-large btn-primary" href="#">
    +  <i class="icon-comment"></i> Comment</a>
    +<a class="btn btn-small btn-info" href="#">
    +  <i class="icon-info-sign"></i> Info</a>
    +<a class="btn btn-danger" href="#">
    +  <i class="icon-trash icon-large"></i> Delete</a>
    +<a class="btn btn-small" href="#">
    +  <i class="icon-cog"></i> Settings</a>
    +<a class="btn btn-large btn-danger" href="#">
    +  <i class="icon-flag icon-2x pull-left"></i> Font Awesome<br>Version 3.2.1</a>
    +<a class="btn btn-primary" href="#">
    +  <i class="icon-refresh icon-spin"></i> Synchronizing Content...</a>
    +
    +
    +
    +
    + +
    + +
    +
    +

    +

    + + + + +
    +

    +
    +
    +
    <div class="btn-group">
    +  <a class="btn" href="#"><i class="icon-align-left"></i></a>
    +  <a class="btn" href="#"><i class="icon-align-center"></i></a>
    +  <a class="btn" href="#"><i class="icon-align-right"></i></a>
    +  <a class="btn" href="#"><i class="icon-align-justify"></i></a>
    +</div>
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    <div class="btn-group open">
    +  <a class="btn btn-primary" href="#"><i class="icon-user"></i> User</a>
    +  <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#">
    +    <span class="icon-caret-down"></span></a>
    +  <ul class="dropdown-menu">
    +    <li><a href="#"><i class="icon-fixed-width icon-pencil"></i> Edit</a></li>
    +    <li><a href="#"><i class="icon-fixed-width icon-trash"></i> Delete</a></li>
    +    <li><a href="#"><i class="icon-fixed-width icon-ban-circle"></i> Ban</a></li>
    +    <li class="divider"></li>
    +    <li><a href="#"><i class="i"></i> Make admin</a></li>
    +  </ul>
    +</div>
    +
    +
    Don't forget to add the appropriate JavaScript to enable button dropdowns.
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
      +
    • Bulleted lists (like this one)
    • +
    • Buttons
    • +
    • Button groups
    • +
    • Navigation
    • +
    • Prepended form inputs
    • +
    • …and many more with custom CSS
    • +
    +
    +
    +

    Easily replace individual bullets.

    +
    <ul class="icons-ul">
    +  <li><i class="icon-li icon-ok"></i>Bulleted lists (like this one)</li>
    +  <li><i class="icon-li icon-ok"></i>Buttons</li>
    +  <li><i class="icon-li icon-ok"></i>Button groups</li>
    +  <li><i class="icon-li icon-ok"></i>Navigation</li>
    +  <li><i class="icon-li icon-ok"></i>Prepended form inputs</li>
    +  <li><i class="icon-li icon-ok"></i>&hellip;and many more with custom CSS</li>
    +</ul>
    +
    +
    Make sure to NOT include any whitespace after the icon declaration.
    +
    +
    +
    + + + +
    + +
    +
    +
    +
    + + +
    +
    + + +
    + +
    +
    +
    <form>
    +  <div class="input-prepend">
    +    <span class="add-on"><i class="icon-envelope"></i></span>
    +    <input class="span2" type="text" placeholder="Email address">
    +  </div>
    +  <div class="input-prepend">
    +    <span class="add-on"><i class="icon-key"></i></span>
    +    <input class="span2" type="password" placeholder="Password">
    +  </div>
    +</form>
    +
    +
    +
    +
    + +
    + +
    +
    + Use the icon-spin class to get any icon to rotate. Works well with icon-spinner and + icon-refresh. +
    +
    +
    + Spinner icon when loading content... +
    +
    <i class="icon-spinner icon-spin icon-large"></i> Spinner icon when loading content...
    +
    +

    + CSS3 animations aren't supported in IE7 - IE9. +

    +
    +
    +
    + +
    + +
    +
    + A set of classes that can be used to arbitrarily rotate and flip icons. +
    +
    +
    +   normal
    +   icon-rotate-90
    +   icon-rotate-180
    +   icon-rotate-270
    +   icon-flip-horizontal
    +   icon-flip-vertical +
    +
    <i class="icon-shield"></i>&nbsp; normal<br>
    +<i class="icon-shield icon-rotate-90"></i>&nbsp; icon-rotate-90<br>
    +<i class="icon-shield icon-rotate-180"></i>&nbsp; icon-rotate-180<br>
    +<i class="icon-shield icon-rotate-270"></i>&nbsp; icon-rotate-270<br>
    +<i class="icon-shield icon-flip-horizontal"></i>&nbsp; icon-flip-horizontal<br>
    +<i class="icon-shield icon-flip-vertical"></i>&nbsp; icon-flip-vertical
    +
    +

    + Rotating and flipping icons aren't yet supported in IE7. +

    +
    +
    +
    + +
    + +
    +
    + A method for easily stacking multiple icons. Use the icon-stack class on the parent and + icon-stack-base for the bottom icon. +
    +
    +
    + + + + + icon-twitter on icon-check-empty
    + + + + + icon-flag on icon-circle
    + + + + + icon-terminal on icon-sign-blank
    + + + + + icon-camera on icon-ban-circle +
    +
    <span class="icon-stack">
    +  <i class="icon-check-empty icon-stack-base"></i>
    +  <i class="icon-twitter"></i>
    +</span>
    +icon-twitter on icon-check-empty<br>
    +<span class="icon-stack">
    +  <i class="icon-circle icon-stack-base"></i>
    +  <i class="icon-flag icon-light"></i>
    +</span>
    +icon-flag on icon-circle<br>
    +<span class="icon-stack">
    +  <i class="icon-sign-blank icon-stack-base"></i>
    +  <i class="icon-terminal icon-light"></i>
    +</span>
    +icon-terminal on icon-sign-blank<br>
    +<span class="icon-stack">
    +  <i class="icon-camera"></i>
    +  <i class="icon-ban-circle icon-stack-base text-error"></i>
    +</span>
    +icon-camera on icon-ban-circle
    +
    +
    +
    +
    + +
    + +
    +
    +

    Anything you can do with CSS font styles, you can do with Font Awesome.

    +
    +
    +

    Star Ratings (inspired by CSS Tricks)

    +
    + + + +
    +
    +
    +
    + + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/get-started/index.html b/app/bower_components/font-awesome/src/3.2.1/get-started/index.html new file mode 100644 index 0000000..616f055 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/get-started/index.html @@ -0,0 +1,299 @@ + + + + + + + + + + Get Started with Font Awesome + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +
    +

      Get Started

    +

    Easy ways to get Font Awesome 3.2.1 onto your website

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +

    + Setting up Font Awesome can be as simple as adding two lines of code to your website, or you can be a pro and + customize the LESS yourself! Font Awesome even plays nicely with + Bootstrap! +

    + +
    +
    +
    + +
    +
    +
    + + +
    + +

    Add Font Awesome + Bootstrap into your website with two lines of code. You don't even have to download or install anything!

    +
      +
    1. + Paste the following code into the <head> section of your site's HTML. +
      <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.no-icons.min.css" rel="stylesheet">
      +<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">
      +
      +
      + Want to use Font Awesome by itself without Bootstrap? Just don't include the first line. +
      +
    2. +
    3. + Pat yourself on the back for your scalable-vector-icons-on-the-website + judo solution in two lines of code. +
    4. +
    5. + Check out the examples to start using Font Awesome! +
    6. +
    +
    + +
    + +

    Use this method to get the default Font Awesome CSS with the default Bootstrap CSS.

    +
      +
    1. Copy the font-awesome directory into your project.
    2. +
    3. + In the <head> of your html, reference the location to your font-awesome.min.css. +
      <link rel="stylesheet" href="path/to/bootstrap/css/bootstrap.min.css">
      +<link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css">
      +
      +
    4. +
    5. Check out the examples to start using Font Awesome!
    6. +
    +
    + +
    + +

    Use this method to customize Font Awesome and Bootstrap 2.3.2 using LESS.

    +
      +
    1. Copy the font-awesome directory into your project.
    2. +
    3. Open your project's bootstrap/bootstrap.less and replace +
      @import "sprites.less";
      +
      + with +
      @import "path/to/font-awesome/less/font-awesome.less";
      +
      +
    4. +
    5. + Open your project's font-awesome/variables.less and edit the @FontAwesomePath variable to point to your font directory. +
      @FontAwesomePath:   "../font";
      +
      +

      The font path is relative from your compiled CSS directory.

      +
    6. +
    7. Re-compile your LESS if using a static compiler. Otherwise, you should be good to go.
    8. +
    9. Check out the examples to start using Font Awesome!
    10. +
    +
    + +
    + +

    Font Awesome works just as well without Bootstrap.

    +
      +
    1. Copy the font-awesome directory into your project.
    2. +
    3. Follow the above directions and skip the Bootstrap parts.
    4. +
    5. Open your project's font-awesome.less or font-awesome.min.css and edit the font location to point it to your font directory (see above examples).
    6. +
    7. Check out the examples to start using Font Awesome!
    8. +
    +
    + +
    + +

    Font Awesome supports IE7. If you need it, you have my condolences.

    +
      +
    1. Get Font Awesome working properly in a modern browser.
    2. +
    3. Copy font-awesome-ie7.min.css into your project.
    4. +
    5. + In the <head> of your html, reference the location to your font-awesome-ie7.min.css. +
      <link rel="stylesheet" href="path/to/bootstrap/css/bootstrap.min.css">
      +<link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css">
      +<!--[if IE 7]>
      +  <link rel="stylesheet" href="path/to/font-awesome/css/font-awesome-ie7.min.css">
      +<![endif]-->
      +
      +
    6. +
    7. Go complain to whoever decided your project needs IE7 support.
    8. +
    +
    + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/adjust/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/adjust/index.html new file mode 100644 index 0000000..54d203c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/adjust/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-adjust: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-adjust + + · + Unicode: f042 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-adjust +
    +
    +
    <i class="icon-adjust"></i> icon-adjust
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/adn/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/adn/index.html new file mode 100644 index 0000000..7b317e2 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/adn/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-adn: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-adn + + · + Unicode: f170 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-adn +
    +
    +
    <i class="icon-adn"></i> icon-adn
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/align-center/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/align-center/index.html new file mode 100644 index 0000000..6a3716b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/align-center/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-align-center: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-align-center + + · + Unicode: f037 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-align-center +
    +
    +
    <i class="icon-align-center"></i> icon-align-center
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/align-justify/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/align-justify/index.html new file mode 100644 index 0000000..9bdacbe --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/align-justify/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-align-justify: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-align-justify + + · + Unicode: f039 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-align-justify +
    +
    +
    <i class="icon-align-justify"></i> icon-align-justify
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/align-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/align-left/index.html new file mode 100644 index 0000000..651ea49 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/align-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-align-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-align-left + + · + Unicode: f036 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-align-left +
    +
    +
    <i class="icon-align-left"></i> icon-align-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/align-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/align-right/index.html new file mode 100644 index 0000000..a7ce0b3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/align-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-align-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-align-right + + · + Unicode: f038 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-align-right +
    +
    +
    <i class="icon-align-right"></i> icon-align-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ambulance/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ambulance/index.html new file mode 100644 index 0000000..128e161 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ambulance/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ambulance: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ambulance + + · + Unicode: f0f9 · + Created: v3.0 · + Categories: + + Medical Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ambulance +
    +
    +
    <i class="icon-ambulance"></i> icon-ambulance
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/anchor/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/anchor/index.html new file mode 100644 index 0000000..987d488 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/anchor/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-anchor: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-anchor + + · + Unicode: f13d · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-anchor +
    +
    +
    <i class="icon-anchor"></i> icon-anchor
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/android/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/android/index.html new file mode 100644 index 0000000..7e1abc6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/android/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-android: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-android + + · + Unicode: f17b · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-android +
    +
    +
    <i class="icon-android"></i> icon-android
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/angle-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/angle-down/index.html new file mode 100644 index 0000000..980e3f5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/angle-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-angle-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-angle-down + + · + Unicode: f107 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-angle-down +
    +
    +
    <i class="icon-angle-down"></i> icon-angle-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/angle-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/angle-left/index.html new file mode 100644 index 0000000..d8fd536 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/angle-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-angle-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-angle-left + + · + Unicode: f104 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-angle-left +
    +
    +
    <i class="icon-angle-left"></i> icon-angle-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/angle-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/angle-right/index.html new file mode 100644 index 0000000..53dbb4d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/angle-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-angle-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-angle-right + + · + Unicode: f105 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-angle-right +
    +
    +
    <i class="icon-angle-right"></i> icon-angle-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/angle-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/angle-up/index.html new file mode 100644 index 0000000..b7c4087 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/angle-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-angle-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-angle-up + + · + Unicode: f106 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-angle-up +
    +
    +
    <i class="icon-angle-up"></i> icon-angle-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/apple/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/apple/index.html new file mode 100644 index 0000000..0770f1d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/apple/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-apple: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-apple + + · + Unicode: f179 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-apple +
    +
    +
    <i class="icon-apple"></i> icon-apple
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/archive/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/archive/index.html new file mode 100644 index 0000000..5aebb33 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/archive/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-archive: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-archive + + · + Unicode: f187 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-archive +
    +
    +
    <i class="icon-archive"></i> icon-archive
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/arrow-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-down/index.html new file mode 100644 index 0000000..2e0c6ab --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-arrow-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-arrow-down + + · + Unicode: f063 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-arrow-down +
    +
    +
    <i class="icon-arrow-down"></i> icon-arrow-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/arrow-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-left/index.html new file mode 100644 index 0000000..50b8aa6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-arrow-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-arrow-left + + · + Unicode: f060 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-arrow-left +
    +
    +
    <i class="icon-arrow-left"></i> icon-arrow-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/arrow-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-right/index.html new file mode 100644 index 0000000..f1c899d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-arrow-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-arrow-right + + · + Unicode: f061 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-arrow-right +
    +
    +
    <i class="icon-arrow-right"></i> icon-arrow-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/arrow-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-up/index.html new file mode 100644 index 0000000..a242ca8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/arrow-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-arrow-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-arrow-up + + · + Unicode: f062 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-arrow-up +
    +
    +
    <i class="icon-arrow-up"></i> icon-arrow-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/asterisk/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/asterisk/index.html new file mode 100644 index 0000000..4ebfdea --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/asterisk/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-asterisk: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-asterisk + + · + Unicode: f069 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-asterisk +
    +
    +
    <i class="icon-asterisk"></i> icon-asterisk
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/backward/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/backward/index.html new file mode 100644 index 0000000..7859653 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/backward/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-backward: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-backward + + · + Unicode: f04a · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-backward +
    +
    +
    <i class="icon-backward"></i> icon-backward
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ban-circle/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ban-circle/index.html new file mode 100644 index 0000000..129111b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ban-circle/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ban-circle: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ban-circle + + · + Unicode: f05e · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ban-circle +
    +
    +
    <i class="icon-ban-circle"></i> icon-ban-circle
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bar-chart/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bar-chart/index.html new file mode 100644 index 0000000..2c20d95 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bar-chart/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bar-chart: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bar-chart + + · + Unicode: f080 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bar-chart +
    +
    +
    <i class="icon-bar-chart"></i> icon-bar-chart
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/barcode/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/barcode/index.html new file mode 100644 index 0000000..2a5ca4e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/barcode/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-barcode: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-barcode + + · + Unicode: f02a · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-barcode +
    +
    +
    <i class="icon-barcode"></i> icon-barcode
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/beaker/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/beaker/index.html new file mode 100644 index 0000000..ba77123 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/beaker/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-beaker: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-beaker + + · + Unicode: f0c3 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-beaker +
    +
    +
    <i class="icon-beaker"></i> icon-beaker
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/beer/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/beer/index.html new file mode 100644 index 0000000..dcda703 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/beer/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-beer: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-beer + + · + Unicode: f0fc · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-beer +
    +
    +
    <i class="icon-beer"></i> icon-beer
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bell-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bell-alt/index.html new file mode 100644 index 0000000..0fbdd7d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bell-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bell-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bell-alt + + · + Unicode: f0f3 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bell-alt +
    +
    +
    <i class="icon-bell-alt"></i> icon-bell-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bell/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bell/index.html new file mode 100644 index 0000000..b8ffe83 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bell/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bell: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bell + + · + Unicode: f0a2 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bell +
    +
    +
    <i class="icon-bell"></i> icon-bell
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bitbucket-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bitbucket-sign/index.html new file mode 100644 index 0000000..e667aae --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bitbucket-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bitbucket-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bitbucket-sign + + · + Unicode: f172 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bitbucket-sign +
    +
    +
    <i class="icon-bitbucket-sign"></i> icon-bitbucket-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bitbucket/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bitbucket/index.html new file mode 100644 index 0000000..4ff1265 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bitbucket/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bitbucket: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bitbucket + + · + Unicode: f171 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bitbucket +
    +
    +
    <i class="icon-bitbucket"></i> icon-bitbucket
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bold/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bold/index.html new file mode 100644 index 0000000..69b1082 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bold/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bold: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bold + + · + Unicode: f032 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bold +
    +
    +
    <i class="icon-bold"></i> icon-bold
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bolt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bolt/index.html new file mode 100644 index 0000000..aa6e822 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bolt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bolt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bolt + + · + Unicode: f0e7 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bolt +
    +
    +
    <i class="icon-bolt"></i> icon-bolt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/book/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/book/index.html new file mode 100644 index 0000000..fb3298e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/book/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-book: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-book + + · + Unicode: f02d · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-book +
    +
    +
    <i class="icon-book"></i> icon-book
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bookmark-empty/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bookmark-empty/index.html new file mode 100644 index 0000000..9fec923 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bookmark-empty/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bookmark-empty: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bookmark-empty + + · + Unicode: f097 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bookmark-empty +
    +
    +
    <i class="icon-bookmark-empty"></i> icon-bookmark-empty
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bookmark/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bookmark/index.html new file mode 100644 index 0000000..a490139 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bookmark/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bookmark: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bookmark + + · + Unicode: f02e · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bookmark +
    +
    +
    <i class="icon-bookmark"></i> icon-bookmark
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/briefcase/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/briefcase/index.html new file mode 100644 index 0000000..65b5630 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/briefcase/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-briefcase: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-briefcase + + · + Unicode: f0b1 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-briefcase +
    +
    +
    <i class="icon-briefcase"></i> icon-briefcase
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/btc/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/btc/index.html new file mode 100644 index 0000000..09d5a47 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/btc/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + icon-btc: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-btc + + · + Unicode: f15a · + Created: v3.2 · + Categories: + + Currency Icons, + + Brand Icons + + + + · Aliases: + + icon-bitcoin + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-btc +
    +
    +
    <i class="icon-btc"></i> icon-btc
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bug/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bug/index.html new file mode 100644 index 0000000..69dd499 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bug/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bug: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bug + + · + Unicode: f188 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bug +
    +
    +
    <i class="icon-bug"></i> icon-bug
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/building/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/building/index.html new file mode 100644 index 0000000..0d3ea79 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/building/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-building: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-building + + · + Unicode: f0f7 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-building +
    +
    +
    <i class="icon-building"></i> icon-building
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bullhorn/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bullhorn/index.html new file mode 100644 index 0000000..2a23949 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bullhorn/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bullhorn: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bullhorn + + · + Unicode: f0a1 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bullhorn +
    +
    +
    <i class="icon-bullhorn"></i> icon-bullhorn
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/bullseye/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/bullseye/index.html new file mode 100644 index 0000000..53411ef --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/bullseye/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-bullseye: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-bullseye + + · + Unicode: f140 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-bullseye +
    +
    +
    <i class="icon-bullseye"></i> icon-bullseye
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/calendar-empty/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/calendar-empty/index.html new file mode 100644 index 0000000..68c6e0b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/calendar-empty/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-calendar-empty: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-calendar-empty + + · + Unicode: f133 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-calendar-empty +
    +
    +
    <i class="icon-calendar-empty"></i> icon-calendar-empty
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/calendar/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/calendar/index.html new file mode 100644 index 0000000..dbc30d3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/calendar/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-calendar: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-calendar + + · + Unicode: f073 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-calendar +
    +
    +
    <i class="icon-calendar"></i> icon-calendar
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/camera-retro/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/camera-retro/index.html new file mode 100644 index 0000000..a193775 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/camera-retro/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-camera-retro: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-camera-retro + + · + Unicode: f083 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-camera-retro +
    +
    +
    <i class="icon-camera-retro"></i> icon-camera-retro
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/camera/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/camera/index.html new file mode 100644 index 0000000..3559519 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/camera/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-camera: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-camera + + · + Unicode: f030 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-camera +
    +
    +
    <i class="icon-camera"></i> icon-camera
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/caret-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/caret-down/index.html new file mode 100644 index 0000000..217b1c9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/caret-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-caret-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-caret-down + + · + Unicode: f0d7 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-caret-down +
    +
    +
    <i class="icon-caret-down"></i> icon-caret-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/caret-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/caret-left/index.html new file mode 100644 index 0000000..afdd042 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/caret-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-caret-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-caret-left + + · + Unicode: f0d9 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-caret-left +
    +
    +
    <i class="icon-caret-left"></i> icon-caret-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/caret-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/caret-right/index.html new file mode 100644 index 0000000..e73b7eb --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/caret-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-caret-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-caret-right + + · + Unicode: f0da · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-caret-right +
    +
    +
    <i class="icon-caret-right"></i> icon-caret-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/caret-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/caret-up/index.html new file mode 100644 index 0000000..6d1597a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/caret-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-caret-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-caret-up + + · + Unicode: f0d8 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-caret-up +
    +
    +
    <i class="icon-caret-up"></i> icon-caret-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/certificate/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/certificate/index.html new file mode 100644 index 0000000..3982634 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/certificate/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-certificate: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-certificate + + · + Unicode: f0a3 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-certificate +
    +
    +
    <i class="icon-certificate"></i> icon-certificate
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/check-empty/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/check-empty/index.html new file mode 100644 index 0000000..99c2238 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/check-empty/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-check-empty: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-check-empty + + · + Unicode: f096 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + · Aliases: + + icon-unchecked + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-check-empty +
    +
    +
    <i class="icon-check-empty"></i> icon-check-empty
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/check-minus/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/check-minus/index.html new file mode 100644 index 0000000..f62ce73 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/check-minus/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-check-minus: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-check-minus + + · + Unicode: f147 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-check-minus +
    +
    +
    <i class="icon-check-minus"></i> icon-check-minus
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/check-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/check-sign/index.html new file mode 100644 index 0000000..6e9e4f0 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/check-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-check-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-check-sign + + · + Unicode: f14a · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-check-sign +
    +
    +
    <i class="icon-check-sign"></i> icon-check-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/check/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/check/index.html new file mode 100644 index 0000000..aaca7ea --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/check/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-check: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-check + + · + Unicode: f046 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-check +
    +
    +
    <i class="icon-check"></i> icon-check
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-down/index.html new file mode 100644 index 0000000..53f0c97 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-down + + · + Unicode: f078 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-down +
    +
    +
    <i class="icon-chevron-down"></i> icon-chevron-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-left/index.html new file mode 100644 index 0000000..90c5ed6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-left + + · + Unicode: f053 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-left +
    +
    +
    <i class="icon-chevron-left"></i> icon-chevron-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-right/index.html new file mode 100644 index 0000000..0be7da6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-right + + · + Unicode: f054 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-right +
    +
    +
    <i class="icon-chevron-right"></i> icon-chevron-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-down/index.html new file mode 100644 index 0000000..55928e6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-sign-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-sign-down + + · + Unicode: f13a · + Created: v3.1 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-sign-down +
    +
    +
    <i class="icon-chevron-sign-down"></i> icon-chevron-sign-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-left/index.html new file mode 100644 index 0000000..5ec15a4 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-sign-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-sign-left + + · + Unicode: f137 · + Created: v3.1 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-sign-left +
    +
    +
    <i class="icon-chevron-sign-left"></i> icon-chevron-sign-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-right/index.html new file mode 100644 index 0000000..9cf013b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-sign-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-sign-right + + · + Unicode: f138 · + Created: v3.1 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-sign-right +
    +
    +
    <i class="icon-chevron-sign-right"></i> icon-chevron-sign-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-up/index.html new file mode 100644 index 0000000..6a74ceb --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-sign-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-sign-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-sign-up + + · + Unicode: f139 · + Created: v3.1 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-sign-up +
    +
    +
    <i class="icon-chevron-sign-up"></i> icon-chevron-sign-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/chevron-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-up/index.html new file mode 100644 index 0000000..d457d9e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/chevron-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-chevron-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-chevron-up + + · + Unicode: f077 · + Created: v1.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-chevron-up +
    +
    +
    <i class="icon-chevron-up"></i> icon-chevron-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-down/index.html new file mode 100644 index 0000000..d4b5a45 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-circle-arrow-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-circle-arrow-down + + · + Unicode: f0ab · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-circle-arrow-down +
    +
    +
    <i class="icon-circle-arrow-down"></i> icon-circle-arrow-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-left/index.html new file mode 100644 index 0000000..bf2c12a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-circle-arrow-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-circle-arrow-left + + · + Unicode: f0a8 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-circle-arrow-left +
    +
    +
    <i class="icon-circle-arrow-left"></i> icon-circle-arrow-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-right/index.html new file mode 100644 index 0000000..0ed1369 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-circle-arrow-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-circle-arrow-right + + · + Unicode: f0a9 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-circle-arrow-right +
    +
    +
    <i class="icon-circle-arrow-right"></i> icon-circle-arrow-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-up/index.html new file mode 100644 index 0000000..7279554 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/circle-arrow-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-circle-arrow-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-circle-arrow-up + + · + Unicode: f0aa · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-circle-arrow-up +
    +
    +
    <i class="icon-circle-arrow-up"></i> icon-circle-arrow-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/circle-blank/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/circle-blank/index.html new file mode 100644 index 0000000..1e87eaa --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/circle-blank/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-circle-blank: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-circle-blank + + · + Unicode: f10c · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-circle-blank +
    +
    +
    <i class="icon-circle-blank"></i> icon-circle-blank
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/circle/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/circle/index.html new file mode 100644 index 0000000..3cb1a0c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/circle/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-circle: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-circle + + · + Unicode: f111 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-circle +
    +
    +
    <i class="icon-circle"></i> icon-circle
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/cloud-download/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/cloud-download/index.html new file mode 100644 index 0000000..8bc71dc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/cloud-download/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-cloud-download: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-cloud-download + + · + Unicode: f0ed · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-cloud-download +
    +
    +
    <i class="icon-cloud-download"></i> icon-cloud-download
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/cloud-upload/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/cloud-upload/index.html new file mode 100644 index 0000000..3bfc450 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/cloud-upload/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-cloud-upload: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-cloud-upload + + · + Unicode: f0ee · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-cloud-upload +
    +
    +
    <i class="icon-cloud-upload"></i> icon-cloud-upload
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/cloud/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/cloud/index.html new file mode 100644 index 0000000..d4e319e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/cloud/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-cloud: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-cloud + + · + Unicode: f0c2 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-cloud +
    +
    +
    <i class="icon-cloud"></i> icon-cloud
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/cny/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/cny/index.html new file mode 100644 index 0000000..39ad423 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/cny/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-cny: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-cny + + · + Unicode: f158 · + Created: v3.2 · + Categories: + + Currency Icons + + + + · Aliases: + + icon-renminbi + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-cny +
    +
    +
    <i class="icon-cny"></i> icon-cny
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/code-fork/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/code-fork/index.html new file mode 100644 index 0000000..e1f7a64 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/code-fork/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-code-fork: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-code-fork + + · + Unicode: f126 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-code-fork +
    +
    +
    <i class="icon-code-fork"></i> icon-code-fork
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/code/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/code/index.html new file mode 100644 index 0000000..d28713c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/code/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-code: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-code + + · + Unicode: f121 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-code +
    +
    +
    <i class="icon-code"></i> icon-code
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/coffee/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/coffee/index.html new file mode 100644 index 0000000..63e06e4 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/coffee/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-coffee: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-coffee + + · + Unicode: f0f4 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-coffee +
    +
    +
    <i class="icon-coffee"></i> icon-coffee
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/cog/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/cog/index.html new file mode 100644 index 0000000..8afd031 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/cog/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-cog: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-cog + + · + Unicode: f013 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + · Aliases: + + icon-gear + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-cog +
    +
    +
    <i class="icon-cog"></i> icon-cog
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/cogs/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/cogs/index.html new file mode 100644 index 0000000..2c4c56d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/cogs/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-cogs: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-cogs + + · + Unicode: f085 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + · Aliases: + + icon-gears + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-cogs +
    +
    +
    <i class="icon-cogs"></i> icon-cogs
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/collapse-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/collapse-alt/index.html new file mode 100644 index 0000000..c56b536 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/collapse-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-collapse-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-collapse-alt + + · + Unicode: f117 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-collapse-alt +
    +
    +
    <i class="icon-collapse-alt"></i> icon-collapse-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/collapse-top/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/collapse-top/index.html new file mode 100644 index 0000000..a2416a1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/collapse-top/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-collapse-top: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-collapse-top + + · + Unicode: f151 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-collapse-top +
    +
    +
    <i class="icon-collapse-top"></i> icon-collapse-top
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/collapse/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/collapse/index.html new file mode 100644 index 0000000..592d934 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/collapse/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-collapse: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-collapse + + · + Unicode: f150 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-collapse +
    +
    +
    <i class="icon-collapse"></i> icon-collapse
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/columns/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/columns/index.html new file mode 100644 index 0000000..2cac42b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/columns/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-columns: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-columns + + · + Unicode: f0db · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-columns +
    +
    +
    <i class="icon-columns"></i> icon-columns
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/comment-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/comment-alt/index.html new file mode 100644 index 0000000..dfe025d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/comment-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-comment-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-comment-alt + + · + Unicode: f0e5 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-comment-alt +
    +
    +
    <i class="icon-comment-alt"></i> icon-comment-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/comment/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/comment/index.html new file mode 100644 index 0000000..d3217e2 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/comment/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-comment: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-comment + + · + Unicode: f075 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-comment +
    +
    +
    <i class="icon-comment"></i> icon-comment
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/comments-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/comments-alt/index.html new file mode 100644 index 0000000..1b0d464 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/comments-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-comments-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-comments-alt + + · + Unicode: f0e6 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-comments-alt +
    +
    +
    <i class="icon-comments-alt"></i> icon-comments-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/comments/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/comments/index.html new file mode 100644 index 0000000..a9d57f5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/comments/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-comments: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-comments + + · + Unicode: f086 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-comments +
    +
    +
    <i class="icon-comments"></i> icon-comments
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/compass/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/compass/index.html new file mode 100644 index 0000000..b6bee48 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/compass/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-compass: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-compass + + · + Unicode: f14e · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-compass +
    +
    +
    <i class="icon-compass"></i> icon-compass
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/copy/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/copy/index.html new file mode 100644 index 0000000..3e6bf66 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/copy/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-copy: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-copy + + · + Unicode: f0c5 · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-copy +
    +
    +
    <i class="icon-copy"></i> icon-copy
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/credit-card/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/credit-card/index.html new file mode 100644 index 0000000..576fe24 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/credit-card/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-credit-card: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-credit-card + + · + Unicode: f09d · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-credit-card +
    +
    +
    <i class="icon-credit-card"></i> icon-credit-card
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/crop/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/crop/index.html new file mode 100644 index 0000000..226413b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/crop/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-crop: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-crop + + · + Unicode: f125 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-crop +
    +
    +
    <i class="icon-crop"></i> icon-crop
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/css3/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/css3/index.html new file mode 100644 index 0000000..3684786 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/css3/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-css3: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-css3 + + · + Unicode: f13c · + Created: v3.1 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-css3 +
    +
    +
    <i class="icon-css3"></i> icon-css3
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/cut/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/cut/index.html new file mode 100644 index 0000000..6c63fa3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/cut/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-cut: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-cut + + · + Unicode: f0c4 · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-cut +
    +
    +
    <i class="icon-cut"></i> icon-cut
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/dashboard/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/dashboard/index.html new file mode 100644 index 0000000..a509a08 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/dashboard/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-dashboard: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-dashboard + + · + Unicode: f0e4 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-dashboard +
    +
    +
    <i class="icon-dashboard"></i> icon-dashboard
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/desktop/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/desktop/index.html new file mode 100644 index 0000000..1ac39c8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/desktop/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-desktop: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-desktop + + · + Unicode: f108 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-desktop +
    +
    +
    <i class="icon-desktop"></i> icon-desktop
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-down/index.html new file mode 100644 index 0000000..6b4f803 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-double-angle-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-double-angle-down + + · + Unicode: f103 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-double-angle-down +
    +
    +
    <i class="icon-double-angle-down"></i> icon-double-angle-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-left/index.html new file mode 100644 index 0000000..cba1443 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-double-angle-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-double-angle-left + + · + Unicode: f100 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-double-angle-left +
    +
    +
    <i class="icon-double-angle-left"></i> icon-double-angle-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-right/index.html new file mode 100644 index 0000000..d62c787 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-double-angle-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-double-angle-right + + · + Unicode: f101 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-double-angle-right +
    +
    +
    <i class="icon-double-angle-right"></i> icon-double-angle-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-up/index.html new file mode 100644 index 0000000..1a9988c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/double-angle-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-double-angle-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-double-angle-up + + · + Unicode: f102 · + Created: v3.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-double-angle-up +
    +
    +
    <i class="icon-double-angle-up"></i> icon-double-angle-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/download-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/download-alt/index.html new file mode 100644 index 0000000..5763029 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/download-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-download-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-download-alt + + · + Unicode: f019 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-download-alt +
    +
    +
    <i class="icon-download-alt"></i> icon-download-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/download/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/download/index.html new file mode 100644 index 0000000..d95fc93 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/download/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-download: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-download + + · + Unicode: f01a · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-download +
    +
    +
    <i class="icon-download"></i> icon-download
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/dribbble/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/dribbble/index.html new file mode 100644 index 0000000..12808af --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/dribbble/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-dribbble: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-dribbble + + · + Unicode: f17d · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-dribbble +
    +
    +
    <i class="icon-dribbble"></i> icon-dribbble
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/dropbox/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/dropbox/index.html new file mode 100644 index 0000000..86a7515 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/dropbox/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-dropbox: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-dropbox + + · + Unicode: f16b · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-dropbox +
    +
    +
    <i class="icon-dropbox"></i> icon-dropbox
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/edit-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/edit-sign/index.html new file mode 100644 index 0000000..75402f7 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/edit-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-edit-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-edit-sign + + · + Unicode: f14b · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-edit-sign +
    +
    +
    <i class="icon-edit-sign"></i> icon-edit-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/edit/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/edit/index.html new file mode 100644 index 0000000..254a9cb --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/edit/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-edit: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-edit + + · + Unicode: f044 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-edit +
    +
    +
    <i class="icon-edit"></i> icon-edit
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/eject/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/eject/index.html new file mode 100644 index 0000000..a7712b3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/eject/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-eject: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-eject + + · + Unicode: f052 · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-eject +
    +
    +
    <i class="icon-eject"></i> icon-eject
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ellipsis-horizontal/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ellipsis-horizontal/index.html new file mode 100644 index 0000000..55abf3e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ellipsis-horizontal/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ellipsis-horizontal: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ellipsis-horizontal + + · + Unicode: f141 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ellipsis-horizontal +
    +
    +
    <i class="icon-ellipsis-horizontal"></i> icon-ellipsis-horizontal
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ellipsis-vertical/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ellipsis-vertical/index.html new file mode 100644 index 0000000..cccffe3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ellipsis-vertical/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ellipsis-vertical: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ellipsis-vertical + + · + Unicode: f142 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ellipsis-vertical +
    +
    +
    <i class="icon-ellipsis-vertical"></i> icon-ellipsis-vertical
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/envelope-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/envelope-alt/index.html new file mode 100644 index 0000000..3d99144 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/envelope-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-envelope-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-envelope-alt + + · + Unicode: f003 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-envelope-alt +
    +
    +
    <i class="icon-envelope-alt"></i> icon-envelope-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/envelope/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/envelope/index.html new file mode 100644 index 0000000..e4d771e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/envelope/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-envelope: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-envelope + + · + Unicode: f0e0 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-envelope +
    +
    +
    <i class="icon-envelope"></i> icon-envelope
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/eraser/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/eraser/index.html new file mode 100644 index 0000000..1f5f878 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/eraser/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + icon-eraser: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-eraser + + · + Unicode: f12d · + Created: v3.1 · + Categories: + + Text Editor Icons, + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-eraser +
    +
    +
    <i class="icon-eraser"></i> icon-eraser
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/eur/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/eur/index.html new file mode 100644 index 0000000..d968986 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/eur/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-eur: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-eur + + · + Unicode: f153 · + Created: v3.2 · + Categories: + + Currency Icons + + + + · Aliases: + + icon-euro + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-eur +
    +
    +
    <i class="icon-eur"></i> icon-eur
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/exchange/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/exchange/index.html new file mode 100644 index 0000000..afdb303 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/exchange/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-exchange: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-exchange + + · + Unicode: f0ec · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-exchange +
    +
    +
    <i class="icon-exchange"></i> icon-exchange
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/exclamation-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/exclamation-sign/index.html new file mode 100644 index 0000000..ad8c95c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/exclamation-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-exclamation-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-exclamation-sign + + · + Unicode: f06a · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-exclamation-sign +
    +
    +
    <i class="icon-exclamation-sign"></i> icon-exclamation-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/exclamation/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/exclamation/index.html new file mode 100644 index 0000000..0492fa1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/exclamation/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-exclamation: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-exclamation + + · + Unicode: f12a · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-exclamation +
    +
    +
    <i class="icon-exclamation"></i> icon-exclamation
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/expand-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/expand-alt/index.html new file mode 100644 index 0000000..9e2bc68 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/expand-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-expand-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-expand-alt + + · + Unicode: f116 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-expand-alt +
    +
    +
    <i class="icon-expand-alt"></i> icon-expand-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/expand/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/expand/index.html new file mode 100644 index 0000000..4fddffa --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/expand/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-expand: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-expand + + · + Unicode: f152 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-expand +
    +
    +
    <i class="icon-expand"></i> icon-expand
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/external-link-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/external-link-sign/index.html new file mode 100644 index 0000000..198521a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/external-link-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-external-link-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-external-link-sign + + · + Unicode: f14c · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-external-link-sign +
    +
    +
    <i class="icon-external-link-sign"></i> icon-external-link-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/external-link/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/external-link/index.html new file mode 100644 index 0000000..548d33c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/external-link/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-external-link: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-external-link + + · + Unicode: f08e · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-external-link +
    +
    +
    <i class="icon-external-link"></i> icon-external-link
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/eye-close/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/eye-close/index.html new file mode 100644 index 0000000..59f040b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/eye-close/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-eye-close: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-eye-close + + · + Unicode: f070 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-eye-close +
    +
    +
    <i class="icon-eye-close"></i> icon-eye-close
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/eye-open/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/eye-open/index.html new file mode 100644 index 0000000..c5b5e12 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/eye-open/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-eye-open: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-eye-open + + · + Unicode: f06e · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-eye-open +
    +
    +
    <i class="icon-eye-open"></i> icon-eye-open
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/facebook-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/facebook-sign/index.html new file mode 100644 index 0000000..a92946f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/facebook-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-facebook-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-facebook-sign + + · + Unicode: f082 · + Created: v1.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-facebook-sign +
    +
    +
    <i class="icon-facebook-sign"></i> icon-facebook-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/facebook/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/facebook/index.html new file mode 100644 index 0000000..3f427cc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/facebook/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-facebook: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-facebook + + · + Unicode: f09a · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-facebook +
    +
    +
    <i class="icon-facebook"></i> icon-facebook
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/facetime-video/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/facetime-video/index.html new file mode 100644 index 0000000..f0af716 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/facetime-video/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-facetime-video: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-facetime-video + + · + Unicode: f03d · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-facetime-video +
    +
    +
    <i class="icon-facetime-video"></i> icon-facetime-video
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/fast-backward/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/fast-backward/index.html new file mode 100644 index 0000000..12575ff --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/fast-backward/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-fast-backward: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-fast-backward + + · + Unicode: f049 · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-fast-backward +
    +
    +
    <i class="icon-fast-backward"></i> icon-fast-backward
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/fast-forward/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/fast-forward/index.html new file mode 100644 index 0000000..2847d9e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/fast-forward/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-fast-forward: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-fast-forward + + · + Unicode: f050 · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-fast-forward +
    +
    +
    <i class="icon-fast-forward"></i> icon-fast-forward
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/female/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/female/index.html new file mode 100644 index 0000000..30987c0 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/female/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-female: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-female + + · + Unicode: f182 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-female +
    +
    +
    <i class="icon-female"></i> icon-female
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/fighter-jet/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/fighter-jet/index.html new file mode 100644 index 0000000..8c9a52b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/fighter-jet/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-fighter-jet: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-fighter-jet + + · + Unicode: f0fb · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-fighter-jet +
    +
    +
    <i class="icon-fighter-jet"></i> icon-fighter-jet
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/file-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/file-alt/index.html new file mode 100644 index 0000000..e3034a8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/file-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-file-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-file-alt + + · + Unicode: f016 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-file-alt +
    +
    +
    <i class="icon-file-alt"></i> icon-file-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/file-text-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/file-text-alt/index.html new file mode 100644 index 0000000..f9284ca --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/file-text-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-file-text-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-file-text-alt + + · + Unicode: f0f6 · + Created: v3.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-file-text-alt +
    +
    +
    <i class="icon-file-text-alt"></i> icon-file-text-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/file-text/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/file-text/index.html new file mode 100644 index 0000000..90d7f15 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/file-text/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-file-text: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-file-text + + · + Unicode: f15c · + Created: v3.2 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-file-text +
    +
    +
    <i class="icon-file-text"></i> icon-file-text
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/file/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/file/index.html new file mode 100644 index 0000000..7afa114 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/file/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-file: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-file + + · + Unicode: f15b · + Created: v3.2 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-file +
    +
    +
    <i class="icon-file"></i> icon-file
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/film/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/film/index.html new file mode 100644 index 0000000..fb03bdc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/film/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-film: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-film + + · + Unicode: f008 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-film +
    +
    +
    <i class="icon-film"></i> icon-film
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/filter/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/filter/index.html new file mode 100644 index 0000000..9cb552c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/filter/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-filter: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-filter + + · + Unicode: f0b0 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-filter +
    +
    +
    <i class="icon-filter"></i> icon-filter
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/fire-extinguisher/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/fire-extinguisher/index.html new file mode 100644 index 0000000..5a00fb9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/fire-extinguisher/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-fire-extinguisher: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-fire-extinguisher + + · + Unicode: f134 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-fire-extinguisher +
    +
    +
    <i class="icon-fire-extinguisher"></i> icon-fire-extinguisher
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/fire/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/fire/index.html new file mode 100644 index 0000000..6ca70f8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/fire/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-fire: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-fire + + · + Unicode: f06d · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-fire +
    +
    +
    <i class="icon-fire"></i> icon-fire
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/flag-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/flag-alt/index.html new file mode 100644 index 0000000..5d62958 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/flag-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-flag-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-flag-alt + + · + Unicode: f11d · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-flag-alt +
    +
    +
    <i class="icon-flag-alt"></i> icon-flag-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/flag-checkered/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/flag-checkered/index.html new file mode 100644 index 0000000..972ebef --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/flag-checkered/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-flag-checkered: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-flag-checkered + + · + Unicode: f11e · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-flag-checkered +
    +
    +
    <i class="icon-flag-checkered"></i> icon-flag-checkered
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/flag/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/flag/index.html new file mode 100644 index 0000000..7f9c8e9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/flag/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-flag: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-flag + + · + Unicode: f024 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-flag +
    +
    +
    <i class="icon-flag"></i> icon-flag
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/flickr/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/flickr/index.html new file mode 100644 index 0000000..5379f5f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/flickr/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-flickr: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-flickr + + · + Unicode: f16e · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-flickr +
    +
    +
    <i class="icon-flickr"></i> icon-flickr
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/folder-close-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/folder-close-alt/index.html new file mode 100644 index 0000000..5bc757e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/folder-close-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-folder-close-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-folder-close-alt + + · + Unicode: f114 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-folder-close-alt +
    +
    +
    <i class="icon-folder-close-alt"></i> icon-folder-close-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/folder-close/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/folder-close/index.html new file mode 100644 index 0000000..bf006b0 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/folder-close/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-folder-close: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-folder-close + + · + Unicode: f07b · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-folder-close +
    +
    +
    <i class="icon-folder-close"></i> icon-folder-close
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/folder-open-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/folder-open-alt/index.html new file mode 100644 index 0000000..a114fb1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/folder-open-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-folder-open-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-folder-open-alt + + · + Unicode: f115 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-folder-open-alt +
    +
    +
    <i class="icon-folder-open-alt"></i> icon-folder-open-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/folder-open/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/folder-open/index.html new file mode 100644 index 0000000..306c578 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/folder-open/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-folder-open: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-folder-open + + · + Unicode: f07c · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-folder-open +
    +
    +
    <i class="icon-folder-open"></i> icon-folder-open
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/font/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/font/index.html new file mode 100644 index 0000000..2a970e7 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/font/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-font: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-font + + · + Unicode: f031 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-font +
    +
    +
    <i class="icon-font"></i> icon-font
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/food/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/food/index.html new file mode 100644 index 0000000..c5d1837 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/food/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-food: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-food + + · + Unicode: f0f5 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-food +
    +
    +
    <i class="icon-food"></i> icon-food
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/forward/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/forward/index.html new file mode 100644 index 0000000..c1484cc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/forward/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-forward: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-forward + + · + Unicode: f04e · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-forward +
    +
    +
    <i class="icon-forward"></i> icon-forward
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/foursquare/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/foursquare/index.html new file mode 100644 index 0000000..23e71bb --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/foursquare/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-foursquare: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-foursquare + + · + Unicode: f180 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-foursquare +
    +
    +
    <i class="icon-foursquare"></i> icon-foursquare
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/frown/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/frown/index.html new file mode 100644 index 0000000..67132a3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/frown/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-frown: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-frown + + · + Unicode: f119 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-frown +
    +
    +
    <i class="icon-frown"></i> icon-frown
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/fullscreen/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/fullscreen/index.html new file mode 100644 index 0000000..05d4445 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/fullscreen/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-fullscreen: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-fullscreen + + · + Unicode: f0b2 · + Created: v2.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-fullscreen +
    +
    +
    <i class="icon-fullscreen"></i> icon-fullscreen
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/gamepad/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/gamepad/index.html new file mode 100644 index 0000000..0bd4ffe --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/gamepad/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-gamepad: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-gamepad + + · + Unicode: f11b · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-gamepad +
    +
    +
    <i class="icon-gamepad"></i> icon-gamepad
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/gbp/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/gbp/index.html new file mode 100644 index 0000000..87d4317 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/gbp/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-gbp: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-gbp + + · + Unicode: f154 · + Created: v3.2 · + Categories: + + Currency Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-gbp +
    +
    +
    <i class="icon-gbp"></i> icon-gbp
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/gift/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/gift/index.html new file mode 100644 index 0000000..88f3464 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/gift/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-gift: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-gift + + · + Unicode: f06b · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-gift +
    +
    +
    <i class="icon-gift"></i> icon-gift
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/github-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/github-alt/index.html new file mode 100644 index 0000000..eacd12e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/github-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-github-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-github-alt + + · + Unicode: f113 · + Created: v3.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-github-alt +
    +
    +
    <i class="icon-github-alt"></i> icon-github-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/github-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/github-sign/index.html new file mode 100644 index 0000000..15fa951 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/github-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-github-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-github-sign + + · + Unicode: f092 · + Created: v1.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-github-sign +
    +
    +
    <i class="icon-github-sign"></i> icon-github-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/github/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/github/index.html new file mode 100644 index 0000000..102ce0f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/github/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-github: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-github + + · + Unicode: f09b · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-github +
    +
    +
    <i class="icon-github"></i> icon-github
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/gittip/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/gittip/index.html new file mode 100644 index 0000000..620da7f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/gittip/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-gittip: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-gittip + + · + Unicode: f184 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-gittip +
    +
    +
    <i class="icon-gittip"></i> icon-gittip
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/glass/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/glass/index.html new file mode 100644 index 0000000..b03e4d7 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/glass/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-glass: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-glass + + · + Unicode: f000 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-glass +
    +
    +
    <i class="icon-glass"></i> icon-glass
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/globe/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/globe/index.html new file mode 100644 index 0000000..4892bfe --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/globe/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-globe: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-globe + + · + Unicode: f0ac · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-globe +
    +
    +
    <i class="icon-globe"></i> icon-globe
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/google-plus-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/google-plus-sign/index.html new file mode 100644 index 0000000..f408840 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/google-plus-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-google-plus-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-google-plus-sign + + · + Unicode: f0d4 · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-google-plus-sign +
    +
    +
    <i class="icon-google-plus-sign"></i> icon-google-plus-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/google-plus/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/google-plus/index.html new file mode 100644 index 0000000..b274b77 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/google-plus/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-google-plus: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-google-plus + + · + Unicode: f0d5 · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-google-plus +
    +
    +
    <i class="icon-google-plus"></i> icon-google-plus
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/group/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/group/index.html new file mode 100644 index 0000000..27d3857 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/group/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-group: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-group + + · + Unicode: f0c0 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-group +
    +
    +
    <i class="icon-group"></i> icon-group
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/h-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/h-sign/index.html new file mode 100644 index 0000000..9bd171d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/h-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-h-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-h-sign + + · + Unicode: f0fd · + Created: v3.0 · + Categories: + + Medical Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-h-sign +
    +
    +
    <i class="icon-h-sign"></i> icon-h-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/hand-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/hand-down/index.html new file mode 100644 index 0000000..59b3355 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/hand-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-hand-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-hand-down + + · + Unicode: f0a7 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-hand-down +
    +
    +
    <i class="icon-hand-down"></i> icon-hand-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/hand-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/hand-left/index.html new file mode 100644 index 0000000..12d869c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/hand-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-hand-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-hand-left + + · + Unicode: f0a5 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-hand-left +
    +
    +
    <i class="icon-hand-left"></i> icon-hand-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/hand-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/hand-right/index.html new file mode 100644 index 0000000..e415175 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/hand-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-hand-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-hand-right + + · + Unicode: f0a4 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-hand-right +
    +
    +
    <i class="icon-hand-right"></i> icon-hand-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/hand-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/hand-up/index.html new file mode 100644 index 0000000..52f4c8f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/hand-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-hand-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-hand-up + + · + Unicode: f0a6 · + Created: v2.0 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-hand-up +
    +
    +
    <i class="icon-hand-up"></i> icon-hand-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/hdd/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/hdd/index.html new file mode 100644 index 0000000..5d9418d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/hdd/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-hdd: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-hdd + + · + Unicode: f0a0 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-hdd +
    +
    +
    <i class="icon-hdd"></i> icon-hdd
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/headphones/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/headphones/index.html new file mode 100644 index 0000000..643ba0c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/headphones/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-headphones: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-headphones + + · + Unicode: f025 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-headphones +
    +
    +
    <i class="icon-headphones"></i> icon-headphones
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/heart-empty/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/heart-empty/index.html new file mode 100644 index 0000000..4421a0c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/heart-empty/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-heart-empty: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-heart-empty + + · + Unicode: f08a · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-heart-empty +
    +
    +
    <i class="icon-heart-empty"></i> icon-heart-empty
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/heart/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/heart/index.html new file mode 100644 index 0000000..438b768 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/heart/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-heart: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-heart + + · + Unicode: f004 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-heart +
    +
    +
    <i class="icon-heart"></i> icon-heart
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/home/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/home/index.html new file mode 100644 index 0000000..28c9e50 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/home/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-home: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-home + + · + Unicode: f015 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-home +
    +
    +
    <i class="icon-home"></i> icon-home
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/hospital/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/hospital/index.html new file mode 100644 index 0000000..c349211 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/hospital/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-hospital: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-hospital + + · + Unicode: f0f8 · + Created: v3.0 · + Categories: + + Medical Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-hospital +
    +
    +
    <i class="icon-hospital"></i> icon-hospital
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/html5/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/html5/index.html new file mode 100644 index 0000000..0485a6d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/html5/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-html5: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-html5 + + · + Unicode: f13b · + Created: v3.1 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-html5 +
    +
    +
    <i class="icon-html5"></i> icon-html5
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/inbox/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/inbox/index.html new file mode 100644 index 0000000..77f22e6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/inbox/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-inbox: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-inbox + + · + Unicode: f01c · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-inbox +
    +
    +
    <i class="icon-inbox"></i> icon-inbox
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/indent-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/indent-left/index.html new file mode 100644 index 0000000..a464fef --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/indent-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-indent-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-indent-left + + · + Unicode: f03b · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-indent-left +
    +
    +
    <i class="icon-indent-left"></i> icon-indent-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/indent-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/indent-right/index.html new file mode 100644 index 0000000..1b09d48 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/indent-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-indent-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-indent-right + + · + Unicode: f03c · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-indent-right +
    +
    +
    <i class="icon-indent-right"></i> icon-indent-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/info-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/info-sign/index.html new file mode 100644 index 0000000..77d1039 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/info-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-info-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-info-sign + + · + Unicode: f05a · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-info-sign +
    +
    +
    <i class="icon-info-sign"></i> icon-info-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/info/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/info/index.html new file mode 100644 index 0000000..16cf35f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/info/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-info: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-info + + · + Unicode: f129 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-info +
    +
    +
    <i class="icon-info"></i> icon-info
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/inr/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/inr/index.html new file mode 100644 index 0000000..0282bbf --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/inr/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-inr: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-inr + + · + Unicode: f156 · + Created: v3.2 · + Categories: + + Currency Icons + + + + · Aliases: + + icon-rupee + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-inr +
    +
    +
    <i class="icon-inr"></i> icon-inr
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/instagram/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/instagram/index.html new file mode 100644 index 0000000..a6bc13e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/instagram/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-instagram: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-instagram + + · + Unicode: f16d · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-instagram +
    +
    +
    <i class="icon-instagram"></i> icon-instagram
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/italic/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/italic/index.html new file mode 100644 index 0000000..18695b5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/italic/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-italic: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-italic + + · + Unicode: f033 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-italic +
    +
    +
    <i class="icon-italic"></i> icon-italic
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/jpy/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/jpy/index.html new file mode 100644 index 0000000..e2a9a00 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/jpy/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-jpy: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-jpy + + · + Unicode: f157 · + Created: v3.2 · + Categories: + + Currency Icons + + + + · Aliases: + + icon-yen + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-jpy +
    +
    +
    <i class="icon-jpy"></i> icon-jpy
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/key/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/key/index.html new file mode 100644 index 0000000..7f66196 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/key/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-key: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-key + + · + Unicode: f084 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-key +
    +
    +
    <i class="icon-key"></i> icon-key
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/keyboard/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/keyboard/index.html new file mode 100644 index 0000000..6823e6e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/keyboard/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-keyboard: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-keyboard + + · + Unicode: f11c · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-keyboard +
    +
    +
    <i class="icon-keyboard"></i> icon-keyboard
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/krw/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/krw/index.html new file mode 100644 index 0000000..01ac367 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/krw/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-krw: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-krw + + · + Unicode: f159 · + Created: v3.2 · + Categories: + + Currency Icons + + + + · Aliases: + + icon-won + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-krw +
    +
    +
    <i class="icon-krw"></i> icon-krw
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/laptop/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/laptop/index.html new file mode 100644 index 0000000..d4d312f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/laptop/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-laptop: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-laptop + + · + Unicode: f109 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-laptop +
    +
    +
    <i class="icon-laptop"></i> icon-laptop
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/leaf/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/leaf/index.html new file mode 100644 index 0000000..63d7917 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/leaf/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-leaf: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-leaf + + · + Unicode: f06c · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-leaf +
    +
    +
    <i class="icon-leaf"></i> icon-leaf
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/legal/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/legal/index.html new file mode 100644 index 0000000..7d07b4f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/legal/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-legal: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-legal + + · + Unicode: f0e3 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-legal +
    +
    +
    <i class="icon-legal"></i> icon-legal
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/lemon/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/lemon/index.html new file mode 100644 index 0000000..203076f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/lemon/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-lemon: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-lemon + + · + Unicode: f094 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-lemon +
    +
    +
    <i class="icon-lemon"></i> icon-lemon
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/level-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/level-down/index.html new file mode 100644 index 0000000..89f85d3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/level-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-level-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-level-down + + · + Unicode: f149 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-level-down +
    +
    +
    <i class="icon-level-down"></i> icon-level-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/level-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/level-up/index.html new file mode 100644 index 0000000..9448afa --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/level-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-level-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-level-up + + · + Unicode: f148 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-level-up +
    +
    +
    <i class="icon-level-up"></i> icon-level-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/lightbulb/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/lightbulb/index.html new file mode 100644 index 0000000..a2be4e4 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/lightbulb/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-lightbulb: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-lightbulb + + · + Unicode: f0eb · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-lightbulb +
    +
    +
    <i class="icon-lightbulb"></i> icon-lightbulb
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/link/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/link/index.html new file mode 100644 index 0000000..9dc11e1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/link/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-link: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-link + + · + Unicode: f0c1 · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-link +
    +
    +
    <i class="icon-link"></i> icon-link
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/linkedin-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/linkedin-sign/index.html new file mode 100644 index 0000000..a19f146 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/linkedin-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-linkedin-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-linkedin-sign + + · + Unicode: f08c · + Created: v1.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-linkedin-sign +
    +
    +
    <i class="icon-linkedin-sign"></i> icon-linkedin-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/linkedin/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/linkedin/index.html new file mode 100644 index 0000000..6fc1228 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/linkedin/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-linkedin: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-linkedin + + · + Unicode: f0e1 · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-linkedin +
    +
    +
    <i class="icon-linkedin"></i> icon-linkedin
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/linux/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/linux/index.html new file mode 100644 index 0000000..983e10c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/linux/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-linux: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-linux + + · + Unicode: f17c · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-linux +
    +
    +
    <i class="icon-linux"></i> icon-linux
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/list-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/list-alt/index.html new file mode 100644 index 0000000..5a5fa66 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/list-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-list-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-list-alt + + · + Unicode: f022 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-list-alt +
    +
    +
    <i class="icon-list-alt"></i> icon-list-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/list-ol/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/list-ol/index.html new file mode 100644 index 0000000..f8d995c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/list-ol/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-list-ol: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-list-ol + + · + Unicode: f0cb · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-list-ol +
    +
    +
    <i class="icon-list-ol"></i> icon-list-ol
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/list-ul/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/list-ul/index.html new file mode 100644 index 0000000..1821665 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/list-ul/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-list-ul: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-list-ul + + · + Unicode: f0ca · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-list-ul +
    +
    +
    <i class="icon-list-ul"></i> icon-list-ul
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/list/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/list/index.html new file mode 100644 index 0000000..1a0207d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/list/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-list: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-list + + · + Unicode: f03a · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-list +
    +
    +
    <i class="icon-list"></i> icon-list
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/location-arrow/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/location-arrow/index.html new file mode 100644 index 0000000..a12c8c1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/location-arrow/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-location-arrow: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-location-arrow + + · + Unicode: f124 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-location-arrow +
    +
    +
    <i class="icon-location-arrow"></i> icon-location-arrow
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/lock/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/lock/index.html new file mode 100644 index 0000000..b0c06df --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/lock/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-lock: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-lock + + · + Unicode: f023 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-lock +
    +
    +
    <i class="icon-lock"></i> icon-lock
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-down/index.html new file mode 100644 index 0000000..4de7c40 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-long-arrow-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-long-arrow-down + + · + Unicode: f175 · + Created: v3.2 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-long-arrow-down +
    +
    +
    <i class="icon-long-arrow-down"></i> icon-long-arrow-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-left/index.html new file mode 100644 index 0000000..1b6d0ad --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-long-arrow-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-long-arrow-left + + · + Unicode: f177 · + Created: v3.2 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-long-arrow-left +
    +
    +
    <i class="icon-long-arrow-left"></i> icon-long-arrow-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-right/index.html new file mode 100644 index 0000000..0b57a2b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-long-arrow-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-long-arrow-right + + · + Unicode: f178 · + Created: v3.2 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-long-arrow-right +
    +
    +
    <i class="icon-long-arrow-right"></i> icon-long-arrow-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-up/index.html new file mode 100644 index 0000000..2a8e107 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/long-arrow-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-long-arrow-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-long-arrow-up + + · + Unicode: f176 · + Created: v3.2 · + Categories: + + Directional Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-long-arrow-up +
    +
    +
    <i class="icon-long-arrow-up"></i> icon-long-arrow-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/magic/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/magic/index.html new file mode 100644 index 0000000..b82bd18 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/magic/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-magic: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-magic + + · + Unicode: f0d0 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-magic +
    +
    +
    <i class="icon-magic"></i> icon-magic
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/magnet/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/magnet/index.html new file mode 100644 index 0000000..4efafbc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/magnet/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-magnet: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-magnet + + · + Unicode: f076 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-magnet +
    +
    +
    <i class="icon-magnet"></i> icon-magnet
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/mail-reply-all/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/mail-reply-all/index.html new file mode 100644 index 0000000..ed887be --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/mail-reply-all/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-mail-reply-all: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-mail-reply-all + + · + Unicode: f122 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-mail-reply-all +
    +
    +
    <i class="icon-mail-reply-all"></i> icon-mail-reply-all
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/male/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/male/index.html new file mode 100644 index 0000000..56397b4 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/male/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-male: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-male + + · + Unicode: f183 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-male +
    +
    +
    <i class="icon-male"></i> icon-male
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/map-marker/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/map-marker/index.html new file mode 100644 index 0000000..4f1c904 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/map-marker/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-map-marker: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-map-marker + + · + Unicode: f041 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-map-marker +
    +
    +
    <i class="icon-map-marker"></i> icon-map-marker
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/maxcdn/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/maxcdn/index.html new file mode 100644 index 0000000..77fe705 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/maxcdn/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-maxcdn: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-maxcdn + + · + Unicode: f136 · + Created: v3.1 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-maxcdn +
    +
    +
    <i class="icon-maxcdn"></i> icon-maxcdn
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/medkit/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/medkit/index.html new file mode 100644 index 0000000..0dc6de6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/medkit/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-medkit: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-medkit + + · + Unicode: f0fa · + Created: v3.0 · + Categories: + + Medical Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-medkit +
    +
    +
    <i class="icon-medkit"></i> icon-medkit
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/meh/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/meh/index.html new file mode 100644 index 0000000..b2da547 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/meh/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-meh: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-meh + + · + Unicode: f11a · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-meh +
    +
    +
    <i class="icon-meh"></i> icon-meh
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/microphone-off/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/microphone-off/index.html new file mode 100644 index 0000000..9f07f09 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/microphone-off/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-microphone-off: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-microphone-off + + · + Unicode: f131 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-microphone-off +
    +
    +
    <i class="icon-microphone-off"></i> icon-microphone-off
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/microphone/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/microphone/index.html new file mode 100644 index 0000000..194f14e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/microphone/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-microphone: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-microphone + + · + Unicode: f130 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-microphone +
    +
    +
    <i class="icon-microphone"></i> icon-microphone
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/minus-sign-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/minus-sign-alt/index.html new file mode 100644 index 0000000..c051cbb --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/minus-sign-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-minus-sign-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-minus-sign-alt + + · + Unicode: f146 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-minus-sign-alt +
    +
    +
    <i class="icon-minus-sign-alt"></i> icon-minus-sign-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/minus-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/minus-sign/index.html new file mode 100644 index 0000000..0e68e34 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/minus-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-minus-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-minus-sign + + · + Unicode: f056 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-minus-sign +
    +
    +
    <i class="icon-minus-sign"></i> icon-minus-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/minus/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/minus/index.html new file mode 100644 index 0000000..3b67868 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/minus/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-minus: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-minus + + · + Unicode: f068 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-minus +
    +
    +
    <i class="icon-minus"></i> icon-minus
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/mobile-phone/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/mobile-phone/index.html new file mode 100644 index 0000000..7df0447 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/mobile-phone/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-mobile-phone: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-mobile-phone + + · + Unicode: f10b · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-mobile-phone +
    +
    +
    <i class="icon-mobile-phone"></i> icon-mobile-phone
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/money/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/money/index.html new file mode 100644 index 0000000..034d080 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/money/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-money: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-money + + · + Unicode: f0d6 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-money +
    +
    +
    <i class="icon-money"></i> icon-money
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/moon/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/moon/index.html new file mode 100644 index 0000000..85484ff --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/moon/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-moon: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-moon + + · + Unicode: f186 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-moon +
    +
    +
    <i class="icon-moon"></i> icon-moon
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/move/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/move/index.html new file mode 100644 index 0000000..15b9dbf --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/move/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-move: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-move + + · + Unicode: f047 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-move +
    +
    +
    <i class="icon-move"></i> icon-move
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/music/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/music/index.html new file mode 100644 index 0000000..20b12e6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/music/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-music: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-music + + · + Unicode: f001 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-music +
    +
    +
    <i class="icon-music"></i> icon-music
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/off/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/off/index.html new file mode 100644 index 0000000..4c048fb --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/off/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-off: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-off + + · + Unicode: f011 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + · Aliases: + + icon-power-off + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-off +
    +
    +
    <i class="icon-off"></i> icon-off
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ok-circle/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ok-circle/index.html new file mode 100644 index 0000000..137d67f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ok-circle/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ok-circle: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ok-circle + + · + Unicode: f05d · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ok-circle +
    +
    +
    <i class="icon-ok-circle"></i> icon-ok-circle
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ok-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ok-sign/index.html new file mode 100644 index 0000000..b4ff3ab --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ok-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ok-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ok-sign + + · + Unicode: f058 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ok-sign +
    +
    +
    <i class="icon-ok-sign"></i> icon-ok-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ok/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ok/index.html new file mode 100644 index 0000000..8b52957 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ok/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ok: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ok + + · + Unicode: f00c · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ok +
    +
    +
    <i class="icon-ok"></i> icon-ok
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/paper-clip/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/paper-clip/index.html new file mode 100644 index 0000000..b1f37a7 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/paper-clip/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-paper-clip: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-paper-clip + + · + Unicode: f0c6 · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + · Aliases: + + icon-paperclip + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-paper-clip +
    +
    +
    <i class="icon-paper-clip"></i> icon-paper-clip
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/paste/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/paste/index.html new file mode 100644 index 0000000..5c6dd54 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/paste/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-paste: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-paste + + · + Unicode: f0ea · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-paste +
    +
    +
    <i class="icon-paste"></i> icon-paste
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/pause/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/pause/index.html new file mode 100644 index 0000000..74e629b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/pause/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-pause: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-pause + + · + Unicode: f04c · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-pause +
    +
    +
    <i class="icon-pause"></i> icon-pause
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/pencil/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/pencil/index.html new file mode 100644 index 0000000..fc624e0 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/pencil/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-pencil: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-pencil + + · + Unicode: f040 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-pencil +
    +
    +
    <i class="icon-pencil"></i> icon-pencil
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/phone-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/phone-sign/index.html new file mode 100644 index 0000000..a6020dc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/phone-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-phone-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-phone-sign + + · + Unicode: f098 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-phone-sign +
    +
    +
    <i class="icon-phone-sign"></i> icon-phone-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/phone/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/phone/index.html new file mode 100644 index 0000000..f6195d2 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/phone/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-phone: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-phone + + · + Unicode: f095 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-phone +
    +
    +
    <i class="icon-phone"></i> icon-phone
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/picture/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/picture/index.html new file mode 100644 index 0000000..0de34f3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/picture/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-picture: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-picture + + · + Unicode: f03e · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-picture +
    +
    +
    <i class="icon-picture"></i> icon-picture
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/pinterest-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/pinterest-sign/index.html new file mode 100644 index 0000000..699330e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/pinterest-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-pinterest-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-pinterest-sign + + · + Unicode: f0d3 · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-pinterest-sign +
    +
    +
    <i class="icon-pinterest-sign"></i> icon-pinterest-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/pinterest/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/pinterest/index.html new file mode 100644 index 0000000..89b5ddf --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/pinterest/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-pinterest: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-pinterest + + · + Unicode: f0d2 · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-pinterest +
    +
    +
    <i class="icon-pinterest"></i> icon-pinterest
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/plane/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/plane/index.html new file mode 100644 index 0000000..5f2c97b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/plane/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-plane: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-plane + + · + Unicode: f072 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-plane +
    +
    +
    <i class="icon-plane"></i> icon-plane
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/play-circle/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/play-circle/index.html new file mode 100644 index 0000000..1a2d2ef --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/play-circle/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-play-circle: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-play-circle + + · + Unicode: f01d · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-play-circle +
    +
    +
    <i class="icon-play-circle"></i> icon-play-circle
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/play-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/play-sign/index.html new file mode 100644 index 0000000..fcaf5e9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/play-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-play-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-play-sign + + · + Unicode: f144 · + Created: v3.1 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-play-sign +
    +
    +
    <i class="icon-play-sign"></i> icon-play-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/play/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/play/index.html new file mode 100644 index 0000000..79d1407 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/play/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-play: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-play + + · + Unicode: f04b · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-play +
    +
    +
    <i class="icon-play"></i> icon-play
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/plus-sign-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/plus-sign-alt/index.html new file mode 100644 index 0000000..7a06b3f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/plus-sign-alt/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + icon-plus-sign-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-plus-sign-alt + + · + Unicode: f0fe · + Created: v3.0 · + Categories: + + Medical Icons, + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-plus-sign-alt +
    +
    +
    <i class="icon-plus-sign-alt"></i> icon-plus-sign-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/plus-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/plus-sign/index.html new file mode 100644 index 0000000..83dcde5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/plus-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-plus-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-plus-sign + + · + Unicode: f055 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-plus-sign +
    +
    +
    <i class="icon-plus-sign"></i> icon-plus-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/plus/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/plus/index.html new file mode 100644 index 0000000..13f2b25 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/plus/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-plus: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-plus + + · + Unicode: f067 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-plus +
    +
    +
    <i class="icon-plus"></i> icon-plus
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/print/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/print/index.html new file mode 100644 index 0000000..32740b8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/print/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-print: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-print + + · + Unicode: f02f · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-print +
    +
    +
    <i class="icon-print"></i> icon-print
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/pushpin/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/pushpin/index.html new file mode 100644 index 0000000..7605899 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/pushpin/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-pushpin: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-pushpin + + · + Unicode: f08d · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-pushpin +
    +
    +
    <i class="icon-pushpin"></i> icon-pushpin
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/puzzle-piece/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/puzzle-piece/index.html new file mode 100644 index 0000000..b0dd142 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/puzzle-piece/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-puzzle-piece: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-puzzle-piece + + · + Unicode: f12e · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-puzzle-piece +
    +
    +
    <i class="icon-puzzle-piece"></i> icon-puzzle-piece
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/qrcode/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/qrcode/index.html new file mode 100644 index 0000000..e3f6ed9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/qrcode/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-qrcode: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-qrcode + + · + Unicode: f029 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-qrcode +
    +
    +
    <i class="icon-qrcode"></i> icon-qrcode
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/question-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/question-sign/index.html new file mode 100644 index 0000000..2f36afd --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/question-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-question-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-question-sign + + · + Unicode: f059 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-question-sign +
    +
    +
    <i class="icon-question-sign"></i> icon-question-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/question/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/question/index.html new file mode 100644 index 0000000..45b2e29 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/question/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-question: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-question + + · + Unicode: f128 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-question +
    +
    +
    <i class="icon-question"></i> icon-question
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/quote-left/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/quote-left/index.html new file mode 100644 index 0000000..e3c3f20 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/quote-left/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-quote-left: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-quote-left + + · + Unicode: f10d · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-quote-left +
    +
    +
    <i class="icon-quote-left"></i> icon-quote-left
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/quote-right/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/quote-right/index.html new file mode 100644 index 0000000..c3f4d8e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/quote-right/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-quote-right: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-quote-right + + · + Unicode: f10e · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-quote-right +
    +
    +
    <i class="icon-quote-right"></i> icon-quote-right
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/random/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/random/index.html new file mode 100644 index 0000000..0d20d95 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/random/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-random: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-random + + · + Unicode: f074 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-random +
    +
    +
    <i class="icon-random"></i> icon-random
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/refresh/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/refresh/index.html new file mode 100644 index 0000000..2b21bd5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/refresh/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-refresh: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-refresh + + · + Unicode: f021 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-refresh +
    +
    +
    <i class="icon-refresh"></i> icon-refresh
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/remove-circle/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/remove-circle/index.html new file mode 100644 index 0000000..d0bfb32 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/remove-circle/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-remove-circle: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-remove-circle + + · + Unicode: f05c · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-remove-circle +
    +
    +
    <i class="icon-remove-circle"></i> icon-remove-circle
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/remove-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/remove-sign/index.html new file mode 100644 index 0000000..a958c99 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/remove-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-remove-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-remove-sign + + · + Unicode: f057 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-remove-sign +
    +
    +
    <i class="icon-remove-sign"></i> icon-remove-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/remove/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/remove/index.html new file mode 100644 index 0000000..fc6cd3d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/remove/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-remove: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-remove + + · + Unicode: f00d · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-remove +
    +
    +
    <i class="icon-remove"></i> icon-remove
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/renren/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/renren/index.html new file mode 100644 index 0000000..e77e2fe --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/renren/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-renren: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-renren + + · + Unicode: f18b · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-renren +
    +
    +
    <i class="icon-renren"></i> icon-renren
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/reorder/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/reorder/index.html new file mode 100644 index 0000000..5ec2925 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/reorder/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-reorder: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-reorder + + · + Unicode: f0c9 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-reorder +
    +
    +
    <i class="icon-reorder"></i> icon-reorder
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/repeat/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/repeat/index.html new file mode 100644 index 0000000..1f32a24 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/repeat/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-repeat: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-repeat + + · + Unicode: f01e · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + · Aliases: + + icon-rotate-right + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-repeat +
    +
    +
    <i class="icon-repeat"></i> icon-repeat
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/reply-all/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/reply-all/index.html new file mode 100644 index 0000000..c7da496 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/reply-all/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-reply-all: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-reply-all + + · + Unicode: f122 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-reply-all +
    +
    +
    <i class="icon-reply-all"></i> icon-reply-all
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/reply/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/reply/index.html new file mode 100644 index 0000000..d8dff55 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/reply/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-reply: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-reply + + · + Unicode: f112 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + · Aliases: + + icon-mail-reply + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-reply +
    +
    +
    <i class="icon-reply"></i> icon-reply
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/resize-full/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/resize-full/index.html new file mode 100644 index 0000000..d228578 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/resize-full/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-resize-full: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-resize-full + + · + Unicode: f065 · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-resize-full +
    +
    +
    <i class="icon-resize-full"></i> icon-resize-full
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/resize-horizontal/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/resize-horizontal/index.html new file mode 100644 index 0000000..1c0de39 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/resize-horizontal/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-resize-horizontal: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-resize-horizontal + + · + Unicode: f07e · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-resize-horizontal +
    +
    +
    <i class="icon-resize-horizontal"></i> icon-resize-horizontal
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/resize-small/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/resize-small/index.html new file mode 100644 index 0000000..728efe3 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/resize-small/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-resize-small: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-resize-small + + · + Unicode: f066 · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-resize-small +
    +
    +
    <i class="icon-resize-small"></i> icon-resize-small
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/resize-vertical/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/resize-vertical/index.html new file mode 100644 index 0000000..dcc9e3f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/resize-vertical/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-resize-vertical: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-resize-vertical + + · + Unicode: f07d · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-resize-vertical +
    +
    +
    <i class="icon-resize-vertical"></i> icon-resize-vertical
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/retweet/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/retweet/index.html new file mode 100644 index 0000000..3e4eebd --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/retweet/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-retweet: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-retweet + + · + Unicode: f079 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-retweet +
    +
    +
    <i class="icon-retweet"></i> icon-retweet
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/road/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/road/index.html new file mode 100644 index 0000000..f5d1735 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/road/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-road: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-road + + · + Unicode: f018 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-road +
    +
    +
    <i class="icon-road"></i> icon-road
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/rocket/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/rocket/index.html new file mode 100644 index 0000000..cfbb04a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/rocket/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-rocket: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-rocket + + · + Unicode: f135 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-rocket +
    +
    +
    <i class="icon-rocket"></i> icon-rocket
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/rss-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/rss-sign/index.html new file mode 100644 index 0000000..4babe0a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/rss-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-rss-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-rss-sign + + · + Unicode: f143 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-rss-sign +
    +
    +
    <i class="icon-rss-sign"></i> icon-rss-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/rss/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/rss/index.html new file mode 100644 index 0000000..86404f5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/rss/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-rss: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-rss + + · + Unicode: f09e · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-rss +
    +
    +
    <i class="icon-rss"></i> icon-rss
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/save/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/save/index.html new file mode 100644 index 0000000..2763b39 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/save/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-save: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-save + + · + Unicode: f0c7 · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-save +
    +
    +
    <i class="icon-save"></i> icon-save
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/screenshot/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/screenshot/index.html new file mode 100644 index 0000000..9daf41a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/screenshot/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-screenshot: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-screenshot + + · + Unicode: f05b · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-screenshot +
    +
    +
    <i class="icon-screenshot"></i> icon-screenshot
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/search/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/search/index.html new file mode 100644 index 0000000..dfe279a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/search/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-search: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-search + + · + Unicode: f002 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-search +
    +
    +
    <i class="icon-search"></i> icon-search
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/share-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/share-alt/index.html new file mode 100644 index 0000000..7126edd --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/share-alt/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-share-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-share-alt + + · + Unicode: f064 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + · Aliases: + + icon-mail-forward + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-share-alt +
    +
    +
    <i class="icon-share-alt"></i> icon-share-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/share-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/share-sign/index.html new file mode 100644 index 0000000..901169d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/share-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-share-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-share-sign + + · + Unicode: f14d · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-share-sign +
    +
    +
    <i class="icon-share-sign"></i> icon-share-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/share/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/share/index.html new file mode 100644 index 0000000..310604d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/share/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-share: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-share + + · + Unicode: f045 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-share +
    +
    +
    <i class="icon-share"></i> icon-share
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/shield/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/shield/index.html new file mode 100644 index 0000000..f5e38a5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/shield/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-shield: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-shield + + · + Unicode: f132 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-shield +
    +
    +
    <i class="icon-shield"></i> icon-shield
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/shopping-cart/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/shopping-cart/index.html new file mode 100644 index 0000000..e13eb4a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/shopping-cart/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-shopping-cart: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-shopping-cart + + · + Unicode: f07a · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-shopping-cart +
    +
    +
    <i class="icon-shopping-cart"></i> icon-shopping-cart
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sign-blank/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sign-blank/index.html new file mode 100644 index 0000000..578b735 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sign-blank/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sign-blank: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sign-blank + + · + Unicode: f0c8 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sign-blank +
    +
    +
    <i class="icon-sign-blank"></i> icon-sign-blank
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/signal/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/signal/index.html new file mode 100644 index 0000000..cb7688c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/signal/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-signal: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-signal + + · + Unicode: f012 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-signal +
    +
    +
    <i class="icon-signal"></i> icon-signal
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/signin/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/signin/index.html new file mode 100644 index 0000000..44d7f6d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/signin/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-signin: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-signin + + · + Unicode: f090 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-signin +
    +
    +
    <i class="icon-signin"></i> icon-signin
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/signout/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/signout/index.html new file mode 100644 index 0000000..c6b8dca --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/signout/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-signout: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-signout + + · + Unicode: f08b · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-signout +
    +
    +
    <i class="icon-signout"></i> icon-signout
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sitemap/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sitemap/index.html new file mode 100644 index 0000000..297b3bf --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sitemap/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sitemap: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sitemap + + · + Unicode: f0e8 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sitemap +
    +
    +
    <i class="icon-sitemap"></i> icon-sitemap
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/skype/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/skype/index.html new file mode 100644 index 0000000..857fbc9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/skype/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-skype: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-skype + + · + Unicode: f17e · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-skype +
    +
    +
    <i class="icon-skype"></i> icon-skype
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/smile/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/smile/index.html new file mode 100644 index 0000000..9ba2550 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/smile/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-smile: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-smile + + · + Unicode: f118 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-smile +
    +
    +
    <i class="icon-smile"></i> icon-smile
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-alphabet-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-alphabet-alt/index.html new file mode 100644 index 0000000..ada4c5f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-alphabet-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-by-alphabet-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-by-alphabet-alt + + · + Unicode: f15e · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-by-alphabet-alt +
    +
    +
    <i class="icon-sort-by-alphabet-alt"></i> icon-sort-by-alphabet-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-alphabet/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-alphabet/index.html new file mode 100644 index 0000000..714f9f1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-alphabet/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-by-alphabet: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-by-alphabet + + · + Unicode: f15d · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-by-alphabet +
    +
    +
    <i class="icon-sort-by-alphabet"></i> icon-sort-by-alphabet
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-attributes-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-attributes-alt/index.html new file mode 100644 index 0000000..58bc154 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-attributes-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-by-attributes-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-by-attributes-alt + + · + Unicode: f161 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-by-attributes-alt +
    +
    +
    <i class="icon-sort-by-attributes-alt"></i> icon-sort-by-attributes-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-attributes/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-attributes/index.html new file mode 100644 index 0000000..298d22e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-attributes/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-by-attributes: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-by-attributes + + · + Unicode: f160 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-by-attributes +
    +
    +
    <i class="icon-sort-by-attributes"></i> icon-sort-by-attributes
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-order-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-order-alt/index.html new file mode 100644 index 0000000..01ff453 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-order-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-by-order-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-by-order-alt + + · + Unicode: f163 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-by-order-alt +
    +
    +
    <i class="icon-sort-by-order-alt"></i> icon-sort-by-order-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-order/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-order/index.html new file mode 100644 index 0000000..5f03df8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-by-order/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-by-order: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-by-order + + · + Unicode: f162 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-by-order +
    +
    +
    <i class="icon-sort-by-order"></i> icon-sort-by-order
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-down/index.html new file mode 100644 index 0000000..cb848f9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-down + + · + Unicode: f0dd · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-down +
    +
    +
    <i class="icon-sort-down"></i> icon-sort-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort-up/index.html new file mode 100644 index 0000000..241bbc2 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort-up + + · + Unicode: f0de · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort-up +
    +
    +
    <i class="icon-sort-up"></i> icon-sort-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sort/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sort/index.html new file mode 100644 index 0000000..566ee70 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sort/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sort: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sort + + · + Unicode: f0dc · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sort +
    +
    +
    <i class="icon-sort"></i> icon-sort
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/spinner/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/spinner/index.html new file mode 100644 index 0000000..2cf9147 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/spinner/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-spinner: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-spinner + + · + Unicode: f110 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-spinner +
    +
    +
    <i class="icon-spinner"></i> icon-spinner
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/stackexchange/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/stackexchange/index.html new file mode 100644 index 0000000..3e2598b --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/stackexchange/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-stackexchange: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-stackexchange + + · + Unicode: f16c · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-stackexchange +
    +
    +
    <i class="icon-stackexchange"></i> icon-stackexchange
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/star-empty/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/star-empty/index.html new file mode 100644 index 0000000..ca43857 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/star-empty/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-star-empty: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-star-empty + + · + Unicode: f006 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-star-empty +
    +
    +
    <i class="icon-star-empty"></i> icon-star-empty
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/star-half-empty/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/star-half-empty/index.html new file mode 100644 index 0000000..47bd07a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/star-half-empty/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-star-half-empty: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-star-half-empty + + · + Unicode: f123 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + · Aliases: + + icon-star-half-full + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-star-half-empty +
    +
    +
    <i class="icon-star-half-empty"></i> icon-star-half-empty
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/star-half/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/star-half/index.html new file mode 100644 index 0000000..efd0ac1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/star-half/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-star-half: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-star-half + + · + Unicode: f089 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-star-half +
    +
    +
    <i class="icon-star-half"></i> icon-star-half
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/star/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/star/index.html new file mode 100644 index 0000000..e61f90c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/star/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-star: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-star + + · + Unicode: f005 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-star +
    +
    +
    <i class="icon-star"></i> icon-star
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/step-backward/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/step-backward/index.html new file mode 100644 index 0000000..578fd70 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/step-backward/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-step-backward: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-step-backward + + · + Unicode: f048 · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-step-backward +
    +
    +
    <i class="icon-step-backward"></i> icon-step-backward
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/step-forward/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/step-forward/index.html new file mode 100644 index 0000000..cce1bd4 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/step-forward/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-step-forward: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-step-forward + + · + Unicode: f051 · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-step-forward +
    +
    +
    <i class="icon-step-forward"></i> icon-step-forward
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/stethoscope/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/stethoscope/index.html new file mode 100644 index 0000000..86c1527 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/stethoscope/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-stethoscope: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-stethoscope + + · + Unicode: f0f1 · + Created: v3.0 · + Categories: + + Medical Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-stethoscope +
    +
    +
    <i class="icon-stethoscope"></i> icon-stethoscope
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/stop/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/stop/index.html new file mode 100644 index 0000000..6de8657 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/stop/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-stop: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-stop + + · + Unicode: f04d · + Created: v1.0 · + Categories: + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-stop +
    +
    +
    <i class="icon-stop"></i> icon-stop
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/strikethrough/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/strikethrough/index.html new file mode 100644 index 0000000..368d804 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/strikethrough/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-strikethrough: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-strikethrough + + · + Unicode: f0cc · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-strikethrough +
    +
    +
    <i class="icon-strikethrough"></i> icon-strikethrough
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/subscript/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/subscript/index.html new file mode 100644 index 0000000..1310be1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/subscript/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-subscript: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-subscript + + · + Unicode: f12c · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-subscript +
    +
    +
    <i class="icon-subscript"></i> icon-subscript
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/suitcase/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/suitcase/index.html new file mode 100644 index 0000000..320ecf8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/suitcase/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-suitcase: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-suitcase + + · + Unicode: f0f2 · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-suitcase +
    +
    +
    <i class="icon-suitcase"></i> icon-suitcase
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/sun/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/sun/index.html new file mode 100644 index 0000000..dc53ca9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/sun/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-sun: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-sun + + · + Unicode: f185 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-sun +
    +
    +
    <i class="icon-sun"></i> icon-sun
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/superscript/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/superscript/index.html new file mode 100644 index 0000000..69b333d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/superscript/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-superscript: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-superscript + + · + Unicode: f12b · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-superscript +
    +
    +
    <i class="icon-superscript"></i> icon-superscript
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/table/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/table/index.html new file mode 100644 index 0000000..86b2ad1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/table/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-table: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-table + + · + Unicode: f0ce · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-table +
    +
    +
    <i class="icon-table"></i> icon-table
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/tablet/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/tablet/index.html new file mode 100644 index 0000000..529db7a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/tablet/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-tablet: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-tablet + + · + Unicode: f10a · + Created: v3.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-tablet +
    +
    +
    <i class="icon-tablet"></i> icon-tablet
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/tag/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/tag/index.html new file mode 100644 index 0000000..dc823f6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/tag/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-tag: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-tag + + · + Unicode: f02b · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-tag +
    +
    +
    <i class="icon-tag"></i> icon-tag
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/tags/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/tags/index.html new file mode 100644 index 0000000..9d5f0b6 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/tags/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-tags: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-tags + + · + Unicode: f02c · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-tags +
    +
    +
    <i class="icon-tags"></i> icon-tags
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/tasks/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/tasks/index.html new file mode 100644 index 0000000..5c232bd --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/tasks/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-tasks: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-tasks + + · + Unicode: f0ae · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-tasks +
    +
    +
    <i class="icon-tasks"></i> icon-tasks
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/terminal/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/terminal/index.html new file mode 100644 index 0000000..b608e3f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/terminal/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-terminal: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-terminal + + · + Unicode: f120 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-terminal +
    +
    +
    <i class="icon-terminal"></i> icon-terminal
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/text-height/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/text-height/index.html new file mode 100644 index 0000000..3d7ccde --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/text-height/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-text-height: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-text-height + + · + Unicode: f034 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-text-height +
    +
    +
    <i class="icon-text-height"></i> icon-text-height
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/text-width/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/text-width/index.html new file mode 100644 index 0000000..8a84f94 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/text-width/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-text-width: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-text-width + + · + Unicode: f035 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-text-width +
    +
    +
    <i class="icon-text-width"></i> icon-text-width
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/th-large/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/th-large/index.html new file mode 100644 index 0000000..7eada00 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/th-large/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-th-large: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-th-large + + · + Unicode: f009 · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-th-large +
    +
    +
    <i class="icon-th-large"></i> icon-th-large
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/th-list/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/th-list/index.html new file mode 100644 index 0000000..67fd825 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/th-list/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-th-list: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-th-list + + · + Unicode: f00b · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-th-list +
    +
    +
    <i class="icon-th-list"></i> icon-th-list
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/th/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/th/index.html new file mode 100644 index 0000000..dd086a9 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/th/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-th: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-th + + · + Unicode: f00a · + Created: v1.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-th +
    +
    +
    <i class="icon-th"></i> icon-th
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-down-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-down-alt/index.html new file mode 100644 index 0000000..42b382d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-down-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-thumbs-down-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-thumbs-down-alt + + · + Unicode: f088 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-thumbs-down-alt +
    +
    +
    <i class="icon-thumbs-down-alt"></i> icon-thumbs-down-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-down/index.html new file mode 100644 index 0000000..401c918 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-thumbs-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-thumbs-down + + · + Unicode: f165 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-thumbs-down +
    +
    +
    <i class="icon-thumbs-down"></i> icon-thumbs-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-up-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-up-alt/index.html new file mode 100644 index 0000000..eeacb9e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-up-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-thumbs-up-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-thumbs-up-alt + + · + Unicode: f087 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-thumbs-up-alt +
    +
    +
    <i class="icon-thumbs-up-alt"></i> icon-thumbs-up-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-up/index.html new file mode 100644 index 0000000..7c9fefe --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/thumbs-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-thumbs-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-thumbs-up + + · + Unicode: f164 · + Created: v3.2 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-thumbs-up +
    +
    +
    <i class="icon-thumbs-up"></i> icon-thumbs-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/ticket/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/ticket/index.html new file mode 100644 index 0000000..333f55c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/ticket/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-ticket: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-ticket + + · + Unicode: f145 · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-ticket +
    +
    +
    <i class="icon-ticket"></i> icon-ticket
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/time/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/time/index.html new file mode 100644 index 0000000..af36297 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/time/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-time: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-time + + · + Unicode: f017 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-time +
    +
    +
    <i class="icon-time"></i> icon-time
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/tint/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/tint/index.html new file mode 100644 index 0000000..fb7a375 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/tint/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-tint: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-tint + + · + Unicode: f043 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-tint +
    +
    +
    <i class="icon-tint"></i> icon-tint
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/trash/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/trash/index.html new file mode 100644 index 0000000..58c9bb7 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/trash/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-trash: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-trash + + · + Unicode: f014 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-trash +
    +
    +
    <i class="icon-trash"></i> icon-trash
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/trello/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/trello/index.html new file mode 100644 index 0000000..0f3498d --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/trello/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-trello: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-trello + + · + Unicode: f181 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-trello +
    +
    +
    <i class="icon-trello"></i> icon-trello
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/trophy/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/trophy/index.html new file mode 100644 index 0000000..ecdd6ea --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/trophy/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-trophy: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-trophy + + · + Unicode: f091 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-trophy +
    +
    +
    <i class="icon-trophy"></i> icon-trophy
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/truck/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/truck/index.html new file mode 100644 index 0000000..158dc47 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/truck/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-truck: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-truck + + · + Unicode: f0d1 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-truck +
    +
    +
    <i class="icon-truck"></i> icon-truck
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/tumblr-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/tumblr-sign/index.html new file mode 100644 index 0000000..2149ee5 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/tumblr-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-tumblr-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-tumblr-sign + + · + Unicode: f174 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-tumblr-sign +
    +
    +
    <i class="icon-tumblr-sign"></i> icon-tumblr-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/tumblr/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/tumblr/index.html new file mode 100644 index 0000000..276c513 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/tumblr/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-tumblr: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-tumblr + + · + Unicode: f173 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-tumblr +
    +
    +
    <i class="icon-tumblr"></i> icon-tumblr
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/twitter-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/twitter-sign/index.html new file mode 100644 index 0000000..efdf8ef --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/twitter-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-twitter-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-twitter-sign + + · + Unicode: f081 · + Created: v1.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-twitter-sign +
    +
    +
    <i class="icon-twitter-sign"></i> icon-twitter-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/twitter/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/twitter/index.html new file mode 100644 index 0000000..d07d9b1 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/twitter/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-twitter: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-twitter + + · + Unicode: f099 · + Created: v2.0 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-twitter +
    +
    +
    <i class="icon-twitter"></i> icon-twitter
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/umbrella/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/umbrella/index.html new file mode 100644 index 0000000..9c54399 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/umbrella/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-umbrella: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-umbrella + + · + Unicode: f0e9 · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-umbrella +
    +
    +
    <i class="icon-umbrella"></i> icon-umbrella
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/underline/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/underline/index.html new file mode 100644 index 0000000..3128eb4 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/underline/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-underline: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-underline + + · + Unicode: f0cd · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-underline +
    +
    +
    <i class="icon-underline"></i> icon-underline
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/undo/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/undo/index.html new file mode 100644 index 0000000..59e600c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/undo/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-undo: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-undo + + · + Unicode: f0e2 · + Created: v2.0 · + Categories: + + Text Editor Icons + + + + · Aliases: + + icon-rotate-left + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-undo +
    +
    +
    <i class="icon-undo"></i> icon-undo
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/unlink/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/unlink/index.html new file mode 100644 index 0000000..9cb39dc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/unlink/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-unlink: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-unlink + + · + Unicode: f127 · + Created: v3.1 · + Categories: + + Text Editor Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-unlink +
    +
    +
    <i class="icon-unlink"></i> icon-unlink
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/unlock-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/unlock-alt/index.html new file mode 100644 index 0000000..b37ae71 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/unlock-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-unlock-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-unlock-alt + + · + Unicode: f13e · + Created: v3.1 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-unlock-alt +
    +
    +
    <i class="icon-unlock-alt"></i> icon-unlock-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/unlock/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/unlock/index.html new file mode 100644 index 0000000..0436dc0 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/unlock/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-unlock: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-unlock + + · + Unicode: f09c · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-unlock +
    +
    +
    <i class="icon-unlock"></i> icon-unlock
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/upload-alt/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/upload-alt/index.html new file mode 100644 index 0000000..321de9e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/upload-alt/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-upload-alt: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-upload-alt + + · + Unicode: f093 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-upload-alt +
    +
    +
    <i class="icon-upload-alt"></i> icon-upload-alt
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/upload/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/upload/index.html new file mode 100644 index 0000000..1a49e78 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/upload/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-upload: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-upload + + · + Unicode: f01b · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-upload +
    +
    +
    <i class="icon-upload"></i> icon-upload
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/usd/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/usd/index.html new file mode 100644 index 0000000..36eb1da --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/usd/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + icon-usd: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-usd + + · + Unicode: f155 · + Created: v3.2 · + Categories: + + Currency Icons + + + + · Aliases: + + icon-dollar + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-usd +
    +
    +
    <i class="icon-usd"></i> icon-usd
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/user-md/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/user-md/index.html new file mode 100644 index 0000000..e8850dc --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/user-md/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-user-md: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-user-md + + · + Unicode: f0f0 · + Created: v2.0 · + Categories: + + Medical Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-user-md +
    +
    +
    <i class="icon-user-md"></i> icon-user-md
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/user/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/user/index.html new file mode 100644 index 0000000..4fe72a2 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/user/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-user: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-user + + · + Unicode: f007 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-user +
    +
    +
    <i class="icon-user"></i> icon-user
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/vk/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/vk/index.html new file mode 100644 index 0000000..3c8f4e8 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/vk/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-vk: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-vk + + · + Unicode: f189 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-vk +
    +
    +
    <i class="icon-vk"></i> icon-vk
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/volume-down/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/volume-down/index.html new file mode 100644 index 0000000..8c538de --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/volume-down/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-volume-down: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-volume-down + + · + Unicode: f027 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-volume-down +
    +
    +
    <i class="icon-volume-down"></i> icon-volume-down
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/volume-off/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/volume-off/index.html new file mode 100644 index 0000000..f00e216 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/volume-off/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-volume-off: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-volume-off + + · + Unicode: f026 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-volume-off +
    +
    +
    <i class="icon-volume-off"></i> icon-volume-off
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/volume-up/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/volume-up/index.html new file mode 100644 index 0000000..8157edd --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/volume-up/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-volume-up: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-volume-up + + · + Unicode: f028 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-volume-up +
    +
    +
    <i class="icon-volume-up"></i> icon-volume-up
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/warning-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/warning-sign/index.html new file mode 100644 index 0000000..31cd8ee --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/warning-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-warning-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-warning-sign + + · + Unicode: f071 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-warning-sign +
    +
    +
    <i class="icon-warning-sign"></i> icon-warning-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/weibo/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/weibo/index.html new file mode 100644 index 0000000..f76ed2a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/weibo/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-weibo: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-weibo + + · + Unicode: f18a · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-weibo +
    +
    +
    <i class="icon-weibo"></i> icon-weibo
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/windows/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/windows/index.html new file mode 100644 index 0000000..7513f5a --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/windows/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-windows: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-windows + + · + Unicode: f17a · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-windows +
    +
    +
    <i class="icon-windows"></i> icon-windows
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/wrench/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/wrench/index.html new file mode 100644 index 0000000..6562caa --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/wrench/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-wrench: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-wrench + + · + Unicode: f0ad · + Created: v2.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-wrench +
    +
    +
    <i class="icon-wrench"></i> icon-wrench
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/xing-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/xing-sign/index.html new file mode 100644 index 0000000..b2f482f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/xing-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-xing-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-xing-sign + + · + Unicode: f169 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-xing-sign +
    +
    +
    <i class="icon-xing-sign"></i> icon-xing-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/xing/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/xing/index.html new file mode 100644 index 0000000..68aa153 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/xing/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-xing: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-xing + + · + Unicode: f168 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-xing +
    +
    +
    <i class="icon-xing"></i> icon-xing
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/youtube-play/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/youtube-play/index.html new file mode 100644 index 0000000..60874dd --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/youtube-play/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + icon-youtube-play: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-youtube-play + + · + Unicode: f16a · + Created: v3.2 · + Categories: + + Brand Icons, + + Video Player Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-youtube-play +
    +
    +
    <i class="icon-youtube-play"></i> icon-youtube-play
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/youtube-sign/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/youtube-sign/index.html new file mode 100644 index 0000000..fe6f624 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/youtube-sign/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-youtube-sign: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-youtube-sign + + · + Unicode: f166 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-youtube-sign +
    +
    +
    <i class="icon-youtube-sign"></i> icon-youtube-sign
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/youtube/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/youtube/index.html new file mode 100644 index 0000000..51ec01c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/youtube/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-youtube: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-youtube + + · + Unicode: f167 · + Created: v3.2 · + Categories: + + Brand Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-youtube +
    +
    +
    <i class="icon-youtube"></i> icon-youtube
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/zoom-in/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/zoom-in/index.html new file mode 100644 index 0000000..294842c --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/zoom-in/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-zoom-in: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-zoom-in + + · + Unicode: f00e · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-zoom-in +
    +
    +
    <i class="icon-zoom-in"></i> icon-zoom-in
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icon/zoom-out/index.html b/app/bower_components/font-awesome/src/3.2.1/icon/zoom-out/index.html new file mode 100644 index 0000000..2f1f188 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icon/zoom-out/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + icon-zoom-out: Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +    + +    +    +    +   + + +
    +

    + icon-zoom-out + + · + Unicode: f010 · + Created: v1.0 · + Categories: + + Web Application Icons + + + + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + icon-zoom-out +
    +
    +
    <i class="icon-zoom-out"></i> icon-zoom-out
    +
    +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/icons.yml b/app/bower_components/font-awesome/src/3.2.1/icons.yml new file mode 100755 index 0000000..c3c8f53 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icons.yml @@ -0,0 +1,2590 @@ +icons: + - name: Glass + id: glass + unicode: f000 + created: 1.0 + categories: + - Web Application Icons + + - name: Music + id: music + unicode: f001 + created: 1.0 + categories: + - Web Application Icons + + - name: Search + id: search + unicode: f002 + created: 1.0 + categories: + - Web Application Icons + + - name: Envelope Alt + id: envelope-alt + unicode: f003 + created: 1.0 + categories: + - Web Application Icons + + - name: Heart + id: heart + unicode: f004 + created: 1.0 + categories: + - Web Application Icons + + - name: Star + id: star + unicode: f005 + created: 1.0 + categories: + - Web Application Icons + + - name: Star Empty + id: star-empty + unicode: f006 + created: 1.0 + categories: + - Web Application Icons + + - name: User + id: user + unicode: f007 + created: 1.0 + categories: + - Web Application Icons + + - name: Film + id: film + unicode: f008 + created: 1.0 + categories: + - Web Application Icons + + - name: th-large + id: th-large + unicode: f009 + created: 1.0 + categories: + - Text Editor Icons + + - name: th + id: th + unicode: f00a + created: 1.0 + categories: + - Text Editor Icons + + - name: th-list + id: th-list + unicode: f00b + created: 1.0 + categories: + - Text Editor Icons + + - name: OK + id: ok + unicode: f00c + created: 1.0 + categories: + - Web Application Icons + + - name: Remove + id: remove + unicode: f00d + created: 1.0 + categories: + - Web Application Icons + + - name: Zoom In + id: zoom-in + unicode: f00e + created: 1.0 + categories: + - Web Application Icons + + + - name: Zoom Out + id: zoom-out + unicode: f010 + created: 1.0 + categories: + - Web Application Icons + + - name: Off + id: 'off' + unicode: f011 + created: 1.0 + aliases: + - power-off + categories: + - Web Application Icons + + - name: signal + id: signal + unicode: f012 + created: 1.0 + categories: + - Web Application Icons + + - name: cog + id: cog + unicode: f013 + created: 1.0 + aliases: + - gear + categories: + - Web Application Icons + + - name: trash + id: trash + unicode: f014 + created: 1.0 + categories: + - Web Application Icons + + - name: home + id: home + unicode: f015 + created: 1.0 + categories: + - Web Application Icons + + - name: file-alt + id: file-alt + unicode: f016 + created: 1.0 + categories: + - Text Editor Icons + + - name: time + id: time + unicode: f017 + created: 1.0 + categories: + - Web Application Icons + + - name: road + id: road + unicode: f018 + created: 1.0 + categories: + - Web Application Icons + + - name: download-alt + id: download-alt + unicode: f019 + created: 1.0 + categories: + - Web Application Icons + + - name: download + id: download + unicode: f01a + created: 1.0 + categories: + - Web Application Icons + + - name: upload + id: upload + unicode: f01b + created: 1.0 + categories: + - Web Application Icons + + - name: inbox + id: inbox + unicode: f01c + created: 1.0 + categories: + - Web Application Icons + + - name: play-circle + id: play-circle + unicode: f01d + created: 1.0 + categories: + - Video Player Icons + + - name: repeat + id: repeat + unicode: f01e + created: 1.0 + aliases: + - rotate-right + categories: + - Text Editor Icons + + + - name: refresh + id: refresh + unicode: f021 + created: 1.0 + categories: + - Web Application Icons + + - name: list-alt + id: list-alt + unicode: f022 + created: 1.0 + categories: + - Text Editor Icons + + - name: lock + id: lock + unicode: f023 + created: 1.0 + categories: + - Web Application Icons + + - name: flag + id: flag + unicode: f024 + created: 1.0 + categories: + - Web Application Icons + + - name: headphones + id: headphones + unicode: f025 + created: 1.0 + categories: + - Web Application Icons + + - name: volume-off + id: volume-off + unicode: f026 + created: 1.0 + categories: + - Web Application Icons + + - name: volume-down + id: volume-down + unicode: f027 + created: 1.0 + categories: + - Web Application Icons + + - name: volume-up + id: volume-up + unicode: f028 + created: 1.0 + categories: + - Web Application Icons + + - name: qrcode + id: qrcode + unicode: f029 + created: 1.0 + categories: + - Web Application Icons + + - name: barcode + id: barcode + unicode: f02a + created: 1.0 + categories: + - Web Application Icons + + - name: tag + id: tag + unicode: f02b + created: 1.0 + categories: + - Web Application Icons + + - name: tags + id: tags + unicode: f02c + created: 1.0 + categories: + - Web Application Icons + + - name: book + id: book + unicode: f02d + created: 1.0 + categories: + - Web Application Icons + + - name: bookmark + id: bookmark + unicode: f02e + created: 1.0 + categories: + - Web Application Icons + + - name: print + id: print + unicode: f02f + created: 1.0 + categories: + - Web Application Icons + + + - name: camera + id: camera + unicode: f030 + created: 1.0 + categories: + - Web Application Icons + + - name: font + id: font + unicode: f031 + created: 1.0 + categories: + - Text Editor Icons + + - name: bold + id: bold + unicode: f032 + created: 1.0 + categories: + - Text Editor Icons + + - name: italic + id: italic + unicode: f033 + created: 1.0 + categories: + - Text Editor Icons + + - name: text-height + id: text-height + unicode: f034 + created: 1.0 + categories: + - Text Editor Icons + + - name: text-width + id: text-width + unicode: f035 + created: 1.0 + categories: + - Text Editor Icons + + - name: align-left + id: align-left + unicode: f036 + created: 1.0 + categories: + - Text Editor Icons + + - name: align-center + id: align-center + unicode: f037 + created: 1.0 + categories: + - Text Editor Icons + + - name: align-right + id: align-right + unicode: f038 + created: 1.0 + categories: + - Text Editor Icons + + - name: align-justify + id: align-justify + unicode: f039 + created: 1.0 + categories: + - Text Editor Icons + + - name: list + id: list + unicode: f03a + created: 1.0 + categories: + - Text Editor Icons + + - name: indent-left + id: indent-left + unicode: f03b + created: 1.0 + categories: + - Text Editor Icons + + - name: indent-right + id: indent-right + unicode: f03c + created: 1.0 + categories: + - Text Editor Icons + + - name: facetime-video + id: facetime-video + unicode: f03d + created: 1.0 + categories: + - Web Application Icons + + - name: picture + id: picture + unicode: f03e + created: 1.0 + categories: + - Web Application Icons + + + - name: pencil + id: pencil + unicode: f040 + created: 1.0 + categories: + - Web Application Icons + + - name: map-marker + id: map-marker + unicode: f041 + created: 1.0 + categories: + - Web Application Icons + + - name: adjust + id: adjust + unicode: f042 + created: 1.0 + categories: + - Web Application Icons + + - name: tint + id: tint + unicode: f043 + created: 1.0 + categories: + - Web Application Icons + + - name: edit + id: edit + unicode: f044 + created: 1.0 + categories: + - Web Application Icons + + - name: share + id: share + unicode: f045 + created: 1.0 + categories: + - Web Application Icons + + - name: check + id: check + unicode: f046 + created: 1.0 + categories: + - Web Application Icons + + - name: move + id: move + unicode: f047 + created: 1.0 + categories: + - Web Application Icons + + - name: step-backward + id: step-backward + unicode: f048 + created: 1.0 + categories: + - Video Player Icons + + - name: fast-backward + id: fast-backward + unicode: f049 + created: 1.0 + categories: + - Video Player Icons + + - name: backward + id: backward + unicode: f04a + created: 1.0 + categories: + - Video Player Icons + + - name: play + id: play + unicode: f04b + created: 1.0 + categories: + - Video Player Icons + + - name: pause + id: pause + unicode: f04c + created: 1.0 + categories: + - Video Player Icons + + - name: stop + id: stop + unicode: f04d + created: 1.0 + categories: + - Video Player Icons + + - name: forward + id: forward + unicode: f04e + created: 1.0 + categories: + - Video Player Icons + + + - name: fast-forward + id: fast-forward + unicode: f050 + created: 1.0 + categories: + - Video Player Icons + + - name: step-forward + id: step-forward + unicode: f051 + created: 1.0 + categories: + - Video Player Icons + + - name: eject + id: eject + unicode: f052 + created: 1.0 + categories: + - Video Player Icons + + - name: chevron-left + id: chevron-left + unicode: f053 + created: 1.0 + categories: + - Directional Icons + + - name: chevron-right + id: chevron-right + unicode: f054 + created: 1.0 + categories: + - Directional Icons + + - name: plus-sign + id: plus-sign + unicode: f055 + created: 1.0 + categories: + - Web Application Icons + + - name: minus-sign + id: minus-sign + unicode: f056 + created: 1.0 + categories: + - Web Application Icons + + - name: remove-sign + id: remove-sign + unicode: f057 + created: 1.0 + categories: + - Web Application Icons + + - name: ok-sign + id: ok-sign + unicode: f058 + created: 1.0 + categories: + - Web Application Icons + + - name: question-sign + id: question-sign + unicode: f059 + created: 1.0 + categories: + - Web Application Icons + + - name: info-sign + id: info-sign + unicode: f05a + created: 1.0 + categories: + - Web Application Icons + + - name: screenshot + id: screenshot + unicode: f05b + created: 1.0 + categories: + - Web Application Icons + + - name: remove-circle + id: remove-circle + unicode: f05c + created: 1.0 + categories: + - Web Application Icons + + - name: ok-circle + id: ok-circle + unicode: f05d + created: 1.0 + categories: + - Web Application Icons + + - name: ban-circle + id: ban-circle + unicode: f05e + created: 1.0 + categories: + - Web Application Icons + + + - name: arrow-left + id: arrow-left + unicode: f060 + created: 1.0 + categories: + - Directional Icons + + - name: arrow-right + id: arrow-right + unicode: f061 + created: 1.0 + categories: + - Directional Icons + + - name: arrow-up + id: arrow-up + unicode: f062 + created: 1.0 + categories: + - Directional Icons + + - name: arrow-down + id: arrow-down + unicode: f063 + created: 1.0 + categories: + - Directional Icons + + - name: share-alt + id: share-alt + unicode: f064 + created: 1.0 + aliases: + - mail-forward + categories: + - Web Application Icons + + - name: resize-full + id: resize-full + unicode: f065 + created: 1.0 + categories: + - Video Player Icons + + - name: resize-small + id: resize-small + unicode: f066 + created: 1.0 + categories: + - Video Player Icons + + - name: plus + id: plus + unicode: f067 + created: 1.0 + categories: + - Web Application Icons + + - name: minus + id: minus + unicode: f068 + created: 1.0 + categories: + - Web Application Icons + + - name: asterisk + id: asterisk + unicode: f069 + created: 1.0 + categories: + - Web Application Icons + + - name: exclamation-sign + id: exclamation-sign + unicode: f06a + created: 1.0 + categories: + - Web Application Icons + + - name: gift + id: gift + unicode: f06b + created: 1.0 + categories: + - Web Application Icons + + - name: leaf + id: leaf + unicode: f06c + created: 1.0 + categories: + - Web Application Icons + + - name: fire + id: fire + unicode: f06d + created: 1.0 + categories: + - Web Application Icons + + - name: eye-open + id: eye-open + unicode: f06e + created: 1.0 + categories: + - Web Application Icons + + + - name: eye-close + id: eye-close + unicode: f070 + created: 1.0 + categories: + - Web Application Icons + + - name: warning-sign + id: warning-sign + unicode: f071 + created: 1.0 + categories: + - Web Application Icons + + - name: plane + id: plane + unicode: f072 + created: 1.0 + categories: + - Web Application Icons + + - name: calendar + id: calendar + unicode: f073 + created: 1.0 + categories: + - Web Application Icons + + - name: random + id: random + unicode: f074 + created: 1.0 + categories: + - Web Application Icons + + - name: comment + id: comment + unicode: f075 + created: 1.0 + categories: + - Web Application Icons + + - name: magnet + id: magnet + unicode: f076 + created: 1.0 + categories: + - Web Application Icons + + - name: chevron-up + id: chevron-up + unicode: f077 + created: 1.0 + categories: + - Directional Icons + + - name: chevron-down + id: chevron-down + unicode: f078 + created: 1.0 + categories: + - Directional Icons + + - name: retweet + id: retweet + unicode: f079 + created: 1.0 + categories: + - Web Application Icons + + - name: shopping-cart + id: shopping-cart + unicode: f07a + created: 1.0 + categories: + - Web Application Icons + + - name: folder-close + id: folder-close + unicode: f07b + created: 1.0 + categories: + - Web Application Icons + + - name: folder-open + id: folder-open + unicode: f07c + created: 1.0 + categories: + - Web Application Icons + + - name: resize-vertical + id: resize-vertical + unicode: f07d + created: 1.0 + categories: + - Web Application Icons + + - name: resize-horizontal + id: resize-horizontal + unicode: f07e + created: 1.0 + categories: + - Web Application Icons + + + - name: bar-chart + id: bar-chart + unicode: f080 + created: 1.0 + categories: + - Web Application Icons + + - name: twitter-sign + id: twitter-sign + unicode: f081 + created: 1.0 + categories: + - Brand Icons + + - name: facebook-sign + id: facebook-sign + unicode: f082 + created: 1.0 + categories: + - Brand Icons + + - name: camera-retro + id: camera-retro + unicode: f083 + created: 1.0 + categories: + - Web Application Icons + + - name: key + id: key + unicode: f084 + created: 1.0 + categories: + - Web Application Icons + + - name: cogs + id: cogs + unicode: f085 + created: 1.0 + aliases: + - gears + categories: + - Web Application Icons + + - name: comments + id: comments + unicode: f086 + created: 1.0 + categories: + - Web Application Icons + + - name: thumbs-up-alt + id: thumbs-up-alt + unicode: f087 + created: 1.0 + categories: + - Web Application Icons + + - name: thumbs-down-alt + id: thumbs-down-alt + unicode: f088 + created: 1.0 + categories: + - Web Application Icons + + - name: star-half + id: star-half + unicode: f089 + created: 1.0 + categories: + - Web Application Icons + + - name: heart-empty + id: heart-empty + unicode: f08a + created: 1.0 + categories: + - Web Application Icons + + - name: signout + id: signout + unicode: f08b + created: 1.0 + categories: + - Web Application Icons + + - name: linkedin-sign + id: linkedin-sign + unicode: f08c + created: 1.0 + categories: + - Brand Icons + + - name: pushpin + id: pushpin + unicode: f08d + created: 1.0 + categories: + - Web Application Icons + + - name: external-link + id: external-link + unicode: f08e + created: 1.0 + categories: + - Web Application Icons + + + - name: signin + id: signin + unicode: f090 + created: 1.0 + categories: + - Web Application Icons + + - name: trophy + id: trophy + unicode: f091 + created: 1.0 + categories: + - Web Application Icons + + - name: github-sign + id: github-sign + unicode: f092 + created: 1.0 + categories: + - Brand Icons + + - name: upload-alt + id: upload-alt + unicode: f093 + created: 1.0 + categories: + - Web Application Icons + + - name: lemon + id: lemon + unicode: f094 + created: 1.0 + categories: + - Web Application Icons + + - name: phone + id: phone + unicode: f095 + created: 2.0 + categories: + - Web Application Icons + + - name: check-empty + id: check-empty + unicode: f096 + created: 2.0 + aliases: + - unchecked + categories: + - Web Application Icons + + - name: bookmark-empty + id: bookmark-empty + unicode: f097 + created: 2.0 + categories: + - Web Application Icons + + - name: phone-sign + id: phone-sign + unicode: f098 + created: 2.0 + categories: + - Web Application Icons + + - name: twitter + id: twitter + unicode: f099 + created: 2.0 + categories: + - Brand Icons + + - name: facebook + id: facebook + unicode: f09a + created: 2.0 + categories: + - Brand Icons + + - name: github + id: github + unicode: f09b + created: 2.0 + categories: + - Brand Icons + + - name: unlock + id: unlock + unicode: f09c + created: 2.0 + categories: + - Web Application Icons + + - name: credit-card + id: credit-card + unicode: f09d + created: 2.0 + categories: + - Web Application Icons + + - name: rss + id: rss + unicode: f09e + created: 2.0 + categories: + - Web Application Icons + + + - name: hdd + id: hdd + unicode: f0a0 + created: 2.0 + categories: + - Web Application Icons + + - name: bullhorn + id: bullhorn + unicode: f0a1 + created: 2.0 + categories: + - Web Application Icons + + - name: bell + id: bell + unicode: f0a2 + created: 2.0 + categories: + - Web Application Icons + + - name: certificate + id: certificate + unicode: f0a3 + created: 2.0 + categories: + - Web Application Icons + + - name: hand-right + id: hand-right + unicode: f0a4 + created: 2.0 + categories: + - Directional Icons + + - name: hand-left + id: hand-left + unicode: f0a5 + created: 2.0 + categories: + - Directional Icons + + - name: hand-up + id: hand-up + unicode: f0a6 + created: 2.0 + categories: + - Directional Icons + + - name: hand-down + id: hand-down + unicode: f0a7 + created: 2.0 + categories: + - Directional Icons + + - name: circle-arrow-left + id: circle-arrow-left + unicode: f0a8 + created: 2.0 + categories: + - Directional Icons + + - name: circle-arrow-right + id: circle-arrow-right + unicode: f0a9 + created: 2.0 + categories: + - Directional Icons + + - name: circle-arrow-up + id: circle-arrow-up + unicode: f0aa + created: 2.0 + categories: + - Directional Icons + + - name: circle-arrow-down + id: circle-arrow-down + unicode: f0ab + created: 2.0 + categories: + - Directional Icons + + - name: globe + id: globe + unicode: f0ac + created: 2.0 + categories: + - Web Application Icons + + - name: wrench + id: wrench + unicode: f0ad + created: 2.0 + categories: + - Web Application Icons + + - name: tasks + id: tasks + unicode: f0ae + created: 2.0 + categories: + - Web Application Icons + + + - name: filter + id: filter + unicode: f0b0 + created: 2.0 + categories: + - Web Application Icons + + - name: briefcase + id: briefcase + unicode: f0b1 + created: 2.0 + categories: + - Web Application Icons + + - name: fullscreen + id: fullscreen + unicode: f0b2 + created: 2.0 + categories: + - Video Player Icons + + + - name: group + id: group + unicode: f0c0 + created: 2.0 + categories: + - Web Application Icons + + - name: link + id: link + unicode: f0c1 + created: 2.0 + categories: + - Text Editor Icons + + - name: cloud + id: cloud + unicode: f0c2 + created: 2.0 + categories: + - Web Application Icons + + - name: beaker + id: beaker + unicode: f0c3 + created: 2.0 + categories: + - Web Application Icons + + - name: cut + id: cut + unicode: f0c4 + created: 2.0 + categories: + - Text Editor Icons + + - name: copy + id: copy + unicode: f0c5 + created: 2.0 + categories: + - Text Editor Icons + + - name: paper-clip + id: paper-clip + unicode: f0c6 + created: 2.0 + aliases: + - paperclip + categories: + - Text Editor Icons + + - name: save + id: save + unicode: f0c7 + created: 2.0 + categories: + - Text Editor Icons + + - name: sign-blank + id: sign-blank + unicode: f0c8 + created: 2.0 + categories: + - Web Application Icons + + - name: reorder + id: reorder + unicode: f0c9 + created: 2.0 + categories: + - Web Application Icons + + - name: list-ul + id: list-ul + unicode: f0ca + created: 2.0 + categories: + - Text Editor Icons + + - name: list-ol + id: list-ol + unicode: f0cb + created: 2.0 + categories: + - Text Editor Icons + + - name: strikethrough + id: strikethrough + unicode: f0cc + created: 2.0 + categories: + - Text Editor Icons + + - name: underline + id: underline + unicode: f0cd + created: 2.0 + categories: + - Text Editor Icons + + - name: table + id: table + unicode: f0ce + created: 2.0 + categories: + - Text Editor Icons + + + - name: magic + id: magic + unicode: f0d0 + created: 2.0 + categories: + - Web Application Icons + + - name: truck + id: truck + unicode: f0d1 + created: 2.0 + categories: + - Web Application Icons + + - name: pinterest + id: pinterest + unicode: f0d2 + created: 2.0 + categories: + - Brand Icons + + - name: pinterest-sign + id: pinterest-sign + unicode: f0d3 + created: 2.0 + categories: + - Brand Icons + + - name: google-plus-sign + id: google-plus-sign + unicode: f0d4 + created: 2.0 + categories: + - Brand Icons + + - name: google-plus + id: google-plus + unicode: f0d5 + created: 2.0 + categories: + - Brand Icons + + - name: money + id: money + unicode: f0d6 + created: 2.0 + categories: + - Web Application Icons + + - name: caret-down + id: caret-down + unicode: f0d7 + created: 2.0 + categories: + - Directional Icons + + - name: caret-up + id: caret-up + unicode: f0d8 + created: 2.0 + categories: + - Directional Icons + + - name: caret-left + id: caret-left + unicode: f0d9 + created: 2.0 + categories: + - Directional Icons + + - name: caret-right + id: caret-right + unicode: f0da + created: 2.0 + categories: + - Directional Icons + + - name: columns + id: columns + unicode: f0db + created: 2.0 + categories: + - Text Editor Icons + + - name: sort + id: sort + unicode: f0dc + created: 2.0 + categories: + - Web Application Icons + + - name: sort-down + id: sort-down + unicode: f0dd + created: 2.0 + categories: + - Web Application Icons + + - name: sort-up + id: sort-up + unicode: f0de + created: 2.0 + categories: + - Web Application Icons + + + - name: Envelope + id: envelope + unicode: f0e0 + created: 2.0 + categories: + - Web Application Icons + + - name: linkedin + id: linkedin + unicode: f0e1 + created: 2.0 + categories: + - Brand Icons + + + - name: undo + id: undo + unicode: f0e2 + created: 2.0 + aliases: + - rotate-left + categories: + - Text Editor Icons + + - name: legal + id: legal + unicode: f0e3 + created: 2.0 + categories: + - Web Application Icons + + - name: dashboard + id: dashboard + unicode: f0e4 + created: 2.0 + categories: + - Web Application Icons + + - name: comment-alt + id: comment-alt + unicode: f0e5 + created: 2.0 + categories: + - Web Application Icons + + - name: comments-alt + id: comments-alt + unicode: f0e6 + created: 2.0 + categories: + - Web Application Icons + + - name: bolt + id: bolt + unicode: f0e7 + created: 2.0 + categories: + - Web Application Icons + + - name: sitemap + id: sitemap + unicode: f0e8 + created: 2.0 + categories: + - Web Application Icons + + - name: umbrella + id: umbrella + unicode: f0e9 + created: 2.0 + categories: + - Web Application Icons + + - name: paste + id: paste + unicode: f0ea + created: 2.0 + categories: + - Text Editor Icons + + - name: lightbulb + id: lightbulb + unicode: f0eb + created: 3.0 + categories: + - Web Application Icons + + - name: exchange + id: exchange + unicode: f0ec + created: 3.0 + categories: + - Web Application Icons + + - name: cloud-download + id: cloud-download + unicode: f0ed + created: 3.0 + categories: + - Web Application Icons + + - name: cloud-upload + id: cloud-upload + unicode: f0ee + created: 3.0 + categories: + - Web Application Icons + + + - name: user-md + id: user-md + unicode: f0f0 + created: 2.0 + categories: + - Medical Icons + + - name: stethoscope + id: stethoscope + unicode: f0f1 + created: 3.0 + categories: + - Medical Icons + + - name: suitcase + id: suitcase + unicode: f0f2 + created: 3.0 + categories: + - Web Application Icons + + - name: bell-alt + id: bell-alt + unicode: f0f3 + created: 3.0 + categories: + - Web Application Icons + + - name: coffee + id: coffee + unicode: f0f4 + created: 3.0 + categories: + - Web Application Icons + + - name: food + id: food + unicode: f0f5 + created: 3.0 + categories: + - Web Application Icons + + - name: file-text-alt + id: file-text-alt + unicode: f0f6 + created: 3.0 + categories: + - Text Editor Icons + + - name: building + id: building + unicode: f0f7 + created: 3.0 + categories: + - Web Application Icons + + - name: hospital + id: hospital + unicode: f0f8 + created: 3.0 + categories: + - Medical Icons + + - name: ambulance + id: ambulance + unicode: f0f9 + created: 3.0 + categories: + - Medical Icons + + - name: medkit + id: medkit + unicode: f0fa + created: 3.0 + categories: + - Medical Icons + + - name: fighter-jet + id: fighter-jet + unicode: f0fb + created: 3.0 + categories: + - Web Application Icons + + - name: beer + id: beer + unicode: f0fc + created: 3.0 + categories: + - Web Application Icons + + - name: h-sign + id: h-sign + unicode: f0fd + created: 3.0 + categories: + - Medical Icons + + - name: plus-sign-alt + id: plus-sign-alt + unicode: f0fe + created: 3.0 + categories: + - Medical Icons + - Web Application Icons + + + - name: double-angle-left + id: double-angle-left + unicode: f100 + created: 3.0 + categories: + - Directional Icons + + - name: double-angle-right + id: double-angle-right + unicode: f101 + created: 3.0 + categories: + - Directional Icons + + - name: double-angle-up + id: double-angle-up + unicode: f102 + created: 3.0 + categories: + - Directional Icons + + - name: double-angle-down + id: double-angle-down + unicode: f103 + created: 3.0 + categories: + - Directional Icons + + - name: angle-left + id: angle-left + unicode: f104 + created: 3.0 + categories: + - Directional Icons + + - name: angle-right + id: angle-right + unicode: f105 + created: 3.0 + categories: + - Directional Icons + + - name: angle-up + id: angle-up + unicode: f106 + created: 3.0 + categories: + - Directional Icons + + - name: angle-down + id: angle-down + unicode: f107 + created: 3.0 + categories: + - Directional Icons + + - name: desktop + id: desktop + unicode: f108 + created: 3.0 + categories: + - Web Application Icons + + - name: laptop + id: laptop + unicode: f109 + created: 3.0 + categories: + - Web Application Icons + + - name: tablet + id: tablet + unicode: f10a + created: 3.0 + categories: + - Web Application Icons + + - name: mobile-phone + id: mobile-phone + unicode: f10b + created: 3.0 + categories: + - Web Application Icons + + - name: circle-blank + id: circle-blank + unicode: f10c + created: 3.0 + categories: + - Web Application Icons + + - name: quote-left + id: quote-left + unicode: f10d + created: 3.0 + categories: + - Web Application Icons + + - name: quote-right + id: quote-right + unicode: f10e + created: 3.0 + categories: + - Web Application Icons + + + - name: spinner + id: spinner + unicode: f110 + created: 3.0 + categories: + - Web Application Icons + + - name: circle + id: circle + unicode: f111 + created: 3.0 + categories: + - Web Application Icons + + - name: reply + id: reply + unicode: f112 + created: 3.0 + aliases: + - mail-reply + categories: + - Web Application Icons + + - name: github-alt + id: github-alt + unicode: f113 + created: 3.0 + categories: + - Brand Icons + + - name: folder-close-alt + id: folder-close-alt + unicode: f114 + created: 3.0 + categories: + - Web Application Icons + + - name: folder-open-alt + id: folder-open-alt + unicode: f115 + created: 3.0 + categories: + - Web Application Icons + + - name: expand-alt + id: expand-alt + unicode: f116 + created: 3.1 + categories: + - Web Application Icons + + - name: collapse-alt + id: collapse-alt + unicode: f117 + created: 3.1 + categories: + - Web Application Icons + + - name: smile + id: smile + unicode: f118 + created: 3.1 + categories: + - Web Application Icons + + - name: frown + id: frown + unicode: f119 + created: 3.1 + categories: + - Web Application Icons + + - name: meh + id: meh + unicode: f11a + created: 3.1 + categories: + - Web Application Icons + + - name: gamepad + id: gamepad + unicode: f11b + created: 3.1 + categories: + - Web Application Icons + + - name: keyboard + id: keyboard + unicode: f11c + created: 3.1 + categories: + - Web Application Icons + + - name: flag-alt + id: flag-alt + unicode: f11d + created: 3.1 + categories: + - Web Application Icons + + - name: flag-checkered + id: flag-checkered + unicode: f11e + created: 3.1 + categories: + - Web Application Icons + + + - name: terminal + id: terminal + unicode: f120 + created: 3.1 + categories: + - Web Application Icons + + - name: code + id: code + unicode: f121 + created: 3.1 + categories: + - Web Application Icons + + - name: reply-all + id: reply-all + unicode: f122 + created: 3.1 + categories: + - Web Application Icons + + - name: mail-reply-all + id: mail-reply-all + unicode: f122 + created: 3.1 + categories: + - Web Application Icons + + - name: star-half-empty + id: star-half-empty + unicode: f123 + created: 3.1 + aliases: + - star-half-full + categories: + - Web Application Icons + + - name: location-arrow + id: location-arrow + unicode: f124 + created: 3.1 + categories: + - Web Application Icons + + - name: crop + id: crop + unicode: f125 + created: 3.1 + categories: + - Web Application Icons + + - name: code-fork + id: code-fork + unicode: f126 + created: 3.1 + categories: + - Web Application Icons + + - name: unlink + id: unlink + unicode: f127 + created: 3.1 + categories: + - Text Editor Icons + + - name: question + id: question + unicode: f128 + created: 3.1 + categories: + - Web Application Icons + + - name: info + id: info + unicode: f129 + created: 3.1 + categories: + - Web Application Icons + + - name: exclamation + id: exclamation + unicode: f12a + created: 3.1 + categories: + - Web Application Icons + + - name: superscript + id: superscript + unicode: f12b + created: 3.1 + categories: + - Web Application Icons + + - name: subscript + id: subscript + unicode: f12c + created: 3.1 + categories: + - Web Application Icons + + - name: eraser + id: eraser + unicode: f12d + created: 3.1 + categories: + - Text Editor Icons + - Web Application Icons + + - name: puzzle-piece + id: puzzle-piece + unicode: f12e + created: 3.1 + categories: + - Web Application Icons + + + - name: microphone + id: microphone + unicode: f130 + created: 3.1 + categories: + - Web Application Icons + + - name: microphone-off + id: microphone-off + unicode: f131 + created: 3.1 + categories: + - Web Application Icons + + - name: shield + id: shield + unicode: f132 + created: 3.1 + categories: + - Web Application Icons + + - name: calendar-empty + id: calendar-empty + unicode: f133 + created: 3.1 + categories: + - Web Application Icons + + - name: fire-extinguisher + id: fire-extinguisher + unicode: f134 + created: 3.1 + categories: + - Web Application Icons + + - name: rocket + id: rocket + unicode: f135 + created: 3.1 + categories: + - Web Application Icons + + - name: MaxCDN + id: maxcdn + unicode: f136 + created: 3.1 + categories: + - Brand Icons + + - name: Chevron Sign Left + id: chevron-sign-left + unicode: f137 + created: 3.1 + categories: + - Directional Icons + + - name: Chevron Sign Right + id: chevron-sign-right + unicode: f138 + created: 3.1 + categories: + - Directional Icons + + - name: Chevron Sign Up + id: chevron-sign-up + unicode: f139 + created: 3.1 + categories: + - Directional Icons + + - name: Chevron Sign Down + id: chevron-sign-down + unicode: f13a + created: 3.1 + categories: + - Directional Icons + + - name: HTML 5 Logo + id: html5 + unicode: f13b + created: 3.1 + categories: + - Brand Icons + + - name: CSS 3 Logo + id: css3 + unicode: f13c + created: 3.1 + categories: + - Brand Icons + + - name: Anchor + id: anchor + unicode: f13d + created: 3.1 + categories: + - Web Application Icons + + - name: Unlock Alt + id: unlock-alt + unicode: f13e + created: 3.1 + categories: + - Web Application Icons + + + - name: Bullseye + id: bullseye + unicode: f140 + created: 3.1 + categories: + - Web Application Icons + + - name: Horizontal Ellipsis + id: ellipsis-horizontal + unicode: f141 + created: 3.1 + categories: + - Web Application Icons + + - name: Vertical Ellipsis + id: ellipsis-vertical + unicode: f142 + created: 3.1 + categories: + - Web Application Icons + + - name: RSS Sign + id: rss-sign + unicode: f143 + created: 3.1 + categories: + - Web Application Icons + + - name: Play Sign + id: play-sign + unicode: f144 + created: 3.1 + categories: + - Video Player Icons + + - name: Ticket + id: ticket + unicode: f145 + created: 3.1 + categories: + - Web Application Icons + + - name: Minus Sign Alt + id: minus-sign-alt + unicode: f146 + created: 3.1 + categories: + - Web Application Icons + + - name: Check Minus + id: check-minus + unicode: f147 + created: 3.1 + categories: + - Web Application Icons + + - name: Level Up + id: level-up + unicode: f148 + created: 3.1 + categories: + - Web Application Icons + + - name: Level Down + id: level-down + unicode: f149 + created: 3.1 + categories: + - Web Application Icons + + - name: Check Sign + id: check-sign + unicode: f14a + created: 3.1 + categories: + - Web Application Icons + + - name: Edit Sign + id: edit-sign + unicode: f14b + created: 3.1 + categories: + - Web Application Icons + + - name: Exteral Link Sign + id: external-link-sign + unicode: f14c + created: 3.1 + categories: + - Web Application Icons + + - name: Share Sign + id: share-sign + unicode: f14d + created: 3.1 + categories: + - Web Application Icons + + - name: Compass + id: compass + unicode: f14e + created: 3.2 + categories: + - Web Application Icons + + + - name: Collapse + id: collapse + unicode: f150 + created: 3.2 + categories: + - Web Application Icons + + - name: Collapse Top + id: collapse-top + unicode: f151 + created: 3.2 + categories: + - Web Application Icons + + - name: Expand + id: expand + unicode: f152 + created: 3.2 + categories: + - Web Application Icons + + - name: Euro (EUR) + id: eur + unicode: f153 + created: 3.2 + aliases: + - euro + categories: + - Currency Icons + + - name: GBP + id: gbp + unicode: f154 + created: 3.2 + categories: + - Currency Icons + + - name: US Dollar + id: usd + unicode: f155 + created: 3.2 + aliases: + - dollar + categories: + - Currency Icons + + - name: Indian Rupee (INR) + id: inr + unicode: f156 + created: 3.2 + aliases: + - rupee + categories: + - Currency Icons + + - name: Japanese Yen (JPY) + id: jpy + unicode: f157 + created: 3.2 + aliases: + - yen + categories: + - Currency Icons + + - name: Renminbi (CNY) + id: cny + unicode: f158 + created: 3.2 + aliases: + - renminbi + categories: + - Currency Icons + + - name: Korean Won (KRW) + id: krw + unicode: f159 + created: 3.2 + aliases: + - won + categories: + - Currency Icons + + - name: Bitcoin (BTC) + id: btc + unicode: f15a + created: 3.2 + aliases: + - bitcoin + categories: + - Currency Icons + - Brand Icons + + - name: File + id: file + unicode: f15b + created: 3.2 + categories: + - Text Editor Icons + + - name: File Text + id: file-text + unicode: f15c + created: 3.2 + categories: + - Text Editor Icons + + - name: Sort By Alphabet + id: sort-by-alphabet + unicode: f15d + created: 3.2 + categories: + - Web Application Icons + + - name: Sort By Alphabet Alt + id: sort-by-alphabet-alt + unicode: f15e + created: 3.2 + categories: + - Web Application Icons + + + - name: Sort By Attributes + id: sort-by-attributes + unicode: f160 + created: 3.2 + categories: + - Web Application Icons + + - name: Sort By Attributes Alt + id: sort-by-attributes-alt + unicode: f161 + created: 3.2 + categories: + - Web Application Icons + + - name: Sort By Order + id: sort-by-order + unicode: f162 + created: 3.2 + categories: + - Web Application Icons + + - name: Sort By Order Alt + id: sort-by-order-alt + unicode: f163 + created: 3.2 + categories: + - Web Application Icons + + + - name: thumbs-up + id: thumbs-up + unicode: f164 + created: 3.2 + categories: + - Web Application Icons + + - name: thumbs-down + id: thumbs-down + unicode: f165 + created: 3.2 + categories: + - Web Application Icons + + - name: YouTube Sign + id: youtube-sign + unicode: f166 + created: 3.2 + categories: + - Brand Icons + + - name: YouTube + id: youtube + unicode: f167 + created: 3.2 + categories: + - Brand Icons + + - name: Xing + id: xing + unicode: f168 + created: 3.2 + categories: + - Brand Icons + + - name: Xing Sign + id: xing-sign + unicode: f169 + created: 3.2 + categories: + - Brand Icons + + - name: YouTube Play + id: youtube-play + unicode: f16a + created: 3.2 + categories: + - Brand Icons + - Video Player Icons + + - name: Dropbox + id: dropbox + unicode: f16b + created: 3.2 + categories: + - Brand Icons + + - name: Stack Exchange + id: stackexchange + unicode: f16c + created: 3.2 + categories: + - Brand Icons + + - name: Instagram + id: instagram + unicode: f16d + created: 3.2 + categories: + - Brand Icons + + - name: Flickr + id: flickr + unicode: f16e + created: 3.2 + categories: + - Brand Icons + + - name: App.net + id: adn + unicode: f170 + created: 3.2 + categories: + - Brand Icons + + - name: Bitbucket + id: bitbucket + unicode: f171 + created: 3.2 + categories: + - Brand Icons + + - name: Bitbucket Sign + id: bitbucket-sign + unicode: f172 + created: 3.2 + categories: + - Brand Icons + + - name: Tumblr + id: tumblr + unicode: f173 + created: 3.2 + categories: + - Brand Icons + + - name: Tumblr Sign + id: tumblr-sign + unicode: f174 + created: 3.2 + categories: + - Brand Icons + + - name: Long Arrow Down + id: long-arrow-down + unicode: f175 + created: 3.2 + categories: + - Directional Icons + + - name: Long Arrow Up + id: long-arrow-up + unicode: f176 + created: 3.2 + categories: + - Directional Icons + + - name: Long Arrow Left + id: long-arrow-left + unicode: f177 + created: 3.2 + categories: + - Directional Icons + + - name: Long Arrow Right + id: long-arrow-right + unicode: f178 + created: 3.2 + categories: + - Directional Icons + + - name: Apple + id: apple + unicode: f179 + created: 3.2 + categories: + - Brand Icons + + - name: Windows + id: windows + unicode: f17a + created: 3.2 + categories: + - Brand Icons + + - name: Android + id: android + unicode: f17b + created: 3.2 + categories: + - Brand Icons + + - name: Linux + id: linux + unicode: f17c + created: 3.2 + categories: + - Brand Icons + + - name: Dribbble + id: dribbble + unicode: f17d + created: 3.2 + categories: + - Brand Icons + + - name: Skype + id: skype + unicode: f17e + created: 3.2 + categories: + - Brand Icons + + + - name: Foursquare + id: foursquare + unicode: f180 + created: 3.2 + categories: + - Brand Icons + + - name: Trello + id: trello + unicode: f181 + created: 3.2 + categories: + - Brand Icons + + - name: Female + id: female + unicode: f182 + created: 3.2 + categories: + - Web Application Icons + + - name: Male + id: male + unicode: f183 + created: 3.2 + categories: + - Web Application Icons + + - name: Gittip + id: gittip + unicode: f184 + created: 3.2 + categories: + - Brand Icons + + - name: Sun + id: sun + unicode: f185 + created: 3.2 + categories: + - Web Application Icons + + - name: Moon + id: moon + unicode: f186 + created: 3.2 + categories: + - Web Application Icons + + - name: Archive + id: archive + unicode: f187 + created: 3.2 + categories: + - Web Application Icons + + - name: Bug + id: bug + unicode: f188 + created: 3.2 + categories: + - Web Application Icons + + - name: VK + id: vk + unicode: f189 + created: 3.2 + categories: + - Brand Icons + + - name: Weibo + id: weibo + unicode: f18a + created: 3.2 + categories: + - Brand Icons + + - name: Renren + id: renren + unicode: f18b + created: 3.2 + categories: + - Brand Icons diff --git a/app/bower_components/font-awesome/src/3.2.1/icons/index.html b/app/bower_components/font-awesome/src/3.2.1/icons/index.html new file mode 100644 index 0000000..779f024 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/icons/index.html @@ -0,0 +1,1202 @@ + + + + + + + + + + Font Awesome Icons + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +
    +

      The Icons

    +

    The complete set of 361 icons in Font Awesome 3.2.1

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +

    + You asked, Font Awesome delivers with 58 shiny new icons in version 3.2. + Want to request new icons? Here's how. + + Need vectors or want to use on the desktop? Check the cheatsheet. +

    + +
    +
    +
    + +
    +
    +
    + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + +
    + +
    + + + + +
    + +
    + + + + +
    + +
    + + + + +
    + +
    + + +
    +
      +
    • All brand icons are trademarks of their respective owners.
    • +
    • The use of these trademarks does not indicate endorsement of the trademark holder by Font Awesome, nor vice versa.
    • +
    + +
    + + +
    + +
    + + + + +
    + + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/index.html b/app/bower_components/font-awesome/src/3.2.1/index.html new file mode 100644 index 0000000..0c296ce --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/index.html @@ -0,0 +1,320 @@ + + + + + + + + + + Font Awesome, the iconic font designed for Bootstrap + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +

    Font Awesome

    +

    The iconic font designed for Bootstrap

    + +
    + + GitHub Project   ·   + Version 3.2.1   ·   + Created & Maintained by Dave Gandy +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +

    + Font Awesome gives you scalable vector icons that can instantly be customized — size, color, drop shadow, + and anything that can be done with the power of CSS. +

    + +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +

    One Font, 361 Icons

    + In a single collection, Font Awesome is a pictographic language of web-related actions. +
    +
    +

    CSS Control

    + Easily style icon color, size, shadow, and anything that's possible with CSS. +
    +
    +

    Infinite Scalability

    + Scalable vector graphics means every icon looks awesome at any size. +
    +
    +

    Free, as in Speech

    + Font Awesome is completely free for commercial use. Check out the license. +
    +
    +

    IE7 Support

    + Font Awesome supports IE7. If you need it, you have my condolences. +
    +
    +

    Perfect on Retina Displays

    + Font Awesome icons are vectors, which mean they're gorgeous on high-resolution displays. +
    +
    +

    Made for Bootstrap

    + Designed from scratch to be fully compatible with Bootstrap 2.3.2. +
    +
    +

    Desktop Friendly

    + To use on the desktop or for a complete set of vectors, + check out the cheatsheet. +
    +
    +

    Screen Reader Compatible

    + Font Awesome won't trip up screen readers, unlike other icon fonts. +
    +
    +
    + +
    + +
    +
    +

    + Thanks to @robmadole and + @supercodepoet for icon design + review, advice, some Jekyll help, and being all around badass coders. +

    +
    +
    +

    + Thanks to @grantgordon and + @johnsmclay for developing and hosting + icnfnt, the best way to subset Font Awesome. +

    +
    +
    +

    + Thanks to MaxCDN for providing the excellent + BootstrapCDN, the fastest and easiest way to + get started with Font Awesome. +

    +
    +
    +
    + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/license/index.html b/app/bower_components/font-awesome/src/3.2.1/license/index.html new file mode 100644 index 0000000..d58cf5e --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/license/index.html @@ -0,0 +1,261 @@ + + + + + + + + + + Font Awesome License + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +
    +

      License

    +

    The full details of how Font Awesome is licensed

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +

    + Font Awesome is fully open source and is GPL compatible. You can use it for commercial projects, open source + projects, or really just about whatever you want. +

    + +
    +
    +
    + +
    +
    +
    + + +
    +
    +
      +
    • + Attribution is no longer required as of Font Awesome 3.0 but is much appreciated: + "Font Awesome by Dave Gandy - http://fontawesome.io". +
    • +
    +
    +
    + +
    + +
      +
    • + Applies to all desktop and webfont files in the following directory: + font-awesome/font/. +
    • +
    • License: SIL OFL 1.1
    • +
    • URL: http://scripts.sil.org/OFL
    • +
    +
    + +
    + + +
    + +
    + + +
    + +
    + +
      +
    • All brand icons are trademarks of their respective owners.
    • +
    • The use of these trademarks does not indicate endorsement of the trademark holder by Font Awesome, nor vice versa.
    • +
    + +
    + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/test/index.html b/app/bower_components/font-awesome/src/3.2.1/test/index.html new file mode 100644 index 0000000..29c535f --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/test/index.html @@ -0,0 +1,1056 @@ + + + + + + + + + + Font Awesome Visual Test Cases + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +

    Visual Test Cases

    + +

    Icons Icons should have proper alignment and not be clipped

    +
    +
    +
    + Building +
    +
    +
    +
    + Building Large +
    +
    +
    + Building +
    +
    + Building Large +
    +
    +
    +
    +
    + Building +
    +
    +
    +
    + Building Large +
    +
    +
    + Building Large +
    +
    +
    +
    +
    + Circle +
    +
    +
    +
    + Circle Large +
    +
    +
    + Circle +
    +
    + Circle Large +
    +
    +
    +
    +
    + Circle +
    +
    +
    +
    + Circle Large +
    +
    +
    + Circle Large +
    +
    + + +

    Links with Icons icon should activate link & underline

    + + + + +

    Navbar should stay same height

    + + + +

    Plain buttons next to buttons w/icons should be same height, icons not clipped

    +

    Buttons

    +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    + + +

    Anchors

    +
    +
    +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    +
    +
    +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    +
    +
    +
    +
    +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    +
    +
    +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    + Button + Button + +
    +
    +
    +
    + + +

    Buttons with pulled 2x, 3x, 4x should be same height, have correct line height

    + + + +

    Nav pills & nav tabs should be same height and properly vertically aligned

    + + + + +

    2x, 3x, 4x icons in text should have margins next to and below text

    +
    +
    +

    + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus. +

    +
    +
    +

    + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus. +

    +
    +
    +
    +
    + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus. +
    +
    + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus. +
    +
    + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus. +
    +
    + + +

    Bullets should wrap appropriately, have proper spacing

    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. + + foo + foo +
    • +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    +
    +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    +
    +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    +
    +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. + + foo + foo +
    • +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. + + foo + foo +
    • +
    +
    +
    +
    + + +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    +
    +
    +
    +
    +
      +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et lectus id nisl hendrerit varius. Aliquam erat volutpat. Suspendisse potenti. Aliquam erat volutpat. Aliquam ut dolor lectus.
    • +
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • +
    +
    +
    +
    + + +

    Spinning icons icons should be aligned well and on center, buttons should be same height, won't work in ie7

    +
    + Loading... + + + Loading... + + Loading... +
    +
    + Loading... + + + Loading... + +
    +
    + Loading... + + + Loading... + +
    +

    icon-large

    +
    + Loading... + + + Loading... + +
    +
    + Loading... + + + Loading... + +
    +
    + Loading... + + + Loading... + +
    +

    Bootstrap Prepend and Append

    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +

    Stacked icons

    +
    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +
    +
    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +
    +

    Stacked icons inside anchor

    + + + +

    Mirrored and rotated icons

    +
    +
    +
    +   normal
    +  icon-rotate-90
    +  icon-rotate-180
    +  icon-rotate-270
    +  icon-flip-horizontal
    +  icon-flip-vertical + +
    +
    +
    +
    +   normal
    +  icon-rotate-90
    +  icon-rotate-180
    +  icon-rotate-270
    +  icon-flip-horizontal
    +  icon-flip-vertical + +
    +
    +
    +

    Mirrored and rotated icons inside anchors and buttons

    + + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/3.2.1/whats-new/index.html b/app/bower_components/font-awesome/src/3.2.1/whats-new/index.html new file mode 100644 index 0000000..fe0f554 --- /dev/null +++ b/app/bower_components/font-awesome/src/3.2.1/whats-new/index.html @@ -0,0 +1,433 @@ + + + + + + + + + + What's New + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +
    +

      What's New

    +

    What's New in the latest version — Font Awesome 3.2

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +

    + Font Awesome is always getting a little awesome-er. So here's what's new in the latest version, Font Awesome + 3.2. Have some ideas for new features? + Help contribute. +

    + +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +

    58 New Icons in 3.2

    + Requested by the active community on the Font Awesome GitHub project. +
    +
    +

    SCSS Support

    + A long term solution is now in place for SCSS support. Need SASS? Try sass-convert. +
    +
    +

    Better & Simpler License

    + SIL OFL 1.1 for font, MIT license for code. No more attribution required, but much appreciated. +
    +
    +

    Pixel Perfection at 14px

    + Version 3 was re-created from the ground up to be razor sharp at Bootstrap's default 14px. +
    +
    +

    Font Subsetting

    + Thanks to @grantgordon and @johnsmclay, you can subset to get just the icons you need. +
    +
    +

    Want More Details?

    + Check out the CHANGELOG on the GitHub project to see + what's new and changed. +
    +
    +
    + +
    + +
    +
    +

    Rotated and Flipped Icons

    +
    +   normal
    +   icon-rotate-90
    +   icon-rotate-180
    +   icon-rotate-270
    +   icon-flip-horizontal
    +   icon-flip-vertical +
    +
    +
    +

    Stacked Icons

    +
    + + + + + icon-twitter on icon-check-empty
    + + + + + icon-flag on icon-circle
    + + + + + icon-terminal on icon-sign-blank +
    +
    +
    +

    Better Bulleted Lists

    +
    +
      +
    • New bulleted lists
    • +
    • Fix some old bugs
    • +
    • And deal with arbitrary
    • +
    • Font sizes better
    • +
    +
    +
    +
    +
    + +
    + + +
    + You asked, Font Awesome delivers with 58 shiny new icons in version 3.2. + Want to request new icons? Here's how. +
    + + + + +
    + +
    + +
    +
    + + + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/CNAME b/app/bower_components/font-awesome/src/CNAME new file mode 100644 index 0000000..f131452 --- /dev/null +++ b/app/bower_components/font-awesome/src/CNAME @@ -0,0 +1 @@ +fontawesome.io \ No newline at end of file diff --git a/app/bower_components/font-awesome/src/Makefile b/app/bower_components/font-awesome/src/Makefile new file mode 100644 index 0000000..4cdb734 --- /dev/null +++ b/app/bower_components/font-awesome/src/Makefile @@ -0,0 +1,38 @@ +--- +--- +PATH := ../node_modules/.bin:$(PATH) + +FA_ROOT_DIRECTORY = assets/font-awesome +FA_LESS_DIRECTORY = assets/font-awesome/less +FA_SCSS_DIRECTORY = assets/font-awesome/scss +FA_CSS_DIRECTORY = assets/font-awesome/css + +FA_LESS_MODERN = ${FA_LESS_DIRECTORY}/font-awesome.less +FA_SCSS_MODERN = ${FA_SCSS_DIRECTORY}/font-awesome.scss + +FA_CSS_MODERN = ${FA_CSS_DIRECTORY}/font-awesome.css +FA_CSS_MODERN_MIN = ${FA_CSS_DIRECTORY}/font-awesome.min.css + +SITE_LESS_DIRECTORY = assets/less +SITE_CSS_DIRECTORY = assets/css + +SITE_LESS = ${SITE_LESS_DIRECTORY}/site.less +SITE_CSS_MIN = ${SITE_CSS_DIRECTORY}/site.css + +build: + @echo "Compiling Less files" + @mkdir -p ${FA_CSS_DIRECTORY} + + lessc ${FA_LESS_MODERN} > ${FA_CSS_MODERN} + lessc --yui-compress ${FA_LESS_MODERN} > ${FA_CSS_MODERN_MIN} +# sass ${FA_SCSS_MODERN} ${FA_CSS_MODERN} + + lessc --compress ${SITE_LESS} > ${SITE_CSS_MIN} + cp -r ${FA_ROOT_DIRECTORY}/* ../ + cd assets && mv font-awesome font-awesome-{{ site.fontawesome.version }} && zip -r9 font-awesome-{{ site.fontawesome.version }}.zip font-awesome-{{ site.fontawesome.version }} && mv font-awesome-{{ site.fontawesome.version }} font-awesome + + +default: build + + +.PHONY: build diff --git a/app/bower_components/font-awesome/src/_includes/ads/carbon-dark-vertical.html b/app/bower_components/font-awesome/src/_includes/ads/carbon-dark-vertical.html new file mode 100644 index 0000000..15804e7 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/ads/carbon-dark-vertical.html @@ -0,0 +1 @@ +
    diff --git a/app/bower_components/font-awesome/src/_includes/ads/carbon-light-horizontal.html b/app/bower_components/font-awesome/src/_includes/ads/carbon-light-horizontal.html new file mode 100644 index 0000000..8dcfb61 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/ads/carbon-light-horizontal.html @@ -0,0 +1 @@ +
    diff --git a/app/bower_components/font-awesome/src/_includes/ads/carbon-light-vertical.html b/app/bower_components/font-awesome/src/_includes/ads/carbon-light-vertical.html new file mode 100644 index 0000000..e6fce26 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/ads/carbon-light-vertical.html @@ -0,0 +1 @@ +
    diff --git a/app/bower_components/font-awesome/src/_includes/brand-license.html b/app/bower_components/font-awesome/src/_includes/brand-license.html new file mode 100644 index 0000000..3300183 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/brand-license.html @@ -0,0 +1,4 @@ +
      +
    • All brand icons are trademarks of their respective owners.
    • +
    • The use of these trademarks does not indicate endorsement of the trademark holder by Font Awesome, nor vice versa.
    • +
    diff --git a/app/bower_components/font-awesome/src/_includes/community/getting-support.html b/app/bower_components/font-awesome/src/_includes/community/getting-support.html new file mode 100644 index 0000000..8ae311a --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/community/getting-support.html @@ -0,0 +1,22 @@ +
    + +

    + Having trouble getting Font Awesome up and running? Something not working the way you think it should? I hate that + I don't have time to answer Font Awesome support emails anymore. So here are some things you might wanna do: +

    +
      +
    1. + Make sure you've read the latest version of how to get started. + It's been updated recently to make Font Awesome even easier to use. +
    2. +
    3. + Check out the existing questions tagged as + Font Awesome over on Stack Overflow. Other folks might have had the same question you've had. +
    4. +
    5. + Can't find the answer to your question on Stack Overflow? + Ask a new question, then + send me an email and I might be able to take a look. +
    6. +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/community/project-milestones.html b/app/bower_components/font-awesome/src/_includes/community/project-milestones.html new file mode 100644 index 0000000..ba2a4e4 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/community/project-milestones.html @@ -0,0 +1,7 @@ +
    + +

    + Want to keep up with what's planned for Font Awesome? Check out our + milestones on the GitHub project. +

    +
    diff --git a/app/bower_components/font-awesome/src/_includes/community/reporting-bugs.html b/app/bower_components/font-awesome/src/_includes/community/reporting-bugs.html new file mode 100644 index 0000000..b8fb61e --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/community/reporting-bugs.html @@ -0,0 +1,18 @@ +
    + +

    + Found a problem with Font Awesome? Feel free to submit an issue on the GitHub project. But please keep the following in mind: +

    +
      +
    1. Please be nice. Font Awesome is a happy place.
    2. +
    3. Please search to see if your bug was already reported.
    4. +
    5. + Before opening any issue, please read the generic issue + guidelines, by Nicolas Gallagher. +
    6. +
    7. + After doing everything above, feel free to + submit an issue. +
    8. +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/community/requesting-new-icons.html b/app/bower_components/font-awesome/src/_includes/community/requesting-new-icons.html new file mode 100644 index 0000000..1b723de --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/community/requesting-new-icons.html @@ -0,0 +1,27 @@ +
    + +

    + New icons mostly start as requests by the + Font Awesome community on GitHub. Want to request a new + icon? Here are some things to keep in mind: +

    +
      +
    1. Please be nice. Font Awesome is a happy place.
    2. +
    3. Please search to see if your icon request already exists.
    4. +
    5. + Please and thank you if you include the following: +
        +
      • + Title your new issue + Icon request: icon-name. +
      • +
      • Include a few use cases for your requested icon. How do you plan on using it?
      • +
      • Attach a single color image or two that represent the idea you're going for.
      • +
      +
    6. +
    7. + Concrete objects make good icons, since abstract concepts are, well, abstract. It's harder to make an icon + to represent happiness. It's easier to make a smiley face. +
    8. +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/community/submitting-pull-requests.html b/app/bower_components/font-awesome/src/_includes/community/submitting-pull-requests.html new file mode 100644 index 0000000..de79930 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/community/submitting-pull-requests.html @@ -0,0 +1,12 @@ +
    + + Found a way to solve a bug in Font Awesome? Want to contribute new features? Here are a few things to remember: +
      +
    1. Please submit all pull requests against *-wip branches.
    2. +
    3. All pull requests submitted against master will be sumarily closed and this guide referenced.
    4. +
    5. + After doing everything above, feel free to + submit a pull request. +
    6. +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/bootstrap.html b/app/bower_components/font-awesome/src/_includes/examples/bootstrap.html new file mode 100644 index 0000000..1142b90 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/bootstrap.html @@ -0,0 +1,93 @@ +
    + +
    +
    +

    + + Delete + + Settings +

    +

    + + Font Awesome
    Version {{ site.fontawesome.version }}
    +

    +
    +
    + + + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    +
    +

    + Font Awesome works great with the full range of Bootstrap components. +

    +{% highlight html %} + + Delete + + Settings + + + Font Awesome
    Version {{ site.fontawesome.version }}
    + +
    + + + + +
    + +
    + + +
    +
    + + +
    + + +{% endhighlight %} +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/bordered-pulled.html b/app/bower_components/font-awesome/src/_includes/examples/bordered-pulled.html new file mode 100644 index 0000000..f22ee8e --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/bordered-pulled.html @@ -0,0 +1,21 @@ +
    + +
    +
    +

    + + Use a few styles together and you'll have easy pull quotes or a great introductory article icon. +

    +
    +
    +

    + Use fa-border and pull-right or pull-left for easy pull quotes or + article graphics. +

    +{% highlight html %} + +Use a few styles together and you'll have easy pull quotes or a great introductory article icon. +{% endhighlight %} +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/custom.html b/app/bower_components/font-awesome/src/_includes/examples/custom.html new file mode 100644 index 0000000..2de7ad7 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/custom.html @@ -0,0 +1,16 @@ +
    + +
    +
    +

    Anything you can do with CSS font styles, you can do with Font Awesome.

    +
    +
    +

    Star Ratings (inspired by CSS Tricks)

    +
    + + + +
    +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/fixed-width.html b/app/bower_components/font-awesome/src/_includes/examples/fixed-width.html new file mode 100644 index 0000000..f14e7e4 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/fixed-width.html @@ -0,0 +1,27 @@ +
    + +
    + +
    +

    + Use fa-fw to set icons at a fixed width. Great to use when variable icon widths throw off alignment. + Especially useful in things like nav lists. +

    +{% highlight html %} + +{% endhighlight %} +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/inline.html b/app/bower_components/font-awesome/src/_includes/examples/inline.html new file mode 100644 index 0000000..93f3024 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/inline.html @@ -0,0 +1,17 @@ +
    + +
    +
    +

    + fa-camera-retro +

    +
    +
    +

    Place Font Awesome icons just about anywhere with the <i> tag.

    +{% highlight html %} + fa-camera-retro +{% endhighlight %} +
    Icon classes are echoed via CSS :before.
    +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/larger.html b/app/bower_components/font-awesome/src/_includes/examples/larger.html new file mode 100644 index 0000000..8c5e246 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/larger.html @@ -0,0 +1,29 @@ +
    + +
    +
    +

    fa-camera-retro

    +

    fa-camera-retro

    +

    fa-camera-retro

    +

    fa-camera-retro

    +

    fa-camera-retro

    +
    +
    +

    + To increase icon sizes relative to their container, use the fa-lg (33% increase), fa-2x, + fa-3x, fa-4x, or fa-5x classes. +

    +{% highlight html %} +

    fa-camera-retro

    +

    fa-camera-retro

    +

    fa-camera-retro

    +

    fa-camera-retro

    +

    fa-camera-retro

    +{% endhighlight %} +
    + If your icons are getting chopped off on top and bottom, make sure you have + sufficient line-height. +
    +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/list.html b/app/bower_components/font-awesome/src/_includes/examples/list.html new file mode 100644 index 0000000..5cbc175 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/list.html @@ -0,0 +1,24 @@ +
    + +
    +
    +
      +
    • List icons (like these)
    • +
    • can be used
    • +
    • to easily replace
    • +
    • default bullets in lists
    • +
    +
    +
    +

    Use fa-ul and fa-li to easily replace default bullets in unordered lists.

    +{% highlight html %} +
      +
    • List icons (like these)
    • +
    • can be used
    • +
    • to replace
    • +
    • default bullets in lists
    • +
    +{% endhighlight %} +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/rotated-flipped.html b/app/bower_components/font-awesome/src/_includes/examples/rotated-flipped.html new file mode 100644 index 0000000..ff55f2c --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/rotated-flipped.html @@ -0,0 +1,28 @@ +
    + +
    +
    +

    +   normal
    +   fa-rotate-90
    +   fa-rotate-180
    +   fa-rotate-270
    +   fa-flip-horizontal
    +   fa-flip-vertical +

    +
    +
    +

    + To arbitrarily rotate and flip icons, use the fa-rotate-* and fa-flip-* classes. +

    +{% highlight html %} +  normal
    +  fa-rotate-90
    +  fa-rotate-180
    +  fa-rotate-270
    +  fa-flip-horizontal
    +  icon-flip-vertical +{% endhighlight %} +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/spinning.html b/app/bower_components/font-awesome/src/_includes/examples/spinning.html new file mode 100644 index 0000000..4bdb3d0 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/spinning.html @@ -0,0 +1,26 @@ +
    + +
    +
    +

    + + + +

    +
    +
    +

    + Use the fa-spin class to get any icon to rotate. Works well with fa-spinner, + fa-refresh, and fa-cog. +

    +{% highlight html %} + + + +{% endhighlight %} +

    + CSS3 animations aren't supported in IE8 - IE9. +

    +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/examples/stacked.html b/app/bower_components/font-awesome/src/_includes/examples/stacked.html new file mode 100644 index 0000000..0a34c5c --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/examples/stacked.html @@ -0,0 +1,59 @@ +
    + +
    +
    +
    + + + + + fa-twitter on fa-square-o
    + + + + + fa-flag on fa-circle
    + + + + + fa-terminal on fa-square
    + + + + + fa-ban on fa-camera +
    +
    +
    +

    + To stack multiple icons, use the fa-stack class on the parent, the fa-stack-1x + for the regularly sized icon, and fa-stack-2x for the larger icon. fa-inverse + can be used as an alternative icon color. You can even throw larger icon classes on the parent + to get further control of sizing. +

    +{% highlight html %} + + + + +fa-twitter on fa-square-o
    + + + + +fa-flag on fa-circle
    + + + + +fa-terminal on fa-square
    + + + + +fa-ban on fa-camera +{% endhighlight %} +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/footer.html b/app/bower_components/font-awesome/src/_includes/footer.html new file mode 100644 index 0000000..7cdc852 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/footer.html @@ -0,0 +1,24 @@ + diff --git a/app/bower_components/font-awesome/src/_includes/icons/brand.html b/app/bower_components/font-awesome/src/_includes/icons/brand.html new file mode 100644 index 0000000..98bc018 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/brand.html @@ -0,0 +1,15 @@ +
    + + +
    + {% include brand-license.html %} +
    + +
    + {% assign icons_brand = icons | expand_aliases | category:"Brand Icons" | sort_by:'class' %} + + {% for icon in icons_brand %} + + {% endfor %} +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/icons/currency.html b/app/bower_components/font-awesome/src/_includes/icons/currency.html new file mode 100644 index 0000000..6f6942c --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/currency.html @@ -0,0 +1,12 @@ +
    + + +
    + {% assign icons_currency = icons | expand_aliases | category:"Currency Icons" | sort_by:'class' %} + + {% for icon in icons_currency %} + + {% endfor %} +
    + +
    diff --git a/app/bower_components/font-awesome/src/_includes/icons/directional.html b/app/bower_components/font-awesome/src/_includes/icons/directional.html new file mode 100644 index 0000000..d34b683 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/directional.html @@ -0,0 +1,12 @@ +
    + + +
    + {% assign icons_directional = icons | expand_aliases | category:"Directional Icons" | sort_by:'class' %} + + {% for icon in icons_directional %} + + {% endfor %} +
    + +
    diff --git a/app/bower_components/font-awesome/src/_includes/icons/form-control.html b/app/bower_components/font-awesome/src/_includes/icons/form-control.html new file mode 100644 index 0000000..98fa0fa --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/form-control.html @@ -0,0 +1,11 @@ +
    + + +
    + {% assign icons_form_control = icons | expand_aliases | category:"Form Control Icons" | sort_by:'class' %} + + {% for icon in icons_form_control %} + + {% endfor %} +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/icons/medical.html b/app/bower_components/font-awesome/src/_includes/icons/medical.html new file mode 100644 index 0000000..9fbe1e9 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/medical.html @@ -0,0 +1,12 @@ +
    + + +
    + {% assign icons_medical = icons | expand_aliases | category:"Medical Icons" | sort_by:'class' %} + + {% for icon in icons_medical %} + + {% endfor %} +
    + +
    diff --git a/app/bower_components/font-awesome/src/_includes/icons/new.html b/app/bower_components/font-awesome/src/_includes/icons/new.html new file mode 100644 index 0000000..5953916 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/new.html @@ -0,0 +1,18 @@ +<{% if page.navbar_active == "icons" %}div{% else %}section{% endif %} id="new"> + + {% if page.navbar_active != "icons" %} +
    + You asked, Font Awesome delivers with {{ icons | version:site.fontawesome.minor_version | size }} shiny new icons in version {{ site.fontawesome.minor_version }}. + Want to request new icons? Here's how. +
    + {% endif %} + +
    + {% assign icons_new = icons | expand_aliases | version:site.fontawesome.minor_version %} + + {% for icon in icons_new %} + + {% endfor %} +
    + + diff --git a/app/bower_components/font-awesome/src/_includes/icons/text-editor.html b/app/bower_components/font-awesome/src/_includes/icons/text-editor.html new file mode 100644 index 0000000..4e2ea03 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/text-editor.html @@ -0,0 +1,12 @@ +
    + + +
    + {% assign icons_text_editor = icons | expand_aliases | category:"Text Editor Icons" | sort_by:'class' %} + + {% for icon in icons_text_editor %} + + {% endfor %} +
    + +
    diff --git a/app/bower_components/font-awesome/src/_includes/icons/video-player.html b/app/bower_components/font-awesome/src/_includes/icons/video-player.html new file mode 100644 index 0000000..b06679c --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/video-player.html @@ -0,0 +1,12 @@ +
    + + +
    + {% assign icons_video_player = icons | expand_aliases | category:"Video Player Icons" | sort_by:'class' %} + + {% for icon in icons_video_player %} + + {% endfor %} +
    + +
    diff --git a/app/bower_components/font-awesome/src/_includes/icons/web-application.html b/app/bower_components/font-awesome/src/_includes/icons/web-application.html new file mode 100644 index 0000000..5b37b46 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/icons/web-application.html @@ -0,0 +1,12 @@ +
    + + +
    + {% assign icons_web_application = icons | expand_aliases | category:"Web Application Icons" | sort_by:'class' %} + + {% for icon in icons_web_application %} + + {% endfor %} +
    + +
    diff --git a/app/bower_components/font-awesome/src/_includes/jumbotron-carousel.html b/app/bower_components/font-awesome/src/_includes/jumbotron-carousel.html new file mode 100644 index 0000000..49ef1cf --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/jumbotron-carousel.html @@ -0,0 +1,52 @@ + diff --git a/app/bower_components/font-awesome/src/_includes/jumbotron.html b/app/bower_components/font-awesome/src/_includes/jumbotron.html new file mode 100644 index 0000000..747b32d --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/jumbotron.html @@ -0,0 +1,6 @@ +
    +
    +

    {{ jumbotron_h1 }}

    +

    {{ jumbotron_p }}

    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/license-code.less b/app/bower_components/font-awesome/src/_includes/license-code.less new file mode 100644 index 0000000..7e503a8 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/license-code.less @@ -0,0 +1,4 @@ +/*! + * Font Awesome {{ site.fontawesome.version }} by @{{ site.fontawesome.author.twitter }} - {{ site.fontawesome.url }} - @{{ site.fontawesome.twitter }} + * License - {{ site.fontawesome.url }}/license (Font: {{ site.fontawesome.license.font.version }}, CSS: {{ site.fontawesome.license.code.version }}) + */ \ No newline at end of file diff --git a/app/bower_components/font-awesome/src/_includes/navbar.html b/app/bower_components/font-awesome/src/_includes/navbar.html new file mode 100644 index 0000000..ae5696f --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/navbar.html @@ -0,0 +1,69 @@ + diff --git a/app/bower_components/font-awesome/src/_includes/new-features.html b/app/bower_components/font-awesome/src/_includes/new-features.html new file mode 100644 index 0000000..d357dd4 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/new-features.html @@ -0,0 +1,37 @@ +{% capture stripe_ad_content %} +

    + Font Awesome is always getting a little awesome-er. So here's what's new in the latest version, Font Awesome + {{ site.fontawesome.minor_version }}. Have some ideas for new features? + Help contribute. +

    +{% endcapture %} +{% include stripe-ad.html %} + +
    +
    +
    +

    Completely Rewritten

    + Everything re-written from the ground up for speed and simplicity. +
    +
    +

    CSS Best Practices

    + New icon base class allows simpler CSS, faster rendering, and easier control. +
    +
    +

    New Icon Names

    + Icons have been renamed to improve consistency and predictability. +
    +
    +

    Bootstrap 3

    + Font Awesome {{ site.fontawesome.minor_version }} is fully tested and compatible with Bootstrap 3. +
    +
    +

    Better Compatibility

    + Font Awesome is now more compatible with all web frameworks, including Foundation. +
    +
    +

    {{ icons | version:site.fontawesome.minor_version | size }} New Icons in {{ site.fontawesome.minor_version }}

    + Requested by the active community on the Font Awesome GitHub project. +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/new-naming.html b/app/bower_components/font-awesome/src/_includes/new-naming.html new file mode 100644 index 0000000..a1d574d --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/new-naming.html @@ -0,0 +1,157 @@ +
    + +

    fa-[name]-[shape]-[o]-[direction]

    +

    + A desire for better icon naming consistency and predictability are at the heart + of the changes in naming conventions. Once you know the name of the base icon shape, you should be able to predict + the names of variants. +

    +
    +
    +

    fa-*

    +

    Solid icons as the base variant

    +
      +
    • + + fa-bookmark +
    • +
    • + + fa-comment +
    • +
    • + + fa-folder +
    • +
    +
    +
    +

    *-o

    +

    Outlined version of previous modifier

    +
      +
    • + + fa-bookmark-o +
    • +
    • + + fa-comment-o +
    • +
    • + + fa-folder-o +
    • +
    +
    +
    +

    *-circle

    +

    Circle under previous modifier

    +
      +
    • + + fa-check-circle +
    • +
    • + + fa-exclamation-circle +
    • +
    • + + fa-plus-circle +
    • +
    +
    +
    +

    *-square

    +

    Square under previous modifier

    +
      +
    • + + fa-check-square +
    • +
    • + + fa-twitter-square +
    • +
    • + + fa-plus-square +
    • +
    +
    +
    +

    *-right, *-up, etc.

    +

    Directional modifier always at the end

    +
      +
    • + + fa-arrow-right +
    • +
    • + + fa-arrow-circle-right +
    • +
    • + + fa-angle-double-right +
    • +
    +
    +
    +

    *-alt

    +

    Alternative to the original

    +
      +
    • + + fa-unlock-alt +
    • +
    • + + fa-list-alt +
    • +
    • + + fa-github-alt +
    • +
    +
    +
    +

    *-h, *-v

    +

    Horizontal & vertical modifiers

    +
      +
    • + + fa-arrows-v +
    • +
    • + + fa-arrows-h +
    • +
    • + + fa-ellipsis-v +
    • +
    +
    +
    +

    Combine 'em up...

    +

    Consistent when strung together

    +
      +
    • + + fa-arrow-circle-o-right +
    • +
    • + + fa-caret-square-o-right +
    • +
    • + + fa-hand-o-right +
    • +
    +
    + +
    + +
    diff --git a/app/bower_components/font-awesome/src/_includes/new-upgrading.html b/app/bower_components/font-awesome/src/_includes/new-upgrading.html new file mode 100644 index 0000000..5d2d88d --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/new-upgrading.html @@ -0,0 +1,10 @@ +
    + +

    + For complete documentation of the syntax changes in {{ site.fontawesome.minor_version }}, check out the + examples. For the changes to icon names, + @gtagliala has put together a + great wiki page that + documents all the changes. +

    +
    diff --git a/app/bower_components/font-awesome/src/_includes/stripe-ad.html b/app/bower_components/font-awesome/src/_includes/stripe-ad.html new file mode 100644 index 0000000..8ff6bbf --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/stripe-ad.html @@ -0,0 +1,6 @@ +
    +
    + {% include ads/carbon-light-horizontal.html %} + {{ stripe_ad_content }} +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/stripe-social.html b/app/bower_components/font-awesome/src/_includes/stripe-social.html new file mode 100644 index 0000000..a8c0a54 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/stripe-social.html @@ -0,0 +1,18 @@ +
    +
    + +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/tell-me-thanks.html b/app/bower_components/font-awesome/src/_includes/tell-me-thanks.html new file mode 100644 index 0000000..679c884 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/tell-me-thanks.html @@ -0,0 +1,22 @@ +
    + +

    + Hopefully you think Font Awesome is awesome. I've put hundreds of hours into the project to give back to the + open source community. If you'd like, here are a couple of ways you can tell me thanks for all my hard work. +

    +
    +
    +

    Tip me on Gittip

    +

    + Gittip is a great way to let developers know you appreciate their work. +

    +
    +
    +

    My Amazon Wish List

    +

    + Or pick something straight + from my wish list. Gift cards are great. +

    +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped-inside-anchor.html b/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped-inside-anchor.html new file mode 100644 index 0000000..111f1a3 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped-inside-anchor.html @@ -0,0 +1,6 @@ +  normal
    +  fa-rotate-90
    +  fa-rotate-180
    +  fa-rotate-270
    +  fa-flip-horizontal
    +  fa-flip-vertical diff --git a/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped-inside-btn.html b/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped-inside-btn.html new file mode 100644 index 0000000..fc0d788 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped-inside-btn.html @@ -0,0 +1,6 @@ +  normal
    +  fa-rotate-90
    +  fa-rotate-180
    +  fa-rotate-270
    +  fa-flip-horizontal
    +  fa-flip-vertical diff --git a/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped.html b/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped.html new file mode 100644 index 0000000..13a83f4 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/tests/rotated-flipped.html @@ -0,0 +1,6 @@ +  normal
    +  fa-rotate-90
    +  fa-rotate-180
    +  fa-rotate-270
    +  fa-flip-horizontal
    +  fa-flip-vertical diff --git a/app/bower_components/font-awesome/src/_includes/tests/stacked-inside-anchor.html b/app/bower_components/font-awesome/src/_includes/tests/stacked-inside-anchor.html new file mode 100644 index 0000000..58a2dc8 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/tests/stacked-inside-anchor.html @@ -0,0 +1,69 @@ +

    + + + + + + Twitter Icon + + + + + + + Facebook Icon + + + + + + + GitHub Icon + +

    +

    + + + + + + Twitter Icon + + + + + + + Facebook Icon + + + + + + + GitHub Icon + +

    +

    + + + + + + Twitter Icon + + + + + + + Facebook Icon + + + + + + + GitHub Icon + +

    \ No newline at end of file diff --git a/app/bower_components/font-awesome/src/_includes/tests/stacked.html b/app/bower_components/font-awesome/src/_includes/tests/stacked.html new file mode 100644 index 0000000..9a2ebb8 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/tests/stacked.html @@ -0,0 +1,58 @@ + + + + +
    Center +
    +
    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    +

    + + + + + Twitter Icon + + + + + Facebook Icon + + + + + GitHub Icon +

    \ No newline at end of file diff --git a/app/bower_components/font-awesome/src/_includes/thanks-to.html b/app/bower_components/font-awesome/src/_includes/thanks-to.html new file mode 100644 index 0000000..b442a62 --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/thanks-to.html @@ -0,0 +1,26 @@ +
    + +
    +
    +

    + Thanks to @robmadole and + @supercodepoet for icon design + review, advice, some Jekyll help, and being all around badass coders. +

    +
    +
    +

    + HUGE thanks to @gtagliala for doing such a fantastic job managing + pull requests and issues on the Font Awesome + GitHub project. +

    +
    +
    +

    + Thanks to  MaxCDN for providing the excellent + BootstrapCDN, the fastest and easiest way to + get started with Font Awesome. +

    +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_includes/why.html b/app/bower_components/font-awesome/src/_includes/why.html new file mode 100644 index 0000000..5ff610a --- /dev/null +++ b/app/bower_components/font-awesome/src/_includes/why.html @@ -0,0 +1,41 @@ +
    +
    +
    +

    One Font, {{ icons | size }} Icons

    + In a single collection, Font Awesome is a pictographic language of web-related actions. +
    +
    +

    No JavaScript Required

    + Fewer compatibility concerns because Font Awesome doesn't require JavaScript. +
    +
    +

    Infinite Scalability

    + Scalable vector graphics means every icon looks awesome at any size. +
    +
    +

    Free, as in Speech

    + Font Awesome is completely free for commercial use. Check out the license. +
    +
    +

    CSS Control

    + Easily style icon color, size, shadow, and anything that's possible with CSS. +
    +
    +

    Perfect on Retina Displays

    + Font Awesome icons are vectors, which mean they're gorgeous on high-resolution displays. +
    +
    +

    Made for Bootstrap

    + Designed from scratch to be fully compatible with Bootstrap {{ site.bootstrap.version }}. +
    +
    +

    Desktop Friendly

    + To use on the desktop or for a complete set of vectors, + check out the cheatsheet. +
    +
    +

    Screen Reader Compatible

    + Font Awesome won't trip up screen readers, unlike other icon fonts. +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_layouts/base.html b/app/bower_components/font-awesome/src/_layouts/base.html new file mode 100644 index 0000000..55c547a --- /dev/null +++ b/app/bower_components/font-awesome/src/_layouts/base.html @@ -0,0 +1,55 @@ + + + + + + + + + + + {% if page.title %}{{ page.title }}{% endif %} + + + + + + + + + + + + + + +
    + {% include navbar.html %} + + {{ content }} +
    +{% include footer.html %} + + + + + + + + + diff --git a/app/bower_components/font-awesome/src/_layouts/icon.html b/app/bower_components/font-awesome/src/_layouts/icon.html new file mode 100644 index 0000000..6e5bf21 --- /dev/null +++ b/app/bower_components/font-awesome/src/_layouts/icon.html @@ -0,0 +1,62 @@ +--- +layout: base +title_suffix: Font Awesome Icons +relative_path: ../../ +--- +
    +
    +
    +    + +    +    +    +   + + +
    +

    + fa-{{ page.icon.id }} + + · + Unicode: {{ page.icon.unicode }} · + Created: v{{ page.icon.created }} · + Categories: + {% for category in page.icon.categories %} + {{ category }}{% unless forloop.last %},{% endunless %} + {% endfor %} + {% assign icon_alias_count = page.icon.aliases | size %} + {% if icon_alias_count > 0 %} + · Aliases: + {% for alias in page.icon.aliases %} + fa-{{ alias }}{% unless forloop.last %},{% endunless %} + {% endfor %} + {% endif %} + +

    +
    +
    + + +
    +
    +
    +
    +

    After you get up and running, you can place Font Awesome icons just about anywhere with the <i> tag:

    +
    +
    + fa-{{ page.icon.id }} +
    +
    +{% highlight html %} + fa-{{ page.icon.id }} +{% endhighlight %} +
    +
    Looking for more? Check out the examples.
    +
    +
    +
    {% include ads/carbon-light-vertical.html %}
    +
    +
    +
    +
    diff --git a/app/bower_components/font-awesome/src/_plugins/icon_page_generator.rb b/app/bower_components/font-awesome/src/_plugins/icon_page_generator.rb new file mode 100644 index 0000000..51475e5 --- /dev/null +++ b/app/bower_components/font-awesome/src/_plugins/icon_page_generator.rb @@ -0,0 +1,46 @@ +## +# Create individual pages for each icon in the FontAwesome set + +require 'yaml' +require 'debugger' + +module Jekyll + + class IconPage < Page + + ## + # Take a single icon and render a page for it. + + def initialize(site, base, dir, icon) + @site = site + @base = base + @dir = dir + @name = "#{icon.id}.html" + @icon = icon + + self.process(@name) + + self.read_yaml(File.join(base, site.config['layouts']), site.config['icon_layout']) + + self.data['icon'] = icon + self.data['title'] = "icon-#{icon.id}: " + self.data['title_suffix'] + end + + end + + class IconGenerator < Generator + + ## + # Iterate over every described icon in a YAML file and create a page for it + + safe true + + def generate(site) + site.icons.each do |icon| + site.pages << IconPage.new(site, site.source, site.config['icon_destination'], icon) + end + end + + end + +end diff --git a/app/bower_components/font-awesome/src/_plugins/site.rb b/app/bower_components/font-awesome/src/_plugins/site.rb new file mode 100644 index 0000000..a6a74b7 --- /dev/null +++ b/app/bower_components/font-awesome/src/_plugins/site.rb @@ -0,0 +1,142 @@ +## +# Provide an icons attribute on the site object + +require 'yaml' +require 'forwardable' + +module Jekyll + + class Icon + + attr_reader :name, :id, :unicode, :created, :categories + + def initialize(icon_object) + @icon_object = icon_object + + # Class name used in CSS and HTML + @icon_object['class'] = icon_object['id'] + # Normalize the aliases + @icon_object['aliases'] ||= [] + + @name = icon_object['name'] + @id = icon_object['id'] + @class = icon_object['class'] + @aliases = icon_object['aliases'] + @unicode = icon_object['unicode'] + @created = icon_object['created'] + @categories = icon_object['categories'] + end + + def to_liquid + return @icon_object + end + + end + + class IconList + ## + # A list of icons + # + include Enumerable + extend Forwardable + + def_delegators :@icon_array, :each, :<< + + def initialize(icon_array) + @original_icon_array = icon_array + @icon_array = [] + + icon_array.each { |icon_object| + @icon_array << Icon.new(icon_object) + } + end + + def [](k) + @icon_array[k] + end + + def to_liquid + @original_icon_array + end + + end + + module IconFilters + def expand_aliases(icons) + expanded = [] + + icons.each { |icon| + # Remove the aliases since we are expanding them + expanded << icon.reject{ |k| k == 'aliases'} + + icon['aliases'].each { |alias_id| + alias_icon = expanded[-1].dup + alias_icon['class'] = alias_id + alias_icon['alias_of'] = icon + + expanded << alias_icon + } + } + + return expanded + end + + def category(icons, cat) + icons.select { |icon| icon['categories'].include?(cat) } + end + + def version(icons, version) + icons.select { |icon| icon['created'] == version } + end + + def sort_by(icons, sort_key) + icons.sort_by! { |icon| icon[sort_key] } + end + end + + Liquid::Template.register_filter(IconFilters) + + class Site + + attr_reader :icons + + def process + self.reset_icons + self.reset + self.read + self.generate + self.render + self.cleanup + self.write + + self.build + end + + ## + # Reads the YAML file that stores all data about icons + def reset_icons + @icons = IconList.new(YAML.load_file(self.config['icon_meta'])['icons']) + end + + ## + # After generation, runs a build of Font-Awesome + def build + system("make build", :chdir => self.config['destination'], :out => :err) + end + + def site_payload + { + "site" => self.config.merge({ + "time" => self.time, + "posts" => self.posts.sort { |a, b| b <=> a }, + "pages" => self.pages, + "html_pages" => self.pages.reject { |page| !page.html? }, + "categories" => post_attr_hash('categories'), + "tags" => post_attr_hash('tags')}), + "icons" => @icons, + } + end + + end + +end diff --git a/app/bower_components/font-awesome/src/assets/css/prettify.css b/app/bower_components/font-awesome/src/assets/css/prettify.css new file mode 100755 index 0000000..aedd8d1 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/css/prettify.css @@ -0,0 +1,30 @@ +.com { color: #93a1a1; } +.lit { color: #195f91; } +.pun, .opn, .clo { color: #93a1a1; } +.fun { color: #dc322f; } +.str, .atv { color: #D14; } +.kwd, .linenums .tag { color: #1e347b; } +.typ, .atn, .dec, .var { color: teal; } +.pln { color: #48484c; } + +.prettyprint { + padding: 8px; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} +.prettyprint.linenums { + -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; + -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; + box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin: 0 0 0 33px; /* IE indents via margin-left */ +} +ol.linenums li { + padding-left: 12px; + color: #bebec5; + line-height: 18px; + text-shadow: 0 1px 0 #fff; +} \ No newline at end of file diff --git a/app/bower_components/font-awesome/src/assets/css/pygments.css b/app/bower_components/font-awesome/src/assets/css/pygments.css new file mode 100644 index 0000000..5af20ee --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/css/pygments.css @@ -0,0 +1,71 @@ +.hll { background-color: #ffffcc } +/*{ background: #f0f3f3; }*/ +.c { color: #999; } /* Comment */ +.err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.k { color: #006699; } /* Keyword */ +.o { color: #555555 } /* Operator */ +.cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.cp { color: #009999 } /* Comment.Preproc */ +.c1 { color: #999; } /* Comment.Single */ +.cs { color: #999; } /* Comment.Special */ +.gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.ge { font-style: italic } /* Generic.Emph */ +.gr { color: #FF0000 } /* Generic.Error */ +.gh { color: #003300; } /* Generic.Heading */ +.gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.go { color: #AAAAAA } /* Generic.Output */ +.gp { color: #000099; } /* Generic.Prompt */ +.gs { } /* Generic.Strong */ +.gu { color: #003300; } /* Generic.Subheading */ +.gt { color: #99CC66 } /* Generic.Traceback */ +.kc { color: #006699; } /* Keyword.Constant */ +.kd { color: #006699; } /* Keyword.Declaration */ +.kn { color: #006699; } /* Keyword.Namespace */ +.kp { color: #006699 } /* Keyword.Pseudo */ +.kr { color: #006699; } /* Keyword.Reserved */ +.kt { color: #007788; } /* Keyword.Type */ +.m { color: #FF6600 } /* Literal.Number */ +.s { color: #d44950 } /* Literal.String */ +.na { color: #4f9fcf } /* Name.Attribute */ +.nb { color: #336666 } /* Name.Builtin */ +.nc { color: #00AA88; } /* Name.Class */ +.no { color: #336600 } /* Name.Constant */ +.nd { color: #9999FF } /* Name.Decorator */ +.ni { color: #999999; } /* Name.Entity */ +.ne { color: #CC0000; } /* Name.Exception */ +.nf { color: #CC00FF } /* Name.Function */ +.nl { color: #9999FF } /* Name.Label */ +.nn { color: #00CCFF; } /* Name.Namespace */ +.nt { color: #2f6f9f; } /* Name.Tag */ +.nv { color: #003333 } /* Name.Variable */ +.ow { color: #000000; } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #FF6600 } /* Literal.Number.Float */ +.mh { color: #FF6600 } /* Literal.Number.Hex */ +.mi { color: #FF6600 } /* Literal.Number.Integer */ +.mo { color: #FF6600 } /* Literal.Number.Oct */ +.sb { color: #CC3300 } /* Literal.String.Backtick */ +.sc { color: #CC3300 } /* Literal.String.Char */ +.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.s2 { color: #CC3300 } /* Literal.String.Double */ +.se { color: #CC3300; } /* Literal.String.Escape */ +.sh { color: #CC3300 } /* Literal.String.Heredoc */ +.si { color: #AA0000 } /* Literal.String.Interpol */ +.sx { color: #CC3300 } /* Literal.String.Other */ +.sr { color: #33AAAA } /* Literal.String.Regex */ +.s1 { color: #CC3300 } /* Literal.String.Single */ +.ss { color: #FFCC33 } /* Literal.String.Symbol */ +.bp { color: #336666 } /* Name.Builtin.Pseudo */ +.vc { color: #003333 } /* Name.Variable.Class */ +.vg { color: #003333 } /* Name.Variable.Global */ +.vi { color: #003333 } /* Name.Variable.Instance */ +.il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.css .o, +.css .o + .nt, +.css .nt + .nt { color: #999; } + +pre { + background-color: #fafafa; + padding: 8px 15px; +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/fonts/FontAwesome.otf b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 0000000..8b0f54e Binary files /dev/null and b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/FontAwesome.otf differ diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.eot b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.eot new file mode 100755 index 0000000..7c79c6a Binary files /dev/null and b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.eot differ diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.svg b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.svg new file mode 100755 index 0000000..45fdf33 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.ttf b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100755 index 0000000..e89738d Binary files /dev/null and b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.ttf differ diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.woff b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.woff new file mode 100755 index 0000000..8c1748a Binary files /dev/null and b/app/bower_components/font-awesome/src/assets/font-awesome/fonts/fontawesome-webfont.woff differ diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/bordered-pulled.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/bordered-pulled.less new file mode 100644 index 0000000..7b5bf77 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/bordered-pulled.less @@ -0,0 +1,19 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/less/core.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/core.less new file mode 100644 index 0000000..33b20d6 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/core.less @@ -0,0 +1,15 @@ +--- +--- + +// Base Class Definition +// ------------------------- + +.@{fa-css-prefix} { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/fixed-width.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/fixed-width.less new file mode 100644 index 0000000..f3b657b --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/fixed-width.less @@ -0,0 +1,9 @@ +--- +--- + +// Fixed Width Icons +// ------------------------- +.@{fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/font-awesome.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/font-awesome.less new file mode 100644 index 0000000..28bfc29 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/font-awesome.less @@ -0,0 +1,16 @@ +--- +--- +{% include license-code.less %} + +@import "variables"; +@import "mixins"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "spinning"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/icons.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/icons.less new file mode 100644 index 0000000..1d29b69 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/icons.less @@ -0,0 +1,7 @@ +--- +--- +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +{% for icon in icons %}{% for alias in icon.aliases %} +.@{fa-css-prefix}-{{ alias }}:before,{% endfor %} +.@{fa-css-prefix}-{{ icon.id }}:before { content: @fa-var-{{ icon.id }}; }{% endfor %} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/larger.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/larger.less new file mode 100644 index 0000000..472643e --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/larger.less @@ -0,0 +1,16 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/less/list.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/list.less new file mode 100644 index 0000000..ffcae1d --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/list.less @@ -0,0 +1,22 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/less/mixins.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/mixins.less new file mode 100644 index 0000000..25ca842 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/mixins.less @@ -0,0 +1,22 @@ +--- +--- +// Mixins +// -------------------------- + +.fa-icon-rotate(@degrees, @rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); + -webkit-transform: rotate(@degrees); + -moz-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); + -o-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); + -moz-transform: scale(@horiz, @vert); + -ms-transform: scale(@horiz, @vert); + -o-transform: scale(@horiz, @vert); + transform: scale(@horiz, @vert); +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/path.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/path.less new file mode 100644 index 0000000..c5a6912 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/path.less @@ -0,0 +1,14 @@ +/* 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.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/app/bower_components/font-awesome/src/assets/font-awesome/less/rotated-flipped.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/rotated-flipped.less new file mode 100644 index 0000000..5bfad90 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/rotated-flipped.less @@ -0,0 +1,12 @@ +--- +--- + +// 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); } diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/spinning.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/spinning.less new file mode 100644 index 0000000..2f3ad63 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/spinning.less @@ -0,0 +1,33 @@ +--- +--- + +// Spinning Icons +// -------------------------- + +.@{fa-css-prefix}-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-moz-keyframes spin { + 0% { -moz-transform: rotate(0deg); } + 100% { -moz-transform: rotate(359deg); } +} +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(359deg); } +} +@-o-keyframes spin { + 0% { -o-transform: rotate(0deg); } + 100% { -o-transform: rotate(359deg); } +} +@-ms-keyframes spin { + 0% { -ms-transform: rotate(0deg); } + 100% { -ms-transform: rotate(359deg); } +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/less/stacked.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/stacked.less new file mode 100644 index 0000000..2a1e418 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/stacked.less @@ -0,0 +1,23 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/less/variables.less b/app/bower_components/font-awesome/src/assets/font-awesome/less/variables.less new file mode 100644 index 0000000..c19c461 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/less/variables.less @@ -0,0 +1,15 @@ +--- +--- +// Variables +// -------------------------- + +@fa-font-path: "../fonts"; +//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/{{site.fontawesome.version}}/fonts"; // for referencing Bootstrap CDN font files directly +@fa-css-prefix: {{ site.fontawesome.css_prefix }}; +@fa-version: "{{ site.fontawesome.version }}"; +@fa-border-color: #eee; +@fa-inverse: #fff; +@fa-li-width: (30em / 14); + +{% for icon in icons %}@fa-var-{{ icon.id }}: "\{{ icon.unicode }}"; +{% endfor %} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/_bordered-pulled.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_bordered-pulled.scss new file mode 100644 index 0000000..39e3a1b --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_bordered-pulled.scss @@ -0,0 +1,19 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/scss/_core.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_core.scss new file mode 100644 index 0000000..50dfbd3 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_core.scss @@ -0,0 +1,15 @@ +--- +--- + +// Base Class Definition +// ------------------------- + +.#{$fa-css-prefix} { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/_fixed-width.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_fixed-width.scss new file mode 100644 index 0000000..cfb1454 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_fixed-width.scss @@ -0,0 +1,9 @@ +--- +--- + +// Fixed Width Icons +// ------------------------- +.#{$fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/_icons.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_icons.scss new file mode 100644 index 0000000..23128aa --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_icons.scss @@ -0,0 +1,7 @@ +--- +--- +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +{% for icon in icons %}{% for alias in icon.aliases %} +.#{$fa-css-prefix}-{{ alias }}:before,{% endfor %} +.#{$fa-css-prefix}-{{ icon.id }}:before { content: $fa-var-{{ icon.id }}; }{% endfor %} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/_larger.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_larger.scss new file mode 100644 index 0000000..4035723 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_larger.scss @@ -0,0 +1,16 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/scss/_list.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_list.scss new file mode 100644 index 0000000..1c64982 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_list.scss @@ -0,0 +1,22 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/scss/_mixins.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_mixins.scss new file mode 100644 index 0000000..b25e717 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_mixins.scss @@ -0,0 +1,22 @@ +--- +--- +// Mixins +// -------------------------- + +@mixin fa-icon-rotate($degrees, $rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: rotate($degrees); + -moz-transform: rotate($degrees); + -ms-transform: rotate($degrees); + -o-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); + -moz-transform: scale($horiz, $vert); + -ms-transform: scale($horiz, $vert); + -o-transform: scale($horiz, $vert); + transform: scale($horiz, $vert); +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/_path.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_path.scss new file mode 100644 index 0000000..fd21c35 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_path.scss @@ -0,0 +1,14 @@ +/* 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.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/app/bower_components/font-awesome/src/assets/font-awesome/scss/_rotated-flipped.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_rotated-flipped.scss new file mode 100644 index 0000000..2435021 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_rotated-flipped.scss @@ -0,0 +1,12 @@ +--- +--- + +// 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); } diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/_spinning.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_spinning.scss new file mode 100644 index 0000000..b7fa99c --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_spinning.scss @@ -0,0 +1,33 @@ +--- +--- + +// Spinning Icons +// -------------------------- + +.#{$fa-css-prefix}-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-moz-keyframes spin { + 0% { -moz-transform: rotate(0deg); } + 100% { -moz-transform: rotate(359deg); } +} +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(359deg); } +} +@-o-keyframes spin { + 0% { -o-transform: rotate(0deg); } + 100% { -o-transform: rotate(359deg); } +} +@-ms-keyframes spin { + 0% { -ms-transform: rotate(0deg); } + 100% { -ms-transform: rotate(359deg); } +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/_stacked.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_stacked.scss new file mode 100644 index 0000000..01c9443 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_stacked.scss @@ -0,0 +1,23 @@ +--- +--- + +// 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/app/bower_components/font-awesome/src/assets/font-awesome/scss/_variables.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_variables.scss new file mode 100644 index 0000000..2ddd8bb --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/_variables.scss @@ -0,0 +1,15 @@ +--- +--- +// Variables +// -------------------------- + +$fa-font-path: "../fonts" !default; +//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/{{site.fontawesome.version}}/fonts" !default; // for referencing Bootstrap CDN font files directly +$fa-css-prefix: {{ site.fontawesome.css_prefix }} !default; +$fa-version: "{{ site.fontawesome.version }}" !default; +$fa-border-color: #eee !default; +$fa-inverse: #fff !default; +$fa-li-width: (30em / 14) !default; + +{% for icon in icons %}$fa-var-{{ icon.id }}: "\{{ icon.unicode }}"; +{% endfor %} diff --git a/app/bower_components/font-awesome/src/assets/font-awesome/scss/font-awesome.scss b/app/bower_components/font-awesome/src/assets/font-awesome/scss/font-awesome.scss new file mode 100644 index 0000000..28bfc29 --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/font-awesome/scss/font-awesome.scss @@ -0,0 +1,16 @@ +--- +--- +{% include license-code.less %} + +@import "variables"; +@import "mixins"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "spinning"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; diff --git a/app/bower_components/font-awesome/src/assets/ico/favicon.ico b/app/bower_components/font-awesome/src/assets/ico/favicon.ico new file mode 100644 index 0000000..742243e Binary files /dev/null and b/app/bower_components/font-awesome/src/assets/ico/favicon.ico differ diff --git a/app/bower_components/font-awesome/src/assets/js/ZeroClipboard-1.1.7.min.js b/app/bower_components/font-awesome/src/assets/js/ZeroClipboard-1.1.7.min.js new file mode 100755 index 0000000..32535fd --- /dev/null +++ b/app/bower_components/font-awesome/src/assets/js/ZeroClipboard-1.1.7.min.js @@ -0,0 +1,8 @@ +/*! + * zeroclipboard + * The Zero Clipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie, and a JavaScript interface. + * Copyright 2012 Jon Rohan, James M. Greene, . + * Released under the MIT license + * http://jonrohan.github.com/ZeroClipboard/ + * v1.1.7 + */(function(){"use strict";var a=function(a,b){var c=a.style[b];a.currentStyle?c=a.currentStyle[b]:window.getComputedStyle&&(c=document.defaultView.getComputedStyle(a,null).getPropertyValue(b));if(c=="auto"&&b=="cursor"){var d=["a"];for(var e=0;e=0?"&":"?")+"nocache="+(new Date).getTime()},i=function(a){var b=[];return a.trustedDomains&&(typeof a.trustedDomains=="string"?b.push("trustedDomain="+a.trustedDomains):b.push("trustedDomain="+a.trustedDomains.join(","))),b.join("&")},j=function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c ';b=document.createElement("div"),b.id="global-zeroclipboard-html-bridge",b.setAttribute("class","global-zeroclipboard-container"),b.setAttribute("data-clipboard-ready",!1),b.style.position="absolute",b.style.left="-9999px",b.style.top="-9999px",b.style.width="15px",b.style.height="15px",b.style.zIndex="9999",b.innerHTML=c,document.body.appendChild(b)}a.htmlBridge=b,a.flashBridge=document["global-zeroclipboard-flash-bridge"]||b.children[0].lastElementChild};l.prototype.resetBridge=function(){this.htmlBridge.style.left="-9999px",this.htmlBridge.style.top="-9999px",this.htmlBridge.removeAttribute("title"),this.htmlBridge.removeAttribute("data-clipboard-text"),f(m,this.options.activeClass),m=null,this.options.text=null},l.prototype.ready=function(){var a=this.htmlBridge.getAttribute("data-clipboard-ready");return a==="true"||a===!0},l.prototype.reposition=function(){if(!m)return!1;var a=g(m);this.htmlBridge.style.top=a.top+"px",this.htmlBridge.style.left=a.left+"px",this.htmlBridge.style.width=a.width+"px",this.htmlBridge.style.height=a.height+"px",this.htmlBridge.style.zIndex=a.zIndex+1,this.setSize(a.width,a.height)},l.dispatch=function(a,b){l.prototype._singleton.receiveEvent(a,b)},l.prototype.on=function(a,b){var c=a.toString().split(/\s/g);for(var d=0;d=b))this.iframe=h(' + +
  • + +
  • + +
  • + +
  • + + diff --git a/app/bower_components/sass-bootstrap/_layouts/default.html b/app/bower_components/sass-bootstrap/_layouts/default.html new file mode 100644 index 0000000..a2c26a2 --- /dev/null +++ b/app/bower_components/sass-bootstrap/_layouts/default.html @@ -0,0 +1,79 @@ + + + + + {% include header.html %} + + + Skip to main content + + + {% include nav-main.html %} + + +
    +
    +

    {{ page.title }}

    +

    {{ page.lead }}

    + {% include ads.html %} +
    +
    + + + {% include old-bs-docs.html %} + +
    +
    +
    + +
    +
    + {{ content }} +
    +
    + +
    + + + + + + {% include footer.html %} + + + diff --git a/app/bower_components/sass-bootstrap/_layouts/home.html b/app/bower_components/sass-bootstrap/_layouts/home.html new file mode 100644 index 0000000..c8328fe --- /dev/null +++ b/app/bower_components/sass-bootstrap/_layouts/home.html @@ -0,0 +1,47 @@ + + + + + {% include header.html %} + + + Skip to main content + + + {% include nav-main.html %} + + + {{ content }} + + + + + {% include footer.html %} + + + diff --git a/app/bower_components/sass-bootstrap/about.html b/app/bower_components/sass-bootstrap/about.html new file mode 100644 index 0000000..f64ea8c --- /dev/null +++ b/app/bower_components/sass-bootstrap/about.html @@ -0,0 +1,93 @@ +--- +layout: default +title: About +slug: about +lead: "Learn about the history of Bootstrap, meet the core team, and check out the ever-growing community resources." +base_url: "../" +--- + + + +
    + +

    Originally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world.

    +

    Bootstrap was created at Twitter in mid-2010 by @mdo and @fat. Prior to being an open-sourced framework, Bootstrap was known as Twitter Blueprint. A few months into development, Twitter held its first Hack Week and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.

    +

    Originally released on , we've since had over twenty releases, including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.

    +
    + + + +
    + +

    Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community.

    + +

    Get involved with Bootstrap development by opening an issue or submitting a pull request. Read our contributing guidelines for information on how we develop.

    +
    + + + +
    + +

    Stay up to date on the development of Bootstrap and reach out to the community with these helpful resources.

    + +

    You can also follow @twbootstrap on Twitter for the latest gossip and awesome music videos.

    +
    + + + +
    + +

    Community members have translated Bootstrap's documentation into various langauges. None are officially supported and may not always be up to date.

    + +

    Have another language to add, or perhaps a different or better translation? Let us know by opening an issue.

    +
    diff --git a/app/bower_components/sass-bootstrap/bower.json b/app/bower_components/sass-bootstrap/bower.json new file mode 100644 index 0000000..5314ddc --- /dev/null +++ b/app/bower_components/sass-bootstrap/bower.json @@ -0,0 +1,11 @@ +{ + "name": "sass-bootstrap", + "version": "3.0.2", + "main": ["./dist/js/bootstrap.js", "./dist/css/bootstrap.css", "./dist/fonts/*"], + "ignore": [ + "**/.*" + ], + "dependencies": { + "jquery": ">= 1.9.0" + } +} diff --git a/app/bower_components/sass-bootstrap/browserstack.json b/app/bower_components/sass-bootstrap/browserstack.json new file mode 100644 index 0000000..76564eb --- /dev/null +++ b/app/bower_components/sass-bootstrap/browserstack.json @@ -0,0 +1,37 @@ +{ + "username": "--secure--", + "key": "--secure--", + "test_path": "js/tests/index.html", + "browsers": [ + { + "browser": "firefox", + "browser_version": "latest", + "os": "OS X", + "os_version": "Mountain Lion" + }, + { + "browser": "safari", + "browser_version": "latest", + "os": "OS X", + "os_version": "Mountain Lion" + }, + { + "browser": "chrome", + "browser_version": "latest", + "os": "OS X", + "os_version": "Mountain Lion" + }, + { + "browser": "firefox", + "browser_version": "latest", + "os": "Windows", + "os_version": "7" + }, + { + "browser": "chrome", + "browser_version": "latest", + "os": "Windows", + "os_version": "7" + } + ] +} diff --git a/app/bower_components/sass-bootstrap/components.html b/app/bower_components/sass-bootstrap/components.html new file mode 100644 index 0000000..25ed9ea --- /dev/null +++ b/app/bower_components/sass-bootstrap/components.html @@ -0,0 +1,3689 @@ +--- +layout: default +title: Components +slug: components +lead: "Over a dozen reusable components built to provide iconography, dropdowns, navigation, alerts, popovers, and much more." +base_url: "../" +--- + + + +
    + + +

    Available glyphs

    +

    Includes 200 glyphs in font format from the Glyphicon Halflings set. Glyphicons Halflings are normally not available for free, but their creator has made them available for Bootstrap free of cost. As a thank you, we only ask that you to include a link back to Glyphicons whenever possible.

    +
      +
    • + + .glyphicon .glyphicon-adjust +
    • +
    • + + .glyphicon .glyphicon-align-center +
    • +
    • + + .glyphicon .glyphicon-align-justify +
    • +
    • + + .glyphicon .glyphicon-align-left +
    • +
    • + + .glyphicon .glyphicon-align-right +
    • +
    • + + .glyphicon .glyphicon-arrow-down +
    • +
    • + + .glyphicon .glyphicon-arrow-left +
    • +
    • + + .glyphicon .glyphicon-arrow-right +
    • +
    • + + .glyphicon .glyphicon-arrow-up +
    • +
    • + + .glyphicon .glyphicon-asterisk +
    • +
    • + + .glyphicon .glyphicon-backward +
    • +
    • + + .glyphicon .glyphicon-ban-circle +
    • +
    • + + .glyphicon .glyphicon-barcode +
    • +
    • + + .glyphicon .glyphicon-bell +
    • +
    • + + .glyphicon .glyphicon-bold +
    • +
    • + + .glyphicon .glyphicon-book +
    • +
    • + + .glyphicon .glyphicon-bookmark +
    • +
    • + + .glyphicon .glyphicon-briefcase +
    • +
    • + + .glyphicon .glyphicon-bullhorn +
    • +
    • + + .glyphicon .glyphicon-calendar +
    • +
    • + + .glyphicon .glyphicon-camera +
    • +
    • + + .glyphicon .glyphicon-certificate +
    • +
    • + + .glyphicon .glyphicon-check +
    • +
    • + + .glyphicon .glyphicon-chevron-down +
    • +
    • + + .glyphicon .glyphicon-chevron-left +
    • +
    • + + .glyphicon .glyphicon-chevron-right +
    • +
    • + + .glyphicon .glyphicon-chevron-up +
    • +
    • + + .glyphicon .glyphicon-circle-arrow-down +
    • +
    • + + .glyphicon .glyphicon-circle-arrow-left +
    • +
    • + + .glyphicon .glyphicon-circle-arrow-right +
    • +
    • + + .glyphicon .glyphicon-circle-arrow-up +
    • +
    • + + .glyphicon .glyphicon-cloud +
    • +
    • + + .glyphicon .glyphicon-cloud-download +
    • +
    • + + .glyphicon .glyphicon-cloud-upload +
    • +
    • + + .glyphicon .glyphicon-cog +
    • +
    • + + .glyphicon .glyphicon-collapse-down +
    • +
    • + + .glyphicon .glyphicon-collapse-up +
    • +
    • + + .glyphicon .glyphicon-comment +
    • +
    • + + .glyphicon .glyphicon-compressed +
    • +
    • + + .glyphicon .glyphicon-copyright-mark +
    • +
    • + + .glyphicon .glyphicon-credit-card +
    • +
    • + + .glyphicon .glyphicon-cutlery +
    • +
    • + + .glyphicon .glyphicon-dashboard +
    • +
    • + + .glyphicon .glyphicon-download +
    • +
    • + + .glyphicon .glyphicon-download-alt +
    • +
    • + + .glyphicon .glyphicon-earphone +
    • +
    • + + .glyphicon .glyphicon-edit +
    • +
    • + + .glyphicon .glyphicon-eject +
    • +
    • + + .glyphicon .glyphicon-envelope +
    • +
    • + + .glyphicon .glyphicon-euro +
    • +
    • + + .glyphicon .glyphicon-exclamation-sign +
    • +
    • + + .glyphicon .glyphicon-expand +
    • +
    • + + .glyphicon .glyphicon-export +
    • +
    • + + .glyphicon .glyphicon-eye-close +
    • +
    • + + .glyphicon .glyphicon-eye-open +
    • +
    • + + .glyphicon .glyphicon-facetime-video +
    • +
    • + + .glyphicon .glyphicon-fast-backward +
    • +
    • + + .glyphicon .glyphicon-fast-forward +
    • +
    • + + .glyphicon .glyphicon-file +
    • +
    • + + .glyphicon .glyphicon-film +
    • +
    • + + .glyphicon .glyphicon-filter +
    • +
    • + + .glyphicon .glyphicon-fire +
    • +
    • + + .glyphicon .glyphicon-flag +
    • +
    • + + .glyphicon .glyphicon-flash +
    • +
    • + + .glyphicon .glyphicon-floppy-disk +
    • +
    • + + .glyphicon .glyphicon-floppy-open +
    • +
    • + + .glyphicon .glyphicon-floppy-remove +
    • +
    • + + .glyphicon .glyphicon-floppy-save +
    • +
    • + + .glyphicon .glyphicon-floppy-saved +
    • +
    • + + .glyphicon .glyphicon-folder-close +
    • +
    • + + .glyphicon .glyphicon-folder-open +
    • +
    • + + .glyphicon .glyphicon-font +
    • +
    • + + .glyphicon .glyphicon-forward +
    • +
    • + + .glyphicon .glyphicon-fullscreen +
    • +
    • + + .glyphicon .glyphicon-gbp +
    • +
    • + + .glyphicon .glyphicon-gift +
    • +
    • + + .glyphicon .glyphicon-glass +
    • +
    • + + .glyphicon .glyphicon-globe +
    • +
    • + + .glyphicon .glyphicon-hand-down +
    • +
    • + + .glyphicon .glyphicon-hand-left +
    • +
    • + + .glyphicon .glyphicon-hand-right +
    • +
    • + + .glyphicon .glyphicon-hand-up +
    • +
    • + + .glyphicon .glyphicon-hd-video +
    • +
    • + + .glyphicon .glyphicon-hdd +
    • +
    • + + .glyphicon .glyphicon-header +
    • +
    • + + .glyphicon .glyphicon-headphones +
    • +
    • + + .glyphicon .glyphicon-heart +
    • +
    • + + .glyphicon .glyphicon-heart-empty +
    • +
    • + + .glyphicon .glyphicon-home +
    • +
    • + + .glyphicon .glyphicon-import +
    • +
    • + + .glyphicon .glyphicon-inbox +
    • +
    • + + .glyphicon .glyphicon-indent-left +
    • +
    • + + .glyphicon .glyphicon-indent-right +
    • +
    • + + .glyphicon .glyphicon-info-sign +
    • +
    • + + .glyphicon .glyphicon-italic +
    • +
    • + + .glyphicon .glyphicon-leaf +
    • +
    • + + .glyphicon .glyphicon-link +
    • +
    • + + .glyphicon .glyphicon-list +
    • +
    • + + .glyphicon .glyphicon-list-alt +
    • +
    • + + .glyphicon .glyphicon-lock +
    • +
    • + + .glyphicon .glyphicon-log-in +
    • +
    • + + .glyphicon .glyphicon-log-out +
    • +
    • + + .glyphicon .glyphicon-magnet +
    • +
    • + + .glyphicon .glyphicon-map-marker +
    • +
    • + + .glyphicon .glyphicon-minus +
    • +
    • + + .glyphicon .glyphicon-minus-sign +
    • +
    • + + .glyphicon .glyphicon-move +
    • +
    • + + .glyphicon .glyphicon-music +
    • +
    • + + .glyphicon .glyphicon-new-window +
    • +
    • + + .glyphicon .glyphicon-off +
    • +
    • + + .glyphicon .glyphicon-ok +
    • +
    • + + .glyphicon .glyphicon-ok-circle +
    • +
    • + + .glyphicon .glyphicon-ok-sign +
    • +
    • + + .glyphicon .glyphicon-open +
    • +
    • + + .glyphicon .glyphicon-paperclip +
    • +
    • + + .glyphicon .glyphicon-pause +
    • +
    • + + .glyphicon .glyphicon-pencil +
    • +
    • + + .glyphicon .glyphicon-phone +
    • +
    • + + .glyphicon .glyphicon-phone-alt +
    • +
    • + + .glyphicon .glyphicon-picture +
    • +
    • + + .glyphicon .glyphicon-plane +
    • +
    • + + .glyphicon .glyphicon-play +
    • +
    • + + .glyphicon .glyphicon-play-circle +
    • +
    • + + .glyphicon .glyphicon-plus +
    • +
    • + + .glyphicon .glyphicon-plus-sign +
    • +
    • + + .glyphicon .glyphicon-print +
    • +
    • + + .glyphicon .glyphicon-pushpin +
    • +
    • + + .glyphicon .glyphicon-qrcode +
    • +
    • + + .glyphicon .glyphicon-question-sign +
    • +
    • + + .glyphicon .glyphicon-random +
    • +
    • + + .glyphicon .glyphicon-record +
    • +
    • + + .glyphicon .glyphicon-refresh +
    • +
    • + + .glyphicon .glyphicon-registration-mark +
    • +
    • + + .glyphicon .glyphicon-remove +
    • +
    • + + .glyphicon .glyphicon-remove-circle +
    • +
    • + + .glyphicon .glyphicon-remove-sign +
    • +
    • + + .glyphicon .glyphicon-repeat +
    • +
    • + + .glyphicon .glyphicon-resize-full +
    • +
    • + + .glyphicon .glyphicon-resize-horizontal +
    • +
    • + + .glyphicon .glyphicon-resize-small +
    • +
    • + + .glyphicon .glyphicon-resize-vertical +
    • +
    • + + .glyphicon .glyphicon-retweet +
    • +
    • + + .glyphicon .glyphicon-road +
    • +
    • + + .glyphicon .glyphicon-save +
    • +
    • + + .glyphicon .glyphicon-saved +
    • +
    • + + .glyphicon .glyphicon-screenshot +
    • +
    • + + .glyphicon .glyphicon-sd-video +
    • +
    • + + .glyphicon .glyphicon-search +
    • +
    • + + .glyphicon .glyphicon-send +
    • +
    • + + .glyphicon .glyphicon-share +
    • +
    • + + .glyphicon .glyphicon-share-alt +
    • +
    • + + .glyphicon .glyphicon-shopping-cart +
    • +
    • + + .glyphicon .glyphicon-signal +
    • +
    • + + .glyphicon .glyphicon-sort +
    • +
    • + + .glyphicon .glyphicon-sort-by-alphabet +
    • +
    • + + .glyphicon .glyphicon-sort-by-alphabet-alt +
    • +
    • + + .glyphicon .glyphicon-sort-by-attributes +
    • +
    • + + .glyphicon .glyphicon-sort-by-attributes-alt +
    • +
    • + + .glyphicon .glyphicon-sort-by-order +
    • +
    • + + .glyphicon .glyphicon-sort-by-order-alt +
    • +
    • + + .glyphicon .glyphicon-sound-5-1 +
    • +
    • + + .glyphicon .glyphicon-sound-6-1 +
    • +
    • + + .glyphicon .glyphicon-sound-7-1 +
    • +
    • + + .glyphicon .glyphicon-sound-dolby +
    • +
    • + + .glyphicon .glyphicon-sound-stereo +
    • +
    • + + .glyphicon .glyphicon-star +
    • +
    • + + .glyphicon .glyphicon-star-empty +
    • +
    • + + .glyphicon .glyphicon-stats +
    • +
    • + + .glyphicon .glyphicon-step-backward +
    • +
    • + + .glyphicon .glyphicon-step-forward +
    • +
    • + + .glyphicon .glyphicon-stop +
    • +
    • + + .glyphicon .glyphicon-subtitles +
    • +
    • + + .glyphicon .glyphicon-tag +
    • +
    • + + .glyphicon .glyphicon-tags +
    • +
    • + + .glyphicon .glyphicon-tasks +
    • +
    • + + .glyphicon .glyphicon-text-height +
    • +
    • + + .glyphicon .glyphicon-text-width +
    • +
    • + + .glyphicon .glyphicon-th +
    • +
    • + + .glyphicon .glyphicon-th-large +
    • +
    • + + .glyphicon .glyphicon-th-list +
    • +
    • + + .glyphicon .glyphicon-thumbs-down +
    • +
    • + + .glyphicon .glyphicon-thumbs-up +
    • +
    • + + .glyphicon .glyphicon-time +
    • +
    • + + .glyphicon .glyphicon-tint +
    • +
    • + + .glyphicon .glyphicon-tower +
    • +
    • + + .glyphicon .glyphicon-transfer +
    • +
    • + + .glyphicon .glyphicon-trash +
    • +
    • + + .glyphicon .glyphicon-tree-conifer +
    • +
    • + + .glyphicon .glyphicon-tree-deciduous +
    • +
    • + + .glyphicon .glyphicon-unchecked +
    • +
    • + + .glyphicon .glyphicon-upload +
    • +
    • + + .glyphicon .glyphicon-usd +
    • +
    • + + .glyphicon .glyphicon-user +
    • +
    • + + .glyphicon .glyphicon-volume-down +
    • +
    • + + .glyphicon .glyphicon-volume-off +
    • +
    • + + .glyphicon .glyphicon-volume-up +
    • +
    • + + .glyphicon .glyphicon-warning-sign +
    • +
    • + + .glyphicon .glyphicon-wrench +
    • +
    • + + .glyphicon .glyphicon-zoom-in +
    • +
    • + + .glyphicon .glyphicon-zoom-out +
    • +
    + + +

    How to use

    +

    For performance reasons, all icons require a base class and individual icon class. To use, place the following code just about anywhere. Be sure to leave a space between the icon and text for proper padding.

    +{% highlight html %} + +{% endhighlight %} + + +

    Examples

    +

    Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.

    +
    + + +
    +{% highlight html %} + +{% endhighlight %} + +
    + + + +
    + +

    Toggleable, contextual menu for displaying lists of links. Made interactive with the dropdown JavaScript plugin.

    + + +

    Wrap the dropdown's trigger and the dropdown menu within .dropdown, or another element that declares position: relative;. Then add the menu's HTML.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + +

    Add .pull-right to a .dropdown-menu to right align the dropdown menu.

    +{% highlight html %} + +{% endhighlight %} + + +

    Add a header to label sections of actions in any dropdown menu.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + +

    Add .disabled to a <li> in the dropdown to disable the link.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} +
    + + + + +
    + +

    Group a series of buttons together on a single line with the button group. Add on optional JavaScript radio and checkbox style behavior with our buttons plugin.

    + +
    +

    Tooltips & popovers in button groups require special setting

    +

    When using tooltips or popovers on elements within a .btn-group, you'll have to specify the option container: 'body' to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).

    +
    + +

    Basic example

    +

    Wrap a series of buttons with .btn in .btn-group.

    +
    +
    + + + +
    +
    +{% highlight html %} +
    + + + +
    +{% endhighlight %} + +

    Button toolbar

    +

    Combine sets of <div class="btn-group"> into a <div class="btn-toolbar"> for more complex components.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Sizing

    +

    Instead of applying button sizing classes to every button in a group, just add .btn-group-* to the .btn-group.

    +
    + + + + +
    +{% highlight html %} +
    ...
    +
    ...
    +
    ...
    +
    ...
    +{% endhighlight %} + +

    Nesting

    +

    Place a .btn-group within another .btn-group when you want dropdown menus mixed with a series of buttons.

    +
    +
    + + + +
    + + +
    +
    +
    +{% highlight html %} +
    + + + +
    + + +
    +
    +{% endhighlight %} + +

    Vertical variation

    +

    Make a set of buttons appear vertically stacked rather than horizontally.

    +
    +
    + + +
    + + +
    + + +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +{% highlight html %} +
    + ... +
    +{% endhighlight %} + +

    Justified link variation

    +

    Make a group of buttons stretch at the same size to span the entire width of its parent.

    + +
    +

    Element-specific usage

    +

    This only works with <a> elements as the <button> doesn't pick up these styles.

    +
    + +
    +
    + Left + Middle + Right +
    +
    +{% highlight html %} +
    + ... +
    +{% endhighlight %} + +
    + + + + +
    + +

    Use any button to trigger a dropdown menu by placing it within a .btn-group and providing the proper menu markup.

    + +
    +

    Plugin dependency

    +

    Button dropdowns require the dropdown plugin to be included in your version of Bootstrap.

    +
    + +

    Single button dropdowns

    +

    Turn a button into a dropdown toggle with some basic markup changes.

    + +{% highlight html %} + + +{% endhighlight %} + +

    Split button dropdowns

    +

    Similarly, create split button dropdowns with the same markup changes, only with a separate button.

    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +{% highlight html %} + +
    + + + +
    +{% endhighlight %} + +

    Sizing

    +

    Button dropdowns work with buttons of all sizes.

    +
    + + + +
    +{% highlight html %} + +
    + + +
    + + +
    + + +
    + + +
    + + +
    +{% endhighlight %} + +

    Dropup variation

    +

    Trigger dropdown menus above elements by adding .dropup to the parent.

    +
    + +
    +{% highlight html %} +
    + + + +
    +{% endhighlight %} + +
    + + + + + +
    + +

    Extend form controls by adding text or buttons before, after, or on both sides of any text-based input. Use .input-group with an .input-group-addon to prepend or append elements to a .form-control.

    + +
    +

    Cross-browser compatibility

    +

    Avoid using <select> elements here as they cannot be fully styled in WebKit browsers.

    +
    +
    +

    Tooltips & popovers in input groups require special setting

    +

    When using tooltips or popovers on elements within an .input-group, you'll have to specify the option container: 'body' to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).

    +
    +
    +

    Don't mix with form groups

    +

    Do not apply input group classes directly to form groups. An input group is an isolated component.

    +
    + + +

    Basic example

    +
    +
    + @ + +
    +
    +
    + + .00 +
    +
    +
    + $ + + .00 +
    + +{% highlight html %} +
    + @ + +
    + +
    + + .00 +
    + +
    + $ + + .00 +
    +{% endhighlight %} + + +

    Sizing

    +

    Add the relative form sizing classes to the .input-group itself and contents within will automatically resize—no need for repeating the form control size classes on each element.

    +
    +
    + @ + +
    +
    +
    + @ + +
    +
    +
    + @ + +
    + +{% highlight html %} +
    + @ + +
    + +
    + @ + +
    + +
    + @ + +
    +{% endhighlight %} + + +

    Checkboxes and radio addons

    +

    Place any checkbox or radio option within an input group's addon instead of text.

    +
    +
    +
    +
    + + + + +
    +
    +
    +
    + + + + +
    +
    +
    + +{% highlight html %} +
    +
    +
    + + + + +
    +
    +
    +
    + + + + +
    +
    +
    +{% endhighlight %} + + +

    Button addons

    +

    Buttons in input groups are a bit different and require one extra level of nesting. Instead of .input-group-addon, you'll need to use .input-group-btn to wrap the buttons. This is required due to default browser styles that cannot be overridden.

    +
    +
    +
    +
    + + + + +
    +
    +
    +
    + + + + +
    +
    +
    + +{% highlight html %} +
    +
    +
    + + + + +
    +
    +
    +
    + + + + +
    +
    +
    +{% endhighlight %} + +

    Buttons with dropdowns

    +

    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +{% highlight html %} +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +{% endhighlight %} + +

    Segmented buttons

    +
    +
    +
    +
    +
    + + + +
    + +
    +
    +
    +
    + +
    + + + +
    +
    +
    +
    + +{% highlight html %} +
    +
    + +
    + +
    + +
    + +
    + +
    +
    +{% endhighlight %} + +
    + + + + +
    + + +

    Navs available in Bootstrap have shared markup, starting with the base .nav class, as well as shared states. Swap modifier classes to switch between each style.

    + + +

    Note the .nav-tabs class requires the .nav base class.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} +
    +

    Requires JavaScript tabs plugin

    +

    For tabs with tabbable areas, you must use the tabs JavaScript plugin.

    +
    + + +

    Take that same HTML, but use .nav-pills instead:

    +
    + +
    +{% highlight html %} + +{% endhighlight %} +

    Pills are also vertically stackable. Just add .nav-stacked.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + + +

    Easily make tabs or pills equal widths of their parent at screens wider than 768px with .nav-justified. On smaller screens, the nav links are stacked.

    +
    +

    WebKit and responsive justified navs

    +

    Chrome and Safari both exhibit a bug in which resizing your browser horizontally causes rendering errors in the justified nav that are cleared upon refreshing. This bug is also shown in the justified nav example.

    +
    +
    + +
    + +
    +{% highlight html %} + + +{% endhighlight %} + + + +

    For any nav component (tabs, pills, or list), add .disabled for gray links and no hover effects.

    + +
    +

    Link functionality not impacted

    +

    This class will only change the <a>'s appearance, not its functionality. Use custom JavaScript to disable links here.

    +
    + + +{% highlight html %} + +{% endhighlight %} + + + +

    Add dropdown menus with a little extra HTML and the dropdowns JavaScript plugin.

    + +

    Tabs with dropdowns

    + +{% highlight html %} + +{% endhighlight %} + +

    Pills with dropdowns

    + +{% highlight html %} + +{% endhighlight %} + +
    + + + + +
    + + + +

    Navbars are responsive meta components that serve as navigation headers for your application or site. They begin collapsed (and are toggleable) in mobile views and become horizontal as the available viewport width increases.

    + +
    +

    Customize the collapsing point

    +

    Depending on the content in your navbar, you might need to change the point at which your navbar switches between collapsed and horizontal mode. Customize the @grid-float-breakpoint variable or add your own media query.

    +
    +
    +

    Requires JavaScript

    +

    If JavaScript is disabled and the viewport is narrow enough that the navbar collapses, it will be impossible to expand the navbar and view the content within the .navbar-collapse.

    +
    + +
    + +
    +{% highlight html %} + +{% endhighlight %} + +
    +

    Plugin dependency

    +

    The responsive navbar requires the collapse plugin to be included in your version of Bootstrap.

    +
    + +
    +

    Make navbars accessible

    +

    Be sure to add a role="navigation" to every navbar to help with accessibility.

    +
    + + + +

    Place form content within .navbar-form for proper vertical alignment and collapsed behavior in narrow viewports. Use the alignment options to decide where it resides within the navbar content.

    +

    As a heads up, .navbar-form shares much of its code with .form-inline via mixin.

    +
    + +
    +{% highlight html %} + +
    + +
    + + +{% endhighlight %} + +
    +

    Always add labels

    +

    Screen readers will have trouble with your forms if you don't include a label for every input. For these inline navbar forms, you can hide the labels using the .sr-only class.

    +
    + + + +

    Add the .navbar-btn class to <button> elements not residing in a <form> to vertically center them in the navbar.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +
    +

    Context-specific usage

    +

    Like the standard button classes, .navbar-btn can be used on <a> and <input> elements. However, neither .navbar-btn nor the standard button classes should be used on <a> elements within .navbar-nav.

    +
    + + +

    Wrap strings of text in an element with .navbar-text, usually on a <p> tag for proper leading and color.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + + +

    For folks using standard links that are not within the regular navbar navigation component, use the .navbar-link class to add the proper colors for the default and inverse navbar options.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + + +

    Align nav links, forms, buttons, or text, using the .navbar-left or .navbar-right utility classes. Both classes will add a CSS float in the specified direction. For example, to align nav links, put them in a separate <ul> with the respective utility class applied.

    +

    These classes are mixin-ed versions of .pull-left and .pull-right, but they're scoped to media queries for easier handling of navbar components across device sizes.

    + + + +

    Add .navbar-fixed-top.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +
    +

    Body padding required

    +

    The fixed navbar will overlay your other content, unless you add padding to the top of the <body>. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.

    +{% highlight css %} +body { padding-top: 70px; } +{% endhighlight %} +

    Make sure to include this after the core Bootstrap CSS.

    +
    + + + +

    Add .navbar-fixed-bottom instead.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +
    +

    Body padding required

    +

    The fixed navbar will overlay your other content, unless you add padding to the bottom of the <body>. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.

    +{% highlight css %} +body { padding-bottom: 70px; } +{% endhighlight %} +

    Make sure to include this after the core Bootstrap CSS.

    +
    + + + +

    Create a full-width navbar that scrolls away with the page by adding .navbar-static-top. Unlike the .navbar-fixed-* classes, you do not need to change any padding on the body.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + + +

    Modify the look of the navbar by adding .navbar-inverse.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +
    + + + + +
    + +

    Indicate the current page's location within a navigational hierarchy.

    +

    Separators are automatically added in CSS through :before and content.

    +
    + + + +
    +{% highlight html %} + +{% endhighlight %} +
    + + + + +
    + +

    Provide pagination links for your site or app with the multi-page pagination component, or the simpler pager alternative.

    + +

    Default pagination

    +

    Simple pagination inspired by Rdio, great for apps and search results. The large block is hard to miss, easily scalable, and provides large click areas.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Disabled and active states

    +

    Links are customizable for different circumstances. Use .disabled for unclickable links and .active to indicate the current page.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} +

    You can optionally swap out active or disabled anchors for <span> to remove click functionality while retaining intended styles.

    +{% highlight html %} +
      +
    • «
    • +
    • 1 (current)
    • + ... +
    +{% endhighlight %} + + +

    Sizing

    +

    Fancy larger or smaller pagination? Add .pagination-lg or .pagination-sm for additional sizes.

    +
    +
    + +
    +
    + +
    +
    + +
    +
    +{% highlight html %} +
      ...
    +
      ...
    +
      ...
    +{% endhighlight %} + + +

    Pager

    +

    Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.

    + +

    Default example

    +

    By default, the pager centers links.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Aligned links

    +

    Alternatively, you can align each link to the sides:

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + +

    Optional disabled state

    +

    Pager links also use the general .disabled utility class from the pagination.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} +
    + + + + +
    + +

    + +

    Example

    +
    +

    Example heading New

    +

    Example heading New

    +

    Example heading New

    +

    Example heading New

    +
    Example heading New
    +
    Example heading New
    +
    +{% highlight html %} +

    Example heading New

    +{% endhighlight %} + +

    Available variations

    +

    Add any of the below mentioned modifier classes to change the appearance of a label.

    +
    + Default + Primary + Success + Info + Warning + Danger +
    +{% highlight html %} +Default +Primary +Success +Info +Warning +Danger +{% endhighlight %} + +
    + + + + +
    + +

    Easily highlight new or unread items by adding a <span class="badge"> to links, Bootstrap navs, and more.

    + +
    + Inbox 42 +
    +{% highlight html %} +Inbox 42 +{% endhighlight %} + +

    Self collapsing

    +

    When there are no new or unread items, badges will simply collapse (via CSS's :empty selector) provided no content exists within.

    + +
    +

    Cross-browser compatibility

    +

    Badges won't self collapse in Internet Explorer 8 because it lacks support for the :empty selector.

    +
    + +

    Adapts to active nav states

    +

    Built-in styles are included for placing badges in active states in pill and list navigations.

    + +{% highlight html %} + +{% endhighlight %} +
    + + + + +
    + +

    A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your site.

    +
    +
    +

    Hello, world!

    +

    This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.

    +

    Learn more

    +
    +
    +{% highlight html %} +
    +

    Hello, world!

    +

    ...

    +

    Learn more

    +
    +{% endhighlight %} +

    To make the jumbotron full width, and without rounded corners, place it outside all .containers and instead add a .container within.

    +{% highlight html %} +
    +
    + ... +
    +
    +{% endhighlight %} + +
    + + + + +
    + +

    A simple shell for an h1 to appropriately space out and segment sections of content on a page. It can utilize the h1's default small element, as well as most other components (with additional styles).

    +
    + +
    +{% highlight html %} + +{% endhighlight %} +
    + + + + +
    + +

    Extend Bootstrap's grid system with the thumbnail component to easily display grids of images, videos, text, and more.

    + +

    Default example

    +

    By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.

    +
    +
    +
    + + Generic placeholder thumbnail + +
    +
    + + Generic placeholder thumbnail + +
    +
    + + Generic placeholder thumbnail + +
    +
    + + Generic placeholder thumbnail + +
    +
    +
    +{% highlight html %} +
    +
    + + ... + +
    + ... +
    +{% endhighlight %} + +

    Custom content

    +

    With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.

    +
    +
    +
    +
    + Generic placeholder thumbnail +
    +

    Thumbnail label

    +

    Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.

    +

    Button Button

    +
    +
    +
    +
    +
    + Generic placeholder thumbnail +
    +

    Thumbnail label

    +

    Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.

    +

    Button Button

    +
    +
    +
    +
    +
    + Generic placeholder thumbnail +
    +

    Thumbnail label

    +

    Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.

    +

    Button Button

    +
    +
    +
    +
    +
    +{% highlight html %} +
    +
    +
    + ... +
    +

    Thumbnail label

    +

    ...

    +

    Button Button

    +
    +
    +
    +
    +{% endhighlight %} +
    + + + + + +
    + +

    Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. For inline dismissal, use the alerts jQuery plugin.

    + +

    Examples

    +

    Wrap any text and an optional dismiss button in .alert and one of the four contextual classes (e.g., .alert-success) for basic alert messages.

    + +
    +

    No default class

    +

    Alerts don't have default classes, only base and modifier classes. A default gray alert doesn't make too much sense, so you're required to specify a type via contextual class. Choose from success, info, warning, or danger.

    +
    + +
    +
    + Well done! You successfully read this important alert message. +
    +
    + Heads up! This alert needs your attention, but it's not super important. +
    +
    + Warning! Best check yo self, you're not looking too good. +
    +
    + Oh snap! Change a few things up and try submitting again. +
    +
    +{% highlight html %} +
    ...
    +
    ...
    +
    ...
    +
    ...
    +{% endhighlight %} + +

    Dismissable alerts

    +

    Build on any alert by adding an optional .alert-dismissable and close button.

    +
    +
    + + Warning! Best check yo self, you're not looking too good. +
    +
    +{% highlight html %} +
    + + Warning! Best check yo self, you're not looking too good. +
    +{% endhighlight %} + +
    +

    Ensure proper behavior across all devices

    +

    Be sure to use the <button> element with the data-dismiss="alert" data attribute.

    +
    + + +

    Use the .alert-link utility class to quickly provide matching colored links within any alert.

    +
    +
    + Well done! You successfully read this important alert message. +
    +
    + Heads up! This alert needs your attention, but it's not super important. +
    +
    + Warning! Best check yo self, you're not looking too good. +
    +
    + Oh snap! Change a few things up and try submitting again. +
    +
    +{% highlight html %} +
    + ... +
    +
    + ... +
    +
    + ... +
    +
    + ... +
    +{% endhighlight %} +
    + + + + + +
    + +

    Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars.

    + +
    +

    Cross-browser compatibility

    +

    Progress bars use CSS3 transitions and animations to achieve some of their effects. These features are not supported in Internet Explorer 9 and below or older versions of Firefox. Opera 12 does not support animations.

    +
    + +

    Basic example

    +

    Default progress bar.

    +
    +
    +
    + 60% Complete +
    +
    +
    +{% highlight html %} +
    +
    + 60% Complete +
    +
    +{% endhighlight %} + +

    Contextual alternatives

    +

    Progress bars use some of the same button and alert classes for consistent styles.

    +
    +
    +
    + 40% Complete (success) +
    +
    +
    +
    + 20% Complete +
    +
    +
    +
    + 60% Complete (warning) +
    +
    +
    +
    + 80% Complete (danger) +
    +
    +
    +{% highlight html %} +
    +
    + 40% Complete (success) +
    +
    +
    +
    + 20% Complete +
    +
    +
    +
    + 60% Complete (warning) +
    +
    +
    +
    + 80% Complete +
    +
    +{% endhighlight %} + +

    Striped

    +

    Uses a gradient to create a striped effect. Not available in IE8.

    +
    +
    +
    + 40% Complete (success) +
    +
    +
    +
    + 20% Complete +
    +
    +
    +
    + 60% Complete (warning) +
    +
    +
    +
    + 80% Complete (danger) +
    +
    +
    +{% highlight html %} +
    +
    + 40% Complete (success) +
    +
    +
    +
    + 20% Complete +
    +
    +
    +
    + 60% Complete (warning) +
    +
    +
    +
    + 80% Complete (danger) +
    +
    +{% endhighlight %} + +

    Animated

    +

    Add .active to .progress-striped to animate the stripes right to left. Not available in all versions of IE.

    +
    +
    +
    45% Complete
    +
    +
    +{% highlight html %} +
    +
    + 45% Complete +
    +
    +{% endhighlight %} + +

    Stacked

    +

    Place multiple bars into the same .progress to stack them.

    +
    +
    +
    + 35% Complete (success) +
    +
    + 20% Complete (warning) +
    +
    + 10% Complete (danger) +
    +
    +
    +{% highlight html %} +
    +
    + 35% Complete (success) +
    +
    + 20% Complete (warning) +
    +
    + 10% Complete (danger) +
    +
    +{% endhighlight %} +
    + + + + + +
    + +

    Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.

    + +

    Default media

    +

    The default media allow to float a media object (images, video, audio) to the left or right of a content block.

    +
    +
    + + Generic placeholder image + +
    +

    Media heading

    + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. +
    +
    +
    + + Generic placeholder image + +
    +

    Media heading

    + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. +
    + + Generic placeholder image + +
    +

    Media heading

    + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. +
    +
    +
    +
    +
    +{% highlight html %} +
    + + ... + +
    +

    Media heading

    + ... +
    +
    +{% endhighlight %} + +

    Media list

    +

    With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).

    +
    +
      +
    • + + Generic placeholder image + +
      +

      Media heading

      +

      Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.

      + +
      + + Generic placeholder image + +
      +

      Nested media heading

      + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + +
      + + Generic placeholder image + +
      +

      Nested media heading

      + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. +
      +
      +
      +
      + +
      + + Generic placeholder image + +
      +

      Nested media heading

      + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. +
      +
      +
      +
    • +
    • + + Generic placeholder image + +
      +

      Media heading

      + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. +
      +
    • +
    +
    +{% highlight html %} +
      +
    • + + ... + +
      +

      Media heading

      + ... +
      +
    • +
    +{% endhighlight %} +
    + + + + +
    + +

    List groups are a flexible and powerful component for displaying not only simple lists of elements, but complex ones with custom content.

    + +

    Basic example

    +

    The most basic list group is simply an unordered list with list items, and the proper classes. Build upon it with the options that follow, or your own CSS as needed.

    +
    +
      +
    • Cras justo odio
    • +
    • Dapibus ac facilisis in
    • +
    • Morbi leo risus
    • +
    • Porta ac consectetur ac
    • +
    • Vestibulum at eros
    • +
    +
    +{% highlight html %} +
      +
    • Cras justo odio
    • +
    • Dapibus ac facilisis in
    • +
    • Morbi leo risus
    • +
    • Porta ac consectetur ac
    • +
    • Vestibulum at eros
    • +
    +{% endhighlight %} + +

    Badges

    +

    Add the badges component to any list group item and it will automatically be positioned on the right.

    +
    +
      +
    • + 14 + Cras justo odio +
    • +
    • + 2 + Dapibus ac facilisis in +
    • +
    • + 1 + Morbi leo risus +
    • +
    +
    +{% highlight html %} +
      +
    • + 14 + Cras justo odio +
    • +
    +{% endhighlight %} + +

    Linked items

    +

    Linkify list group items by using anchor tags instead of list items (that also means a parent <div> instead of an <ul>). No need for individual parents around each element.

    + +{% highlight html %} + +{% endhighlight %} + +

    Custom content

    +

    Add nearly any HTML within, even for linked list groups like the one below.

    + +{% highlight html %} + +{% endhighlight %} +
    + + + + + +
    + +

    While not always necessary, sometimes you need to put your DOM in a box. For those situations, try the panel component.

    + +

    Basic example

    +

    By default, all the .panel does is apply some basic border and padding to contain some content.

    +
    +
    +
    + Basic panel example +
    +
    +
    +{% highlight html %} +
    +
    + Basic panel example +
    +
    +{% endhighlight %} + +

    Panel with heading

    +

    Easily add a heading container to your panel with .panel-heading. You may also include any <h1>-<h6> with a .panel-title class to add a pre-styled heading.

    +
    +
    +
    Panel heading without title
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +{% highlight html %} +
    +
    Panel heading without title
    +
    + Panel content +
    +
    + +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +{% endhighlight %} + + +

    Wrap buttons or secondary text in .panel-footer. Note that panel footers do not inherit colors and borders when using contextual variations as they are not meant to be in the foreground.

    +
    +
    +
    + Panel content +
    + +
    +
    +{% highlight html %} +
    +
    + Panel content +
    + +
    +{% endhighlight %} + +

    Contextual alternatives

    +

    Like other components, easily make a panel more meaningful to a particular context by adding any of the contextual state classes.

    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +{% highlight html %} +
    ...
    +
    ...
    +
    ...
    +
    ...
    +
    ...
    +{% endhighlight %} + +

    With tables

    +

    Add any non-bordered .table within a panel for a seamless design. If there is a .panel-body, we add an extra border to the top of the table for separation.

    +
    +
    + +
    Panel heading
    +
    +

    Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam id dolor id nibh ultricies vehicula ut id elit.

    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    + +{% highlight html %} +
    + +
    Panel heading
    +
    +

    ...

    +
    + + + + ... +
    +
    +{% endhighlight %} + +

    If there is no panel body, the component moves from panel header to table without interruption.

    +
    +
    + +
    Panel heading
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +
    +{% highlight html %} +
    + +
    Panel heading
    + + + + ... +
    +
    +{% endhighlight %} + + + +

    With list groups

    +

    Easily include full-width list groups within any panel.

    +
    +
    + +
    Panel heading
    +
    +

    Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam id dolor id nibh ultricies vehicula ut id elit.

    +
    + + +
      +
    • Cras justo odio
    • +
    • Dapibus ac facilisis in
    • +
    • Morbi leo risus
    • +
    • Porta ac consectetur ac
    • +
    • Vestibulum at eros
    • +
    +
    +
    +{% highlight html %} +
    + +
    Panel heading
    +
    +

    ...

    +
    + + +
      +
    • Cras justo odio
    • +
    • Dapibus ac facilisis in
    • +
    • Morbi leo risus
    • +
    • Porta ac consectetur ac
    • +
    • Vestibulum at eros
    • +
    +
    +{% endhighlight %} + + + + + + + + +
    + + +

    Default well

    +

    Use the well as a simple effect on an element to give it an inset effect.

    +
    +
    + Look, I'm in a well! +
    +
    +{% highlight html %} +
    ...
    +{% endhighlight %} +

    Optional classes

    +

    Control padding and rounded corners with two optional modifier classes.

    +
    +
    + Look, I'm in a large well! +
    +
    +{% highlight html %} +
    ...
    +{% endhighlight %} + +
    +
    + Look, I'm in a small well! +
    +
    +{% highlight html %} +
    ...
    +{% endhighlight %} +
    diff --git a/app/bower_components/sass-bootstrap/composer.json b/app/bower_components/sass-bootstrap/composer.json new file mode 100644 index 0000000..66ac304 --- /dev/null +++ b/app/bower_components/sass-bootstrap/composer.json @@ -0,0 +1,28 @@ +{ + "name": "jlong/sass-bootstrap" + , "description": "A sass port of the sleek, intuitive, and powerful front-end framework for faster and easier web development." + , "keywords": ["bootstrap", "css", "sass"] + , "homepage": "http://github.com/jlong/sass-bootstrap/" + , "authors": [ + { + "name": "John W. Long" + }, + { + "name": "Mark Otto", + "email": "markdotto@gmail.com" + }, + { + "name": "Jacob Thornton", + "email": "jacobthornton@gmail.com" + } + ] + , "support": { + "issues": "https://github.com/twbs/bootstrap/issues" + } + , "license": "Apache-2.0" + , "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + } +} diff --git a/app/bower_components/sass-bootstrap/css.html b/app/bower_components/sass-bootstrap/css.html new file mode 100644 index 0000000..495092e --- /dev/null +++ b/app/bower_components/sass-bootstrap/css.html @@ -0,0 +1,2674 @@ +--- +layout: default +title: CSS +slug: css +lead: "Global CSS settings, fundamental HTML elements styled and enhanced with extensible classes, and an advanced grid system." +base_url: "../" +--- + + + +
    + +

    Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.

    + +

    HTML5 doctype

    +

    Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.

    +{% highlight html %} + + + ... + +{% endhighlight %} + +

    Mobile first

    +

    With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3, we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles, they're baked right into the core. In fact, Bootstrap is mobile first. Mobile first styles can be found throughout the entire library instead of in separate files.

    +

    To ensure proper rendering and touch zooming, add the viewport meta tag to your <head>.

    +{% highlight html %} + +{% endhighlight %} +

    You can disable zooming capabilities on mobile devices by adding user-scalable=no to the viewport meta tag. This disables zooming, meaning users are only able to scroll, and results in your site feeling a bit more like a native application. Overall we don't recommend this on every site, so use caution!

    +{% highlight html %} + +{% endhighlight %} + +

    Responsive images

    +

    Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. This applies max-width: 100%; and height: auto; to the image so that it scales nicely to the parent element.

    +{% highlight html %} +Responsive image +{% endhighlight %} + + +

    Bootstrap sets basic global display, typography, and link styles. Specifically, we:

    +
      +
    • Set background-color: #fff; on the body
    • +
    • Use the @font-family-base, @font-size-base, and @line-height-base attributes as our typographic base
    • +
    • Set the global link color via @link-color and apply link underlines only on :hover
    • +
    +

    These styles can be found within scaffolding.less.

    + +

    Normalize

    +

    For improved cross-browser rendering, we use Normalize, a project by Nicolas Gallagher and Jonathan Neal.

    + +

    Containers

    +

    Easily center a page's contents by wrapping its contents in a .container. Containers set max-width at various media query breakpoints to match our grid system.

    +{% highlight html %} +
    + ... +
    +{% endhighlight %} +
    + + + + +
    + +

    Bootstrap includes a responsive, mobile first fluid grid system that appropriately scales up to 12 columns as the device or viewport size increases. It includes predefined classes for easy layout options, as well as powerful mixins for generating more semantic layouts.

    + +

    Introduction

    +

    Grid systems are used for creating page layouts through a series of rows and columns that house your content. Here's how the Bootstrap grid system works:

    +
      +
    • Rows must be placed within a .container for proper alignment and padding.
    • +
    • Use rows to create horizontal groups of columns.
    • +
    • Content should be placed within columns, and only columns may be immediate children of rows.
    • +
    • Predefined grid classes like .row and .col-xs-4 are available for quickly making grid layouts. LESS mixins can also be used for more semantic layouts.
    • +
    • Columns create gutters (gaps between column content) via padding. That padding is offset in rows for the first and last column via negative margin on .rows.
    • +
    • Grid columns are created by specifying the number of twelve available columns you wish to span. For example, three equal columns would use three .col-xs-4.
    • +
    +

    Look to the examples for applying these principles to your code.

    + +
    +

    Grids and full-width layouts

    +

    Folks looking to create fully fluid layouts (meaning your site stretches the entire width of the viewport) must wrap their grid content in a containing element with padding: 0 15px; to offset the margin: 0 -15px; used on .rows.

    +
    + +

    Media queries

    +

    We use the following media queries in our LESS files to create the key breakpoints in our grid system.

    +{% highlight css %} +/* Extra small devices (phones, less than 768px) */ +/* No media query since this is the default in Bootstrap */ + +/* Small devices (tablets, 768px and up) */ +@media (min-width: @screen-sm-min) { ... } + +/* Medium devices (desktops, 992px and up) */ +@media (min-width: @screen-md-min) { ... } + +/* Large devices (large desktops, 1200px and up) */ +@media (min-width: @screen-lg-min) { ... } +{% endhighlight %} +

    We occasionally expand on these media queries to include a max-width to limit CSS to a narrower set of devices.

    +{% highlight css %} +@media (max-width: @screen-xs-max) { ... } +@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { ... } +@media (min-width: @screen-md-min) and (max-width: @screen-md-max) { ... } +@media (min-width: @screen-lg-min) { ... } +{% endhighlight %} + +

    Grid options

    +

    See how aspects of the Bootstrap grid system work across multiple devices with a handy table.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Extra small devices + Phones (<768px) + + Small devices + Tablets (≥768px) + + Medium devices + Desktops (≥992px) + + Large devices + Desktops (≥1200px) +
    Grid behaviorHorizontal at all timesCollapsed to start, horizontal above breakpoints
    Max container widthNone (auto)750px970px1170px
    Class prefix.col-xs-.col-sm-.col-md-.col-lg-
    # of columns12
    Max column widthAuto60px78px95px
    Gutter width30px (15px on each side of a column)
    NestableYes
    OffsetsN/AYes
    Column orderingN/AYes
    +
    +

    Grid classes apply to devices with screen widths greater than or equal to the breakpoint sizes, and override grid classes targeted at smaller devices. Therefore, applying any .col-md- class to an element will not only affect its styling on medium devices but also on large devices if a .col-lg- class is not present.

    + +

    Example: Stacked-to-horizontal

    +

    Using a single set of .col-md-* grid classes, you can create a basic grid system that starts out stacked on mobile devices and tablet devices (the extra small to small range) before becoming horizontal on desktop (medium) devices. Place grid columns in any .row.

    +
    +
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    +
    +
    .col-md-8
    +
    .col-md-4
    +
    +
    +
    .col-md-4
    +
    .col-md-4
    +
    .col-md-4
    +
    +
    +
    .col-md-6
    +
    .col-md-6
    +
    +
    +{% highlight html %} +
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    +
    +
    .col-md-8
    +
    .col-md-4
    +
    +
    +
    .col-md-4
    +
    .col-md-4
    +
    .col-md-4
    +
    +
    +
    .col-md-6
    +
    .col-md-6
    +
    +{% endhighlight %} + +

    Example: Mobile and desktop

    +

    Don't want your columns to simply stack in smaller devices? Use the extra small and medium device grid classes by adding .col-xs-* .col-md-* to your columns. See the example below for a better idea of how it all works.

    +
    +
    +
    .col-xs-12 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6
    +
    .col-xs-6
    +
    +
    +{% highlight html %} + +
    +
    .col-xs-12 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    + + +
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    + + +
    +
    .col-xs-6
    +
    .col-xs-6
    +
    +{% endhighlight %} + +

    Example: Mobile, tablet, desktops

    +

    Build on the previous example by creating even more dynamic and powerful layouts with tablet .col-sm-* classes.

    +
    +
    +
    .col-xs-12 .col-sm-6 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-sm-4
    +
    .col-xs-6 .col-sm-4
    + +
    +
    .col-xs-6 .col-sm-4
    +
    +
    +{% highlight html %} +
    +
    .col-xs-12 .col-sm-6 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-sm-4
    +
    .col-xs-6 .col-sm-4
    + +
    +
    .col-xs-6 .col-sm-4
    +
    +{% endhighlight %} + +

    Responsive column resets

    +

    With the four tiers of grids available you're bound to run into issues where, at certain breakpoints, your columns don't clear quite right as one is taller than the other. To fix that, use a combination of a .clearfix and our responsive utility classes.

    +
    +
    +
    + .col-xs-6 .col-sm-3 +
    + Resize your viewport or check it out on your phone for an example. +
    +
    .col-xs-6 .col-sm-3
    + + +
    + +
    .col-xs-6 .col-sm-3
    +
    .col-xs-6 .col-sm-3
    +
    +
    +{% highlight html %} +
    +
    .col-xs-6 .col-sm-3
    +
    .col-xs-6 .col-sm-3
    + + +
    + +
    .col-xs-6 .col-sm-3
    +
    .col-xs-6 .col-sm-3
    +
    +{% endhighlight %} +

    In addition to column clearing at responsive breakpoints, you may need to reset offsets, pushes, or pulls. Those resets are available for medium and large grid tiers only, since they start only at the (second) small grid tier. See this in action in the grid example.

    +{% highlight html %} +
    +
    .col-sm-5 .col-md-6
    +
    .col-sm-5 .col-sm-offset-2 .col-md-6 .col-md-offset-0
    +
    + +
    +
    .col-sm-6 .col-md-5 .col-lg-6
    +
    .col-sm-6 .col-md-5 .col-md-offset-2 .col-lg-6 .col-lg-offset-0
    +
    +{% endhighlight %} + + +

    Offsetting columns

    +

    Move columns to the right using .col-md-offset-* classes. These classes increase the left margin of a column by * columns. For example, .col-md-offset-4 moves .col-md-4 over four columns.

    +
    +
    +
    .col-md-4
    +
    .col-md-4 .col-md-offset-4
    +
    +
    +
    .col-md-3 .col-md-offset-3
    +
    .col-md-3 .col-md-offset-3
    +
    +
    +
    .col-md-6 .col-md-offset-3
    +
    +
    +{% highlight html %} +
    +
    .col-md-4
    +
    .col-md-4 .col-md-offset-4
    +
    +
    +
    .col-md-3 .col-md-offset-3
    +
    .col-md-3 .col-md-offset-3
    +
    +
    +
    .col-md-6 .col-md-offset-3
    +
    +{% endhighlight %} + + +

    Nesting columns

    +

    To nest your content with the default grid, add a new .row and set of .col-md-* columns within an existing .col-md-* column. Nested rows should include a set of columns that add up to 12.

    +
    +
    + Level 1: .col-md-9 +
    +
    + Level 2: .col-md-6 +
    +
    + Level 2: .col-md-6 +
    +
    +
    +
    +{% highlight html %} +
    +
    + Level 1: .col-md-9 +
    +
    + Level 2: .col-md-6 +
    +
    + Level 2: .col-md-6 +
    +
    +
    +
    +{% endhighlight %} + +

    Column ordering

    +

    Easily change the order of our built-in grid columns with .col-md-push-* and .col-md-pull-* modifier classes.

    +
    +
    .col-md-9 .col-md-push-3
    +
    .col-md-3 .col-md-pull-9
    +
    + +{% highlight html %} +
    +
    .col-md-9 .col-md-push-3
    +
    .col-md-3 .col-md-pull-9
    +
    +{% endhighlight %} + +

    LESS mixins and variables

    +

    In addition to prebuilt grid classes for fast layouts, Bootstrap includes LESS variables and mixins for quickly generating your own simple, semantic layouts.

    + +

    Variables

    +

    Variables determine the number of columns, the gutter width, and the media query point at which to begin floating columns. We use these to generate the predefined grid classes documented above, as well as for the custom mixins listed below.

    +{% highlight css %} +@grid-columns: 12; +@grid-gutter-width: 30px; +@grid-float-breakpoint: 768px; +{% endhighlight %} + +

    Mixins

    +

    Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.

    +{% highlight css %} +// Creates a wrapper for a series of columns +.make-row(@gutter: @grid-gutter-width) { + // Then clear the floated columns + .clearfix(); + + @media (min-width: @screen-sm-min) { + margin-left: (@gutter / -2); + margin-right: (@gutter / -2); + } + + // Negative margin nested rows out to align the content of columns + .row { + margin-left: (@gutter / -2); + margin-right: (@gutter / -2); + } +} + +// Generate the extra small columns +.make-xs-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @grid-float-breakpoint) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the small columns +.make-sm-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @screen-sm-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the small column offsets +.make-sm-column-offset(@columns) { + @media (min-width: @screen-sm-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-push(@columns) { + @media (min-width: @screen-sm-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-pull(@columns) { + @media (min-width: @screen-sm-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the medium columns +.make-md-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @screen-md-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the medium column offsets +.make-md-column-offset(@columns) { + @media (min-width: @screen-md-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-push(@columns) { + @media (min-width: @screen-md-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-pull(@columns) { + @media (min-width: @screen-md-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the large columns +.make-lg-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @screen-lg-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the large column offsets +.make-lg-column-offset(@columns) { + @media (min-width: @screen-lg-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-push(@columns) { + @media (min-width: @screen-lg-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-pull(@columns) { + @media (min-width: @screen-lg-min) { + right: percentage((@columns / @grid-columns)); + } +} +{% endhighlight %} + +

    Example usage

    +

    You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an example of using the default settings to create a two-column layout with a gap between.

    +{% highlight css %} +.wrapper { + .make-row(); +} +.content-main { + .make-lg-column(8); +} +.content-secondary { + .make-lg-column(3); + .make-lg-column-offset(1); +} +{% endhighlight %} +{% highlight html %} +
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +
    + + + + + +
    + + + +

    Headings

    +

    All HTML headings, <h1> through <h6>, are available. .h1 through .h6 classes are also available, for when you want to match the font styling of a heading but still want your text to be displayed inline.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    h1. Bootstrap heading

    Semibold 36px

    h2. Bootstrap heading

    Semibold 30px

    h3. Bootstrap heading

    Semibold 24px

    h4. Bootstrap heading

    Semibold 18px
    h5. Bootstrap heading
    Semibold 14px
    h6. Bootstrap heading
    Semibold 12px
    +
    +{% highlight html %} +

    h1. Bootstrap heading

    +

    h2. Bootstrap heading

    +

    h3. Bootstrap heading

    +

    h4. Bootstrap heading

    +
    h5. Bootstrap heading
    +
    h6. Bootstrap heading
    +{% endhighlight %} + +

    Create lighter, secondary text in any heading with a generic <small> tag or the .small class.

    +
    + + + + + + + + + + + + + + + + + + + + + +

    h1. Bootstrap heading Secondary text

    h2. Bootstrap heading Secondary text

    h3. Bootstrap heading Secondary text

    h4. Bootstrap heading Secondary text

    h5. Bootstrap heading Secondary text
    h6. Bootstrap heading Secondary text
    +
    +{% highlight html %} +

    h1. Bootstrap heading Secondary text

    +

    h2. Bootstrap heading Secondary text

    +

    h3. Bootstrap heading Secondary text

    +

    h4. Bootstrap heading Secondary text

    +
    h5. Bootstrap heading Secondary text
    +
    h6. Bootstrap heading Secondary text
    +{% endhighlight %} + + + +

    Body copy

    +

    Bootstrap's global default font-size is 14px, with a line-height of 1.428. This is applied to the <body> and all paragraphs. In addition, <p> (paragraphs) receive a bottom margin of half their computed line-height (10px by default).

    +
    +

    Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.

    +

    Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.

    +

    Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.

    +
    +{% highlight html %} +

    ...

    +{% endhighlight %} + + +

    Lead body copy

    +

    Make a paragraph stand out by adding .lead.

    +
    +

    Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.

    +
    +{% highlight html %} +

    ...

    +{% endhighlight %} + + +

    Built with Less

    +

    The typographic scale is based on two LESS variables in variables.less: @font-size-base and @line-height-base. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.

    + + + +

    Emphasis

    +

    Make use of HTML's default emphasis tags with lightweight styles.

    + +

    Small text

    +

    For de-emphasizing inline or blocks of text, use the <small> tag to set text at 85% the size of the parent. Heading elements receive their own font-size for nested <small> elements.

    +

    You may alternatively use an inline element with .small in place of any <small>

    +
    +

    This line of text is meant to be treated as fine print.

    +
    +{% highlight html %} +This line of text is meant to be treated as fine print. +{% endhighlight %} + + +

    Bold

    +

    For emphasizing a snippet of text with a heavier font-weight.

    +
    +

    The following snippet of text is rendered as bold text.

    +
    +{% highlight html %} +rendered as bold text +{% endhighlight %} + +

    Italics

    +

    For emphasizing a snippet of text with italics.

    +
    +

    The following snippet of text is rendered as italicized text.

    +
    +{% highlight html %} +rendered as italicized text +{% endhighlight %} + +
    +

    Alternate elements

    +

    Feel free to use <b> and <i> in HTML5. <b> is meant to highlight words or phrases without conveying additional importance while <i> is mostly for voice, technical terms, etc.

    +
    + +

    Alignment classes

    +

    Easily realign text to components with text alignment classes.

    +
    +

    Left aligned text.

    +

    Center aligned text.

    +

    Right aligned text.

    +
    +{% highlight html %} +

    Left aligned text.

    +

    Center aligned text.

    +

    Right aligned text.

    +{% endhighlight %} + +

    Emphasis classes

    +

    Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and will darken on hover just like our default link styles.

    +
    +

    Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.

    +

    Nullam id dolor id nibh ultricies vehicula ut id elit.

    +

    Duis mollis, est non commodo luctus, nisi erat porttitor ligula.

    +

    Maecenas sed diam eget risus varius blandit sit amet non magna.

    +

    Etiam porta sem malesuada magna mollis euismod.

    +

    Donec ullamcorper nulla non metus auctor fringilla.

    +
    +{% highlight html %} +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +{% endhighlight %} +
    +

    Dealing with specificity

    +

    Sometimes emphasis classes cannot be applied due to the specificity of another selector. In most cases, a sufficient workaround is to wrap your text in a <span> with the class.

    +
    + + + +

    Abbreviations

    +

    Stylized implementation of HTML's <abbr> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a title attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.

    + +

    Basic abbreviation

    +

    For expanded text on long hover of an abbreviation, include the title attribute with the <abbr> element.

    +
    +

    An abbreviation of the word attribute is attr.

    +
    +{% highlight html %} +attr +{% endhighlight %} + +

    Initialism

    +

    Add .initialism to an abbreviation for a slightly smaller font-size.

    +
    +

    HTML is the best thing since sliced bread.

    +
    +{% highlight html %} +HTML +{% endhighlight %} + + + +

    Addresses

    +

    Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <br>.

    +
    +
    + Twitter, Inc.
    + 795 Folsom Ave, Suite 600
    + San Francisco, CA 94107
    + P: (123) 456-7890 +
    +
    + Full Name
    + first.last@example.com +
    +
    +{% highlight html %} +
    + Twitter, Inc.
    + 795 Folsom Ave, Suite 600
    + San Francisco, CA 94107
    + P: (123) 456-7890 +
    + +
    + Full Name
    + first.last@example.com +
    +{% endhighlight %} + + + +

    Blockquotes

    +

    For quoting blocks of content from another source within your document.

    + +

    Default blockquote

    +

    Wrap <blockquote> around any HTML as the quote. For straight quotes, we recommend a <p>.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    +
    +{% highlight html %} +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    +{% endhighlight %} + +

    Blockquote options

    +

    Style and content changes for simple variations on a standard <blockquote>.

    + +

    Naming a source

    +

    Add <small> tag for identifying the source. Wrap the name of the source work in <cite>.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    + Someone famous in Source Title +
    +
    +{% highlight html %} +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    + Someone famous in Source Title +
    +{% endhighlight %} + +

    Alternate displays

    +

    Use .pull-right for a floated, right-aligned blockquote.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    + Someone famous in Source Title +
    +
    +{% highlight html %} +
    + ... +
    +{% endhighlight %} + + + +

    Lists

    + +

    Unordered

    +

    A list of items in which the order does not explicitly matter.

    +
    +
      +
    • Lorem ipsum dolor sit amet
    • +
    • Consectetur adipiscing elit
    • +
    • Integer molestie lorem at massa
    • +
    • Facilisis in pretium nisl aliquet
    • +
    • Nulla volutpat aliquam velit +
        +
      • Phasellus iaculis neque
      • +
      • Purus sodales ultricies
      • +
      • Vestibulum laoreet porttitor sem
      • +
      • Ac tristique libero volutpat at
      • +
      +
    • +
    • Faucibus porta lacus fringilla vel
    • +
    • Aenean sit amet erat nunc
    • +
    • Eget porttitor lorem
    • +
    +
    +{% highlight html %} +
      +
    • ...
    • +
    +{% endhighlight %} + +

    Ordered

    +

    A list of items in which the order does explicitly matter.

    +
    +
      +
    1. Lorem ipsum dolor sit amet
    2. +
    3. Consectetur adipiscing elit
    4. +
    5. Integer molestie lorem at massa
    6. +
    7. Facilisis in pretium nisl aliquet
    8. +
    9. Nulla volutpat aliquam velit
    10. +
    11. Faucibus porta lacus fringilla vel
    12. +
    13. Aenean sit amet erat nunc
    14. +
    15. Eget porttitor lorem
    16. +
    +
    +{% highlight html %} +
      +
    1. ...
    2. +
    +{% endhighlight %} + +

    Unstyled

    +

    Remove the default list-style and left margin on list items (immediate children only). This only applies to immediate children list items, meaning you will need to add the class for any nested lists as well.

    +
    +
      +
    • Lorem ipsum dolor sit amet
    • +
    • Consectetur adipiscing elit
    • +
    • Integer molestie lorem at massa
    • +
    • Facilisis in pretium nisl aliquet
    • +
    • Nulla volutpat aliquam velit +
        +
      • Phasellus iaculis neque
      • +
      • Purus sodales ultricies
      • +
      • Vestibulum laoreet porttitor sem
      • +
      • Ac tristique libero volutpat at
      • +
      +
    • +
    • Faucibus porta lacus fringilla vel
    • +
    • Aenean sit amet erat nunc
    • +
    • Eget porttitor lorem
    • +
    +
    +{% highlight html %} +
      +
    • ...
    • +
    +{% endhighlight %} + +

    Inline

    +

    Place all list items on a single line with display: inline-block; and some light padding.

    +
    +
      +
    • Lorem ipsum
    • +
    • Phasellus iaculis
    • +
    • Nulla volutpat
    • +
    +
    +{% highlight html %} +
      +
    • ...
    • +
    +{% endhighlight %} + +

    Description

    +

    A list of terms with their associated descriptions.

    +
    +
    +
    Description lists
    +
    A description list is perfect for defining terms.
    +
    Euismod
    +
    Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
    +
    Donec id elit non mi porta gravida at eget metus.
    +
    Malesuada porta
    +
    Etiam porta sem malesuada magna mollis euismod.
    +
    +
    +{% highlight html %} +
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +

    Horizontal description

    +

    Make terms and descriptions in <dl> line up side-by-side. Starts off stacked like default <dl>s, but when the navbar expands, so do these.

    +
    +
    +
    Description lists
    +
    A description list is perfect for defining terms.
    +
    Euismod
    +
    Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
    +
    Donec id elit non mi porta gravida at eget metus.
    +
    Malesuada porta
    +
    Etiam porta sem malesuada magna mollis euismod.
    +
    Felis euismod semper eget lacinia
    +
    Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
    +
    +
    +{% highlight html %} +
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +
    +

    Auto-truncating

    +

    Horizontal description lists will truncate terms that are too long to fit in the left column with text-overflow. In narrower viewports, they will change to the default stacked layout.

    +
    +
    + + + +
    + + +

    Inline

    +

    Wrap inline snippets of code with <code>.

    +
    + For example, <section> should be wrapped as inline. +
    +{% highlight html %} +For example, <section> should be wrapped as inline. +{% endhighlight %} + +

    Basic block

    +

    Use <pre> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.

    +
    +
    <p>Sample text here...</p>
    +
    +{% highlight html %} +
    <p>Sample text here...</p>
    +{% endhighlight %} + +

    You may optionally add the .pre-scrollable class, which will set a max-height of 350px and provide a y-axis scrollbar.

    +
    + + + + +
    + + +

    Basic example

    +

    For basic styling—light padding and only horizontal dividers—add the base class .table to any <table>. It may seem super redundant, but given the widespread use of tables for other plugins like calendars and date pickers, we've opted to isolate our custom table styles.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Striped rows

    +

    Use .table-striped to add zebra-striping to any table row within the <tbody>.

    +
    +

    Cross-browser compatibility

    +

    Striped tables are styled via the :nth-child CSS selector, which is not available in Internet Explorer 8.

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Bordered table

    +

    Add .table-bordered for borders on all sides of the table and cells.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    MarkOtto@TwBootstrap
    2JacobThornton@fat
    3Larry the Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Hover rows

    +

    Add .table-hover to enable a hover state on table rows within a <tbody>.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Condensed table

    +

    Add .table-condensed to make tables more compact by cutting cell padding in half.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Contextual classes

    +

    Use contextual classes to color table rows or individual cells.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassDescription
    + .active + Applies the hover color to a particular row or cell
    + .success + Indicates a successful or positive action
    + .warning + Indicates a warning that might need attention
    + .danger + Indicates a dangerous or potentially negative action
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #Column headingColumn headingColumn heading
    1Column contentColumn contentColumn content
    2Column contentColumn contentColumn content
    3Column contentColumn contentColumn content
    4Column contentColumn contentColumn content
    5Column contentColumn contentColumn content
    6Column contentColumn contentColumn content
    7Column contentColumn contentColumn content
    +
    +{% highlight html %} + +... +... +... +... + + + + ... + ... + ... + ... + +{% endhighlight %} + + +

    Responsive tables

    +

    Create responsive tables by wrapping any .table in .table-responsive to make them scroll horizontally up to small devices (under 768px). When viewing on anything larger than 768px wide, you will not see any difference in these tables.

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #Table headingTable headingTable headingTable headingTable headingTable heading
    1Table cellTable cellTable cellTable cellTable cellTable cell
    2Table cellTable cellTable cellTable cellTable cellTable cell
    3Table cellTable cellTable cellTable cellTable cellTable cell
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #Table headingTable headingTable headingTable headingTable headingTable heading
    1Table cellTable cellTable cellTable cellTable cellTable cell
    2Table cellTable cellTable cellTable cellTable cellTable cell
    3Table cellTable cellTable cellTable cellTable cellTable cell
    +
    +
    +{% highlight html %} +
    + + ... +
    +
    +{% endhighlight %} + +
    + + + + +
    + + +

    Basic example

    +

    Individual form controls automatically receive some global styling. All textual <input>, <textarea>, and <select> elements with .form-control are set to width: 100%; by default. Wrap labels and controls in .form-group for optimum spacing.

    +
    +
    +
    + + +
    +
    + + +
    +
    + + +

    Example block-level help text here.

    +
    +
    + +
    + +
    +
    +{% highlight html %} +
    +
    + + +
    +
    + + +
    +
    + + +

    Example block-level help text here.

    +
    +
    + +
    + +
    +{% endhighlight %} + + +

    Inline form

    +

    Add .form-inline for left-aligned and inline-block controls for a compact layout.

    +
    +

    Requires custom widths

    +

    Inputs, selects, and textareas are 100% wide by default in Bootstrap. To use the inline form, you'll have to set a width on the form controls used within.

    +
    +
    +

    Always add labels

    +

    Screen readers will have trouble with your forms if you don't include a label for every input. For these inline forms, you can hide the labels using the .sr-only class.

    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    +
    +{% highlight html %} +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    +{% endhighlight %} + + +

    Horizontal form

    +

    Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal layout by adding .form-horizontal to the form. Doing so changes .form-groups to behave as grid rows, so no need for .row.

    +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +{% highlight html %} +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +{% endhighlight %} + + +

    Supported controls

    +

    Examples of standard form controls supported in an example form layout.

    + +

    Inputs

    +

    Most common form control, text-based input fields. Includes support for all HTML5 types: text, password, datetime, datetime-local, date, month, time, week, number, email, url, search, tel, and color.

    +
    +

    Type declaration required

    +

    Inputs will only be fully styled if their type is properly declared.

    +
    +
    +
    + +
    +
    +{% highlight html %} + +{% endhighlight %} +
    +

    Input groups

    +

    To add integrated text or buttons before and/or after any text-based <input>, check out the input group component.

    +
    + +

    Textarea

    +

    Form control which supports multiple lines of text. Change rows attribute as necessary.

    +
    +
    + +
    +
    +{% highlight html %} + +{% endhighlight %} + +

    Checkboxes and radios

    +

    Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.

    +

    Default (stacked)

    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    +{% highlight html %} +
    + +
    + +
    + +
    +
    + +
    +{% endhighlight %} + +

    Inline checkboxes

    +

    Use .checkbox-inline or .radio-inline class to a series of checkboxes or radios for controls appear on the same line.

    +
    +
    + + + +
    +
    +{% highlight html %} + + + +{% endhighlight %} + +

    Selects

    +

    Use the default option, or add multiple to show multiple options at once.

    +
    +
    + +
    + +
    +
    +{% highlight html %} + + + +{% endhighlight %} + + +

    Static control

    +

    When you need to place plain text next to a form label within a horizontal form, use the .form-control-static class on a <p>.

    +
    +
    +
    + +
    +

    email@example.com

    +
    +
    +
    + +
    + +
    +
    +
    +
    +{% highlight html %} +
    +
    + +
    +

    email@example.com

    +
    +
    +
    + +
    + +
    +
    +
    +{% endhighlight %} + + +

    Form states

    +

    Provide feedback to users or visitors with basic feedback states on form controls and labels.

    + +

    Input focus

    +

    We remove the default outline styles on some form controls and apply a box-shadow in its place for :focus.

    +
    +
    + +
    +
    +{% highlight html %} + +{% endhighlight %} + +

    Disabled inputs

    +

    Add the disabled attribute on an input to prevent user input and trigger a slightly different look.

    +
    +
    + +
    +
    +{% highlight html %} + +{% endhighlight %} + +

    Disabled fieldsets

    +

    Add the disabled attribute to a <fieldset> to disable all the controls within the <fieldset> at once.

    + +
    +

    Link functionality of <a> not impacted

    +

    This class will only change the appearance of <a class="btn btn-default"> buttons, not their functionality. Use custom JavaScript to disable links here.

    +
    + +
    +

    Cross-browser compatibility

    +

    While Bootstrap will apply these styles in all browsers, Internet Explorer 9 and below don't actually support the disabled attribute on a <fieldset>. Use custom JavaScript to disable the fieldset in these browsers.

    +
    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    +
    +
    +{% highlight html %} +
    +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    +
    +{% endhighlight %} + +

    Validation states

    +

    Bootstrap includes validation styles for error, warning, and success states on form controls. To use, add .has-warning, .has-error, or .has-success to the parent element. Any .control-label, .form-control, and .help-block within that element will receive the validation styles.

    + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +{% highlight html %} +
    + + +
    +
    + + +
    +
    + + +
    +{% endhighlight %} + + +

    Control sizing

    +

    Set heights using classes like .input-lg, and set widths using grid column classes like .col-lg-*.

    + +

    Height sizing

    +

    Create larger or smaller form controls that match button sizes.

    +
    +
    +
    + + + + + + + +
    +
    +
    +{% highlight html %} + + + + + + + +{% endhighlight %} + +

    Column sizing

    +

    Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.

    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +{% highlight html %} +
    +
    + +
    +
    + +
    +
    + +
    +
    +{% endhighlight %} + +

    Help text

    +

    Block level help text for form controls.

    +
    +
    + + A block of help text that breaks onto a new line and may extend beyond one line. +
    +
    +{% highlight html %} +A block of help text that breaks onto a new line and may extend beyond one line. +{% endhighlight %} + +
    + + + + +
    + + +

    Options

    +

    Use any of the available button classes to quickly create a styled button.

    +
    + + + + + + + +
    +{% highlight html %} + + + + + + + + + + + + + + + + + + + + +{% endhighlight %} + +

    Sizes

    +

    Fancy larger or smaller buttons? Add .btn-lg, .btn-sm, or .btn-xs for additional sizes.

    +
    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +
    +{% highlight html %} +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +{% endhighlight %} + +

    Create block level buttons—those that span the full width of a parent— by adding .btn-block.

    +
    +
    + + +
    +
    +{% highlight html %} + + +{% endhighlight %} + + +

    Active state

    +

    Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. For <button> elements, this is done via :active. For <a> elements, it's done with .active. However, you may use .active <button>s should you need to replicate the active state progammatically.

    + +

    Button element

    +

    No need to add :active as it's a pseudo-class, but if you need to force the same appearance, go ahead and add .active.

    +

    + + +

    +{% highlight html %} + + +{% endhighlight %} + +

    Anchor element

    +

    Add the .active class to <a> buttons.

    +

    + Primary link + Link +

    +{% highlight html %} +Primary link +Link +{% endhighlight %} + + +

    Disabled state

    +

    Make buttons look unclickable by fading them back 50%.

    + +

    Button element

    +

    Add the disabled attribute to <button> buttons.

    +

    + + +

    +{% highlight html %} + + +{% endhighlight %} + +
    +

    Cross-browser compatibility

    +

    If you add the disabled attribute to a <button>, Internet Explorer 9 and below will render text gray with a nasty text-shadow that we cannot fix.

    +
    + +

    Anchor element

    +

    Add the .disabled class to <a> buttons.

    +

    + Primary link + Link +

    +{% highlight html %} +Primary link +Link +{% endhighlight %} +

    + We use .disabled as a utility class here, similar to the common .active class, so no prefix is required. +

    +
    +

    Link functionality not impacted

    +

    This class will only change the <a>'s appearance, not its functionality. Use custom JavaScript to disable links here.

    +
    +
    +

    Context-specific usage

    +

    While button classes can be used on <a> and <button> elements, only <button> elements are supported within our nav and navbar components.

    +
    + + +

    Button tags

    +

    Use the button classes on an <a>, <button>, or <input> element.

    +
    + Link + + + +
    +{% highlight html %} +Link + + + +{% endhighlight %} + +
    +

    Cross-browser rendering

    +

    As a best practice, we highly recommend using the <button> element whenever possible to ensure matching cross-browser rendering.

    +

    Among other things, there's a Firefox bug that prevents us from setting the line-height of <input>-based buttons, causing them to not exactly match the height of other buttons on Firefox.

    +
    + +
    + + + + +
    + + +

    Add classes to an <img> element to easily style images in any project.

    +
    +

    Cross-browser compatibility

    +

    Keep in mind that Internet Explorer 8 lacks support for rounded corners.

    +
    +
    + A generic square placeholder image with rounded corners + A generic square placeholder image where only the portion within the circle circumscribed about said square is visible + A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera +
    +{% highlight html %} +... +... +... +{% endhighlight %} + +
    +

    Responsive images

    +

    Looking for how to make images more responsive? Check out the responsive images section up top.

    +
    + +
    + + + +
    + + + +

    Close icon

    +

    Use the generic close icon for dismissing content like modals and alerts.

    +
    +

    +
    +{% highlight html %} + +{% endhighlight %} + + +

    Carets

    +

    Use carets to indicate dropdown functionality and direction. Note that the default caret will reverse automatically in dropup menus.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + +

    Quick floats

    +

    Float an element to the left or right with a class. !important is included to avoid specificity issues. Classes can also be used as mixins.

    +{% highlight html %} +
    ...
    +
    ...
    +{% endhighlight %} +{% highlight css %} +// Classes +.pull-left { + float: left !important; +} +.pull-right { + float: right !important; +} + +// Usage as mixins +.element { + .pull-left(); +} +.another-element { + .pull-right(); +} +{% endhighlight %} + +
    +

    Not for use in navbars

    +

    To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar docs for details.

    +
    + + +

    Center content blocks

    +

    Set an element to display: block and center via margin. Available as a mixin and class.

    +{% highlight html %} +
    ...
    +{% endhighlight %} +{% highlight css %} +// Classes +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +// Usage as mixins +.element { + .center-block(); +} +{% endhighlight %} + + + +

    Clearfix

    +

    Clear the float on any element with the .clearfix class. Utilizes the micro clearfix as popularized by Nicolas Gallagher. Can also be used as a mixin.

    +{% highlight html %} + +
    ...
    +{% endhighlight %} +{% highlight css %} +// Mixin itself +.clearfix() { + &:before, + &:after { + content: " "; + display: table; + } + &:after { + clear: both; + } +} + +// Usage as a Mixin +.element { + .clearfix(); +} +{% endhighlight %} + + +

    Showing and hiding content

    +

    Force an element to be shown or hidden (including for screen readers) with the use of .show and .hidden classes. These classes use !important to avoid specificity conflicts, just like the quick floats. They are only available for block level toggling. They can also be used as mixins.

    +

    .hide is available, but it does not always affect screen readers and is deprecated as of v3.0.1. Use .hidden or .sr-only instead.

    +

    Furthermore, .invisible can be used to toggle only the visibility of an element, meaning its display is not modified and the element can still affect the flow of the document.

    +{% highlight html %} +
    ...
    + +{% endhighlight %} +{% highlight css %} +// Classes +.show { + display: block !important; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.invisible { + visibility: hidden; +} + +// Usage as mixins +.element { + .show(); +} +.another-element { + .hidden(); +} +{% endhighlight %} + + +

    Screen reader content

    +

    Hide an element to all devices except screen readers with .sr-only. Necessary for following accessibility best practices. Can also be used as a mixin.

    +{% highlight html %} +Skip to main content +{% endhighlight %} +{% highlight css %} +// Usage as a Mixin +.skip-navigation { + .sr-only(); +} +{% endhighlight %} + + +

    Image replacement

    +

    Utilize the .text-hide class or mixin to help replace an element's text content with a background image.

    +{% highlight html %} +

    Custom heading

    +{% endhighlight %} + {% highlight css %} +// Usage as a Mixin +.heading { + .text-hide(); +} +{% endhighlight %} +
    + + + + +
    + +

    For faster mobile-friendly development, use these utility classes for showing and hiding content by device via media query. Also included are utility classes for toggling content when printed.

    +

    Try to use these on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. Responsive utilities are currently only available for block and table toggling. Use with inline and table elements is currently not supported.

    + + +

    Available classes

    +

    Use a single or combination of the available classes for toggling content across viewport breakpoints.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Extra small devices + Phones (<768px) + + Small devices + Tablets (≥768px) + + Medium devices + Desktops (≥992px) + + Large devices + Desktops (≥1200px) +
    .visible-xsVisible
    .visible-smVisible
    .visible-mdVisible
    .visible-lgVisible
    .hidden-xsVisibleVisibleVisible
    .hidden-smVisibleVisibleVisible
    .hidden-mdVisibleVisibleVisible
    .hidden-lgVisibleVisibleVisible
    +
    + + +

    Print classes

    +

    Similar to the regular responsive classes, use these for toggling content for print.

    +
    + + + + + + + + + + + + + + + + + + + + +
    ClassBrowserPrint
    .visible-printVisible
    .hidden-printVisible
    +
    + + +

    Test cases

    +

    Resize your browser or load on different devices to test the responsive utility classes.

    + +

    Visible on...

    +

    Green checkmarks indicate the element is visible in your current viewport.

    +
    +
    + + ✔ Visible on x-small +
    +
    + + ✔ Visible on small +
    +
    +
    + Medium + ✔ Visible on medium +
    +
    + + ✔ Visible on large +
    +
    +
    +
    + + ✔ Visible on x-small and small +
    +
    + + ✔ Visible on medium and large +
    +
    +
    + + ✔ Visible on x-small and medium +
    +
    + + ✔ Visible on small and large +
    +
    +
    + + ✔ Visible on x-small and large +
    +
    + + ✔ Visible on small and medium +
    +
    + +

    Hidden on...

    +

    Here, green checkmarks also indicate the element is hidden in your current viewport.

    +
    +
    + + ✔ Hidden on x-small +
    +
    + + ✔ Hidden on small +
    +
    +
    + Medium + ✔ Hidden on medium +
    +
    + + ✔ Hidden on large +
    +
    +
    +
    + + ✔ Hidden on x-small and small +
    +
    + + ✔ Hidden on medium and large +
    +
    +
    + + ✔ Hidden on x-small and medium +
    +
    + + ✔ Hidden on small and large +
    +
    +
    + + ✔ Hidden on x-small and large +
    +
    + + ✔ Hidden on small and medium +
    +
    + +
    diff --git a/app/bower_components/sass-bootstrap/customize.html b/app/bower_components/sass-bootstrap/customize.html new file mode 100644 index 0000000..5b6a09c --- /dev/null +++ b/app/bower_components/sass-bootstrap/customize.html @@ -0,0 +1,1715 @@ +--- +layout: default +title: Customize and download +slug: customize +lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to get your very own version. +base_url: "../" +--- + + +
    +
    + +

    Choose which LESS files to compile into your custom build of Bootstrap. Not sure which files to use? Read through the CSS and Components pages in the docs.

    + +
    +
    +

    Common CSS

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +

    Components

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +

    JavaScript components

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + +

    Utilities

    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + + +
    + +

    Choose which jQuery plugins should be included in your custom JavaScript files. Unsure what to include? Read the JavaScript page in the docs.

    +
    +
    +

    Linked to components

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +

    Magic

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    +

    Produces two files

    +

    All checked plugins will be compiled into a readable bootstrap.js and a minified bootstrap.min.js. We recommend you use the minified version in production.

    +
    + +
    +

    jQuery required

    +

    All plugins require the latest version of jQuery to be included.

    +
    +
    + + + +
    + +

    Customize LESS variables to define colors, sizes and more inside your custom CSS stylesheets.

    + +

    Basics

    + + +

    Color system

    +
    +
    + + + + + + +
    +
    + + + + +
    +
    + + +

    Body scaffolding

    +
    +
    + + +

    Background color for <body>.

    + + +

    Global text color on <body>.

    +
    +
    + + +

    Global textual link color

    + + +

    Link hover color set via darken() function

    +
    +
    + + +

    Typography

    +
    +
    +

    Generic font variables

    + + +

    Default sans-serif fonts.

    + + +

    Default serif fonts.

    + + +

    Default monospace fonts for <code> and <pre>.

    + +

    Base type styes

    + + + + + + + + + + +
    +
    +

    Heading font sizes

    + + + + + + + + + + + + +
    +
    + + +

    Headings

    +
    +
    + + + + +
    +
    + + + + +
    +
    + + +

    Code blocks

    +
    +
    + + + + +
    +
    + + + + + + +
    +
    + + +

    Media queries breakpoints

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +

    Layout and grid system

    +
    +
    + + +

    For @screen-sm-min and up.

    +
    +
    + + +

    For @screen-md-min and up.

    +
    +
    +
    + + +

    For @screen-lg-min and up.

    +
    +
    + +
    +
    + + +

    Number of columns in the grid.

    +
    +
    + + +

    Padding between columns.

    +
    +
    +
    + + +

    Point at which the navbar stops collapsing.

    +
    +
    + + +

    Components

    + +

    Padding

    +
    +
    + + + + +
    +
    + + + + +
    +
    + + + + +
    +
    + +

    Rounded corners

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +

    Component active state

    +
    +
    + + +

    Global color for active items (e.g., navs or dropdowns)

    +
    +
    + + +

    Global background color for active items (e.g., navs or dropdowns)

    +
    +
    + +

    Carets

    +
    +
    + + +
    +
    + + +
    +
    + + +

    Buttons

    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +

    Default

    + + + + + + +

    Primary

    + + + + + + +

    Info

    + + + + + + +
    +
    +

    Success

    + + + + + + +

    Warning

    + + + + + + +

    Danger

    + + + + + + +
    +
    + + +

    Form states and alerts

    +
    +
    +

    Success

    + + + + + + +

    Warning

    + + + + + + +
    +
    +

    Danger

    + + + + + + +

    Info

    + + + + + + +
    +
    + + +

    Alerts

    + +

    Base styles

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +

    Warning

    + + + + + + + +

    Success

    + + + + + + +
    +
    +

    Danger

    + + + + + + + +

    Info

    + + + + + + +
    +
    + + +

    Navbar

    + +

    Base styles

    +
    +
    + + + + +
    +
    + + + + +
    +
    + + +
    +
    + +
    +
    +

    Default navbar

    +

    Basics

    + + + + + + + +

    Links

    + + + + + + + + + + + + + + + +

    Brand

    + + + + + + + +

    Toggle

    + + + + + + +
    + +
    +

    Inverted navbar

    + +

    Basics

    + + + + + + + +

    Links

    + + + + + + + + + + + + + + + +

    Brand

    + + + + + + + +

    Toggle

    + + + + + + +
    +
    + + +

    Nav

    + +

    Default nav

    +
    +
    +

    Common values

    + + + + + + + + + + + + + +

    Pills

    + + + + +
    +
    +

    Tabs

    + + + + + + + + + + + + + + +
    +
    + + +

    Tables

    +
    +
    + + +

    Default padding for <th>s and <td>s

    + + +

    Default padding cells in .table-condensed

    +
    +
    + + +

    Default background color used for all tables.

    + + +

    Background color used for .table-striped.

    +
    +
    + + +

    Background color used for .table-hover.

    + + +

    Border color for table and cell borders.

    +
    +
    + + +

    Forms

    + +

    Inputs

    +
    +
    + + +

    Text color for <input>s

    + + +

    <input> background color

    +
    +
    + + +

    <input> border color

    + + +

    <input> border radius

    +
    +
    + + +

    Placeholder text color

    +
    +
    + +

    Input states

    +
    +
    + + +

    Border color for inputs on focus

    +
    +
    + + +

    <input disabled> background color

    +
    +
    + +

    Input sizes

    +
    +
    + + +

    Default .form-control height

    +
    +
    + + +

    Large .form-control height

    +
    +
    + + +

    Small .form-control height

    +
    +
    + +

    Legend

    +
    +
    + + +
    +
    + + +
    +
    + +

    Input groups

    +
    +
    + + +

    Background color for textual input addons

    +
    +
    + + +

    Border color for textual input addons

    +
    +
    + + +

    Dropdowns

    +
    +
    +

    Dropdown menu

    + + +

    Dropdown menu background color

    + + +

    Dropdown menu border color

    + + +

    Dropdown menu border color for IE8

    + + +

    Indicator arrow for showing an element has a dropdown

    + + +

    Dropdown divider top border color

    + + +

    Text color for headers within dropdown menus

    +
    +
    +

    Dropdown items

    + + +

    Dropdown text color

    + + + +

    Hovered dropdown menu entry text color

    + + +

    Hovered dropdown menu entry text color

    + + + +

    Active dropdown menu entry text color

    + + +

    Active dropdown menu entry background color

    + + + +

    Disabled dropdown menu entry background color

    +
    +
    + + +

    Panels and wells

    + +

    Common panel styles

    +
    +
    + + + + +

    Border color for elements within panels

    +
    +
    + + + + +
    +
    +

    Contextual panel colors

    +
    +
    +

    Default

    + + + + + + + +

    Primary

    + + + + + + + +

    Success

    + + + + + + +
    +
    +

    Info

    + + + + + + + +

    Warning

    + + + + + + + +

    Danger

    + + + + + + +
    +
    + +

    Wells

    + + + + +

    Accordion

    + + + + +

    Badges

    + +

    Base styles

    +
    +
    + + + + +
    +
    + + +
    +
    + + +
    +
    + +

    States

    +
    +
    + + +

    Linked badge text color on hover

    +
    +
    + + +

    Badge text color in active nav link

    +
    +
    + + +

    Badge background color in active nav link

    +
    +
    + + +

    Breadcrumbs

    +
    +
    + + +

    Breadcrumb text color

    + + +

    Breadcrumb background color

    +
    +
    + + +

    Text color of current page in the breadcrumb

    + + +

    Textual separator for between breadcrumb elements

    +
    +
    + +

    Jumbotron

    +
    +
    + + + + + + +
    +
    + + + + +
    +
    + + +

    Modals

    + +

    Base modal

    +
    +
    + + +

    Padding applied to the modal body

    +
    +
    + + +

    Modal backdrop background color

    +
    +
    + +

    Modal header and footer

    +
    +
    + + +

    Padding applied to the modal title

    +
    +
    + + +

    Modal title line-height

    +
    +
    + + +

    Modal header border color

    + + +

    Modal footer border color

    +
    +
    + +

    Modal content

    +
    +
    + + +

    Background color of modal content area

    +
    +
    + + +

    Modal content border color

    +
    +
    + + +

    Modal content border color for IE8

    +
    +
    + + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +

    List group

    + +

    Base styles

    +
    +
    + + +

    Background color on .list-group-item

    +
    +
    + + +

    .list-group-item border color

    +
    +
    + + +

    List group border radius

    +
    +
    + +

    Hover and active states

    +
    +
    + + +

    Background color of single list elements on hover

    +
    +
    +
    +
    + + +

    Text color of active list elements

    +
    +
    + + +

    Background color of active list elements

    +
    +
    + + +

    Border color of active list elements

    +
    +
    + + +

    Thumbnails

    + +

    Base thumbnail

    +
    +
    + + +

    Padding around the thumbnail image

    + + +

    Thumbnail background color

    +
    +
    + + +

    Thumbnail border color

    + + +

    Thumbnail border radius

    +
    +
    + +

    Thumbnail captions

    +
    +
    + + +

    Padding around the thumbnail caption

    +
    +
    + + +

    Custom text color for thumbnail captions

    +
    +
    + + +

    Progress bars

    + +

    Shared styles

    +
    +
    + + +

    Background color of the whole progress component

    +
    +
    + + +

    Info progress bar text color

    +
    +
    + + +

    Info progress bar text shadow

    +
    +
    + + +

    Default progress bar color

    +
    +
    + +

    Contextual states

    +
    +
    + + +

    Success progress bar color

    + + +

    Info progress bar color

    +
    +
    + + +

    Warning progress bar color

    + + +

    Danger progress bar color

    +
    +
    + + +

    Pagination

    + +

    Default styles

    +
    +
    + + +

    Background color

    +
    +
    + + +

    Border color

    +
    +
    + + +

    Background hover color

    +
    +
    + +

    Disabled and active states

    +
    +
    + + +

    Disabled text color

    +
    +
    + + +

    Active background color

    +
    +
    + + +

    Active text color

    +
    +
    + + +

    Pager

    +
    +
    + + +

    Pager border radius

    +
    +
    + + +

    Pager disabled state color

    +
    +
    + + +

    Labels

    +
    +
    + + +

    Default label text color

    +
    +
    + + +

    Default text color of a linked label

    +
    +
    + + +

    Default label background color

    +
    +
    + +
    +
    + + +

    Primary label background color

    + + +

    Success label background color

    +
    +
    + + +

    Info label background color

    + + +

    Warning label background color

    +
    +
    + + +

    Danger label background color

    +
    +
    + + +

    Tooltips and popovers

    + +

    Tooltip

    +
    +
    + + +

    Tooltip text color

    + + +

    Tooltip background color

    +
    +
    + + +

    Tooltip arrow width

    + + +

    Tooltip arrow color

    +
    +
    + + +

    Tooltip max width

    +
    +
    + +

    Popovers

    + +

    Base styles

    +
    +
    + + +

    Popover body background color

    + + +

    Popover maximum width

    +
    +
    + + +

    Popover border color

    + + +

    Popover fallback border color

    +
    +
    + + +

    Popover title background color

    +
    +
    + +

    Popover arrows

    +
    +
    + + +

    Popover arrow width

    +
    +
    + + +

    Popover arrow color

    +
    +
    +
    +
    + + +

    Popover outer arrow width

    +
    +
    + + +

    Popover outer arrow color

    +
    +
    + + +

    Popover outer arrow fallback color

    +
    +
    + + +

    Close button

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +

    Type

    +
    +
    + + +

    Text muted color

    +
    +
    + + +

    Abbreviations and acronyms border color

    +
    +
    + + +

    Headings small color

    +
    +
    + + +

    Blockquote small color

    +
    +
    + + +

    Blockquote border color

    +
    +
    + + +

    Page header border color

    +
    +
    + + +

    Other

    +
    +
    + + +

    Horizontal line color

    +
    +
    + + +

    Horizontal offset for forms and lists

    +
    +
    +
    + +
    + +

    Hooray! Your custom version of Bootstrap is now ready to be compiled. Just click the button below to finish the process.

    +
    + +
    +
    +
    diff --git a/app/bower_components/sass-bootstrap/docs-assets/css/docs.css b/app/bower_components/sass-bootstrap/docs-assets/css/docs.css new file mode 100644 index 0000000..7abf6ed --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/css/docs.css @@ -0,0 +1,1195 @@ +/*! + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ + + +/* + * Bootstrap Documentation + * Special styles for presenting Bootstrap's documentation and code examples. + * + * Table of contents: + * + * Scaffolding + * Main navigation + * Footer + * Social buttons + * Homepage + * Page headers + * Old docs callout + * Ads + * Side navigation + * Docs sections + * Callouts + * Grid styles + * Examples + * Code snippets (highlight) + * Responsive tests + * Glyphicons + * Customizer + * Miscellaneous + */ + + +/* + * Scaffolding + * + * Update the basics of our documents to prep for docs content. + */ + +body { + position: relative; /* For scrollyspy */ + padding-top: 50px; /* Account for fixed navbar */ +} + +/* Keep code small in tables on account of limited space */ +.table code { + font-size: 13px; + font-weight: normal; +} + +/* Outline button for use within the docs */ +.btn-outline { + color: #563d7c; + background-color: #fff; + border-color: #e5e5e5; +} +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active { + color: #fff; + background-color: #563d7c; + border-color: #563d7c; +} + +/* Inverted outline button (white on dark) */ +.btn-outline-inverse { + color: #fff; + background-color: transparent; + border-color: #cdbfe3; +} +.btn-outline-inverse:hover, +.btn-outline-inverse:focus, +.btn-outline-inverse:active { + color: #563d7c; + text-shadow: none; + background-color: #fff; + border-color: #fff; +} + + +/* + * Main navigation + * + * Turn the `.navbar` at the top of the docs purple. + */ + +.bs-docs-nav { + text-shadow: 0 -1px 0 rgba(0,0,0,.15); + background-color: #563d7c; + border-color: #463265; + box-shadow: 0 1px 0 rgba(255,255,255,.1); +} +.bs-docs-nav .navbar-collapse { + border-color: #463265; +} +.bs-docs-nav .navbar-brand { + color: #fff; +} +.bs-docs-nav .navbar-nav > li > a { + color: #cdbfe3; +} +.bs-docs-nav .navbar-nav > li > a:hover { + color: #fff; +} +.bs-docs-nav .navbar-nav > .active > a, +.bs-docs-nav .navbar-nav > .active > a:hover { + color: #fff; + background-color: #463265; +} +.bs-docs-nav .navbar-toggle { + border-color: #563d7c; +} +.bs-docs-nav .navbar-toggle:hover { + background-color: #463265; + border-color: #463265; +} + + +/* + * Footer + * + * Separated section of content at the bottom of all pages, save the homepage. + */ + +.bs-footer { + padding-top: 40px; + padding-bottom: 30px; + margin-top: 100px; + color: #777; + text-align: center; + border-top: 1px solid #e5e5e5; +} +.footer-links { + margin: 10px 0; + padding-left: 0; +} +.footer-links li { + display: inline; + padding: 0 2px; +} +.footer-links li:first-child { + padding-left: 0; +} + +@media (min-width: 768px) { + .bs-footer { + text-align: left; + } + .bs-footer p { + margin-bottom: 0; + } +} + + +/* + * Social buttons + * + * Twitter and GitHub social action buttons (for homepage and footer). + */ + +.bs-social { + margin-top: 20px; + margin-bottom: 20px; + text-align: center; +} +.bs-social-buttons { + display: inline-block; + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.bs-social-buttons li { + display: inline-block; + line-height: 1; + padding: 5px 8px; +} +.bs-social-buttons .twitter-follow-button { + width: 225px !important; +} +.bs-social-buttons .twitter-share-button { + width: 98px !important; +} +/* Style the GitHub buttons via CSS instead of inline attributes */ +.github-btn { + border: 0; + overflow: hidden; +} + +@media (min-width: 768px) { + .bs-social { + text-align: left; + } + .bs-social-buttons li:first-child { + padding-left: 0; + } +} + + +/* + * Topography, yo! + * + * Apply the map background via base64 and relevant colors where we need 'em. + */ + +.bs-docs-home, +.bs-header { + color: #cdbfe3; + background-color: #563d7c; + background-image: url(data:image/png;base64,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); +} + + +/* + * Homepage + * + * Tweaks to the custom homepage and the masthead (main jumbotron). + */ + + /* Masthead (headings and download button) */ + .bs-masthead { + position: relative; + padding: 30px 15px; + text-align: center; + text-shadow: 0 1px 0 rgba(0,0,0,.15); +} +.bs-masthead h1 { + font-size: 50px; + line-height: 1; + color: #fff; +} +.bs-masthead .btn-outline-inverse { + margin: 10px; +} + +/* Links to project-level content like the repo, Expo, etc */ +.bs-masthead-links { + margin-top: 20px; + margin-bottom: 40px; + padding: 0 15px; + list-style: none; + text-align: center; +} +.bs-masthead-links li { + display: inline; +} +.bs-masthead-links li + li { + margin-left: 20px; +} +.bs-masthead-links a { + color: #fff; +} + +@media (min-width: 768px) { + .bs-masthead { + text-align: left; + padding-top: 140px; + padding-bottom: 140px; + } + .bs-masthead h1 { + font-size: 100px; + } + .bs-masthead .lead { + margin-right: 25%; + font-size: 30px; + } + .bs-masthead .btn-outline-inverse { + width: auto; + margin: 20px 5px 20px 0; + padding: 18px 24px; + font-size: 21px; + } + .bs-masthead-links { + padding: 0; + text-align: left; + } +} + + +/* + * Page headers + * + * Jumbotron-esque headers at the top of every page that's not the homepage. + */ + + +/* Page headers */ +.bs-header { + padding: 30px 15px 40px; /* side padding builds on .container 15px, so 30px */ + font-size: 16px; + text-align: center; + text-shadow: 0 1px 0 rgba(0,0,0,.15); +} +.bs-header h1 { + color: #fff; +} +.bs-header p { + font-weight: 300; + line-height: 1.5; +} +.bs-header .container { + position: relative; +} + +@media (min-width: 768px) { + .bs-header { + font-size: 21px; + text-align: left; + } + .bs-header h1 { + font-size: 60px; + line-height: 1; + } +} + +@media (min-width: 992px) { + .bs-header h1, + .bs-header p { + margin-right: 380px; + } +} + + +/* + * Carbon ads + * + * Single display ad that shows on all pages (except homepage) in page headers. + * The hella `!important` is required for any pre-set property. + */ + +.carbonad { + width: auto !important; + margin: 50px -30px -40px !important; + padding: 20px !important; + overflow: hidden; /* clearfix */ + height: auto !important; + font-size: 13px !important; + line-height: 16px !important; + text-align: left; + background: #463265 !important; + border: 0 !important; + box-shadow: inset 0 3px 5px rgba(0,0,0,.075); +} +.carbonad-img { + margin: 0 !important; +} +.carbonad-text, +.carbonad-tag { + float: none !important; + display: block !important; + width: auto !important; + height: auto !important; + margin-left: 145px !important; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important; +} +.carbonad-text { + padding-top: 0 !important; +} +.carbonad-tag { + color: #cdbfe3 !important; + text-align: left !important; +} +.carbonad-text a, +.carbonad-tag a { + color: #fff !important; +} +.carbonad #azcarbon > img { + display: none; /* hide what I assume are tracking images */ +} + +@media (min-width: 768px) { + .carbonad { + margin: 0 !important; + border-radius: 4px; + box-shadow: inset 0 3px 5px rgba(0,0,0,.075), 0 1px 0 rgba(255,255,255,.1); + } +} + +@media (min-width: 992px) { + .carbonad { + position: absolute; + top: 20px; + right: 15px; /* 15px instead of 0 since box-sizing */ + padding: 15px !important; + width: 330px !important; + } +} + +/* Homepage variations */ +.bs-docs-home .carbonad { + margin: 0 -15px 40px !important; +} +@media (min-width: 480px) { + .bs-docs-home .carbonad { + width: 330px !important; + margin: 0 auto 40px !important; + border-radius: 4px; + } +} +@media (min-width: 768px) { + .bs-docs-home .carbonad { + float: left; + width: 330px !important; + margin: 0 0 30px !important; + } + .bs-docs-home .bs-social, + .bs-docs-home .bs-masthead-links { + margin-left: 350px; + } + .bs-docs-home .bs-social { + margin-bottom: 10px; + } + .bs-docs-home .bs-masthead-links { + margin-top: 10px; + } +} +@media (min-width: 992px) { + .bs-docs-home .carbonad { + position: static; + } +} +@media (min-width: 1170px) { + .bs-docs-home .carbonad { + margin-top: -25px !important; + } +} + + +/* + * Callout for 2.3.2 docs + * + * Only appears below page headers (not on the homepage). The homepage gets its + * own link with the masthead links. + */ + +.bs-old-docs { + padding: 15px 20px; + color: #777; + background-color: #fafafa; + border-top: 1px solid #fff; + border-bottom: 1px solid #e5e5e5; +} +.bs-old-docs strong { + color: #555; +} + + +/* + * Side navigation + * + * Scrollspy and affixed enhanced navigation to highlight sections and secondary + * sections of docs content. + */ + +/* By default it's not affixed in mobile views, so undo that */ +.bs-sidebar.affix { + position: static; +} + +/* First level of nav */ +.bs-sidenav { + margin-top: 30px; + margin-bottom: 30px; + padding-top: 10px; + padding-bottom: 10px; + text-shadow: 0 1px 0 #fff; + background-color: #f7f5fa; + border-radius: 5px; +} + +/* All levels of nav */ +.bs-sidebar .nav > li > a { + display: block; + color: #716b7a; + padding: 5px 20px; +} +.bs-sidebar .nav > li > a:hover, +.bs-sidebar .nav > li > a:focus { + text-decoration: none; + background-color: #e5e3e9; + border-right: 1px solid #dbd8e0; +} +.bs-sidebar .nav > .active > a, +.bs-sidebar .nav > .active:hover > a, +.bs-sidebar .nav > .active:focus > a { + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-right: 1px solid #563d7c; +} + +/* Nav: second level (shown on .active) */ +.bs-sidebar .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + margin-bottom: 8px; +} +.bs-sidebar .nav .nav > li > a { + padding-top: 3px; + padding-bottom: 3px; + padding-left: 30px; + font-size: 90%; +} + +/* Show and affix the side nav when space allows it */ +@media (min-width: 992px) { + .bs-sidebar .nav > .active > ul { + display: block; + } + /* Widen the fixed sidebar */ + .bs-sidebar.affix, + .bs-sidebar.affix-bottom { + width: 213px; + } + .bs-sidebar.affix { + position: fixed; /* Undo the static from mobile first approach */ + top: 80px; + } + .bs-sidebar.affix-bottom { + position: absolute; /* Undo the static from mobile first approach */ + } + .bs-sidebar.affix-bottom .bs-sidenav, + .bs-sidebar.affix .bs-sidenav { + margin-top: 0; + margin-bottom: 0; + } +} +@media (min-width: 1200px) { + /* Widen the fixed sidebar again */ + .bs-sidebar.affix-bottom, + .bs-sidebar.affix { + width: 263px; + } +} + + +/* + * Docs sections + * + * Content blocks for each component or feature. + */ + +/* Space things out */ +.bs-docs-section + .bs-docs-section { + padding-top: 40px; +} + +/* Janky fix for preventing navbar from overlapping */ +h1[id] { + padding-top: 80px; + margin-top: -45px; +} + + +/* + * Callouts + * + * Not quite alerts, but custom and helpful notes for folks reading the docs. + * Requires a base and modifier class. + */ + +/* Common styles for all types */ +.bs-callout { + margin: 20px 0; + padding: 20px; + border-left: 3px solid #eee; +} +.bs-callout h4 { + margin-top: 0; + margin-bottom: 5px; +} +.bs-callout p:last-child { + margin-bottom: 0; +} + +/* Variations */ +.bs-callout-danger { + background-color: #fdf7f7; + border-color: #eed3d7; +} +.bs-callout-danger h4 { + color: #b94a48; +} +.bs-callout-warning { + background-color: #faf8f0; + border-color: #faebcc; +} +.bs-callout-warning h4 { + color: #c09853; +} +.bs-callout-info { + background-color: #f4f8fa; + border-color: #bce8f1; +} +.bs-callout-info h4 { + color: #3a87ad; +} + + +/* + * Team members + * + * Avatars, names, and usernames for core team. + */ + +.bs-team .team-member { + color: #555; + line-height: 32px; +} +.bs-team .team-member:hover { + color: #333; + text-decoration: none; +} +.bs-team .github-btn { + float: right; + margin-top: 6px; + width: 120px; + height: 20px; +} +.bs-team img { + float: left; + width: 32px; + margin-right: 10px; + border-radius: 4px; +} + + +/* + * Grid examples + * + * Highlight the grid columns within the docs so folks can see their padding, + * alignment, sizing, etc. + */ + +.show-grid { + margin-bottom: 15px; +} +.show-grid [class^="col-"] { + padding-top: 10px; + padding-bottom: 10px; + background-color: #eee; + border: 1px solid #ddd; + background-color: rgba(86,61,124,.15); + border: 1px solid rgba(86,61,124,.2); +} + + +/* + * Examples + * + * Isolated sections of example content for each component or feature. Usually + * followed by a code snippet. + */ + +.bs-example { + position: relative; + padding: 45px 15px 15px; + margin: 0 -15px 15px; + background-color: #fafafa; + box-shadow: inset 0 3px 6px rgba(0,0,0,.05); + border-color: #e5e5e5 #eee #eee; + border-style: solid; + border-width: 1px 0; +} +/* Echo out a label for the example */ +.bs-example:after { + content: "Example"; + position: absolute; + top: 15px; + left: 15px; + font-size: 12px; + font-weight: bold; + color: #bbb; + text-transform: uppercase; + letter-spacing: 1px; +} + +/* Tweak display of the code snippets when following an example */ +.bs-example + .highlight { + margin: -15px -15px 15px; + border-radius: 0; + border-width: 0 0 1px; +} + +/* Make the examples and snippets not full-width */ +@media (min-width: 768px) { + .bs-example { + margin-left: 0; + margin-right: 0; + background-color: #fff; + border-width: 1px; + border-color: #ddd; + border-radius: 4px 4px 0 0; + box-shadow: none; + } + .bs-example + .highlight { + margin-top: -16px; + margin-left: 0; + margin-right: 0; + border-width: 1px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } +} + +/* Undo width of container */ +.bs-example .container { + width: auto; +} + +/* Tweak content of examples for optimum awesome */ +.bs-example > p:last-child, +.bs-example > ul:last-child, +.bs-example > ol:last-child, +.bs-example > blockquote:last-child, +.bs-example > .form-control:last-child, +.bs-example > .table:last-child, +.bs-example > .navbar:last-child, +.bs-example > .jumbotron:last-child, +.bs-example > .alert:last-child, +.bs-example > .panel:last-child, +.bs-example > .list-group:last-child, +.bs-example > .well:last-child, +.bs-example > .progress:last-child, +.bs-example > .table-responsive:last-child > .table { + margin-bottom: 0; +} +.bs-example > p > .close { + float: none; +} + +/* Typography */ +.bs-example-type .table .info { + color: #999; + vertical-align: middle; +} +.bs-example-type .table td { + padding: 15px 0; + border-color: #eee; +} +.bs-example-type .table tr:first-child td { + border-top: 0; +} +.bs-example-type h1, +.bs-example-type h2, +.bs-example-type h3, +.bs-example-type h4, +.bs-example-type h5, +.bs-example-type h6 { + margin: 0; +} + +/* Images */ +.bs-example > .img-circle, +.bs-example > .img-rounded, +.bs-example > .img-thumbnail { + margin: 5px; +} + +/* Tables */ +.bs-example > .table-responsive > .table { + background-color: #fff; +} + +/* Buttons */ +.bs-example > .btn, +.bs-example > .btn-group { + margin-top: 5px; + margin-bottom: 5px; +} +.bs-example > .btn-toolbar + .btn-toolbar { + margin-top: 10px; +} + +/* Forms */ +.bs-example-control-sizing select, +.bs-example-control-sizing input[type="text"] + input[type="text"] { + margin-top: 10px; +} +.bs-example-form .input-group { + margin-bottom: 10px; +} +.bs-example > textarea.form-control { + resize: vertical; +} + +/* List groups */ +.bs-example > .list-group { + max-width: 400px; +} + +/* Navbars */ +.bs-example .navbar:last-child { + margin-bottom: 0; +} +.bs-navbar-top-example, +.bs-navbar-bottom-example { + z-index: 1; + padding: 0; + overflow: hidden; /* cut the drop shadows off */ +} +.bs-navbar-top-example .navbar-header, +.bs-navbar-bottom-example .navbar-header { + margin-left: 0; +} +.bs-navbar-top-example .navbar-fixed-top, +.bs-navbar-bottom-example .navbar-fixed-bottom { + position: relative; + margin-left: 0; + margin-right: 0; +} +.bs-navbar-top-example { + padding-bottom: 45px; +} +.bs-navbar-top-example:after { + top: auto; + bottom: 15px; +} +.bs-navbar-top-example .navbar-fixed-top { + top: -1px; +} +.bs-navbar-bottom-example { + padding-top: 45px; +} +.bs-navbar-bottom-example .navbar-fixed-bottom { + bottom: -1px; +} +.bs-navbar-bottom-example .navbar { + margin-bottom: 0; +} +@media (min-width: 768px) { + .bs-navbar-top-example .navbar-fixed-top, + .bs-navbar-bottom-example .navbar-fixed-bottom { + position: absolute; + } + .bs-navbar-top-example { + border-radius: 0 0 4px 4px; + } + .bs-navbar-bottom-example { + border-radius: 4px 4px 0 0; + } +} + +/* Pagination */ +.bs-example .pagination { + margin-top: 10px; + margin-bottom: 10px; +} + +/* Pager */ +.bs-example > .pager { + margin-top: 0; +} + +/* Example modals */ +.bs-example-modal { + background-color: #f5f5f5; +} +.bs-example-modal .modal { + position: relative; + top: auto; + right: auto; + left: auto; + bottom: auto; + z-index: 1; + display: block; +} +.bs-example-modal .modal-dialog { + left: auto; + margin-left: auto; + margin-right: auto; +} + +/* Example dropdowns */ +.bs-example > .dropdown > .dropdown-menu { + position: static; + display: block; + margin-bottom: 5px; +} + +/* Example tabbable tabs */ +.bs-example-tabs .nav-tabs { + margin-bottom: 15px; +} + +/* Tooltips */ +.bs-example-tooltips { + text-align: center; +} +.bs-example-tooltips > .btn { + margin-top: 5px; + margin-bottom: 5px; +} + +/* Popovers */ +.bs-example-popover { + padding-bottom: 24px; + background-color: #f9f9f9; +} +.bs-example-popover .popover { + position: relative; + display: block; + float: left; + width: 260px; + margin: 20px; +} + +/* Scrollspy demo on fixed height div */ +.scrollspy-example { + position: relative; + height: 200px; + margin-top: 10px; + overflow: auto; +} + + +/* + * Code snippets + * + * Generated via Pygments and Jekyll, these are snippets of HTML, CSS, and JS. + */ + +.highlight { + display: none; /* hidden by default, until >480px */ + padding: 9px 14px; + margin-bottom: 14px; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + border-radius: 4px; +} +.highlight pre { + padding: 0; + margin-top: 0; + margin-bottom: 0; + background-color: transparent; + border: 0; + white-space: nowrap; +} +.highlight pre code { + font-size: inherit; + color: #333; /* Effectively the base text color */ +} +.highlight pre .lineno { + display: inline-block; + width: 22px; + padding-right: 5px; + margin-right: 10px; + text-align: right; + color: #bebec5; +} + +/* Show code snippets when we have the space */ +@media (min-width: 481px) { + .highlight { + display: block; + } +} + + +/* + * Responsive tests + * + * Generate a set of tests to show the responsive utilities in action. + */ + +/* Responsive (scrollable) doc tables */ +.table-responsive .highlight pre { + white-space: normal; +} + +/* Utility classes table */ +.bs-table th small, +.responsive-utilities th small { + display: block; + font-weight: normal; + color: #999; +} +.responsive-utilities tbody th { + font-weight: normal; +} +.responsive-utilities td { + text-align: center; +} +.responsive-utilities td.is-visible { + color: #468847; + background-color: #dff0d8 !important; +} +.responsive-utilities td.is-hidden { + color: #ccc; + background-color: #f9f9f9 !important; +} + +/* Responsive tests */ +.responsive-utilities-test { + margin-top: 5px; +} +.responsive-utilities-test .col-xs-6 { + margin-bottom: 10px; +} +.responsive-utilities-test span { + padding: 15px 10px; + font-size: 14px; + font-weight: bold; + line-height: 1.1; + text-align: center; + border-radius: 4px; +} +.visible-on .col-xs-6 .hidden-xs, +.visible-on .col-xs-6 .hidden-sm, +.visible-on .col-xs-6 .hidden-md, +.visible-on .col-xs-6 .hidden-lg, +.hidden-on .col-xs-6 .hidden-xs, +.hidden-on .col-xs-6 .hidden-sm, +.hidden-on .col-xs-6 .hidden-md, +.hidden-on .col-xs-6 .hidden-lg { + color: #999; + border: 1px solid #ddd; +} +.visible-on .col-xs-6 .visible-xs, +.visible-on .col-xs-6 .visible-sm, +.visible-on .col-xs-6 .visible-md, +.visible-on .col-xs-6 .visible-lg, +.hidden-on .col-xs-6 .visible-xs, +.hidden-on .col-xs-6 .visible-sm, +.hidden-on .col-xs-6 .visible-md, +.hidden-on .col-xs-6 .visible-lg { + color: #468847; + background-color: #dff0d8; + border: 1px solid #d6e9c6; +} + + +/* + * Glyphicons + * + * Special styles for displaying the icons and their classes in the docs. + */ + +.bs-glyphicons { + padding-left: 0; + padding-bottom: 1px; + margin-bottom: 20px; + list-style: none; + overflow: hidden; +} +.bs-glyphicons li { + float: left; + width: 25%; + height: 115px; + padding: 10px; + margin: 0 -1px -1px 0; + font-size: 12px; + line-height: 1.4; + text-align: center; + border: 1px solid #ddd; +} +.bs-glyphicons .glyphicon { + margin-top: 5px; + margin-bottom: 10px; + font-size: 24px; +} +.bs-glyphicons .glyphicon-class { + display: block; + text-align: center; +} +.bs-glyphicons li:hover { + background-color: rgba(86,61,124,.1); +} + +@media (min-width: 768px) { + .bs-glyphicons li { + width: 12.5%; + } +} + + +/* + * Customizer + * + * Since this is so form control heavy, we have quite a few styles to customize + * the display of inputs, headings, and more. Also included are all the download + * buttons and actions. + */ + +.bs-customizer .toggle { + float: right; + margin-top: 85px; /* On account of ghetto navbar fix */ +} + +/* Headings and form contrls */ +.bs-customizer label { + margin-top: 10px; + font-weight: 500; + color: #555; +} +.bs-customizer h2 { + margin-top: 0; + margin-bottom: 5px; + padding-top: 30px; +} +.bs-customizer h3 { + margin-bottom: 0; +} +.bs-customizer h4 { + margin-top: 15px; + margin-bottom: 0; +} +.bs-customizer .bs-callout h4 { + margin-top: 0; /* lame, but due to specificity we have to duplicate */ + margin-bottom: 5px; +} +.bs-customizer input[type="text"] { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + background-color: #fafafa; +} +.bs-customizer .help-block { + font-size: 12px; + margin-bottom: 5px; +} + +/* For the variables, use regular weight */ +#less-section label { + font-weight: normal; +} + +/* Downloads */ +.bs-customize-download .btn-outline { + padding: 20px; +} + +/* Error handling */ +.bs-customizer-alert { + position: fixed; + top: 51px; + left: 0; + right: 0; + z-index: 1030; + padding: 15px 0; + color: #fff; + background-color: #d9534f; + box-shadow: inset 0 1px 0 rgba(255,255,255,.25); + border-bottom: 1px solid #b94441; +} +.bs-customizer-alert .close { + margin-top: -4px; + font-size: 24px; +} +.bs-customizer-alert p { + margin-bottom: 0; +} +.bs-customizer-alert .glyphicon { + margin-right: 5px; +} +.bs-customizer-alert pre { + margin: 10px 0 0; + color: #fff; + background-color: #a83c3a; + border-color: #973634; + box-shadow: inset 0 2px 4px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); +} + + +/* + * Miscellaneous + * + * Odds and ends for optimum docs display. + */ + + /* About page */ + .bs-about { + font-size: 16px; + } + +/* Examples gallery: space out content better */ +.bs-examples h4 { + margin-bottom: 5px; +} +.bs-examples p { + margin-bottom: 20px; +} + +/* Pseudo :focus state for showing how it looks in the docs */ +#focusedInput { + border-color: rgba(82,168,236,.8); + outline: 0; + outline: thin dotted \9; /* IE6-9 */ + -moz-box-shadow: 0 0 8px rgba(82,168,236,.6); + box-shadow: 0 0 8px rgba(82,168,236,.6); +} + +/* Better spacing on download options in getting started */ +.bs-docs-dl-options h4 { + margin-top: 15px; + margin-bottom: 5px; +} diff --git a/app/bower_components/sass-bootstrap/docs-assets/css/pygments-manni.css b/app/bower_components/sass-bootstrap/docs-assets/css/pygments-manni.css new file mode 100644 index 0000000..1264b87 --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/css/pygments-manni.css @@ -0,0 +1,66 @@ +.hll { background-color: #ffffcc } + /*{ background: #f0f3f3; }*/ +.c { color: #999; } /* Comment */ +.err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.k { color: #006699; } /* Keyword */ +.o { color: #555555 } /* Operator */ +.cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.cp { color: #009999 } /* Comment.Preproc */ +.c1 { color: #999; } /* Comment.Single */ +.cs { color: #999; } /* Comment.Special */ +.gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.ge { font-style: italic } /* Generic.Emph */ +.gr { color: #FF0000 } /* Generic.Error */ +.gh { color: #003300; } /* Generic.Heading */ +.gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.go { color: #AAAAAA } /* Generic.Output */ +.gp { color: #000099; } /* Generic.Prompt */ +.gs { } /* Generic.Strong */ +.gu { color: #003300; } /* Generic.Subheading */ +.gt { color: #99CC66 } /* Generic.Traceback */ +.kc { color: #006699; } /* Keyword.Constant */ +.kd { color: #006699; } /* Keyword.Declaration */ +.kn { color: #006699; } /* Keyword.Namespace */ +.kp { color: #006699 } /* Keyword.Pseudo */ +.kr { color: #006699; } /* Keyword.Reserved */ +.kt { color: #007788; } /* Keyword.Type */ +.m { color: #FF6600 } /* Literal.Number */ +.s { color: #d44950 } /* Literal.String */ +.na { color: #4f9fcf } /* Name.Attribute */ +.nb { color: #336666 } /* Name.Builtin */ +.nc { color: #00AA88; } /* Name.Class */ +.no { color: #336600 } /* Name.Constant */ +.nd { color: #9999FF } /* Name.Decorator */ +.ni { color: #999999; } /* Name.Entity */ +.ne { color: #CC0000; } /* Name.Exception */ +.nf { color: #CC00FF } /* Name.Function */ +.nl { color: #9999FF } /* Name.Label */ +.nn { color: #00CCFF; } /* Name.Namespace */ +.nt { color: #2f6f9f; } /* Name.Tag */ +.nv { color: #003333 } /* Name.Variable */ +.ow { color: #000000; } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #FF6600 } /* Literal.Number.Float */ +.mh { color: #FF6600 } /* Literal.Number.Hex */ +.mi { color: #FF6600 } /* Literal.Number.Integer */ +.mo { color: #FF6600 } /* Literal.Number.Oct */ +.sb { color: #CC3300 } /* Literal.String.Backtick */ +.sc { color: #CC3300 } /* Literal.String.Char */ +.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.s2 { color: #CC3300 } /* Literal.String.Double */ +.se { color: #CC3300; } /* Literal.String.Escape */ +.sh { color: #CC3300 } /* Literal.String.Heredoc */ +.si { color: #AA0000 } /* Literal.String.Interpol */ +.sx { color: #CC3300 } /* Literal.String.Other */ +.sr { color: #33AAAA } /* Literal.String.Regex */ +.s1 { color: #CC3300 } /* Literal.String.Single */ +.ss { color: #FFCC33 } /* Literal.String.Symbol */ +.bp { color: #336666 } /* Name.Builtin.Pseudo */ +.vc { color: #003333 } /* Name.Variable.Class */ +.vg { color: #003333 } /* Name.Variable.Global */ +.vi { color: #003333 } /* Name.Variable.Instance */ +.il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.css .o, +.css .o + .nt, +.css .nt + .nt { color: #999; } diff --git a/app/bower_components/sass-bootstrap/docs-assets/ico/apple-touch-icon-144-precomposed.png b/app/bower_components/sass-bootstrap/docs-assets/ico/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000..622a865 Binary files /dev/null and b/app/bower_components/sass-bootstrap/docs-assets/ico/apple-touch-icon-144-precomposed.png differ diff --git a/app/bower_components/sass-bootstrap/docs-assets/ico/favicon.png b/app/bower_components/sass-bootstrap/docs-assets/ico/favicon.png new file mode 100644 index 0000000..4e4560f Binary files /dev/null and b/app/bower_components/sass-bootstrap/docs-assets/ico/favicon.png differ diff --git a/app/bower_components/sass-bootstrap/docs-assets/js/application.js b/app/bower_components/sass-bootstrap/docs-assets/js/application.js new file mode 100644 index 0000000..72d4cd1 --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/js/application.js @@ -0,0 +1,103 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S ALL JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ + +/*! + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ + + +!function ($) { + + $(function(){ + + // IE10 viewport hack for Surface/desktop Windows 8 bug + // + // See Getting Started docs for more information + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement("style"); + msViewportStyle.appendChild( + document.createTextNode( + "@-ms-viewport{width:auto!important}" + ) + ); + document.getElementsByTagName("head")[0]. + appendChild(msViewportStyle); + } + + + var $window = $(window) + var $body = $(document.body) + + var navHeight = $('.navbar').outerHeight(true) + 10 + + $body.scrollspy({ + target: '.bs-sidebar', + offset: navHeight + }) + + $window.on('load', function () { + $body.scrollspy('refresh') + }) + + $('.bs-docs-container [href=#]').click(function (e) { + e.preventDefault() + }) + + // back to top + setTimeout(function () { + var $sideBar = $('.bs-sidebar') + + $sideBar.affix({ + offset: { + top: function () { + var offsetTop = $sideBar.offset().top + var sideBarMargin = parseInt($sideBar.children(0).css('margin-top'), 10) + var navOuterHeight = $('.bs-docs-nav').height() + + return (this.top = offsetTop - navOuterHeight - sideBarMargin) + } + , bottom: function () { + return (this.bottom = $('.bs-footer').outerHeight(true)) + } + } + }) + }, 100) + + setTimeout(function () { + $('.bs-top').affix() + }, 100) + + // tooltip demo + $('.tooltip-demo').tooltip({ + selector: "[data-toggle=tooltip]", + container: "body" + }) + + $('.tooltip-test').tooltip() + $('.popover-test').popover() + + $('.bs-docs-navbar').tooltip({ + selector: "a[data-toggle=tooltip]", + container: ".bs-docs-navbar .nav" + }) + + // popover demo + $("[data-toggle=popover]") + .popover() + + // button state demo + $('#fat-btn') + .click(function () { + var btn = $(this) + btn.button('loading') + setTimeout(function () { + btn.button('reset') + }, 3000) + }) +}) + +}(window.jQuery) diff --git a/app/bower_components/sass-bootstrap/docs-assets/js/customizer.js b/app/bower_components/sass-bootstrap/docs-assets/js/customizer.js new file mode 100644 index 0000000..93555c8 --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/js/customizer.js @@ -0,0 +1,332 @@ +/*! + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ + + +window.onload = function () { // wait for load in a dumb way because B-0 + var cw = '/*!\n * Bootstrap v3.0.2\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world @twitter by @mdo and @fat.\n */\n\n' + + function showError(msg, err) { + $('
    \ +
    \ + ×\ +

    ' + msg + '

    ' + + (err.extract ? '
    ' + err.extract.join('\n') + '
    ' : '') + '\ +
    \ +
    ').appendTo('body').alert() + throw err + } + + function showCallout(msg, showUpTop) { + var callout = $('
    \ +

    Attention!

    \ +

    ' + msg + '

    \ +
    ') + + if (showUpTop) { + callout.appendTo('.bs-docs-container') + } else { + callout.insertAfter('.bs-customize-download') + } + } + + function getQueryParam(key) { + key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars + var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)")); + return match && decodeURIComponent(match[1].replace(/\+/g, " ")); + } + + function createGist(configJson) { + var data = { + "description": "Bootstrap Customizer Config", + "public": true, + "files": { + "config.json": { + "content": configJson + } + } + } + $.ajax({ + url: 'https://api.github.com/gists', + type: 'POST', + dataType: 'json', + data: JSON.stringify(data) + }) + .success(function(result) { + var origin = window.location.protocol + "//" + window.location.host + history.replaceState(false, document.title, origin + window.location.pathname + '?id=' + result.id) + }) + .error(function(err) { + showError('Ruh roh! Could not save gist file, configuration not saved.', err) + }) + } + + function getCustomizerData() { + var vars = {} + + $('#less-variables-section input') + .each(function () { + $(this).val() && (vars[ $(this).prev().text() ] = $(this).val()) + }) + + var data = { + vars: vars, + css: $('#less-section input:checked') .map(function () { return this.value }).toArray(), + js: $('#plugin-section input:checked').map(function () { return this.value }).toArray() + } + + if ($.isEmptyObject(data.vars) && !data.css.length && !data.js.length) return + + return data + } + + function parseUrl() { + var id = getQueryParam('id') + + if (!id) return + + $.ajax({ + url: 'https://api.github.com/gists/' + id, + type: 'GET', + dataType: 'json' + }) + .success(function(result) { + var data = JSON.parse(result.files['config.json'].content) + if (data.js) { + $('#plugin-section input').each(function () { + $(this).prop('checked', ~$.inArray(this.value, data.js)) + }) + } + if (data.css) { + $('#less-section input').each(function () { + $(this).prop('checked', ~$.inArray(this.value, data.css)) + }) + } + if (data.vars) { + for (var i in data.vars) { + $('input[data-var="' + i + '"]').val(data.vars[i]) + } + } + }) + .error(function(err) { + showError('Error fetching bootstrap config file', err) + }) + } + + function generateZip(css, js, fonts, config, complete) { + if (!css && !js) return showError('Ruh roh! No Bootstrap files selected.', new Error('no Bootstrap')) + + var zip = new JSZip() + + if (css) { + var cssFolder = zip.folder('css') + for (var fileName in css) { + cssFolder.file(fileName, css[fileName]) + } + } + + if (js) { + var jsFolder = zip.folder('js') + for (var fileName in js) { + jsFolder.file(fileName, js[fileName]) + } + } + + if (fonts) { + var fontsFolder = zip.folder('fonts') + for (var fileName in fonts) { + fontsFolder.file(fileName, fonts[fileName], {base64: true}) + } + } + + if (config) { + zip.file('config.json', config) + } + + var content = zip.generate({type:"blob"}) + + complete(content) + } + + function generateCustomCSS(vars) { + var result = '' + + for (var key in vars) { + result += key + ': ' + vars[key] + ';\n' + } + + return result + '\n\n' + } + + function generateFonts() { + var glyphicons = $('#less-section [value="glyphicons.less"]:checked') + if (glyphicons.length) { + return __fonts + } + } + + // Returns an Array of @import'd filenames from 'bootstrap.less' in the order + // in which they appear in the file. + function bootstrapLessFilenames() { + var IMPORT_REGEX = /^@import \"(.*?)\";$/ + var bootstrapLessLines = __less['bootstrap.less'].split('\n') + + for (var i = 0, imports = []; i < bootstrapLessLines.length; i++) { + var match = IMPORT_REGEX.exec(bootstrapLessLines[i]) + if (match) imports.push(match[1]) + } + + return imports + } + + function generateCSS() { + var oneChecked = false + var lessFileIncludes = {} + $('#less-section input').each(function() { + var $this = $(this) + var checked = $this.is(':checked') + lessFileIncludes[$this.val()] = checked + + oneChecked = oneChecked || checked + }) + + if (!oneChecked) return false + + var result = {} + var vars = {} + var css = '' + + $('#less-variables-section input') + .each(function () { + $(this).val() && (vars[ $(this).prev().text() ] = $(this).val()) + }) + + $.each(bootstrapLessFilenames(), function(index, filename) { + var fileInclude = lessFileIncludes[filename] + + // Files not explicitly unchecked are compiled into the final stylesheet. + // Core stylesheets like 'normalize.less' are not included in the form + // since disabling them would wreck everything, and so their 'fileInclude' + // will be 'undefined'. + if (fileInclude || (fileInclude == null)) css += __less[filename] + + // Custom variables are added after Bootstrap variables so the custom + // ones take precedence. + if (('variables.less' === filename) && vars) css += generateCustomCSS(vars) + }) + + css = css.replace(/@import[^\n]*/gi, '') //strip any imports + + try { + var parser = new less.Parser({ + paths: ['variables.less', 'mixins.less'] + , optimization: 0 + , filename: 'bootstrap.css' + }).parse(css, function (err, tree) { + if (err) { + return showError('Ruh roh! Could not parse less files.', err) + } + result = { + 'bootstrap.css' : cw + tree.toCSS(), + 'bootstrap.min.css' : cw + tree.toCSS({ compress: true }) + } + }) + } catch (err) { + return showError('Ruh roh! Could not parse less files.', err) + } + + return result + } + + function generateJavascript() { + var $checked = $('#plugin-section input:checked') + if (!$checked.length) return false + + var js = $checked + .map(function () { return __js[this.value] }) + .toArray() + .join('\n') + + return { + 'bootstrap.js': js, + 'bootstrap.min.js': cw + uglify(js) + } + } + + var inputsComponent = $('#less-section input') + var inputsPlugin = $('#plugin-section input') + var inputsVariables = $('#less-variables-section input') + + $('#less-section .toggle').on('click', function (e) { + e.preventDefault() + inputsComponent.prop('checked', !inputsComponent.is(':checked')) + }) + + $('#plugin-section .toggle').on('click', function (e) { + e.preventDefault() + inputsPlugin.prop('checked', !inputsPlugin.is(':checked')) + }) + + $('#less-variables-section .toggle').on('click', function (e) { + e.preventDefault() + inputsVariables.val('') + }) + + $('[data-dependencies]').on('click', function () { + if (!$(this).is(':checked')) return + var dependencies = this.getAttribute('data-dependencies') + if (!dependencies) return + dependencies = dependencies.split(',') + for (var i = 0; i < dependencies.length; i++) { + var dependency = $('[value="' + dependencies[i] + '"]') + dependency && dependency.prop('checked', true) + } + }) + + $('[data-dependents]').on('click', function () { + if ($(this).is(':checked')) return + var dependents = this.getAttribute('data-dependents') + if (!dependents) return + dependents = dependents.split(',') + for (var i = 0; i < dependents.length; i++) { + var dependent = $('[value="' + dependents[i] + '"]') + dependent && dependent.prop('checked', false) + } + }) + + var $compileBtn = $('#btn-compile') + var $downloadBtn = $('#btn-download') + + $compileBtn.on('click', function (e) { + var configData = getCustomizerData() + var configJson = JSON.stringify(configData, null, 2) + + e.preventDefault() + + $compileBtn.attr('disabled', 'disabled') + + generateZip(generateCSS(), generateJavascript(), generateFonts(), configJson, function (blob) { + $compileBtn.removeAttr('disabled') + saveAs(blob, "bootstrap.zip") + createGist(configJson) + }) + }) + + // browser support alerts + if (!window.URL && navigator.userAgent.toLowerCase().indexOf('safari') != -1) { + showCallout("Looks like you're using safari, which sadly doesn't have the best support\ + for HTML5 blobs. Because of this your file will be downloaded with the name \"untitled\".\ + However, if you check your downloads folder, just rename this \"untitled\" file\ + to \"bootstrap.zip\" and you should be good to go!") + } else if (!window.URL && !window.webkitURL) { + $('.bs-docs-section, .bs-sidebar').css('display', 'none') + + showCallout("Looks like your current browser doesn't support the Bootstrap Customizer. Please take a second\ + to upgrade to a more modern browser.", true) + } + + parseUrl() +} diff --git a/app/bower_components/sass-bootstrap/docs-assets/js/filesaver.js b/app/bower_components/sass-bootstrap/docs-assets/js/filesaver.js new file mode 100644 index 0000000..adecc88 --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/js/filesaver.js @@ -0,0 +1,169 @@ +/* Blob.js + * A Blob implementation. + * 2013-06-20 + * + * By Eli Grey, http://eligrey.com + * By Devin Samarin, https://github.com/eboyjr + * License: X11/MIT + * See LICENSE.md + */ + +/*global self, unescape */ +/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, + plusplus: true */ + +/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ + +if (typeof Blob !== "function" || typeof URL === "undefined") +if (typeof Blob === "function" && typeof webkitURL !== "undefined") self.URL = webkitURL; +else var Blob = (function (view) { + "use strict"; + + var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || view.MSBlobBuilder || (function(view) { + var + get_class = function(object) { + return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; + } + , FakeBlobBuilder = function BlobBuilder() { + this.data = []; + } + , FakeBlob = function Blob(data, type, encoding) { + this.data = data; + this.size = data.length; + this.type = type; + this.encoding = encoding; + } + , FBB_proto = FakeBlobBuilder.prototype + , FB_proto = FakeBlob.prototype + , FileReaderSync = view.FileReaderSync + , FileException = function(type) { + this.code = this[this.name = type]; + } + , file_ex_codes = ( + "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " + + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR" + ).split(" ") + , file_ex_code = file_ex_codes.length + , real_URL = view.URL || view.webkitURL || view + , real_create_object_URL = real_URL.createObjectURL + , real_revoke_object_URL = real_URL.revokeObjectURL + , URL = real_URL + , btoa = view.btoa + , atob = view.atob + + , ArrayBuffer = view.ArrayBuffer + , Uint8Array = view.Uint8Array + ; + FakeBlob.fake = FB_proto.fake = true; + while (file_ex_code--) { + FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1; + } + if (!real_URL.createObjectURL) { + URL = view.URL = {}; + } + URL.createObjectURL = function(blob) { + var + type = blob.type + , data_URI_header + ; + if (type === null) { + type = "application/octet-stream"; + } + if (blob instanceof FakeBlob) { + data_URI_header = "data:" + type; + if (blob.encoding === "base64") { + return data_URI_header + ";base64," + blob.data; + } else if (blob.encoding === "URI") { + return data_URI_header + "," + decodeURIComponent(blob.data); + } if (btoa) { + return data_URI_header + ";base64," + btoa(blob.data); + } else { + return data_URI_header + "," + encodeURIComponent(blob.data); + } + } else if (real_create_object_URL) { + return real_create_object_URL.call(real_URL, blob); + } + }; + URL.revokeObjectURL = function(object_URL) { + if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) { + real_revoke_object_URL.call(real_URL, object_URL); + } + }; + FBB_proto.append = function(data/*, endings*/) { + var bb = this.data; + // decode data to a binary string + if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) { + var + str = "" + , buf = new Uint8Array(data) + , i = 0 + , buf_len = buf.length + ; + for (; i < buf_len; i++) { + str += String.fromCharCode(buf[i]); + } + bb.push(str); + } else if (get_class(data) === "Blob" || get_class(data) === "File") { + if (FileReaderSync) { + var fr = new FileReaderSync; + bb.push(fr.readAsBinaryString(data)); + } else { + // async FileReader won't work as BlobBuilder is sync + throw new FileException("NOT_READABLE_ERR"); + } + } else if (data instanceof FakeBlob) { + if (data.encoding === "base64" && atob) { + bb.push(atob(data.data)); + } else if (data.encoding === "URI") { + bb.push(decodeURIComponent(data.data)); + } else if (data.encoding === "raw") { + bb.push(data.data); + } + } else { + if (typeof data !== "string") { + data += ""; // convert unsupported types to strings + } + // decode UTF-16 to binary string + bb.push(unescape(encodeURIComponent(data))); + } + }; + FBB_proto.getBlob = function(type) { + if (!arguments.length) { + type = null; + } + return new FakeBlob(this.data.join(""), type, "raw"); + }; + FBB_proto.toString = function() { + return "[object BlobBuilder]"; + }; + FB_proto.slice = function(start, end, type) { + var args = arguments.length; + if (args < 3) { + type = null; + } + return new FakeBlob( + this.data.slice(start, args > 1 ? end : this.data.length) + , type + , this.encoding + ); + }; + FB_proto.toString = function() { + return "[object Blob]"; + }; + return FakeBlobBuilder; + }(view)); + + return function Blob(blobParts, options) { + var type = options ? (options.type || "") : ""; + var builder = new BlobBuilder(); + if (blobParts) { + for (var i = 0, len = blobParts.length; i < len; i++) { + builder.append(blobParts[i]); + } + } + return builder.getBlob(type); + }; +}(self)); + +/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ +var saveAs=saveAs||(navigator.msSaveOrOpenBlob&&navigator.msSaveOrOpenBlob.bind(navigator))||(function(h){"use strict";var r=h.document,l=function(){return h.URL||h.webkitURL||h},e=h.URL||h.webkitURL||h,n=r.createElementNS("http://www.w3.org/1999/xhtml","a"),g=!h.externalHost&&"download" in n,j=function(t){var s=r.createEvent("MouseEvents");s.initMouseEvent("click",true,false,h,0,0,0,0,0,false,false,false,false,0,null);t.dispatchEvent(s)},o=h.webkitRequestFileSystem,p=h.requestFileSystem||o||h.mozRequestFileSystem,m=function(s){(h.setImmediate||h.setTimeout)(function(){throw s},0)},c="application/octet-stream",k=0,b=[],i=function(){var t=b.length;while(t--){var s=b[t];if(typeof s==="string"){e.revokeObjectURL(s)}else{s.remove()}}b.length=0},q=function(t,s,w){s=[].concat(s);var v=s.length;while(v--){var x=t["on"+s[v]];if(typeof x==="function"){try{x.call(t,w||t)}catch(u){m(u)}}}},f=function(t,u){var v=this,B=t.type,E=false,x,w,s=function(){var F=l().createObjectURL(t);b.push(F);return F},A=function(){q(v,"writestart progress write writeend".split(" "))},D=function(){if(E||!x){x=s(t)}if(w){w.location.href=x}else{window.open(x,"_blank")}v.readyState=v.DONE;A()},z=function(F){return function(){if(v.readyState!==v.DONE){return F.apply(this,arguments)}}},y={create:true,exclusive:false},C;v.readyState=v.INIT;if(!u){u="download"}if(g){x=s(t);n.href=x;n.download=u;j(n);v.readyState=v.DONE;A();return}if(h.chrome&&B&&B!==c){C=t.slice||t.webkitSlice;t=C.call(t,0,t.size,c);E=true}if(o&&u!=="download"){u+=".download"}if(B===c||o){w=h}if(!p){D();return}k+=t.size;p(h.TEMPORARY,k,z(function(F){F.root.getDirectory("saved",y,z(function(G){var H=function(){G.getFile(u,y,z(function(I){I.createWriter(z(function(J){J.onwriteend=function(K){w.location.href=I.toURL();b.push(I);v.readyState=v.DONE;q(v,"writeend",K)};J.onerror=function(){var K=J.error;if(K.code!==K.ABORT_ERR){D()}};"writestart progress write abort".split(" ").forEach(function(K){J["on"+K]=v["on"+K]});J.write(t);v.abort=function(){J.abort();v.readyState=v.DONE};v.readyState=v.WRITING}),D)}),D)};G.getFile(u,{create:false},z(function(I){I.remove();H()}),z(function(I){if(I.code===I.NOT_FOUND_ERR){H()}else{D()}}))}),D)}),D)},d=f.prototype,a=function(s,t){return new f(s,t)};d.abort=function(){var s=this;s.readyState=s.DONE;q(s,"abort")};d.readyState=d.INIT=0;d.WRITING=1;d.DONE=2;d.error=d.onwritestart=d.onprogress=d.onwrite=d.onabort=d.onerror=d.onwriteend=null;h.addEventListener("unload",i,false);return a}(self)); \ No newline at end of file diff --git a/app/bower_components/sass-bootstrap/docs-assets/js/holder.js b/app/bower_components/sass-bootstrap/docs-assets/js/holder.js new file mode 100644 index 0000000..ebeb3c5 --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/js/holder.js @@ -0,0 +1,404 @@ +/* + +Holder - 2.1 - client side image placeholders +(c) 2012-2013 Ivan Malopinsky / http://imsky.co + +Provided under the MIT License. +Commercial use requires attribution. + +*/ + +var Holder = Holder || {}; +(function (app, win) { + +var preempted = false, +fallback = false, +canvas = document.createElement('canvas'); + +if (!canvas.getContext) { + fallback = true; +} else { + if (canvas.toDataURL("image/png") + .indexOf("data:image/png") < 0) { + //Android doesn't support data URI + fallback = true; + } else { + var ctx = canvas.getContext("2d"); + } +} + +var dpr = 1, bsr = 1; + +if(!fallback){ + dpr = window.devicePixelRatio || 1, + bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; +} + +var ratio = dpr / bsr; + +//getElementsByClassName polyfill +document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i= 0.75) { + text_height = Math.floor(text_height * 0.75 * (width / text_width)); + } + //Resetting font size if necessary + ctx.font = "bold " + (text_height * ratio) + "px " + font; + ctx.fillText(text, (width / 2), (height / 2), width); + return canvas.toDataURL("image/png"); +} + +function render(mode, el, holder, src) { + var dimensions = holder.dimensions, + theme = holder.theme, + text = holder.text ? decodeURIComponent(holder.text) : holder.text; + var dimensions_caption = dimensions.width + "x" + dimensions.height; + theme = (text ? extend(theme, { + text: text + }) : theme); + theme = (holder.font ? extend(theme, { + font: holder.font + }) : theme); + el.setAttribute("data-src", src); + theme.literalText = dimensions_caption; + holder.originalTheme = holder.theme; + holder.theme = theme; + + if (mode == "image") { + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (fallback || !holder.auto) { + el.style.width = dimensions.width + "px"; + el.style.height = dimensions.height + "px"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.setAttribute("src", draw(ctx, dimensions, theme, ratio)); + } + } else if (mode == "background") { + if (!fallback) { + el.style.backgroundImage = "url(" + draw(ctx, dimensions, theme, ratio) + ")"; + el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px"; + } + } else if (mode == "fluid") { + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (dimensions.height.slice(-1) == "%") { + el.style.height = dimensions.height + } else { + el.style.height = dimensions.height + "px" + } + if (dimensions.width.slice(-1) == "%") { + el.style.width = dimensions.width + } else { + el.style.width = dimensions.width + "px" + } + if (el.style.display == "inline" || el.style.display === "") { + el.style.display = "block"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.holderData = holder; + fluid_images.push(el); + fluid_update(el); + } + } +} + +function fluid_update(element) { + var images; + if (element.nodeType == null) { + images = fluid_images; + } else { + images = [element] + } + for (var i in images) { + var el = images[i] + if (el.holderData) { + var holder = el.holderData; + el.setAttribute("src", draw(ctx, { + height: el.clientHeight, + width: el.clientWidth + }, holder.theme, ratio, !! holder.literal)); + } + } +} + +function parse_flags(flags, options) { + var ret = { + theme: settings.themes.gray + }; + var render = false; + for (sl = flags.length, j = 0; j < sl; j++) { + var flag = flags[j]; + if (app.flags.dimensions.match(flag)) { + render = true; + ret.dimensions = app.flags.dimensions.output(flag); + } else if (app.flags.fluid.match(flag)) { + render = true; + ret.dimensions = app.flags.fluid.output(flag); + ret.fluid = true; + } else if (app.flags.literal.match(flag)) { + ret.literal = true; + } else if (app.flags.colors.match(flag)) { + ret.theme = app.flags.colors.output(flag); + } else if (options.themes[flag]) { + //If a theme is specified, it will override custom colors + ret.theme = options.themes[flag]; + } else if (app.flags.font.match(flag)) { + ret.font = app.flags.font.output(flag); + } else if (app.flags.auto.match(flag)) { + ret.auto = true; + } else if (app.flags.text.match(flag)) { + ret.text = app.flags.text.output(flag); + } + } + return render ? ret : false; +} +var fluid_images = []; +var settings = { + domain: "holder.js", + images: "img", + bgnodes: ".holderjs", + themes: { + "gray": { + background: "#eee", + foreground: "#aaa", + size: 12 + }, + "social": { + background: "#3a5a97", + foreground: "#fff", + size: 12 + }, + "industrial": { + background: "#434A52", + foreground: "#C2F200", + size: 12 + } + }, + stylesheet: "" +}; +app.flags = { + dimensions: { + regex: /^(\d+)x(\d+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: +exec[1], + height: +exec[2] + } + } + }, + fluid: { + regex: /^([0-9%]+)x([0-9%]+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: exec[1], + height: exec[2] + } + } + }, + colors: { + regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i, + output: function (val) { + var exec = this.regex.exec(val); + return { + size: settings.themes.gray.size, + foreground: "#" + exec[2], + background: "#" + exec[1] + } + } + }, + text: { + regex: /text\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + font: { + regex: /font\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + auto: { + regex: /^auto$/ + }, + literal: { + regex: /^literal$/ + } +} +for (var flag in app.flags) { + if (!app.flags.hasOwnProperty(flag)) continue; + app.flags[flag].match = function (val) { + return val.match(this.regex) + } +} +app.add_theme = function (name, theme) { + name != null && theme != null && (settings.themes[name] = theme); + return app; +}; +app.add_image = function (src, el) { + var node = selector(el); + if (node.length) { + for (var i = 0, l = node.length; i < l; i++) { + var img = document.createElement("img") + img.setAttribute("data-src", src); + node[i].appendChild(img); + } + } + return app; +}; +app.run = function (o) { + var options = extend(settings, o), + images = [], + imageNodes = [], + bgnodes = []; + if (typeof (options.images) == "string") { + imageNodes = selector(options.images); + } else if (window.NodeList && options.images instanceof window.NodeList) { + imageNodes = options.images; + } else if (window.Node && options.images instanceof window.Node) { + imageNodes = [options.images]; + } + if (typeof (options.bgnodes) == "string") { + bgnodes = selector(options.bgnodes); + } else if (window.NodeList && options.elements instanceof window.NodeList) { + bgnodes = options.bgnodes; + } else if (window.Node && options.bgnodes instanceof window.Node) { + bgnodes = [options.bgnodes]; + } + preempted = true; + for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); + var holdercss = document.getElementById("holderjs-style"); + if (!holdercss) { + holdercss = document.createElement("style"); + holdercss.setAttribute("id", "holderjs-style"); + holdercss.type = "text/css"; + document.getElementsByTagName("head")[0].appendChild(holdercss); + } + if (!options.nocss) { + if (holdercss.styleSheet) { + holdercss.styleSheet.cssText += options.stylesheet; + } else { + holdercss.appendChild(document.createTextNode(options.stylesheet)); + } + } + var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); + for (var l = bgnodes.length, i = 0; i < l; i++) { + var src = window.getComputedStyle(bgnodes[i], null) + .getPropertyValue("background-image"); + var flags = src.match(cssregex); + var bgsrc = bgnodes[i].getAttribute("data-background-src"); + if (flags) { + var holder = parse_flags(flags[1].split("/"), options); + if (holder) { + render("background", bgnodes[i], holder, src); + } + } else if (bgsrc != null) { + var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if (holder) { + render("background", bgnodes[i], holder, src); + } + } + } + for (l = images.length, i = 0; i < l; i++) { + var attr_data_src, attr_src; + attr_src = attr_data_src = src = null; + try { + attr_src = images[i].getAttribute("src"); + attr_datasrc = images[i].getAttribute("data-src"); + } catch (e) {} + if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) { + src = attr_src; + } else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) { + src = attr_datasrc; + } + if (src) { + var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if (holder) { + if (holder.fluid) { + render("fluid", images[i], holder, src) + } else { + render("image", images[i], holder, src); + } + } + } + } + return app; +}; +contentLoaded(win, function () { + if (window.addEventListener) { + window.addEventListener("resize", fluid_update, false); + window.addEventListener("orientationchange", fluid_update, false); + } else { + window.attachEvent("onresize", fluid_update) + } + preempted || app.run(); +}); +if (typeof define === "function" && define.amd) { + define([], function () { + return app; + }); +} + +})(Holder, window); diff --git a/app/bower_components/sass-bootstrap/docs-assets/js/ie8-responsive-file-warning.js b/app/bower_components/sass-bootstrap/docs-assets/js/ie8-responsive-file-warning.js new file mode 100644 index 0000000..f5dd74f --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/js/ie8-responsive-file-warning.js @@ -0,0 +1,12 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ +/*! + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ +// Intended to prevent false-positive bug reports about responsive styling supposedly not working in IE8. +if (window.location.protocol == 'file:') + alert("ERROR: Bootstrap's responsive CSS is disabled!\nSee getbootstrap.com/getting-started/#respond-file-proto for details.") diff --git a/app/bower_components/sass-bootstrap/docs-assets/js/jszip.js b/app/bower_components/sass-bootstrap/docs-assets/js/jszip.js new file mode 100644 index 0000000..79a7654 --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/js/jszip.js @@ -0,0 +1,1467 @@ +/** + +JSZip - A Javascript class for generating and reading zip files + + +(c) 2009-2012 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See LICENSE.markdown. + +Usage: + zip = new JSZip(); + zip.file("hello.txt", "Hello, World!").file("tempfile", "nothing"); + zip.folder("images").file("smile.gif", base64Data, {base64: true}); + zip.file("Xmas.txt", "Ho ho ho !", {date : new Date("December 25, 2007 00:00:01")}); + zip.remove("tempfile"); + + base64zip = zip.generate(); + +**/ +"use strict"; + +/** + * Representation a of zip file in js + * @constructor + * @param {String=|ArrayBuffer=|Uint8Array=|Buffer=} data the data to load, if any (optional). + * @param {Object=} options the options for creating this objects (optional). + */ +var JSZip = function(data, options) { + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + this.files = {}; + + // Where we are in the hierarchy + this.root = ""; + + if (data) { + this.load(data, options); + } +}; + +JSZip.signature = { + LOCAL_FILE_HEADER : "\x50\x4b\x03\x04", + CENTRAL_FILE_HEADER : "\x50\x4b\x01\x02", + CENTRAL_DIRECTORY_END : "\x50\x4b\x05\x06", + ZIP64_CENTRAL_DIRECTORY_LOCATOR : "\x50\x4b\x06\x07", + ZIP64_CENTRAL_DIRECTORY_END : "\x50\x4b\x06\x06", + DATA_DESCRIPTOR : "\x50\x4b\x07\x08" +}; + +// Default properties for a new file +JSZip.defaults = { + base64: false, + binary: false, + dir: false, + date: null, + compression: null +}; + +/* + * List features that require a modern browser, and if the current browser support them. + */ +JSZip.support = { + // contains true if JSZip can read/generate ArrayBuffer, false otherwise. + arraybuffer : (function(){ + return typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; + })(), + // contains true if JSZip can read/generate nodejs Buffer, false otherwise. + nodebuffer : (function(){ + return typeof Buffer !== "undefined"; + })(), + // contains true if JSZip can read/generate Uint8Array, false otherwise. + uint8array : (function(){ + return typeof Uint8Array !== "undefined"; + })(), + // contains true if JSZip can read/generate Blob, false otherwise. + blob : (function(){ + // the spec started with BlobBuilder then replaced it with a construtor for Blob. + // Result : we have browsers that : + // * know the BlobBuilder (but with prefix) + // * know the Blob constructor + // * know about Blob but not about how to build them + // About the "=== 0" test : if given the wrong type, it may be converted to a string. + // Instead of an empty content, we will get "[object Uint8Array]" for example. + if (typeof ArrayBuffer === "undefined") { + return false; + } + var buffer = new ArrayBuffer(0); + try { + return new Blob([buffer], { type: "application/zip" }).size === 0; + } + catch(e) {} + + try { + var builder = new (window.BlobBuilder || window.WebKitBlobBuilder || + window.MozBlobBuilder || window.MSBlobBuilder)(); + builder.append(buffer); + return builder.getBlob('application/zip').size === 0; + } + catch(e) {} + + return false; + })() +}; + +JSZip.prototype = (function () { + var textEncoder, textDecoder; + if ( + JSZip.support.uint8array && + typeof TextEncoder === "function" && + typeof TextDecoder === "function" + ) { + textEncoder = new TextEncoder("utf-8"); + textDecoder = new TextDecoder("utf-8"); + } + + /** + * Returns the raw data of a ZipObject, decompress the content if necessary. + * @param {ZipObject} file the file to use. + * @return {String|ArrayBuffer|Uint8Array|Buffer} the data. + */ + var getRawData = function (file) { + if (file._data instanceof JSZip.CompressedObject) { + file._data = file._data.getContent(); + file.options.binary = true; + file.options.base64 = false; + + if (JSZip.utils.getTypeOf(file._data) === "uint8array") { + var copy = file._data; + // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array. + // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file). + file._data = new Uint8Array(copy.length); + // with an empty Uint8Array, Opera fails with a "Offset larger than array size" + if (copy.length !== 0) { + file._data.set(copy, 0); + } + } + } + return file._data; + }; + + /** + * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it. + * @param {ZipObject} file the file to use. + * @return {String|ArrayBuffer|Uint8Array|Buffer} the data. + */ + var getBinaryData = function (file) { + var result = getRawData(file), type = JSZip.utils.getTypeOf(result); + if (type === "string") { + if (!file.options.binary) { + // unicode text ! + // unicode string => binary string is a painful process, check if we can avoid it. + if (textEncoder) { + return textEncoder.encode(result); + } + if (JSZip.support.nodebuffer) { + return new Buffer(result, "utf-8"); + } + } + return file.asBinary(); + } + return result; + } + + /** + * Transform this._data into a string. + * @param {function} filter a function String -> String, applied if not null on the result. + * @return {String} the string representing this._data. + */ + var dataToString = function (asUTF8) { + var result = getRawData(this); + if (result === null || typeof result === "undefined") { + return ""; + } + // if the data is a base64 string, we decode it before checking the encoding ! + if (this.options.base64) { + result = JSZip.base64.decode(result); + } + if (asUTF8 && this.options.binary) { + // JSZip.prototype.utf8decode supports arrays as input + // skip to array => string step, utf8decode will do it. + result = JSZip.prototype.utf8decode(result); + } else { + // no utf8 transformation, do the array => string step. + result = JSZip.utils.transformTo("string", result); + } + + if (!asUTF8 && !this.options.binary) { + result = JSZip.prototype.utf8encode(result); + } + return result; + }; + /** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ + var ZipObject = function (name, data, options) { + this.name = name; + this._data = data; + this.options = options; + }; + + ZipObject.prototype = { + /** + * Return the content as UTF8 string. + * @return {string} the UTF8 string. + */ + asText : function () { + return dataToString.call(this, true); + }, + /** + * Returns the binary content. + * @return {string} the content as binary. + */ + asBinary : function () { + return dataToString.call(this, false); + }, + /** + * Returns the content as a nodejs Buffer. + * @return {Buffer} the content as a Buffer. + */ + asNodeBuffer : function () { + var result = getBinaryData(this); + return JSZip.utils.transformTo("nodebuffer", result); + }, + /** + * Returns the content as an Uint8Array. + * @return {Uint8Array} the content as an Uint8Array. + */ + asUint8Array : function () { + var result = getBinaryData(this); + return JSZip.utils.transformTo("uint8array", result); + }, + /** + * Returns the content as an ArrayBuffer. + * @return {ArrayBuffer} the content as an ArrayBufer. + */ + asArrayBuffer : function () { + return this.asUint8Array().buffer; + } + }; + + /** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ + var decToHex = function(dec, bytes) { + var hex = "", i; + for(i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec&0xff); + dec=dec>>>8; + } + return hex; + }; + + /** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ + var extend = function () { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; + }; + + /** + * Transforms the (incomplete) options from the user into the complete + * set of options to create a file. + * @private + * @param {Object} o the options from the user. + * @return {Object} the complete set of options. + */ + var prepareFileAttrs = function (o) { + o = o || {}; + if (o.base64 === true && o.binary == null) { + o.binary = true; + } + o = extend(o, JSZip.defaults); + o.date = o.date || new Date(); + if (o.compression !== null) o.compression = o.compression.toUpperCase(); + + return o; + }; + + /** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} o the options of the file + * @return {Object} the new file. + */ + var fileAdd = function (name, data, o) { + // be sure sub folders exist + var parent = parentFolder(name), dataType = JSZip.utils.getTypeOf(data); + if (parent) { + folderAdd.call(this, parent); + } + + o = prepareFileAttrs(o); + + if (o.dir || data === null || typeof data === "undefined") { + o.base64 = false; + o.binary = false; + data = null; + } else if (dataType === "string") { + if (o.binary && !o.base64) { + // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask + if (o.optimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = JSZip.utils.string2binary(data); + } + } + } else { // arraybuffer, uint8array, ... + o.base64 = false; + o.binary = true; + + if (!dataType && !(data instanceof JSZip.CompressedObject)) { + throw new Error("The data of '" + name + "' is in an unsupported format !"); + } + + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = JSZip.utils.transformTo("uint8array", data); + } + } + + return this.files[name] = new ZipObject(name, data, o); + }; + + + /** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ + var parentFolder = function (path) { + if (path.slice(-1) == '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; + }; + + /** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @return {Object} the new folder. + */ + var folderAdd = function (name) { + // Check the name ends with a / + if (name.slice(-1) != "/") { + name += "/"; // IE doesn't like substr(-1) + } + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, {dir:true}); + } + return this.files[name]; + }; + + /** + * Generate a JSZip.CompressedObject for a given zipOject. + * @param {ZipObject} file the object to read. + * @param {JSZip.compression} compression the compression to use. + * @return {JSZip.CompressedObject} the compressed result. + */ + var generateCompressedObjectFrom = function (file, compression) { + var result = new JSZip.CompressedObject(), content; + + // the data has not been decompressed, we might reuse things ! + if (file._data instanceof JSZip.CompressedObject) { + result.uncompressedSize = file._data.uncompressedSize; + result.crc32 = file._data.crc32; + + if (result.uncompressedSize === 0 || file.options.dir) { + compression = JSZip.compressions['STORE']; + result.compressedContent = ""; + result.crc32 = 0; + } else if (file._data.compressionMethod === compression.magic) { + result.compressedContent = file._data.getCompressedContent(); + } else { + content = file._data.getContent() + // need to decompress / recompress + result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content)); + } + } else { + // have uncompressed data + content = getBinaryData(file); + if (!content || content.length === 0 || file.options.dir) { + compression = JSZip.compressions['STORE']; + content = ""; + } + result.uncompressedSize = content.length; + result.crc32 = this.crc32(content); + result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content)); + } + + result.compressedSize = result.compressedContent.length; + result.compressionMethod = compression.magic; + + return result; + }; + + /** + * Generate the various parts used in the construction of the final zip file. + * @param {string} name the file name. + * @param {ZipObject} file the file content. + * @param {JSZip.CompressedObject} compressedObject the compressed object. + * @param {number} offset the current offset from the start of the zip file. + * @return {object} the zip parts. + */ + var generateZipParts = function(name, file, compressedObject, offset) { + var data = compressedObject.compressedContent, + utfEncodedFileName = this.utf8encode(file.name), + useUTF8 = utfEncodedFileName !== file.name, + o = file.options, + dosTime, + dosDate; + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = o.date.getHours(); + dosTime = dosTime << 6; + dosTime = dosTime | o.date.getMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | o.date.getSeconds() / 2; + + dosDate = o.date.getFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (o.date.getMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | o.date.getDate(); + + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + // set bit 11 if utf8 + header += useUTF8 ? "\x00\x08" : "\x00\x00"; + // compression method + header += compressedObject.compressionMethod; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(compressedObject.crc32, 4); + // compressed size + header += decToHex(compressedObject.compressedSize, 4); + // uncompressed size + header += decToHex(compressedObject.uncompressedSize, 4); + // file name length + header += decToHex(utfEncodedFileName.length, 2); + // extra field length + header += "\x00\x00"; + + + var fileRecord = JSZip.signature.LOCAL_FILE_HEADER + header + utfEncodedFileName; + + var dirRecord = JSZip.signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + "\x14\x00" + + // file header (common to file and central directory) + header + + // file comment length + "\x00\x00" + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + (file.options.dir===true?"\x10\x00\x00\x00":"\x00\x00\x00\x00")+ + // relative offset of local header + decToHex(offset, 4) + + // file name + utfEncodedFileName; + + + return { + fileRecord : fileRecord, + dirRecord : dirRecord, + compressedObject : compressedObject + }; + }; + + /** + * An object to write any content to a string. + * @constructor + */ + var StringWriter = function () { + this.data = []; + }; + StringWriter.prototype = { + /** + * Append any content to the current string. + * @param {Object} input the content to add. + */ + append : function (input) { + input = JSZip.utils.transformTo("string", input); + this.data.push(input); + }, + /** + * Finalize the construction an return the result. + * @return {string} the generated string. + */ + finalize : function () { + return this.data.join(""); + } + }; + /** + * An object to write any content to an Uint8Array. + * @constructor + * @param {number} length The length of the array. + */ + var Uint8ArrayWriter = function (length) { + this.data = new Uint8Array(length); + this.index = 0; + }; + Uint8ArrayWriter.prototype = { + /** + * Append any content to the current array. + * @param {Object} input the content to add. + */ + append : function (input) { + if (input.length !== 0) { + // with an empty Uint8Array, Opera fails with a "Offset larger than array size" + input = JSZip.utils.transformTo("uint8array", input); + this.data.set(input, this.index); + this.index += input.length; + } + }, + /** + * Finalize the construction an return the result. + * @return {Uint8Array} the generated array. + */ + finalize : function () { + return this.data; + } + }; + + // return the actual prototype of JSZip + return { + /** + * Read an existing zip and merge the data in the current JSZip object. + * The implementation is in jszip-load.js, don't forget to include it. + * @param {String|ArrayBuffer|Uint8Array|Buffer} stream The stream to load + * @param {Object} options Options for loading the stream. + * options.base64 : is the stream in base64 ? default : false + * @return {JSZip} the current JSZip object + */ + load : function (stream, options) { + throw new Error("Load method is not defined. Is the file jszip-load.js included ?"); + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter : function (search) { + var result = [], filename, relativePath, file, fileClone; + for (filename in this.files) { + if ( !this.files.hasOwnProperty(filename) ) { continue; } + file = this.files[filename]; + // return a new object, don't let the user mess with our internal objects :) + fileClone = new ZipObject(file.name, file._data, extend(file.options)); + relativePath = filename.slice(this.root.length, filename.length); + if (filename.slice(0, this.root.length) === this.root && // the file is in the current root + search(relativePath, fileClone)) { // and the file matches the function + result.push(fileClone); + } + } + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file : function(name, data, o) { + if (arguments.length === 1) { + if (JSZip.utils.isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.options.dir && regexp.test(relativePath); + }); + } else { // text + return this.filter(function (relativePath, file) { + return !file.options.dir && relativePath === name; + })[0]||null; + } + } else { // more than one argument : we have data ! + name = this.root+name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder : function(arg) { + if (!arg) { + return this; + } + + if (JSZip.utils.isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.options.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove : function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) != "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file) { + if (!file.options.dir) { + // file + delete this.files[name]; + } else { + // folder + var kids = this.filter(function (relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - base64, (deprecated, use type instead) true to generate base64. + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate : function(options) { + options = extend(options || {}, { + base64 : true, + compression : "STORE", + type : "base64" + }); + + JSZip.utils.checkSupport(options.type); + + var zipData = [], localDirLength = 0, centralDirLength = 0, writer, i; + + + // first, generate all the zip parts. + for (var name in this.files) { + if ( !this.files.hasOwnProperty(name) ) { continue; } + var file = this.files[name]; + + var compressionName = file.options.compression || options.compression.toUpperCase(); + var compression = JSZip.compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + + var compressedObject = generateCompressedObjectFrom.call(this, file, compression); + + var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength); + localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize; + centralDirLength += zipPart.dirRecord.length; + zipData.push(zipPart); + } + + var dirEnd = ""; + + // end of central dir signature + dirEnd = JSZip.signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(zipData.length, 2) + + // total number of entries in the central directory + decToHex(zipData.length, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + "\x00\x00"; + + + // we have all the parts (and the total length) + // time to create a writer ! + switch(options.type.toLowerCase()) { + case "uint8array" : + case "arraybuffer" : + case "blob" : + case "nodebuffer" : + writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length); + break; + case "base64" : + default : // case "string" : + writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length); + break; + } + + for (i = 0; i < zipData.length; i++) { + writer.append(zipData[i].fileRecord); + writer.append(zipData[i].compressedObject.compressedContent); + } + for (i = 0; i < zipData.length; i++) { + writer.append(zipData[i].dirRecord); + } + + writer.append(dirEnd); + + var zip = writer.finalize(); + + + + switch(options.type.toLowerCase()) { + // case "zip is an Uint8Array" + case "uint8array" : + case "arraybuffer" : + case "nodebuffer" : + return JSZip.utils.transformTo(options.type.toLowerCase(), zip); + case "blob" : + return JSZip.utils.arrayBuffer2Blob(JSZip.utils.transformTo("arraybuffer", zip)); + + // case "zip is a string" + case "base64" : + return (options.base64) ? JSZip.base64.encode(zip) : zip; + default : // case "string" : + return zip; + } + }, + + /** + * + * Javascript crc32 + * http://www.webtoolkit.info/ + * + */ + crc32 : function crc32(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = JSZip.utils.getTypeOf(input) !== "string"; + + var table = [ + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, + 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, + 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, + 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, + 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, + 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, + 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, + 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, + 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, + 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, + 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, + 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, + 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, + 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, + 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, + 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + ]; + + if (typeof(crc) == "undefined") { crc = 0; } + var x = 0; + var y = 0; + var byte = 0; + + crc = crc ^ (-1); + for( var i = 0, iTop = input.length; i < iTop; i++ ) { + byte = isArray ? input[i] : input.charCodeAt(i); + y = ( crc ^ byte ) & 0xFF; + x = table[y]; + crc = ( crc >>> 8 ) ^ x; + } + + return crc ^ (-1); + }, + + // Inspired by http://my.opera.com/GreyWyvern/blog/show.dml/1725165 + clone : function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }, + + + /** + * http://www.webtoolkit.info/javascript-utf8.html + */ + utf8encode : function (string) { + // TextEncoder + Uint8Array to binary string is faster than checking every bytes on long strings. + // http://jsperf.com/utf8encode-vs-textencoder + // On short strings (file names for example), the TextEncoder API is (currently) slower. + if (textEncoder) { + var u8 = textEncoder.encode(string); + return JSZip.utils.transformTo("string", u8); + } + if (JSZip.support.nodebuffer) { + return JSZip.utils.transformTo("string", new Buffer(string, "utf-8")); + } + + // array.join may be slower than string concatenation but generates less objects (less time spent garbage collecting). + // See also http://jsperf.com/array-direct-assignment-vs-push/31 + var result = [], resIndex = 0; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + result[resIndex++] = String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + result[resIndex++] = String.fromCharCode((c >> 6) | 192); + result[resIndex++] = String.fromCharCode((c & 63) | 128); + } else { + result[resIndex++] = String.fromCharCode((c >> 12) | 224); + result[resIndex++] = String.fromCharCode(((c >> 6) & 63) | 128); + result[resIndex++] = String.fromCharCode((c & 63) | 128); + } + + } + + return result.join(""); + }, + + /** + * http://www.webtoolkit.info/javascript-utf8.html + */ + utf8decode : function (input) { + var result = [], resIndex = 0; + var type = JSZip.utils.getTypeOf(input); + var isArray = type !== "string"; + var i = 0; + var c = 0, c1 = 0, c2 = 0, c3 = 0; + + // check if we can use the TextDecoder API + // see http://encoding.spec.whatwg.org/#api + if (textDecoder) { + return textDecoder.decode( + JSZip.utils.transformTo("uint8array", input) + ); + } + if (JSZip.support.nodebuffer) { + return JSZip.utils.transformTo("nodebuffer", input).toString("utf-8"); + } + + while ( i < input.length ) { + + c = isArray ? input[i] : input.charCodeAt(i); + + if (c < 128) { + result[resIndex++] = String.fromCharCode(c); + i++; + } else if ((c > 191) && (c < 224)) { + c2 = isArray ? input[i+1] : input.charCodeAt(i+1); + result[resIndex++] = String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = isArray ? input[i+1] : input.charCodeAt(i+1); + c3 = isArray ? input[i+2] : input.charCodeAt(i+2); + result[resIndex++] = String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } + + return result.join(""); + } + }; +}()); + +/* + * Compression methods + * This object is filled in as follow : + * name : { + * magic // the 2 bytes indentifying the compression method + * compress // function, take the uncompressed content and return it compressed. + * uncompress // function, take the compressed content and return it uncompressed. + * compressInputType // string, the type accepted by the compress method. null to accept everything. + * uncompressInputType // string, the type accepted by the uncompress method. null to accept everything. + * } + * + * STORE is the default compression method, so it's included in this file. + * Other methods should go to separated files : the user wants modularity. + */ +JSZip.compressions = { + "STORE" : { + magic : "\x00\x00", + compress : function (content) { + return content; // no compression + }, + uncompress : function (content) { + return content; // no compression + }, + compressInputType : null, + uncompressInputType : null + } +}; + +(function () { + JSZip.utils = { + /** + * Convert a string to a "binary string" : a string containing only char codes between 0 and 255. + * @param {string} str the string to transform. + * @return {String} the binary string. + */ + string2binary : function (str) { + var result = ""; + for (var i = 0; i < str.length; i++) { + result += String.fromCharCode(str.charCodeAt(i) & 0xff); + } + return result; + }, + /** + * Create a Uint8Array from the string. + * @param {string} str the string to transform. + * @return {Uint8Array} the typed array. + * @throws {Error} an Error if the browser doesn't support the requested feature. + * @deprecated : use JSZip.utils.transformTo instead. + */ + string2Uint8Array : function (str) { + return JSZip.utils.transformTo("uint8array", str); + }, + + /** + * Create a string from the Uint8Array. + * @param {Uint8Array} array the array to transform. + * @return {string} the string. + * @throws {Error} an Error if the browser doesn't support the requested feature. + * @deprecated : use JSZip.utils.transformTo instead. + */ + uint8Array2String : function (array) { + return JSZip.utils.transformTo("string", array); + }, + /** + * Create a blob from the given ArrayBuffer. + * @param {ArrayBuffer} buffer the buffer to transform. + * @return {Blob} the result. + * @throws {Error} an Error if the browser doesn't support the requested feature. + */ + arrayBuffer2Blob : function (buffer) { + JSZip.utils.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([buffer], { type: "application/zip" }); + } + catch(e) {} + + try { + // deprecated, browser only, old way + var builder = new (window.BlobBuilder || window.WebKitBlobBuilder || + window.MozBlobBuilder || window.MSBlobBuilder)(); + builder.append(buffer); + return builder.getBlob('application/zip'); + } + catch(e) {} + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + }, + /** + * Create a blob from the given string. + * @param {string} str the string to transform. + * @return {Blob} the result. + * @throws {Error} an Error if the browser doesn't support the requested feature. + */ + string2Blob : function (str) { + var buffer = JSZip.utils.transformTo("arraybuffer", str); + return JSZip.utils.arrayBuffer2Blob(buffer); + } + }; + + /** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ + function identity(input) { + return input; + }; + + /** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ + function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; + }; + + /** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + var chunk = 65536; + var result = [], len = array.length, type = JSZip.utils.getTypeOf(array), k = 0; + + var canUseApply = true; + try { + switch(type) { + case "uint8array": + String.fromCharCode.apply(null, new Uint8Array(0)); + break; + case "nodebuffer": + String.fromCharCode.apply(null, new Buffer(0)); + break; + } + } catch(e) { + canUseApply = false; + } + + // no apply : slow and painful algorithm + // default browser on android 4.* + if (!canUseApply) { + var resultStr = ""; + for(var i = 0; i < array.length;i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + } + + while (k < len && chunk > 1) { + try { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + return result.join(""); + }; + + /** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ + function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for(var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; + }; + + // a matrix containing functions to transform everything into everything. + var transform = {}; + + // string to ? + transform["string"] = { + "string" : identity, + "array" : function (input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer" : function (input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array" : function (input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer" : function (input) { + return stringToArrayLike(input, new Buffer(input.length)); + } + }; + + // array to ? + transform["array"] = { + "string" : arrayLikeToString, + "array" : identity, + "arraybuffer" : function (input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array" : function (input) { + return new Uint8Array(input); + }, + "nodebuffer" : function (input) { + return new Buffer(input); + } + }; + + // arraybuffer to ? + transform["arraybuffer"] = { + "string" : function (input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array" : function (input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer" : identity, + "uint8array" : function (input) { + return new Uint8Array(input); + }, + "nodebuffer" : function (input) { + return new Buffer(new Uint8Array(input)); + } + }; + + // uint8array to ? + transform["uint8array"] = { + "string" : arrayLikeToString, + "array" : function (input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer" : function (input) { + return input.buffer; + }, + "uint8array" : identity, + "nodebuffer" : function(input) { + return new Buffer(input); + } + }; + + // nodebuffer to ? + transform["nodebuffer"] = { + "string" : arrayLikeToString, + "array" : function (input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer" : function (input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array" : function (input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer" : identity + }; + + /** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ + JSZip.utils.transformTo = function (outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + JSZip.utils.checkSupport(outputType); + var inputType = JSZip.utils.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; + }; + + /** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ + JSZip.utils.getTypeOf = function (input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (JSZip.support.nodebuffer && Buffer.isBuffer(input)) { + return "nodebuffer"; + } + if (JSZip.support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (JSZip.support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } + }; + + /** + * Cross-window, cross-Node-context regular expression detection + * @param {Object} object Anything + * @return {Boolean} true if the object is a regular expression, + * false otherwise + */ + JSZip.utils.isRegExp = function (object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; + }; + + /** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ + JSZip.utils.checkSupport = function (type) { + var supported = true; + switch (type.toLowerCase()) { + case "uint8array": + supported = JSZip.support.uint8array; + break; + case "arraybuffer": + supported = JSZip.support.arraybuffer; + break; + case "nodebuffer": + supported = JSZip.support.nodebuffer; + break; + case "blob": + supported = JSZip.support.blob; + break; + } + if (!supported) { + throw new Error(type + " is not supported by this browser"); + } + }; + + +})(); + +(function (){ + /** + * Represents an entry in the zip. + * The content may or may not be compressed. + * @constructor + */ + JSZip.CompressedObject = function () { + this.compressedSize = 0; + this.uncompressedSize = 0; + this.crc32 = 0; + this.compressionMethod = null; + this.compressedContent = null; + }; + + JSZip.CompressedObject.prototype = { + /** + * Return the decompressed content in an unspecified format. + * The format will depend on the decompressor. + * @return {Object} the decompressed content. + */ + getContent : function () { + return null; // see implementation + }, + /** + * Return the compressed content in an unspecified format. + * The format will depend on the compressed conten source. + * @return {Object} the compressed content. + */ + getCompressedContent : function () { + return null; // see implementation + } + }; +})(); + +/** + * + * Base64 encode / decode + * http://www.webtoolkit.info/ + * + * Hacked so that it doesn't utf8 en/decode everything + **/ +JSZip.base64 = (function() { + // private property + var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + return { + // public method for encoding + encode : function(input, utf8) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); + + } + + return output; + }, + + // public method for decoding + decode : function(input, utf8) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } + + return output; + + } + }; +}()); + +// enforcing Stuk's coding style +// vim: set shiftwidth=3 softtabstop=3: diff --git a/app/bower_components/sass-bootstrap/docs-assets/js/less.js b/app/bower_components/sass-bootstrap/docs-assets/js/less.js new file mode 100644 index 0000000..f4aa7cb --- /dev/null +++ b/app/bower_components/sass-bootstrap/docs-assets/js/less.js @@ -0,0 +1,9 @@ +// +// LESS - Leaner CSS v1.3.3 +// http://lesscss.org +// +// Copyright (c) 2009-2013, Alexis Sellier +// Licensed under the Apache 2.0 License. +// +(function(e,t){function n(t){return e.less[t.split("/")[1]]}function f(){r.env==="development"?(r.optimization=0,r.watchTimer=setInterval(function(){r.watchMode&&g(function(e,t,n,r,i){t&&S(t.toCSS(),r,i.lastModified)})},r.poll)):r.optimization=3}function m(){var e=document.getElementsByTagName("style");for(var t=0;t0&&(s.splice(o-1,2),o-=2)}return i.hostPart=r[1],i.directories=s,i.path=r[1]+s.join("/"),i.fileUrl=i.path+(r[4]||""),i.url=i.fileUrl+(r[5]||""),i}function w(t,n,i,s){var o=t.contents||{},u=t.files||{},a=b(t.href,e.location.href),f=a.url,c=l&&l.getItem(f),h=l&&l.getItem(f+":timestamp"),p={css:c,timestamp:h},d;r.relativeUrls?r.rootpath?t.entryPath?d=b(r.rootpath+y(a.path,t.entryPath)).path:d=r.rootpath:d=a.path:r.rootpath?d=r.rootpath:t.entryPath?d=t.entryPath:d=a.path,x(f,t.type,function(e,l){v+=e.replace(/@import .+?;/ig,"");if(!i&&p&&l&&(new Date(l)).valueOf()===(new Date(p.timestamp)).valueOf())S(p.css,t),n(null,null,e,t,{local:!0,remaining:s},f);else try{o[f]=e,(new r.Parser({optimization:r.optimization,paths:[a.path],entryPath:t.entryPath||a.path,mime:t.type,filename:f,rootpath:d,relativeUrls:t.relativeUrls,contents:o,files:u,dumpLineNumbers:r.dumpLineNumbers})).parse(e,function(r,i){if(r)return k(r,f);try{n(r,i,e,t,{local:!1,lastModified:l,remaining:s},f),N(document.getElementById("less-error-message:"+E(f)))}catch(r){k(r,f)}})}catch(c){k(c,f)}},function(e,t){throw new Error("Couldn't load "+t+" ("+e+")")})}function E(e){return e.replace(/^[a-z]+:\/\/?[^\/]+/,"").replace(/^\//,"").replace(/\.[a-zA-Z]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function S(e,t,n){var r,i=t.href||"",s="less:"+(t.title||E(i));if((r=document.getElementById(s))===null){r=document.createElement("style"),r.type="text/css",t.media&&(r.media=t.media),r.id=s;var o=t&&t.nextSibling||null;(o||document.getElementsByTagName("head")[0]).parentNode.insertBefore(r,o)}if(r.styleSheet)try{r.styleSheet.cssText=e}catch(u){throw new Error("Couldn't reassign styleSheet.cssText.")}else(function(e){r.childNodes.length>0?r.firstChild.nodeValue!==e.nodeValue&&r.replaceChild(e,r.firstChild):r.appendChild(e)})(document.createTextNode(e));if(n&&l){C("saving "+i+" to cache.");try{l.setItem(i,e),l.setItem(i+":timestamp",n)}catch(u){C("failed to save")}}}function x(e,t,n,i){function a(t,n,r){t.status>=200&&t.status<300?n(t.responseText,t.getResponseHeader("Last-Modified")):typeof r=="function"&&r(t.status,e)}var s=T(),u=o?r.fileAsync:r.async;typeof s.overrideMimeType=="function"&&s.overrideMimeType("text/css"),s.open("GET",e,u),s.setRequestHeader("Accept",t||"text/x-less, text/css; q=0.9, */*; q=0.5"),s.send(null),o&&!r.fileAsync?s.status===0||s.status>=200&&s.status<300?n(s.responseText):i(s.status,e):u?s.onreadystatechange=function(){s.readyState==4&&a(s,n,i)}:a(s,n,i)}function T(){if(e.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(t){return C("browser doesn't support AJAX."),null}}function N(e){return e&&e.parentNode.removeChild(e)}function C(e){r.env=="development"&&typeof console!="undefined"&&console.log("less: "+e)}function k(e,t){var n="less-error-message:"+E(t),i='
  • {content}
  • ',s=document.createElement("div"),o,u,a=[],f=e.filename||t,l=f.match(/([^\/]+(\?.*)?)$/)[1];s.id=n,s.className="less-error-message",u="

    "+(e.message||"There is an error in your .less file")+"

    "+'

    in '+l+" ";var c=function(e,t,n){e.extract[t]&&a.push(i.replace(/\{line\}/,parseInt(e.line)+(t-1)).replace(/\{class\}/,n).replace(/\{content\}/,e.extract[t]))};e.stack?u+="
    "+e.stack.split("\n").slice(1).join("
    "):e.extract&&(c(e,0,""),c(e,1,"line"),c(e,2,""),u+="on line "+e.line+", column "+(e.column+1)+":

    "+"
      "+a.join("")+"
    "),s.innerHTML=u,S([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #dd6666;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.line {","color: #ff0000;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),s.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),r.env=="development"&&(o=setInterval(function(){document.body&&(document.getElementById(n)?document.body.replaceChild(s,document.getElementById(n)):document.body.insertBefore(s,document.body.firstChild),clearInterval(o))},10))}Array.isArray||(Array.isArray=function(e){return Object.prototype.toString.call(e)==="[object Array]"||e instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n=this.length>>>0;for(var r=0;r>>0,n=new Array(t),r=arguments[1];for(var i=0;i>>0,n=0;if(t===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n=t)return-1;n<0&&(n+=t);for(;nh&&(c[u]=c[u].slice(o-h),h=o)}function w(e){var t=e.charCodeAt(0);return t===32||t===10||t===9}function E(e){var t,n,r,i,a;if(e instanceof Function)return e.call(p.parsers);if(typeof e=="string")t=s.charAt(o)===e?e:null,r=1,b();else{b();if(!(t=e.exec(c[u])))return null;r=t[0].length}if(t)return S(r),typeof t=="string"?t:t.length===1?t[0]:t}function S(e){var t=o,n=u,r=o+c[u].length,i=o+=e;while(o=0&&t.charAt(n)!=="\n";n--)r++;return{line:typeof e=="number"?(t.slice(0,e).match(/\n/g)||"").length:null,column:r}}function L(e){return r.mode==="browser"||r.mode==="rhino"?e.filename:n("path").resolve(e.filename)}function A(e,t,n){return{lineNumber:k(e,t).line+1,fileName:L(n)}}function O(e,t){var n=C(e,t),r=k(e.index,n),i=r.line,s=r.column,o=n.split("\n");this.type=e.type||"Syntax",this.message=e.message,this.filename=e.filename||t.filename,this.index=e.index,this.line=typeof i=="number"?i+1:null,this.callLine=e.call&&k(e.call,n).line+1,this.callExtract=o[k(e.call,n).line],this.stack=e.stack,this.column=s,this.extract=[o[i-1],o[i],o[i+1]]}var s,o,u,a,f,l,c,h,p,d=this,t=t||{};t.contents||(t.contents={}),t.rootpath=t.rootpath||"",t.files||(t.files={});var v=function(){},m=this.imports={paths:t.paths||[],queue:[],files:t.files,contents:t.contents,mime:t.mime,error:null,push:function(e,n){var i=this;this.queue.push(e),r.Parser.importer(e,this.paths,function(t,r,s){i.queue.splice(i.queue.indexOf(e),1);var o=s in i.files;i.files[s]=r,t&&!i.error&&(i.error=t),n(t,r,o),i.queue.length===0&&v(i.error)},t)}};return this.env=t=t||{},this.optimization="optimization"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null,p={imports:m,parse:function(e,a){var f,d,m,g,y,b,w=[],S,x=null;o=u=h=l=0,s=e.replace(/\r\n/g,"\n"),s=s.replace(/^\uFEFF/,""),c=function(e){var n=0,r=/(?:@\{[\w-]+\}|[^"'`\{\}\/\(\)\\])+/g,i=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,o=/"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'|`((?:[^`]|\\.)*)`/g,u=0,a,f=e[0],l;for(var c=0,h,p;c0?"missing closing `}`":"missing opening `{`",filename:t.filename},t)),e.map(function(e){return e.join("")})}([[]]);if(x)return a(x,t);try{f=new i.Ruleset([],E(this.parsers.primary)),f.root=!0}catch(T){return a(new O(T,t))}f.toCSS=function(e){var s,o,u;return function(s,o){var u=[],a;s=s||{},typeof o=="object"&&!Array.isArray(o)&&(o=Object.keys(o).map(function(e){var t=o[e];return t instanceof i.Value||(t instanceof i.Expression||(t=new i.Expression([t])),t=new i.Value([t])),new i.Rule("@"+e,t,!1,0)}),u=[new i.Ruleset(null,o)]);try{var f=e.call(this,{frames:u}).toCSS([],{compress:s.compress||!1,dumpLineNumbers:t.dumpLineNumbers})}catch(l){throw new O(l,t)}if(a=p.imports.error)throw a instanceof O?a:new O(a,t);return s.yuicompress&&r.mode==="node"?n("ycssmin").cssmin(f):s.compress?f.replace(/(\s)+/g,"$1"):f}}(f.eval);if(o=0&&s.charAt(N)!=="\n";N--)C++;x={type:"Parse",message:"Syntax Error on line "+y,index:o,filename:t.filename,line:y,column:C,extract:[b[y-2],b[y-1],b[y]]}}this.imports.queue.length>0?v=function(e){e=x||e,e?a(e):a(null,f)}:a(x,f)},parsers:{primary:function(){var e,t=[];while((e=E(this.mixin.definition)||E(this.rule)||E(this.ruleset)||E(this.mixin.call)||E(this.comment)||E(this.directive))||E(/^[\s\n]+/)||E(/^;+/))e&&t.push(e);return t},comment:function(){var e;if(s.charAt(o)!=="/")return;if(s.charAt(o+1)==="/")return new i.Comment(E(/^\/\/.*/),!0);if(e=E(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/))return new i.Comment(e)},entities:{quoted:function(){var e,t=o,n;s.charAt(t)==="~"&&(t++,n=!0);if(s.charAt(t)!=='"'&&s.charAt(t)!=="'")return;n&&E("~");if(e=E(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/))return new i.Quoted(e[0],e[1]||e[2],n)},keyword:function(){var e;if(e=E(/^[_A-Za-z-][_A-Za-z0-9-]*/))return i.colors.hasOwnProperty(e)?new i.Color(i.colors[e].slice(1)):new i.Keyword(e)},call:function(){var e,n,r,s,a=o;if(!(e=/^([\w-]+|%|progid:[\w\.]+)\(/.exec(c[u])))return;e=e[1],n=e.toLowerCase();if(n==="url")return null;o+=e.length;if(n==="alpha"){s=E(this.alpha);if(typeof s!="undefined")return s}E("("),r=E(this.entities.arguments);if(!E(")"))return;if(e)return new i.Call(e,r,a,t.filename)},arguments:function(){var e=[],t;while(t=E(this.entities.assignment)||E(this.expression)){e.push(t);if(!E(","))break}return e},literal:function(){return E(this.entities.ratio)||E(this.entities.dimension)||E(this.entities.color)||E(this.entities.quoted)||E(this.entities.unicodeDescriptor)},assignment:function(){var e,t;if((e=E(/^\w+(?=\s?=)/i))&&E("=")&&(t=E(this.entity)))return new i.Assignment(e,t)},url:function(){var e;if(s.charAt(o)!=="u"||!E(/^url\(/))return;return e=E(this.entities.quoted)||E(this.entities.variable)||E(/^(?:(?:\\[\(\)'"])|[^\(\)'"])+/)||"",x(")"),new i.URL(e.value!=null||e instanceof i.Variable?e:new i.Anonymous(e),t.rootpath)},variable:function(){var e,n=o;if(s.charAt(o)==="@"&&(e=E(/^@@?[\w-]+/)))return new i.Variable(e,n,t.filename)},variableCurly:function(){var e,n,r=o;if(s.charAt(o)==="@"&&(n=E(/^@\{([\w-]+)\}/)))return new i.Variable("@"+n[1],r,t.filename)},color:function(){var e;if(s.charAt(o)==="#"&&(e=E(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/)))return new i.Color(e[1])},dimension:function(){var e,t=s.charCodeAt(o);if(t>57||t<43||t===47||t==44)return;if(e=E(/^([+-]?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn|dpi|dpcm|dppx|rem|vw|vh|vmin|vm|ch)?/))return new i.Dimension(e[1],e[2])},ratio:function(){var e,t=s.charCodeAt(o);if(t>57||t<48)return;if(e=E(/^(\d+\/\d+)/))return new i.Ratio(e[1])},unicodeDescriptor:function(){var e;if(e=E(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/))return new i.UnicodeDescriptor(e[0])},javascript:function(){var e,t=o,n;s.charAt(t)==="~"&&(t++,n=!0);if(s.charAt(t)!=="`")return;n&&E("~");if(e=E(/^`([^`]*)`/))return new i.JavaScript(e[1],o,n)}},variable:function(){var e;if(s.charAt(o)==="@"&&(e=E(/^(@[\w-]+)\s*:/)))return e[1]},shorthand:function(){var e,t;if(!N(/^[@\w.%-]+\/[@\w.-]+/))return;g();if((e=E(this.entity))&&E("/")&&(t=E(this.entity)))return new i.Shorthand(e,t);y()},mixin:{call:function(){var e=[],n,r,u=[],a=[],f,l,c,h,p,d,v,m=o,b=s.charAt(o),w,S,C=!1;if(b!=="."&&b!=="#")return;g();while(n=E(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/))e.push(new i.Element(r,n,o)),r=E(">");if(E("(")){p=[];while(c=E(this.expression)){h=null,S=c;if(c.value.length==1){var k=c.value[0];k instanceof i.Variable&&E(":")&&(p.length>0&&(d&&T("Cannot mix ; and , as delimiter types"),v=!0),S=x(this.expression),h=w=k.name)}p.push(S),a.push({name:h,value:S});if(E(","))continue;if(E(";")||d)v&&T("Cannot mix ; and , as delimiter types"),d=!0,p.length>1&&(S=new i.Value(p)),u.push({name:w,value:S}),w=null,p=[],v=!1}x(")")}f=d?u:a,E(this.important)&&(C=!0);if(e.length>0&&(E(";")||N("}")))return new i.mixin.Call(e,f,m,t.filename,C);y()},definition:function(){var e,t=[],n,r,u,a,f,c=!1;if(s.charAt(o)!=="."&&s.charAt(o)!=="#"||N(/^[^{]*\}/))return;g();if(n=E(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/)){e=n[1];do{E(this.comment);if(s.charAt(o)==="."&&E(/^\.{3}/)){c=!0,t.push({variadic:!0});break}if(!(u=E(this.entities.variable)||E(this.entities.literal)||E(this.entities.keyword)))break;if(u instanceof i.Variable)if(E(":"))a=x(this.expression,"expected expression"),t.push({name:u.name,value:a});else{if(E(/^\.{3}/)){t.push({name:u.name,variadic:!0}),c=!0;break}t.push({name:u.name})}else t.push({value:u})}while(E(",")||E(";"));E(")")||(l=o,y()),E(this.comment),E(/^when/)&&(f=x(this.conditions,"expected condition")),r=E(this.block);if(r)return new i.mixin.Definition(e,t,r,f,c);y()}}},entity:function(){return E(this.entities.literal)||E(this.entities.variable)||E(this.entities.url)||E(this.entities.call)||E(this.entities.keyword)||E(this.entities.javascript)||E(this.comment)},end:function(){return E(";")||N("}")},alpha:function(){var e;if(!E(/^\(opacity=/i))return;if(e=E(/^\d+/)||E(this.entities.variable))return x(")"),new i.Alpha(e)},element:function(){var e,t,n,r;n=E(this.combinator),e=E(/^(?:\d+\.\d+|\d+)%/)||E(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)||E("*")||E("&")||E(this.attribute)||E(/^\([^()@]+\)/)||E(/^[\.#](?=@)/)||E(this.entities.variableCurly),e||E("(")&&(r=E(this.entities.variableCurly)||E(this.entities.variable)||E(this.selector))&&E(")")&&(e=new i.Paren(r));if(e)return new i.Element(n,e,o)},combinator:function(){var e,t=s.charAt(o);if(t===">"||t==="+"||t==="~"||t==="|"){o++;while(s.charAt(o).match(/\s/))o++;return new i.Combinator(t)}return s.charAt(o-1).match(/\s/)?new i.Combinator(" "):new i.Combinator(null)},selector:function(){var e,t,n=[],r,u;if(E("("))return e=E(this.entity),E(")")?new i.Selector([new i.Element("",e,o)]):null;while(t=E(this.element)){r=s.charAt(o),n.push(t);if(r==="{"||r==="}"||r===";"||r===","||r===")")break}if(n.length>0)return new i.Selector(n)},attribute:function(){var e="",t,n,r;if(!E("["))return;if(t=E(/^(?:[_A-Za-z0-9-]|\\.)+/)||E(this.entities.quoted))(r=E(/^[|~*$^]?=/))&&(n=E(this.entities.quoted)||E(/^[\w-]+/))?e=[t,r,n.toCSS?n.toCSS():n].join(""):e=t;if(!E("]"))return;if(e)return"["+e+"]"},block:function(){var e;if(E("{")&&(e=E(this.primary))&&E("}"))return e},ruleset:function(){var e=[],n,r,u,a;g(),t.dumpLineNumbers&&(a=A(o,s,t));while(n=E(this.selector)){e.push(n),E(this.comment);if(!E(","))break;E(this.comment)}if(e.length>0&&(r=E(this.block))){var f=new i.Ruleset(e,r,t.strictImports);return t.dumpLineNumbers&&(f.debugInfo=a),f}l=o,y()},rule:function(){var e,t,n=s.charAt(o),r,a;g();if(n==="."||n==="#"||n==="&")return;if(e=E(this.variable)||E(this.property)){e.charAt(0)!="@"&&(a=/^([^@+\/'"*`(;{}-]*);/.exec(c[u]))?(o+=a[0].length-1,t=new i.Anonymous(a[1])):e==="font"?t=E(this.font):t=E(this.value),r=E(this.important);if(t&&E(this.end))return new i.Rule(e,t,r,f);l=o,y()}},"import":function(){var e,n,r=o;g();var s=E(/^@import(?:-(once))?\s+/);if(s&&(e=E(this.entities.quoted)||E(this.entities.url))){n=E(this.mediaFeatures);if(E(";"))return new i.Import(e,m,n,s[1]==="once",r,t.rootpath)}y()},mediaFeature:function(){var e,t,n=[];do if(e=E(this.entities.keyword))n.push(e);else if(E("(")){t=E(this.property),e=E(this.entity);if(!E(")"))return null;if(t&&e)n.push(new i.Paren(new i.Rule(t,e,null,o,!0)));else{if(!e)return null;n.push(new i.Paren(e))}}while(e);if(n.length>0)return new i.Expression(n)},mediaFeatures:function(){var e,t=[];do if(e=E(this.mediaFeature)){t.push(e);if(!E(","))break}else if(e=E(this.entities.variable)){t.push(e);if(!E(","))break}while(e);return t.length>0?t:null},media:function(){var e,n,r,u;t.dumpLineNumbers&&(u=A(o,s,t));if(E(/^@media/)){e=E(this.mediaFeatures);if(n=E(this.block))return r=new i.Media(n,e),t.dumpLineNumbers&&(r.debugInfo=u),r}},directive:function(){var e,n,r,u,a,f,l,c,h,p;if(s.charAt(o)!=="@")return;if(n=E(this["import"])||E(this.media))return n;g(),e=E(/^@[a-z-]+/);if(!e)return;l=e,e.charAt(1)=="-"&&e.indexOf("-",2)>0&&(l="@"+e.slice(e.indexOf("-",2)+1));switch(l){case"@font-face":c=!0;break;case"@viewport":case"@top-left":case"@top-left-corner":case"@top-center":case"@top-right":case"@top-right-corner":case"@bottom-left":case"@bottom-left-corner":case"@bottom-center":case"@bottom-right":case"@bottom-right-corner":case"@left-top":case"@left-middle":case"@left-bottom":case"@right-top":case"@right-middle":case"@right-bottom":c=!0;break;case"@page":case"@document":case"@supports":case"@keyframes":c=!0,h=!0;break;case"@namespace":p=!0}h&&(e+=" "+(E(/^[^{]+/)||"").trim());if(c){if(r=E(this.block))return new i.Directive(e,r)}else if((n=p?E(this.expression):E(this.entity))&&E(";")){var d=new i.Directive(e,n);return t.dumpLineNumbers&&(d.debugInfo=A(o,s,t)),d}y()},font:function(){var e=[],t=[],n,r,s,o;while(o=E(this.shorthand)||E(this.entity))t.push(o);e.push(new i.Expression(t));if(E(","))while(o=E(this.expression)){e.push(o);if(!E(","))break}return new i.Value(e)},value:function(){var e,t=[],n;while(e=E(this.expression)){t.push(e);if(!E(","))break}if(t.length>0)return new i.Value(t)},important:function(){if(s.charAt(o)==="!")return E(/^! *important/)},sub:function(){var e;if(E("(")&&(e=E(this.expression))&&E(")"))return e},multiplication:function(){var e,t,n,r;if(e=E(this.operand)){while(!N(/^\/[*\/]/)&&(n=E("/")||E("*"))&&(t=E(this.operand)))r=new i.Operation(n,[r||e,t]);return r||e}},addition:function(){var e,t,n,r;if(e=E(this.multiplication)){while((n=E(/^[-+]\s+/)||!w(s.charAt(o-1))&&(E("+")||E("-")))&&(t=E(this.multiplication)))r=new i.Operation(n,[r||e,t]);return r||e}},conditions:function(){var e,t,n=o,r;if(e=E(this.condition)){while(E(",")&&(t=E(this.condition)))r=new i.Condition("or",r||e,t,n);return r||e}},condition:function(){var e,t,n,r,s=o,u=!1;E(/^not/)&&(u=!0),x("(");if(e=E(this.addition)||E(this.entities.keyword)||E(this.entities.quoted))return(r=E(/^(?:>=|=<|[<=>])/))?(t=E(this.addition)||E(this.entities.keyword)||E(this.entities.quoted))?n=new i.Condition(r,e,t,s,u):T("expected expression"):n=new i.Condition("=",e,new i.Keyword("true"),s,u),x(")"),E(/^and/)?new i.Condition("and",n,E(this.condition)):n},operand:function(){var e,t=s.charAt(o+1);s.charAt(o)==="-"&&(t==="@"||t==="(")&&(e=E("-"));var n=E(this.sub)||E(this.entities.dimension)||E(this.entities.color)||E(this.entities.variable)||E(this.entities.call);return e?new i.Operation("*",[new i.Dimension(-1),n]):n},expression:function(){var e,t,n=[],r;while(e=E(this.addition)||E(this.entity))n.push(e);if(n.length>0)return new i.Expression(n)},property:function(){var e;if(e=E(/^(\*?-?[_a-z0-9-]+)\s*:/))return e[1]}}}};if(r.mode==="browser"||r.mode==="rhino")r.Parser.importer=function(e,t,n,r){!/^([a-z-]+:)?\//.test(e)&&t.length>0&&(e=t[0]+e),w({href:e,title:e,type:r.mime,contents:r.contents,files:r.files,rootpath:r.rootpath,entryPath:r.entryPath,relativeUrls:r.relativeUrls},function(e,i,s,o,u,a){e&&typeof r.errback=="function"?r.errback.call(null,a,t,n,r):n.call(null,e,i,a)},!0)};(function(e){function t(t){return e.functions.hsla(t.h,t.s,t.l,t.a)}function n(t,n){return t instanceof e.Dimension&&t.unit=="%"?parseFloat(t.value*n/100):r(t)}function r(t){if(t instanceof e.Dimension)return parseFloat(t.unit=="%"?t.value/100:t.value);if(typeof t=="number")return t;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function i(e){return Math.min(1,Math.max(0,e))}e.functions={rgb:function(e,t,n){return this.rgba(e,t,n,1)},rgba:function(t,i,s,o){var u=[t,i,s].map(function(e){return n(e,256)});return o=r(o),new e.Color(u,o)},hsl:function(e,t,n){return this.hsla(e,t,n,1)},hsla:function(e,t,n,i){function u(e){return e=e<0?e+1:e>1?e-1:e,e*6<1?o+(s-o)*e*6:e*2<1?s:e*3<2?o+(s-o)*(2/3-e)*6:o}e=r(e)%360/360,t=r(t),n=r(n),i=r(i);var s=n<=.5?n*(t+1):n+t-n*t,o=n*2-s;return this.rgba(u(e+1/3)*255,u(e)*255,u(e-1/3)*255,i)},hsv:function(e,t,n){return this.hsva(e,t,n,1)},hsva:function(e,t,n,i){e=r(e)%360/360*360,t=r(t),n=r(n),i=r(i);var s,o;s=Math.floor(e/60%6),o=e/60-s;var u=[n,n*(1-t),n*(1-o*t),n*(1-(1-o)*t)],a=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]];return this.rgba(u[a[s][0]]*255,u[a[s][1]]*255,u[a[s][2]]*255,i)},hue:function(t){return new e.Dimension(Math.round(t.toHSL().h))},saturation:function(t){return new e.Dimension(Math.round(t.toHSL().s*100),"%")},lightness:function(t){return new e.Dimension(Math.round(t.toHSL().l*100),"%")},red:function(t){return new e.Dimension(t.rgb[0])},green:function(t){return new e.Dimension(t.rgb[1])},blue:function(t){return new e.Dimension(t.rgb[2])},alpha:function(t){return new e.Dimension(t.toHSL().a)},luma:function(t){return new e.Dimension(Math.round((.2126*(t.rgb[0]/255)+.7152*(t.rgb[1]/255)+.0722*(t.rgb[2]/255))*t.alpha*100),"%")},saturate:function(e,n){var r=e.toHSL();return r.s+=n.value/100,r.s=i(r.s),t(r)},desaturate:function(e,n){var r=e.toHSL();return r.s-=n.value/100,r.s=i(r.s),t(r)},lighten:function(e,n){var r=e.toHSL();return r.l+=n.value/100,r.l=i(r.l),t(r)},darken:function(e,n){var r=e.toHSL();return r.l-=n.value/100,r.l=i(r.l),t(r)},fadein:function(e,n){var r=e.toHSL();return r.a+=n.value/100,r.a=i(r.a),t(r)},fadeout:function(e,n){var r=e.toHSL();return r.a-=n.value/100,r.a=i(r.a),t(r)},fade:function(e,n){var r=e.toHSL();return r.a=n.value/100,r.a=i(r.a),t(r)},spin:function(e,n){var r=e.toHSL(),i=(r.h+n.value)%360;return r.h=i<0?360+i:i,t(r)},mix:function(t,n,r){r||(r=new e.Dimension(50));var i=r.value/100,s=i*2-1,o=t.toHSL().a-n.toHSL().a,u=((s*o==-1?s:(s+o)/(1+s*o))+1)/2,a=1-u,f=[t.rgb[0]*u+n.rgb[0]*a,t.rgb[1]*u+n.rgb[1]*a,t.rgb[2]*u+n.rgb[2]*a],l=t.alpha*i+n.alpha*(1-i);return new e.Color(f,l)},greyscale:function(t){return this.desaturate(t,new e.Dimension(100))},contrast:function(e,t,n,r){return e.rgb?(typeof n=="undefined"&&(n=this.rgba(255,255,255,1)),typeof t=="undefined"&&(t=this.rgba(0,0,0,1)),typeof r=="undefined"?r=.43:r=r.value,(.2126*(e.rgb[0]/255)+.7152*(e.rgb[1]/255)+.0722*(e.rgb[2]/255))*e.alpha255?255:e<0?0:e).toString(16),e.length===1?"0"+e:e}).join("")},operate:function(t,n){var r=[];n instanceof e.Color||(n=n.toColor());for(var i=0;i<3;i++)r[i]=e.operate(t,this.rgb[i],n.rgb[i]);return new e.Color(r,this.alpha+n.alpha)},toHSL:function(){var e=this.rgb[0]/255,t=this.rgb[1]/255,n=this.rgb[2]/255,r=this.alpha,i=Math.max(e,t,n),s=Math.min(e,t,n),o,u,a=(i+s)/2,f=i-s;if(i===s)o=u=0;else{u=a>.5?f/(2-i-s):f/(i+s);switch(i){case e:o=(t-n)/f+(t255?255:e<0?0:e).toString(16),e.length===1?"0"+e:e}).join("")},compare:function(e){return e.rgb?e.rgb[0]===this.rgb[0]&&e.rgb[1]===this.rgb[1]&&e.rgb[2]===this.rgb[2]&&e.alpha===this.alpha?0:-1:-1}}}(n("../tree")),function(e){e.Comment=function(e,t){this.value=e,this.silent=!!t},e.Comment.prototype={toCSS:function(e){return e.compress?"":this.value},eval:function(){return this}}}(n("../tree")),function(e){e.Condition=function(e,t,n,r,i){this.op=e.trim(),this.lvalue=t,this.rvalue=n,this.index=r,this.negate=i},e.Condition.prototype.eval=function(e){var t=this.lvalue.eval(e),n=this.rvalue.eval(e),r=this.index,i,i=function(e){switch(e){case"and":return t&&n;case"or":return t||n;default:if(t.compare)i=t.compare(n);else{if(!n.compare)throw{type:"Type",message:"Unable to perform comparison",index:r};i=n.compare(t)}switch(i){case-1:return e==="<"||e==="=<";case 0:return e==="="||e===">="||e==="=<";case 1:return e===">"||e===">="}}}(this.op);return this.negate?!i:i}}(n("../tree")),function(e){e.Dimension=function(e,t){this.value=parseFloat(e),this.unit=t||null},e.Dimension.prototype={eval:function(){return this},toColor:function(){return new e.Color([this.value,this.value,this.value])},toCSS:function(){var e=this.value+this.unit;return e},operate:function(t,n){return new e.Dimension(e.operate(t,this.value,n.value),this.unit||n.unit)},compare:function(t){return t instanceof e.Dimension?t.value>this.value?-1:t.value":e.compress?">":" > ","|":e.compress?"|":" | "}[this.value]}}(n("../tree")),function(e){e.Expression=function(e){this.value=e},e.Expression.prototype={eval:function(t){return this.value.length>1?new e.Expression(this.value.map(function(e){return e.eval(t)})):this.value.length===1?this.value[0].eval(t):this},toCSS:function(e){return this.value.map(function(t){return t.toCSS?t.toCSS(e):""}).join(" ")}}}(n("../tree")),function(e){e.Import=function(t,n,r,i,s,o){var u=this;this.once=i,this.index=s,this._path=t,this.features=r&&new e.Value(r),this.rootpath=o,t instanceof e.Quoted?this.path=/(\.[a-z]*$)|([\?;].*)$/.test(t.value)?t.value:t.value+".less":this.path=t.value.value||t.value,this.css=/css([\?;].*)?$/.test(this.path),this.css||n.push(this.path,function(t,n,r){t&&(t.index=s),r&&u.once&&(u.skip=r),u.root=n||new e.Ruleset([],[])})},e.Import.prototype={toCSS:function(e){var t=this.features?" "+this.features.toCSS(e):"";return this.css?(typeof this._path.value=="string"&&!/^(?:[a-z-]+:|\/)/.test(this._path.value)&&(this._path.value=this.rootpath+this._path.value),"@import "+this._path.toCSS()+t+";\n"):""},eval:function(t){var n,r=this.features&&this.features.eval(t);return this.skip?[]:this.css?this:(n=new e.Ruleset([],this.root.rules.slice(0)),n.evalImports(t),this.features?new e.Media(n.rules,this.features.value):n.rules)}}}(n("../tree")),function(e){e.JavaScript=function(e,t,n){this.escaped=n,this.expression=e,this.index=t},e.JavaScript.prototype={eval:function(t){var n,r=this,i={},s=this.expression.replace(/@\{([\w-]+)\}/g,function(n,i){return e.jsify((new e.Variable("@"+i,r.index)).eval(t))});try{s=new Function("return ("+s+")")}catch(o){throw{message:"JavaScript evaluation error: `"+s+"`",index:this.index}}for(var u in t.frames[0].variables())i[u.slice(1)]={value:t.frames[0].variables()[u].value,toJS:function(){return this.value.eval(t).toCSS()}};try{n=s.call(i)}catch(o){throw{message:"JavaScript evaluation error: '"+o.name+": "+o.message+"'",index:this.index}}return typeof n=="string"?new e.Quoted('"'+n+'"',n,this.escaped,this.index):Array.isArray(n)?new e.Anonymous(n.join(", ")):new e.Anonymous(n)}}}(n("../tree")),function(e){e.Keyword=function(e){this.value=e},e.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value},compare:function(t){return t instanceof e.Keyword?t.value===this.value?0:1:-1}},e.True=new e.Keyword("true"),e.False=new e.Keyword("false")}(n("../tree")),function(e){e.Media=function(t,n){var r=this.emptySelectors();this.features=new e.Value(n),this.ruleset=new e.Ruleset(r,t),this.ruleset.allowImports=!0},e.Media.prototype={toCSS:function(e,t){var n=this.features.toCSS(t);return this.ruleset.root=e.length===0||e[0].multiMedia,"@media "+n+(t.compress?"{":" {\n ")+this.ruleset.toCSS(e,t).trim().replace(/\n/g,"\n ")+(t.compress?"}":"\n}\n")},eval:function(t){t.mediaBlocks||(t.mediaBlocks=[],t.mediaPath=[]);var n=new e.Media([],[]);return this.debugInfo&&(this.ruleset.debugInfo=this.debugInfo,n.debugInfo=this.debugInfo),n.features=this.features.eval(t),t.mediaPath.push(n),t.mediaBlocks.push(n),t.frames.unshift(this.ruleset),n.ruleset=this.ruleset.eval(t),t.frames.shift(),t.mediaPath.pop(),t.mediaPath.length===0?n.evalTop(t):n.evalNested(t)},variable:function(t){return e.Ruleset.prototype.variable.call(this.ruleset,t)},find:function(){return e.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return e.Ruleset.prototype.rulesets.apply(this.ruleset)},emptySelectors:function(){var t=new e.Element("","&",0);return[new e.Selector([t])]},evalTop:function(t){var n=this;if(t.mediaBlocks.length>1){var r=this.emptySelectors();n=new e.Ruleset(r,t.mediaBlocks),n.multiMedia=!0}return delete t.mediaBlocks,delete t.mediaPath,n},evalNested:function(t){var n,r,i=t.mediaPath.concat([this]);for(n=0;n0;n--)t.splice(n,0,new e.Anonymous("and"));return new e.Expression(t)})),new e.Ruleset([],[])},permute:function(e){if(e.length===0)return[];if(e.length===1)return e[0];var t=[],n=this.permute(e.slice(1));for(var r=0;r0){c=!0;for(a=0;athis.params.length)return!1;if(this.required>0&&n>this.params.length)return!1}r=Math.min(n,this.arity);for(var s=0;si.selectors[o].elements.length?Array.prototype.push.apply(r,i.find(new e.Selector(t.elements.slice(1)),n)):r.push(i);break}}),this._lookups[o]=r)},toCSS:function(t,n){var r=[],i=[],s=[],o=[],u=[],a,f,l;this.root||this.joinSelectors(u,t,this.selectors);for(var c=0;c0){f=e.debugInfo(n,this),a=u.map(function(e){return e.map(function(e){return e.toCSS(n)}).join("").trim()}).join(n.compress?",":",\n");for(var c=i.length-1;c>=0;c--)s.indexOf(i[c])===-1&&s.unshift(i[c]);i=s,r.push(f+a+(n.compress?"{":" {\n ")+i.join(n.compress?"":"\n ")+(n.compress?"}":"\n}\n"))}return r.push(o),r.join("")+(n.compress?"\n":"")},joinSelectors:function(e,t,n){for(var r=0;r0)for(i=0;i0&&this.mergeElementsOnToSelectors(g,a);for(s=0;s0&&(l[0].elements=l[0].elements.slice(0),l[0].elements.push(new e.Element(f.combinator,"",0))),y.push(l);else for(o=0;o0?(h=l.slice(0),m=h.pop(),d=new e.Selector(m.elements.slice(0)),v=!1):d=new e.Selector([]),c.length>1&&(p=p.concat(c.slice(1))),c.length>0&&(v=!1,d.elements.push(new e.Element(f.combinator,c[0].elements[0].value,0)),d.elements=d.elements.concat(c[0].elements.slice(1))),v||h.push(d),h=h.concat(p),y.push(h)}a=y,g=[]}}g.length>0&&this.mergeElementsOnToSelectors(g,a);for(i=0;i0?i[i.length-1]=new e.Selector(i[i.length-1].elements.concat(t)):i.push(new e.Selector(t))}}}(n("../tree")),function(e){e.Selector=function(e){this.elements=e},e.Selector.prototype.match=function(e){var t=this.elements,n=t.length,r,i,s,o;r=e.elements.slice(e.elements.length&&e.elements[0].value==="&"?1:0),i=r.length,s=Math.min(n,i);if(i===0||n1?"["+e.value.map(function(e){return e.toCSS(!1)}).join(", ")+"]":e.toCSS(!1)}}(n("./tree"));var o=/^(file|chrome(-extension)?|resource|qrc|app):/.test(location.protocol);r.env=r.env||(location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"||location.port.length>0||o?"development":"production"),r.async=r.async||!1,r.fileAsync=r.fileAsync||!1,r.poll=r.poll||(o?1e3:1500);if(r.functions)for(var u in r.functions)r.tree.functions[u]=r.functions[u];var a=/!dumpLineNumbers:(comments|mediaquery|all)/.exec(location.hash);a&&(r.dumpLineNumbers=a[1]),r.watch=function(){return r.watchMode||(r.env="development",f()),this.watchMode=!0},r.unwatch=function(){return clearInterval(r.watchTimer),this.watchMode=!1},/!watch/.test(location.hash)&&r.watch();var l=null;if(r.env!="development")try{l=typeof e.localStorage=="undefined"?null:e.localStorage}catch(c){}var h=document.getElementsByTagName("link"),p=/^text\/(x-)?less$/;r.sheets=[];for(var d=0;d= scrollHeight - offsetBottom) ? 'bottom' :\n offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false\n\n if (this.affixed === affix) return\n if (this.unpin) this.$element.css('top', '')\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? position.top - scrollTop : null\n\n this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))\n\n if (affix == 'bottom') {\n this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })\n }\n }\n\n\n // AFFIX PLUGIN DEFINITION\n // =======================\n\n var old = $.fn.affix\n\n $.fn.affix = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.affix')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.affix.Constructor = Affix\n\n\n // AFFIX NO CONFLICT\n // =================\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n // AFFIX DATA-API\n // ==============\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n var data = $spy.data()\n\n data.offset = data.offset || {}\n\n if (data.offsetBottom) data.offset.bottom = data.offsetBottom\n if (data.offsetTop) data.offset.top = data.offsetTop\n\n $spy.affix(data)\n })\n })\n\n}(jQuery);\n","alert.js":"/* ========================================================================\n * Bootstrap: alert.js v3.0.2\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // ALERT CLASS DEFINITION\n // ======================\n\n var dismiss = '[data-dismiss=\"alert\"]'\n var Alert = function (el) {\n $(el).on('click', dismiss, this.close)\n }\n\n Alert.prototype.close = function (e) {\n var $this = $(this)\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = $(selector)\n\n if (e) e.preventDefault()\n\n if (!$parent.length) {\n $parent = $this.hasClass('alert') ? $this : $this.parent()\n }\n\n $parent.trigger(e = $.Event('close.bs.alert'))\n\n if (e.isDefaultPrevented()) return\n\n $parent.removeClass('in')\n\n function removeElement() {\n $parent.trigger('closed.bs.alert').remove()\n }\n\n $.support.transition && $parent.hasClass('fade') ?\n $parent\n .one($.support.transition.end, removeElement)\n .emulateTransitionEnd(150) :\n removeElement()\n }\n\n\n // ALERT PLUGIN DEFINITION\n // =======================\n\n var old = $.fn.alert\n\n $.fn.alert = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.alert')\n\n if (!data) $this.data('bs.alert', (data = new Alert(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n $.fn.alert.Constructor = Alert\n\n\n // ALERT NO CONFLICT\n // =================\n\n $.fn.alert.noConflict = function () {\n $.fn.alert = old\n return this\n }\n\n\n // ALERT DATA-API\n // ==============\n\n $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n","button.js":"/* ========================================================================\n * Bootstrap: button.js v3.0.2\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // BUTTON PUBLIC CLASS DEFINITION\n // ==============================\n\n var Button = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Button.DEFAULTS, options)\n }\n\n Button.DEFAULTS = {\n loadingText: 'loading...'\n }\n\n Button.prototype.setState = function (state) {\n var d = 'disabled'\n var $el = this.$element\n var val = $el.is('input') ? 'val' : 'html'\n var data = $el.data()\n\n state = state + 'Text'\n\n if (!data.resetText) $el.data('resetText', $el[val]())\n\n $el[val](data[state] || this.options[state])\n\n // push to event loop to allow forms to submit\n setTimeout(function () {\n state == 'loadingText' ?\n $el.addClass(d).attr(d, d) :\n $el.removeClass(d).removeAttr(d);\n }, 0)\n }\n\n Button.prototype.toggle = function () {\n var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n if ($parent.length) {\n var $input = this.$element.find('input')\n .prop('checked', !this.$element.hasClass('active'))\n .trigger('change')\n if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')\n }\n\n this.$element.toggleClass('active')\n }\n\n\n // BUTTON PLUGIN DEFINITION\n // ========================\n\n var old = $.fn.button\n\n $.fn.button = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.button')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n if (option == 'toggle') data.toggle()\n else if (option) data.setState(option)\n })\n }\n\n $.fn.button.Constructor = Button\n\n\n // BUTTON NO CONFLICT\n // ==================\n\n $.fn.button.noConflict = function () {\n $.fn.button = old\n return this\n }\n\n\n // BUTTON DATA-API\n // ===============\n\n $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {\n var $btn = $(e.target)\n if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n $btn.button('toggle')\n e.preventDefault()\n })\n\n}(jQuery);\n","carousel.js":"/* ========================================================================\n * Bootstrap: carousel.js v3.0.2\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // CAROUSEL CLASS DEFINITION\n // =========================\n\n var Carousel = function (element, options) {\n this.$element = $(element)\n this.$indicators = this.$element.find('.carousel-indicators')\n this.options = options\n this.paused =\n this.sliding =\n this.interval =\n this.$active =\n this.$items = null\n\n this.options.pause == 'hover' && this.$element\n .on('mouseenter', $.proxy(this.pause, this))\n .on('mouseleave', $.proxy(this.cycle, this))\n }\n\n Carousel.DEFAULTS = {\n interval: 5000\n , pause: 'hover'\n , wrap: true\n }\n\n Carousel.prototype.cycle = function (e) {\n e || (this.paused = false)\n\n this.interval && clearInterval(this.interval)\n\n this.options.interval\n && !this.paused\n && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n return this\n }\n\n Carousel.prototype.getActiveIndex = function () {\n this.$active = this.$element.find('.item.active')\n this.$items = this.$active.parent().children()\n\n return this.$items.index(this.$active)\n }\n\n Carousel.prototype.to = function (pos) {\n var that = this\n var activeIndex = this.getActiveIndex()\n\n if (pos > (this.$items.length - 1) || pos < 0) return\n\n if (this.sliding) return this.$element.one('slid', function () { that.to(pos) })\n if (activeIndex == pos) return this.pause().cycle()\n\n return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\n }\n\n Carousel.prototype.pause = function (e) {\n e || (this.paused = true)\n\n if (this.$element.find('.next, .prev').length && $.support.transition.end) {\n this.$element.trigger($.support.transition.end)\n this.cycle(true)\n }\n\n this.interval = clearInterval(this.interval)\n\n return this\n }\n\n Carousel.prototype.next = function () {\n if (this.sliding) return\n return this.slide('next')\n }\n\n Carousel.prototype.prev = function () {\n if (this.sliding) return\n return this.slide('prev')\n }\n\n Carousel.prototype.slide = function (type, next) {\n var $active = this.$element.find('.item.active')\n var $next = next || $active[type]()\n var isCycling = this.interval\n var direction = type == 'next' ? 'left' : 'right'\n var fallback = type == 'next' ? 'first' : 'last'\n var that = this\n\n if (!$next.length) {\n if (!this.options.wrap) return\n $next = this.$element.find('.item')[fallback]()\n }\n\n this.sliding = true\n\n isCycling && this.pause()\n\n var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n\n if ($next.hasClass('active')) return\n\n if (this.$indicators.length) {\n this.$indicators.find('.active').removeClass('active')\n this.$element.one('slid', function () {\n var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])\n $nextIndicator && $nextIndicator.addClass('active')\n })\n }\n\n if ($.support.transition && this.$element.hasClass('slide')) {\n this.$element.trigger(e)\n if (e.isDefaultPrevented()) return\n $next.addClass(type)\n $next[0].offsetWidth // force reflow\n $active.addClass(direction)\n $next.addClass(direction)\n $active\n .one($.support.transition.end, function () {\n $next.removeClass([type, direction].join(' ')).addClass('active')\n $active.removeClass(['active', direction].join(' '))\n that.sliding = false\n setTimeout(function () { that.$element.trigger('slid') }, 0)\n })\n .emulateTransitionEnd(600)\n } else {\n this.$element.trigger(e)\n if (e.isDefaultPrevented()) return\n $active.removeClass('active')\n $next.addClass('active')\n this.sliding = false\n this.$element.trigger('slid')\n }\n\n isCycling && this.cycle()\n\n return this\n }\n\n\n // CAROUSEL PLUGIN DEFINITION\n // ==========================\n\n var old = $.fn.carousel\n\n $.fn.carousel = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.carousel')\n var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n var action = typeof option == 'string' ? option : options.slide\n\n if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n if (typeof option == 'number') data.to(option)\n else if (action) data[action]()\n else if (options.interval) data.pause().cycle()\n })\n }\n\n $.fn.carousel.Constructor = Carousel\n\n\n // CAROUSEL NO CONFLICT\n // ====================\n\n $.fn.carousel.noConflict = function () {\n $.fn.carousel = old\n return this\n }\n\n\n // CAROUSEL DATA-API\n // =================\n\n $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\n var $this = $(this), href\n var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n var options = $.extend({}, $target.data(), $this.data())\n var slideIndex = $this.attr('data-slide-to')\n if (slideIndex) options.interval = false\n\n $target.carousel(options)\n\n if (slideIndex = $this.attr('data-slide-to')) {\n $target.data('bs.carousel').to(slideIndex)\n }\n\n e.preventDefault()\n })\n\n $(window).on('load', function () {\n $('[data-ride=\"carousel\"]').each(function () {\n var $carousel = $(this)\n $carousel.carousel($carousel.data())\n })\n })\n\n}(jQuery);\n","collapse.js":"/* ========================================================================\n * Bootstrap: collapse.js v3.0.2\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // COLLAPSE PUBLIC CLASS DEFINITION\n // ================================\n\n var Collapse = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Collapse.DEFAULTS, options)\n this.transitioning = null\n\n if (this.options.parent) this.$parent = $(this.options.parent)\n if (this.options.toggle) this.toggle()\n }\n\n Collapse.DEFAULTS = {\n toggle: true\n }\n\n Collapse.prototype.dimension = function () {\n var hasWidth = this.$element.hasClass('width')\n return hasWidth ? 'width' : 'height'\n }\n\n Collapse.prototype.show = function () {\n if (this.transitioning || this.$element.hasClass('in')) return\n\n var startEvent = $.Event('show.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n var actives = this.$parent && this.$parent.find('> .panel > .in')\n\n if (actives && actives.length) {\n var hasData = actives.data('bs.collapse')\n if (hasData && hasData.transitioning) return\n actives.collapse('hide')\n hasData || actives.data('bs.collapse', null)\n }\n\n var dimension = this.dimension()\n\n this.$element\n .removeClass('collapse')\n .addClass('collapsing')\n [dimension](0)\n\n this.transitioning = 1\n\n var complete = function () {\n this.$element\n .removeClass('collapsing')\n .addClass('in')\n [dimension]('auto')\n this.transitioning = 0\n this.$element.trigger('shown.bs.collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n this.$element\n .one($.support.transition.end, $.proxy(complete, this))\n .emulateTransitionEnd(350)\n [dimension](this.$element[0][scrollSize])\n }\n\n Collapse.prototype.hide = function () {\n if (this.transitioning || !this.$element.hasClass('in')) return\n\n var startEvent = $.Event('hide.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n var dimension = this.dimension()\n\n this.$element\n [dimension](this.$element[dimension]())\n [0].offsetHeight\n\n this.$element\n .addClass('collapsing')\n .removeClass('collapse')\n .removeClass('in')\n\n this.transitioning = 1\n\n var complete = function () {\n this.transitioning = 0\n this.$element\n .trigger('hidden.bs.collapse')\n .removeClass('collapsing')\n .addClass('collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n this.$element\n [dimension](0)\n .one($.support.transition.end, $.proxy(complete, this))\n .emulateTransitionEnd(350)\n }\n\n Collapse.prototype.toggle = function () {\n this[this.$element.hasClass('in') ? 'hide' : 'show']()\n }\n\n\n // COLLAPSE PLUGIN DEFINITION\n // ==========================\n\n var old = $.fn.collapse\n\n $.fn.collapse = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.collapse')\n var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.collapse.Constructor = Collapse\n\n\n // COLLAPSE NO CONFLICT\n // ====================\n\n $.fn.collapse.noConflict = function () {\n $.fn.collapse = old\n return this\n }\n\n\n // COLLAPSE DATA-API\n // =================\n\n $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {\n var $this = $(this), href\n var target = $this.attr('data-target')\n || e.preventDefault()\n || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n var $target = $(target)\n var data = $target.data('bs.collapse')\n var option = data ? 'toggle' : $this.data()\n var parent = $this.attr('data-parent')\n var $parent = parent && $(parent)\n\n if (!data || !data.transitioning) {\n if ($parent) $parent.find('[data-toggle=collapse][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\n $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n }\n\n $target.collapse(option)\n })\n\n}(jQuery);\n","dropdown.js":"/* ========================================================================\n * Bootstrap: dropdown.js v3.0.2\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=dropdown]'\n var Dropdown = function (element) {\n var $el = $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we we use a backdrop because click events don't delegate\n $('
    ').insertAfter($(this)).on('click', clearMenus)\n }\n\n $parent.trigger(e = $.Event('show.bs.dropdown'))\n\n if (e.isDefaultPrevented()) return\n\n $parent\n .toggleClass('open')\n .trigger('shown.bs.dropdown')\n\n $this.focus()\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27)/.test(e.keyCode)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive || (isActive && e.keyCode == 27)) {\n if (e.which == 27) $parent.find(toggle).focus()\n return $this.click()\n }\n\n var $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n if (!$items.length) return\n\n var index = $items.index($items.filter(':focus'))\n\n if (e.keyCode == 38 && index > 0) index-- // up\n if (e.keyCode == 40 && index < $items.length - 1) index++ // down\n if (!~index) index=0\n\n $items.eq(index).focus()\n }\n\n function clearMenus() {\n $(backdrop).remove()\n $(toggle).each(function (e) {\n var $parent = getParent($(this))\n if (!$parent.hasClass('open')) return\n $parent.trigger(e = $.Event('hide.bs.dropdown'))\n if (e.isDefaultPrevented()) return\n $parent.removeClass('open').trigger('hidden.bs.dropdown')\n })\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n }\n\n var $parent = selector && $(selector)\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('dropdown')\n\n if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(jQuery);\n","modal.js":"/* ========================================================================\n * Bootstrap: modal.js v3.0.2\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // MODAL CLASS DEFINITION\n // ======================\n\n var Modal = function (element, options) {\n this.options = options\n this.$element = $(element)\n this.$backdrop =\n this.isShown = null\n\n if (this.options.remote) this.$element.load(this.options.remote)\n }\n\n Modal.DEFAULTS = {\n backdrop: true\n , keyboard: true\n , show: true\n }\n\n Modal.prototype.toggle = function (_relatedTarget) {\n return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)\n }\n\n Modal.prototype.show = function (_relatedTarget) {\n var that = this\n var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.escape()\n\n this.$element.on('click.dismiss.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n this.backdrop(function () {\n var transition = $.support.transition && that.$element.hasClass('fade')\n\n if (!that.$element.parent().length) {\n that.$element.appendTo(document.body) // don't move modals dom position\n }\n\n that.$element.show()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element\n .addClass('in')\n .attr('aria-hidden', false)\n\n that.enforceFocus()\n\n var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n transition ?\n that.$element.find('.modal-dialog') // wait for modal to slide in\n .one($.support.transition.end, function () {\n that.$element.focus().trigger(e)\n })\n .emulateTransitionEnd(300) :\n that.$element.focus().trigger(e)\n })\n }\n\n Modal.prototype.hide = function (e) {\n if (e) e.preventDefault()\n\n e = $.Event('hide.bs.modal')\n\n this.$element.trigger(e)\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n\n $(document).off('focusin.bs.modal')\n\n this.$element\n .removeClass('in')\n .attr('aria-hidden', true)\n .off('click.dismiss.modal')\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.$element\n .one($.support.transition.end, $.proxy(this.hideModal, this))\n .emulateTransitionEnd(300) :\n this.hideModal()\n }\n\n Modal.prototype.enforceFocus = function () {\n $(document)\n .off('focusin.bs.modal') // guard against infinite focus loop\n .on('focusin.bs.modal', $.proxy(function (e) {\n if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n this.$element.focus()\n }\n }, this))\n }\n\n Modal.prototype.escape = function () {\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\n e.which == 27 && this.hide()\n }, this))\n } else if (!this.isShown) {\n this.$element.off('keyup.dismiss.bs.modal')\n }\n }\n\n Modal.prototype.hideModal = function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.removeBackdrop()\n that.$element.trigger('hidden.bs.modal')\n })\n }\n\n Modal.prototype.removeBackdrop = function () {\n this.$backdrop && this.$backdrop.remove()\n this.$backdrop = null\n }\n\n Modal.prototype.backdrop = function (callback) {\n var that = this\n var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n if (this.isShown && this.options.backdrop) {\n var doAnimate = $.support.transition && animate\n\n this.$backdrop = $('
    ')\n .appendTo(document.body)\n\n this.$element.on('click.dismiss.modal', $.proxy(function (e) {\n if (e.target !== e.currentTarget) return\n this.options.backdrop == 'static'\n ? this.$element[0].focus.call(this.$element[0])\n : this.hide.call(this)\n }, this))\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n if (!callback) return\n\n doAnimate ?\n this.$backdrop\n .one($.support.transition.end, callback)\n .emulateTransitionEnd(150) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n $.support.transition && this.$element.hasClass('fade')?\n this.$backdrop\n .one($.support.transition.end, callback)\n .emulateTransitionEnd(150) :\n callback()\n\n } else if (callback) {\n callback()\n }\n }\n\n\n // MODAL PLUGIN DEFINITION\n // =======================\n\n var old = $.fn.modal\n\n $.fn.modal = function (option, _relatedTarget) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.modal')\n var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n if (typeof option == 'string') data[option](_relatedTarget)\n else if (options.show) data.show(_relatedTarget)\n })\n }\n\n $.fn.modal.Constructor = Modal\n\n\n // MODAL NO CONFLICT\n // =================\n\n $.fn.modal.noConflict = function () {\n $.fn.modal = old\n return this\n }\n\n\n // MODAL DATA-API\n // ==============\n\n $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n var $this = $(this)\n var href = $this.attr('href')\n var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n var option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n e.preventDefault()\n\n $target\n .modal(option, this)\n .one('hide', function () {\n $this.is(':visible') && $this.focus()\n })\n })\n\n $(document)\n .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })\n .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })\n\n}(jQuery);\n","popover.js":"/* ========================================================================\n * Bootstrap: popover.js v3.0.2\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right'\n , trigger: 'click'\n , content: ''\n , template: '

    '\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return this.$arrow = this.$arrow || this.tip().find('.arrow')\n }\n\n Popover.prototype.tip = function () {\n if (!this.$tip) this.$tip = $(this.options.template)\n return this.$tip\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n var old = $.fn.popover\n\n $.fn.popover = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n}(jQuery);\n","scrollspy.js":"/* ========================================================================\n * Bootstrap: scrollspy.js v3.0.2\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // SCROLLSPY CLASS DEFINITION\n // ==========================\n\n function ScrollSpy(element, options) {\n var href\n var process = $.proxy(this.process, this)\n\n this.$element = $(element).is('body') ? $(window) : $(element)\n this.$body = $('body')\n this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)\n this.options = $.extend({}, ScrollSpy.DEFAULTS, options)\n this.selector = (this.options.target\n || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n || '') + ' .nav li > a'\n this.offsets = $([])\n this.targets = $([])\n this.activeTarget = null\n\n this.refresh()\n this.process()\n }\n\n ScrollSpy.DEFAULTS = {\n offset: 10\n }\n\n ScrollSpy.prototype.refresh = function () {\n var offsetMethod = this.$element[0] == window ? 'offset' : 'position'\n\n this.offsets = $([])\n this.targets = $([])\n\n var self = this\n var $targets = this.$body\n .find(this.selector)\n .map(function () {\n var $el = $(this)\n var href = $el.data('target') || $el.attr('href')\n var $href = /^#\\w/.test(href) && $(href)\n\n return ($href\n && $href.length\n && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null\n })\n .sort(function (a, b) { return a[0] - b[0] })\n .each(function () {\n self.offsets.push(this[0])\n self.targets.push(this[1])\n })\n }\n\n ScrollSpy.prototype.process = function () {\n var scrollTop = this.$scrollElement.scrollTop() + this.options.offset\n var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight\n var maxScroll = scrollHeight - this.$scrollElement.height()\n var offsets = this.offsets\n var targets = this.targets\n var activeTarget = this.activeTarget\n var i\n\n if (scrollTop >= maxScroll) {\n return activeTarget != (i = targets.last()[0]) && this.activate(i)\n }\n\n for (i = offsets.length; i--;) {\n activeTarget != targets[i]\n && scrollTop >= offsets[i]\n && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n && this.activate( targets[i] )\n }\n }\n\n ScrollSpy.prototype.activate = function (target) {\n this.activeTarget = target\n\n $(this.selector)\n .parents('.active')\n .removeClass('active')\n\n var selector = this.selector\n + '[data-target=\"' + target + '\"],'\n + this.selector + '[href=\"' + target + '\"]'\n\n var active = $(selector)\n .parents('li')\n .addClass('active')\n\n if (active.parent('.dropdown-menu').length) {\n active = active\n .closest('li.dropdown')\n .addClass('active')\n }\n\n active.trigger('activate')\n }\n\n\n // SCROLLSPY PLUGIN DEFINITION\n // ===========================\n\n var old = $.fn.scrollspy\n\n $.fn.scrollspy = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.scrollspy')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.scrollspy.Constructor = ScrollSpy\n\n\n // SCROLLSPY NO CONFLICT\n // =====================\n\n $.fn.scrollspy.noConflict = function () {\n $.fn.scrollspy = old\n return this\n }\n\n\n // SCROLLSPY DATA-API\n // ==================\n\n $(window).on('load', function () {\n $('[data-spy=\"scroll\"]').each(function () {\n var $spy = $(this)\n $spy.scrollspy($spy.data())\n })\n })\n\n}(jQuery);\n","tab.js":"/* ========================================================================\n * Bootstrap: tab.js v3.0.2\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // TAB CLASS DEFINITION\n // ====================\n\n var Tab = function (element) {\n this.element = $(element)\n }\n\n Tab.prototype.show = function () {\n var $this = this.element\n var $ul = $this.closest('ul:not(.dropdown-menu)')\n var selector = $this.data('target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n }\n\n if ($this.parent('li').hasClass('active')) return\n\n var previous = $ul.find('.active:last a')[0]\n var e = $.Event('show.bs.tab', {\n relatedTarget: previous\n })\n\n $this.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n var $target = $(selector)\n\n this.activate($this.parent('li'), $ul)\n this.activate($target, $target.parent(), function () {\n $this.trigger({\n type: 'shown.bs.tab'\n , relatedTarget: previous\n })\n })\n }\n\n Tab.prototype.activate = function (element, container, callback) {\n var $active = container.find('> .active')\n var transition = callback\n && $.support.transition\n && $active.hasClass('fade')\n\n function next() {\n $active\n .removeClass('active')\n .find('> .dropdown-menu > .active')\n .removeClass('active')\n\n element.addClass('active')\n\n if (transition) {\n element[0].offsetWidth // reflow for transition\n element.addClass('in')\n } else {\n element.removeClass('fade')\n }\n\n if (element.parent('.dropdown-menu')) {\n element.closest('li.dropdown').addClass('active')\n }\n\n callback && callback()\n }\n\n transition ?\n $active\n .one($.support.transition.end, next)\n .emulateTransitionEnd(150) :\n next()\n\n $active.removeClass('in')\n }\n\n\n // TAB PLUGIN DEFINITION\n // =====================\n\n var old = $.fn.tab\n\n $.fn.tab = function ( option ) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tab')\n\n if (!data) $this.data('bs.tab', (data = new Tab(this)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.tab.Constructor = Tab\n\n\n // TAB NO CONFLICT\n // ===============\n\n $.fn.tab.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n\n // TAB DATA-API\n // ============\n\n $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n e.preventDefault()\n $(this).tab('show')\n })\n\n}(jQuery);\n","tooltip.js":"/* ========================================================================\n * Bootstrap: tooltip.js v3.0.2\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type =\n this.options =\n this.enabled =\n this.timeout =\n this.hoverState =\n this.$element = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.DEFAULTS = {\n animation: true\n , placement: 'top'\n , selector: false\n , template: '
    '\n , trigger: 'hover focus'\n , title: ''\n , delay: 0\n , html: false\n , container: false\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay\n , hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.'+ this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n var $tip = this.tip()\n\n this.setContent()\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var $parent = this.$element.parent()\n\n var orgPlacement = placement\n var docScroll = document.documentElement.scrollTop || document.body.scrollTop\n var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()\n var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()\n var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left\n\n placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :\n placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :\n placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n this.$element.trigger('shown.bs.' + this.type)\n }\n }\n\n Tooltip.prototype.applyPlacement = function(offset, placement) {\n var replace\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top = offset.top + marginTop\n offset.left = offset.left + marginLeft\n\n $tip\n .offset(offset)\n .addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n replace = true\n offset.top = offset.top + height - actualHeight\n }\n\n if (/bottom|top/.test(placement)) {\n var delta = 0\n\n if (offset.left < 0) {\n delta = offset.left * -2\n offset.left = 0\n\n $tip.offset(offset)\n\n actualWidth = $tip[0].offsetWidth\n actualHeight = $tip[0].offsetHeight\n }\n\n this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n } else {\n this.replaceArrow(actualHeight - height, actualHeight, 'top')\n }\n\n if (replace) $tip.offset(offset)\n }\n\n Tooltip.prototype.replaceArrow = function(delta, dimension, position) {\n this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function () {\n var that = this\n var $tip = this.tip()\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one($.support.transition.end, complete)\n .emulateTransitionEnd(150) :\n complete()\n\n this.$element.trigger('hidden.bs.' + this.type)\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function () {\n var el = this.$element[0]\n return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n width: el.offsetWidth\n , height: el.offsetHeight\n }, this.$element.offset())\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.tip = function () {\n return this.$tip = this.$tip || $(this.options.template)\n }\n\n Tooltip.prototype.arrow = function () {\n return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')\n }\n\n Tooltip.prototype.validate = function () {\n if (!this.$element[0].parentNode) {\n this.hide()\n this.$element = null\n this.options = null\n }\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n\n Tooltip.prototype.destroy = function () {\n this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n","transition.js":"/* ========================================================================\n * Bootstrap: transition.js v3.0.2\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n 'WebkitTransition' : 'webkitTransitionEnd'\n , 'MozTransition' : 'transitionend'\n , 'OTransition' : 'oTransitionEnd otransitionend'\n , 'transition' : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n }\n\n // http://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false, $el = this\n $(this).one($.support.transition.end, function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n })\n\n}(jQuery);\n"} +var __less = {"alerts.less":"//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","badges.less":"//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n}\n\n// Hover state, but only for links\na.badge {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n}\n\n// Quick fix for labels/badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n","bootstrap.less":"// Core variables and mixins\n@import \"variables.less\";\n@import \"mixins.less\";\n\n// Reset\n@import \"normalize.less\";\n@import \"print.less\";\n\n// Core CSS\n@import \"scaffolding.less\";\n@import \"type.less\";\n@import \"code.less\";\n@import \"grid.less\";\n@import \"tables.less\";\n@import \"forms.less\";\n@import \"buttons.less\";\n\n// Components\n@import \"component-animations.less\";\n@import \"glyphicons.less\";\n@import \"dropdowns.less\";\n@import \"button-groups.less\";\n@import \"input-groups.less\";\n@import \"navs.less\";\n@import \"navbar.less\";\n@import \"breadcrumbs.less\";\n@import \"pagination.less\";\n@import \"pager.less\";\n@import \"labels.less\";\n@import \"badges.less\";\n@import \"jumbotron.less\";\n@import \"thumbnails.less\";\n@import \"alerts.less\";\n@import \"progress-bars.less\";\n@import \"media.less\";\n@import \"list-group.less\";\n@import \"panels.less\";\n@import \"wells.less\";\n@import \"close.less\";\n\n// Components w/ JavaScript\n@import \"modals.less\";\n@import \"tooltip.less\";\n@import \"popovers.less\";\n@import \"carousel.less\";\n\n// Utility classes\n@import \"utilities.less\";\n@import \"responsive-utilities.less\";\n","breadcrumbs.less":"//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n > li {\n display: inline-block;\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","button-groups.less":"//\n// Button groups\n// --------------------------------------------------\n\n// Button carets\n//\n// Match the button text color to the arrow/caret for indicating dropdown-ness.\n\n.caret {\n .btn-default & {\n border-top-color: @btn-default-color;\n }\n .btn-primary &,\n .btn-success &,\n .btn-warning &,\n .btn-danger &,\n .btn-info & {\n border-top-color: #fff;\n }\n}\n.dropup {\n .btn-default .caret {\n border-bottom-color: @btn-default-color;\n }\n .btn-primary,\n .btn-success,\n .btn-warning,\n .btn-danger,\n .btn-info {\n .caret {\n border-bottom-color: #fff;\n }\n }\n}\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n &:focus {\n // Remove focus outline when dropdown JS adds it after closing the menu\n outline: none;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n .clearfix();\n\n .btn-group {\n float: left;\n }\n // Space out series of button groups\n > .btn,\n > .btn-group {\n + .btn,\n + .btn-group {\n margin-left: 5px;\n }\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { .btn-xs(); }\n.btn-group-sm > .btn { .btn-sm(); }\n.btn-group-lg > .btn { .btn-lg(); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n .clearfix();\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n .btn {\n float: none;\n display: table-cell;\n width: 1%;\n }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n display: none;\n}\n","buttons.less":"//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n// Core styles\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &:focus {\n .tab-focus();\n }\n\n &:hover,\n &:focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n cursor: pointer;\n border-radius: 0;\n\n &,\n &:active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm,\n.btn-xs {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n padding: 1px 5px;\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n padding-left: 0;\n padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","carousel.less":"//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n .img-responsive();\n line-height: 1;\n }\n }\n\n > .active,\n > .next,\n > .prev { display: block; }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n margin-left: -10px;\n font-family: serif;\n }\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicons-chevron-left,\n .glyphicons-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n margin-left: -15px;\n font-size: 30px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","close.less":"//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","code.less":"//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n white-space: nowrap;\n border-radius: @border-radius-base;\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","component-animations.less":"//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n &.in {\n display: block;\n }\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition(height .35s ease);\n}\n","dropdowns.less":"//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base solid @dropdown-caret-color;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once fixed,\n // we can just straight up remove this.\n border-bottom: 0 dotted;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: not-allowed;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: @zindex-dropdown - 10;\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once this\n // gets fixed, restore `border-top: 0;`.\n border-top: 0 dotted;\n border-bottom: @caret-width-base solid @dropdown-caret-color;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .pull-right > .dropdown-menu();\n }\n }\n}\n\n","forms.less":"//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; /* IE8-9 */\n line-height: normal;\n}\n\n// Set the height of select and file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611\nselect optgroup {\n font-size: inherit;\n font-style: inherit;\n font-family: inherit;\n}\n\n// Focus for select, file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Fix for Chrome number input\n// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.\n// See https://github.com/twbs/bootstrap/issues/8350 for more.\ninput[type=\"number\"] {\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n height: auto;\n }\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n vertical-align: middle;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n vertical-align: middle;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n //\n // Placeholder text gets special styles because when browsers invalidate entire\n // lines if it doesn't understand a selector/\n .placeholder();\n\n // Disabled and read-only inputs\n // Note: HTML5 says that controls under a fieldset > legend:first-child won't\n // be disabled if the fieldset is disabled. Due to implementation difficulty,\n // we don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n padding-left: 20px;\n vertical-align: middle;\n label {\n display: inline;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n float: left;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n\n// Form control sizing\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n// Warning\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n// Error\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n// Success\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match (which also avoids\n // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n float: none;\n margin-left: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of labels, radios, and checkboxes\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n .form-control-static {\n padding-top: (@padding-base-vertical + 1);\n }\n\n // Only right align form labels here when the columns stop stacking\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n }\n }\n}\n","glyphicons.less":"//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#glyphicons_halflingsregular') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n &:empty {\n width: 1em;\n }\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","grid.less":"//\n// Grid system\n// --------------------------------------------------\n\n// Set the container width, and override it for fixed navbars in media queries\n.container {\n .container-fixed();\n}\n\n// mobile first defaults\n.row {\n .make-row();\n}\n\n// Common styles for small and large grid columns\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Grid classes for extra small devices like smartphones. No offset, push, or\n// pull classes are present here due to the size of the target.\n//\n// Note that `.col-xs-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n.make-grid-columns-float(xs);\n.make-grid(@grid-columns, xs, width);\n.make-grid(@grid-columns, xs, pull);\n.make-grid(@grid-columns, xs, push);\n.make-grid(@grid-columns, xs, offset);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n//\n// Note that `.col-sm-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-sm-min) {\n .container {\n width: @container-sm;\n }\n\n .make-grid-columns-float(sm);\n .make-grid(@grid-columns, sm, width);\n .make-grid(@grid-columns, sm, pull);\n .make-grid(@grid-columns, sm, push);\n .make-grid(@grid-columns, sm, offset);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n//\n// Note that `.col-md-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-md-min) {\n .container {\n width: @container-md;\n }\n\n .make-grid-columns-float(md);\n .make-grid(@grid-columns, md, width);\n .make-grid(@grid-columns, md, pull);\n .make-grid(@grid-columns, md, push);\n .make-grid(@grid-columns, md, offset);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n//\n// Note that `.col-lg-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-lg-min) {\n .container {\n width: @container-lg;\n }\n\n .make-grid-columns-float(lg);\n .make-grid(@grid-columns, lg, width);\n .make-grid(@grid-columns, lg, pull);\n .make-grid(@grid-columns, lg, push);\n .make-grid(@grid-columns, lg, offset);\n}\n\n","input-groups.less":"//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &.col {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n white-space: nowrap;\n\n // Negative margin to only have a 1px border between the two\n &:first-child > .btn {\n margin-right: -1px;\n }\n &:last-child > .btn {\n margin-left: -1px;\n }\n}\n.input-group-btn > .btn {\n position: relative;\n // Jankily prevent input button groups from wrapping\n + .btn {\n margin-left: -4px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:active {\n z-index: 2;\n }\n}\n","jumbotron.less":"//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n font-size: @jumbotron-font-size;\n font-weight: 200;\n line-height: (@line-height-base * 1.5);\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1 {\n line-height: 1;\n color: @jumbotron-heading-color;\n }\n p {\n line-height: 1.4;\n }\n\n .container & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","labels.less":"//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n &[href] {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","list-group.less":"//\n// List groups\n// --------------------------------------------------\n\n// Base class\n//\n// Easily usable on
      ,
        , or
        .\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n// Individual list items\n// -------------------------\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n// Linked list items\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: lighten(@list-group-active-bg, 40%);\n }\n }\n}\n\n// Custom content options\n// -------------------------\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","media.less":"// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n > .pull-left {\n margin-right: 10px;\n }\n > .pull-right {\n margin-left: 10px;\n }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","mixins.less":"//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; /* 1 */\n display: table; /* 2 */\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted #333;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &:-moz-placeholder { color: @color; } // Firefox 4-18\n &::-moz-placeholder { color: @color; } // Firefox 19+\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9+\n transform: rotate(@degrees);\n}\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9+\n transform: scale(@ratio);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9+\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9+\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9+\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n -o-user-select: @select;\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+\n background-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1+, Chrome 10+\n background-image: -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+\n background-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color));\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: -moz-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, @color), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, @color), color-stop(.75, @color), color-stop(.75, transparent), to(transparent));\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -moz-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block;) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border;) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n & > .dropdown .caret {\n border-color: @heading-text-color transparent;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background; @border) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n &,\n tr&,\n th&,\n td& { display: none !important; }\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n .clearfix();\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n .clearfix();\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n // Calculate width based on number of columns available\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the small column offsets\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n // Calculate width based on number of columns available\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium column offsets\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n // Calculate width based on number of columns available\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large column offsets\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col(@index + 1, @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col(@index + 1, ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.make-grid-columns-float(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col(@index + 1, @item);\n }\n .col(@index, @list) when (@index < @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col(@index + 1, ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index = @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.make-grid(@index, @class, @type) when (@index >= 0) {\n .calc-grid(@index, @class, @type);\n // next iteration\n .make-grid(@index - 1, @class, @type);\n}\n\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ` +
        +
        + +
        + + +
    +
    + + + +
    +
    +

    Hello, world!

    +

    This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.

    +

    Learn more »

    +
    +
    + +
    + +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

    +

    View details »

    +
    +
    + +
    + +
    +

    © Company 2013

    +
    +
    + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/jumbotron/jumbotron.css b/app/bower_components/sass-bootstrap/examples/jumbotron/jumbotron.css new file mode 100644 index 0000000..179d408 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/jumbotron/jumbotron.css @@ -0,0 +1,5 @@ +/* Move down content because we have a fixed navbar that is 50px tall */ +body { + padding-top: 50px; + padding-bottom: 20px; +} diff --git a/app/bower_components/sass-bootstrap/examples/justified-nav/index.html b/app/bower_components/sass-bootstrap/examples/justified-nav/index.html new file mode 100644 index 0000000..c2cf0ca --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/justified-nav/index.html @@ -0,0 +1,83 @@ + + + + + + + + + + + Justified Nav Template for Bootstrap + + + + + + + + + + + + + + + + +
    + +
    +

    Project name

    + +
    + + +
    +

    Marketing stuff!

    +

    Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet.

    +

    Get started today

    +
    + + +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

    +

    View details »

    +
    +
    + + + + +
    + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/justified-nav/justified-nav.css b/app/bower_components/sass-bootstrap/examples/justified-nav/justified-nav.css new file mode 100644 index 0000000..baf0e11 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/justified-nav/justified-nav.css @@ -0,0 +1,88 @@ +body { + padding-top: 20px; +} + +.footer { + border-top: 1px solid #eee; + margin-top: 40px; + padding-top: 40px; + padding-bottom: 40px; +} + +/* Main marketing message and sign up button */ +.jumbotron { + text-align: center; + background-color: transparent; +} +.jumbotron .btn { + font-size: 21px; + padding: 14px 24px; +} + +/* Customize the nav-justified links to be fill the entire space of the .navbar */ + +.nav-justified { + background-color: #eee; + border-radius: 5px; + border: 1px solid #ccc; +} +.nav-justified > li > a { + margin-bottom: 0; + padding-top: 15px; + padding-bottom: 15px; + color: #777; + font-weight: bold; + text-align: center; + border-bottom: 1px solid #d5d5d5; + background-color: #e5e5e5; /* Old browsers */ + background-repeat: repeat-x; /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#e5e5e5)); /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Chrome 10+,Safari 5.1+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e5e5e5',GradientType=0 ); /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* W3C */ +} +.nav-justified > .active > a, +.nav-justified > .active > a:hover, +.nav-justified > .active > a:focus { + background-color: #ddd; + background-image: none; + box-shadow: inset 0 3px 7px rgba(0,0,0,.15); +} +.nav-justified > li:first-child > a { + border-radius: 5px 5px 0 0; +} +.nav-justified > li:last-child > a { + border-bottom: 0; + border-radius: 0 0 5px 5px; +} + +@media (min-width: 768px) { + .nav-justified { + max-height: 52px; + } + .nav-justified > li > a { + border-left: 1px solid #fff; + border-right: 1px solid #d5d5d5; + } + .nav-justified > li:first-child > a { + border-left: 0; + border-radius: 5px 0 0 5px; + } + .nav-justified > li:last-child > a { + border-radius: 0 5px 5px 0; + border-right: 0; + } +} + +/* Responsive: Portrait tablets and up */ +@media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .masthead, + .marketing, + .footer { + padding-left: 0; + padding-right: 0; + } +} diff --git a/app/bower_components/sass-bootstrap/examples/navbar-fixed-top/index.html b/app/bower_components/sass-bootstrap/examples/navbar-fixed-top/index.html new file mode 100644 index 0000000..de04aa6 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/navbar-fixed-top/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + + Fixed Top Navbar Example for Bootstrap + + + + + + + + + + + + + + + + + + + +
    + + +
    +

    Navbar example

    +

    This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.

    +

    To see the difference between static and fixed top navbars, just scroll.

    +

    + View navbar docs » +

    +
    + +
    + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/navbar-fixed-top/navbar-fixed-top.css b/app/bower_components/sass-bootstrap/examples/navbar-fixed-top/navbar-fixed-top.css new file mode 100644 index 0000000..b0c8837 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/navbar-fixed-top/navbar-fixed-top.css @@ -0,0 +1,4 @@ +body { + min-height: 2000px; + padding-top: 70px; +} diff --git a/app/bower_components/sass-bootstrap/examples/navbar-static-top/index.html b/app/bower_components/sass-bootstrap/examples/navbar-static-top/index.html new file mode 100644 index 0000000..c77c00a --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/navbar-static-top/index.html @@ -0,0 +1,92 @@ + + + + + + + + + + + Static Top Navbar Example for Bootstrap + + + + + + + + + + + + + + + + + + + + +
    + + +
    +

    Navbar example

    +

    This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.

    +

    To see the difference between static and fixed top navbars, just scroll.

    +

    + View navbar docs » +

    +
    + +
    + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/navbar-static-top/navbar-static-top.css b/app/bower_components/sass-bootstrap/examples/navbar-static-top/navbar-static-top.css new file mode 100644 index 0000000..59a37e7 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/navbar-static-top/navbar-static-top.css @@ -0,0 +1,7 @@ +body { + min-height: 2000px; +} + +.navbar-static-top { + margin-bottom: 19px; +} \ No newline at end of file diff --git a/app/bower_components/sass-bootstrap/examples/navbar/index.html b/app/bower_components/sass-bootstrap/examples/navbar/index.html new file mode 100644 index 0000000..24c154a --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/navbar/index.html @@ -0,0 +1,88 @@ + + + + + + + + + + + Navbar Template for Bootstrap + + + + + + + + + + + + + + + + +
    + + + + + +
    +

    Navbar example

    +

    This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.

    +

    + View navbar docs » +

    +
    + +
    + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/navbar/navbar.css b/app/bower_components/sass-bootstrap/examples/navbar/navbar.css new file mode 100644 index 0000000..d219524 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/navbar/navbar.css @@ -0,0 +1,8 @@ +body { + padding-top: 20px; + padding-bottom: 20px; +} + +.navbar { + margin-bottom: 20px; +} diff --git a/app/bower_components/sass-bootstrap/examples/non-responsive/index.html b/app/bower_components/sass-bootstrap/examples/non-responsive/index.html new file mode 100644 index 0000000..1c56b30 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/non-responsive/index.html @@ -0,0 +1,101 @@ + + + + + + + + + + + + + Non-responsive Template for Bootstrap + + + + + + + + + + + + + + + + + + + +
    + + + +

    What changes

    +

    Note the lack of the <meta name="viewport" content="width=device-width, initial-scale=1.0">, which disables the zooming aspect of sites in mobile devices. In addition, we reset our container's width and are basically good to go.

    + +

    Regarding navbars

    +

    As a heads up, the navbar component is rather tricky here in that the styles for displaying it are rather specific and detailed. Overrides to ensure desktop styles display are not as performant or sleek as one would like. Just be aware there may be potential gotchas as you build on top of this example when using the navbar.

    + +

    Non-responsive grid system

    +
    +
    One third
    +
    One third
    +
    One third
    +
    + +
    + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/non-responsive/non-responsive.css b/app/bower_components/sass-bootstrap/examples/non-responsive/non-responsive.css new file mode 100644 index 0000000..526b0b8 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/non-responsive/non-responsive.css @@ -0,0 +1,116 @@ +/* Template-specific stuff + * + * Customizations just for the template; these are not necessary for anything + * with disabling the responsiveness. + */ + +/* Account for fixed navbar */ +body { + padding-top: 70px; + padding-bottom: 30px; +} + +/* Finesse the page header spacing */ +.page-header { + margin-bottom: 30px; +} +.page-header .lead { + margin-bottom: 10px; +} + + +/* Non-responsive overrides + * + * Utilitze the following CSS to disable the responsive-ness of the container, + * grid system, and navbar. + */ + +/* Reset the container */ +.container { + max-width: none !important; + width: 970px; +} + +/* Demonstrate the grids */ +.col-xs-4 { + padding-top: 15px; + padding-bottom: 15px; + background-color: #eee; + border: 1px solid #ddd; + background-color: rgba(86,61,124,.15); + border: 1px solid rgba(86,61,124,.2); +} + +.container .navbar-header, +.container .navbar-collapse { + margin-right: 0; + margin-left: 0; +} + +/* Always float the navbar header */ +.navbar-header { + float: left; +} + +/* Undo the collapsing navbar */ +.navbar-collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; +} + +.navbar-toggle { + display: none; +} + +.navbar-brand { + margin-left: -15px; +} + +/* Always apply the floated nav */ +.navbar-nav { + float: left; + margin: 0; +} +.navbar-nav > li { + float: left; +} +.navbar-nav > li > a { + padding: 15px; +} + +/* Redeclare since we override the float above */ +.navbar-nav.navbar-right { + float: right; +} + +/* Undo custom dropdowns */ +.navbar .open .dropdown-menu { + position: absolute; + float: left; + background-color: #fff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-width: 0 1px 1px; + border-radius: 0 0 4px 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); +} +.navbar .open .dropdown-menu > li > a { + color: #333; +} +.navbar .open .dropdown-menu > li > a:hover, +.navbar .open .dropdown-menu > li > a:focus, +.navbar .open .dropdown-menu > .active > a, +.navbar .open .dropdown-menu > .active > a:hover, +.navbar .open .dropdown-menu > .active > a:focus { + color: #fff !important; + background-color: #428bca !important; +} +.navbar .open .dropdown-menu > .disabled > a, +.navbar .open .dropdown-menu > .disabled > a:hover, +.navbar .open .dropdown-menu > .disabled > a:focus { + color: #999 !important; + background-color: transparent !important; +} diff --git a/app/bower_components/sass-bootstrap/examples/offcanvas/index.html b/app/bower_components/sass-bootstrap/examples/offcanvas/index.html new file mode 100644 index 0000000..a9350bd --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/offcanvas/index.html @@ -0,0 +1,130 @@ + + + + + + + + + + + Off Canvas Template for Bootstrap + + + + + + + + + + + + + + + + + +
    + +
    + +
    +

    + +

    +
    +

    Hello, world!

    +

    This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

    +
    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +

    Heading

    +

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    +

    View details »

    +
    +
    +
    + + +
    + +
    + +
    +

    © Company 2013

    +
    + +
    + + + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/offcanvas/offcanvas.css b/app/bower_components/sass-bootstrap/examples/offcanvas/offcanvas.css new file mode 100644 index 0000000..71ad2ac --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/offcanvas/offcanvas.css @@ -0,0 +1,50 @@ +/* + * Style tweaks + * -------------------------------------------------- + */ +html { + overflow-x: hidden; /* Prevent scroll on narrow devices */ +} +body { + padding-top: 70px; +} +footer { + padding: 30px 0; +} + +/* + * Off Canvas + * -------------------------------------------------- + */ +@media screen and (max-width: 767px) { + .row-offcanvas { + position: relative; + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + } + + .row-offcanvas-right + .sidebar-offcanvas { + right: -50%; /* 6 columns */ + } + + .row-offcanvas-left + .sidebar-offcanvas { + left: -50%; /* 6 columns */ + } + + .row-offcanvas-right.active { + right: 50%; /* 6 columns */ + } + + .row-offcanvas-left.active { + left: 50%; /* 6 columns */ + } + + .sidebar-offcanvas { + position: absolute; + top: 0; + width: 50%; /* 6 columns */ + } +} diff --git a/app/bower_components/sass-bootstrap/examples/offcanvas/offcanvas.js b/app/bower_components/sass-bootstrap/examples/offcanvas/offcanvas.js new file mode 100644 index 0000000..12f2dff --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/offcanvas/offcanvas.js @@ -0,0 +1,5 @@ +$(document).ready(function() { + $('[data-toggle=offcanvas]').click(function() { + $('.row-offcanvas').toggleClass('active'); + }); +}); \ No newline at end of file diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/carousel.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/carousel.jpg new file mode 100644 index 0000000..a63a1ba Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/carousel.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/grid.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/grid.jpg new file mode 100644 index 0000000..2407cf2 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/grid.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/jumbotron-narrow.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/jumbotron-narrow.jpg new file mode 100644 index 0000000..915d10f Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/jumbotron-narrow.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/jumbotron.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/jumbotron.jpg new file mode 100644 index 0000000..46bce0c Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/jumbotron.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/justified-nav.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/justified-nav.jpg new file mode 100644 index 0000000..5f57923 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/justified-nav.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/navbar-fixed.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/navbar-fixed.jpg new file mode 100644 index 0000000..16a03b0 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/navbar-fixed.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/navbar-static.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/navbar-static.jpg new file mode 100644 index 0000000..8fe3529 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/navbar-static.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/navbar.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/navbar.jpg new file mode 100644 index 0000000..3120c50 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/navbar.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/non-responsive.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/non-responsive.jpg new file mode 100644 index 0000000..0b8953c Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/non-responsive.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/offcanvas.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/offcanvas.jpg new file mode 100644 index 0000000..76b7d67 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/offcanvas.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/sign-in.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/sign-in.jpg new file mode 100644 index 0000000..4191c33 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/sign-in.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/starter-template.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/starter-template.jpg new file mode 100644 index 0000000..2545aa3 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/starter-template.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/sticky-footer-navbar.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/sticky-footer-navbar.jpg new file mode 100644 index 0000000..6226bf4 Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/sticky-footer-navbar.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/sticky-footer.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/sticky-footer.jpg new file mode 100644 index 0000000..644f6dd Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/sticky-footer.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/screenshots/theme.jpg b/app/bower_components/sass-bootstrap/examples/screenshots/theme.jpg new file mode 100644 index 0000000..ef47acb Binary files /dev/null and b/app/bower_components/sass-bootstrap/examples/screenshots/theme.jpg differ diff --git a/app/bower_components/sass-bootstrap/examples/signin/index.html b/app/bower_components/sass-bootstrap/examples/signin/index.html new file mode 100644 index 0000000..7211075 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/signin/index.html @@ -0,0 +1,50 @@ + + + + + + + + + + + Signin Template for Bootstrap + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/signin/signin.css b/app/bower_components/sass-bootstrap/examples/signin/signin.css new file mode 100644 index 0000000..a6bf9b1 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/signin/signin.css @@ -0,0 +1,40 @@ +body { + padding-top: 40px; + padding-bottom: 40px; + background-color: #eee; +} + +.form-signin { + max-width: 330px; + padding: 15px; + margin: 0 auto; +} +.form-signin .form-signin-heading, +.form-signin .checkbox { + margin-bottom: 10px; +} +.form-signin .checkbox { + font-weight: normal; +} +.form-signin .form-control { + position: relative; + font-size: 16px; + height: auto; + padding: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.form-signin .form-control:focus { + z-index: 2; +} +.form-signin input[type="text"] { + margin-bottom: -1px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.form-signin input[type="password"] { + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} \ No newline at end of file diff --git a/app/bower_components/sass-bootstrap/examples/starter-template/index.html b/app/bower_components/sass-bootstrap/examples/starter-template/index.html new file mode 100644 index 0000000..a792db8 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/starter-template/index.html @@ -0,0 +1,68 @@ + + + + + + + + + + + Starter Template for Bootstrap + + + + + + + + + + + + + + + + + + +
    + +
    +

    Bootstrap starter template

    +

    Use this document as a way to quickly start any new project.
    All you get is this text and a mostly barebones HTML document.

    +
    + +
    + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/starter-template/starter-template.css b/app/bower_components/sass-bootstrap/examples/starter-template/starter-template.css new file mode 100644 index 0000000..4af7a61 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/starter-template/starter-template.css @@ -0,0 +1,7 @@ +body { + padding-top: 50px; +} +.starter-template { + padding: 40px 15px; + text-align: center; +} diff --git a/app/bower_components/sass-bootstrap/examples/sticky-footer-navbar/index.html b/app/bower_components/sass-bootstrap/examples/sticky-footer-navbar/index.html new file mode 100644 index 0000000..fb86074 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/sticky-footer-navbar/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + + Sticky Footer Navbar Template for Bootstrap + + + + + + + + + + + + + + + + + +
    + + + + + +
    + +

    Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within #wrap with padding-top: 60px; on the .container.

    +

    Back to the default sticky footer minus the navbar.

    +
    +
    + + + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/sticky-footer-navbar/sticky-footer-navbar.css b/app/bower_components/sass-bootstrap/examples/sticky-footer-navbar/sticky-footer-navbar.css new file mode 100644 index 0000000..4869de0 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/sticky-footer-navbar/sticky-footer-navbar.css @@ -0,0 +1,45 @@ +/* Sticky footer styles +-------------------------------------------------- */ + +html, +body { + height: 100%; + /* The html and body elements cannot have any padding or margin. */ +} + +/* Wrapper for page content to push down footer */ +#wrap { + min-height: 100%; + height: auto; + /* Negative indent footer by its height */ + margin: 0 auto -60px; + /* Pad bottom by footer height */ + padding: 0 0 60px; +} + +/* Set the fixed height of the footer here */ +#footer { + height: 60px; + background-color: #f5f5f5; +} + + +/* Custom page CSS +-------------------------------------------------- */ +/* Not required for template or sticky footer method. */ + +#wrap > .container { + padding: 60px 15px 0; +} +.container .credit { + margin: 20px 0; +} + +#footer > .container { + padding-left: 15px; + padding-right: 15px; +} + +code { + font-size: 80%; +} diff --git a/app/bower_components/sass-bootstrap/examples/sticky-footer/index.html b/app/bower_components/sass-bootstrap/examples/sticky-footer/index.html new file mode 100644 index 0000000..b52754d --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/sticky-footer/index.html @@ -0,0 +1,55 @@ + + + + + + + + + + + Sticky Footer Template for Bootstrap + + + + + + + + + + + + + + + + + +
    + + +
    + +

    Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.

    +

    Use the sticky footer with a fixed navbar if need be, too.

    +
    +
    + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/sticky-footer/sticky-footer.css b/app/bower_components/sass-bootstrap/examples/sticky-footer/sticky-footer.css new file mode 100644 index 0000000..db69add --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/sticky-footer/sticky-footer.css @@ -0,0 +1,38 @@ +/* Sticky footer styles +-------------------------------------------------- */ + +html, +body { + height: 100%; + /* The html and body elements cannot have any padding or margin. */ +} + +/* Wrapper for page content to push down footer */ +#wrap { + min-height: 100%; + height: auto; + /* Negative indent footer by its height */ + margin: 0 auto -60px; + /* Pad bottom by footer height */ + padding: 0 0 60px; +} + +/* Set the fixed height of the footer here */ +#footer { + height: 60px; + background-color: #f5f5f5; +} + + +/* Custom page CSS +-------------------------------------------------- */ +/* Not required for template or sticky footer method. */ + +.container { + width: auto; + max-width: 680px; + padding: 0 15px; +} +.container .credit { + margin: 20px 0; +} diff --git a/app/bower_components/sass-bootstrap/examples/theme/index.html b/app/bower_components/sass-bootstrap/examples/theme/index.html new file mode 100644 index 0000000..5adb44a --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/theme/index.html @@ -0,0 +1,384 @@ + + + + + + + + + + + Theme Template for Bootstrap + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +

    Hello, world!

    +

    This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.

    +

    Learn more »

    +
    + + + + +

    + + + + + + + +

    +

    + + + + + + + +

    +

    + + + + + + + +

    +

    + + + + + + + +

    + + + + + A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera + + + + + + + + + + + + + + + + + + +
    + Well done! You successfully read this important alert message. +
    +
    + Heads up! This alert needs your attention, but it's not super important. +
    +
    + Warning! Best check yo self, you're not looking too good. +
    +
    + Oh snap! Change a few things up and try submitting again. +
    + + + + +
    +
    60% Complete
    +
    +
    +
    40% Complete (success)
    +
    +
    +
    20% Complete
    +
    +
    +
    60% Complete (warning)
    +
    +
    +
    80% Complete (danger)
    +
    +
    +
    35% Complete (success)
    +
    20% Complete (warning)
    +
    10% Complete (danger)
    +
    + + + + + + + + + +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    +

    Panel title

    +
    +
    + Panel content +
    +
    +
    +
    + + + + +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed diam eget risus varius blandit sit amet non magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Aenean lacinia bibendum nulla sed consectetur.

    +
    + + +
    + + + + + + + + + diff --git a/app/bower_components/sass-bootstrap/examples/theme/theme.css b/app/bower_components/sass-bootstrap/examples/theme/theme.css new file mode 100644 index 0000000..e755923 --- /dev/null +++ b/app/bower_components/sass-bootstrap/examples/theme/theme.css @@ -0,0 +1,14 @@ +body { + padding-top: 70px; + padding-bottom: 30px; +} + +.theme-dropdown .dropdown-menu { + display: block; + position: static; + margin-bottom: 20px; +} + +.theme-showcase > p > .btn { + margin: 5px 0; +} \ No newline at end of file diff --git a/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.eot b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..423bd5d Binary files /dev/null and b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.svg b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..4469488 --- /dev/null +++ b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.ttf b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..a498ef4 Binary files /dev/null and b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.woff b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..d83c539 Binary files /dev/null and b/app/bower_components/sass-bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/app/bower_components/sass-bootstrap/getting-started.html b/app/bower_components/sass-bootstrap/getting-started.html new file mode 100644 index 0000000..5a735b6 --- /dev/null +++ b/app/bower_components/sass-bootstrap/getting-started.html @@ -0,0 +1,1021 @@ +--- +layout: default +title: Getting started +slug: getting-started +lead: "An overview of Bootstrap, how to download and use, basic templates and examples, and more." +base_url: "../" +--- + + + +
    + +

    Bootstrap has a few easy ways to quickly get started, each one appealing to a different skill level and use case. Read through to see what suits your particular needs.

    + +

    Compiled CSS, JS, and fonts

    +

    The fastest way to get Bootstrap is to download the precompiled and minified versions of our CSS, JavaScript, and fonts. No documentation or original source code files are included.

    +

    Download precompiled Bootstrap

    + +

    Additional downloads

    +
    +

    + Download source code +

    +

    Get the latest Bootstrap LESS and JavaScript source code by downloading it directly from GitHub.

    +

    + Clone or fork via GitHub +

    +

    Visit us on GitHub to clone or fork the Bootstrap project.

    +

    + Install with Bower +

    +

    Install and manage Bootstrap's styles, JavaScript, and documentation using Bower.

    + {% highlight bash %}$ bower install bootstrap{% endhighlight %} +
    + +

    Bootstrap CDN

    +

    The folks over at MaxCDN graciously provide CDN support for Bootstrap's CSS and JavaScript. Just use these Bootstrap CDN links.

    +{% highlight html %} + + + + + + + + +{% endhighlight %} + +
    +

    Compiling Bootstrap's LESS files

    +

    If you work with Bootstrap's uncompiled source code, you need to compile the LESS files to produce usable CSS files. For compiling LESS files into CSS, we only officially support Recess, which is Twitter's CSS hinter based on less.js.

    +
    +
    + + + +
    + +

    Within the download you'll find the following directories and files, logically grouping common resources and providing both compiled and minified variations.

    +

    Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:

    + + +{% highlight bash %} +bootstrap/ +├── css/ +│ ├── bootstrap.css +│ ├── bootstrap.min.css +│ ├── bootstrap-theme.css +│ └── bootstrap-theme.min.css +├── js/ +│ ├── bootstrap.js +│ └── bootstrap.min.js +└── fonts/ + ├── glyphicons-halflings-regular.eot + ├── glyphicons-halflings-regular.svg + ├── glyphicons-halflings-regular.ttf + └── glyphicons-halflings-regular.woff +{% endhighlight %} + +

    This is the most basic form of Bootstrap: precompiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (bootstrap.*), as well as compiled and minified CSS and JS (bootstrap.min.*). Fonts from Glyphicons are included, as is the optional Bootstrap theme.

    +
    +

    jQuery required

    +

    Please note that all JavaScript plugins require jQuery to be included, as shown in the starter template. Consult our bower.json to see which versions of jQuery are supported.

    +
    +
    + + + +
    + +

    Start with this basic HTML template, or modify these examples. We hope you'll customize our templates and examples, adapting them to suit your needs.

    + +

    Copy the HTML below to begin working with a minimal Bootstrap document.

    +{% highlight html %} + + + + Bootstrap 101 Template + + + + + + + + + +

    Hello, world!

    + + + + + + + +{% endhighlight %} +
    + + + +
    + +

    Build on the basic template above with Bootstrap's many components. See also Customizing Bootstrap for tips on maintaining your own Bootstrap variants.

    + +
    +
    + + + +

    Starter template

    +

    Nothing but the basics: compiled CSS and JavaScript along with a container.

    +
    +
    + + + +

    Grids

    +

    Multiple examples of grid layouts with all four tiers, nesting, and more.

    +
    +
    + +
    + + + +

    Jumbotron

    +

    Build around the jumbotron with a navbar and some basic grid columns.

    +
    +
    + + + +

    Narrow jumbotron

    +

    Build a more custom page by narrowing the default container and jumbotron.

    +
    +
    + +
    + + + +

    Navbar

    +

    Super basic template that includes the navbar along with some additional content.

    +
    +
    + + + +

    Static top navbar

    +

    Super basic template with a static top navbar along with some additional content.

    +
    +
    + +
    + + + +

    Fixed navbar

    +

    Super basic template with a fixed top navbar along with some additional content.

    +
    +
    + + + +

    Sign-in page

    +

    Custom form layout and design for a simple sign in form.

    +
    +
    + +
    + + + +

    Sticky footer

    +

    Attach a footer to the bottom of the viewport when the content is shorter than it.

    +
    +
    + + + +

    Sticky footer with navbar

    +

    Attach a footer to the bottom of the viewport with a fixed navbar at the top.

    +
    +
    + +
    + + + +

    Justified nav

    +

    Create a custom navbar with justified links. Heads up! Not too WebKit friendly.

    +
    +
    + + + +

    Offcanvas

    +

    Build a toggleable off-canvas navigation menu for use with Bootstrap.

    +
    +
    + +
    + + + +

    Carousel

    +

    Customize the navbar and carousel, then add some new components.

    +
    +
    + + + +

    Non-responsive Bootstrap

    +

    Easily disable the responsiveness of Bootstrap per our docs.

    +
    +
    + +
    + + + +

    Bootstrap theme

    +

    Load the optional Bootstrap theme for a visually enhanced experience.

    +
    +
    + +
    + + + +
    + +

    Bootstrap automatically adapts your pages for various screen sizes. + Here's how to disable this feature so your page works like in this non-responsive example.

    + +

    Steps to disable page responsiveness

    +
      +
    1. Omit the viewport <meta> mentioned in the CSS docs
    2. +
    3. Override the width on the .container for each grid tier with a single width, for example width: 970px !important; Be sure that this comes after the default Bootstrap CSS. You can optionally avoid the !important with media queries or some selector-fu.
    4. +
    5. If using navbars, remove all navbar collapsing and expanding behavior.
    6. +
    7. For grid layouts, use .col-xs-* classes in addition to, or in place of, the medium/large ones. Don't worry, the extra-small device grid scales to all resolutions.
    8. +
    +

    You'll still need Respond.js for IE8 (since our media queries are still there and need to be processed). + This disables the "mobile site" aspects of Bootstrap.

    + +

    Bootstrap template with responsiveness disabled

    +

    We've applied these steps to an example. Read its source code to see the specific changes implemented.

    +

    + View non-responsive example +

    +
    + + + +
    + +

    Bootstrap 3 is not backwards compatible with v2.x. Use this section as a general guide to upgrading from v2.x to v3.0. For a broader overview, see what's new in the v3.0 release announcement.

    + +

    Major class changes

    +

    This table shows the style changes between v2.x and v3.0.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Bootstrap 2.xBootstrap 3.0
    .container-fluid.container
    .row-fluid.row
    .span*.col-md-*
    .offset*.col-md-offset-*
    .brand.navbar-brand
    .nav-collapse.navbar-collapse
    .nav-toggle.navbar-toggle
    .btn-navbar.navbar-btn
    .hero-unit.jumbotron
    .icon-*.glyphicon .glyphicon-*
    .btn.btn .btn-default
    .btn-mini.btn-xs
    .btn-small.btn-sm
    .btn-large.btn-lg
    .alert-error.alert-danger
    .visible-phone.visible-xs
    .visible-tablet.visible-sm
    .visible-desktop.visible-md
    .hidden-phone.hidden-xs
    .hidden-tablet.hidden-sm
    .hidden-desktop.hidden-md
    .input-small.input-sm
    .input-large.input-lg
    .control-group.form-group
    .checkbox.inline .radio.inline.checkbox-inline .radio-inline
    .input-prepend .input-append.input-group
    .add-on.input-group-addon
    .img-polaroid.img-thumbnail
    ul.unstyled.list-unstyled
    ul.inline.list-inline
    .muted.text-muted
    .text-error.text-danger
    .table .error.table .danger
    .bar.progress-bar
    .bar-*.progress-bar-*
    .accordion.panel-group
    .accordion-group.panel .panel-default
    .accordion-heading.panel-heading
    .accordion-body.panel-collapse
    .accordion-inner.panel-body
    +
    + +

    What's new

    +

    We've added new elements and changed some existing ones. Here are the new or updated styles.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ElementDescription
    Panels.panel .panel-default .panel-body .panel-title .panel-heading .panel-footer .panel-collapse
    List groups.list-group .list-group-item .list-group-item-text .list-group-item-heading
    Glyphicons.glyphicon
    Jumbotron.jumbotron
    Extra small grid (<768px).col-xs-*
    Small grid (≥768px).col-sm-*
    Medium grid (≥992px).col-md-*
    Large grid (≥1200px).col-lg-*
    Responsive utility classes (≥1200px).visible-lg .hidden-lg
    Offsets.col-sm-offset-* .col-md-offset-* .col-lg-offset-*
    Push.col-sm-push-* .col-md-push-* .col-lg-push-*
    Pull.col-sm-pull-* .col-md-pull-* .col-lg-pull-*
    Input groups.input-group .input-group-addon .input-group-btn
    Form controls.form-control .form-group
    Button group sizes.btn-group-xs .btn-group-sm .btn-group-lg
    Navbar text.navbar-text
    Navbar header.navbar-header
    Justified tabs / pills.nav-justified
    Responsive images.img-responsive
    Contextual table rows.success .danger .warning .active
    Contextual panels.panel-success .panel-danger .panel-warning .panel-info
    Modal.modal-dialog .modal-content
    Thumbnail image.img-thumbnail
    Well sizes.well-sm .well-lg
    Alert links.alert-link
    +
    + + +

    What's removed

    +

    The following elements have been dropped or changed in v3.0.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ElementRemoved from 2.x3.0 Equivalent
    Form actions.form-actionsN/A
    Search form.form-searchN/A
    Fluid container.container-fluid.container (no more fixed grid)
    Fluid row.row-fluid.row (no more fixed grid)
    Controls wrapper.controlsN/A
    Controls row.controls-row.row or .form-group
    Navbar inner.navbar-innerN/A
    Navbar vertical dividers.navbar .divider-verticalN/A
    Dropdown submenu.dropdown-submenuN/A
    Tab alignments.tabs-left .tabs-right .tabs-belowN/A
    Nav lists.nav-list .nav-headerNo direct equivalent, but list groups and .panel-groups are similar.
    +
    + + +

    Additional notes

    +

    Other changes in v3.0 are not immediately apparent. Base classes, key styles, and behaviors have been adjusted for flexibility and our mobile first approach. Here's a partial list:

    +
      +
    • By default, text-based form controls now receive only minimal styling. For focus colors and rounded corners, apply the .form-control class on the element to style.
    • +
    • Text-based form controls with the .form-control class applied are now 100% wide by default. Wrap inputs inside <div class="col-*"></div> to control input widths.
    • +
    • .badge no longer has contextual (-success,-primary,etc..) classes.
    • +
    • .btn must also use .btn-default to get the "default" button.
    • +
    • .container and .row are now fluid (percentage-based).
    • +
    • Images are no longer responsive by default. Use .img-responsive for fluid <img> size.
    • +
    • The icons, now .glyphicon, are now font based. Icons also require a base and icon class (e.g. .glyphicon .glyphicon-asterisk).
    • +
    • Typeahead has been dropped, in favor of using Twitter Typeahead.
    • +
    • Modal markup has changed significantly. The .modal-header, .modal-body, and .modal-footer sections are now wrapped in .modal-content and .modal-dialog for better mobile styling and behavior.
    • +
    • The HTML loaded by the remote modal option is now injected into the .modal instead of into the .modal-body. This allows you to also easily vary the header and footer of the modal, not just the modal body.
    • +
    • JavaScript events are namespaced. For example, to handle the modal "show" event, use 'show.bs.modal'. For tabs "shown" use 'shown.bs.tab', etc..
    • +
    +

    For more information on upgrading to v3.0, and code snippets from the community, see Bootply.

    +
    + + + +
    + +

    Bootstrap is built to work best in the latest desktop and mobile browsers, meaning older browsers might display differently styled, though fully functional, renderings of certain components.

    + +

    Supported browsers

    +

    Specifically, we support the latest versions of the following:

    +
      +
    • Chrome (Mac, Windows, iOS, and Android)
    • +
    • Safari (Mac and iOS only, as the Windows version is being abandoned)
    • +
    • Firefox (Mac, Windows)
    • +
    • Internet Explorer
    • +
    • Opera (Mac, Windows)
    • +
    +

    Unofficially, Bootstrap should look and behave well enough in Chromium and Chrome for Linux, Firefox for Linux, and Internet Explorer 7, though they are not officially supported.

    + +

    Internet Explorer 8 and 9

    +

    Internet Explorer 8 and 9 are also supported, however, please be aware that some CSS3 properties and HTML5 elements are not fully supported by these browsers. In addition, Internet Explorer 8 requires the use of Respond.js to enable media query support.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FeatureInternet Explorer 8Internet Explorer 9
    border-radius Not supported Supported
    box-shadow Not supported Supported
    transform Not supported Supported, with -ms prefix
    transition Not supported
    placeholder Not supported
    +
    + +

    Visit Can I use... for details on browser support of CSS3 and HTML5 features.

    + +

    Internet Explorer 8 and Respond.js

    +

    Beware of the following caveats when using Respond.js in your development and production environments for Internet Explorer 8.

    +

    Respond.js and cross-domain CSS

    +

    Using Respond.js with CSS hosted on a different (sub)domain (for example, on a CDN) requires some additional setup. See the Respond.js docs for details.

    +

    Respond.js and file://

    +

    Due to browser security rules, Respond.js doesn't work with pages viewed via the file:// protocol (like when opening a local HTML file). To test responsive features in IE8, view your pages over HTTP(S). See the Respond.js docs for details.

    +

    Respond.js and @import

    +

    Respond.js doesn't work with CSS that's referenced via @import. In particular, some Drupal configurations are known to use @import. See the Respond.js docs for details.

    + +

    Internet Explorer 8 and box-sizing

    +

    IE8 does not fully support box-sizing: border-box; when combined with min-width, max-width, min-height, or max-height. For that reason, as of v3.0.1, we no longer use max-width on .containers.

    + +

    IE Compatibility modes

    +

    Bootstrap is not supported in the old Internet Explorer compatibility modes. To be sure you're using the latest rendering mode for IE, consider including the appropriate <meta> tag in your pages:

    +{% highlight html %} + +{% endhighlight %} +

    This tag is included in all docs pages and examples to ensure the best rendering possible in each supported version of Internet Explorer.

    +

    See this StackOverflow question for more information.

    + +

    Internet Explorer 10 in Windows 8 and Windows Phone 8

    +

    Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't properly apply the media queries in Bootstrap's CSS. Normally you'd just add a quick snippet of CSS to fix this:

    +{% highlight css %} +@-ms-viewport { width: device-width; } +{% endhighlight %} +

    However, this doesn't work as it causes Windows Phone 8 devices to show a mostly desktop view instead of narrow "phone" view. To address this, you'll need to include the following CSS and JavaScript to work around the bug until Microsoft issues a fix.

    +{% highlight css %} +@-webkit-viewport { width: device-width; } +@-moz-viewport { width: device-width; } +@-ms-viewport { width: device-width; } +@-o-viewport { width: device-width; } +@viewport { width: device-width; } +{% endhighlight %} + +{% highlight js %} +if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement("style") + msViewportStyle.appendChild( + document.createTextNode( + "@-ms-viewport{width:auto!important}" + ) + ) + document.getElementsByTagName("head")[0].appendChild(msViewportStyle) +} +{% endhighlight %} +

    For more information and usage guidelines, read Windows Phone 8 and Device-Width.

    +

    As a heads up, we include this in the Bootstrap docs as an example.

    + +

    Safari percent rounding

    +

    As of Safari v6.1 for OS X and Safari for iOS v7.0.1, Safari's rendering engine has some trouble with the number of decimal places used in our .col-*-1 grid classes. So if you have 12 individual grid columns, you'll notice that they come up short compared to other rows of columns. We can't do much here (see #9282) but you do have some options:

    +
      +
    • Add .pull-right to your last grid column to get the hard-right alignment
    • +
    • Tweak your percentages manually to get the perfect rounding for Safari (more difficult than the first option)
    • +
    +

    We'll keep an eye on this though and update our code if we have an easy solution.

    + +

    Modals and mobile devices

    +

    Overflow and scrolling

    +

    Support for overflow: hidden on the <body> element is quite limited in iOS and Android. To that end, when you scroll past the top or bottom of a modal in either of those devices' browsers, the <body> content will begin to scroll.

    +

    Virtual keyboards

    +

    Also, note that if you're using inputs in your modal – iOS has a rendering bug that doesn't update the position of fixed elements when the virtual keyboard is triggered. A few workarounds for this include transforming your elements to position: absolute or invoking a timer on focus to try to correct the positioning manually. This is not handled by Bootstrap, so it is up to you to decide which solution is best for your application.

    + +

    Browser zooming

    +

    Page zooming inevitably presents rendering artifacts in some components, both in Bootstrap and the rest of the web. Depending on the issue, we may be able to fix it (search first and then open an issue if need be). However, we tend to ignore these as they often have no direct solution other than hacky workarounds.

    +
    + + + +
    + +

    While we don't officially support any third party plugins or add-ons, we do offer some useful advice to help avoid potential issues in your projects.

    + +

    Box-sizing

    +

    Some third party software, including Google Maps and Google Custom Search Engine, conflict with Bootstrap due to * { box-sizing: border-box; }, a rule which makes it so padding does not affect the final computed width of an element. Learn more about box model and sizing at CSS Tricks.

    +

    Depending on the context, you may override as-needed (Option 1) or reset the box-sizing for entire regions (Option 2).

    +{% highlight css %} +/* Box-sizing resets + * + * Reset individual elements or override regions to avoid conflicts due to + * global box model settings of Bootstrap. Two options, individual overrides and + * region resets, are available as plain CSS and uncompiled LESS formats. + */ + +/* Option 1A: Override a single element's box model via CSS */ +.element { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* Option 1B: Override a single element's box model by using a Bootstrap LESS mixin */ +.element { + .box-sizing(content-box); +} + +/* Option 2A: Reset an entire region via CSS */ +.reset-box-sizing, +.reset-box-sizing *, +.reset-box-sizing *:before, +.reset-box-sizing *:after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* Option 2B: Reset an entire region with a custom LESS mixin */ +.reset-box-sizing { + &, + *, + *:before, + *:after { + .box-sizing(content-box); + } +} +.element { + .reset-box-sizing(); +} +{% endhighlight %} +
    + + + +
    + +

    Bootstrap follows common web standards, and with minimal extra effort, can be used to create sites that are accessible to those using AT.

    + +

    Skip navigation

    +

    If your navigation contains many links and comes before the main content in the DOM, add a Skip to main content link immediately after your opening <body> tag. (read why)

    +{% highlight html %} + + Skip to main content +
    + The main page content. +
    + +{% endhighlight %} + +

    Nested headings

    +

    When nesting headings (<h1> - <h6>), your primary document header should be an <h1>. Subsequent headings should make logical use of <h2> - <h6> such that screen readers can construct a table of contents for your pages.

    +

    Learn more at HTML CodeSniffer and Penn State's AccessAbility.

    + +

    Additional resources

    + +
    + + + +
    + +

    Bootstrap is released under the Apache 2 license and is copyright {{ site.time | date: "%Y" }} Twitter. Boiled down to smaller chunks, it can be described with the following conditions.

    + +
    +
    +

    It allows you to:

    +
      +
    • Freely download and use Bootstrap, in whole or in part, for personal, company internal or commercial purposes
    • +
    • Use Bootstrap in packages or distributions that you create
    • +
    +
    +
    +

    It forbids you to:

    +
      +
    • Redistribute any piece of Bootstrap without proper attribution
    • +
    • Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your distribution
    • +
    • Use any marks owned by Twitter in any way that might state or imply that you created the Twitter software in question
    • +
    +
    +
    +
    +
    +

    It requires you to:

    +
      +
    • Include a copy of the license in any redistribution you may make that includes Bootstrap
    • +
    • Provide clear attribution to Twitter for any distributions that include Bootstrap
    • +
    +
    +
    +

    It does not require you to:

    +
      +
    • Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it
    • +
    • Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged)
    • +
    +
    +
    +

    The full Bootstrap license is located in the project repository for more information.

    +
    + + +
    + +

    Bootstrap is best maintained when you treat it as a separate and independently-versioned dependency in your development environment. Doing this makes upgrading Bootstrap easier in the future.

    + +

    Once you've downloaded and included Bootstrap's styles and scripts, you can customize its components. Just create a new stylesheet (LESS, if you like, or just plain CSS) to house your customizations.

    + +
    +

    Compiled or minified?

    +

    Unless you plan on reading the CSS, go with minified stylesheets. It's the same code, just compacted. Minified styles use less bandwidth, which is good, especially in production environments.

    +
    + +

    From there, include whatever Bootstrap components and HTML content you need to create templates for your site's pages.

    + +

    Customizing components

    +

    You can customize components to varying degrees, but most fall into two camps: light customizations and overhauls. Plenty examples of both are available from third parties.

    +

    We define light customizations as superficial changes, for example, color and font changes to existing Bootstrap components. A light customization example is the Twitter Translation Center (coded by @mdo). Let's look at how to implement the custom button we wrote for this site, .btn-ttc.

    +

    The stock Bootstrap buttons require just one class, .btn, to start. Here we extend the .btn style with a new modifier class, .btn-ttc, that we will create. This gives us a distinct custom look with minimal effort.

    +

    Our customized button will be coded like this:

    +{% highlight html %} + +{% endhighlight %} +

    Note how .btn-ttc is added to the standard .btn class.

    + +

    To implement this, in the custom stylesheet, add the following CSS:

    + +{% highlight css %} +/* Custom button +-------------------------------------------------- */ + +/* Override base .btn styles */ +/* Apply text and background changes to three key states: default, hover, and active (click). */ +.btn-ttc, +.btn-ttc:hover, +.btn-ttc:active { + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #007da7; +} + +/* Apply the custom-colored gradients */ +/* Note: you'll need to include all the appropriate gradients for various browsers and standards. */ +.btn-ttc { + background-repeat: repeat-x; + background-image: linear-gradient(top, #009ED2 0%, #007DA7 100%); + ... +} + +/* Set the hover state */ +/* An easy hover state is just to move the gradient up a small amount. Add other embellishments as you see fit. */ +.btn-ttc:hover { + background-position: 0 -15px; +} +{% endhighlight %} + +

    In short: Look to the style source and duplicate the selectors you need for your modifications.

    +

    In summary, here's the basic workflow:

    +
      +
    • For each element you want to customize, find its code in the compiled Bootstrap CSS.
    • +
    • Copy the component's selector and styles and paste them in your custom stylesheet. For instance, to customize the navbar background, just copy the .navbar style specification.
    • +
    • In your custom stylesheet, edit the CSS you just copied from the Bootstrap source. No need for prepending additional classes, or appending !important here. Keep it simple.
    • +
    • Rinse and repeat until you're happy with your customizations.
    • +
    +

    Once you are comfortable performing light customizations, visual overhauls are just as straightforward. For a site like Karma, which uses Bootstrap as a CSS reset with heavy modifications, more extensive work is involved. But the same principle applies: include Bootstrap's default stylesheet first, then apply your custom stylesheet.

    + +
    +

    Alternate customization methods

    +

    While not recommended for folks new to Bootstrap, you may use one of two alternate methods for customization. The first is modifying the source .less files (making upgrades super difficult), and the second is mapping source LESS code to your own classes via mixins. For the time being, neither of those options are documented here.

    +
    + +

    Removing potential bloat

    +

    Not all sites and applications need to make use of everything Bootstrap has to offer, especially in production environments where optimizing bandwidth is an issue. We encourage you to remove whatever is unused with our Customizer.

    +

    Using the Customizer, simply uncheck any component, feature, or asset you don't need. Hit download and swap out the default Bootstrap files with these newly customized ones. You'll get vanilla Bootstrap, but without the features *you* deem unnecessary. All custom builds include compiled and minified versions, so use whichever works for you.

    + +
    diff --git a/app/bower_components/sass-bootstrap/index.html b/app/bower_components/sass-bootstrap/index.html new file mode 100644 index 0000000..9e8485e --- /dev/null +++ b/app/bower_components/sass-bootstrap/index.html @@ -0,0 +1,16 @@ +--- +layout: home +title: Bootstrap +base_url: "./" +--- + +
    +
    +

    Bootstrap

    +

    Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.

    +

    + Download Bootstrap + Download source +

    +
    +
    diff --git a/app/bower_components/sass-bootstrap/javascript.html b/app/bower_components/sass-bootstrap/javascript.html new file mode 100644 index 0000000..06a0bd0 --- /dev/null +++ b/app/bower_components/sass-bootstrap/javascript.html @@ -0,0 +1,1983 @@ +--- +layout: default +title: JavaScript +slug: js +lead: "Bring Bootstrap's components to life with over a dozen custom jQuery plugins. Easily include them all, or one by one." +base_url: "../" +--- + + + +
    + + +

    Individual or compiled

    +

    Plugins can be included individually (using Bootstrap's individual *.js files), or all at once (using bootstrap.js or the minified bootstrap.min.js).

    + +
    +

    Do not attempt to include both.

    +

    Both bootstrap.js and bootstrap.min.js contain all plugins in a single file.

    +
    + +
    +

    Plugin dependencies

    +

    Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs. Also note that all plugins depend on jQuery (this means jQuery must be included before the plugin files). Consult our bower.json to see which versions of jQuery are supported.

    +
    + +

    Data attributes

    +

    You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first-class API and should be your first consideration when using a plugin.

    + +

    That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the document namespaced with data-api. This looks like this: +{% highlight js %} +$(document).off('.data-api') +{% endhighlight %} + +

    Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:

    +{% highlight js %} +$(document).off('.alert.data-api') +{% endhighlight %} + +

    Programmatic API

    +

    We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.

    +{% highlight js %} +$(".btn.danger").button("toggle").addClass("fat") +{% endhighlight %} + +

    All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):

    +{% highlight js %} +$("#myModal").modal() // initialized with defaults +$("#myModal").modal({ keyboard: false }) // initialized with no keyboard +$("#myModal").modal('show') // initializes and invokes show immediately

    +{% endhighlight %} + +

    Each plugin also exposes its raw constructor on a Constructor property: $.fn.popover.Constructor. If you'd like to get a particular plugin instance, retrieve it directly from an element: $('[rel=popover]').data('popover').

    + +

    No conflict

    +

    Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call .noConflict on the plugin you wish to revert the value of.

    +{% highlight js %} +var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value +$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality +{% endhighlight %} + +

    Events

    +

    Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. show) is triggered at the start of an event, and its past participle form (ex. shown) is trigger on the completion of an action.

    +

    As of 3.0.0, all Bootstrap events are namespaced.

    +

    All infinitive events provide preventDefault functionality. This provides the ability to stop the execution of an action before it starts.

    +{% highlight js %} +$('#myModal').on('show.bs.modal', function (e) { + if (!data) return e.preventDefault() // stops modal from being shown +}) +{% endhighlight %} + +
    +

    Third-party libraries

    +

    Bootstrap does not officially support third-party JavaScript libraries like Prototype or jQuery UI. Despite .noConflict and namespaced events, there may be compatibility problems that you need to fix on your own. Ask on the mailing list if you need help.

    +
    +
    + + + + +
    + +

    About transitions

    +

    For simple transition effects, include transition.js once alongside the other JS files. If you're using the compiled (or minified) bootstrap.js, there is no need to include this—it's already there.

    +

    What's inside

    +

    Transition.js is a basic helper for transitionEnd events as well as a CSS transition emulator. It's used by the other plugins to check for CSS transition support and to catch hanging transitions.

    +
    + + + + +
    + + +

    Examples

    +

    Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.

    + +
    +

    Overlapping modals not supported

    +

    Be sure not to open a modal while another is still visible. Showing more than one modal at a time requires custom code.

    +
    +
    +

    Mobile device caveats

    +

    There are some caveats regarding using modals on mobile devices. See our browser support docs for details.

    +
    + +

    Static example

    +

    A rendered modal with header, body, and set of actions in the footer.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Live demo

    +

    Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.

    + + + +
    + +
    +{% highlight html %} + + + + + +{% endhighlight %} + + +
    +

    Make modals accessible

    +

    Be sure to add role="dialog" to .modal, aria-labelledby="myModalLabel" attribute to reference the modal title, and aria-hidden="true" to tell assistive technologies to skip the modal's DOM elements.

    +

    Additionally, you may give a description of your modal dialog with aria-describedby on .modal.

    +
    + +

    Usage

    +

    The modal plugin toggles your hidden content on demand, via data attributes or JavaScript. It also adds .model-open to the <body> to override default scrolling behavior and generates a .modal-backdrop to provide a click area for dismissing shown modals when clicking outside the modal.

    + +

    Via data attributes

    +

    Activate a modal without writing JavaScript. Set data-toggle="modal" on a controller element, like a button, along with a data-target="#foo" or href="#foo" to target a specific modal to toggle.

    +{% highlight html %} + +{% endhighlight %} + +

    Via JavaScript

    +

    Call a modal with id myModal with a single line of JavaScript:

    + {% highlight js %}$('#myModal').modal(options){% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-backdrop="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    backdropboolean or the string 'static'trueIncludes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn't close the modal on click.
    keyboardbooleantrueCloses the modal when escape key is pressed
    showbooleantrueShows the modal when initialized.
    remotepathfalse

    If a remote URL is provided, content will be loaded via jQuery's load method and injected into the root of the modal element. If you're using the data-api, you may alternatively use the href attribute to specify the remote source. An example of this is shown below:

    +{% highlight html %} +Click me +{% endhighlight %} +
    +
    + +

    Methods

    + +

    .modal(options)

    +

    Activates your content as a modal. Accepts an optional options object.

    +{% highlight js %} +$('#myModal').modal({ + keyboard: false +}) +{% endhighlight %} + +

    .modal('toggle')

    +

    Manually toggles a modal.

    + {% highlight js %}$('#myModal').modal('toggle'){% endhighlight %} + +

    .modal('show')

    +

    Manually opens a modal.

    + {% highlight js %}$('#myModal').modal('show'){% endhighlight %} + +

    .modal('hide')

    +

    Manually hides a modal.

    + {% highlight js %}$('#myModal').modal('hide'){% endhighlight %} + +

    Events

    +

    Bootstrap's modal class exposes a few events for hooking into modal functionality.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.modalThis event fires immediately when the show instance method is called.
    shown.bs.modalThis event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete).
    hide.bs.modalThis event is fired immediately when the hide instance method has been called.
    hidden.bs.modalThis event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete).
    +
    +{% highlight js %} +$('#myModal').on('hidden.bs.modal', function () { + // do something… +}) +{% endhighlight %} +
    + + + + +
    + + + +

    Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.

    + +

    Within a navbar

    + + +

    Within tabs

    + + + + +

    Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the .open class on the parent list item. When opened, the plugin also adds .dropdown-backdrop as a click area for closing dropdown menus when clicking outside the menu.

    + +

    Via data attributes

    +

    Add data-toggle="dropdown" to a link or button to toggle a dropdown.

    +{% highlight html %} + +{% endhighlight %} +

    To keep URLs intact, use the data-target attribute instead of href="#".

    +{% highlight html %} + +{% endhighlight %} + +

    Via JavaScript

    +

    Call the dropdowns via JavaScript:

    +{% highlight js %} +$('.dropdown-toggle').dropdown() +{% endhighlight %} + +

    Options

    +

    None

    + +

    Methods

    +

    $().dropdown('toggle')

    +

    Toggles the dropdown menu of a given navbar or tabbed navigation.

    + +

    Events

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.dropdownThis event fires immediately when the show instance method is called.
    shown.bs.dropdownThis event is fired when the dropdown has been made visible to the user (will wait for CSS transitions, to complete).
    hide.bs.dropdownThis event is fired immediately when the hide instance method has been called.
    hidden.bs.dropdownThis event is fired when the dropdown has finished being hidden from the user (will wait for CSS transitions, to complete).
    +
    +{% highlight js %} +$('#myDropdown').on('show.bs.dropdown', function () { + // do something… +}) +{% endhighlight %} +
    + + +
    + + + +

    Example in navbar

    +

    The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.

    +
    + +
    +

    @fat

    +

    Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

    +

    @mdo

    +

    Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.

    +

    one

    +

    Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.

    +

    two

    +

    In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.

    +

    three

    +

    Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

    +

    Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. +

    +
    +
    + + +

    Usage

    + +

    Via data attributes

    +

    To easily add scrollspy behavior to your topbar navigation, add data-spy="scroll" to the element you want to spy on (most typically this would be the <body>). Then add the data-target attribute with the ID or class of the parent element of any Bootstrap .nav component.

    +{% highlight html %} + + ... + +{% endhighlight %} + +

    Via JavaScript

    +

    Call the scrollspy via JavaScript:

    +{% highlight js %} +$('body').scrollspy({ target: '#navbar-example' }) +{% endhighlight %} + +
    +

    Resolvable ID targets required

    +

    Navbar links must have resolvable id targets. For example, a <a href="#home">home</a> must correspond to something in the DOM like <div id="home"></div>.

    +
    + +

    Methods

    +

    .scrollspy('refresh')

    +

    When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:

    +{% highlight js %} +$('[data-spy="scroll"]').each(function () { + var $spy = $(this).scrollspy('refresh') +}) +{% endhighlight %} + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-offset="".

    +
    + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    offsetnumber10Pixels to offset from top when calculating position of scroll.
    +
    + +

    Events

    +
    + + + + + + + + + + + + + +
    Event TypeDescription
    activate.bs.scrollspyThis event fires whenever a new item becomes activated by the scrollspy.
    +
    +{% highlight js %} +$('#myScrollspy').on('activate.bs.scrollspy', function () { + // do something… +}) +{% endhighlight %} +
    + + + + +
    + + +

    Example tabs

    +

    Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.

    +
    + +
    +
    +

    Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.

    +
    +
    +

    Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.

    +
    + + +
    +
    + +
    +

    Extends tabbed navigation

    +

    This plugin extends the tabbed navigation component to add tabbable areas.

    +
    + + +

    Usage

    +

    Enable tabbable tabs via JavaScript (each tab needs to be activated individually):

    +{% highlight js %} +$('#myTab a').click(function (e) { + e.preventDefault() + $(this).tab('show') +}) +{% endhighlight %} + +

    You can activate individual tabs in several ways:

    +{% highlight js %} +$('#myTab a[href="#profile"]').tab('show') // Select tab by name +$('#myTab a:first').tab('show') // Select first tab +$('#myTab a:last').tab('show') // Select last tab +$('#myTab li:eq(2) a').tab('show') // Select third tab (0-indexed) +{% endhighlight %} + +

    Markup

    +

    You can activate a tab or pill navigation without writing any JavaScript by simply specifying data-toggle="tab" or data-toggle="pill" on an element. Adding the nav and nav-tabs classes to the tab ul will apply the Bootstrap tab styling, while adding the nav and nav-pills classes will apply pill styling.

    +{% highlight html %} + + + + +
    +
    ...
    +
    ...
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +

    Fade effect

    +

    To make tabs fade in, add .fade to each .tab-pane. The first tab pane must also have .in to properly fade in initial content.

    +{% highlight html %} +
    +
    ...
    +
    ...
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +

    Methods

    +

    $().tab

    +

    + Activates a tab element and content container. Tab should have either a data-target or an href targeting a container node in the DOM. +

    +{% highlight html %} + + +
    +
    ...
    +
    ...
    +
    ...
    +
    ...
    +
    + + +{% endhighlight %} + +

    Events

    +
    + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.tabThis event fires on tab show, but before the new tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
    shown.bs.tabThis event fires on tab show after a tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
    +
    +{% highlight js %} +$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + e.target // activated tab + e.relatedTarget // previous tab +}) +{% endhighlight %} +
    + + + + +
    + + +

    Examples

    +

    Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.

    +

    Hover over the links below to see tooltips:

    +
    +

    Tight pants next level keffiyeh you probably haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel have a terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan whatever keytar, scenester farm-to-table banksy Austin twitter handle freegan cred raw denim single-origin coffee viral. +

    +
    + +

    Four directions

    +
    +
    + + + + +
    +
    + +
    +

    Opt-in functionality

    +

    For performance reasons, the Tooltip and Popover data-apis are opt-in, meaning you must initialize them yourself.

    +
    +
    +

    Tooltips in button groups and input groups require special setting

    +

    When using tooltips on elements within a .btn-group or an .input-group, you'll have to specify the option container: 'body' (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip is triggered).

    +
    +
    +

    Tooltips on disabled elements require wrapper elements

    +

    To add a tooltip to a disabled or .disabled element, put the element inside of a <div> and apply the tooltip to that <div> instead.

    +
    + +

    Usage

    +

    The tooltip plugin generates content and markup on demand, and by default places tooltips after their trigger element.

    +

    Trigger the tooltip via JavaScript:

    +{% highlight js %} +$('#example').tooltip(options) +{% endhighlight %} + +

    Markup

    +

    The generated markup of a tooltip is rather simple, though it does require a position (by default, set to top by the plugin).

    +{% highlight html linenos %} +
    +
    + Tooltip! +
    +
    +
    +{% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-animation="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    animationbooleantrueapply a CSS fade transition to the tooltip
    htmlbooleanfalseInsert HTML into the tooltip. If false, jQuery's text method will be used to insert content into the DOM. Use text if you're worried about XSS attacks.
    placementstring | function'top'how to position the tooltip - top | bottom | left | right | auto.
    When "auto" is specified, it will dynamically reorient the tooltip. For example, if placement is "auto left", the tooltip will display to the left when possible, otherwise it will display right.
    selectorstringfalseIf a selector is provided, tooltip objects will be delegated to the specified targets.
    titlestring | function''default title value if title attribute isn't present
    triggerstring'hover focus'how tooltip is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space.
    delaynumber | object0 +

    delay showing and hiding the tooltip (ms) - does not apply to manual trigger type

    +

    If a number is supplied, delay is applied to both hide/show

    +

    Object structure is: delay: { show: 500, hide: 100 }

    +
    containerstring | falsefalse +

    Appends the tooltip to a specific element. Example: container: 'body'

    +
    +
    +
    +

    Data attributes for individual tooltips

    +

    Options for individual tooltips can alternatively be specified through the use of data attributes, as explained above.

    +
    + +

    Markup

    +{% highlight html %} +Hover over me +{% endhighlight %} + +

    Methods

    + +

    $().tooltip(options)

    +

    Attaches a tooltip handler to an element collection.

    + +

    .tooltip('show')

    +

    Reveals an element's tooltip.

    + {% highlight js %}$('#element').tooltip('show'){% endhighlight %} + +

    .tooltip('hide')

    +

    Hides an element's tooltip.

    + {% highlight js %}$('#element').tooltip('hide'){% endhighlight %} + +

    .tooltip('toggle')

    +

    Toggles an element's tooltip.

    + {% highlight js %}$('#element').tooltip('toggle'){% endhighlight %} + +

    .tooltip('destroy')

    +

    Hides and destroys an element's tooltip.

    + {% highlight js %}$('#element').tooltip('destroy'){% endhighlight %} + +

    Events

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.tooltipThis event fires immediately when the show instance method is called.
    shown.bs.tooltipThis event is fired when the tooltip has been made visible to the user (will wait for CSS transitions to complete).
    hide.bs.tooltipThis event is fired immediately when the hide instance method has been called.
    hidden.bs.tooltipThis event is fired when the tooltip has finished being hidden from the user (will wait for CSS transitions to complete).
    +
    +{% highlight js %} +$('#myTooltip').on('hidden.bs.tooltip', function () { + // do something… +}) +{% endhighlight %} +
    + + +
    + + +

    Examples

    +

    Add small overlays of content, like those on the iPad, to any element for housing secondary information.

    + +
    +

    Plugin dependency

    +

    Popovers require the tooltip plugin to be included in your version of Bootstrap.

    +
    +
    +

    Opt-in functionality

    +

    For performance reasons, the Tooltip and Popover data-apis are opt-in, meaning you must initialize them yourself.

    +
    +
    +

    Popovers in button groups and input groups require special setting

    +

    When using popovers on elements within a .btn-group or an .input-group, you'll have to specify the option container: 'body' (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the popover is triggered).

    +
    +
    +

    Popovers on disabled elements require wrapper elements

    +

    To add a popover to a disabled or .disabled element, put the element inside of a <div> and apply the popover to that <div> instead.

    +
    + +

    Static popover

    +

    Four options are available: top, right, bottom, and left aligned.

    +
    +
    +
    +

    Popover top

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover right

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover bottom

    + +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover left

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    + +

    Live demo

    + + +

    Four directions

    +
    +
    + + + + +
    +
    + + +

    Usage

    +

    Enable popovers via JavaScript:

    + {% highlight js %}$('#example').popover(options){% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-animation="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    animationbooleantrueapply a CSS fade transition to the tooltip
    htmlbooleanfalseInsert HTML into the popover. If false, jQuery's text method will be used to insert content into the DOM. Use text if you're worried about XSS attacks.
    placementstring | function'right'how to position the popover - top | bottom | left | right | auto.
    When "auto" is specified, it will dynamically reorient the popover. For example, if placement is "auto left", the tooltip will display to the left when possible, otherwise it will display right.
    selectorstringfalseif a selector is provided, tooltip objects will be delegated to the specified targets. in practice, this is used to enable dynamic HTML content to have popovers added. See this and an informative example.
    triggerstring'click'how popover is triggered - click | hover | focus | manual
    titlestring | function''default title value if title attribute isn't present
    contentstring | function''default content value if data-content attribute isn't present
    delaynumber | object0 +

    delay showing and hiding the popover (ms) - does not apply to manual trigger type

    +

    If a number is supplied, delay is applied to both hide/show

    +

    Object structure is: delay: { show: 500, hide: 100 }

    +
    containerstring | falsefalse +

    Appends the popover to a specific element. Example: container: 'body'. This option is particularly useful in that it allows you to position the popover in the flow of the document near the triggering element - which will prevent the popover from floating away from the triggering element during a window resize.

    +
    +
    +
    +

    Data attributes for individual popovers

    +

    Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.

    +
    + +

    Methods

    +

    $().popover(options)

    +

    Initializes popovers for an element collection.

    + +

    .popover('show')

    +

    Reveals an elements popover.

    + {% highlight js %}$('#element').popover('show'){% endhighlight %} + +

    .popover('hide')

    +

    Hides an elements popover.

    + {% highlight js %}$('#element').popover('hide'){% endhighlight %} + +

    .popover('toggle')

    +

    Toggles an elements popover.

    + {% highlight js %}$('#element').popover('toggle'){% endhighlight %} + +

    .popover('destroy')

    +

    Hides and destroys an element's popover.

    + {% highlight js %}$('#element').popover('destroy'){% endhighlight %} +

    Events

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.popoverThis event fires immediately when the show instance method is called.
    shown.bs.popoverThis event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete).
    hide.bs.popoverThis event is fired immediately when the hide instance method has been called.
    hidden.bs.popoverThis event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete).
    +
    +{% highlight js %} +$('#myPopover').on('hidden.bs.popover', function () { + // do something… +}) +{% endhighlight %} +
    + + +
    + + + +

    Example alerts

    +

    Add dismiss functionality to all alert messages with this plugin.

    +
    +
    + + Holy guacamole! Best check yo self, you're not looking too good. +
    +
    + +
    +
    + +

    Oh snap! You got an error!

    +

    Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

    +

    + + +

    +
    +
    + + +

    Usage

    +

    Enable dismissal of an alert via JavaScript:

    + {% highlight js %}$(".alert").alert(){% endhighlight %} + +

    Markup

    +

    Just add data-dismiss="alert" to your close button to automatically give an alert close functionality.

    + {% highlight html %}{% endhighlight %} + +

    Methods

    + +

    $().alert()

    +

    Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the .fade and .in class already applied to them.

    + +

    .alert('close')

    +

    Closes an alert.

    + {% highlight js %}$(".alert").alert('close'){% endhighlight %} + + +

    Events

    +

    Bootstrap's alert class exposes a few events for hooking into alert functionality.

    +
    + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    close.bs.alertThis event fires immediately when the close instance method is called.
    closed.bs.alertThis event is fired when the alert has been closed (will wait for CSS transitions to complete).
    +
    +{% highlight js %} +$('#my-alert').bind('closed.bs.alert', function () { + // do something… +}) +{% endhighlight %} +
    + + + + +
    + + +

    Example uses

    +

    Do more with buttons. Control button states or create groups of buttons for more components like toolbars.

    + +

    Stateful

    +

    Add data-loading-text="Loading..." to use a loading state on a button.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Single toggle

    +

    Add data-toggle="button" to activate toggling on a single button.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Checkbox

    +

    Add data-toggle="buttons" to a group of checkboxes for checkbox style toggling on btn-group.

    +
    +
    + + + +
    +
    +{% highlight html %} +
    + + + +
    +{% endhighlight %} + +

    Radio

    +

    Add data-toggle="buttons" to a group of radio inputs for radio style toggling on btn-group.

    +
    +
    + + + +
    +
    +{% highlight html %} +
    + + + +
    +{% endhighlight %} + + +

    Usage

    +

    Enable buttons via JavaScript:

    +{% highlight js %} +$('.btn-group').button() +{% endhighlight %} + +

    Markup

    +

    Data attributes are integral to the button plugin. Check out the example code below for the various markup types.

    + +

    Options

    +

    None

    + +

    Methods

    + +

    $().button('toggle')

    +

    Toggles push state. Gives the button the appearance that it has been activated.

    +
    +

    Auto toggling

    +

    You can enable auto toggling of a button by using the data-toggle attribute.

    +
    +{% highlight html %} + +{% endhighlight %} + +

    $().button('loading')

    +

    Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute data-loading-text. +

    +{% highlight html %} + +{% endhighlight %} + +
    +

    Cross-browser compatibility

    +

    Firefox persists the disabled state across page loads. A workaround for this is to use autocomplete="off".

    +
    + +

    $().button('reset')

    +

    Resets button state - swaps text to original text.

    + +

    $().button(string)

    +

    Resets button state - swaps text to any data defined text state.

    +{% highlight html %} + + +{% endhighlight %} +
    + + + + +
    + + +

    About

    +

    Get base styles and flexible support for collapsible components like accordions and navigation.

    + +
    +

    Plugin dependency

    +

    Collapse requires the transitions plugin to be included in your version of Bootstrap.

    +
    + +

    Example accordion

    +

    Using the collapse plugin, we built a simple accordion by extending the panel component.

    + +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    +
    +{% highlight html %} +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    +{% endhighlight %} + +

    You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.

    +{% highlight html %} + + +
    ...
    +{% endhighlight %} + + +

    Usage

    +

    The collapse plugin utilizes a few classes to handle the heavy lifting:

    +
      +
    • .collapse hides the content
    • +
    • .collapse.in shows the content
    • +
    • .collapsing is added when the transition starts, and removed when it finishes
    • +
    +

    These classes can be found in component-animations.less.

    + +

    Via data attributes

    +

    Just add data-toggle="collapse" and a data-target to element to automatically assign control of a collapsible element. The data-target attribute accepts a CSS selector to apply the collapse to. Be sure to add the class collapse to the collapsible element. If you'd like it to default open, add the additional class in.

    +

    To add accordion-like group management to a collapsible control, add the data attribute data-parent="#selector". Refer to the demo to see this in action.

    + +

    Via JavaScript

    +

    Enable manually with:

    +{% highlight js %} +$(".collapse").collapse() +{% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-parent="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    parentselectorfalseIf selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior - this dependent on the accordion-group class)
    togglebooleantrueToggles the collapsible element on invocation
    +
    + +

    Methods

    + +

    .collapse(options)

    +

    Activates your content as a collapsible element. Accepts an optional options object. +{% highlight js %} +$('#myCollapsible').collapse({ + toggle: false +}) +{% endhighlight %} + +

    .collapse('toggle')

    +

    Toggles a collapsible element to shown or hidden.

    + +

    .collapse('show')

    +

    Shows a collapsible element.

    + +

    .collapse('hide')

    +

    Hides a collapsible element.

    + +

    Events

    +

    Bootstrap's collapse class exposes a few events for hooking into collapse functionality.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.collapseThis event fires immediately when the show instance method is called.
    shown.bs.collapseThis event is fired when a collapse element has been made visible to the user (will wait for CSS transitions to complete).
    hide.bs.collapse + This event is fired immediately when the hide method has been called. +
    hidden.bs.collapseThis event is fired when a collapse element has been hidden from the user (will wait for CSS transitions to complete).
    +
    +{% highlight js %} +$('#myCollapsible').on('hidden.bs.collapse', function () { + // do something… +}) +{% endhighlight %} +
    + + + + +
    + + + +

    The slideshow below shows a generic plugin and component for cycling through elements like a carousel.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + +

    Optional captions

    +

    Add captions to your slides easily with the .carousel-caption element within any .item. Place just about any optional HTML within there and it will be automatically aligned and formatted.

    +
    + +
    +{% highlight html %} +
    + ... + +
    +{% endhighlight %} + +
    +

    Accessibility issue

    +

    The carousel component is generally not compliant with accessibility standards. If you need to be compliant, please consider other options for presenting your content.

    +
    + + + +

    Via data attributes

    +

    Use data attributes to easily control the position of the carousel. data-slide accepts the keywords prev or next, which alters the slide position relative to its current position. Alternatively, use data-slide-to to pass a raw slide index to the carousel data-slide-to="2", which shifts the slide position to a particular index beginning with 0.

    +

    The data-ride="carousel" attribute is used to mark a carousel as animating starting at page load.

    + +

    Via JavaScript

    +

    Call carousel manually with:

    +{% highlight js %} +$('.carousel').carousel() +{% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-interval="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    intervalnumber5000The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.
    pausestring"hover"Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave.
    wrapbooleantrueWhether the carousel should cycle continuously or have hard stops.
    +
    + +

    Methods

    + +

    .carousel(options)

    +

    Initializes the carousel with an optional options object and starts cycling through items.

    +{% highlight js %} +$('.carousel').carousel({ + interval: 2000 +}) +{% endhighlight %} + +

    .carousel('cycle')

    +

    Cycles through the carousel items from left to right.

    + +

    .carousel('pause')

    +

    Stops the carousel from cycling through items.

    + + +

    .carousel(number)

    +

    Cycles the carousel to a particular frame (0 based, similar to an array).

    + +

    .carousel('prev')

    +

    Cycles to the previous item.

    + +

    .carousel('next')

    +

    Cycles to the next item.

    + +

    Events

    +

    Bootstrap's carousel class exposes two events for hooking into carousel functionality.

    +
    + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    slide.bs.carouselThis event fires immediately when the slide instance method is invoked.
    slid.bs.carouselThis event is fired when the carousel has completed its slide transition.
    +
    +{% highlight js %} +$('#myCarousel').on('slide.bs.carousel', function () { + // do something… +}) +{% endhighlight %} +
    + + + + +
    + + +

    Example

    +

    The subnavigation on the left is a live demo of the affix plugin.

    + +
    + +

    Usage

    + +

    Via data attributes

    +

    To easily add affix behavior to any element, just add data-spy="affix" to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.

    + +{% highlight html %} +
    ...
    +{% endhighlight %} + +
    +

    Requires independent styling ;)

    +

    + Affix toggles between three states/classes: .affix, .affix-top, and .affix-bottom. You must provide the styles for these classes yourself (independent of this plugin). + The .affix-top class should be in the regular flow of the document. The .affix class should be position: fixed. And .affix-bottom should be position: absolute. Note: .affix-bottom is special in that the plugin will place the element with JS relative to the offset: { bottom: number } option you've provided. +

    +
    + +

    Via JavaScript

    +

    Call the affix plugin via JavaScript:

    +{% highlight js %} + $('#myAffix').affix({ + offset: { + top: 100 + , bottom: function () { + return (this.bottom = $('.bs-footer').outerHeight(true)) + } + } + }) +{% endhighlight %} + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-offset-top="200".

    + +
    + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    offsetnumber | function | object10Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and bottom directions. To provide a unique, bottom and top offset just provide an object offset: { top: 10 } or offset: { top: 10, bottom: 5 }. Use a function when you need to dynamically calculate an offset.
    +
    + +
    diff --git a/app/bower_components/sass-bootstrap/js/affix.js b/app/bower_components/sass-bootstrap/js/affix.js new file mode 100644 index 0000000..7d111ec --- /dev/null +++ b/app/bower_components/sass-bootstrap/js/affix.js @@ -0,0 +1,126 @@ +/* ======================================================================== + * Bootstrap: affix.js v3.0.2 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + this.$window = $(window) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = + this.unpin = null + + this.checkPosition() + } + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0 + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var scrollHeight = $(document).height() + var scrollTop = this.$window.scrollTop() + var position = this.$element.offset() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top() + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() + + var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : + offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : + offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false + + if (this.affixed === affix) return + if (this.unpin) this.$element.css('top', '') + + this.affixed = affix + this.unpin = affix == 'bottom' ? position.top - scrollTop : null + + this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : '')) + + if (affix == 'bottom') { + this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + var old = $.fn.affix + + $.fn.affix = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom) data.offset.bottom = data.offsetBottom + if (data.offsetTop) data.offset.top = data.offsetTop + + $spy.affix(data) + }) + }) + +}(jQuery); diff --git a/app/bower_components/sass-bootstrap/js/alert.js b/app/bower_components/sass-bootstrap/js/alert.js new file mode 100644 index 0000000..031d72a --- /dev/null +++ b/app/bower_components/sass-bootstrap/js/alert.js @@ -0,0 +1,98 @@ +/* ======================================================================== + * Bootstrap: alert.js v3.0.2 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); diff --git a/app/bower_components/sass-bootstrap/js/button.js b/app/bower_components/sass-bootstrap/js/button.js new file mode 100644 index 0000000..0145689 --- /dev/null +++ b/app/bower_components/sass-bootstrap/js/button.js @@ -0,0 +1,109 @@ +/* ======================================================================== + * Bootstrap: button.js v3.0.2 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d); + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + .prop('checked', !this.$element.hasClass('active')) + .trigger('change') + if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') + } + + this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(jQuery); diff --git a/app/bower_components/sass-bootstrap/js/carousel.js b/app/bower_components/sass-bootstrap/js/carousel.js new file mode 100644 index 0000000..902d4d7 --- /dev/null +++ b/app/bower_components/sass-bootstrap/js/carousel.js @@ -0,0 +1,217 @@ +/* ======================================================================== + * Bootstrap: carousel.js v3.0.2 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000 + , pause: 'hover' + , wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + this.sliding = true + + isCycling && this.pause() + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + .emulateTransitionEnd(600) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(jQuery); diff --git a/app/bower_components/sass-bootstrap/js/collapse.js b/app/bower_components/sass-bootstrap/js/collapse.js new file mode 100644 index 0000000..9967b16 --- /dev/null +++ b/app/bower_components/sass-bootstrap/js/collapse.js @@ -0,0 +1,179 @@ +/* ======================================================================== + * Bootstrap: collapse.js v3.0.2 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(jQuery); diff --git a/app/bower_components/sass-bootstrap/js/dropdown.js b/app/bower_components/sass-bootstrap/js/dropdown.js new file mode 100644 index 0000000..d5da638 --- /dev/null +++ b/app/bower_components/sass-bootstrap/js/dropdown.js @@ -0,0 +1,154 @@ +/* ======================================================================== + * Bootstrap: dropdown.js v3.0.2 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + var $el = $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we we use a backdrop because click events don't delegate + $('