├── .gitignore ├── .ruby-version ├── Procfile ├── bower_components ├── jquery │ ├── src │ │ ├── outro.js │ │ ├── selector.js │ │ ├── var │ │ │ ├── arr.js │ │ │ ├── trim.js │ │ │ ├── rnotwhite.js │ │ │ ├── strundefined.js │ │ │ ├── push.js │ │ │ ├── slice.js │ │ │ ├── class2type.js │ │ │ ├── concat.js │ │ │ ├── indexOf.js │ │ │ ├── pnum.js │ │ │ ├── hasOwn.js │ │ │ ├── toString.js │ │ │ └── support.js │ │ ├── ajax │ │ │ ├── var │ │ │ │ ├── rquery.js │ │ │ │ └── nonce.js │ │ │ ├── parseJSON.js │ │ │ ├── parseXML.js │ │ │ ├── script.js │ │ │ ├── load.js │ │ │ └── jsonp.js │ │ ├── css │ │ │ ├── var │ │ │ │ ├── rmargin.js │ │ │ │ ├── cssExpand.js │ │ │ │ ├── rnumnonpx.js │ │ │ │ ├── getStyles.js │ │ │ │ └── isHidden.js │ │ │ ├── hiddenVisibleSelectors.js │ │ │ ├── swap.js │ │ │ ├── addGetHookIf.js │ │ │ ├── curCSS.js │ │ │ └── defaultDisplay.js │ │ ├── manipulation │ │ │ ├── var │ │ │ │ └── rcheckableType.js │ │ │ ├── _evalUrl.js │ │ │ └── support.js │ │ ├── data │ │ │ ├── var │ │ │ │ ├── data_priv.js │ │ │ │ └── data_user.js │ │ │ └── accepts.js │ │ ├── core │ │ │ ├── var │ │ │ │ └── rsingleTag.js │ │ │ ├── parseHTML.js │ │ │ ├── access.js │ │ │ └── ready.js │ │ ├── traversing │ │ │ ├── var │ │ │ │ └── rneedsContext.js │ │ │ └── findFilter.js │ │ ├── event │ │ │ ├── support.js │ │ │ └── alias.js │ │ ├── attributes.js │ │ ├── deprecated.js │ │ ├── effects │ │ │ └── animatedSelector.js │ │ ├── selector-sizzle.js │ │ ├── queue │ │ │ └── delay.js │ │ ├── jquery.js │ │ ├── exports │ │ │ ├── amd.js │ │ │ └── global.js │ │ ├── attributes │ │ │ ├── support.js │ │ │ └── prop.js │ │ ├── intro.js │ │ ├── wrap.js │ │ └── dimensions.js │ ├── bower.json │ ├── .bower.json │ └── MIT-LICENSE.txt ├── bootstrap │ ├── test-infra │ │ ├── requirements.txt │ │ ├── uncached-npm-install.sh │ │ └── sauce_browsers.yml │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ ├── dist │ │ └── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ ├── bower.json │ ├── less │ │ ├── component-animations.less │ │ ├── wells.less │ │ ├── breadcrumbs.less │ │ ├── close.less │ │ ├── thumbnails.less │ │ ├── utilities.less │ │ ├── jumbotron.less │ │ ├── media.less │ │ ├── pager.less │ │ ├── bootstrap.less │ │ ├── badges.less │ │ ├── labels.less │ │ ├── code.less │ │ ├── alerts.less │ │ ├── grid.less │ │ ├── progress-bars.less │ │ ├── print.less │ │ ├── pagination.less │ │ ├── responsive-utilities.less │ │ ├── tooltip.less │ │ └── scaffolding.less │ ├── .bower.json │ ├── grunt │ │ ├── bs-raw-files-generator.js │ │ ├── shrinkwrap.js │ │ └── bs-glyphicons-data-generator.js │ ├── LICENSE │ ├── js │ │ ├── transition.js │ │ └── alert.js │ └── package.json ├── trianglify │ ├── examples │ │ ├── example0.jpg │ │ ├── example1.jpg │ │ ├── example2.jpg │ │ └── example3.jpg │ ├── bower.json │ ├── .bower.json │ ├── gulpfile.js │ └── package.json ├── bootstrap-sass-official │ ├── vendor │ │ └── assets │ │ │ ├── fonts │ │ │ └── bootstrap │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ ├── javascripts │ │ │ ├── bootstrap.js │ │ │ └── bootstrap │ │ │ │ ├── transition.js │ │ │ │ └── alert.js │ │ │ └── stylesheets │ │ │ ├── bootstrap │ │ │ ├── _wells.scss │ │ │ ├── _component-animations.scss │ │ │ ├── _breadcrumbs.scss │ │ │ ├── _close.scss │ │ │ ├── _thumbnails.scss │ │ │ ├── _utilities.scss │ │ │ ├── _jumbotron.scss │ │ │ ├── _media.scss │ │ │ ├── _pager.scss │ │ │ ├── bootstrap.scss │ │ │ ├── _badges.scss │ │ │ ├── _labels.scss │ │ │ ├── _code.scss │ │ │ ├── _alerts.scss │ │ │ ├── _grid.scss │ │ │ ├── _progress-bars.scss │ │ │ ├── _print.scss │ │ │ ├── _responsive-utilities.scss │ │ │ ├── _pagination.scss │ │ │ └── _tooltip.scss │ │ │ └── bootstrap.scss │ ├── bower.json │ ├── composer.json │ ├── .bower.json │ └── LICENSE └── d3 │ ├── bower.json │ ├── composer.json │ ├── README.md │ ├── .bower.json │ ├── LICENSE │ └── CONTRIBUTING.md ├── .env ├── blog.html ├── favicon.png ├── _layouts ├── schedule.html ├── blog.html ├── intro.html └── default.html ├── images ├── gandalf.jpg ├── github-name.png ├── github-tag.png ├── gettingstarted.png └── github-create.png ├── 404.md ├── Rakefile ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff ├── Gemfile ├── _chapters ├── 0 │ ├── 0-setup.md │ ├── 3-verifying.md │ └── 1-prerequisites.md ├── 1 │ ├── 3-html-forms.md │ ├── 4-post-requests.md │ └── 0-up-and-running.md ├── 2 │ ├── 3-debugging-css.md │ └── 0-intro.md ├── 3 │ ├── 1-additional-help.md │ └── 0-intro.md ├── 4 │ ├── 0-intro.md │ ├── 3-using-activerecord.md │ └── 1-database-basics.md ├── 5 │ ├── 0-intro.md │ ├── 5-readmes-and-deleting.md │ ├── 2-setup.md │ └── 1-basic-concepts.md ├── 6 │ └── 0-intro.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 │ ├── 1-example-repo.md │ ├── 2-git-cheatsheet.md │ ├── 0-resources.md │ └── 3-about-this-site.md └── 0-schedule.md ├── js └── scripts.js ├── config.ru ├── Readme.md ├── _includes ├── footer.html ├── analytics.js ├── header.html └── head.html ├── _config.yml ├── bower.json ├── _bowercopy.sh ├── _templates └── intro.md ├── _plugins ├── sorted_chapters.rb ├── schedule.rb └── toc.rb └── Gemfile.lock /.gitignore: -------------------------------------------------------------------------------- 1 | _site -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.1.2 2 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: bundle exec puma -p $PORT config.ru -------------------------------------------------------------------------------- /bower_components/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | })); 2 | -------------------------------------------------------------------------------- /bower_components/bootstrap/test-infra/requirements.txt: -------------------------------------------------------------------------------- 1 | boto==2.20.0 2 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | export BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-ruby 2 | -------------------------------------------------------------------------------- /bower_components/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define([ "./selector-sizzle" ]); 2 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return []; 3 | }); 4 | -------------------------------------------------------------------------------- /blog.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Blog 3 | layout: blog 4 | permalink: blog/index.html 5 | --- 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/trim.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return "".trim; 3 | }); 4 | -------------------------------------------------------------------------------- /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/favicon.png -------------------------------------------------------------------------------- /_layouts/schedule.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {{content}} 6 | 7 | {% schedule %} -------------------------------------------------------------------------------- /bower_components/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/\?/); 3 | }); 4 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/\S+/g); 3 | }); 4 | -------------------------------------------------------------------------------- /bower_components/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/^margin/); 3 | }); 4 | -------------------------------------------------------------------------------- /images/gandalf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/images/gandalf.jpg -------------------------------------------------------------------------------- /bower_components/jquery/src/var/strundefined.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return typeof undefined; 3 | }); 4 | -------------------------------------------------------------------------------- /images/github-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/images/github-name.png -------------------------------------------------------------------------------- /images/github-tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/images/github-tag.png -------------------------------------------------------------------------------- /images/gettingstarted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/images/gettingstarted.png -------------------------------------------------------------------------------- /images/github-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/images/github-create.png -------------------------------------------------------------------------------- /404.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: 404 4 | summary: Page Not Found 5 | --- 6 | 7 |  8 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // [[Class]] -> type pairs 3 | return {}; 4 | }); 5 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | }); 4 | -------------------------------------------------------------------------------- /bower_components/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/^(?:checkbox|radio)$/i); 3 | }); 4 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; 3 | }); 4 | -------------------------------------------------------------------------------- /bower_components/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/data/var/data_priv.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/data/var/data_user.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | }); 6 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | namespace :assets do 2 | desc 'Precompile assets' 3 | task :precompile do 4 | sh "bundle exec jekyll build" 5 | end 6 | end -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /bower_components/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // Match a standalone tag 3 | return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); 4 | }); 5 | -------------------------------------------------------------------------------- /bower_components/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // All support tests are defined in their respective modules. 3 | return {}; 4 | }); 5 | -------------------------------------------------------------------------------- /bower_components/trianglify/examples/example0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/bower_components/trianglify/examples/example0.jpg -------------------------------------------------------------------------------- /bower_components/trianglify/examples/example1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/bower_components/trianglify/examples/example1.jpg -------------------------------------------------------------------------------- /bower_components/trianglify/examples/example2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/bower_components/trianglify/examples/example2.jpg -------------------------------------------------------------------------------- /bower_components/trianglify/examples/example3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/bower_components/trianglify/examples/example3.jpg -------------------------------------------------------------------------------- /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' -------------------------------------------------------------------------------- /_chapters/10/0-intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | subtitle: Demo Day 3 | layout: intro 4 | index: 10 5 | 6 | date: 7 | December 2 8 | 9 | due: 10 | project demos 11 | 12 | --- 13 | -------------------------------------------------------------------------------- /bower_components/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | }); 6 | -------------------------------------------------------------------------------- /_chapters/11/0-intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | subtitle: Demo Day 3 | layout: intro 4 | index: 11 5 | 6 | date: 7 | December 4 8 | 9 | due: 10 | project demos 11 | 12 | 13 | --- 14 | -------------------------------------------------------------------------------- /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/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | }); 7 | -------------------------------------------------------------------------------- /bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /bower_components/jquery/src/css/var/getStyles.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return function( elem ) { 3 | return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); 4 | }; 5 | }); 6 | -------------------------------------------------------------------------------- /bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/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/HEAD/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/HEAD/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /bower_components/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusinBubbles = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | }); 10 | -------------------------------------------------------------------------------- /js/scripts.js: -------------------------------------------------------------------------------- 1 | --- 2 | layout: ~ 3 | --- 4 | {% include jquery.min.js %} 5 | {% include bootstrap.min.js %} 6 | {% include trianglify.min.js %} 7 | {% include d3.min.js %} 8 | {% include app.js %} 9 | {% include analytics.js %} -------------------------------------------------------------------------------- /_layouts/blog.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% for post in site.posts %} 6 |
{{ post.summary }}
8 |{{ post.date | date: "%d %h %Y" }}
9 | {% endfor %} -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | require 'rack/contrib/try_static' 2 | require 'rack/contrib/not_found' 3 | 4 | use Rack::TryStatic, 5 | :root => "_site", 6 | :urls => %w[/], 7 | :try => ['index.html', '/index.html'] 8 | 9 | run Rack::NotFound.new('_site/404.html') 10 | -------------------------------------------------------------------------------- /_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 | -------------------------------------------------------------------------------- /bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrohlf/sensible-web-development/HEAD/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/HEAD/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/HEAD/bower_components/bootstrap-sass-official/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /bower_components/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | }); 12 | -------------------------------------------------------------------------------- /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/deprecated.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./traversing" 4 | ], function( jQuery ) { 5 | 6 | // The number of elements contained in the matched element set 7 | jQuery.fn.size = function() { 8 | return this.length; 9 | }; 10 | 11 | jQuery.fn.andSelf = jQuery.fn.addBack; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /bower_components/jquery/src/effects/animatedSelector.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../selector", 4 | "../effects" 5 | ], function( jQuery ) { 6 | 7 | jQuery.expr.filters.animated = function( elem ) { 8 | return jQuery.grep(jQuery.timers, function( fn ) { 9 | return elem === fn.elem; 10 | }).length; 11 | }; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /_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 | -------------------------------------------------------------------------------- /bower_components/jquery/src/manipulation/_evalUrl.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../ajax" 3 | ], function( jQuery ) { 4 | 5 | jQuery._evalUrl = function( url ) { 6 | return jQuery.ajax({ 7 | url: url, 8 | type: "GET", 9 | dataType: "script", 10 | async: false, 11 | global: false, 12 | "throws": true 13 | }); 14 | }; 15 | 16 | return jQuery._evalUrl; 17 | 18 | }); 19 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bower_components/jquery/src/selector-sizzle.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "sizzle" 4 | ], function( jQuery, Sizzle ) { 5 | 6 | jQuery.find = Sizzle; 7 | jQuery.expr = Sizzle.selectors; 8 | jQuery.expr[":"] = jQuery.expr.pseudos; 9 | jQuery.unique = Sizzle.uniqueSort; 10 | jQuery.text = Sizzle.getText; 11 | jQuery.isXMLDoc = Sizzle.isXML; 12 | jQuery.contains = Sizzle.contains; 13 | 14 | }); 15 | -------------------------------------------------------------------------------- /_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/header.html: -------------------------------------------------------------------------------- 1 |{{page.summary}}
{% endif %} 6 |Class date: {{page.date}}
7 | 8 | {% if page.overview %} 9 |{{page.assignment.summary | markdownify}}
33 |{{page.assignment.due | markdownify}}
41 |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/12/3-about-this-site.md:
--------------------------------------------------------------------------------
1 | ---
2 | subtitle: About This Site
3 | summary: How this site is built.
4 | layout: default
5 | index: 12.2
6 | ---
7 |
8 | If you're curious about the technology behind this website, here's what makes it tick:
9 |
10 | ## Page Generation & Styling
11 |
12 | The site content is built from a collection of [markdown](http://daringfireball.net/projects/markdown/) files into static HTML with a tool called [Jekyll](http://jekyllrb.com). I'm using [Twitter Bootstrap](http://getbootstrap.com) and [SASS](http://sass-lang.com) for styling. The header background images are generated client-side with a JavaScript library that I wrote called [Trianglify](http://qrohlf.com/trianglify/).
13 |
14 | ## Deployment
15 |
16 | This page is deployed Amazon's cloud using [Heroku](https://www.heroku.com). Jekyll generates the site's static files during asset compilation and then I use [Puma](http://puma.io) and Rack::TryStatic to serve the compiled site. I trigger the deployments through a script I wrote called [booyah](https://github.com/qrohlf/dotfiles/blob/master/functions/booyah.sh) to make sure that the Github repo and the depoyed site are both updated at the same time.
17 |
18 | ## Source
19 |
20 | All of the source for this site is available on [GitHub](https://github.com/qrohlf/sensible-web-development), and you can submit corrections and suggestions using the [Issue Tracker](https://github.com/qrohlf/sensible-web-development).
21 |
--------------------------------------------------------------------------------
/_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 | "