Move notes into slideshow speaker notes
This commit is contained in:
parent
336fda75cb
commit
11a65b2ece
16 changed files with 2998 additions and 92 deletions
51
bower_components/headjs/.bower.json
vendored
Normal file
51
bower_components/headjs/.bower.json
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"name": "headjs",
|
||||
"description": "HeadJS: Responsive Design, Feature Detections & Asset Loading. The only script in your <HEAD>",
|
||||
"version": "1.0.3",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Tero Piirainen"
|
||||
},
|
||||
{
|
||||
"name": "Robert Hoffmann"
|
||||
}
|
||||
],
|
||||
"homepage ": "http://headjs.com",
|
||||
"main": [
|
||||
"./dist/1.0.0/head.min.js",
|
||||
"./dist/1.0.0/head.min.js.map",
|
||||
"./dist/1.0.0/changelog.txt"
|
||||
],
|
||||
"ignore": [
|
||||
"**",
|
||||
"!/dist/1.0.0/*.js",
|
||||
"!/dist/1.0.0/*.map",
|
||||
"!/dist/1.0.0/*.txt"
|
||||
],
|
||||
"directory": "public/scripts",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/headjs/headjs.git"
|
||||
},
|
||||
"keywords": [
|
||||
"loader",
|
||||
"require",
|
||||
"polyfill",
|
||||
"html5",
|
||||
"css3",
|
||||
"feature",
|
||||
"responsive"
|
||||
],
|
||||
"homepage": "https://github.com/headjs/headjs",
|
||||
"_release": "1.0.3",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.3",
|
||||
"commit": "edc8427191a633d80e7372c49e6d28a098be766f"
|
||||
},
|
||||
"_source": "git://github.com/headjs/headjs.git",
|
||||
"_target": "~1.0.3",
|
||||
"_originalSource": "headjs",
|
||||
"_direct": true
|
||||
}
|
96
bower_components/headjs/dist/1.0.0/changelog.txt
vendored
Normal file
96
bower_components/headjs/dist/1.0.0/changelog.txt
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
1.0.3 (2013-11-22)
|
||||
- New: Timeout added to resource loading
|
||||
- New: CSS callbacks now executed for all browsers
|
||||
- https://github.com/headjs/headjs/pull/273
|
||||
- New: Changed how file extensions are parsed for detecting css files
|
||||
- in the future, we will need to add a way to supply a filetype when loading resources via scripts like: style.aspx, style.php
|
||||
- Fix: Array loading & trigger not functioning correctly on old browsers
|
||||
- https://github.com/headjs/headjs/issues/274
|
||||
- Fix: ready() sometimes does not trigger if assets are loaded too fast
|
||||
- https://github.com/headjs/headjs/issues/271
|
||||
|
||||
1.0.2 (2013-11-13)
|
||||
- Fix: no-js class not being removed
|
||||
- https://github.com/headjs/headjs/issues/270
|
||||
|
||||
1.0.1 (2013-11-05)
|
||||
- Fix: Old IE's can trigger ready too soon
|
||||
- https://github.com/headjs/headjs/issues/203
|
||||
|
||||
1.0.0 (2013-11-04)
|
||||
- New: Detect Windows 8 Mobile (Surface RT/Pro), IE11, Kindle, and other Android devices
|
||||
- New: Add Browser & Version CSS no matter what browser breakpoints are configured
|
||||
- Example: .ff .ff20
|
||||
- There is no need to cycle through all browser versions in 90% of cases
|
||||
- Makes it possible to work without any breakpoints at all
|
||||
- New: Improved CSS Router
|
||||
- https://github.com/headjs/headjs/issues/227
|
||||
- New: Added "main" HTML5 element to shim
|
||||
- https://github.com/headjs/headjs/pull/230
|
||||
- New: Enable/Disable HTML5 Shim in head_conf
|
||||
- New: Load files from Array of Files or Array of Labels
|
||||
- head.load(["file1", "file2"], callBack);
|
||||
- head.load([{ label1: "file1" }, { label2: "file2" }], callBack);
|
||||
- https://github.com/headjs/headjs/issues/139
|
||||
- New: Possibility to wait for multiple labels or files
|
||||
- head.ready(["label1", "label2"], callBack);
|
||||
- head.ready(["file1.js", "file2.js"], callBack);
|
||||
- https://github.com/headjs/headjs/pull/212
|
||||
- New: Load file via data attribute on HeadJS script tag
|
||||
- data-headjs-load="configuration.js"
|
||||
- https://github.com/headjs/headjs/pull/213
|
||||
- New: Source map files have been added for all minified JS files
|
||||
- Fix: Prevent loading empty strings
|
||||
- https://github.com/headjs/headjs/pull/184
|
||||
- Fix: CSS classes getting bigger on successive resizes under Chrome
|
||||
- https://github.com/headjs/headjs/issues/226
|
||||
- Fix: Invalid regular expression for CSS detection
|
||||
- https://github.com/headjs/headjs/issues/255
|
||||
- Fix: callback failing to trigger under certain cirumstances
|
||||
- https://github.com/headjs/headjs/issues/262
|
||||
- Divers: Changed window.frameElement detection
|
||||
- https://github.com/headjs/headjs/pull/257
|
||||
- Divers: Cleaned up a bunch of syntaxt to conform to JSHint
|
||||
- Now using a very strict .jshintrc
|
||||
- Divers: Added missing .gitattributes
|
||||
|
||||
0.99 (2012-11-15)
|
||||
- Load: Fixed regression in IE6, caused by IE10 fix
|
||||
- Load: CSS loading seems to work in all browsers.
|
||||
- However a few will not trigger the callback. Over 90% do.
|
||||
- Either don't use it, or only load css in situations when you don't need the callback triggered.
|
||||
- Load: Conditional loading with head.test() now in evaluation phase
|
||||
- try it, but don't rely on it yet
|
||||
- head.test(bool, "ok.js", "failed.js", callback)
|
||||
- All: CDN is now availiable thanks to: http://cloudflare.com
|
||||
- Info in download section on main site
|
||||
- Unit Tests
|
||||
- Integrated with main site so that everyone can participate
|
||||
- They have also been hooked up to automatically report stats back to http://browserscope.org
|
||||
|
||||
0.98 (2012-11-09)
|
||||
- Load: Fixed loading bug in IE10
|
||||
- Load: Corrected some issues with loading from inside <head>
|
||||
- Load: Rewrite of large parts of code base
|
||||
- Started to massively document the sourcecode :)
|
||||
- Css3: moved "touch" detection from core to here
|
||||
- Css3: added "retina" detection
|
||||
- Css3: replaced "font-face" detection that was using "Conditional Comments" with simplisitc browser version detection
|
||||
- Core: Added gt, gte, lte, eq classes to width detection (lt existed already)
|
||||
- Core: Added gt, gte, lt, lte, eq classes for browser vendor & version detection
|
||||
- By default only lt/gt classes are activated
|
||||
- You can of course configure to your likings via head_conf
|
||||
|
||||
0.97a (2012-10-20)
|
||||
- Updated QUnit & got unit tests running again
|
||||
- Swictched to "use strict"
|
||||
- Fixed up some variable usage
|
||||
- Added browser detections other than just for ie-lt
|
||||
- updated browser regexes (firefox, safari, opera, ios, android, webkit)
|
||||
- detect if browser is: desktop, mobile, touch enabled
|
||||
- detect portrait/landscape mode
|
||||
- html5 shim now only triggers on ie-lt9
|
||||
- added a throttle to onResize, since some browsers fire tons of events/sec
|
||||
- added corrected height/width measurements, but only exposed via new object: head.screen
|
||||
- contains height/width, innerHeight/innerWidth, outerHeight/outerWidth
|
||||
- force all css router names to lowercase just in case ppl try typing in names with wierd casings
|
312
bower_components/headjs/dist/1.0.0/head.core.js
vendored
Normal file
312
bower_components/headjs/dist/1.0.0/head.core.js
vendored
Normal file
|
@ -0,0 +1,312 @@
|
|||
///#source 1 1 /src/1.0.0/core.js
|
||||
/*! head.core - v1.0.2 */
|
||||
/*
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
* WebSite http://headjs.com
|
||||
*/
|
||||
(function(win, undefined) {
|
||||
"use strict";
|
||||
|
||||
// gt, gte, lt, lte, eq breakpoints would have been more simple to write as ['gt','gte','lt','lte','eq']
|
||||
// but then we would have had to loop over the collection on each resize() event,
|
||||
// a simple object with a direct access to true/false is therefore much more efficient
|
||||
var doc = win.document,
|
||||
nav = win.navigator,
|
||||
loc = win.location,
|
||||
html = doc.documentElement,
|
||||
klass = [],
|
||||
conf = {
|
||||
screens : [240, 320, 480, 640, 768, 800, 1024, 1280, 1440, 1680, 1920],
|
||||
screensCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": false },
|
||||
browsers : [
|
||||
{ ie: { min: 6, max: 11 } }
|
||||
//,{ chrome : { min: 8, max: 33 } }
|
||||
//,{ ff : { min: 3, max: 26 } }
|
||||
//,{ ios : { min: 3, max: 7 } }
|
||||
//,{ android: { min: 2, max: 4 } }
|
||||
//,{ webkit : { min: 9, max: 12 } }
|
||||
//,{ opera : { min: 9, max: 12 } }
|
||||
],
|
||||
browserCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": true },
|
||||
html5 : true,
|
||||
page : "-page",
|
||||
section : "-section",
|
||||
head : "head"
|
||||
};
|
||||
|
||||
if (win.head_conf) {
|
||||
for (var item in win.head_conf) {
|
||||
if (win.head_conf[item] !== undefined) {
|
||||
conf[item] = win.head_conf[item];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function pushClass(name) {
|
||||
klass[klass.length] = name;
|
||||
}
|
||||
|
||||
function removeClass(name) {
|
||||
// need to test for both space and no space
|
||||
// https://github.com/headjs/headjs/issues/270
|
||||
// https://github.com/headjs/headjs/issues/226
|
||||
var re = new RegExp(" ?\\b" + name + "\\b");
|
||||
html.className = html.className.replace(re, "");
|
||||
}
|
||||
|
||||
function each(arr, fn) {
|
||||
for (var i = 0, l = arr.length; i < l; i++) {
|
||||
fn.call(arr, arr[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
// API
|
||||
var api = win[conf.head] = function() {
|
||||
api.ready.apply(null, arguments);
|
||||
};
|
||||
|
||||
api.feature = function(key, enabled, queue) {
|
||||
|
||||
// internal: apply all classes
|
||||
if (!key) {
|
||||
html.className += " " + klass.join(" ");
|
||||
klass = [];
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
if (Object.prototype.toString.call(enabled) === "[object Function]") {
|
||||
enabled = enabled.call();
|
||||
}
|
||||
|
||||
pushClass((enabled ? "" : "no-") + key);
|
||||
api[key] = !!enabled;
|
||||
|
||||
// apply class to HTML element
|
||||
if (!queue) {
|
||||
removeClass("no-" + key);
|
||||
removeClass(key);
|
||||
api.feature();
|
||||
}
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
// no queue here, so we can remove any eventual pre-existing no-js class
|
||||
api.feature("js", true);
|
||||
|
||||
// browser type & version
|
||||
var ua = nav.userAgent.toLowerCase(),
|
||||
mobile = /mobile|android|kindle|silk|midp|phone|(windows .+arm|touch)/.test(ua);
|
||||
|
||||
// useful for enabling/disabling feature (we can consider a desktop navigator to have more cpu/gpu power)
|
||||
api.feature("mobile" , mobile , true);
|
||||
api.feature("desktop", !mobile, true);
|
||||
|
||||
// http://www.zytrax.com/tech/web/browser_ids.htm
|
||||
// http://www.zytrax.com/tech/web/mobile_ids.html
|
||||
ua = /(chrome|firefox)[ \/]([\w.]+)/.exec(ua) || // Chrome & Firefox
|
||||
/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile IOS
|
||||
/(android)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile Webkit
|
||||
/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Safari & Opera
|
||||
/(msie) ([\w.]+)/.exec(ua) ||
|
||||
/(trident).+rv:(\w.)+/.exec(ua) || [];
|
||||
|
||||
var browser = ua[1],
|
||||
version = parseFloat(ua[2]);
|
||||
|
||||
switch (browser) {
|
||||
case "msie":
|
||||
case "trident":
|
||||
browser = "ie";
|
||||
version = doc.documentMode || version;
|
||||
break;
|
||||
|
||||
case "firefox":
|
||||
browser = "ff";
|
||||
break;
|
||||
|
||||
case "ipod":
|
||||
case "ipad":
|
||||
case "iphone":
|
||||
browser = "ios";
|
||||
break;
|
||||
|
||||
case "webkit":
|
||||
browser = "safari";
|
||||
break;
|
||||
}
|
||||
|
||||
// Browser vendor and version
|
||||
api.browser = {
|
||||
name: browser,
|
||||
version: version
|
||||
};
|
||||
api.browser[browser] = true;
|
||||
|
||||
for (var i = 0, l = conf.browsers.length; i < l; i++) {
|
||||
for (var key in conf.browsers[i]) {
|
||||
if (browser === key) {
|
||||
pushClass(key);
|
||||
|
||||
var min = conf.browsers[i][key].min;
|
||||
var max = conf.browsers[i][key].max;
|
||||
|
||||
for (var v = min; v <= max; v++) {
|
||||
if (version > v) {
|
||||
if (conf.browserCss.gt) {
|
||||
pushClass("gt-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.gte) {
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
} else if (version < v) {
|
||||
if (conf.browserCss.lt) {
|
||||
pushClass("lt-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.lte) {
|
||||
pushClass("lte-" + key + v);
|
||||
}
|
||||
} else if (version === v) {
|
||||
if (conf.browserCss.lte) {
|
||||
pushClass("lte-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.eq) {
|
||||
pushClass("eq-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.gte) {
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pushClass("no-" + key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pushClass(browser);
|
||||
pushClass(browser + parseInt(version, 10));
|
||||
|
||||
// IE lt9 specific
|
||||
if (conf.html5 && browser === "ie" && version < 9) {
|
||||
// HTML5 support : you still need to add html5 css initialization styles to your site
|
||||
// See: assets/html5.css
|
||||
each("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"), function(el) {
|
||||
doc.createElement(el);
|
||||
});
|
||||
}
|
||||
|
||||
// CSS "router"
|
||||
each(loc.pathname.split("/"), function(el, i) {
|
||||
if (this.length > 2 && this[i + 1] !== undefined) {
|
||||
if (i) {
|
||||
pushClass(this.slice(i, i + 1).join("-").toLowerCase() + conf.section);
|
||||
}
|
||||
} else {
|
||||
// pageId
|
||||
var id = el || "index", index = id.indexOf(".");
|
||||
if (index > 0) {
|
||||
id = id.substring(0, index);
|
||||
}
|
||||
|
||||
html.id = id.toLowerCase() + conf.page;
|
||||
|
||||
// on root?
|
||||
if (!i) {
|
||||
pushClass("root" + conf.section);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// basic screen info
|
||||
api.screen = {
|
||||
height: win.screen.height,
|
||||
width : win.screen.width
|
||||
};
|
||||
|
||||
// viewport resolutions: w-100, lt-480, lt-1024 ...
|
||||
function screenSize() {
|
||||
// remove earlier sizes
|
||||
html.className = html.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g, "");
|
||||
|
||||
// Viewport width
|
||||
var iw = win.innerWidth || html.clientWidth,
|
||||
ow = win.outerWidth || win.screen.width;
|
||||
|
||||
api.screen.innerWidth = iw;
|
||||
api.screen.outerWidth = ow;
|
||||
|
||||
// for debugging purposes, not really useful for anything else
|
||||
pushClass("w-" + iw);
|
||||
|
||||
each(conf.screens, function(width) {
|
||||
if (iw > width) {
|
||||
if (conf.screensCss.gt) {
|
||||
pushClass("gt-" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.gte) {
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
} else if (iw < width) {
|
||||
if (conf.screensCss.lt) {
|
||||
pushClass("lt-" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.lte) {
|
||||
pushClass("lte-" + width);
|
||||
}
|
||||
} else if (iw === width) {
|
||||
if (conf.screensCss.lte) {
|
||||
pushClass("lte-" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.eq) {
|
||||
pushClass("e-q" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.gte) {
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Viewport height
|
||||
var ih = win.innerHeight || html.clientHeight,
|
||||
oh = win.outerHeight || win.screen.height;
|
||||
|
||||
api.screen.innerHeight = ih;
|
||||
api.screen.outerHeight = oh;
|
||||
|
||||
// no need for onChange event to detect this
|
||||
api.feature("portrait" , (ih > iw));
|
||||
api.feature("landscape", (ih < iw));
|
||||
}
|
||||
|
||||
screenSize();
|
||||
|
||||
// Throttle navigators from triggering too many resize events
|
||||
var resizeId = 0;
|
||||
|
||||
function onResize() {
|
||||
win.clearTimeout(resizeId);
|
||||
resizeId = win.setTimeout(screenSize, 50);
|
||||
}
|
||||
|
||||
// Manually attach, as to not overwrite existing handler
|
||||
if (win.addEventListener) {
|
||||
win.addEventListener("resize", onResize, false);
|
||||
|
||||
} else {
|
||||
// IE8 and less
|
||||
win.attachEvent("onresize", onResize);
|
||||
}
|
||||
}(window));
|
5
bower_components/headjs/dist/1.0.0/head.core.min.js
vendored
Normal file
5
bower_components/headjs/dist/1.0.0/head.core.min.js
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
/*! head.core - v1.0.2 */
|
||||
(function(n,t){"use strict";function r(n){a[a.length]=n}function k(n){var t=new RegExp(" ?\\b"+n+"\\b");c.className=c.className.replace(t,"")}function p(n,t){for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}function tt(){var t,e,f,o;c.className=c.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g,"");t=n.innerWidth||c.clientWidth;e=n.outerWidth||n.screen.width;u.screen.innerWidth=t;u.screen.outerWidth=e;r("w-"+t);p(i.screens,function(n){t>n?(i.screensCss.gt&&r("gt-"+n),i.screensCss.gte&&r("gte-"+n)):t<n?(i.screensCss.lt&&r("lt-"+n),i.screensCss.lte&&r("lte-"+n)):t===n&&(i.screensCss.lte&&r("lte-"+n),i.screensCss.eq&&r("e-q"+n),i.screensCss.gte&&r("gte-"+n))});f=n.innerHeight||c.clientHeight;o=n.outerHeight||n.screen.height;u.screen.innerHeight=f;u.screen.outerHeight=o;u.feature("portrait",f>t);u.feature("landscape",f<t)}function it(){n.clearTimeout(b);b=n.setTimeout(tt,50)}var y=n.document,rt=n.navigator,ut=n.location,c=y.documentElement,a=[],i={screens:[240,320,480,640,768,800,1024,1280,1440,1680,1920],screensCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!1},browsers:[{ie:{min:6,max:11}}],browserCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!0},html5:!0,page:"-page",section:"-section",head:"head"},v,u,s,w,o,h,l,d,f,g,nt,e,b;if(n.head_conf)for(v in n.head_conf)n.head_conf[v]!==t&&(i[v]=n.head_conf[v]);u=n[i.head]=function(){u.ready.apply(null,arguments)};u.feature=function(n,t,i){return n?(Object.prototype.toString.call(t)==="[object Function]"&&(t=t.call()),r((t?"":"no-")+n),u[n]=!!t,i||(k("no-"+n),k(n),u.feature()),u):(c.className+=" "+a.join(" "),a=[],u)};u.feature("js",!0);s=rt.userAgent.toLowerCase();w=/mobile|android|kindle|silk|midp|phone|(windows .+arm|touch)/.test(s);u.feature("mobile",w,!0);u.feature("desktop",!w,!0);s=/(chrome|firefox)[ \/]([\w.]+)/.exec(s)||/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(android)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(msie) ([\w.]+)/.exec(s)||/(trident).+rv:(\w.)+/.exec(s)||[];o=s[1];h=parseFloat(s[2]);switch(o){case"msie":case"trident":o="ie";h=y.documentMode||h;break;case"firefox":o="ff";break;case"ipod":case"ipad":case"iphone":o="ios";break;case"webkit":o="safari"}for(u.browser={name:o,version:h},u.browser[o]=!0,l=0,d=i.browsers.length;l<d;l++)for(f in i.browsers[l])if(o===f)for(r(f),g=i.browsers[l][f].min,nt=i.browsers[l][f].max,e=g;e<=nt;e++)h>e?(i.browserCss.gt&&r("gt-"+f+e),i.browserCss.gte&&r("gte-"+f+e)):h<e?(i.browserCss.lt&&r("lt-"+f+e),i.browserCss.lte&&r("lte-"+f+e)):h===e&&(i.browserCss.lte&&r("lte-"+f+e),i.browserCss.eq&&r("eq-"+f+e),i.browserCss.gte&&r("gte-"+f+e));else r("no-"+f);r(o);r(o+parseInt(h,10));i.html5&&o==="ie"&&h<9&&p("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"),function(n){y.createElement(n)});p(ut.pathname.split("/"),function(n,u){if(this.length>2&&this[u+1]!==t)u&&r(this.slice(u,u+1).join("-").toLowerCase()+i.section);else{var f=n||"index",e=f.indexOf(".");e>0&&(f=f.substring(0,e));c.id=f.toLowerCase()+i.page;u||r("root"+i.section)}});u.screen={height:n.screen.height,width:n.screen.width};tt();b=0;n.addEventListener?n.addEventListener("resize",it,!1):n.attachEvent("onresize",it)})(window);
|
||||
/*
|
||||
//# sourceMappingURL=head.core.min.js.map
|
||||
*/
|
8
bower_components/headjs/dist/1.0.0/head.core.min.js.map
vendored
Normal file
8
bower_components/headjs/dist/1.0.0/head.core.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
477
bower_components/headjs/dist/1.0.0/head.css3.js
vendored
Normal file
477
bower_components/headjs/dist/1.0.0/head.css3.js
vendored
Normal file
|
@ -0,0 +1,477 @@
|
|||
///#source 1 1 /src/1.0.0/core.js
|
||||
/*! head.core - v1.0.2 */
|
||||
/*
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
* WebSite http://headjs.com
|
||||
*/
|
||||
(function(win, undefined) {
|
||||
"use strict";
|
||||
|
||||
// gt, gte, lt, lte, eq breakpoints would have been more simple to write as ['gt','gte','lt','lte','eq']
|
||||
// but then we would have had to loop over the collection on each resize() event,
|
||||
// a simple object with a direct access to true/false is therefore much more efficient
|
||||
var doc = win.document,
|
||||
nav = win.navigator,
|
||||
loc = win.location,
|
||||
html = doc.documentElement,
|
||||
klass = [],
|
||||
conf = {
|
||||
screens : [240, 320, 480, 640, 768, 800, 1024, 1280, 1440, 1680, 1920],
|
||||
screensCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": false },
|
||||
browsers : [
|
||||
{ ie: { min: 6, max: 11 } }
|
||||
//,{ chrome : { min: 8, max: 33 } }
|
||||
//,{ ff : { min: 3, max: 26 } }
|
||||
//,{ ios : { min: 3, max: 7 } }
|
||||
//,{ android: { min: 2, max: 4 } }
|
||||
//,{ webkit : { min: 9, max: 12 } }
|
||||
//,{ opera : { min: 9, max: 12 } }
|
||||
],
|
||||
browserCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": true },
|
||||
html5 : true,
|
||||
page : "-page",
|
||||
section : "-section",
|
||||
head : "head"
|
||||
};
|
||||
|
||||
if (win.head_conf) {
|
||||
for (var item in win.head_conf) {
|
||||
if (win.head_conf[item] !== undefined) {
|
||||
conf[item] = win.head_conf[item];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function pushClass(name) {
|
||||
klass[klass.length] = name;
|
||||
}
|
||||
|
||||
function removeClass(name) {
|
||||
// need to test for both space and no space
|
||||
// https://github.com/headjs/headjs/issues/270
|
||||
// https://github.com/headjs/headjs/issues/226
|
||||
var re = new RegExp(" ?\\b" + name + "\\b");
|
||||
html.className = html.className.replace(re, "");
|
||||
}
|
||||
|
||||
function each(arr, fn) {
|
||||
for (var i = 0, l = arr.length; i < l; i++) {
|
||||
fn.call(arr, arr[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
// API
|
||||
var api = win[conf.head] = function() {
|
||||
api.ready.apply(null, arguments);
|
||||
};
|
||||
|
||||
api.feature = function(key, enabled, queue) {
|
||||
|
||||
// internal: apply all classes
|
||||
if (!key) {
|
||||
html.className += " " + klass.join(" ");
|
||||
klass = [];
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
if (Object.prototype.toString.call(enabled) === "[object Function]") {
|
||||
enabled = enabled.call();
|
||||
}
|
||||
|
||||
pushClass((enabled ? "" : "no-") + key);
|
||||
api[key] = !!enabled;
|
||||
|
||||
// apply class to HTML element
|
||||
if (!queue) {
|
||||
removeClass("no-" + key);
|
||||
removeClass(key);
|
||||
api.feature();
|
||||
}
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
// no queue here, so we can remove any eventual pre-existing no-js class
|
||||
api.feature("js", true);
|
||||
|
||||
// browser type & version
|
||||
var ua = nav.userAgent.toLowerCase(),
|
||||
mobile = /mobile|android|kindle|silk|midp|phone|(windows .+arm|touch)/.test(ua);
|
||||
|
||||
// useful for enabling/disabling feature (we can consider a desktop navigator to have more cpu/gpu power)
|
||||
api.feature("mobile" , mobile , true);
|
||||
api.feature("desktop", !mobile, true);
|
||||
|
||||
// http://www.zytrax.com/tech/web/browser_ids.htm
|
||||
// http://www.zytrax.com/tech/web/mobile_ids.html
|
||||
ua = /(chrome|firefox)[ \/]([\w.]+)/.exec(ua) || // Chrome & Firefox
|
||||
/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile IOS
|
||||
/(android)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile Webkit
|
||||
/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Safari & Opera
|
||||
/(msie) ([\w.]+)/.exec(ua) ||
|
||||
/(trident).+rv:(\w.)+/.exec(ua) || [];
|
||||
|
||||
var browser = ua[1],
|
||||
version = parseFloat(ua[2]);
|
||||
|
||||
switch (browser) {
|
||||
case "msie":
|
||||
case "trident":
|
||||
browser = "ie";
|
||||
version = doc.documentMode || version;
|
||||
break;
|
||||
|
||||
case "firefox":
|
||||
browser = "ff";
|
||||
break;
|
||||
|
||||
case "ipod":
|
||||
case "ipad":
|
||||
case "iphone":
|
||||
browser = "ios";
|
||||
break;
|
||||
|
||||
case "webkit":
|
||||
browser = "safari";
|
||||
break;
|
||||
}
|
||||
|
||||
// Browser vendor and version
|
||||
api.browser = {
|
||||
name: browser,
|
||||
version: version
|
||||
};
|
||||
api.browser[browser] = true;
|
||||
|
||||
for (var i = 0, l = conf.browsers.length; i < l; i++) {
|
||||
for (var key in conf.browsers[i]) {
|
||||
if (browser === key) {
|
||||
pushClass(key);
|
||||
|
||||
var min = conf.browsers[i][key].min;
|
||||
var max = conf.browsers[i][key].max;
|
||||
|
||||
for (var v = min; v <= max; v++) {
|
||||
if (version > v) {
|
||||
if (conf.browserCss.gt) {
|
||||
pushClass("gt-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.gte) {
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
} else if (version < v) {
|
||||
if (conf.browserCss.lt) {
|
||||
pushClass("lt-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.lte) {
|
||||
pushClass("lte-" + key + v);
|
||||
}
|
||||
} else if (version === v) {
|
||||
if (conf.browserCss.lte) {
|
||||
pushClass("lte-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.eq) {
|
||||
pushClass("eq-" + key + v);
|
||||
}
|
||||
|
||||
if (conf.browserCss.gte) {
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pushClass("no-" + key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pushClass(browser);
|
||||
pushClass(browser + parseInt(version, 10));
|
||||
|
||||
// IE lt9 specific
|
||||
if (conf.html5 && browser === "ie" && version < 9) {
|
||||
// HTML5 support : you still need to add html5 css initialization styles to your site
|
||||
// See: assets/html5.css
|
||||
each("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"), function(el) {
|
||||
doc.createElement(el);
|
||||
});
|
||||
}
|
||||
|
||||
// CSS "router"
|
||||
each(loc.pathname.split("/"), function(el, i) {
|
||||
if (this.length > 2 && this[i + 1] !== undefined) {
|
||||
if (i) {
|
||||
pushClass(this.slice(i, i + 1).join("-").toLowerCase() + conf.section);
|
||||
}
|
||||
} else {
|
||||
// pageId
|
||||
var id = el || "index", index = id.indexOf(".");
|
||||
if (index > 0) {
|
||||
id = id.substring(0, index);
|
||||
}
|
||||
|
||||
html.id = id.toLowerCase() + conf.page;
|
||||
|
||||
// on root?
|
||||
if (!i) {
|
||||
pushClass("root" + conf.section);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// basic screen info
|
||||
api.screen = {
|
||||
height: win.screen.height,
|
||||
width : win.screen.width
|
||||
};
|
||||
|
||||
// viewport resolutions: w-100, lt-480, lt-1024 ...
|
||||
function screenSize() {
|
||||
// remove earlier sizes
|
||||
html.className = html.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g, "");
|
||||
|
||||
// Viewport width
|
||||
var iw = win.innerWidth || html.clientWidth,
|
||||
ow = win.outerWidth || win.screen.width;
|
||||
|
||||
api.screen.innerWidth = iw;
|
||||
api.screen.outerWidth = ow;
|
||||
|
||||
// for debugging purposes, not really useful for anything else
|
||||
pushClass("w-" + iw);
|
||||
|
||||
each(conf.screens, function(width) {
|
||||
if (iw > width) {
|
||||
if (conf.screensCss.gt) {
|
||||
pushClass("gt-" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.gte) {
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
} else if (iw < width) {
|
||||
if (conf.screensCss.lt) {
|
||||
pushClass("lt-" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.lte) {
|
||||
pushClass("lte-" + width);
|
||||
}
|
||||
} else if (iw === width) {
|
||||
if (conf.screensCss.lte) {
|
||||
pushClass("lte-" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.eq) {
|
||||
pushClass("e-q" + width);
|
||||
}
|
||||
|
||||
if (conf.screensCss.gte) {
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Viewport height
|
||||
var ih = win.innerHeight || html.clientHeight,
|
||||
oh = win.outerHeight || win.screen.height;
|
||||
|
||||
api.screen.innerHeight = ih;
|
||||
api.screen.outerHeight = oh;
|
||||
|
||||
// no need for onChange event to detect this
|
||||
api.feature("portrait" , (ih > iw));
|
||||
api.feature("landscape", (ih < iw));
|
||||
}
|
||||
|
||||
screenSize();
|
||||
|
||||
// Throttle navigators from triggering too many resize events
|
||||
var resizeId = 0;
|
||||
|
||||
function onResize() {
|
||||
win.clearTimeout(resizeId);
|
||||
resizeId = win.setTimeout(screenSize, 50);
|
||||
}
|
||||
|
||||
// Manually attach, as to not overwrite existing handler
|
||||
if (win.addEventListener) {
|
||||
win.addEventListener("resize", onResize, false);
|
||||
|
||||
} else {
|
||||
// IE8 and less
|
||||
win.attachEvent("onresize", onResize);
|
||||
}
|
||||
}(window));
|
||||
///#source 1 1 /src/1.0.0/css3.js
|
||||
/*! head.css3 - v1.0.0 */
|
||||
/*
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
* WebSite http://headjs.com
|
||||
*/
|
||||
(function (win, undefined) {
|
||||
"use strict";
|
||||
|
||||
var doc = win.document,
|
||||
/*
|
||||
To add a new test:
|
||||
|
||||
head.feature("video", function() {
|
||||
var tag = document.createElement('video');
|
||||
return !!tag.canPlayType;
|
||||
});
|
||||
|
||||
Good place to grab more tests
|
||||
|
||||
https://github.com/Modernizr/Modernizr/blob/master/modernizr.js
|
||||
*/
|
||||
|
||||
/* CSS modernizer */
|
||||
el = doc.createElement("i"),
|
||||
style = el.style,
|
||||
prefs = " -o- -moz- -ms- -webkit- -khtml- ".split(" "),
|
||||
domPrefs = "Webkit Moz O ms Khtml".split(" "),
|
||||
headVar = win.head_conf && win.head_conf.head || "head",
|
||||
api = win[headVar];
|
||||
|
||||
// Thanks Paul Irish!
|
||||
|
||||
function testProps(props) {
|
||||
for (var i in props) {
|
||||
if (style[props[i]] !== undefined) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function testAll(prop) {
|
||||
var camel = prop.charAt(0).toUpperCase() + prop.substr(1),
|
||||
props = (prop + " " + domPrefs.join(camel + " ") + camel).split(" ");
|
||||
|
||||
return !!testProps(props);
|
||||
}
|
||||
|
||||
var tests = {
|
||||
// should we seperate linear/radial ?
|
||||
// seems like some browsers need a test for prefix http://caniuse.com/#feat=css-gradients
|
||||
gradient: function () {
|
||||
var s1 = "background-image:",
|
||||
s2 = "gradient(linear,left top,right bottom,from(#9f9),to(#fff));",
|
||||
s3 = "linear-gradient(left top,#eee,#fff);";
|
||||
|
||||
style.cssText = (s1 + prefs.join(s2 + s1) + prefs.join(s3 + s1)).slice(0, -s1.length);
|
||||
return !!style.backgroundImage;
|
||||
},
|
||||
|
||||
rgba: function () {
|
||||
style.cssText = "background-color:rgba(0,0,0,0.5)";
|
||||
return !!style.backgroundColor;
|
||||
},
|
||||
|
||||
opacity: function () {
|
||||
return el.style.opacity === "";
|
||||
},
|
||||
|
||||
textshadow: function () {
|
||||
return style.textShadow === "";
|
||||
},
|
||||
|
||||
multiplebgs: function () {
|
||||
style.cssText = "background:url(https://),url(https://),red url(https://)";
|
||||
|
||||
// If the UA supports multiple backgrounds, there should be three occurrences
|
||||
// of the string "url(" in the return value for elemStyle.background
|
||||
var result = (style.background || "").match(/url/g);
|
||||
|
||||
return Object.prototype.toString.call(result) === "[object Array]" && result.length === 3;
|
||||
},
|
||||
|
||||
boxshadow: function () {
|
||||
return testAll("boxShadow");
|
||||
},
|
||||
|
||||
borderimage: function () {
|
||||
return testAll("borderImage");
|
||||
},
|
||||
|
||||
borderradius: function () {
|
||||
return testAll("borderRadius");
|
||||
},
|
||||
|
||||
cssreflections: function () {
|
||||
return testAll("boxReflect");
|
||||
},
|
||||
|
||||
csstransforms: function () {
|
||||
return testAll("transform");
|
||||
},
|
||||
|
||||
csstransitions: function () {
|
||||
return testAll("transition");
|
||||
},
|
||||
touch: function () {
|
||||
return "ontouchstart" in win;
|
||||
},
|
||||
retina: function () {
|
||||
return (win.devicePixelRatio > 1);
|
||||
},
|
||||
|
||||
/*
|
||||
font-face support. Uses browser sniffing but is synchronous.
|
||||
http://paulirish.com/2009/font-face-feature-detection/
|
||||
*/
|
||||
fontface: function () {
|
||||
var browser = api.browser.name, version = api.browser.version;
|
||||
|
||||
switch (browser) {
|
||||
case "ie":
|
||||
return version >= 9;
|
||||
|
||||
case "chrome":
|
||||
return version >= 13;
|
||||
|
||||
case "ff":
|
||||
return version >= 6;
|
||||
|
||||
case "ios":
|
||||
return version >= 5;
|
||||
|
||||
case "android":
|
||||
return false;
|
||||
|
||||
case "webkit":
|
||||
return version >= 5.1;
|
||||
|
||||
case "opera":
|
||||
return version >= 10;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// queue features
|
||||
for (var key in tests) {
|
||||
if (tests[key]) {
|
||||
api.feature(key, tests[key].call(), true);
|
||||
}
|
||||
}
|
||||
|
||||
// enable features at once
|
||||
api.feature();
|
||||
|
||||
}(window));
|
7
bower_components/headjs/dist/1.0.0/head.css3.min.js
vendored
Normal file
7
bower_components/headjs/dist/1.0.0/head.css3.min.js
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
/*! head.core - v1.0.2 */
|
||||
(function(n,t){"use strict";function r(n){a[a.length]=n}function k(n){var t=new RegExp(" ?\\b"+n+"\\b");c.className=c.className.replace(t,"")}function p(n,t){for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}function tt(){var t,e,f,o;c.className=c.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g,"");t=n.innerWidth||c.clientWidth;e=n.outerWidth||n.screen.width;u.screen.innerWidth=t;u.screen.outerWidth=e;r("w-"+t);p(i.screens,function(n){t>n?(i.screensCss.gt&&r("gt-"+n),i.screensCss.gte&&r("gte-"+n)):t<n?(i.screensCss.lt&&r("lt-"+n),i.screensCss.lte&&r("lte-"+n)):t===n&&(i.screensCss.lte&&r("lte-"+n),i.screensCss.eq&&r("e-q"+n),i.screensCss.gte&&r("gte-"+n))});f=n.innerHeight||c.clientHeight;o=n.outerHeight||n.screen.height;u.screen.innerHeight=f;u.screen.outerHeight=o;u.feature("portrait",f>t);u.feature("landscape",f<t)}function it(){n.clearTimeout(b);b=n.setTimeout(tt,50)}var y=n.document,rt=n.navigator,ut=n.location,c=y.documentElement,a=[],i={screens:[240,320,480,640,768,800,1024,1280,1440,1680,1920],screensCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!1},browsers:[{ie:{min:6,max:11}}],browserCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!0},html5:!0,page:"-page",section:"-section",head:"head"},v,u,s,w,o,h,l,d,f,g,nt,e,b;if(n.head_conf)for(v in n.head_conf)n.head_conf[v]!==t&&(i[v]=n.head_conf[v]);u=n[i.head]=function(){u.ready.apply(null,arguments)};u.feature=function(n,t,i){return n?(Object.prototype.toString.call(t)==="[object Function]"&&(t=t.call()),r((t?"":"no-")+n),u[n]=!!t,i||(k("no-"+n),k(n),u.feature()),u):(c.className+=" "+a.join(" "),a=[],u)};u.feature("js",!0);s=rt.userAgent.toLowerCase();w=/mobile|android|kindle|silk|midp|phone|(windows .+arm|touch)/.test(s);u.feature("mobile",w,!0);u.feature("desktop",!w,!0);s=/(chrome|firefox)[ \/]([\w.]+)/.exec(s)||/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(android)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(msie) ([\w.]+)/.exec(s)||/(trident).+rv:(\w.)+/.exec(s)||[];o=s[1];h=parseFloat(s[2]);switch(o){case"msie":case"trident":o="ie";h=y.documentMode||h;break;case"firefox":o="ff";break;case"ipod":case"ipad":case"iphone":o="ios";break;case"webkit":o="safari"}for(u.browser={name:o,version:h},u.browser[o]=!0,l=0,d=i.browsers.length;l<d;l++)for(f in i.browsers[l])if(o===f)for(r(f),g=i.browsers[l][f].min,nt=i.browsers[l][f].max,e=g;e<=nt;e++)h>e?(i.browserCss.gt&&r("gt-"+f+e),i.browserCss.gte&&r("gte-"+f+e)):h<e?(i.browserCss.lt&&r("lt-"+f+e),i.browserCss.lte&&r("lte-"+f+e)):h===e&&(i.browserCss.lte&&r("lte-"+f+e),i.browserCss.eq&&r("eq-"+f+e),i.browserCss.gte&&r("gte-"+f+e));else r("no-"+f);r(o);r(o+parseInt(h,10));i.html5&&o==="ie"&&h<9&&p("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"),function(n){y.createElement(n)});p(ut.pathname.split("/"),function(n,u){if(this.length>2&&this[u+1]!==t)u&&r(this.slice(u,u+1).join("-").toLowerCase()+i.section);else{var f=n||"index",e=f.indexOf(".");e>0&&(f=f.substring(0,e));c.id=f.toLowerCase()+i.page;u||r("root"+i.section)}});u.screen={height:n.screen.height,width:n.screen.width};tt();b=0;n.addEventListener?n.addEventListener("resize",it,!1):n.attachEvent("onresize",it)})(window);
|
||||
/*! head.css3 - v1.0.0 */
|
||||
(function(n,t){"use strict";function a(n){for(var r in n)if(i[n[r]]!==t)return!0;return!1}function r(n){var t=n.charAt(0).toUpperCase()+n.substr(1),i=(n+" "+c.join(t+" ")+t).split(" ");return!!a(i)}var h=n.document,o=h.createElement("i"),i=o.style,s=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),c="Webkit Moz O ms Khtml".split(" "),l=n.head_conf&&n.head_conf.head||"head",u=n[l],f={gradient:function(){var n="background-image:";return i.cssText=(n+s.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));"+n)+s.join("linear-gradient(left top,#eee,#fff);"+n)).slice(0,-n.length),!!i.backgroundImage},rgba:function(){return i.cssText="background-color:rgba(0,0,0,0.5)",!!i.backgroundColor},opacity:function(){return o.style.opacity===""},textshadow:function(){return i.textShadow===""},multiplebgs:function(){i.cssText="background:url(https://),url(https://),red url(https://)";var n=(i.background||"").match(/url/g);return Object.prototype.toString.call(n)==="[object Array]"&&n.length===3},boxshadow:function(){return r("boxShadow")},borderimage:function(){return r("borderImage")},borderradius:function(){return r("borderRadius")},cssreflections:function(){return r("boxReflect")},csstransforms:function(){return r("transform")},csstransitions:function(){return r("transition")},touch:function(){return"ontouchstart"in n},retina:function(){return n.devicePixelRatio>1},fontface:function(){var t=u.browser.name,n=u.browser.version;switch(t){case"ie":return n>=9;case"chrome":return n>=13;case"ff":return n>=6;case"ios":return n>=5;case"android":return!1;case"webkit":return n>=5.1;case"opera":return n>=10;default:return!1}}};for(var e in f)f[e]&&u.feature(e,f[e].call(),!0);u.feature()})(window);
|
||||
/*
|
||||
//# sourceMappingURL=head.css3.min.js.map
|
||||
*/
|
8
bower_components/headjs/dist/1.0.0/head.css3.min.js.map
vendored
Normal file
8
bower_components/headjs/dist/1.0.0/head.css3.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1184
bower_components/headjs/dist/1.0.0/head.js
vendored
Normal file
1184
bower_components/headjs/dist/1.0.0/head.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
707
bower_components/headjs/dist/1.0.0/head.load.js
vendored
Normal file
707
bower_components/headjs/dist/1.0.0/head.load.js
vendored
Normal file
|
@ -0,0 +1,707 @@
|
|||
///#source 1 1 /src/1.0.0/load.js
|
||||
/*! head.load - v1.0.3 */
|
||||
/*
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
* WebSite http://headjs.com
|
||||
*/
|
||||
(function (win, undefined) {
|
||||
"use strict";
|
||||
|
||||
//#region variables
|
||||
var doc = win.document,
|
||||
domWaiters = [],
|
||||
handlers = {}, // user functions waiting for events
|
||||
assets = {}, // loadable items in various states
|
||||
isAsync = "async" in doc.createElement("script") || "MozAppearance" in doc.documentElement.style || win.opera,
|
||||
isDomReady,
|
||||
|
||||
/*** public API ***/
|
||||
headVar = win.head_conf && win.head_conf.head || "head",
|
||||
api = win[headVar] = (win[headVar] || function () { api.ready.apply(null, arguments); }),
|
||||
|
||||
// states
|
||||
PRELOADING = 1,
|
||||
PRELOADED = 2,
|
||||
LOADING = 3,
|
||||
LOADED = 4;
|
||||
//#endregion
|
||||
|
||||
//#region PRIVATE functions
|
||||
|
||||
//#region Helper functions
|
||||
function noop() {
|
||||
// does nothing
|
||||
}
|
||||
|
||||
function each(arr, callback) {
|
||||
if (!arr) {
|
||||
return;
|
||||
}
|
||||
|
||||
// arguments special type
|
||||
if (typeof arr === "object") {
|
||||
arr = [].slice.call(arr);
|
||||
}
|
||||
|
||||
// do the job
|
||||
for (var i = 0, l = arr.length; i < l; i++) {
|
||||
callback.call(arr, arr[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
/* A must read: http://bonsaiden.github.com/JavaScript-Garden
|
||||
************************************************************/
|
||||
function is(type, obj) {
|
||||
var clas = Object.prototype.toString.call(obj).slice(8, -1);
|
||||
return obj !== undefined && obj !== null && clas === type;
|
||||
}
|
||||
|
||||
function isFunction(item) {
|
||||
return is("Function", item);
|
||||
}
|
||||
|
||||
function isArray(item) {
|
||||
return is("Array", item);
|
||||
}
|
||||
|
||||
function toLabel(url) {
|
||||
///<summary>Converts a url to a file label</summary>
|
||||
var items = url.split("/"),
|
||||
name = items[items.length - 1],
|
||||
i = name.indexOf("?");
|
||||
|
||||
return i !== -1 ? name.substring(0, i) : name;
|
||||
}
|
||||
|
||||
// INFO: this look like a "im triggering callbacks all over the place, but only wanna run it one time function" ..should try to make everything work without it if possible
|
||||
// INFO: Even better. Look into promises/defered's like jQuery is doing
|
||||
function one(callback) {
|
||||
///<summary>Execute a callback only once</summary>
|
||||
callback = callback || noop;
|
||||
|
||||
if (callback._done) {
|
||||
return;
|
||||
}
|
||||
|
||||
callback();
|
||||
callback._done = 1;
|
||||
}
|
||||
//#endregion
|
||||
|
||||
function conditional(test, success, failure, callback) {
|
||||
///<summary>
|
||||
/// INFO: use cases:
|
||||
/// head.test(condition, null , "file.NOk" , callback);
|
||||
/// head.test(condition, "fileOk.js", null , callback);
|
||||
/// head.test(condition, "fileOk.js", "file.NOk" , callback);
|
||||
/// head.test(condition, "fileOk.js", ["file.NOk", "file.NOk"], callback);
|
||||
/// head.test({
|
||||
/// test : condition,
|
||||
/// success : [{ label1: "file1Ok.js" }, { label2: "file2Ok.js" }],
|
||||
/// failure : [{ label1: "file1NOk.js" }, { label2: "file2NOk.js" }],
|
||||
/// callback: callback
|
||||
/// );
|
||||
/// head.test({
|
||||
/// test : condition,
|
||||
/// success : ["file1Ok.js" , "file2Ok.js"],
|
||||
/// failure : ["file1NOk.js", "file2NOk.js"],
|
||||
/// callback: callback
|
||||
/// );
|
||||
///</summary>
|
||||
var obj = (typeof test === "object") ? test : {
|
||||
test: test,
|
||||
success: !!success ? isArray(success) ? success : [success] : false,
|
||||
failure: !!failure ? isArray(failure) ? failure : [failure] : false,
|
||||
callback: callback || noop
|
||||
};
|
||||
|
||||
// Test Passed ?
|
||||
var passed = !!obj.test;
|
||||
|
||||
// Do we have a success case
|
||||
if (passed && !!obj.success) {
|
||||
obj.success.push(obj.callback);
|
||||
api.load.apply(null, obj.success);
|
||||
}
|
||||
// Do we have a fail case
|
||||
else if (!passed && !!obj.failure) {
|
||||
obj.failure.push(obj.callback);
|
||||
api.load.apply(null, obj.failure);
|
||||
}
|
||||
else {
|
||||
callback();
|
||||
}
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
function getAsset(item) {
|
||||
///<summary>
|
||||
/// Assets are in the form of
|
||||
/// {
|
||||
/// name : label,
|
||||
/// url : url,
|
||||
/// state: state
|
||||
/// }
|
||||
///</summary>
|
||||
var asset = {};
|
||||
|
||||
if (typeof item === "object") {
|
||||
for (var label in item) {
|
||||
if (!!item[label]) {
|
||||
asset = {
|
||||
name: label,
|
||||
url : item[label]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
asset = {
|
||||
name: toLabel(item),
|
||||
url : item
|
||||
};
|
||||
}
|
||||
|
||||
// is the item already existant
|
||||
var existing = assets[asset.name];
|
||||
if (existing && existing.url === asset.url) {
|
||||
return existing;
|
||||
}
|
||||
|
||||
assets[asset.name] = asset;
|
||||
return asset;
|
||||
}
|
||||
|
||||
function allLoaded(items) {
|
||||
items = items || assets;
|
||||
|
||||
for (var name in items) {
|
||||
if (items.hasOwnProperty(name) && items[name].state !== LOADED) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function onPreload(asset) {
|
||||
asset.state = PRELOADED;
|
||||
|
||||
each(asset.onpreload, function (afterPreload) {
|
||||
afterPreload.call();
|
||||
});
|
||||
}
|
||||
|
||||
function preLoad(asset, callback) {
|
||||
if (asset.state === undefined) {
|
||||
|
||||
asset.state = PRELOADING;
|
||||
asset.onpreload = [];
|
||||
|
||||
loadAsset({ url: asset.url, type: "cache" }, function () {
|
||||
onPreload(asset);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function apiLoadHack() {
|
||||
/// <summary>preload with text/cache hack
|
||||
///
|
||||
/// head.load("http://domain.com/file.js","http://domain.com/file.js", callBack)
|
||||
/// head.load(["http://domain.com/file.js","http://domain.com/file.js"], callBack)
|
||||
/// head.load({ label1: "http://domain.com/file.js" }, { label2: "http://domain.com/file.js" }, callBack)
|
||||
/// head.load([{ label1: "http://domain.com/file.js" }, { label2: "http://domain.com/file.js" }], callBack)
|
||||
/// </summary>
|
||||
var args = arguments,
|
||||
callback = args[args.length - 1],
|
||||
rest = [].slice.call(args, 1),
|
||||
next = rest[0];
|
||||
|
||||
if (!isFunction(callback)) {
|
||||
callback = null;
|
||||
}
|
||||
|
||||
// if array, repush as args
|
||||
if (isArray(args[0])) {
|
||||
args[0].push(callback);
|
||||
api.load.apply(null, args[0]);
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
// multiple arguments
|
||||
if (!!next) {
|
||||
/* Preload with text/cache hack (not good!)
|
||||
* http://blog.getify.com/on-script-loaders/
|
||||
* http://www.nczonline.net/blog/2010/12/21/thoughts-on-script-loaders/
|
||||
* If caching is not configured correctly on the server, then items could load twice !
|
||||
*************************************************************************************/
|
||||
each(rest, function (item) {
|
||||
// item is not a callback or empty string
|
||||
if (!isFunction(item) && !!item) {
|
||||
preLoad(getAsset(item));
|
||||
}
|
||||
});
|
||||
|
||||
// execute
|
||||
load(getAsset(args[0]), isFunction(next) ? next : function () {
|
||||
api.load.apply(null, rest);
|
||||
});
|
||||
}
|
||||
else {
|
||||
// single item
|
||||
load(getAsset(args[0]));
|
||||
}
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
function apiLoadAsync() {
|
||||
///<summary>
|
||||
/// simply load and let browser take care of ordering
|
||||
///
|
||||
/// head.load("http://domain.com/file.js","http://domain.com/file.js", callBack)
|
||||
/// head.load(["http://domain.com/file.js","http://domain.com/file.js"], callBack)
|
||||
/// head.load({ label1: "http://domain.com/file.js" }, { label2: "http://domain.com/file.js" }, callBack)
|
||||
/// head.load([{ label1: "http://domain.com/file.js" }, { label2: "http://domain.com/file.js" }], callBack)
|
||||
///</summary>
|
||||
var args = arguments,
|
||||
callback = args[args.length - 1],
|
||||
items = {};
|
||||
|
||||
if (!isFunction(callback)) {
|
||||
callback = null;
|
||||
}
|
||||
|
||||
// if array, repush as args
|
||||
if (isArray(args[0])) {
|
||||
args[0].push(callback);
|
||||
api.load.apply(null, args[0]);
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
// JRH 262#issuecomment-26288601
|
||||
// First populate the items array.
|
||||
// When allLoaded is called, all items will be populated.
|
||||
// Issue when lazy loaded, the callback can execute early.
|
||||
each(args, function (item, i) {
|
||||
if (item !== callback) {
|
||||
item = getAsset(item);
|
||||
items[item.name] = item;
|
||||
}
|
||||
});
|
||||
|
||||
each(args, function (item, i) {
|
||||
if (item !== callback) {
|
||||
item = getAsset(item);
|
||||
|
||||
load(item, function () {
|
||||
if (allLoaded(items)) {
|
||||
one(callback);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
function load(asset, callback) {
|
||||
///<summary>Used with normal loading logic</summary>
|
||||
callback = callback || noop;
|
||||
|
||||
if (asset.state === LOADED) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
// INFO: why would we trigger a ready event when its not really loaded yet ?
|
||||
if (asset.state === LOADING) {
|
||||
api.ready(asset.name, callback);
|
||||
return;
|
||||
}
|
||||
|
||||
if (asset.state === PRELOADING) {
|
||||
asset.onpreload.push(function () {
|
||||
load(asset, callback);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
asset.state = LOADING;
|
||||
|
||||
loadAsset(asset, function () {
|
||||
asset.state = LOADED;
|
||||
|
||||
callback();
|
||||
|
||||
// handlers for this asset
|
||||
each(handlers[asset.name], function (fn) {
|
||||
one(fn);
|
||||
});
|
||||
|
||||
// dom is ready & no assets are queued for loading
|
||||
// INFO: shouldn't we be doing the same test above ?
|
||||
if (isDomReady && allLoaded()) {
|
||||
each(handlers.ALL, function (fn) {
|
||||
one(fn);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getExtension(url) {
|
||||
url = url || "";
|
||||
|
||||
var items = url.split("?")[0].split(".");
|
||||
return items[items.length-1].toLowerCase();
|
||||
}
|
||||
|
||||
/* Parts inspired from: https://github.com/cujojs/curl
|
||||
******************************************************/
|
||||
function loadAsset(asset, callback) {
|
||||
callback = callback || noop;
|
||||
|
||||
function error(event) {
|
||||
event = event || win.event;
|
||||
|
||||
// release event listeners
|
||||
ele.onload = ele.onreadystatechange = ele.onerror = null;
|
||||
|
||||
// do callback
|
||||
callback();
|
||||
|
||||
// need some more detailed error handling here
|
||||
}
|
||||
|
||||
function process(event) {
|
||||
event = event || win.event;
|
||||
|
||||
// IE 7/8 (2 events on 1st load)
|
||||
// 1) event.type = readystatechange, s.readyState = loading
|
||||
// 2) event.type = readystatechange, s.readyState = loaded
|
||||
|
||||
// IE 7/8 (1 event on reload)
|
||||
// 1) event.type = readystatechange, s.readyState = complete
|
||||
|
||||
// event.type === 'readystatechange' && /loaded|complete/.test(s.readyState)
|
||||
|
||||
// IE 9 (3 events on 1st load)
|
||||
// 1) event.type = readystatechange, s.readyState = loading
|
||||
// 2) event.type = readystatechange, s.readyState = loaded
|
||||
// 3) event.type = load , s.readyState = loaded
|
||||
|
||||
// IE 9 (2 events on reload)
|
||||
// 1) event.type = readystatechange, s.readyState = complete
|
||||
// 2) event.type = load , s.readyState = complete
|
||||
|
||||
// event.type === 'load' && /loaded|complete/.test(s.readyState)
|
||||
// event.type === 'readystatechange' && /loaded|complete/.test(s.readyState)
|
||||
|
||||
// IE 10 (3 events on 1st load)
|
||||
// 1) event.type = readystatechange, s.readyState = loading
|
||||
// 2) event.type = load , s.readyState = complete
|
||||
// 3) event.type = readystatechange, s.readyState = loaded
|
||||
|
||||
// IE 10 (3 events on reload)
|
||||
// 1) event.type = readystatechange, s.readyState = loaded
|
||||
// 2) event.type = load , s.readyState = complete
|
||||
// 3) event.type = readystatechange, s.readyState = complete
|
||||
|
||||
// event.type === 'load' && /loaded|complete/.test(s.readyState)
|
||||
// event.type === 'readystatechange' && /complete/.test(s.readyState)
|
||||
|
||||
// Other Browsers (1 event on 1st load)
|
||||
// 1) event.type = load, s.readyState = undefined
|
||||
|
||||
// Other Browsers (1 event on reload)
|
||||
// 1) event.type = load, s.readyState = undefined
|
||||
|
||||
// event.type == 'load' && s.readyState = undefined
|
||||
|
||||
// !doc.documentMode is for IE6/7, IE8+ have documentMode
|
||||
if (event.type === "load" || (/loaded|complete/.test(ele.readyState) && (!doc.documentMode || doc.documentMode < 9))) {
|
||||
// remove timeouts
|
||||
win.clearTimeout(asset.errorTimeout);
|
||||
win.clearTimeout(asset.cssTimeout);
|
||||
|
||||
// release event listeners
|
||||
ele.onload = ele.onreadystatechange = ele.onerror = null;
|
||||
|
||||
// do callback
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
function isCssLoaded() {
|
||||
// should we test again ? 20 retries = 5secs ..after that, the callback will be triggered by the error handler at 7secs
|
||||
if (asset.state !== LOADED && asset.cssRetries <= 20) {
|
||||
|
||||
// loop through stylesheets
|
||||
for (var i = 0, l = doc.styleSheets.length; i < l; i++) {
|
||||
// do we have a match ?
|
||||
// we need to tests agains ele.href and not asset.url, because a local file will be assigned the full http path on a link element
|
||||
if (doc.styleSheets[i].href === ele.href) {
|
||||
process({ "type": "load" });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// increment & try again
|
||||
asset.cssRetries++;
|
||||
asset.cssTimeout = win.setTimeout(isCssLoaded, 250);
|
||||
}
|
||||
}
|
||||
|
||||
var ele;
|
||||
var ext = getExtension(asset.url);
|
||||
|
||||
if (ext === "css") {
|
||||
ele = doc.createElement("link");
|
||||
ele.type = "text/" + (asset.type || "css");
|
||||
ele.rel = "stylesheet";
|
||||
ele.href = asset.url;
|
||||
|
||||
/* onload supported for CSS on unsupported browsers
|
||||
* Safari windows 5.1.7, FF < 10
|
||||
*/
|
||||
|
||||
// Set counter to zero
|
||||
asset.cssRetries = 0;
|
||||
asset.cssTimeout = win.setTimeout(isCssLoaded, 500);
|
||||
}
|
||||
else {
|
||||
ele = doc.createElement("script");
|
||||
ele.type = "text/" + (asset.type || "javascript");
|
||||
ele.src = asset.url;
|
||||
}
|
||||
|
||||
ele.onload = ele.onreadystatechange = process;
|
||||
ele.onerror = error;
|
||||
|
||||
/* Good read, but doesn't give much hope !
|
||||
* http://blog.getify.com/on-script-loaders/
|
||||
* http://www.nczonline.net/blog/2010/12/21/thoughts-on-script-loaders/
|
||||
* https://hacks.mozilla.org/2009/06/defer/
|
||||
*/
|
||||
|
||||
// ASYNC: load in parallel and execute as soon as possible
|
||||
ele.async = false;
|
||||
// DEFER: load in parallel but maintain execution order
|
||||
ele.defer = false;
|
||||
|
||||
// timout for asset loading
|
||||
asset.errorTimeout = win.setTimeout(function () {
|
||||
error({ type: "timeout" });
|
||||
}, 7e3);
|
||||
|
||||
// use insertBefore to keep IE from throwing Operation Aborted (thx Bryan Forbes!)
|
||||
var head = doc.head || doc.getElementsByTagName("head")[0];
|
||||
|
||||
// but insert at end of head, because otherwise if it is a stylesheet, it will not override values
|
||||
head.insertBefore(ele, head.lastChild);
|
||||
}
|
||||
|
||||
/* Parts inspired from: https://github.com/jrburke/requirejs
|
||||
************************************************************/
|
||||
function init() {
|
||||
var items = doc.getElementsByTagName("script");
|
||||
|
||||
// look for a script with a data-head-init attribute
|
||||
for (var i = 0, l = items.length; i < l; i++) {
|
||||
var dataMain = items[i].getAttribute("data-headjs-load");
|
||||
if (!!dataMain) {
|
||||
api.load(dataMain);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ready(key, callback) {
|
||||
///<summary>
|
||||
/// INFO: use cases:
|
||||
/// head.ready(callBack);
|
||||
/// head.ready(document , callBack);
|
||||
/// head.ready("file.js", callBack);
|
||||
/// head.ready("label" , callBack);
|
||||
/// head.ready(["label1", "label2"], callback);
|
||||
///</summary>
|
||||
|
||||
// DOM ready check: head.ready(document, function() { });
|
||||
if (key === doc) {
|
||||
if (isDomReady) {
|
||||
one(callback);
|
||||
}
|
||||
else {
|
||||
domWaiters.push(callback);
|
||||
}
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
// shift arguments
|
||||
if (isFunction(key)) {
|
||||
callback = key;
|
||||
key = "ALL"; // holds all callbacks that where added without labels: ready(callBack)
|
||||
}
|
||||
|
||||
// queue all items from key and return. The callback will be executed if all items from key are already loaded.
|
||||
if (isArray(key)) {
|
||||
var items = {};
|
||||
|
||||
each(key, function (item) {
|
||||
items[item] = assets[item];
|
||||
|
||||
api.ready(item, function() {
|
||||
if (allLoaded(items)) {
|
||||
one(callback);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
// make sure arguments are sane
|
||||
if (typeof key !== "string" || !isFunction(callback)) {
|
||||
return api;
|
||||
}
|
||||
|
||||
// this can also be called when we trigger events based on filenames & labels
|
||||
var asset = assets[key];
|
||||
|
||||
// item already loaded --> execute and return
|
||||
if (asset && asset.state === LOADED || key === "ALL" && allLoaded() && isDomReady) {
|
||||
one(callback);
|
||||
return api;
|
||||
}
|
||||
|
||||
var arr = handlers[key];
|
||||
if (!arr) {
|
||||
arr = handlers[key] = [callback];
|
||||
}
|
||||
else {
|
||||
arr.push(callback);
|
||||
}
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
/* Mix of stuff from jQuery & IEContentLoaded
|
||||
* http://dev.w3.org/html5/spec/the-end.html#the-end
|
||||
***************************************************/
|
||||
function domReady() {
|
||||
// Make sure body exists, at least, in case IE gets a little overzealous (jQuery ticket #5443).
|
||||
if (!doc.body) {
|
||||
// let's not get nasty by setting a timeout too small.. (loop mania guaranteed if assets are queued)
|
||||
win.clearTimeout(api.readyTimeout);
|
||||
api.readyTimeout = win.setTimeout(domReady, 50);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isDomReady) {
|
||||
isDomReady = true;
|
||||
|
||||
init();
|
||||
each(domWaiters, function (fn) {
|
||||
one(fn);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function domContentLoaded() {
|
||||
// W3C
|
||||
if (doc.addEventListener) {
|
||||
doc.removeEventListener("DOMContentLoaded", domContentLoaded, false);
|
||||
domReady();
|
||||
}
|
||||
|
||||
// IE
|
||||
else if (doc.readyState === "complete") {
|
||||
// we're here because readyState === "complete" in oldIE
|
||||
// which is good enough for us to call the dom ready!
|
||||
doc.detachEvent("onreadystatechange", domContentLoaded);
|
||||
domReady();
|
||||
}
|
||||
}
|
||||
|
||||
// Catch cases where ready() is called after the browser event has already occurred.
|
||||
// we once tried to use readyState "interactive" here, but it caused issues like the one
|
||||
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
|
||||
if (doc.readyState === "complete") {
|
||||
domReady();
|
||||
}
|
||||
|
||||
// W3C
|
||||
else if (doc.addEventListener) {
|
||||
doc.addEventListener("DOMContentLoaded", domContentLoaded, false);
|
||||
|
||||
// A fallback to window.onload, that will always work
|
||||
win.addEventListener("load", domReady, false);
|
||||
}
|
||||
|
||||
// IE
|
||||
else {
|
||||
// Ensure firing before onload, maybe late but safe also for iframes
|
||||
doc.attachEvent("onreadystatechange", domContentLoaded);
|
||||
|
||||
// A fallback to window.onload, that will always work
|
||||
win.attachEvent("onload", domReady);
|
||||
|
||||
// If IE and not a frame
|
||||
// continually check to see if the document is ready
|
||||
var top = false;
|
||||
|
||||
try {
|
||||
top = !win.frameElement && doc.documentElement;
|
||||
} catch (e) { }
|
||||
|
||||
if (top && top.doScroll) {
|
||||
(function doScrollCheck() {
|
||||
if (!isDomReady) {
|
||||
try {
|
||||
// Use the trick by Diego Perini
|
||||
// http://javascript.nwbox.com/IEContentLoaded/
|
||||
top.doScroll("left");
|
||||
} catch (error) {
|
||||
// let's not get nasty by setting a timeout too small.. (loop mania guaranteed if assets are queued)
|
||||
win.clearTimeout(api.readyTimeout);
|
||||
api.readyTimeout = win.setTimeout(doScrollCheck, 50);
|
||||
return;
|
||||
}
|
||||
|
||||
// and execute any waiting functions
|
||||
domReady();
|
||||
}
|
||||
}());
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//#region Public Exports
|
||||
// INFO: determine which method to use for loading
|
||||
api.load = api.js = isAsync ? apiLoadAsync : apiLoadHack;
|
||||
api.test = conditional;
|
||||
api.ready = ready;
|
||||
//#endregion
|
||||
|
||||
//#region INIT
|
||||
// perform this when DOM is ready
|
||||
api.ready(doc, function () {
|
||||
if (allLoaded()) {
|
||||
each(handlers.ALL, function (callback) {
|
||||
one(callback);
|
||||
});
|
||||
}
|
||||
|
||||
if (api.feature) {
|
||||
api.feature("domloaded", true);
|
||||
}
|
||||
});
|
||||
//#endregion
|
||||
}(window));
|
5
bower_components/headjs/dist/1.0.0/head.load.min.js
vendored
Normal file
5
bower_components/headjs/dist/1.0.0/head.load.min.js
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
/*! head.load - v1.0.3 */
|
||||
(function(n,t){"use strict";function w(){}function u(n,t){if(n){typeof n=="object"&&(n=[].slice.call(n));for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}}function it(n,i){var r=Object.prototype.toString.call(i).slice(8,-1);return i!==t&&i!==null&&r===n}function s(n){return it("Function",n)}function a(n){return it("Array",n)}function et(n){var i=n.split("/"),t=i[i.length-1],r=t.indexOf("?");return r!==-1?t.substring(0,r):t}function f(n){(n=n||w,n._done)||(n(),n._done=1)}function ot(n,t,r,u){var f=typeof n=="object"?n:{test:n,success:!t?!1:a(t)?t:[t],failure:!r?!1:a(r)?r:[r],callback:u||w},e=!!f.test;return e&&!!f.success?(f.success.push(f.callback),i.load.apply(null,f.success)):e||!f.failure?u():(f.failure.push(f.callback),i.load.apply(null,f.failure)),i}function v(n){var t={},i,r;if(typeof n=="object")for(i in n)!n[i]||(t={name:i,url:n[i]});else t={name:et(n),url:n};return(r=c[t.name],r&&r.url===t.url)?r:(c[t.name]=t,t)}function y(n){n=n||c;for(var t in n)if(n.hasOwnProperty(t)&&n[t].state!==l)return!1;return!0}function st(n){n.state=ft;u(n.onpreload,function(n){n.call()})}function ht(n){n.state===t&&(n.state=nt,n.onpreload=[],rt({url:n.url,type:"cache"},function(){st(n)}))}function ct(){var n=arguments,t=n[n.length-1],r=[].slice.call(n,1),f=r[0];return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(f?(u(r,function(n){s(n)||!n||ht(v(n))}),b(v(n[0]),s(f)?f:function(){i.load.apply(null,r)})):b(v(n[0])),i)}function lt(){var n=arguments,t=n[n.length-1],r={};return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(u(n,function(n){n!==t&&(n=v(n),r[n.name]=n)}),u(n,function(n){n!==t&&(n=v(n),b(n,function(){y(r)&&f(t)}))}),i)}function b(n,t){if(t=t||w,n.state===l){t();return}if(n.state===tt){i.ready(n.name,t);return}if(n.state===nt){n.onpreload.push(function(){b(n,t)});return}n.state=tt;rt(n,function(){n.state=l;t();u(h[n.name],function(n){f(n)});o&&y()&&u(h.ALL,function(n){f(n)})})}function at(n){n=n||"";var t=n.split("?")[0].split(".");return t[t.length-1].toLowerCase()}function rt(t,i){function e(t){t=t||n.event;u.onload=u.onreadystatechange=u.onerror=null;i()}function o(f){f=f||n.event;(f.type==="load"||/loaded|complete/.test(u.readyState)&&(!r.documentMode||r.documentMode<9))&&(n.clearTimeout(t.errorTimeout),n.clearTimeout(t.cssTimeout),u.onload=u.onreadystatechange=u.onerror=null,i())}function s(){if(t.state!==l&&t.cssRetries<=20){for(var i=0,f=r.styleSheets.length;i<f;i++)if(r.styleSheets[i].href===u.href){o({type:"load"});return}t.cssRetries++;t.cssTimeout=n.setTimeout(s,250)}}var u,h,f;i=i||w;h=at(t.url);h==="css"?(u=r.createElement("link"),u.type="text/"+(t.type||"css"),u.rel="stylesheet",u.href=t.url,t.cssRetries=0,t.cssTimeout=n.setTimeout(s,500)):(u=r.createElement("script"),u.type="text/"+(t.type||"javascript"),u.src=t.url);u.onload=u.onreadystatechange=o;u.onerror=e;u.async=!1;u.defer=!1;t.errorTimeout=n.setTimeout(function(){e({type:"timeout"})},7e3);f=r.head||r.getElementsByTagName("head")[0];f.insertBefore(u,f.lastChild)}function vt(){for(var t,u=r.getElementsByTagName("script"),n=0,f=u.length;n<f;n++)if(t=u[n].getAttribute("data-headjs-load"),!!t){i.load(t);return}}function yt(n,t){var v,p,e;return n===r?(o?f(t):d.push(t),i):(s(n)&&(t=n,n="ALL"),a(n))?(v={},u(n,function(n){v[n]=c[n];i.ready(n,function(){y(v)&&f(t)})}),i):typeof n!="string"||!s(t)?i:(p=c[n],p&&p.state===l||n==="ALL"&&y()&&o)?(f(t),i):(e=h[n],e?e.push(t):e=h[n]=[t],i)}function e(){if(!r.body){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(e,50);return}o||(o=!0,vt(),u(d,function(n){f(n)}))}function k(){r.addEventListener?(r.removeEventListener("DOMContentLoaded",k,!1),e()):r.readyState==="complete"&&(r.detachEvent("onreadystatechange",k),e())}var r=n.document,d=[],h={},c={},ut="async"in r.createElement("script")||"MozAppearance"in r.documentElement.style||n.opera,o,g=n.head_conf&&n.head_conf.head||"head",i=n[g]=n[g]||function(){i.ready.apply(null,arguments)},nt=1,ft=2,tt=3,l=4,p;if(r.readyState==="complete")e();else if(r.addEventListener)r.addEventListener("DOMContentLoaded",k,!1),n.addEventListener("load",e,!1);else{r.attachEvent("onreadystatechange",k);n.attachEvent("onload",e);p=!1;try{p=!n.frameElement&&r.documentElement}catch(wt){}p&&p.doScroll&&function pt(){if(!o){try{p.doScroll("left")}catch(t){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(pt,50);return}e()}}()}i.load=i.js=ut?lt:ct;i.test=ot;i.ready=yt;i.ready(r,function(){y()&&u(h.ALL,function(n){f(n)});i.feature&&i.feature("domloaded",!0)})})(window);
|
||||
/*
|
||||
//# sourceMappingURL=head.load.min.js.map
|
||||
*/
|
8
bower_components/headjs/dist/1.0.0/head.load.min.js.map
vendored
Normal file
8
bower_components/headjs/dist/1.0.0/head.load.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
9
bower_components/headjs/dist/1.0.0/head.min.js
vendored
Normal file
9
bower_components/headjs/dist/1.0.0/head.min.js
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*! head.core - v1.0.2 */
|
||||
(function(n,t){"use strict";function r(n){a[a.length]=n}function k(n){var t=new RegExp(" ?\\b"+n+"\\b");c.className=c.className.replace(t,"")}function p(n,t){for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}function tt(){var t,e,f,o;c.className=c.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g,"");t=n.innerWidth||c.clientWidth;e=n.outerWidth||n.screen.width;u.screen.innerWidth=t;u.screen.outerWidth=e;r("w-"+t);p(i.screens,function(n){t>n?(i.screensCss.gt&&r("gt-"+n),i.screensCss.gte&&r("gte-"+n)):t<n?(i.screensCss.lt&&r("lt-"+n),i.screensCss.lte&&r("lte-"+n)):t===n&&(i.screensCss.lte&&r("lte-"+n),i.screensCss.eq&&r("e-q"+n),i.screensCss.gte&&r("gte-"+n))});f=n.innerHeight||c.clientHeight;o=n.outerHeight||n.screen.height;u.screen.innerHeight=f;u.screen.outerHeight=o;u.feature("portrait",f>t);u.feature("landscape",f<t)}function it(){n.clearTimeout(b);b=n.setTimeout(tt,50)}var y=n.document,rt=n.navigator,ut=n.location,c=y.documentElement,a=[],i={screens:[240,320,480,640,768,800,1024,1280,1440,1680,1920],screensCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!1},browsers:[{ie:{min:6,max:11}}],browserCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!0},html5:!0,page:"-page",section:"-section",head:"head"},v,u,s,w,o,h,l,d,f,g,nt,e,b;if(n.head_conf)for(v in n.head_conf)n.head_conf[v]!==t&&(i[v]=n.head_conf[v]);u=n[i.head]=function(){u.ready.apply(null,arguments)};u.feature=function(n,t,i){return n?(Object.prototype.toString.call(t)==="[object Function]"&&(t=t.call()),r((t?"":"no-")+n),u[n]=!!t,i||(k("no-"+n),k(n),u.feature()),u):(c.className+=" "+a.join(" "),a=[],u)};u.feature("js",!0);s=rt.userAgent.toLowerCase();w=/mobile|android|kindle|silk|midp|phone|(windows .+arm|touch)/.test(s);u.feature("mobile",w,!0);u.feature("desktop",!w,!0);s=/(chrome|firefox)[ \/]([\w.]+)/.exec(s)||/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(android)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(msie) ([\w.]+)/.exec(s)||/(trident).+rv:(\w.)+/.exec(s)||[];o=s[1];h=parseFloat(s[2]);switch(o){case"msie":case"trident":o="ie";h=y.documentMode||h;break;case"firefox":o="ff";break;case"ipod":case"ipad":case"iphone":o="ios";break;case"webkit":o="safari"}for(u.browser={name:o,version:h},u.browser[o]=!0,l=0,d=i.browsers.length;l<d;l++)for(f in i.browsers[l])if(o===f)for(r(f),g=i.browsers[l][f].min,nt=i.browsers[l][f].max,e=g;e<=nt;e++)h>e?(i.browserCss.gt&&r("gt-"+f+e),i.browserCss.gte&&r("gte-"+f+e)):h<e?(i.browserCss.lt&&r("lt-"+f+e),i.browserCss.lte&&r("lte-"+f+e)):h===e&&(i.browserCss.lte&&r("lte-"+f+e),i.browserCss.eq&&r("eq-"+f+e),i.browserCss.gte&&r("gte-"+f+e));else r("no-"+f);r(o);r(o+parseInt(h,10));i.html5&&o==="ie"&&h<9&&p("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"),function(n){y.createElement(n)});p(ut.pathname.split("/"),function(n,u){if(this.length>2&&this[u+1]!==t)u&&r(this.slice(u,u+1).join("-").toLowerCase()+i.section);else{var f=n||"index",e=f.indexOf(".");e>0&&(f=f.substring(0,e));c.id=f.toLowerCase()+i.page;u||r("root"+i.section)}});u.screen={height:n.screen.height,width:n.screen.width};tt();b=0;n.addEventListener?n.addEventListener("resize",it,!1):n.attachEvent("onresize",it)})(window);
|
||||
/*! head.css3 - v1.0.0 */
|
||||
(function(n,t){"use strict";function a(n){for(var r in n)if(i[n[r]]!==t)return!0;return!1}function r(n){var t=n.charAt(0).toUpperCase()+n.substr(1),i=(n+" "+c.join(t+" ")+t).split(" ");return!!a(i)}var h=n.document,o=h.createElement("i"),i=o.style,s=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),c="Webkit Moz O ms Khtml".split(" "),l=n.head_conf&&n.head_conf.head||"head",u=n[l],f={gradient:function(){var n="background-image:";return i.cssText=(n+s.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));"+n)+s.join("linear-gradient(left top,#eee,#fff);"+n)).slice(0,-n.length),!!i.backgroundImage},rgba:function(){return i.cssText="background-color:rgba(0,0,0,0.5)",!!i.backgroundColor},opacity:function(){return o.style.opacity===""},textshadow:function(){return i.textShadow===""},multiplebgs:function(){i.cssText="background:url(https://),url(https://),red url(https://)";var n=(i.background||"").match(/url/g);return Object.prototype.toString.call(n)==="[object Array]"&&n.length===3},boxshadow:function(){return r("boxShadow")},borderimage:function(){return r("borderImage")},borderradius:function(){return r("borderRadius")},cssreflections:function(){return r("boxReflect")},csstransforms:function(){return r("transform")},csstransitions:function(){return r("transition")},touch:function(){return"ontouchstart"in n},retina:function(){return n.devicePixelRatio>1},fontface:function(){var t=u.browser.name,n=u.browser.version;switch(t){case"ie":return n>=9;case"chrome":return n>=13;case"ff":return n>=6;case"ios":return n>=5;case"android":return!1;case"webkit":return n>=5.1;case"opera":return n>=10;default:return!1}}};for(var e in f)f[e]&&u.feature(e,f[e].call(),!0);u.feature()})(window);
|
||||
/*! head.load - v1.0.3 */
|
||||
(function(n,t){"use strict";function w(){}function u(n,t){if(n){typeof n=="object"&&(n=[].slice.call(n));for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}}function it(n,i){var r=Object.prototype.toString.call(i).slice(8,-1);return i!==t&&i!==null&&r===n}function s(n){return it("Function",n)}function a(n){return it("Array",n)}function et(n){var i=n.split("/"),t=i[i.length-1],r=t.indexOf("?");return r!==-1?t.substring(0,r):t}function f(n){(n=n||w,n._done)||(n(),n._done=1)}function ot(n,t,r,u){var f=typeof n=="object"?n:{test:n,success:!t?!1:a(t)?t:[t],failure:!r?!1:a(r)?r:[r],callback:u||w},e=!!f.test;return e&&!!f.success?(f.success.push(f.callback),i.load.apply(null,f.success)):e||!f.failure?u():(f.failure.push(f.callback),i.load.apply(null,f.failure)),i}function v(n){var t={},i,r;if(typeof n=="object")for(i in n)!n[i]||(t={name:i,url:n[i]});else t={name:et(n),url:n};return(r=c[t.name],r&&r.url===t.url)?r:(c[t.name]=t,t)}function y(n){n=n||c;for(var t in n)if(n.hasOwnProperty(t)&&n[t].state!==l)return!1;return!0}function st(n){n.state=ft;u(n.onpreload,function(n){n.call()})}function ht(n){n.state===t&&(n.state=nt,n.onpreload=[],rt({url:n.url,type:"cache"},function(){st(n)}))}function ct(){var n=arguments,t=n[n.length-1],r=[].slice.call(n,1),f=r[0];return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(f?(u(r,function(n){s(n)||!n||ht(v(n))}),b(v(n[0]),s(f)?f:function(){i.load.apply(null,r)})):b(v(n[0])),i)}function lt(){var n=arguments,t=n[n.length-1],r={};return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(u(n,function(n){n!==t&&(n=v(n),r[n.name]=n)}),u(n,function(n){n!==t&&(n=v(n),b(n,function(){y(r)&&f(t)}))}),i)}function b(n,t){if(t=t||w,n.state===l){t();return}if(n.state===tt){i.ready(n.name,t);return}if(n.state===nt){n.onpreload.push(function(){b(n,t)});return}n.state=tt;rt(n,function(){n.state=l;t();u(h[n.name],function(n){f(n)});o&&y()&&u(h.ALL,function(n){f(n)})})}function at(n){n=n||"";var t=n.split("?")[0].split(".");return t[t.length-1].toLowerCase()}function rt(t,i){function e(t){t=t||n.event;u.onload=u.onreadystatechange=u.onerror=null;i()}function o(f){f=f||n.event;(f.type==="load"||/loaded|complete/.test(u.readyState)&&(!r.documentMode||r.documentMode<9))&&(n.clearTimeout(t.errorTimeout),n.clearTimeout(t.cssTimeout),u.onload=u.onreadystatechange=u.onerror=null,i())}function s(){if(t.state!==l&&t.cssRetries<=20){for(var i=0,f=r.styleSheets.length;i<f;i++)if(r.styleSheets[i].href===u.href){o({type:"load"});return}t.cssRetries++;t.cssTimeout=n.setTimeout(s,250)}}var u,h,f;i=i||w;h=at(t.url);h==="css"?(u=r.createElement("link"),u.type="text/"+(t.type||"css"),u.rel="stylesheet",u.href=t.url,t.cssRetries=0,t.cssTimeout=n.setTimeout(s,500)):(u=r.createElement("script"),u.type="text/"+(t.type||"javascript"),u.src=t.url);u.onload=u.onreadystatechange=o;u.onerror=e;u.async=!1;u.defer=!1;t.errorTimeout=n.setTimeout(function(){e({type:"timeout"})},7e3);f=r.head||r.getElementsByTagName("head")[0];f.insertBefore(u,f.lastChild)}function vt(){for(var t,u=r.getElementsByTagName("script"),n=0,f=u.length;n<f;n++)if(t=u[n].getAttribute("data-headjs-load"),!!t){i.load(t);return}}function yt(n,t){var v,p,e;return n===r?(o?f(t):d.push(t),i):(s(n)&&(t=n,n="ALL"),a(n))?(v={},u(n,function(n){v[n]=c[n];i.ready(n,function(){y(v)&&f(t)})}),i):typeof n!="string"||!s(t)?i:(p=c[n],p&&p.state===l||n==="ALL"&&y()&&o)?(f(t),i):(e=h[n],e?e.push(t):e=h[n]=[t],i)}function e(){if(!r.body){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(e,50);return}o||(o=!0,vt(),u(d,function(n){f(n)}))}function k(){r.addEventListener?(r.removeEventListener("DOMContentLoaded",k,!1),e()):r.readyState==="complete"&&(r.detachEvent("onreadystatechange",k),e())}var r=n.document,d=[],h={},c={},ut="async"in r.createElement("script")||"MozAppearance"in r.documentElement.style||n.opera,o,g=n.head_conf&&n.head_conf.head||"head",i=n[g]=n[g]||function(){i.ready.apply(null,arguments)},nt=1,ft=2,tt=3,l=4,p;if(r.readyState==="complete")e();else if(r.addEventListener)r.addEventListener("DOMContentLoaded",k,!1),n.addEventListener("load",e,!1);else{r.attachEvent("onreadystatechange",k);n.attachEvent("onload",e);p=!1;try{p=!n.frameElement&&r.documentElement}catch(wt){}p&&p.doScroll&&function pt(){if(!o){try{p.doScroll("left")}catch(t){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(pt,50);return}e()}}()}i.load=i.js=ut?lt:ct;i.test=ot;i.ready=yt;i.ready(r,function(){y()&&u(h.ALL,function(n){f(n)});i.feature&&i.feature("domloaded",!0)})})(window);
|
||||
/*
|
||||
//# sourceMappingURL=head.min.js.map
|
||||
*/
|
8
bower_components/headjs/dist/1.0.0/head.min.js.map
vendored
Normal file
8
bower_components/headjs/dist/1.0.0/head.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
114
index.html
114
index.html
|
@ -36,6 +36,22 @@
|
|||
</ul>
|
||||
</li>
|
||||
<li><strong>BUT...</strong>It might not be for you</li>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>Too many tools: Sublime Text 2 for editing, Putty for SSH,
|
||||
git bash for git, Cygwin for Rubt commands.</li>
|
||||
<li>Can mostly be done in ST2 with time. Restart with Vim,
|
||||
"nerd cred", More importantly, server administration Vim (or vi)
|
||||
works everywhere, no matter how broken the machine is (emacs
|
||||
does not)</li>
|
||||
<li>
|
||||
After 20 years, people are still finding new ways to use it
|
||||
</li>
|
||||
<li>
|
||||
Repetitive Strain injury - vim helps enforce better habbits
|
||||
</li>
|
||||
<li>You have to decide what works for you</li>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- learning curve -->
|
||||
|
@ -64,6 +80,14 @@
|
|||
</li>
|
||||
<li>Focus on five commands a week</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>vimtutor - 30-45 minutes is enough to gain usability</li>
|
||||
<li>VIM Adventures - game that finally pushed me into learning</li>
|
||||
<li>Cheat Sheet - I still keep one printed off on a wall</li>
|
||||
<li>Focus on a small set - I picked five that I wrote down and learned
|
||||
each week and still do from time to time</li>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
@ -73,6 +97,15 @@
|
|||
<li>Not using the mouse</li>
|
||||
<li>Getting to the end of the line</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
My struggles
|
||||
<ul>
|
||||
<li>Copy and paste - different idea</li>
|
||||
<li>Not using a mouse</li>
|
||||
<li>Getting to the end of the line example: I used
|
||||
shift+A<ESC> instead of $ for months</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- modes -->
|
||||
|
@ -88,6 +121,15 @@
|
|||
</ul>
|
||||
</li>
|
||||
<li>Higher complexity, but comes with incredible power</li>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>In the early days, all editors had modes. By programmers,
|
||||
for programers.</li>
|
||||
<li>Mid-1970s, Larry Tesler came up with the concept of modeless
|
||||
editors.</li>
|
||||
<li>But traded a lot of power in favor of this ease of use.</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
|
@ -107,6 +149,12 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>Focus on home row.</li>
|
||||
<li>Move around screen: H, M, L</li>
|
||||
<li>Move around document: gg, G, :50</li>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- actions -->
|
||||
|
@ -126,6 +174,15 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>insert is a complete mode switch to let you type text, leave
|
||||
with <ESC></li>
|
||||
<li>delete, change, yank act on things</li>
|
||||
<li>All of them put affected text into a place that can be pasted
|
||||
from</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- objects -->
|
||||
|
@ -148,6 +205,12 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>Everything is an object in Vim.</li>
|
||||
<li>Learning to utilize these is the key to effective vim use</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- modified -->
|
||||
|
@ -159,6 +222,15 @@
|
|||
<li>t - (un)till</li>
|
||||
<li>f - find</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>inside - excludes the surrounding part of the object</li>
|
||||
<li>around - includes the surrounding part of the object</li>
|
||||
<li>till - from cursor to the specific character</li>
|
||||
<li>find - the same as till except for including the specific
|
||||
character</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- combined -->
|
||||
|
@ -181,6 +253,13 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>
|
||||
das - includes the spaces. dis would not inclue space after.
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- example stuff -->
|
||||
|
@ -211,6 +290,14 @@
|
|||
by Chris Hunt
|
||||
</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>Ben Orenstein - one of my favorite speakers</li>
|
||||
<li>:w<CR> to ^s; thousands of key strokes per week</li>
|
||||
<li>Damian Conway - more advanced with neat plugins</li>
|
||||
<li>Chris Hunt - Basic tmux and Vim. I do this.</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- Repository slide -->
|
||||
|
@ -231,6 +318,11 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<aside class="notes">
|
||||
<ul>
|
||||
<li>Grow your vim file like a garden</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<!-- Conclusion -->
|
||||
|
@ -239,12 +331,32 @@
|
|||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<script src="bower_components/headjs/dist/1.0.0/head.min.js"></script>
|
||||
<script src="bower_components/reveal.js/js/reveal.min.js"></script>
|
||||
<script>
|
||||
Reveal.initialize({
|
||||
controls: false,
|
||||
progress: true,
|
||||
history: true
|
||||
history: true,
|
||||
dependencies: [
|
||||
{
|
||||
src: 'bower_components/reveal.js/plugin/notes/notes.js',
|
||||
async: true,
|
||||
condition: function() { return !!document.body.classList; }
|
||||
},
|
||||
{
|
||||
src: 'bower_components/reveal.js/plugin/markdown/marked.js',
|
||||
condition: function() {
|
||||
return !!document.querySelector( '[data-markdown]' );
|
||||
}
|
||||
},
|
||||
{
|
||||
src: 'bower_components/reveal.js/plugin/markdown/markdown.js',
|
||||
condition: function() {
|
||||
return !!document.querySelector( '[data-markdown]' );
|
||||
}
|
||||
},
|
||||
]
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
# Intro to Vim
|
||||
|
||||
## Intro to Vim
|
||||
|
||||
## Why I use Vim
|
||||
|
||||
* Was using too many tools
|
||||
* Sublime Text 2 for editing
|
||||
* Putty for SSH
|
||||
* git bash for git
|
||||
* Cygwin for Rubt commands
|
||||
* Can mostly be done in ST2, but with time invested. Restart with Vim
|
||||
* "nerd cred"
|
||||
* More importantly, server administration
|
||||
* Vim (or vi) works **everywhere**, no matter how broken the machine is
|
||||
* (emacs does not)
|
||||
* After 20 years, people are still finding new ways to use it
|
||||
* Repetitive Strain injury - vim helps enforce better habbits
|
||||
* You have to decide what works for you
|
||||
|
||||
## Everyone's first Vim session
|
||||
|
||||
* Bash.org joke
|
||||
|
||||
## But how can we avoid this
|
||||
|
||||
* vimtutor - 30-45 minutes is enough to gain usability
|
||||
* VIM Adventures - game that finally pushed me into learning
|
||||
* Cheat Sheet - I still keep one printed off on a wall
|
||||
* Focus on a small set - I picked five that I wrote down and learned each week
|
||||
* and still do from time to time
|
||||
|
||||
## You will still struggle
|
||||
|
||||
* Some of the things I struggled with
|
||||
* Copy and paste - very different idea, more later (and more advanced)
|
||||
* Not using a mouse - if you don't plan on this, Vim is not for you
|
||||
* Getting to the end of the line example
|
||||
* I used shift+A<ESC> instead of $ for months
|
||||
|
||||
## Vim has modes
|
||||
|
||||
* In the early days, all editors had modes. By programmers, for programers.
|
||||
* Mid-1970s, Larry Tesler came up with the concept of modeless editors.
|
||||
* But a lot of power in favor of this ease of use.
|
||||
|
||||
## You can move around
|
||||
|
||||
* Focus on home row. h, l to go left and right, j, k to go up and down
|
||||
* Arrow keys are bad. Require awkward hand movements.
|
||||
* Variants can get you around the screen faster.
|
||||
* Screen: H, M, L
|
||||
* Document: gg, G, :50
|
||||
|
||||
## And do things
|
||||
|
||||
* insert is a complete mode switch to let you type text, leave with <ESC>
|
||||
* delete, change, yank act on things
|
||||
* All of them put affected text into a place that can be pasted from
|
||||
|
||||
## On objects
|
||||
|
||||
* Everything is an object in Vim.
|
||||
* Learning to utilize these is the key to effective vim use
|
||||
|
||||
## That can be modified
|
||||
|
||||
* inside - excludes the surrounding part of the object
|
||||
* around - includes the surrounding part of the object
|
||||
* till - from cursor to the specific character
|
||||
* find - the same as till except for including the specific character
|
||||
|
||||
## And finally combined into a language
|
||||
|
||||
* das - includes the spaces. dis would not include the space after
|
||||
|
||||
# Demonstration
|
||||
|
||||
# Other Talks
|
||||
|
||||
* Ben Orenstein - one of my favorite speakers. more intermediate than beginner
|
||||
* Note comment on saving keystrokes
|
||||
* Damian Conway - More advanced and neat plugins
|
||||
* Chris Hunt - Shows basics of using Vim in combination with Tmux
|
||||
* I do this
|
||||
|
||||
# Resources
|
||||
|
||||
* Slides along with sample configuration available on Github
|
||||
|
||||
# Try Vim for yourself
|
Loading…
Reference in a new issue