├── .env
├── .gitignore
├── .ruby-version
├── 404.md
├── Gemfile
├── Gemfile.lock
├── Procfile
├── Rakefile
├── Readme.md
├── _bowercopy.sh
├── _chapters
├── 0
│ ├── 0-setup.md
│ ├── 1-prerequisites.md
│ ├── 2-installing-ruby.md
│ ├── 3-verifying.md
│ └── 4-github.md
├── 1
│ ├── 0-up-and-running.md
│ ├── 1-sinatra-basics.md
│ ├── 2-ruby-file.md
│ ├── 3-html-forms.md
│ └── 4-post-requests.md
├── 2
│ ├── 0-intro.md
│ ├── 1-what-is-css.md
│ ├── 2-css-frameworks.md
│ └── 3-debugging-css.md
├── 3
│ ├── 0-intro.md
│ └── 1-additional-help.md
├── 4
│ ├── 0-intro.md
│ ├── 1-database-basics.md
│ ├── 2-creating-databases.md
│ └── 3-using-activerecord.md
├── 5
│ ├── 0-intro.md
│ ├── 1-basic-concepts.md
│ ├── 2-setup.md
│ ├── 3-app-edits.md
│ ├── 4-deploying.md
│ └── 5-readmes-and-deleting.md
├── 6
│ ├── 0-intro.md
│ └── 1-lab-6-hints.md
├── 7
│ ├── 0-intro.md
│ └── 1-project.md
├── 8
│ └── 0-intro.md
├── 9
│ ├── 0-intro.md
│ └── 1-authentication.md
├── 10
│ └── 0-intro.md
├── 11
│ └── 0-intro.md
├── 12
│ ├── 0-resources.md
│ ├── 1-example-repo.md
│ ├── 2-git-cheatsheet.md
│ └── 3-about-this-site.md
└── 0-schedule.md
├── _config.yml
├── _includes
├── analytics.js
├── app.js
├── bootstrap.min.js
├── d3.min.js
├── footer.html
├── head.html
├── header.html
├── jquery.min.js
└── trianglify.min.js
├── _layouts
├── blog.html
├── default.html
├── intro.html
└── schedule.html
├── _plugins
├── schedule.rb
├── sorted_chapters.rb
└── toc.rb
├── _sass
├── _pygments.scss
└── _variables.scss
├── _templates
└── intro.md
├── blog.html
├── bower.json
├── bower_components
├── bootstrap-sass-official
│ ├── .bower.json
│ ├── CHANGELOG.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── README.md
│ ├── bower.json
│ ├── composer.json
│ └── vendor
│ │ └── assets
│ │ ├── fonts
│ │ └── bootstrap
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ └── glyphicons-halflings-regular.woff
│ │ ├── javascripts
│ │ ├── bootstrap.js
│ │ └── bootstrap
│ │ │ ├── affix.js
│ │ │ ├── alert.js
│ │ │ ├── button.js
│ │ │ ├── carousel.js
│ │ │ ├── collapse.js
│ │ │ ├── dropdown.js
│ │ │ ├── modal.js
│ │ │ ├── popover.js
│ │ │ ├── scrollspy.js
│ │ │ ├── tab.js
│ │ │ ├── tooltip.js
│ │ │ └── transition.js
│ │ └── stylesheets
│ │ ├── bootstrap.scss
│ │ └── bootstrap
│ │ ├── _alerts.scss
│ │ ├── _badges.scss
│ │ ├── _breadcrumbs.scss
│ │ ├── _button-groups.scss
│ │ ├── _buttons.scss
│ │ ├── _carousel.scss
│ │ ├── _close.scss
│ │ ├── _code.scss
│ │ ├── _component-animations.scss
│ │ ├── _dropdowns.scss
│ │ ├── _forms.scss
│ │ ├── _glyphicons.scss
│ │ ├── _grid.scss
│ │ ├── _input-groups.scss
│ │ ├── _jumbotron.scss
│ │ ├── _labels.scss
│ │ ├── _list-group.scss
│ │ ├── _media.scss
│ │ ├── _mixins.scss
│ │ ├── _modals.scss
│ │ ├── _navbar.scss
│ │ ├── _navs.scss
│ │ ├── _normalize.scss
│ │ ├── _pager.scss
│ │ ├── _pagination.scss
│ │ ├── _panels.scss
│ │ ├── _popovers.scss
│ │ ├── _print.scss
│ │ ├── _progress-bars.scss
│ │ ├── _responsive-utilities.scss
│ │ ├── _scaffolding.scss
│ │ ├── _tables.scss
│ │ ├── _theme.scss
│ │ ├── _thumbnails.scss
│ │ ├── _tooltip.scss
│ │ ├── _type.scss
│ │ ├── _utilities.scss
│ │ ├── _variables.scss
│ │ ├── _wells.scss
│ │ └── bootstrap.scss
├── bootstrap
│ ├── .bower.json
│ ├── Gruntfile.js
│ ├── LICENSE
│ ├── README.md
│ ├── bower.json
│ ├── dist
│ │ ├── css
│ │ │ ├── bootstrap-theme.css
│ │ │ ├── bootstrap-theme.css.map
│ │ │ ├── bootstrap-theme.min.css
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ └── bootstrap.min.css
│ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ └── glyphicons-halflings-regular.woff
│ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ └── bootstrap.min.js
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ ├── grunt
│ │ ├── bs-glyphicons-data-generator.js
│ │ ├── bs-lessdoc-parser.js
│ │ ├── bs-raw-files-generator.js
│ │ └── shrinkwrap.js
│ ├── js
│ │ ├── affix.js
│ │ ├── alert.js
│ │ ├── button.js
│ │ ├── carousel.js
│ │ ├── collapse.js
│ │ ├── dropdown.js
│ │ ├── modal.js
│ │ ├── popover.js
│ │ ├── scrollspy.js
│ │ ├── tab.js
│ │ ├── tooltip.js
│ │ └── transition.js
│ ├── less
│ │ ├── alerts.less
│ │ ├── badges.less
│ │ ├── bootstrap.less
│ │ ├── breadcrumbs.less
│ │ ├── button-groups.less
│ │ ├── buttons.less
│ │ ├── carousel.less
│ │ ├── close.less
│ │ ├── code.less
│ │ ├── component-animations.less
│ │ ├── dropdowns.less
│ │ ├── forms.less
│ │ ├── glyphicons.less
│ │ ├── grid.less
│ │ ├── input-groups.less
│ │ ├── jumbotron.less
│ │ ├── labels.less
│ │ ├── list-group.less
│ │ ├── media.less
│ │ ├── mixins.less
│ │ ├── modals.less
│ │ ├── navbar.less
│ │ ├── navs.less
│ │ ├── normalize.less
│ │ ├── pager.less
│ │ ├── pagination.less
│ │ ├── panels.less
│ │ ├── popovers.less
│ │ ├── print.less
│ │ ├── progress-bars.less
│ │ ├── responsive-utilities.less
│ │ ├── scaffolding.less
│ │ ├── tables.less
│ │ ├── theme.less
│ │ ├── thumbnails.less
│ │ ├── tooltip.less
│ │ ├── type.less
│ │ ├── utilities.less
│ │ ├── variables.less
│ │ └── wells.less
│ ├── package.json
│ └── test-infra
│ │ ├── README.md
│ │ ├── npm-shrinkwrap.canonical.json
│ │ ├── requirements.txt
│ │ ├── s3_cache.py
│ │ ├── sauce_browsers.yml
│ │ └── uncached-npm-install.sh
├── d3
│ ├── .bower.json
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── README.md
│ ├── bower.json
│ ├── composer.json
│ ├── d3.js
│ └── d3.min.js
├── jquery
│ ├── .bower.json
│ ├── MIT-LICENSE.txt
│ ├── bower.json
│ ├── dist
│ │ ├── jquery.js
│ │ ├── jquery.min.js
│ │ └── jquery.min.map
│ └── src
│ │ ├── ajax.js
│ │ ├── ajax
│ │ ├── jsonp.js
│ │ ├── load.js
│ │ ├── parseJSON.js
│ │ ├── parseXML.js
│ │ ├── script.js
│ │ ├── var
│ │ │ ├── nonce.js
│ │ │ └── rquery.js
│ │ └── xhr.js
│ │ ├── attributes.js
│ │ ├── attributes
│ │ ├── attr.js
│ │ ├── classes.js
│ │ ├── prop.js
│ │ ├── support.js
│ │ └── val.js
│ │ ├── callbacks.js
│ │ ├── core.js
│ │ ├── core
│ │ ├── access.js
│ │ ├── init.js
│ │ ├── parseHTML.js
│ │ ├── ready.js
│ │ └── var
│ │ │ └── rsingleTag.js
│ │ ├── css.js
│ │ ├── css
│ │ ├── addGetHookIf.js
│ │ ├── curCSS.js
│ │ ├── defaultDisplay.js
│ │ ├── hiddenVisibleSelectors.js
│ │ ├── support.js
│ │ ├── swap.js
│ │ └── var
│ │ │ ├── cssExpand.js
│ │ │ ├── getStyles.js
│ │ │ ├── isHidden.js
│ │ │ ├── rmargin.js
│ │ │ └── rnumnonpx.js
│ │ ├── data.js
│ │ ├── data
│ │ ├── Data.js
│ │ ├── accepts.js
│ │ └── var
│ │ │ ├── data_priv.js
│ │ │ └── data_user.js
│ │ ├── deferred.js
│ │ ├── deprecated.js
│ │ ├── dimensions.js
│ │ ├── effects.js
│ │ ├── effects
│ │ ├── Tween.js
│ │ └── animatedSelector.js
│ │ ├── event.js
│ │ ├── event
│ │ ├── alias.js
│ │ └── support.js
│ │ ├── exports
│ │ ├── amd.js
│ │ └── global.js
│ │ ├── intro.js
│ │ ├── jquery.js
│ │ ├── manipulation.js
│ │ ├── manipulation
│ │ ├── _evalUrl.js
│ │ ├── support.js
│ │ └── var
│ │ │ └── rcheckableType.js
│ │ ├── offset.js
│ │ ├── outro.js
│ │ ├── queue.js
│ │ ├── queue
│ │ └── delay.js
│ │ ├── selector-native.js
│ │ ├── selector-sizzle.js
│ │ ├── selector.js
│ │ ├── serialize.js
│ │ ├── sizzle
│ │ └── dist
│ │ │ ├── sizzle.js
│ │ │ ├── sizzle.min.js
│ │ │ └── sizzle.min.map
│ │ ├── traversing.js
│ │ ├── traversing
│ │ ├── findFilter.js
│ │ └── var
│ │ │ └── rneedsContext.js
│ │ ├── var
│ │ ├── arr.js
│ │ ├── class2type.js
│ │ ├── concat.js
│ │ ├── hasOwn.js
│ │ ├── indexOf.js
│ │ ├── pnum.js
│ │ ├── push.js
│ │ ├── rnotwhite.js
│ │ ├── slice.js
│ │ ├── strundefined.js
│ │ ├── support.js
│ │ ├── toString.js
│ │ └── trim.js
│ │ └── wrap.js
└── trianglify
│ ├── .bower.json
│ ├── LICENSE
│ ├── Readme.md
│ ├── bower.json
│ ├── examples
│ ├── example0.jpg
│ ├── example1.jpg
│ ├── example1.svg
│ ├── example2.jpg
│ ├── example2.svg
│ ├── example3.jpg
│ └── example3.svg
│ ├── gulpfile.js
│ ├── index.html
│ ├── package.json
│ ├── trianglify.js
│ └── trianglify.min.js
├── config.ru
├── css
└── style.scss
├── favicon.png
├── fonts
├── glyphicons-halflings-regular.eot
├── glyphicons-halflings-regular.svg
├── glyphicons-halflings-regular.ttf
└── glyphicons-halflings-regular.woff
├── images
├── gandalf.jpg
├── gettingstarted.png
├── github-create.png
├── github-name.png
└── github-tag.png
├── index.md
└── js
├── jquery.js
├── jquery.min.map
└── scripts.js
/.env:
--------------------------------------------------------------------------------
1 | export BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-ruby
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | _site
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.1.2
2 |
--------------------------------------------------------------------------------
/404.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: 404
4 | summary: Page Not Found
5 | ---
6 |
7 | 
8 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | ruby "2.1.1"
2 | source 'https://rubygems.org'
3 |
4 | gem 'jekyll', '>= 2.0.3'
5 | gem 'rouge', '~> 1.3.3'
6 | gem 'puma', '~> 2.8.1'
7 | gem 'rack-contrib', '~> 1.1.0'
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | blankslate (2.1.2.4)
5 | celluloid (0.15.2)
6 | timers (~> 1.1.0)
7 | classifier (1.3.4)
8 | fast-stemmer (>= 1.0.0)
9 | coffee-script (2.2.0)
10 | coffee-script-source
11 | execjs
12 | coffee-script-source (1.7.0)
13 | colorator (0.1)
14 | execjs (2.2.1)
15 | fast-stemmer (1.0.2)
16 | ffi (1.9.3)
17 | jekyll (2.1.0)
18 | classifier (~> 1.3)
19 | colorator (~> 0.1)
20 | jekyll-coffeescript (~> 1.0)
21 | jekyll-gist (~> 1.0)
22 | jekyll-paginate (~> 1.0)
23 | jekyll-sass-converter (~> 1.0)
24 | jekyll-watch (~> 1.0)
25 | kramdown (~> 1.3)
26 | liquid (~> 2.6.1)
27 | mercenary (~> 0.3.3)
28 | pygments.rb (~> 0.6.0)
29 | redcarpet (~> 3.1)
30 | safe_yaml (~> 1.0)
31 | toml (~> 0.1.0)
32 | jekyll-coffeescript (1.0.0)
33 | coffee-script (~> 2.2)
34 | jekyll-gist (1.1.0)
35 | jekyll-paginate (1.0.0)
36 | jekyll-sass-converter (1.0.0)
37 | sass (~> 3.2)
38 | jekyll-watch (1.0.0)
39 | listen (~> 2.7)
40 | kramdown (1.4.0)
41 | liquid (2.6.1)
42 | listen (2.7.9)
43 | celluloid (>= 0.15.2)
44 | rb-fsevent (>= 0.9.3)
45 | rb-inotify (>= 0.9)
46 | mercenary (0.3.3)
47 | parslet (1.5.0)
48 | blankslate (~> 2.0)
49 | posix-spawn (0.3.8)
50 | puma (2.8.2)
51 | rack (>= 1.1, < 2.0)
52 | pygments.rb (0.6.0)
53 | posix-spawn (~> 0.3.6)
54 | yajl-ruby (~> 1.1.0)
55 | rack (1.5.2)
56 | rack-contrib (1.1.0)
57 | rack (>= 0.9.1)
58 | rb-fsevent (0.9.4)
59 | rb-inotify (0.9.5)
60 | ffi (>= 0.5.0)
61 | redcarpet (3.1.2)
62 | rouge (1.3.4)
63 | safe_yaml (1.0.3)
64 | sass (3.3.9)
65 | timers (1.1.0)
66 | toml (0.1.1)
67 | parslet (~> 1.5.0)
68 | yajl-ruby (1.1.0)
69 |
70 | PLATFORMS
71 | ruby
72 |
73 | DEPENDENCIES
74 | jekyll (>= 2.0.3)
75 | puma (~> 2.8.1)
76 | rack-contrib (~> 1.1.0)
77 | rouge (~> 1.3.3)
78 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: bundle exec puma -p $PORT config.ru
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | namespace :assets do
2 | desc 'Precompile assets'
3 | task :precompile do
4 | sh "bundle exec jekyll build"
5 | end
6 | end
--------------------------------------------------------------------------------
/Readme.md:
--------------------------------------------------------------------------------
1 | # Sensible Web Development
2 |
3 | This is the online text for a web development course I'm teaching. It contains background information about each lesson as well as homework assignments, links to external resources, and troubleshooting tips.
4 |
5 | See it in action at [http://webdev.qrohlf.com](http://webdev.qrohlf.com)!
6 |
--------------------------------------------------------------------------------
/_bowercopy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # quick and dirty script to copy the relevant bower files to their appropriate places. Totally a hack.
4 |
5 | # trianglify
6 | cp -f bower_components/trianglify/trianglify.min.js _includes
7 |
8 | # glyphicons
9 | cp -f bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/* fonts
10 |
11 | # jquery
12 | cp -f bower_components/jquery/dist/jquery.min.js _includes
13 | cp -f bower_components/jquery/dist/jquery.js js
14 | cp -f bower_components/jquery/dist/jquery.min.map js
15 |
16 | # bootstrap
17 | cp -f bower_components/bootstrap/dist/js/bootstrap.min.js _includes
18 |
19 | # d3
20 | cp -f bower_components/d3/d3.min.js _includes
21 |
--------------------------------------------------------------------------------
/_chapters/0-schedule.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Course Schedule
3 | summary: (subject to change)
4 | layout: schedule
5 | ---
6 |
7 | # Schedule
8 | This is a general overview for the whole course. If you have a question about a specific week or lab, you can find more info in the introduction to the corresponding chapter.
9 |
10 | **Each lab is assigned in class and is due at the beginning of class the following week (i.e we will talk about Lab 0 in class on Week 0, and it will be due before class on Week 1)**.
11 |
--------------------------------------------------------------------------------
/_chapters/0/0-setup.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Setup
3 | summary: Getting your system ready for this class
4 | layout: intro
5 | index: 0
6 |
7 | date:
8 | September 4
9 |
10 | overview:
11 | This week, we'll be getting our environments set up with Ruby and some other tools that are necessary for this class, as well as going over some basic HTML syntax and the GitHub turn-in system.
12 |
13 | reading:
14 | Please read the short MDN Introduction to HTML and complete the [Try Git](http://try.github.io) exercises before class.
15 |
16 | due:
17 | Development environment set up (instructions in sections 0.1-0.3 in this chapter) and GitHub account created
18 |
19 | workshop:
20 | HTTP and HTML basics, and how to turn in assignments via GitHub.
21 |
22 | assignment:
23 | title: "Lab 0: HTML Todo"
24 | summary: For next week, write a todo list in HTML.
25 | requirements:
26 | - You should use an appropriate list element (ul
or li
for your list)
27 | - Your list should include at least 3 items with due dates and 3 items without due dates.
28 | - Your list should pass the w3c validator with no errors.
29 | - "Optional: use CSS to style your list"
30 | due: before next week's class
31 | tag: v0.0.0
32 | ---
33 |
--------------------------------------------------------------------------------
/_chapters/0/1-prerequisites.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Prerequisites
3 | summary: Tools to set up before the first day of class
4 | layout: default
5 | index: 0.1
6 | ---
7 | # Please have your environment ready by Thursday, September 4th
8 | We're going to be using some tools that you probably haven't run across yet in this course, so please find some time before the first lab class to get your environment set up.
9 |
10 | While I highly recommend that you use a machine that you own and have full admin access to for this class (i.e. your laptop), some of this *might* work on the Maclab computers.
11 |
12 | ## Operating System
13 |
14 | You will need to have a Unix-based OS (OSX or Ubuntu recommended) on your machine for this course.
15 |
16 | - If you're a Mac user and have OSX 10.8 or 10.9 installed, you're good to go (here's [how to check your version of OSX](http://support.apple.com/kb/ht1633))
17 | - If you're a Windows user, you should install Ubuntu 14.04 LTS to a secondary partition. You can download a free Ubuntu installer image [here](http://www.ubuntu.com/download/desktop/), and an installation guide [here](http://www.ubuntu.com/download/desktop/install-ubuntu-desktop).
18 | - I will be available to help troubleshoot Linux install issues after the first class on Tuesday (Sep. 2).
19 |
20 | ## GitHub
21 |
22 | We will be using [GitHub](https://github.com) to turn in assignments for this course. If you don't have a GitHub account, please [create one now](https://github.com/join).
23 |
24 | ## Tools
25 |
26 | We will be using the following tools and libraries in this course
27 |
28 | - Git
29 | - Ruby 2.1.1
30 | - Bundler
31 | - Sqlite3
32 |
33 | # OSX Setup
34 |
35 | ### Homebrew
36 |
37 | [Homebrew](http://brew.sh/) is a package manager for OSX. It's incredibly helpful for setting up a development environment, and is required if you plan to use OSX for this course.
38 |
39 | To install it, run this in your terminal:
40 |
41 | ```sh
42 | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
43 | ```
44 |
45 | ### Git
46 | OSX comes with an older version of Git. It's fine for our purposes, but if you want to have the newest version you use Homebrew to upgrade Git with `brew install git`.
47 |
48 | ### Sqlite3
49 | OSX 10.8 and 10.9 come with a version of sqlite3 that's sufficiently up-to-date for our purposes. You can verify that it's installed by running `sqlite3 --version`.
50 |
51 | ### Ruby and Bundler
52 | See the next section for instructions on how to install Ruby and Bundler.
53 |
54 | # Ubuntu Setup
55 |
56 | ### Git
57 |
58 | You can install Git on Ubuntu via apt:
59 |
60 | ```sh
61 | sudo apt-get install git
62 | ```
63 |
64 | ### Sqlite3
65 |
66 | On Ubuntu, you'll need to install sqlite with apt:
67 |
68 | ``` sh
69 | sudo apt-get install sqlite3 libsqlite3-dev
70 | ```
71 |
72 | ### Ruby and Bundler
73 | See the next section for instructions on how to install Ruby and Bundler.
74 |
--------------------------------------------------------------------------------
/_chapters/0/3-verifying.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Verifying Your Setup
3 | summary: Making sure you're good to go
4 | layout: default
5 | index: 0.3
6 | ---
7 |
8 | # It's time to test your setup!
9 |
10 | Now that you have Ruby 2.1.1, bundler, and SQLite installed, you should be able to run Ruby-based web applications locally.
11 |
12 | ## Preflight Check
13 | First, make sure that you've got all of the tools from the previous section installed:
14 |
15 | ```sh
16 | git --version # should be version 1.8.*
17 | sqlite3 --version # should be version 3.*
18 | ruby --verison # should be version 2.1.1-*
19 | bundle --version # should be version 1.6.*
20 | ```
21 |
22 | If any of those commands give you errors, go back and try reinstalling the relevant tools. A quick tip - Google is your friend when it comes to cryptic error messages.
23 |
24 | ## Running Your First Sinatra App
25 | Once you've verified that all of the dependencies for Ruby web development are installed, you can try running an app!
26 |
27 | First, clone the example app with Git:
28 |
29 | ```sh
30 | git clone https://github.com/qrohlf/webdev-gettingstarted.git
31 | ```
32 |
33 | Next, go into the app directory and install the dependencies with bundler
34 |
35 | ```sh
36 | cd webdev-gettingstarted
37 | bundle install
38 | ```
39 |
40 | Finally, run the app
41 |
42 | ```sh
43 | shotgun
44 | ```
45 |
46 | And you should be able to browse to http://localhost:9393 and see a screen that looks like this:
47 |
48 | 
49 |
50 | If you're not seeing a screen that looks like that, check the output of `shotgun` for error messages!
51 |
--------------------------------------------------------------------------------
/_chapters/1/0-up-and-running.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Ruby & Sinatra
3 | summary: An introduction to two powerful tools
4 | layout: intro
5 | index: 1
6 |
7 | date:
8 | September 11
9 |
10 | overview:
11 | This week focuses on introducing the concepts of server-side HTML generation, HTTP requests, and basic Ruby and Sinatra syntax. In this chapter, you'll find some helpful tips on how to read and write file with Ruby, how to write a simple GET request
12 |
13 | reading:
14 | Please watch [this screencast](https://www.destroyallsoftware.com/talks/wat) and complete the interactive lesson at http://tryruby.org/ **before class**.
15 |
16 |
17 | After class, you will probably want to read the sections on Routes, Conditions, and Static Files in the [Sinatra Readme](http://www.sinatrarb.com/intro.html). You may also want to check out the [MDN HTML Form Guide](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms) ([section 1](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/My_first_HTML_form) and [section 5](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/Sending_and_retrieving_form_data) are particularly relevant).
18 |
19 | due:
20 | You should have [Lab 0](/chapters/0/0-setup.html#assignment) completed before class.
21 |
22 | workshop:
23 | Introduction to web application development
24 |
25 | assignment:
26 | title: "Lab 1: MVC Todo"
27 | summary: We will be rewriting our static todo HTML page as a Sinatra application. Our app will read in a list of todo items from a text file and then render them as HTML when it recieves a GET request from the browser.
28 | requirements:
29 | - Your app should be able to read in a list of todo items with optional due dates from a text file
30 | - It should respond to GET requests at the site root with an HTML representation of your todo list with no syntax errors
31 | - It should use a view template for rendering the html
32 | - It should have a form for submitting new todo items to the server via a POST request.
33 | - Your app should be in the root directory of your git repository.
34 | - You should remove any files that are not a part of your app from your git repo before submitting it.
35 | due: before next week's class
36 | tag: v0.1.0
37 | ---
38 |
--------------------------------------------------------------------------------
/_chapters/1/3-html-forms.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Submitting Data
3 | summary: How to use HTML forms to collect user input
4 | layout: default
5 | index: 1.3
6 | ---
7 | # Getting User Data
8 |
9 | Once you have a way to read and display your data, you'll need to implement a way to take data from the user and append it to the file. To do this, we'll use an HTML form! The [MDN Guide to HTML forms](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/My_first_HTML_form) is an excellent and comprehensive resource on how to write and use HTML forms. The example on this page is just a basic implementation to get you started - reading the MDN article is highly recommended!
10 |
11 | For our purposes, we'll need to collect two pieces of data: the task, and an optional due date. Here's what the form for that looks like:
12 |
13 | ```html
14 |
20 | ```
21 |
22 | We've defined a `
22 | ```
23 |
24 | And then process it in a callback in `app.rb`:
25 |
26 | ```ruby
27 | post '/some_endpoint' do
28 | some_user_data = params[:some_user_data]
29 | some_constant_data = params[:some_constant_data]
30 | # do some action with that data
31 | end
32 | ```
33 |
34 | ### Deleting an item on the server:
35 |
36 | ActiveRecord makes this easy
37 |
38 | ```ruby
39 | some_id = 7 #the id of the item you want to delete
40 | TodoItem.find(some_id).destroy
41 | ```
--------------------------------------------------------------------------------
/_chapters/6/0-intro.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Databases II
3 | layout: intro
4 | index: 6
5 |
6 | date:
7 | October 23
8 |
9 | overview:
10 | "This week, we'll be covering some more advanced database functionality - validations and relations. This will be the last lab of the class; we'll be moving into projects next week."
11 |
12 | reading:
13 | None this week.
14 |
15 | due:
16 | You should have Lab 5 completed prior to class.
17 |
18 | workshop:
19 | Advanced ActiveRecord - validations and relations.
20 |
21 | assignment:
22 | title: "Lab 6: Multi-user app"
23 | summary: Turn your app into a multi-user todo list using ActiveRecord relations
24 | requirements:
25 | - "while this spec has users in mind, it is also acceptable to do something else using a relation in your database. For example, instead of adding 'users', you could modify your app to handle multiple 'lists' of items"
26 | - write a migration to add a `users` table to your application.
27 | - "write a migration to add a `user_id` column to your `todo_items` table"
28 | - "each user should get their own todo list that they can add and delete items on"
29 | - the root route or index should now show a list of links to users' todo lists.
30 | due: before next week's class
31 | tag: v0.6.0
32 | ---
33 |
--------------------------------------------------------------------------------
/_chapters/7/0-intro.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Projects
3 | layout: intro
4 | index: 7
5 |
6 | date:
7 | October 30
8 |
9 | overview:
10 | This week will be an opportunity for you to ask questions about the final project, followed by a work session where you can get help with your project from me and your classmates.
11 |
12 | reading:
13 | 'Optional: read [this blog post](http://qrohlf.com/posts/creating-lisst/) about what I think makes for a successful project.'
14 |
15 | due:
16 | "Post 1-3 ideas for your project topic on this [GitHub thread](https://github.com/qrohlf/sensible-web-development/issues/3) by TUESDAY. I will follow up with you to make sure that you've got a feasible project topic chosen by THURSDAY. See the next page for some guidelines for the project."
17 |
18 | workshop:
19 | Projects Q&A/Office Hours
20 |
21 | ---
22 |
--------------------------------------------------------------------------------
/_chapters/7/1-project.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Project Details
3 | summary: Project guidelines and grading details
4 | layout: default
5 | index: 7.1
6 | ---
7 |
8 | # Guidelines for a good project:
9 |
10 | - **It should be something you think you would use.**
11 | - It should be at least as complex as the Todo app that we've already written.
12 | - It should be feasible to build in ~2-3 weeks.
13 |
14 | ## Your Project will be graded on:
15 |
16 | - **15% Technical ambition** - This is a check-off grade noting that your project was technically challenging in some way. If you're not sure whether your project meets this criteria, email me or talk to me during office hours or after class.
17 | - **15% Documentation** - Do you have a good README that explains what your project does, how to get it up and running, and the key design aspects that a person who wanted to modify your project would need to know? The demo is included in this portion of the grade.
18 | - **30% Design** - Does the way your application is structured make sense? Do you reduce repetition in your code by breaking repetitive aspects into new functions/views? Does your database schema fit your data?
19 | - **40% Execution** - Does it work well without bugs? Is it easy to use?
20 |
21 | ## Project Deadlines:
22 |
23 | - **Monday, November 3rd** - You've confirmed your project idea with me and are ready to start working on it.
24 | - **Thursday, November 13** - A "first draft" of your project with at least a Readme should be up on GitHub, with a link emailed to me (qrohlf@lclark.edu).
25 | - **Tuesday, December 2nd** - The first demo day - half of the projects are due, the other half should be nearly finished.
26 | - **Thursday, December 4th** - The second demo day - all of the projects are due.
--------------------------------------------------------------------------------
/_chapters/8/0-intro.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Project Q&A
3 | layout: intro
4 | index: 8
5 |
6 | date:
7 | November 6
8 |
9 | overview:
10 | Javascript!
11 |
12 | due:
13 | N/A
14 |
15 | workshop:
16 | Introduction to Javascript
17 |
18 | ---
19 |
--------------------------------------------------------------------------------
/_chapters/9/0-intro.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Authentication
3 | layout: intro
4 | index: 9
5 |
6 | date:
7 | November 13
8 |
9 | overview:
10 | Authentication with a username and password using the `has_secure_password` ActiveRecord feature.
11 |
12 | due:
13 | work on project
14 |
15 | workshop:
16 | Authentication
17 |
18 | ---
19 |
--------------------------------------------------------------------------------
/_chapters/9/1-authentication.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Authentication
3 | summary: How to add a login feature to your app
4 | layout: default
5 | index: 9.1
6 | ---
7 |
8 | # What We Covered In Class
9 |
10 | Here's a quick bullet-points reminder of the important concepts from the lecture:
11 |
12 | - To authenticate a user with a username and password securely, we need to *hash* their password before storing it in the database.
13 | - To prevent a user from having to send their username and password with every request, we need to use a *session cookie* to store a *token* that allows us to identify them as a logged-in user.
14 | - To prevent someone from being able to login as another user by spoofing the session cookie token, we need to *encrypt* the session cookie. (Fortunately, Sinatra does this for us!)
15 |
16 | # Code Example
17 |
18 | A cleaned-up version of the code from class has been posted to [https://github.com/qrohlf/webdev-examples](https://github.com/qrohlf/webdev-examples/tree/v0.7.0) (and tagged with `v0.7.0`).
19 |
20 | If you're interested in implementing user login in your final project, I highly recommend reading the `app.rb` file from the example app in it's entirety. I've added extensive comments explaining the ins and outs of implementing a simple login system with Sinatra.
21 |
22 | # Further Reading
23 |
24 | This version of the app introduces a few new concepts: Rack sessions, ActiveRecord `has_secure_password` methods, and ActiveRecord validations.
25 |
26 | - To learn more about using Rack sessions with Sinatra, see the [Sinatra README](http://www.sinatrarb.com/intro.html#Using%20Sessions).
27 | - To learn more about the `has_secure_password` features for ActiveRecord, see the [Rails documentation](http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html).
28 | - To learn more about ActiveRecord validations, see RailsGuides [Active Record Validations](http://guides.rubyonrails.org/active_record_validations.html) chapter.
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | name: Sensible Web Development
2 | markdown: redcarpet
3 | redcarpet:
4 | extensions:
5 | - tables
6 | - with_toc_data
7 | - fenced_code_blocks
8 | highlighter: pygments
9 | baseurl: ''
10 | tracking_id: UA-40241848-2
11 | tracking_property: qrohlf.com
12 | github_repo: qrohlf/sensible-web-development
13 | exclude: [compass.rb, config.ru, Gemfile, Gemfile.lock, Procfile, Rakefile, README.md, sass, unicorn.rb, vendor]
14 | collections:
15 | chapters:
16 | output: true
17 |
--------------------------------------------------------------------------------
/_includes/analytics.js:
--------------------------------------------------------------------------------
1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
4 | })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
5 |
6 | ga('create', '{{site.tracking_id}}', '{{site.tracking_property}}');
7 | ga('send', 'pageview');
--------------------------------------------------------------------------------
/_includes/footer.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_includes/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {% if page.title %}{{ page.title }} · {{ site.name }} {% else %}{{ site.name }} by @qrohlf{% endif %}
10 |
11 |
12 |
13 |
17 |
18 |
--------------------------------------------------------------------------------
/_includes/header.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_layouts/blog.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | {% for post in site.posts %}
6 |
7 | {{ post.summary }}
8 | {{ post.date | date: "%d %h %Y" }}
9 | {% endfor %}
--------------------------------------------------------------------------------
/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include head.html %}
5 |
6 |
7 |
8 | {% include header.html %}
9 |
10 |
11 |
12 |
13 |
22 |
23 | {{ content }}
24 | {% for chapter in site.sorted_chapters %}
25 | {% if chapter.url == page.url %}
26 | {% assign next = site.sorted_chapters[forloop.index] %}
27 | {% endif %}
28 | {% endfor %}
29 | {% if next.url %}
30 |
35 | {% endif %}
36 |
37 |
38 |
39 |
40 |
41 | {% include footer.html %}
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/_layouts/intro.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | Week {{page.index}}: {{page.subtitle}}
6 | Class date: {{page.date}}
7 |
8 | {% if page.overview %}
9 | Overview
10 | {{page.overview | markdownify}}
11 | {% endif %}
12 |
13 | {% if page.due %}
14 | Due
15 | {{page.due | markdownify}}
16 | {% endif %}
17 |
18 | {% if page.reading %}
19 | Reading
20 | {{page.reading | markdownify}}
21 | {% endif %}
22 |
23 | {{ content }}
24 |
25 | {% if page.assignment %}
26 | This Week's Assignment
27 |
28 |
29 |
{{page.assignment.title}}
30 |
31 |
32 |
{{page.assignment.summary | markdownify}}
33 |
Requirements:
34 |
35 | {% for req in page.assignment.requirements %}
36 | {{req | markdownify}}
37 | {% endfor %}
38 |
39 |
Due Date:
40 |
{{page.assignment.due | markdownify}}
41 |
42 |
45 |
46 |
47 | {% endif %}
48 |
--------------------------------------------------------------------------------
/_layouts/schedule.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | {{content}}
6 |
7 | {% schedule %}
--------------------------------------------------------------------------------
/_plugins/schedule.rb:
--------------------------------------------------------------------------------
1 | module Jekyll
2 | class ScheduleTag < Liquid::Tag
3 |
4 | def initialize(tag_name, text, tokens)
5 | super
6 | @text = text
7 | end
8 |
9 | def render(context)
10 | toc = []
11 | @site = context.registers[:site]
12 |
13 | output = []
14 | @site.config['chapter_groups'].each do |i, c|
15 | intro = c[0].data
16 | next if intro['layout'] != 'intro'
17 | output << ""
18 | output << "Assignments Due #{md(intro['due'])}" unless intro['due'].nil?
19 | output << "Reading Due #{md(intro['reading'])}" unless intro['reading'].nil?
20 | output << "Workshop Topic #{md(intro['workshop'])}" unless intro['workshop'].nil?
21 | output << "Lab Assigned #{md(intro['assignment']['title'])}" unless intro['assignment'].nil?
22 | end
23 | output.join('');
24 | end
25 |
26 | def md(string)
27 | converter = @site.getConverterImpl(::Jekyll::Converters::Markdown)
28 | converter.convert(string)
29 | end
30 | end
31 | end
32 |
33 | Liquid::Template.register_tag('schedule', Jekyll::ScheduleTag)
34 |
35 |
--------------------------------------------------------------------------------
/_plugins/sorted_chapters.rb:
--------------------------------------------------------------------------------
1 | module Next
2 | class Generator < Jekyll::Generator
3 | def generate(site)
4 | # puts site.collections["chapters"].docs.class
5 | chapter_groups = site.collections["chapters"].docs.group_by do |section|
6 | section.relative_path.split('/')[1] # group by chapter number
7 | end
8 | chapter_groups_sorted = Hash[chapter_groups.sort_by{|i, c| i.to_i}] # sort the chapters
9 | chapter_groups_sorted.each do |k, v|
10 | v.sort_by!{|i, c| i.to_i} if v.class == 'Array' # sort the sections
11 | end
12 | site.config['chapter_groups'] = chapter_groups_sorted
13 | site.config['sorted_chapters'] = chapter_groups_sorted.values.flatten
14 | end
15 | end
16 | end
--------------------------------------------------------------------------------
/_plugins/toc.rb:
--------------------------------------------------------------------------------
1 | module Jekyll
2 | class TocTag < Liquid::Tag
3 |
4 | def initialize(tag_name, text, tokens)
5 | super
6 | @text = text
7 | end
8 |
9 | def render(context)
10 | toc = []
11 | @page = context.environments.first["page"]
12 | current_chapter = @page['relative_path'].split('/')[1] unless @page['relative_path'].nil?
13 | current_chapter = '-1' unless current_chapter =~ /^\d+$/ #default to chapter 0
14 | site = context.registers[:site]
15 | @baseurl = site.config['baseurl']
16 |
17 | site.config['chapter_groups'].each do |i, c|
18 | toc << list_group_item(c[0])
19 | if i == current_chapter
20 | c.drop(1).each do |section|
21 | toc << list_group_item(section, ['section'])
22 | end
23 | end
24 | end
25 | " #{toc.join('')}
"
26 | end
27 |
28 | def list_group_item(section, classes=[])
29 | subtitle = section.data['subtitle']
30 | index = section.data['index']
31 | unless index.nil?
32 | label = "#{index} · #{subtitle}"
33 | else
34 | label = subtitle
35 | end
36 | classes << 'list-group-item'
37 | classes << 'active' if @page['url'] == section.url
38 | "#{label} "
39 | end
40 | end
41 | end
42 |
43 | Liquid::Template.register_tag('toc', Jekyll::TocTag)
44 |
--------------------------------------------------------------------------------
/_templates/intro.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: Week Title
3 | summary: week summary
4 | layout: intro
5 | index: 0
6 |
7 | date:
8 | month and day
9 |
10 | overview:
11 | a brief overview (markdown allowed) of the week's topics
12 |
13 | reading:
14 | a reminder of what reading is due
15 |
16 | due:
17 | a reminder of what assignments are due
18 |
19 | workshop:
20 | short description of the workshop topic
21 |
22 | assignment:
23 | title: "Lab 0: Lab Title"
24 | summary: a short description of the lab
25 | requirements:
26 | - A list of items that are required for the lab
27 | - these can have inline markdown formatting
28 | due: before next week's class
29 | tag: v0.0.0
30 | ---
--------------------------------------------------------------------------------
/blog.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Blog
3 | layout: blog
4 | permalink: blog/index.html
5 | ---
6 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "simplify",
3 | "version": "0.0.1",
4 | "authors": [
5 | "Quinn Rohlf "
6 | ],
7 | "description": "My jekyll theme",
8 | "license": "Copyright 2014 Quinn Rohlf",
9 | "homepage": "http://qrohlf.com",
10 | "private": true,
11 | "ignore": [
12 | "**/.*",
13 | "node_modules",
14 | "bower_components",
15 | "test",
16 | "tests"
17 | ],
18 | "dependencies": {
19 | "bootstrap-sass-official": "~3.1.1",
20 | "trianglify": "~0.1.3",
21 | "d3": "~3.4.6",
22 | "jquery": "~2.1.0",
23 | "bootstrap": "~3.1.1"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap-sass",
3 | "version": "3.1.1",
4 | "homepage": "https://github.com/twbs/bootstrap-sass",
5 | "authors": [
6 | "Thomas McDonald",
7 | "Tristan Harward",
8 | "Peter Gumeson",
9 | "Gleb Mazovetskiy"
10 | ],
11 | "description": "bootstrap-sass is a Sass-powered version of Bootstrap, ready to drop right into your Sass powered applications.",
12 | "main": [
13 | "vendor/assets/stylesheets/bootstrap.scss",
14 | "vendor/assets/javascripts/bootstrap.js"
15 | ],
16 | "keywords": [
17 | "twbs",
18 | "bootstrap",
19 | "sass"
20 | ],
21 | "license": "MIT",
22 | "ignore": [
23 | "**/.*",
24 | "lib",
25 | "tasks",
26 | "templates",
27 | "test",
28 | "*.gemspec",
29 | "Rakefile",
30 | "Gemfile"
31 | ],
32 | "_release": "3.1.1",
33 | "_resolution": {
34 | "type": "version",
35 | "tag": "v3.1.1",
36 | "commit": "cd4062f43dcb5293da8b10ee455a5c6d0aab0b91"
37 | },
38 | "_source": "git://github.com/twbs/bootstrap-sass.git",
39 | "_target": "~3.1.1",
40 | "_originalSource": "bootstrap-sass-official",
41 | "_direct": true
42 | }
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2013 Twitter, Inc
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap-sass",
3 | "version": "3.1.1",
4 | "homepage": "https://github.com/twbs/bootstrap-sass",
5 | "authors": [
6 | "Thomas McDonald",
7 | "Tristan Harward",
8 | "Peter Gumeson",
9 | "Gleb Mazovetskiy"
10 | ],
11 | "description": "bootstrap-sass is a Sass-powered version of Bootstrap, ready to drop right into your Sass powered applications.",
12 | "main": ["vendor/assets/stylesheets/bootstrap.scss", "vendor/assets/javascripts/bootstrap.js"],
13 | "keywords": [
14 | "twbs",
15 | "bootstrap",
16 | "sass"
17 | ],
18 | "license": "MIT",
19 | "ignore": [
20 | "**/.*", "lib", "tasks", "templates", "test", "*.gemspec", "Rakefile", "Gemfile"
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "twbs/bootstrap-sass",
3 | "description": "bootstrap-sass is a Sass-powered version of Bootstrap, ready to drop right into your Sass powered applications.",
4 | "keywords": ["bootstrap", "css", "sass"],
5 | "homepage": "http://github.com/twbs/bootstrap-sass",
6 | "authors": [
7 | {
8 | "name": "Thomas McDonald"
9 | },
10 | {
11 | "name": "Tristan Harward"
12 | },
13 | {
14 | "name": "Peter Gumeson"
15 | },
16 | {
17 | "name": "Gleb Mazovetskiy"
18 | },
19 | {
20 | "name": "Mark Otto"
21 | },
22 | {
23 | "name": "Jacob Thornton"
24 | }
25 | ],
26 | "support": {
27 | "issues": "https://github.com/twbs/bootstrap-sass/issues"
28 | },
29 | "license": "MIT",
30 | "extra": {
31 | "branch-alias": {
32 | "dev-master": "3.1.x-dev"
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap.js:
--------------------------------------------------------------------------------
1 | //= require bootstrap/affix
2 | //= require bootstrap/alert
3 | //= require bootstrap/button
4 | //= require bootstrap/carousel
5 | //= require bootstrap/collapse
6 | //= require bootstrap/dropdown
7 | //= require bootstrap/tab
8 | //= require bootstrap/transition
9 | //= require bootstrap/scrollspy
10 | //= require bootstrap/modal
11 | //= require bootstrap/tooltip
12 | //= require bootstrap/popover
13 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/alert.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: alert.js v3.1.1
3 | * http://getbootstrap.com/javascript/#alerts
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // ALERT CLASS DEFINITION
14 | // ======================
15 |
16 | var dismiss = '[data-dismiss="alert"]'
17 | var Alert = function (el) {
18 | $(el).on('click', dismiss, this.close)
19 | }
20 |
21 | Alert.prototype.close = function (e) {
22 | var $this = $(this)
23 | var selector = $this.attr('data-target')
24 |
25 | if (!selector) {
26 | selector = $this.attr('href')
27 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
28 | }
29 |
30 | var $parent = $(selector)
31 |
32 | if (e) e.preventDefault()
33 |
34 | if (!$parent.length) {
35 | $parent = $this.hasClass('alert') ? $this : $this.parent()
36 | }
37 |
38 | $parent.trigger(e = $.Event('close.bs.alert'))
39 |
40 | if (e.isDefaultPrevented()) return
41 |
42 | $parent.removeClass('in')
43 |
44 | function removeElement() {
45 | $parent.trigger('closed.bs.alert').remove()
46 | }
47 |
48 | $.support.transition && $parent.hasClass('fade') ?
49 | $parent
50 | .one($.support.transition.end, removeElement)
51 | .emulateTransitionEnd(150) :
52 | removeElement()
53 | }
54 |
55 |
56 | // ALERT PLUGIN DEFINITION
57 | // =======================
58 |
59 | var old = $.fn.alert
60 |
61 | $.fn.alert = function (option) {
62 | return this.each(function () {
63 | var $this = $(this)
64 | var data = $this.data('bs.alert')
65 |
66 | if (!data) $this.data('bs.alert', (data = new Alert(this)))
67 | if (typeof option == 'string') data[option].call($this)
68 | })
69 | }
70 |
71 | $.fn.alert.Constructor = Alert
72 |
73 |
74 | // ALERT NO CONFLICT
75 | // =================
76 |
77 | $.fn.alert.noConflict = function () {
78 | $.fn.alert = old
79 | return this
80 | }
81 |
82 |
83 | // ALERT DATA-API
84 | // ==============
85 |
86 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
87 |
88 | }(jQuery);
89 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/transition.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: transition.js v3.1.1
3 | * http://getbootstrap.com/javascript/#transitions
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
14 | // ============================================================
15 |
16 | function transitionEnd() {
17 | var el = document.createElement('bootstrap')
18 |
19 | var transEndEventNames = {
20 | 'WebkitTransition' : 'webkitTransitionEnd',
21 | 'MozTransition' : 'transitionend',
22 | 'OTransition' : 'oTransitionEnd otransitionend',
23 | 'transition' : 'transitionend'
24 | }
25 |
26 | for (var name in transEndEventNames) {
27 | if (el.style[name] !== undefined) {
28 | return { end: transEndEventNames[name] }
29 | }
30 | }
31 |
32 | return false // explicit for ie8 ( ._.)
33 | }
34 |
35 | // http://blog.alexmaccaw.com/css-transitions
36 | $.fn.emulateTransitionEnd = function (duration) {
37 | var called = false, $el = this
38 | $(this).one($.support.transition.end, function () { called = true })
39 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
40 | setTimeout(callback, duration)
41 | return this
42 | }
43 |
44 | $(function () {
45 | $.support.transition = transitionEnd()
46 | })
47 |
48 | }(jQuery);
49 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap.scss:
--------------------------------------------------------------------------------
1 | // Core variables and mixins
2 | @import "bootstrap/variables";
3 | @import "bootstrap/mixins";
4 |
5 | // Reset
6 | @import "bootstrap/normalize";
7 | @import "bootstrap/print";
8 |
9 | // Core CSS
10 | @import "bootstrap/scaffolding";
11 | @import "bootstrap/type";
12 | @import "bootstrap/code";
13 | @import "bootstrap/grid";
14 | @import "bootstrap/tables";
15 | @import "bootstrap/forms";
16 | @import "bootstrap/buttons";
17 |
18 | // Components
19 | @import "bootstrap/component-animations";
20 | @import "bootstrap/glyphicons";
21 | @import "bootstrap/dropdowns";
22 | @import "bootstrap/button-groups";
23 | @import "bootstrap/input-groups";
24 | @import "bootstrap/navs";
25 | @import "bootstrap/navbar";
26 | @import "bootstrap/breadcrumbs";
27 | @import "bootstrap/pagination";
28 | @import "bootstrap/pager";
29 | @import "bootstrap/labels";
30 | @import "bootstrap/badges";
31 | @import "bootstrap/jumbotron";
32 | @import "bootstrap/thumbnails";
33 | @import "bootstrap/alerts";
34 | @import "bootstrap/progress-bars";
35 | @import "bootstrap/media";
36 | @import "bootstrap/list-group";
37 | @import "bootstrap/panels";
38 | @import "bootstrap/wells";
39 | @import "bootstrap/close";
40 |
41 | // Components w/ JavaScript
42 | @import "bootstrap/modals";
43 | @import "bootstrap/tooltip";
44 | @import "bootstrap/popovers";
45 | @import "bootstrap/carousel";
46 |
47 | // Utility classes
48 | @import "bootstrap/utilities";
49 | @import "bootstrap/responsive-utilities";
50 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_alerts.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Alerts
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // -------------------------
8 |
9 | .alert {
10 | padding: $alert-padding;
11 | margin-bottom: $line-height-computed;
12 | border: 1px solid transparent;
13 | border-radius: $alert-border-radius;
14 |
15 | // Headings for larger alerts
16 | h4 {
17 | margin-top: 0;
18 | // Specified for the h4 to prevent conflicts of changing $headings-color
19 | color: inherit;
20 | }
21 | // Provide class for links that match alerts
22 | .alert-link {
23 | font-weight: $alert-link-font-weight;
24 | }
25 |
26 | // Improve alignment and spacing of inner content
27 | > p,
28 | > ul {
29 | margin-bottom: 0;
30 | }
31 | > p + p {
32 | margin-top: 5px;
33 | }
34 | }
35 |
36 | // Dismissable alerts
37 | //
38 | // Expand the right padding and account for the close button's positioning.
39 |
40 | .alert-dismissable {
41 | padding-right: ($alert-padding + 20);
42 |
43 | // Adjust close link position
44 | .close {
45 | position: relative;
46 | top: -2px;
47 | right: -21px;
48 | color: inherit;
49 | }
50 | }
51 |
52 | // Alternate styles
53 | //
54 | // Generate contextual modifier classes for colorizing the alert.
55 |
56 | .alert-success {
57 | @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
58 | }
59 | .alert-info {
60 | @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
61 | }
62 | .alert-warning {
63 | @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);
64 | }
65 | .alert-danger {
66 | @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);
67 | }
68 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_badges.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Badges
3 | // --------------------------------------------------
4 |
5 |
6 | // Base classes
7 | .badge {
8 | display: inline-block;
9 | min-width: 10px;
10 | padding: 3px 7px;
11 | font-size: $font-size-small;
12 | font-weight: $badge-font-weight;
13 | color: $badge-color;
14 | line-height: $badge-line-height;
15 | vertical-align: baseline;
16 | white-space: nowrap;
17 | text-align: center;
18 | background-color: $badge-bg;
19 | border-radius: $badge-border-radius;
20 |
21 | // Empty badges collapse automatically (not available in IE8)
22 | &:empty {
23 | display: none;
24 | }
25 |
26 | // Quick fix for badges in buttons
27 | .btn & {
28 | position: relative;
29 | top: -1px;
30 | }
31 | .btn-xs & {
32 | top: 0;
33 | padding: 1px 5px;
34 | }
35 | }
36 |
37 | // Hover state, but only for links
38 | a.badge {
39 | &:hover,
40 | &:focus {
41 | color: $badge-link-hover-color;
42 | text-decoration: none;
43 | cursor: pointer;
44 | }
45 | }
46 |
47 | // Account for counters in navs
48 | a.list-group-item.active > .badge,
49 | .nav-pills > .active > a > .badge {
50 | color: $badge-active-color;
51 | background-color: $badge-active-bg;
52 | }
53 | .nav-pills > li > a > .badge {
54 | margin-left: 3px;
55 | }
56 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Breadcrumbs
3 | // --------------------------------------------------
4 |
5 |
6 | .breadcrumb {
7 | padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;
8 | margin-bottom: $line-height-computed;
9 | list-style: none;
10 | background-color: $breadcrumb-bg;
11 | border-radius: $border-radius-base;
12 |
13 | > li {
14 | display: inline-block;
15 |
16 | + li:before {
17 | content: "#{$breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
18 | padding: 0 5px;
19 | color: $breadcrumb-color;
20 | }
21 | }
22 |
23 | > .active {
24 | color: $breadcrumb-active-color;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_close.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Close icons
3 | // --------------------------------------------------
4 |
5 |
6 | .close {
7 | float: right;
8 | font-size: ($font-size-base * 1.5);
9 | font-weight: $close-font-weight;
10 | line-height: 1;
11 | color: $close-color;
12 | text-shadow: $close-text-shadow;
13 | @include opacity(.2);
14 |
15 | &:hover,
16 | &:focus {
17 | color: $close-color;
18 | text-decoration: none;
19 | cursor: pointer;
20 | @include opacity(.5);
21 | }
22 |
23 | // [converter] extracted button& to button.close
24 | }
25 |
26 | // Additional properties for button version
27 | // iOS requires the button element instead of an anchor tag.
28 | // If you want the anchor version, it requires `href="#"`.
29 | button.close {
30 | padding: 0;
31 | cursor: pointer;
32 | background: transparent;
33 | border: 0;
34 | -webkit-appearance: none;
35 | }
36 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_code.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Code (inline and block)
3 | // --------------------------------------------------
4 |
5 |
6 | // Inline and block code styles
7 | code,
8 | kbd,
9 | pre,
10 | samp {
11 | font-family: $font-family-monospace;
12 | }
13 |
14 | // Inline code
15 | code {
16 | padding: 2px 4px;
17 | font-size: 90%;
18 | color: $code-color;
19 | background-color: $code-bg;
20 | white-space: nowrap;
21 | border-radius: $border-radius-base;
22 | }
23 |
24 | // User input typically entered via keyboard
25 | kbd {
26 | padding: 2px 4px;
27 | font-size: 90%;
28 | color: $kbd-color;
29 | background-color: $kbd-bg;
30 | border-radius: $border-radius-small;
31 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
32 | }
33 |
34 | // Blocks of code
35 | pre {
36 | display: block;
37 | padding: (($line-height-computed - 1) / 2);
38 | margin: 0 0 ($line-height-computed / 2);
39 | font-size: ($font-size-base - 1); // 14px to 13px
40 | line-height: $line-height-base;
41 | word-break: break-all;
42 | word-wrap: break-word;
43 | color: $pre-color;
44 | background-color: $pre-bg;
45 | border: 1px solid $pre-border-color;
46 | border-radius: $border-radius-base;
47 |
48 | // Account for some code outputs that place code tags in pre tags
49 | code {
50 | padding: 0;
51 | font-size: inherit;
52 | color: inherit;
53 | white-space: pre-wrap;
54 | background-color: transparent;
55 | border-radius: 0;
56 | }
57 | }
58 |
59 | // Enable scrollable blocks of code
60 | .pre-scrollable {
61 | max-height: $pre-scrollable-max-height;
62 | overflow-y: scroll;
63 | }
64 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_component-animations.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Component animations
3 | // --------------------------------------------------
4 |
5 | // Heads up!
6 | //
7 | // We don't use the `.opacity()` mixin here since it causes a bug with text
8 | // fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.
9 |
10 | .fade {
11 | opacity: 0;
12 | @include transition(opacity .15s linear);
13 | &.in {
14 | opacity: 1;
15 | }
16 | }
17 |
18 | .collapse {
19 | display: none;
20 | &.in {
21 | display: block;
22 | }
23 | }
24 | .collapsing {
25 | position: relative;
26 | height: 0;
27 | overflow: hidden;
28 | @include transition(height .35s ease);
29 | }
30 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_grid.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Grid system
3 | // --------------------------------------------------
4 |
5 |
6 | // Container widths
7 | //
8 | // Set the container width, and override it for fixed navbars in media queries.
9 |
10 | .container {
11 | @include container-fixed();
12 |
13 | @media (min-width: $screen-sm-min) {
14 | width: $container-sm;
15 | }
16 | @media (min-width: $screen-md-min) {
17 | width: $container-md;
18 | }
19 | @media (min-width: $screen-lg-min) {
20 | width: $container-lg;
21 | }
22 | }
23 |
24 |
25 | // Fluid container
26 | //
27 | // Utilizes the mixin meant for fixed width containers, but without any defined
28 | // width for fluid, full width layouts.
29 |
30 | .container-fluid {
31 | @include container-fixed();
32 | }
33 |
34 |
35 | // Row
36 | //
37 | // Rows contain and clear the floats of your columns.
38 |
39 | .row {
40 | @include make-row();
41 | }
42 |
43 |
44 | // Columns
45 | //
46 | // Common styles for small and large grid columns
47 |
48 | @include make-grid-columns();
49 |
50 |
51 | // Extra small grid
52 | //
53 | // Columns, offsets, pushes, and pulls for extra small devices like
54 | // smartphones.
55 |
56 | @include make-grid(xs);
57 |
58 |
59 | // Small grid
60 | //
61 | // Columns, offsets, pushes, and pulls for the small device range, from phones
62 | // to tablets.
63 |
64 | @media (min-width: $screen-sm-min) {
65 | @include make-grid(sm);
66 | }
67 |
68 |
69 | // Medium grid
70 | //
71 | // Columns, offsets, pushes, and pulls for the desktop device range.
72 |
73 | @media (min-width: $screen-md-min) {
74 | @include make-grid(md);
75 | }
76 |
77 |
78 | // Large grid
79 | //
80 | // Columns, offsets, pushes, and pulls for the large desktop device range.
81 |
82 | @media (min-width: $screen-lg-min) {
83 | @include make-grid(lg);
84 | }
85 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_jumbotron.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Jumbotron
3 | // --------------------------------------------------
4 |
5 |
6 | .jumbotron {
7 | padding: $jumbotron-padding;
8 | margin-bottom: $jumbotron-padding;
9 | color: $jumbotron-color;
10 | background-color: $jumbotron-bg;
11 |
12 | h1,
13 | .h1 {
14 | color: $jumbotron-heading-color;
15 | }
16 | p {
17 | margin-bottom: ($jumbotron-padding / 2);
18 | font-size: $jumbotron-font-size;
19 | font-weight: 200;
20 | }
21 |
22 | .container & {
23 | border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container
24 | }
25 |
26 | .container {
27 | max-width: 100%;
28 | }
29 |
30 | @media screen and (min-width: $screen-sm-min) {
31 | padding-top: ($jumbotron-padding * 1.6);
32 | padding-bottom: ($jumbotron-padding * 1.6);
33 |
34 | .container & {
35 | padding-left: ($jumbotron-padding * 2);
36 | padding-right: ($jumbotron-padding * 2);
37 | }
38 |
39 | h1,
40 | .h1 {
41 | font-size: ($font-size-base * 4.5);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_labels.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Labels
3 | // --------------------------------------------------
4 |
5 | .label {
6 | display: inline;
7 | padding: .2em .6em .3em;
8 | font-size: 75%;
9 | font-weight: bold;
10 | line-height: 1;
11 | color: $label-color;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | border-radius: .25em;
16 |
17 | // Add hover effects, but only for links
18 | &[href] {
19 | &:hover,
20 | &:focus {
21 | color: $label-link-hover-color;
22 | text-decoration: none;
23 | cursor: pointer;
24 | }
25 | }
26 |
27 | // Empty labels collapse automatically (not available in IE8)
28 | &:empty {
29 | display: none;
30 | }
31 |
32 | // Quick fix for labels in buttons
33 | .btn & {
34 | position: relative;
35 | top: -1px;
36 | }
37 | }
38 |
39 | // Colors
40 | // Contextual variations (linked labels get darker on :hover)
41 |
42 | .label-default {
43 | @include label-variant($label-default-bg);
44 | }
45 |
46 | .label-primary {
47 | @include label-variant($label-primary-bg);
48 | }
49 |
50 | .label-success {
51 | @include label-variant($label-success-bg);
52 | }
53 |
54 | .label-info {
55 | @include label-variant($label-info-bg);
56 | }
57 |
58 | .label-warning {
59 | @include label-variant($label-warning-bg);
60 | }
61 |
62 | .label-danger {
63 | @include label-variant($label-danger-bg);
64 | }
65 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_media.scss:
--------------------------------------------------------------------------------
1 | // Media objects
2 | // Source: http://stubbornella.org/content/?p=497
3 | // --------------------------------------------------
4 |
5 |
6 | // Common styles
7 | // -------------------------
8 |
9 | // Clear the floats
10 | .media,
11 | .media-body {
12 | overflow: hidden;
13 | zoom: 1;
14 | }
15 |
16 | // Proper spacing between instances of .media
17 | .media,
18 | .media .media {
19 | margin-top: 15px;
20 | }
21 | .media:first-child {
22 | margin-top: 0;
23 | }
24 |
25 | // For images and videos, set to block
26 | .media-object {
27 | display: block;
28 | }
29 |
30 | // Reset margins on headings for tighter default spacing
31 | .media-heading {
32 | margin: 0 0 5px;
33 | }
34 |
35 |
36 | // Media image alignment
37 | // -------------------------
38 |
39 | .media {
40 | > .pull-left {
41 | margin-right: 10px;
42 | }
43 | > .pull-right {
44 | margin-left: 10px;
45 | }
46 | }
47 |
48 |
49 | // Media list variation
50 | // -------------------------
51 |
52 | // Undo default ul/ol styles
53 | .media-list {
54 | padding-left: 0;
55 | list-style: none;
56 | }
57 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_pager.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Pager pagination
3 | // --------------------------------------------------
4 |
5 |
6 | .pager {
7 | padding-left: 0;
8 | margin: $line-height-computed 0;
9 | list-style: none;
10 | text-align: center;
11 | @include clearfix();
12 | li {
13 | display: inline;
14 | > a,
15 | > span {
16 | display: inline-block;
17 | padding: 5px 14px;
18 | background-color: $pager-bg;
19 | border: 1px solid $pager-border;
20 | border-radius: $pager-border-radius;
21 | }
22 |
23 | > a:hover,
24 | > a:focus {
25 | text-decoration: none;
26 | background-color: $pager-hover-bg;
27 | }
28 | }
29 |
30 | .next {
31 | > a,
32 | > span {
33 | float: right;
34 | }
35 | }
36 |
37 | .previous {
38 | > a,
39 | > span {
40 | float: left;
41 | }
42 | }
43 |
44 | .disabled {
45 | > a,
46 | > a:hover,
47 | > a:focus,
48 | > span {
49 | color: $pager-disabled-color;
50 | background-color: $pager-bg;
51 | cursor: not-allowed;
52 | }
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_pagination.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Pagination (multiple pages)
3 | // --------------------------------------------------
4 | .pagination {
5 | display: inline-block;
6 | padding-left: 0;
7 | margin: $line-height-computed 0;
8 | border-radius: $border-radius-base;
9 |
10 | > li {
11 | display: inline; // Remove list-style and block-level defaults
12 | > a,
13 | > span {
14 | position: relative;
15 | float: left; // Collapse white-space
16 | padding: $padding-base-vertical $padding-base-horizontal;
17 | line-height: $line-height-base;
18 | text-decoration: none;
19 | color: $pagination-color;
20 | background-color: $pagination-bg;
21 | border: 1px solid $pagination-border;
22 | margin-left: -1px;
23 | }
24 | &:first-child {
25 | > a,
26 | > span {
27 | margin-left: 0;
28 | @include border-left-radius($border-radius-base);
29 | }
30 | }
31 | &:last-child {
32 | > a,
33 | > span {
34 | @include border-right-radius($border-radius-base);
35 | }
36 | }
37 | }
38 |
39 | > li > a,
40 | > li > span {
41 | &:hover,
42 | &:focus {
43 | color: $pagination-hover-color;
44 | background-color: $pagination-hover-bg;
45 | border-color: $pagination-hover-border;
46 | }
47 | }
48 |
49 | > .active > a,
50 | > .active > span {
51 | &,
52 | &:hover,
53 | &:focus {
54 | z-index: 2;
55 | color: $pagination-active-color;
56 | background-color: $pagination-active-bg;
57 | border-color: $pagination-active-border;
58 | cursor: default;
59 | }
60 | }
61 |
62 | > .disabled {
63 | > span,
64 | > span:hover,
65 | > span:focus,
66 | > a,
67 | > a:hover,
68 | > a:focus {
69 | color: $pagination-disabled-color;
70 | background-color: $pagination-disabled-bg;
71 | border-color: $pagination-disabled-border;
72 | cursor: not-allowed;
73 | }
74 | }
75 | }
76 |
77 | // Sizing
78 | // --------------------------------------------------
79 |
80 | // Large
81 | .pagination-lg {
82 | @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large);
83 | }
84 |
85 | // Small
86 | .pagination-sm {
87 | @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small);
88 | }
89 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_print.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Basic print styles
3 | // --------------------------------------------------
4 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
5 |
6 | @media print {
7 |
8 | * {
9 | text-shadow: none !important;
10 | color: #000 !important; // Black prints faster: h5bp.com/s
11 | background: transparent !important;
12 | box-shadow: none !important;
13 | }
14 |
15 | a,
16 | a:visited {
17 | text-decoration: underline;
18 | }
19 |
20 | a[href]:after {
21 | content: " (" attr(href) ")";
22 | }
23 |
24 | abbr[title]:after {
25 | content: " (" attr(title) ")";
26 | }
27 |
28 | // Don't show links for images, or javascript/internal links
29 | a[href^="javascript:"]:after,
30 | a[href^="#"]:after {
31 | content: "";
32 | }
33 |
34 | pre,
35 | blockquote {
36 | border: 1px solid #999;
37 | page-break-inside: avoid;
38 | }
39 |
40 | thead {
41 | display: table-header-group; // h5bp.com/t
42 | }
43 |
44 | tr,
45 | img {
46 | page-break-inside: avoid;
47 | }
48 |
49 | img {
50 | max-width: 100% !important;
51 | }
52 |
53 | p,
54 | h2,
55 | h3 {
56 | orphans: 3;
57 | widows: 3;
58 | }
59 |
60 | h2,
61 | h3 {
62 | page-break-after: avoid;
63 | }
64 |
65 | // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
66 | // Once fixed, we can just straight up remove this.
67 | select {
68 | background: #fff !important;
69 | }
70 |
71 | // Bootstrap components
72 | .navbar {
73 | display: none;
74 | }
75 | .table {
76 | td,
77 | th {
78 | background-color: #fff !important;
79 | }
80 | }
81 | .btn,
82 | .dropup > .btn {
83 | > .caret {
84 | border-top-color: #000 !important;
85 | }
86 | }
87 | .label {
88 | border: 1px solid #000;
89 | }
90 |
91 | .table {
92 | border-collapse: collapse !important;
93 | }
94 | .table-bordered {
95 | th,
96 | td {
97 | border: 1px solid #ddd !important;
98 | }
99 | }
100 |
101 | }
102 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_progress-bars.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Progress bars
3 | // --------------------------------------------------
4 |
5 |
6 | // Bar animations
7 | // -------------------------
8 |
9 | // WebKit
10 | @-webkit-keyframes progress-bar-stripes {
11 | from { background-position: 40px 0; }
12 | to { background-position: 0 0; }
13 | }
14 |
15 | // Spec and IE10+
16 | @keyframes progress-bar-stripes {
17 | from { background-position: 40px 0; }
18 | to { background-position: 0 0; }
19 | }
20 |
21 |
22 |
23 | // Bar itself
24 | // -------------------------
25 |
26 | // Outer container
27 | .progress {
28 | overflow: hidden;
29 | height: $line-height-computed;
30 | margin-bottom: $line-height-computed;
31 | background-color: $progress-bg;
32 | border-radius: $border-radius-base;
33 | @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
34 | }
35 |
36 | // Bar of progress
37 | .progress-bar {
38 | float: left;
39 | width: 0%;
40 | height: 100%;
41 | font-size: $font-size-small;
42 | line-height: $line-height-computed;
43 | color: $progress-bar-color;
44 | text-align: center;
45 | background-color: $progress-bar-bg;
46 | @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
47 | @include transition(width .6s ease);
48 | }
49 |
50 | // Striped bars
51 | .progress-striped .progress-bar {
52 | @include gradient-striped();
53 | background-size: 40px 40px;
54 | }
55 |
56 | // Call animation for the active one
57 | .progress.active .progress-bar {
58 | @include animation(progress-bar-stripes 2s linear infinite);
59 | }
60 |
61 |
62 |
63 | // Variations
64 | // -------------------------
65 |
66 | .progress-bar-success {
67 | @include progress-bar-variant($progress-bar-success-bg);
68 | }
69 |
70 | .progress-bar-info {
71 | @include progress-bar-variant($progress-bar-info-bg);
72 | }
73 |
74 | .progress-bar-warning {
75 | @include progress-bar-variant($progress-bar-warning-bg);
76 | }
77 |
78 | .progress-bar-danger {
79 | @include progress-bar-variant($progress-bar-danger-bg);
80 | }
81 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_responsive-utilities.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Responsive: Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // IE10 in Windows (Phone) 8
7 | //
8 | // Support for responsive views via media queries is kind of borked in IE10, for
9 | // Surface/desktop in split view and for Windows Phone 8. This particular fix
10 | // must be accompanied by a snippet of JavaScript to sniff the user agent and
11 | // apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
12 | // our Getting Started page for more information on this bug.
13 | //
14 | // For more information, see the following:
15 | //
16 | // Issue: https://github.com/twbs/bootstrap/issues/10497
17 | // Docs: http://getbootstrap.com/getting-started/#browsers
18 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
19 |
20 | @-ms-viewport {
21 | width: device-width;
22 | }
23 |
24 |
25 | // Visibility utilities
26 |
27 | @include responsive-invisibility('.visible-xs, .visible-sm, .visible-md, .visible-lg');
28 |
29 | @media (max-width: $screen-xs-max) {
30 | @include responsive-visibility('.visible-xs');
31 | }
32 |
33 | @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
34 | @include responsive-visibility('.visible-sm');
35 | }
36 |
37 | @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
38 | @include responsive-visibility('.visible-md');
39 | }
40 |
41 | @media (min-width: $screen-lg-min) {
42 | @include responsive-visibility('.visible-lg');
43 | }
44 |
45 | @media (max-width: $screen-xs-max) {
46 | @include responsive-invisibility('.hidden-xs');
47 | }
48 |
49 | @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
50 | @include responsive-invisibility('.hidden-sm');
51 | }
52 |
53 | @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
54 | @include responsive-invisibility('.hidden-md');
55 | }
56 |
57 | @media (min-width: $screen-lg-min) {
58 | @include responsive-invisibility('.hidden-lg');
59 | }
60 |
61 |
62 | // Print utilities
63 | //
64 | // Media queries are placed on the inside to be mixin-friendly.
65 |
66 | @include responsive-invisibility('.visible-print');
67 |
68 | @media print {
69 | @include responsive-visibility('.visible-print');
70 | }
71 |
72 | @media print {
73 | @include responsive-invisibility('.hidden-print');
74 | }
75 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_thumbnails.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Thumbnails
3 | // --------------------------------------------------
4 |
5 |
6 | // Mixin and adjust the regular image class
7 | .thumbnail {
8 | display: block;
9 | padding: $thumbnail-padding;
10 | margin-bottom: $line-height-computed;
11 | line-height: $line-height-base;
12 | background-color: $thumbnail-bg;
13 | border: 1px solid $thumbnail-border;
14 | border-radius: $thumbnail-border-radius;
15 | @include transition(all .2s ease-in-out);
16 |
17 | > img,
18 | a > img {
19 | @include img-responsive();
20 | margin-left: auto;
21 | margin-right: auto;
22 | }
23 |
24 | // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active
25 |
26 | // Image captions
27 | .caption {
28 | padding: $thumbnail-caption-padding;
29 | color: $thumbnail-caption-color;
30 | }
31 | }
32 |
33 | // Add a hover state for linked versions only
34 | a.thumbnail:hover,
35 | a.thumbnail:focus,
36 | a.thumbnail.active {
37 | border-color: $link-color;
38 | }
39 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_tooltip.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Tooltips
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .tooltip {
8 | position: absolute;
9 | z-index: $zindex-tooltip;
10 | display: block;
11 | visibility: visible;
12 | font-size: $font-size-small;
13 | line-height: 1.4;
14 | @include opacity(0);
15 |
16 | &.in { @include opacity($tooltip-opacity); }
17 | &.top { margin-top: -3px; padding: $tooltip-arrow-width 0; }
18 | &.right { margin-left: 3px; padding: 0 $tooltip-arrow-width; }
19 | &.bottom { margin-top: 3px; padding: $tooltip-arrow-width 0; }
20 | &.left { margin-left: -3px; padding: 0 $tooltip-arrow-width; }
21 | }
22 |
23 | // Wrapper for the tooltip content
24 | .tooltip-inner {
25 | max-width: $tooltip-max-width;
26 | padding: 3px 8px;
27 | color: $tooltip-color;
28 | text-align: center;
29 | text-decoration: none;
30 | background-color: $tooltip-bg;
31 | border-radius: $border-radius-base;
32 | }
33 |
34 | // Arrows
35 | .tooltip-arrow {
36 | position: absolute;
37 | width: 0;
38 | height: 0;
39 | border-color: transparent;
40 | border-style: solid;
41 | }
42 | .tooltip {
43 | &.top .tooltip-arrow {
44 | bottom: 0;
45 | left: 50%;
46 | margin-left: -$tooltip-arrow-width;
47 | border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
48 | border-top-color: $tooltip-arrow-color;
49 | }
50 | &.top-left .tooltip-arrow {
51 | bottom: 0;
52 | left: $tooltip-arrow-width;
53 | border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
54 | border-top-color: $tooltip-arrow-color;
55 | }
56 | &.top-right .tooltip-arrow {
57 | bottom: 0;
58 | right: $tooltip-arrow-width;
59 | border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
60 | border-top-color: $tooltip-arrow-color;
61 | }
62 | &.right .tooltip-arrow {
63 | top: 50%;
64 | left: 0;
65 | margin-top: -$tooltip-arrow-width;
66 | border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;
67 | border-right-color: $tooltip-arrow-color;
68 | }
69 | &.left .tooltip-arrow {
70 | top: 50%;
71 | right: 0;
72 | margin-top: -$tooltip-arrow-width;
73 | border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;
74 | border-left-color: $tooltip-arrow-color;
75 | }
76 | &.bottom .tooltip-arrow {
77 | top: 0;
78 | left: 50%;
79 | margin-left: -$tooltip-arrow-width;
80 | border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
81 | border-bottom-color: $tooltip-arrow-color;
82 | }
83 | &.bottom-left .tooltip-arrow {
84 | top: 0;
85 | left: $tooltip-arrow-width;
86 | border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
87 | border-bottom-color: $tooltip-arrow-color;
88 | }
89 | &.bottom-right .tooltip-arrow {
90 | top: 0;
91 | right: $tooltip-arrow-width;
92 | border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
93 | border-bottom-color: $tooltip-arrow-color;
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_utilities.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // Floats
7 | // -------------------------
8 |
9 | .clearfix {
10 | @include clearfix();
11 | }
12 | .center-block {
13 | @include center-block();
14 | }
15 | .pull-right {
16 | float: right !important;
17 | }
18 | .pull-left {
19 | float: left !important;
20 | }
21 |
22 |
23 | // Toggling content
24 | // -------------------------
25 |
26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
27 | .hide {
28 | display: none !important;
29 | }
30 | .show {
31 | display: block !important;
32 | }
33 | .invisible {
34 | visibility: hidden;
35 | }
36 | .text-hide {
37 | @include text-hide();
38 | }
39 |
40 |
41 | // Hide from screenreaders and browsers
42 | //
43 | // Credit: HTML5 Boilerplate
44 |
45 | .hidden {
46 | display: none !important;
47 | visibility: hidden !important;
48 | }
49 |
50 |
51 | // For Affix plugin
52 | // -------------------------
53 |
54 | .affix {
55 | position: fixed;
56 | }
57 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/_wells.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Wells
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .well {
8 | min-height: 20px;
9 | padding: 19px;
10 | margin-bottom: 20px;
11 | background-color: $well-bg;
12 | border: 1px solid $well-border;
13 | border-radius: $border-radius-base;
14 | @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15 | blockquote {
16 | border-color: #ddd;
17 | border-color: rgba(0,0,0,.15);
18 | }
19 | }
20 |
21 | // Sizes
22 | .well-lg {
23 | padding: 24px;
24 | border-radius: $border-radius-large;
25 | }
26 | .well-sm {
27 | padding: 9px;
28 | border-radius: $border-radius-small;
29 | }
30 |
--------------------------------------------------------------------------------
/bower_components/bootstrap-sass-official/vendor/assets/stylesheets/bootstrap/bootstrap.scss:
--------------------------------------------------------------------------------
1 | // Core variables and mixins
2 | @import "variables";
3 | @import "mixins";
4 |
5 | // Reset
6 | @import "normalize";
7 | @import "print";
8 |
9 | // Core CSS
10 | @import "scaffolding";
11 | @import "type";
12 | @import "code";
13 | @import "grid";
14 | @import "tables";
15 | @import "forms";
16 | @import "buttons";
17 |
18 | // Components
19 | @import "component-animations";
20 | @import "glyphicons";
21 | @import "dropdowns";
22 | @import "button-groups";
23 | @import "input-groups";
24 | @import "navs";
25 | @import "navbar";
26 | @import "breadcrumbs";
27 | @import "pagination";
28 | @import "pager";
29 | @import "labels";
30 | @import "badges";
31 | @import "jumbotron";
32 | @import "thumbnails";
33 | @import "alerts";
34 | @import "progress-bars";
35 | @import "media";
36 | @import "list-group";
37 | @import "panels";
38 | @import "wells";
39 | @import "close";
40 |
41 | // Components w/ JavaScript
42 | @import "modals";
43 | @import "tooltip";
44 | @import "popovers";
45 | @import "carousel";
46 |
47 | // Utility classes
48 | @import "utilities";
49 | @import "responsive-utilities";
50 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap",
3 | "version": "3.1.1",
4 | "main": [
5 | "./dist/css/bootstrap.css",
6 | "./dist/js/bootstrap.js",
7 | "./dist/fonts/glyphicons-halflings-regular.eot",
8 | "./dist/fonts/glyphicons-halflings-regular.svg",
9 | "./dist/fonts/glyphicons-halflings-regular.ttf",
10 | "./dist/fonts/glyphicons-halflings-regular.woff"
11 | ],
12 | "ignore": [
13 | "**/.*",
14 | "_config.yml",
15 | "CNAME",
16 | "composer.json",
17 | "CONTRIBUTING.md",
18 | "docs",
19 | "js/tests"
20 | ],
21 | "dependencies": {
22 | "jquery": ">= 1.9.0"
23 | },
24 | "homepage": "https://github.com/twbs/bootstrap",
25 | "_release": "3.1.1",
26 | "_resolution": {
27 | "type": "version",
28 | "tag": "v3.1.1",
29 | "commit": "a365d8689c3f3cee7f1acf86b61270ecca8e106d"
30 | },
31 | "_source": "git://github.com/twbs/bootstrap.git",
32 | "_target": "~3.1.1",
33 | "_originalSource": "bootstrap",
34 | "_direct": true
35 | }
--------------------------------------------------------------------------------
/bower_components/bootstrap/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2011-2014 Twitter, Inc
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap",
3 | "version": "3.1.1",
4 | "main": [
5 | "./dist/css/bootstrap.css",
6 | "./dist/js/bootstrap.js",
7 | "./dist/fonts/glyphicons-halflings-regular.eot",
8 | "./dist/fonts/glyphicons-halflings-regular.svg",
9 | "./dist/fonts/glyphicons-halflings-regular.ttf",
10 | "./dist/fonts/glyphicons-halflings-regular.woff"
11 | ],
12 | "ignore": [
13 | "**/.*",
14 | "_config.yml",
15 | "CNAME",
16 | "composer.json",
17 | "CONTRIBUTING.md",
18 | "docs",
19 | "js/tests"
20 | ],
21 | "dependencies": {
22 | "jquery": ">= 1.9.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qrohlf/sensible-web-development/cf636a6b22cd68a9cecbc7d61c69b7b3e1aa031b/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Grunt task for Glyphicons data generation
3 | * http://getbootstrap.com
4 | * Copyright 2014 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | */
7 | 'use strict';
8 | var fs = require('fs');
9 |
10 | module.exports = function generateGlyphiconsData() {
11 | // Pass encoding, utf8, so `readFileSync` will return a string instead of a
12 | // buffer
13 | var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8');
14 | var glpyhiconsLines = glyphiconsFile.split('\n');
15 |
16 | // Use any line that starts with ".glyphicon-" and capture the class name
17 | var iconClassName = /^\.(glyphicon-[^\s]+)/;
18 | var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' +
19 | '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n';
20 | for (var i = 0, len = glpyhiconsLines.length; i < len; i++) {
21 | var match = glpyhiconsLines[i].match(iconClassName);
22 |
23 | if (match !== null) {
24 | glyphiconsData += '- ' + match[1] + '\n';
25 | }
26 | }
27 |
28 | // Create the `_data` directory if it doesn't already exist
29 | if (!fs.existsSync('docs/_data')) {
30 | fs.mkdirSync('docs/_data');
31 | }
32 |
33 | fs.writeFileSync('docs/_data/glyphicons.yml', glyphiconsData);
34 | };
35 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/grunt/bs-raw-files-generator.js:
--------------------------------------------------------------------------------
1 | /* global btoa: true */
2 | /*!
3 | * Bootstrap Grunt task for generating raw-files.min.js for the Customizer
4 | * http://getbootstrap.com
5 | * Copyright 2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | */
8 | 'use strict';
9 | var btoa = require('btoa');
10 | var fs = require('fs');
11 |
12 | function getFiles(type) {
13 | var files = {};
14 | fs.readdirSync(type)
15 | .filter(function (path) {
16 | return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path);
17 | })
18 | .forEach(function (path) {
19 | var fullPath = type + '/' + path;
20 | files[path] = (type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8'));
21 | });
22 | return 'var __' + type + ' = ' + JSON.stringify(files) + '\n';
23 | }
24 |
25 | module.exports = function generateRawFilesJs(banner) {
26 | if (!banner) {
27 | banner = '';
28 | }
29 | var files = banner + getFiles('js') + getFiles('less') + getFiles('fonts');
30 | fs.writeFileSync('docs/assets/js/raw-files.min.js', files);
31 | };
32 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/grunt/shrinkwrap.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Grunt task for generating npm-shrinkwrap.canonical.json
3 | * http://getbootstrap.com
4 | * Copyright 2014 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | */
7 | /*
8 | This Grunt task updates the npm-shrinkwrap.canonical.json file that's used as the key for Bootstrap's npm packages cache.
9 | This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
10 | */
11 | 'use strict';
12 | var canonicallyJsonStringify = require('canonical-json');
13 | var NON_CANONICAL_FILE = 'npm-shrinkwrap.json';
14 | var DEST_FILE = 'test-infra/npm-shrinkwrap.canonical.json';
15 |
16 |
17 | function updateShrinkwrap(grunt) {
18 | // Assumption: Non-canonical shrinkwrap already generated by prerequisite Grunt task
19 | var shrinkwrapData = grunt.file.readJSON(NON_CANONICAL_FILE);
20 | grunt.log.writeln('Deleting ' + NON_CANONICAL_FILE.cyan + '...');
21 | grunt.file.delete(NON_CANONICAL_FILE);
22 | // Output as Canonical JSON in correct location
23 | grunt.file.write(DEST_FILE, canonicallyJsonStringify(shrinkwrapData));
24 | grunt.log.writeln('File ' + DEST_FILE.cyan + ' updated.');
25 | }
26 |
27 |
28 | module.exports = updateShrinkwrap;
29 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/js/alert.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: alert.js v3.1.1
3 | * http://getbootstrap.com/javascript/#alerts
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // ALERT CLASS DEFINITION
14 | // ======================
15 |
16 | var dismiss = '[data-dismiss="alert"]'
17 | var Alert = function (el) {
18 | $(el).on('click', dismiss, this.close)
19 | }
20 |
21 | Alert.prototype.close = function (e) {
22 | var $this = $(this)
23 | var selector = $this.attr('data-target')
24 |
25 | if (!selector) {
26 | selector = $this.attr('href')
27 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
28 | }
29 |
30 | var $parent = $(selector)
31 |
32 | if (e) e.preventDefault()
33 |
34 | if (!$parent.length) {
35 | $parent = $this.hasClass('alert') ? $this : $this.parent()
36 | }
37 |
38 | $parent.trigger(e = $.Event('close.bs.alert'))
39 |
40 | if (e.isDefaultPrevented()) return
41 |
42 | $parent.removeClass('in')
43 |
44 | function removeElement() {
45 | $parent.trigger('closed.bs.alert').remove()
46 | }
47 |
48 | $.support.transition && $parent.hasClass('fade') ?
49 | $parent
50 | .one($.support.transition.end, removeElement)
51 | .emulateTransitionEnd(150) :
52 | removeElement()
53 | }
54 |
55 |
56 | // ALERT PLUGIN DEFINITION
57 | // =======================
58 |
59 | var old = $.fn.alert
60 |
61 | $.fn.alert = function (option) {
62 | return this.each(function () {
63 | var $this = $(this)
64 | var data = $this.data('bs.alert')
65 |
66 | if (!data) $this.data('bs.alert', (data = new Alert(this)))
67 | if (typeof option == 'string') data[option].call($this)
68 | })
69 | }
70 |
71 | $.fn.alert.Constructor = Alert
72 |
73 |
74 | // ALERT NO CONFLICT
75 | // =================
76 |
77 | $.fn.alert.noConflict = function () {
78 | $.fn.alert = old
79 | return this
80 | }
81 |
82 |
83 | // ALERT DATA-API
84 | // ==============
85 |
86 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
87 |
88 | }(jQuery);
89 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/js/transition.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: transition.js v3.1.1
3 | * http://getbootstrap.com/javascript/#transitions
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
14 | // ============================================================
15 |
16 | function transitionEnd() {
17 | var el = document.createElement('bootstrap')
18 |
19 | var transEndEventNames = {
20 | 'WebkitTransition' : 'webkitTransitionEnd',
21 | 'MozTransition' : 'transitionend',
22 | 'OTransition' : 'oTransitionEnd otransitionend',
23 | 'transition' : 'transitionend'
24 | }
25 |
26 | for (var name in transEndEventNames) {
27 | if (el.style[name] !== undefined) {
28 | return { end: transEndEventNames[name] }
29 | }
30 | }
31 |
32 | return false // explicit for ie8 ( ._.)
33 | }
34 |
35 | // http://blog.alexmaccaw.com/css-transitions
36 | $.fn.emulateTransitionEnd = function (duration) {
37 | var called = false, $el = this
38 | $(this).one($.support.transition.end, function () { called = true })
39 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
40 | setTimeout(callback, duration)
41 | return this
42 | }
43 |
44 | $(function () {
45 | $.support.transition = transitionEnd()
46 | })
47 |
48 | }(jQuery);
49 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/alerts.less:
--------------------------------------------------------------------------------
1 | //
2 | // Alerts
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // -------------------------
8 |
9 | .alert {
10 | padding: @alert-padding;
11 | margin-bottom: @line-height-computed;
12 | border: 1px solid transparent;
13 | border-radius: @alert-border-radius;
14 |
15 | // Headings for larger alerts
16 | h4 {
17 | margin-top: 0;
18 | // Specified for the h4 to prevent conflicts of changing @headings-color
19 | color: inherit;
20 | }
21 | // Provide class for links that match alerts
22 | .alert-link {
23 | font-weight: @alert-link-font-weight;
24 | }
25 |
26 | // Improve alignment and spacing of inner content
27 | > p,
28 | > ul {
29 | margin-bottom: 0;
30 | }
31 | > p + p {
32 | margin-top: 5px;
33 | }
34 | }
35 |
36 | // Dismissable alerts
37 | //
38 | // Expand the right padding and account for the close button's positioning.
39 |
40 | .alert-dismissable {
41 | padding-right: (@alert-padding + 20);
42 |
43 | // Adjust close link position
44 | .close {
45 | position: relative;
46 | top: -2px;
47 | right: -21px;
48 | color: inherit;
49 | }
50 | }
51 |
52 | // Alternate styles
53 | //
54 | // Generate contextual modifier classes for colorizing the alert.
55 |
56 | .alert-success {
57 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
58 | }
59 | .alert-info {
60 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
61 | }
62 | .alert-warning {
63 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
64 | }
65 | .alert-danger {
66 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
67 | }
68 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/badges.less:
--------------------------------------------------------------------------------
1 | //
2 | // Badges
3 | // --------------------------------------------------
4 |
5 |
6 | // Base classes
7 | .badge {
8 | display: inline-block;
9 | min-width: 10px;
10 | padding: 3px 7px;
11 | font-size: @font-size-small;
12 | font-weight: @badge-font-weight;
13 | color: @badge-color;
14 | line-height: @badge-line-height;
15 | vertical-align: baseline;
16 | white-space: nowrap;
17 | text-align: center;
18 | background-color: @badge-bg;
19 | border-radius: @badge-border-radius;
20 |
21 | // Empty badges collapse automatically (not available in IE8)
22 | &:empty {
23 | display: none;
24 | }
25 |
26 | // Quick fix for badges in buttons
27 | .btn & {
28 | position: relative;
29 | top: -1px;
30 | }
31 | .btn-xs & {
32 | top: 0;
33 | padding: 1px 5px;
34 | }
35 | }
36 |
37 | // Hover state, but only for links
38 | a.badge {
39 | &:hover,
40 | &:focus {
41 | color: @badge-link-hover-color;
42 | text-decoration: none;
43 | cursor: pointer;
44 | }
45 | }
46 |
47 | // Account for counters in navs
48 | a.list-group-item.active > .badge,
49 | .nav-pills > .active > a > .badge {
50 | color: @badge-active-color;
51 | background-color: @badge-active-bg;
52 | }
53 | .nav-pills > li > a > .badge {
54 | margin-left: 3px;
55 | }
56 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/bootstrap.less:
--------------------------------------------------------------------------------
1 | // Core variables and mixins
2 | @import "variables.less";
3 | @import "mixins.less";
4 |
5 | // Reset
6 | @import "normalize.less";
7 | @import "print.less";
8 |
9 | // Core CSS
10 | @import "scaffolding.less";
11 | @import "type.less";
12 | @import "code.less";
13 | @import "grid.less";
14 | @import "tables.less";
15 | @import "forms.less";
16 | @import "buttons.less";
17 |
18 | // Components
19 | @import "component-animations.less";
20 | @import "glyphicons.less";
21 | @import "dropdowns.less";
22 | @import "button-groups.less";
23 | @import "input-groups.less";
24 | @import "navs.less";
25 | @import "navbar.less";
26 | @import "breadcrumbs.less";
27 | @import "pagination.less";
28 | @import "pager.less";
29 | @import "labels.less";
30 | @import "badges.less";
31 | @import "jumbotron.less";
32 | @import "thumbnails.less";
33 | @import "alerts.less";
34 | @import "progress-bars.less";
35 | @import "media.less";
36 | @import "list-group.less";
37 | @import "panels.less";
38 | @import "wells.less";
39 | @import "close.less";
40 |
41 | // Components w/ JavaScript
42 | @import "modals.less";
43 | @import "tooltip.less";
44 | @import "popovers.less";
45 | @import "carousel.less";
46 |
47 | // Utility classes
48 | @import "utilities.less";
49 | @import "responsive-utilities.less";
50 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/breadcrumbs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Breadcrumbs
3 | // --------------------------------------------------
4 |
5 |
6 | .breadcrumb {
7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
8 | margin-bottom: @line-height-computed;
9 | list-style: none;
10 | background-color: @breadcrumb-bg;
11 | border-radius: @border-radius-base;
12 |
13 | > li {
14 | display: inline-block;
15 |
16 | + li:before {
17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
18 | padding: 0 5px;
19 | color: @breadcrumb-color;
20 | }
21 | }
22 |
23 | > .active {
24 | color: @breadcrumb-active-color;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/close.less:
--------------------------------------------------------------------------------
1 | //
2 | // Close icons
3 | // --------------------------------------------------
4 |
5 |
6 | .close {
7 | float: right;
8 | font-size: (@font-size-base * 1.5);
9 | font-weight: @close-font-weight;
10 | line-height: 1;
11 | color: @close-color;
12 | text-shadow: @close-text-shadow;
13 | .opacity(.2);
14 |
15 | &:hover,
16 | &:focus {
17 | color: @close-color;
18 | text-decoration: none;
19 | cursor: pointer;
20 | .opacity(.5);
21 | }
22 |
23 | // Additional properties for button version
24 | // iOS requires the button element instead of an anchor tag.
25 | // If you want the anchor version, it requires `href="#"`.
26 | button& {
27 | padding: 0;
28 | cursor: pointer;
29 | background: transparent;
30 | border: 0;
31 | -webkit-appearance: none;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/code.less:
--------------------------------------------------------------------------------
1 | //
2 | // Code (inline and block)
3 | // --------------------------------------------------
4 |
5 |
6 | // Inline and block code styles
7 | code,
8 | kbd,
9 | pre,
10 | samp {
11 | font-family: @font-family-monospace;
12 | }
13 |
14 | // Inline code
15 | code {
16 | padding: 2px 4px;
17 | font-size: 90%;
18 | color: @code-color;
19 | background-color: @code-bg;
20 | white-space: nowrap;
21 | border-radius: @border-radius-base;
22 | }
23 |
24 | // User input typically entered via keyboard
25 | kbd {
26 | padding: 2px 4px;
27 | font-size: 90%;
28 | color: @kbd-color;
29 | background-color: @kbd-bg;
30 | border-radius: @border-radius-small;
31 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
32 | }
33 |
34 | // Blocks of code
35 | pre {
36 | display: block;
37 | padding: ((@line-height-computed - 1) / 2);
38 | margin: 0 0 (@line-height-computed / 2);
39 | font-size: (@font-size-base - 1); // 14px to 13px
40 | line-height: @line-height-base;
41 | word-break: break-all;
42 | word-wrap: break-word;
43 | color: @pre-color;
44 | background-color: @pre-bg;
45 | border: 1px solid @pre-border-color;
46 | border-radius: @border-radius-base;
47 |
48 | // Account for some code outputs that place code tags in pre tags
49 | code {
50 | padding: 0;
51 | font-size: inherit;
52 | color: inherit;
53 | white-space: pre-wrap;
54 | background-color: transparent;
55 | border-radius: 0;
56 | }
57 | }
58 |
59 | // Enable scrollable blocks of code
60 | .pre-scrollable {
61 | max-height: @pre-scrollable-max-height;
62 | overflow-y: scroll;
63 | }
64 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/component-animations.less:
--------------------------------------------------------------------------------
1 | //
2 | // Component animations
3 | // --------------------------------------------------
4 |
5 | // Heads up!
6 | //
7 | // We don't use the `.opacity()` mixin here since it causes a bug with text
8 | // fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.
9 |
10 | .fade {
11 | opacity: 0;
12 | .transition(opacity .15s linear);
13 | &.in {
14 | opacity: 1;
15 | }
16 | }
17 |
18 | .collapse {
19 | display: none;
20 | &.in {
21 | display: block;
22 | }
23 | }
24 | .collapsing {
25 | position: relative;
26 | height: 0;
27 | overflow: hidden;
28 | .transition(height .35s ease);
29 | }
30 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/grid.less:
--------------------------------------------------------------------------------
1 | //
2 | // Grid system
3 | // --------------------------------------------------
4 |
5 |
6 | // Container widths
7 | //
8 | // Set the container width, and override it for fixed navbars in media queries.
9 |
10 | .container {
11 | .container-fixed();
12 |
13 | @media (min-width: @screen-sm-min) {
14 | width: @container-sm;
15 | }
16 | @media (min-width: @screen-md-min) {
17 | width: @container-md;
18 | }
19 | @media (min-width: @screen-lg-min) {
20 | width: @container-lg;
21 | }
22 | }
23 |
24 |
25 | // Fluid container
26 | //
27 | // Utilizes the mixin meant for fixed width containers, but without any defined
28 | // width for fluid, full width layouts.
29 |
30 | .container-fluid {
31 | .container-fixed();
32 | }
33 |
34 |
35 | // Row
36 | //
37 | // Rows contain and clear the floats of your columns.
38 |
39 | .row {
40 | .make-row();
41 | }
42 |
43 |
44 | // Columns
45 | //
46 | // Common styles for small and large grid columns
47 |
48 | .make-grid-columns();
49 |
50 |
51 | // Extra small grid
52 | //
53 | // Columns, offsets, pushes, and pulls for extra small devices like
54 | // smartphones.
55 |
56 | .make-grid(xs);
57 |
58 |
59 | // Small grid
60 | //
61 | // Columns, offsets, pushes, and pulls for the small device range, from phones
62 | // to tablets.
63 |
64 | @media (min-width: @screen-sm-min) {
65 | .make-grid(sm);
66 | }
67 |
68 |
69 | // Medium grid
70 | //
71 | // Columns, offsets, pushes, and pulls for the desktop device range.
72 |
73 | @media (min-width: @screen-md-min) {
74 | .make-grid(md);
75 | }
76 |
77 |
78 | // Large grid
79 | //
80 | // Columns, offsets, pushes, and pulls for the large desktop device range.
81 |
82 | @media (min-width: @screen-lg-min) {
83 | .make-grid(lg);
84 | }
85 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/jumbotron.less:
--------------------------------------------------------------------------------
1 | //
2 | // Jumbotron
3 | // --------------------------------------------------
4 |
5 |
6 | .jumbotron {
7 | padding: @jumbotron-padding;
8 | margin-bottom: @jumbotron-padding;
9 | color: @jumbotron-color;
10 | background-color: @jumbotron-bg;
11 |
12 | h1,
13 | .h1 {
14 | color: @jumbotron-heading-color;
15 | }
16 | p {
17 | margin-bottom: (@jumbotron-padding / 2);
18 | font-size: @jumbotron-font-size;
19 | font-weight: 200;
20 | }
21 |
22 | .container & {
23 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
24 | }
25 |
26 | .container {
27 | max-width: 100%;
28 | }
29 |
30 | @media screen and (min-width: @screen-sm-min) {
31 | padding-top: (@jumbotron-padding * 1.6);
32 | padding-bottom: (@jumbotron-padding * 1.6);
33 |
34 | .container & {
35 | padding-left: (@jumbotron-padding * 2);
36 | padding-right: (@jumbotron-padding * 2);
37 | }
38 |
39 | h1,
40 | .h1 {
41 | font-size: (@font-size-base * 4.5);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/labels.less:
--------------------------------------------------------------------------------
1 | //
2 | // Labels
3 | // --------------------------------------------------
4 |
5 | .label {
6 | display: inline;
7 | padding: .2em .6em .3em;
8 | font-size: 75%;
9 | font-weight: bold;
10 | line-height: 1;
11 | color: @label-color;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | border-radius: .25em;
16 |
17 | // Add hover effects, but only for links
18 | &[href] {
19 | &:hover,
20 | &:focus {
21 | color: @label-link-hover-color;
22 | text-decoration: none;
23 | cursor: pointer;
24 | }
25 | }
26 |
27 | // Empty labels collapse automatically (not available in IE8)
28 | &:empty {
29 | display: none;
30 | }
31 |
32 | // Quick fix for labels in buttons
33 | .btn & {
34 | position: relative;
35 | top: -1px;
36 | }
37 | }
38 |
39 | // Colors
40 | // Contextual variations (linked labels get darker on :hover)
41 |
42 | .label-default {
43 | .label-variant(@label-default-bg);
44 | }
45 |
46 | .label-primary {
47 | .label-variant(@label-primary-bg);
48 | }
49 |
50 | .label-success {
51 | .label-variant(@label-success-bg);
52 | }
53 |
54 | .label-info {
55 | .label-variant(@label-info-bg);
56 | }
57 |
58 | .label-warning {
59 | .label-variant(@label-warning-bg);
60 | }
61 |
62 | .label-danger {
63 | .label-variant(@label-danger-bg);
64 | }
65 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/media.less:
--------------------------------------------------------------------------------
1 | // Media objects
2 | // Source: http://stubbornella.org/content/?p=497
3 | // --------------------------------------------------
4 |
5 |
6 | // Common styles
7 | // -------------------------
8 |
9 | // Clear the floats
10 | .media,
11 | .media-body {
12 | overflow: hidden;
13 | zoom: 1;
14 | }
15 |
16 | // Proper spacing between instances of .media
17 | .media,
18 | .media .media {
19 | margin-top: 15px;
20 | }
21 | .media:first-child {
22 | margin-top: 0;
23 | }
24 |
25 | // For images and videos, set to block
26 | .media-object {
27 | display: block;
28 | }
29 |
30 | // Reset margins on headings for tighter default spacing
31 | .media-heading {
32 | margin: 0 0 5px;
33 | }
34 |
35 |
36 | // Media image alignment
37 | // -------------------------
38 |
39 | .media {
40 | > .pull-left {
41 | margin-right: 10px;
42 | }
43 | > .pull-right {
44 | margin-left: 10px;
45 | }
46 | }
47 |
48 |
49 | // Media list variation
50 | // -------------------------
51 |
52 | // Undo default ul/ol styles
53 | .media-list {
54 | padding-left: 0;
55 | list-style: none;
56 | }
57 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/pager.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pager pagination
3 | // --------------------------------------------------
4 |
5 |
6 | .pager {
7 | padding-left: 0;
8 | margin: @line-height-computed 0;
9 | list-style: none;
10 | text-align: center;
11 | &:extend(.clearfix all);
12 | li {
13 | display: inline;
14 | > a,
15 | > span {
16 | display: inline-block;
17 | padding: 5px 14px;
18 | background-color: @pager-bg;
19 | border: 1px solid @pager-border;
20 | border-radius: @pager-border-radius;
21 | }
22 |
23 | > a:hover,
24 | > a:focus {
25 | text-decoration: none;
26 | background-color: @pager-hover-bg;
27 | }
28 | }
29 |
30 | .next {
31 | > a,
32 | > span {
33 | float: right;
34 | }
35 | }
36 |
37 | .previous {
38 | > a,
39 | > span {
40 | float: left;
41 | }
42 | }
43 |
44 | .disabled {
45 | > a,
46 | > a:hover,
47 | > a:focus,
48 | > span {
49 | color: @pager-disabled-color;
50 | background-color: @pager-bg;
51 | cursor: not-allowed;
52 | }
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/pagination.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pagination (multiple pages)
3 | // --------------------------------------------------
4 | .pagination {
5 | display: inline-block;
6 | padding-left: 0;
7 | margin: @line-height-computed 0;
8 | border-radius: @border-radius-base;
9 |
10 | > li {
11 | display: inline; // Remove list-style and block-level defaults
12 | > a,
13 | > span {
14 | position: relative;
15 | float: left; // Collapse white-space
16 | padding: @padding-base-vertical @padding-base-horizontal;
17 | line-height: @line-height-base;
18 | text-decoration: none;
19 | color: @pagination-color;
20 | background-color: @pagination-bg;
21 | border: 1px solid @pagination-border;
22 | margin-left: -1px;
23 | }
24 | &:first-child {
25 | > a,
26 | > span {
27 | margin-left: 0;
28 | .border-left-radius(@border-radius-base);
29 | }
30 | }
31 | &:last-child {
32 | > a,
33 | > span {
34 | .border-right-radius(@border-radius-base);
35 | }
36 | }
37 | }
38 |
39 | > li > a,
40 | > li > span {
41 | &:hover,
42 | &:focus {
43 | color: @pagination-hover-color;
44 | background-color: @pagination-hover-bg;
45 | border-color: @pagination-hover-border;
46 | }
47 | }
48 |
49 | > .active > a,
50 | > .active > span {
51 | &,
52 | &:hover,
53 | &:focus {
54 | z-index: 2;
55 | color: @pagination-active-color;
56 | background-color: @pagination-active-bg;
57 | border-color: @pagination-active-border;
58 | cursor: default;
59 | }
60 | }
61 |
62 | > .disabled {
63 | > span,
64 | > span:hover,
65 | > span:focus,
66 | > a,
67 | > a:hover,
68 | > a:focus {
69 | color: @pagination-disabled-color;
70 | background-color: @pagination-disabled-bg;
71 | border-color: @pagination-disabled-border;
72 | cursor: not-allowed;
73 | }
74 | }
75 | }
76 |
77 | // Sizing
78 | // --------------------------------------------------
79 |
80 | // Large
81 | .pagination-lg {
82 | .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);
83 | }
84 |
85 | // Small
86 | .pagination-sm {
87 | .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);
88 | }
89 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/print.less:
--------------------------------------------------------------------------------
1 | //
2 | // Basic print styles
3 | // --------------------------------------------------
4 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
5 |
6 | @media print {
7 |
8 | * {
9 | text-shadow: none !important;
10 | color: #000 !important; // Black prints faster: h5bp.com/s
11 | background: transparent !important;
12 | box-shadow: none !important;
13 | }
14 |
15 | a,
16 | a:visited {
17 | text-decoration: underline;
18 | }
19 |
20 | a[href]:after {
21 | content: " (" attr(href) ")";
22 | }
23 |
24 | abbr[title]:after {
25 | content: " (" attr(title) ")";
26 | }
27 |
28 | // Don't show links for images, or javascript/internal links
29 | a[href^="javascript:"]:after,
30 | a[href^="#"]:after {
31 | content: "";
32 | }
33 |
34 | pre,
35 | blockquote {
36 | border: 1px solid #999;
37 | page-break-inside: avoid;
38 | }
39 |
40 | thead {
41 | display: table-header-group; // h5bp.com/t
42 | }
43 |
44 | tr,
45 | img {
46 | page-break-inside: avoid;
47 | }
48 |
49 | img {
50 | max-width: 100% !important;
51 | }
52 |
53 | p,
54 | h2,
55 | h3 {
56 | orphans: 3;
57 | widows: 3;
58 | }
59 |
60 | h2,
61 | h3 {
62 | page-break-after: avoid;
63 | }
64 |
65 | // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
66 | // Once fixed, we can just straight up remove this.
67 | select {
68 | background: #fff !important;
69 | }
70 |
71 | // Bootstrap components
72 | .navbar {
73 | display: none;
74 | }
75 | .table {
76 | td,
77 | th {
78 | background-color: #fff !important;
79 | }
80 | }
81 | .btn,
82 | .dropup > .btn {
83 | > .caret {
84 | border-top-color: #000 !important;
85 | }
86 | }
87 | .label {
88 | border: 1px solid #000;
89 | }
90 |
91 | .table {
92 | border-collapse: collapse !important;
93 | }
94 | .table-bordered {
95 | th,
96 | td {
97 | border: 1px solid #ddd !important;
98 | }
99 | }
100 |
101 | }
102 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/progress-bars.less:
--------------------------------------------------------------------------------
1 | //
2 | // Progress bars
3 | // --------------------------------------------------
4 |
5 |
6 | // Bar animations
7 | // -------------------------
8 |
9 | // WebKit
10 | @-webkit-keyframes progress-bar-stripes {
11 | from { background-position: 40px 0; }
12 | to { background-position: 0 0; }
13 | }
14 |
15 | // Spec and IE10+
16 | @keyframes progress-bar-stripes {
17 | from { background-position: 40px 0; }
18 | to { background-position: 0 0; }
19 | }
20 |
21 |
22 |
23 | // Bar itself
24 | // -------------------------
25 |
26 | // Outer container
27 | .progress {
28 | overflow: hidden;
29 | height: @line-height-computed;
30 | margin-bottom: @line-height-computed;
31 | background-color: @progress-bg;
32 | border-radius: @border-radius-base;
33 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
34 | }
35 |
36 | // Bar of progress
37 | .progress-bar {
38 | float: left;
39 | width: 0%;
40 | height: 100%;
41 | font-size: @font-size-small;
42 | line-height: @line-height-computed;
43 | color: @progress-bar-color;
44 | text-align: center;
45 | background-color: @progress-bar-bg;
46 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
47 | .transition(width .6s ease);
48 | }
49 |
50 | // Striped bars
51 | .progress-striped .progress-bar {
52 | #gradient > .striped();
53 | background-size: 40px 40px;
54 | }
55 |
56 | // Call animation for the active one
57 | .progress.active .progress-bar {
58 | .animation(progress-bar-stripes 2s linear infinite);
59 | }
60 |
61 |
62 |
63 | // Variations
64 | // -------------------------
65 |
66 | .progress-bar-success {
67 | .progress-bar-variant(@progress-bar-success-bg);
68 | }
69 |
70 | .progress-bar-info {
71 | .progress-bar-variant(@progress-bar-info-bg);
72 | }
73 |
74 | .progress-bar-warning {
75 | .progress-bar-variant(@progress-bar-warning-bg);
76 | }
77 |
78 | .progress-bar-danger {
79 | .progress-bar-variant(@progress-bar-danger-bg);
80 | }
81 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/responsive-utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Responsive: Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // IE10 in Windows (Phone) 8
7 | //
8 | // Support for responsive views via media queries is kind of borked in IE10, for
9 | // Surface/desktop in split view and for Windows Phone 8. This particular fix
10 | // must be accompanied by a snippet of JavaScript to sniff the user agent and
11 | // apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
12 | // our Getting Started page for more information on this bug.
13 | //
14 | // For more information, see the following:
15 | //
16 | // Issue: https://github.com/twbs/bootstrap/issues/10497
17 | // Docs: http://getbootstrap.com/getting-started/#browsers
18 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
19 |
20 | @-ms-viewport {
21 | width: device-width;
22 | }
23 |
24 |
25 | // Visibility utilities
26 | .visible-xs,
27 | .visible-sm,
28 | .visible-md,
29 | .visible-lg {
30 | .responsive-invisibility();
31 | }
32 |
33 | .visible-xs {
34 | @media (max-width: @screen-xs-max) {
35 | .responsive-visibility();
36 | }
37 | }
38 | .visible-sm {
39 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
40 | .responsive-visibility();
41 | }
42 | }
43 | .visible-md {
44 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
45 | .responsive-visibility();
46 | }
47 | }
48 | .visible-lg {
49 | @media (min-width: @screen-lg-min) {
50 | .responsive-visibility();
51 | }
52 | }
53 |
54 | .hidden-xs {
55 | @media (max-width: @screen-xs-max) {
56 | .responsive-invisibility();
57 | }
58 | }
59 | .hidden-sm {
60 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
61 | .responsive-invisibility();
62 | }
63 | }
64 | .hidden-md {
65 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
66 | .responsive-invisibility();
67 | }
68 | }
69 | .hidden-lg {
70 | @media (min-width: @screen-lg-min) {
71 | .responsive-invisibility();
72 | }
73 | }
74 |
75 |
76 | // Print utilities
77 | //
78 | // Media queries are placed on the inside to be mixin-friendly.
79 |
80 | .visible-print {
81 | .responsive-invisibility();
82 |
83 | @media print {
84 | .responsive-visibility();
85 | }
86 | }
87 |
88 | .hidden-print {
89 | @media print {
90 | .responsive-invisibility();
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/scaffolding.less:
--------------------------------------------------------------------------------
1 | //
2 | // Scaffolding
3 | // --------------------------------------------------
4 |
5 |
6 | // Reset the box-sizing
7 | //
8 | // Heads up! This reset may cause conflicts with some third-party widgets.
9 | // For recommendations on resolving such conflicts, see
10 | // http://getbootstrap.com/getting-started/#third-box-sizing
11 | * {
12 | .box-sizing(border-box);
13 | }
14 | *:before,
15 | *:after {
16 | .box-sizing(border-box);
17 | }
18 |
19 |
20 | // Body reset
21 |
22 | html {
23 | font-size: 62.5%;
24 | -webkit-tap-highlight-color: rgba(0,0,0,0);
25 | }
26 |
27 | body {
28 | font-family: @font-family-base;
29 | font-size: @font-size-base;
30 | line-height: @line-height-base;
31 | color: @text-color;
32 | background-color: @body-bg;
33 | }
34 |
35 | // Reset fonts for relevant elements
36 | input,
37 | button,
38 | select,
39 | textarea {
40 | font-family: inherit;
41 | font-size: inherit;
42 | line-height: inherit;
43 | }
44 |
45 |
46 | // Links
47 |
48 | a {
49 | color: @link-color;
50 | text-decoration: none;
51 |
52 | &:hover,
53 | &:focus {
54 | color: @link-hover-color;
55 | text-decoration: underline;
56 | }
57 |
58 | &:focus {
59 | .tab-focus();
60 | }
61 | }
62 |
63 |
64 | // Figures
65 | //
66 | // We reset this here because previously Normalize had no `figure` margins. This
67 | // ensures we don't break anyone's use of the element.
68 |
69 | figure {
70 | margin: 0;
71 | }
72 |
73 |
74 | // Images
75 |
76 | img {
77 | vertical-align: middle;
78 | }
79 |
80 | // Responsive images (ensure images don't scale beyond their parents)
81 | .img-responsive {
82 | .img-responsive();
83 | }
84 |
85 | // Rounded corners
86 | .img-rounded {
87 | border-radius: @border-radius-large;
88 | }
89 |
90 | // Image thumbnails
91 | //
92 | // Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
93 | .img-thumbnail {
94 | padding: @thumbnail-padding;
95 | line-height: @line-height-base;
96 | background-color: @thumbnail-bg;
97 | border: 1px solid @thumbnail-border;
98 | border-radius: @thumbnail-border-radius;
99 | .transition(all .2s ease-in-out);
100 |
101 | // Keep them at most 100% wide
102 | .img-responsive(inline-block);
103 | }
104 |
105 | // Perfect circle
106 | .img-circle {
107 | border-radius: 50%; // set radius in percents
108 | }
109 |
110 |
111 | // Horizontal rules
112 |
113 | hr {
114 | margin-top: @line-height-computed;
115 | margin-bottom: @line-height-computed;
116 | border: 0;
117 | border-top: 1px solid @hr-border;
118 | }
119 |
120 |
121 | // Only display content to screen readers
122 | //
123 | // See: http://a11yproject.com/posts/how-to-hide-content/
124 |
125 | .sr-only {
126 | position: absolute;
127 | width: 1px;
128 | height: 1px;
129 | margin: -1px;
130 | padding: 0;
131 | overflow: hidden;
132 | clip: rect(0,0,0,0);
133 | border: 0;
134 | }
135 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/thumbnails.less:
--------------------------------------------------------------------------------
1 | //
2 | // Thumbnails
3 | // --------------------------------------------------
4 |
5 |
6 | // Mixin and adjust the regular image class
7 | .thumbnail {
8 | display: block;
9 | padding: @thumbnail-padding;
10 | margin-bottom: @line-height-computed;
11 | line-height: @line-height-base;
12 | background-color: @thumbnail-bg;
13 | border: 1px solid @thumbnail-border;
14 | border-radius: @thumbnail-border-radius;
15 | .transition(all .2s ease-in-out);
16 |
17 | > img,
18 | a > img {
19 | &:extend(.img-responsive);
20 | margin-left: auto;
21 | margin-right: auto;
22 | }
23 |
24 | // Add a hover state for linked versions only
25 | a&:hover,
26 | a&:focus,
27 | a&.active {
28 | border-color: @link-color;
29 | }
30 |
31 | // Image captions
32 | .caption {
33 | padding: @thumbnail-caption-padding;
34 | color: @thumbnail-caption-color;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/tooltip.less:
--------------------------------------------------------------------------------
1 | //
2 | // Tooltips
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .tooltip {
8 | position: absolute;
9 | z-index: @zindex-tooltip;
10 | display: block;
11 | visibility: visible;
12 | font-size: @font-size-small;
13 | line-height: 1.4;
14 | .opacity(0);
15 |
16 | &.in { .opacity(@tooltip-opacity); }
17 | &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }
18 | &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }
19 | &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }
20 | &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }
21 | }
22 |
23 | // Wrapper for the tooltip content
24 | .tooltip-inner {
25 | max-width: @tooltip-max-width;
26 | padding: 3px 8px;
27 | color: @tooltip-color;
28 | text-align: center;
29 | text-decoration: none;
30 | background-color: @tooltip-bg;
31 | border-radius: @border-radius-base;
32 | }
33 |
34 | // Arrows
35 | .tooltip-arrow {
36 | position: absolute;
37 | width: 0;
38 | height: 0;
39 | border-color: transparent;
40 | border-style: solid;
41 | }
42 | .tooltip {
43 | &.top .tooltip-arrow {
44 | bottom: 0;
45 | left: 50%;
46 | margin-left: -@tooltip-arrow-width;
47 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
48 | border-top-color: @tooltip-arrow-color;
49 | }
50 | &.top-left .tooltip-arrow {
51 | bottom: 0;
52 | left: @tooltip-arrow-width;
53 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
54 | border-top-color: @tooltip-arrow-color;
55 | }
56 | &.top-right .tooltip-arrow {
57 | bottom: 0;
58 | right: @tooltip-arrow-width;
59 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
60 | border-top-color: @tooltip-arrow-color;
61 | }
62 | &.right .tooltip-arrow {
63 | top: 50%;
64 | left: 0;
65 | margin-top: -@tooltip-arrow-width;
66 | border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;
67 | border-right-color: @tooltip-arrow-color;
68 | }
69 | &.left .tooltip-arrow {
70 | top: 50%;
71 | right: 0;
72 | margin-top: -@tooltip-arrow-width;
73 | border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;
74 | border-left-color: @tooltip-arrow-color;
75 | }
76 | &.bottom .tooltip-arrow {
77 | top: 0;
78 | left: 50%;
79 | margin-left: -@tooltip-arrow-width;
80 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
81 | border-bottom-color: @tooltip-arrow-color;
82 | }
83 | &.bottom-left .tooltip-arrow {
84 | top: 0;
85 | left: @tooltip-arrow-width;
86 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
87 | border-bottom-color: @tooltip-arrow-color;
88 | }
89 | &.bottom-right .tooltip-arrow {
90 | top: 0;
91 | right: @tooltip-arrow-width;
92 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
93 | border-bottom-color: @tooltip-arrow-color;
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // Floats
7 | // -------------------------
8 |
9 | .clearfix {
10 | .clearfix();
11 | }
12 | .center-block {
13 | .center-block();
14 | }
15 | .pull-right {
16 | float: right !important;
17 | }
18 | .pull-left {
19 | float: left !important;
20 | }
21 |
22 |
23 | // Toggling content
24 | // -------------------------
25 |
26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
27 | .hide {
28 | display: none !important;
29 | }
30 | .show {
31 | display: block !important;
32 | }
33 | .invisible {
34 | visibility: hidden;
35 | }
36 | .text-hide {
37 | .text-hide();
38 | }
39 |
40 |
41 | // Hide from screenreaders and browsers
42 | //
43 | // Credit: HTML5 Boilerplate
44 |
45 | .hidden {
46 | display: none !important;
47 | visibility: hidden !important;
48 | }
49 |
50 |
51 | // For Affix plugin
52 | // -------------------------
53 |
54 | .affix {
55 | position: fixed;
56 | }
57 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/less/wells.less:
--------------------------------------------------------------------------------
1 | //
2 | // Wells
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .well {
8 | min-height: 20px;
9 | padding: 19px;
10 | margin-bottom: 20px;
11 | background-color: @well-bg;
12 | border: 1px solid @well-border;
13 | border-radius: @border-radius-base;
14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15 | blockquote {
16 | border-color: #ddd;
17 | border-color: rgba(0,0,0,.15);
18 | }
19 | }
20 |
21 | // Sizes
22 | .well-lg {
23 | padding: 24px;
24 | border-radius: @border-radius-large;
25 | }
26 | .well-sm {
27 | padding: 9px;
28 | border-radius: @border-radius-small;
29 | }
30 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap",
3 | "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development.",
4 | "version": "3.1.1",
5 | "keywords": [
6 | "bootstrap",
7 | "css"
8 | ],
9 | "homepage": "http://getbootstrap.com",
10 | "author": "Twitter, Inc.",
11 | "scripts": {
12 | "test": "grunt test"
13 | },
14 | "style": "./dist/css/bootstrap.css",
15 | "less": "./less/bootstrap.less",
16 | "repository": {
17 | "type": "git",
18 | "url": "https://github.com/twbs/bootstrap.git"
19 | },
20 | "bugs": {
21 | "url": "https://github.com/twbs/bootstrap/issues"
22 | },
23 | "license": {
24 | "type": "MIT",
25 | "url": "https://github.com/twbs/bootstrap/blob/master/LICENSE"
26 | },
27 | "devDependencies": {
28 | "btoa": "~1.1.1",
29 | "canonical-json": "~0.0.3",
30 | "grunt": "~0.4.2",
31 | "grunt-banner": "~0.2.0",
32 | "grunt-contrib-clean": "~0.5.0",
33 | "grunt-contrib-concat": "~0.3.0",
34 | "grunt-contrib-connect": "~0.6.0",
35 | "grunt-contrib-copy": "~0.5.0",
36 | "grunt-contrib-csslint": "~0.2.0",
37 | "grunt-contrib-cssmin": "~0.7.0",
38 | "grunt-contrib-jade": "~0.9.1",
39 | "grunt-contrib-jshint": "~0.8.0",
40 | "grunt-contrib-less": "~0.9.0",
41 | "grunt-contrib-qunit": "~0.4.0",
42 | "grunt-contrib-uglify": "~0.3.0",
43 | "grunt-contrib-watch": "~0.5.3",
44 | "grunt-csscomb": "~2.0.1",
45 | "grunt-exec": "0.4.3",
46 | "grunt-html-validation": "~0.1.13",
47 | "grunt-jekyll": "~0.4.1",
48 | "grunt-jscs-checker": "~0.3.0",
49 | "grunt-saucelabs": "~5.0.0",
50 | "grunt-sed": "~0.1.1",
51 | "load-grunt-tasks": "~0.3.0",
52 | "markdown": "~0.5.0"
53 | },
54 | "jspm": {
55 | "main": "js/bootstrap",
56 | "directories": {
57 | "example": "examples",
58 | "lib": "dist"
59 | },
60 | "shim": {
61 | "js/bootstrap": {
62 | "imports": "jquery",
63 | "exports": "$"
64 | }
65 | },
66 | "buildConfig": {
67 | "uglify": true
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/test-infra/requirements.txt:
--------------------------------------------------------------------------------
1 | boto==2.20.0
2 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/test-infra/sauce_browsers.yml:
--------------------------------------------------------------------------------
1 | [
2 | # Docs: https://saucelabs.com/docs/platforms/webdriver
3 |
4 | {
5 | browserName: "safari",
6 | platform: "OS X 10.9"
7 | },
8 | # {
9 | # browserName: "googlechrome",
10 | # platform: "OS X 10.9",
11 | # version: "31"
12 | # },
13 | {
14 | browserName: "firefox",
15 | platform: "OS X 10.9"
16 | },
17 |
18 | # Mac Opera not currently supported by Sauce Labs
19 |
20 | {
21 | browserName: "internet explorer",
22 | version: "11",
23 | platform: "Windows 8.1"
24 | },
25 | {
26 | browserName: "internet explorer",
27 | version: "10",
28 | platform: "Windows 8"
29 | },
30 | # {
31 | # browserName: "internet explorer",
32 | # version: "9",
33 | # platform: "Windows 7"
34 | # },
35 | # {
36 | # browserName: "internet explorer",
37 | # version: "8",
38 | # platform: "Windows 7"
39 | # },
40 |
41 | # { # Unofficial
42 | # browserName: "internet explorer",
43 | # version: "7",
44 | # platform: "Windows XP"
45 | # },
46 |
47 | {
48 | browserName: "googlechrome",
49 | platform: "Windows 8.1"
50 | },
51 | {
52 | browserName: "firefox",
53 | platform: "Windows 8.1"
54 | },
55 |
56 | # Win Opera 15+ not currently supported by Sauce Labs
57 |
58 | {
59 | browserName: "iphone",
60 | platform: "OS X 10.9",
61 | version: "7"
62 | },
63 |
64 | # iOS Chrome not currently supported by Sauce Labs
65 |
66 | # Linux (unofficial)
67 | {
68 | browserName: "googlechrome",
69 | platform: "Linux"
70 | },
71 | {
72 | browserName: "firefox",
73 | platform: "Linux"
74 | }
75 |
76 | # Android Chrome not currently supported by Sauce Labs
77 |
78 | # { # Android Browser (super-unofficial)
79 | # browserName: "android",
80 | # version: "4.0",
81 | # platform: "Linux"
82 | # }
83 | ]
84 |
--------------------------------------------------------------------------------
/bower_components/bootstrap/test-infra/uncached-npm-install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | cp test-infra/npm-shrinkwrap.canonical.json npm-shrinkwrap.json
3 | npm install
4 | rm npm-shrinkwrap.json
5 |
--------------------------------------------------------------------------------
/bower_components/d3/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "d3",
3 | "version": "3.4.6",
4 | "main": "d3.js",
5 | "scripts": [
6 | "d3.js"
7 | ],
8 | "ignore": [
9 | ".DS_Store",
10 | ".git",
11 | ".gitignore",
12 | ".npmignore",
13 | ".travis.yml",
14 | "Makefile",
15 | "bin",
16 | "component.json",
17 | "index.js",
18 | "lib",
19 | "node_modules",
20 | "package.json",
21 | "src",
22 | "test"
23 | ],
24 | "homepage": "https://github.com/mbostock/d3",
25 | "_release": "3.4.6",
26 | "_resolution": {
27 | "type": "version",
28 | "tag": "v3.4.6",
29 | "commit": "5d58ae83001016f6ad3c30191433bd6941498332"
30 | },
31 | "_source": "git://github.com/mbostock/d3.git",
32 | "_target": "~3.4.6",
33 | "_originalSource": "d3",
34 | "_direct": true
35 | }
--------------------------------------------------------------------------------
/bower_components/d3/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | If you’re looking for ways to contribute, please [peruse open issues](https://github.com/mbostock/d3/issues?milestone=&page=1&state=open). The icebox is a good place to find ideas that are not currently in development. If you already have an idea, please check past issues to see whether your idea or a similar one was previously discussed.
4 |
5 | Before submitting a pull request, consider implementing a live example first, say using [bl.ocks.org](http://bl.ocks.org). Real-world use cases go a long way to demonstrating the usefulness of a proposed feature. The more complex a feature’s implementation, the more usefulness it should provide. Share your demo using the #d3js tag on Twitter or by sending it to the d3-js Google group.
6 |
7 | If your proposed feature does not involve changing core functionality, consider submitting it instead as a [D3 plugin](https://github.com/d3/d3-plugins). New core features should be for general use, whereas plugins are suitable for more specialized use cases. When in doubt, it’s easier to start with a plugin before “graduating” to core.
8 |
9 | To contribute new documentation or add examples to the gallery, just [edit the Wiki](https://github.com/mbostock/d3/wiki)!
10 |
11 | ## How to Submit a Pull Request
12 |
13 | 1. Click the “Fork” button to create your personal fork of the D3 repository.
14 |
15 | 2. After cloning your fork of the D3 repository in the terminal, run `npm install` to install D3’s dependencies.
16 |
17 | 3. Create a new branch for your new feature. For example: `git checkout -b my-awesome-feature`. A dedicated branch for your pull request means you can develop multiple features at the same time, and ensures that your pull request is stable even if you later decide to develop an unrelated feature.
18 |
19 | 4. The `d3.js` and `d3.min.js` files are built from source files in the `src` directory. _Do not edit `d3.js` directly._ Instead, edit the source files, and then run `make` to build the generated files.
20 |
21 | 5. Use `make test` to run tests and verify your changes. If you are adding a new feature, you should add new tests! If you are changing existing functionality, make sure the existing tests run, or update them as appropriate.
22 |
23 | 6. Sign D3’s [Individual Contributor License Agreement](https://docs.google.com/forms/d/1CzjdBKtDuA8WeuFJinadx956xLQ4Xriv7-oDvXnZMaI/viewform). Unless you are submitting a trivial patch (such as fixing a typo), this form is needed to verify that you are able to contribute.
24 |
25 | 7. Submit your pull request, and good luck!
26 |
--------------------------------------------------------------------------------
/bower_components/d3/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2010-2014, Michael Bostock
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | * The name Michael Bostock may not be used to endorse or promote products
15 | derived from this software without specific prior written permission.
16 |
17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
21 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 |
--------------------------------------------------------------------------------
/bower_components/d3/README.md:
--------------------------------------------------------------------------------
1 | # Data-Driven Documents
2 |
3 |
4 |
5 | **D3.js** is a JavaScript library for manipulating documents based on data. **D3** helps you bring data to life using HTML, SVG and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation.
6 |
7 | Want to learn more? [See the wiki.](https://github.com/mbostock/d3/wiki)
8 |
9 | For examples, [see the gallery](https://github.com/mbostock/d3/wiki/Gallery) and [mbostock’s bl.ocks](http://bl.ocks.org/mbostock).
10 |
--------------------------------------------------------------------------------
/bower_components/d3/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "d3",
3 | "version": "3.4.6",
4 | "main": "d3.js",
5 | "scripts": [
6 | "d3.js"
7 | ],
8 | "ignore": [
9 | ".DS_Store",
10 | ".git",
11 | ".gitignore",
12 | ".npmignore",
13 | ".travis.yml",
14 | "Makefile",
15 | "bin",
16 | "component.json",
17 | "index.js",
18 | "lib",
19 | "node_modules",
20 | "package.json",
21 | "src",
22 | "test"
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/bower_components/d3/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mbostock/d3",
3 | "description": "A small, free JavaScript library for manipulating documents based on data.",
4 | "keywords": ["dom", "svg", "visualization", "js", "canvas"],
5 | "homepage": "http://d3js.org/",
6 | "license": "BSD-3-Clause",
7 | "authors": [
8 | {
9 | "name": "Mike Bostock",
10 | "homepage": "http://bost.ocks.org/mike"
11 | }
12 | ],
13 | "support": {
14 | "issues": "https://github.com/mbostock/d3/issues",
15 | "wiki": "https://github.com/mbostock/d3/wiki",
16 | "API": "https://github.com/mbostock/d3/wiki/API-Reference",
17 | "source": "https://github.com/mbostock/d3"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/bower_components/jquery/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery",
3 | "version": "2.1.0",
4 | "main": "dist/jquery.js",
5 | "license": "MIT",
6 | "ignore": [
7 | "**/.*",
8 | "build",
9 | "speed",
10 | "test",
11 | "*.md",
12 | "AUTHORS.txt",
13 | "Gruntfile.js",
14 | "package.json"
15 | ],
16 | "devDependencies": {
17 | "sizzle": "1.10.16",
18 | "requirejs": "~2.1.8",
19 | "qunit": "~1.12.0",
20 | "sinon": "~1.7.3"
21 | },
22 | "keywords": [
23 | "jquery",
24 | "javascript",
25 | "library"
26 | ],
27 | "homepage": "https://github.com/jquery/jquery",
28 | "_release": "2.1.0",
29 | "_resolution": {
30 | "type": "version",
31 | "tag": "2.1.0",
32 | "commit": "9434e03193c45d51bbd063a0edd1a07a6178d33f"
33 | },
34 | "_source": "git://github.com/jquery/jquery.git",
35 | "_target": "~2.1.0",
36 | "_originalSource": "jquery",
37 | "_direct": true
38 | }
--------------------------------------------------------------------------------
/bower_components/jquery/MIT-LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright 2014 jQuery Foundation and other contributors
2 | http://jquery.com/
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining
5 | a copy of this software and associated documentation files (the
6 | "Software"), to deal in the Software without restriction, including
7 | without limitation the rights to use, copy, modify, merge, publish,
8 | distribute, sublicense, and/or sell copies of the Software, and to
9 | permit persons to whom the Software is furnished to do so, subject to
10 | the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/bower_components/jquery/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery",
3 | "version": "2.1.0",
4 | "main": "dist/jquery.js",
5 | "license": "MIT",
6 | "ignore": [
7 | "**/.*",
8 | "build",
9 | "speed",
10 | "test",
11 | "*.md",
12 | "AUTHORS.txt",
13 | "Gruntfile.js",
14 | "package.json"
15 | ],
16 | "devDependencies": {
17 | "sizzle": "1.10.16",
18 | "requirejs": "~2.1.8",
19 | "qunit": "~1.12.0",
20 | "sinon": "~1.7.3"
21 | },
22 | "keywords": [
23 | "jquery",
24 | "javascript",
25 | "library"
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/bower_components/jquery/src/ajax/jsonp.js:
--------------------------------------------------------------------------------
1 | define([
2 | "../core",
3 | "./var/nonce",
4 | "./var/rquery",
5 | "../ajax"
6 | ], function( jQuery, nonce, rquery ) {
7 |
8 | var oldCallbacks = [],
9 | rjsonp = /(=)\?(?=&|$)|\?\?/;
10 |
11 | // Default jsonp settings
12 | jQuery.ajaxSetup({
13 | jsonp: "callback",
14 | jsonpCallback: function() {
15 | var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
16 | this[ callback ] = true;
17 | return callback;
18 | }
19 | });
20 |
21 | // Detect, normalize options and install callbacks for jsonp requests
22 | jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23 |
24 | var callbackName, overwritten, responseContainer,
25 | jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
26 | "url" :
27 | typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
28 | );
29 |
30 | // Handle iff the expected data type is "jsonp" or we have a parameter to set
31 | if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
32 |
33 | // Get callback name, remembering preexisting value associated with it
34 | callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
35 | s.jsonpCallback() :
36 | s.jsonpCallback;
37 |
38 | // Insert callback into url or form data
39 | if ( jsonProp ) {
40 | s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
41 | } else if ( s.jsonp !== false ) {
42 | s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
43 | }
44 |
45 | // Use data converter to retrieve json after script execution
46 | s.converters["script json"] = function() {
47 | if ( !responseContainer ) {
48 | jQuery.error( callbackName + " was not called" );
49 | }
50 | return responseContainer[ 0 ];
51 | };
52 |
53 | // force json dataType
54 | s.dataTypes[ 0 ] = "json";
55 |
56 | // Install callback
57 | overwritten = window[ callbackName ];
58 | window[ callbackName ] = function() {
59 | responseContainer = arguments;
60 | };
61 |
62 | // Clean-up function (fires after converters)
63 | jqXHR.always(function() {
64 | // Restore preexisting value
65 | window[ callbackName ] = overwritten;
66 |
67 | // Save back as free
68 | if ( s[ callbackName ] ) {
69 | // make sure that re-using the options doesn't screw things around
70 | s.jsonpCallback = originalSettings.jsonpCallback;
71 |
72 | // save the callback name for future use
73 | oldCallbacks.push( callbackName );
74 | }
75 |
76 | // Call if it was a function and we have a response
77 | if ( responseContainer && jQuery.isFunction( overwritten ) ) {
78 | overwritten( responseContainer[ 0 ] );
79 | }
80 |
81 | responseContainer = overwritten = undefined;
82 | });
83 |
84 | // Delegate to script
85 | return "script";
86 | }
87 | });
88 |
89 | });
90 |
--------------------------------------------------------------------------------
/bower_components/jquery/src/ajax/load.js:
--------------------------------------------------------------------------------
1 | define([
2 | "../core",
3 | "../core/parseHTML",
4 | "../ajax",
5 | "../traversing",
6 | "../manipulation",
7 | "../selector",
8 | // Optional event/alias dependency
9 | "../event/alias"
10 | ], function( jQuery ) {
11 |
12 | // Keep a copy of the old load method
13 | var _load = jQuery.fn.load;
14 |
15 | /**
16 | * Load a url into a page
17 | */
18 | jQuery.fn.load = function( url, params, callback ) {
19 | if ( typeof url !== "string" && _load ) {
20 | return _load.apply( this, arguments );
21 | }
22 |
23 | var selector, type, response,
24 | self = this,
25 | off = url.indexOf(" ");
26 |
27 | if ( off >= 0 ) {
28 | selector = url.slice( off );
29 | url = url.slice( 0, off );
30 | }
31 |
32 | // If it's a function
33 | if ( jQuery.isFunction( params ) ) {
34 |
35 | // We assume that it's the callback
36 | callback = params;
37 | params = undefined;
38 |
39 | // Otherwise, build a param string
40 | } else if ( params && typeof params === "object" ) {
41 | type = "POST";
42 | }
43 |
44 | // If we have elements to modify, make the request
45 | if ( self.length > 0 ) {
46 | jQuery.ajax({
47 | url: url,
48 |
49 | // if "type" variable is undefined, then "GET" method will be used
50 | type: type,
51 | dataType: "html",
52 | data: params
53 | }).done(function( responseText ) {
54 |
55 | // Save response for use in complete callback
56 | response = arguments;
57 |
58 | self.html( selector ?
59 |
60 | // If a selector was specified, locate the right elements in a dummy div
61 | // Exclude scripts to avoid IE 'Permission Denied' errors
62 | jQuery("").append( jQuery.parseHTML( responseText ) ).find( selector ) :
63 |
64 | // Otherwise use the full result
65 | responseText );
66 |
67 | }).complete( callback && function( jqXHR, status ) {
68 | self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
69 | });
70 | }
71 |
72 | return this;
73 | };
74 |
75 | });
76 |
--------------------------------------------------------------------------------
/bower_components/jquery/src/ajax/parseJSON.js:
--------------------------------------------------------------------------------
1 | define([
2 | "../core"
3 | ], function( jQuery ) {
4 |
5 | // Support: Android 2.3
6 | // Workaround failure to string-cast null input
7 | jQuery.parseJSON = function( data ) {
8 | return JSON.parse( data + "" );
9 | };
10 |
11 | return jQuery.parseJSON;
12 |
13 | });
14 |
--------------------------------------------------------------------------------
/bower_components/jquery/src/ajax/parseXML.js:
--------------------------------------------------------------------------------
1 | define([
2 | "../core"
3 | ], function( jQuery ) {
4 |
5 | // Cross-browser xml parsing
6 | jQuery.parseXML = function( data ) {
7 | var xml, tmp;
8 | if ( !data || typeof data !== "string" ) {
9 | return null;
10 | }
11 |
12 | // Support: IE9
13 | try {
14 | tmp = new DOMParser();
15 | xml = tmp.parseFromString( data, "text/xml" );
16 | } catch ( e ) {
17 | xml = undefined;
18 | }
19 |
20 | if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
21 | jQuery.error( "Invalid XML: " + data );
22 | }
23 | return xml;
24 | };
25 |
26 | return jQuery.parseXML;
27 |
28 | });
29 |
--------------------------------------------------------------------------------
/bower_components/jquery/src/ajax/script.js:
--------------------------------------------------------------------------------
1 | define([
2 | "../core",
3 | "../ajax"
4 | ], function( jQuery ) {
5 |
6 | // Install script dataType
7 | jQuery.ajaxSetup({
8 | accepts: {
9 | script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
10 | },
11 | contents: {
12 | script: /(?:java|ecma)script/
13 | },
14 | converters: {
15 | "text script": function( text ) {
16 | jQuery.globalEval( text );
17 | return text;
18 | }
19 | }
20 | });
21 |
22 | // Handle cache's special case and crossDomain
23 | jQuery.ajaxPrefilter( "script", function( s ) {
24 | if ( s.cache === undefined ) {
25 | s.cache = false;
26 | }
27 | if ( s.crossDomain ) {
28 | s.type = "GET";
29 | }
30 | });
31 |
32 | // Bind script tag hack transport
33 | jQuery.ajaxTransport( "script", function( s ) {
34 | // This transport only deals with cross domain requests
35 | if ( s.crossDomain ) {
36 | var script, callback;
37 | return {
38 | send: function( _, complete ) {
39 | script = jQuery("