You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by ti...@apache.org on 2013/11/18 07:09:27 UTC
svn commit: r1542910 [33/36] - in /incubator/usergrid/site/publish: ./
bootstrap/ bootstrap/bootstrap/ community/ css/ css/bootflat-extensions/
css/bootflat-square/ css/bootflat/ css/font-awesome/ css/usergrid-site/
docs/ docs/access-token/ docs/activi...
Added: incubator/usergrid/site/publish/js/head.js
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/js/head.js?rev=1542910&view=auto
==============================================================================
--- incubator/usergrid/site/publish/js/head.js (added)
+++ incubator/usergrid/site/publish/js/head.js Mon Nov 18 06:09:23 2013
@@ -0,0 +1,708 @@
+// // the most simple case. load and execute single script without blocking.
+// head.js("/path/to/file.js");
+
+// // load a script and execute a function after it has been loaded
+// head.js("/path/to/file.js", function() {
+
+// });
+
+// // load files in parallel but execute them in sequence
+// head.js("file1.js", "file2.js", ... "fileN.js");
+
+// // execute function after all scripts have been loaded
+// head.js("file1.js", "file2.js", function() {
+
+// });
+
+// // files are loaded in parallel and executed in order they arrive
+// head.js("file1.js");
+// head.js("file2.js");
+// head.js("file3.js");
+
+// // the previous can also be written as
+// head.js("file1.js").js("file1.js").js("file3.js");
+
+
+
+
+
+/**
+ Head JS The only script in your <HEAD>
+ Copyright Tero Piirainen (tipiirai)
+ License MIT / http://bit.ly/mit-license
+ Version 0.96
+
+ http://headjs.com
+*/
+(function(doc) {
+
+ var html = doc.documentElement,
+ conf = {
+ screens: [320, 480, 640, 768, 1024, 1280, 1440, 1680, 1920],
+ section: "-section",
+ page: "-page",
+ head: "head"
+ },
+ klass = [];
+
+
+ if (window.head_conf) {
+ for (var key in head_conf) {
+ if (head_conf[key] !== undefined) {
+ conf[key] = head_conf[key];
+ }
+ }
+ }
+
+ function pushClass(name) {
+ klass[klass.length] = name;
+ }
+
+ function removeClass(name) {
+ var re = new RegExp("\\b" + name + "\\b");
+ html.className = html.className.replace(re, '');
+ }
+
+ function each(arr, fn) {
+ for (var i = 0, arr_length = arr.length; i < arr_length; i++) {
+ fn.call(arr, arr[i], i);
+ }
+ }
+
+ // API
+ var api = window[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;
+ }
+
+ 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;
+ };
+
+ // browser type & version
+ var ua = navigator.userAgent.toLowerCase();
+
+ ua = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || [];
+
+
+ if (ua[1] == 'msie') {
+ ua[1] = 'ie';
+ ua[2] = document.documentMode || ua[2];
+ }
+
+ pushClass(ua[1]);
+
+ api.browser = { version: ua[2] };
+ api.browser[ua[1]] = true;
+
+ // IE specific
+ if (api.browser.ie) {
+
+ pushClass("ie" + parseFloat(ua[2]));
+
+ // IE versions
+ for (var ver = 3; ver < 11; ver++) {
+ if (parseFloat(ua[2]) < ver) { pushClass("lt-ie" + ver); }
+ }
+
+ // HTML5 support
+ each("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video".split("|"), function(el) {
+ doc.createElement(el);
+ });
+
+ }
+
+
+ // CSS "router"
+ each(location.pathname.split("/"), function(el, i) {
+
+ if (this.length > 2 && this[i + 1] !== undefined) {
+ if (i) { pushClass(this.slice(1, i+1).join("-") + conf.section); }
+
+ } else {
+
+ // pageId
+ var id = el || "index", index = id.indexOf(".");
+ if (index > 0) { id = id.substring(0, index); }
+ html.id = id + conf.page;
+
+ // on root?
+ if (!i) { pushClass("root" + conf.section); }
+ }
+ });
+
+
+ // screen resolution: w-100, lt-480, lt-1024 ...
+ function screenSize() {
+ var w = window.outerWidth || html.clientWidth;
+
+ // remove earlier widths
+ html.className = html.className.replace(/ (w|lt)-\d+/g, "");
+
+ // add new ones
+ pushClass("w-" + Math.round(w / 100) * 100);
+
+ each(conf.screens, function(width) {
+ if (w <= width) { pushClass("lt-" + width); }
+ });
+
+ api.feature();
+ }
+
+ screenSize();
+ window.onresize = screenSize;
+
+ api.feature("js", true).feature();
+
+})(document);
+
+
+/**
+ Head JS The only script in your <HEAD>
+ Copyright Tero Piirainen (tipiirai)
+ License MIT / http://bit.ly/mit-license
+ Version 0.96
+
+ http://headjs.com
+*/
+(function() {
+ /*
+ 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 */
+ var el = document.createElement("i"),
+ style = el.style,
+ prefs = ' -o- -moz- -ms- -webkit- -khtml- '.split(' '),
+ domPrefs = 'Webkit Moz O ms Khtml'.split(' '),
+
+ head_var = window.head_conf && head_conf.head || "head",
+ api = window[head_var];
+
+
+ // Thanks Paul Irish!
+ function testProps(props) {
+ for (var i in props) {
+ if (style[props[i]] !== undefined) {
+ return true;
+ }
+ }
+ }
+
+
+ function testAll(prop) {
+ var camel = prop.charAt(0).toUpperCase() + prop.substr(1),
+ props = (prop + ' ' + domPrefs.join(camel + ' ') + camel).split(' ');
+
+ return !!testProps(props);
+ }
+
+ var tests = {
+
+ 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(//:),url(//:),red url(//:)";
+ return new RegExp("(url\\s*\\(.*?){3}").test(style.background);
+ },
+
+ 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");
+ },
+
+ /*
+ font-face support. Uses browser sniffing but is synchronous.
+
+ http://paulirish.com/2009/font-face-feature-detection/
+ */
+ fontface: function() {
+ var ua = navigator.userAgent, parsed;
+
+ if (/*@cc_on@if(@_jscript_version>=5)!@end@*/0)
+ return true;
+
+ if (parsed = ua.match(/Chrome\/(\d+\.\d+\.\d+\.\d+)/))
+ return parsed[1] >= '4.0.249.4' || 1 * parsed[1].split(".")[0] > 5;
+ if ((parsed = ua.match(/Safari\/(\d+\.\d+)/)) && !/iPhone/.test(ua))
+ return parsed[1] >= '525.13';
+ if (/Opera/.test({}.toString.call(window.opera)))
+ return opera.version() >= '10.00';
+ if (parsed = ua.match(/rv:(\d+\.\d+\.\d+)[^b].*Gecko\//))
+ return parsed[1] >= '1.9.1';
+
+ 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();
+
+})();
+
+
+/**
+ Head JS The only script in your <HEAD>
+ Copyright Tero Piirainen (tipiirai)
+ License MIT / http://bit.ly/mit-license
+ Version 0.96
+
+ http://headjs.com
+*/
+(function(doc) {
+
+ var head = doc.documentElement,
+ isHeadReady,
+ isDomReady,
+ domWaiters = [],
+ queue = [], // waiters for the "head ready" event
+ handlers = {}, // user functions waiting for events
+ scripts = {}, // loadable scripts in different states
+ isAsync = doc.createElement("script").async === true || "MozAppearance" in doc.documentElement.style || window.opera;
+
+
+ /*** public API ***/
+ var head_var = window.head_conf && head_conf.head || "head",
+ api = window[head_var] = (window[head_var] || function() { api.ready.apply(null, arguments); });
+
+ // states
+ var PRELOADED = 1,
+ PRELOADING = 2,
+ LOADING = 3,
+ LOADED = 4;
+
+
+ // Method 1: simply load and let browser take care of ordering
+ if (isAsync) {
+
+ api.js = function() {
+
+ var args = arguments,
+ fn = args[args.length -1],
+ els = {};
+
+ if (!isFunc(fn)) { fn = null; }
+
+ each(args, function(el, i) {
+
+ if (el != fn) {
+ el = getScript(el);
+ els[el.name] = el;
+
+ load(el, fn && i == args.length -2 ? function() {
+ if (allLoaded(els)) { one(fn); }
+
+ } : null);
+ }
+ });
+
+ return api;
+ };
+
+
+ // Method 2: preload with text/cache hack
+ } else {
+
+ api.js = function() {
+
+ var args = arguments,
+ rest = [].slice.call(args, 1),
+ next = rest[0];
+
+ // wait for a while. immediate execution causes some browsers to ignore caching
+ if (!isHeadReady) {
+ queue.push(function() {
+ api.js.apply(null, args);
+ });
+ return api;
+ }
+
+ // multiple arguments
+ if (next) {
+
+ // load
+ each(rest, function(el) {
+ if (!isFunc(el)) {
+ preload(getScript(el));
+ }
+ });
+
+ // execute
+ load(getScript(args[0]), isFunc(next) ? next : function() {
+ api.js.apply(null, rest);
+ });
+
+
+ // single script
+ } else {
+ load(getScript(args[0]));
+ }
+
+ return api;
+ };
+ }
+
+ api.ready = function(key, fn) {
+
+ // DOM ready check: head.ready(document, function() { });
+ if (key == doc) {
+ if (isDomReady) { one(fn); }
+ else { domWaiters.push(fn); }
+ return api;
+ }
+
+ // shift arguments
+ if (isFunc(key)) {
+ fn = key;
+ key = "ALL";
+ }
+
+ // make sure arguments are sane
+ if (typeof key != 'string' || !isFunc(fn)) { return api; }
+
+ var script = scripts[key];
+
+ // script already loaded --> execute and return
+ if (script && script.state == LOADED || key == 'ALL' && allLoaded() && isDomReady) {
+ one(fn);
+ return api;
+ }
+
+ var arr = handlers[key];
+ if (!arr) { arr = handlers[key] = [fn]; }
+ else { arr.push(fn); }
+ return api;
+ };
+
+
+ // perform this when DOM is ready
+ api.ready(doc, function() {
+
+ if (allLoaded()) {
+ each(handlers.ALL, function(fn) {
+ one(fn);
+ });
+ }
+
+ if (api.feature) {
+ api.feature("domloaded", true);
+ }
+ });
+
+
+ /*** private functions ***/
+
+
+ // call function once
+ function one(fn) {
+ if (fn._done) { return; }
+ fn();
+ fn._done = 1;
+ }
+
+
+ function toLabel(url) {
+ var els = url.split("/"),
+ name = els[els.length -1],
+ i = name.indexOf("?");
+
+ return i != -1 ? name.substring(0, i) : name;
+ }
+
+
+ function getScript(url) {
+
+ var script;
+
+ if (typeof url == 'object') {
+ for (var key in url) {
+ if (url[key]) {
+ script = { name: key, url: url[key] };
+ }
+ }
+ } else {
+ script = { name: toLabel(url), url: url };
+ }
+
+ var existing = scripts[script.name];
+ if (existing && existing.url === script.url) { return existing; }
+
+ scripts[script.name] = script;
+ return script;
+ }
+
+
+ function each(arr, fn) {
+ if (!arr) { return; }
+
+ // arguments special type
+ if (typeof arr == 'object') { arr = [].slice.call(arr); }
+
+ // do the job
+ for (var i = 0; i < arr.length; i++) {
+ fn.call(arr, arr[i], i);
+ }
+ }
+
+ function isFunc(el) {
+ return Object.prototype.toString.call(el) == '[object Function]';
+ }
+
+ function allLoaded(els) {
+
+ els = els || scripts;
+
+ var loaded;
+
+ for (var name in els) {
+ if (els.hasOwnProperty(name) && els[name].state != LOADED) { return false; }
+ loaded = true;
+ }
+
+ return loaded;
+ }
+
+
+ function onPreload(script) {
+ script.state = PRELOADED;
+
+ each(script.onpreload, function(el) {
+ el.call();
+ });
+ }
+
+ function preload(script, callback) {
+
+ if (script.state === undefined) {
+
+ script.state = PRELOADING;
+ script.onpreload = [];
+
+ scriptTag({ src: script.url, type: 'cache'}, function() {
+ onPreload(script);
+ });
+ }
+ }
+
+ function load(script, callback) {
+
+ if (script.state == LOADED) {
+ return callback && callback();
+ }
+
+ if (script.state == LOADING) {
+ return api.ready(script.name, callback);
+ }
+
+ if (script.state == PRELOADING) {
+ return script.onpreload.push(function() {
+ load(script, callback);
+ });
+ }
+
+ script.state = LOADING;
+
+ scriptTag(script.url, function() {
+
+ script.state = LOADED;
+
+ if (callback) { callback(); }
+
+ // handlers for this script
+ each(handlers[script.name], function(fn) {
+ one(fn);
+ });
+
+ // everything ready
+ if (allLoaded() && isDomReady) {
+ each(handlers.ALL, function(fn) {
+ one(fn);
+ });
+ }
+ });
+ }
+
+
+ function scriptTag(src, callback) {
+
+ var s = doc.createElement('script');
+ s.type = 'text/' + (src.type || 'javascript');
+ s.src = src.src || src;
+ s.async = false;
+
+ s.onreadystatechange = s.onload = function() {
+
+ var state = s.readyState;
+
+ if (!callback.done && (!state || /loaded|complete/.test(state))) {
+ callback.done = true;
+ callback();
+ }
+ };
+
+ // use body if available. more safe in IE
+ (doc.body || head).appendChild(s);
+ }
+
+ /*
+ The much desired DOM ready check
+ Thanks to jQuery and http://javascript.nwbox.com/IEContentLoaded/
+ */
+
+ function fireReady() {
+ if (!isDomReady) {
+ isDomReady = true;
+ each(domWaiters, function(fn) {
+ one(fn);
+ });
+ }
+ }
+
+ // W3C
+ if (window.addEventListener) {
+ doc.addEventListener("DOMContentLoaded", fireReady, false);
+
+ // fallback. this is always called
+ window.addEventListener("load", fireReady, false);
+
+ // IE
+ } else if (window.attachEvent) {
+
+ // for iframes
+ doc.attachEvent("onreadystatechange", function() {
+ if (doc.readyState === "complete" ) {
+ fireReady();
+ }
+ });
+
+
+ // avoid frames with different domains issue
+ var frameElement = 1;
+
+ try {
+ frameElement = window.frameElement;
+
+ } catch(e) {}
+
+
+ if (!frameElement && head.doScroll) {
+
+ (function() {
+ try {
+ head.doScroll("left");
+ fireReady();
+
+ } catch(e) {
+ setTimeout(arguments.callee, 1);
+ return;
+ }
+ })();
+ }
+
+ // fallback
+ window.attachEvent("onload", fireReady);
+ }
+
+
+ // enable document.readyState for Firefox <= 3.5
+ if (!doc.readyState && doc.addEventListener) {
+ doc.readyState = "loading";
+ doc.addEventListener("DOMContentLoaded", handler = function () {
+ doc.removeEventListener("DOMContentLoaded", handler, false);
+ doc.readyState = "complete";
+ }, false);
+ }
+
+ /*
+ We wait for 300 ms before script loading starts. for some reason this is needed
+ to make sure scripts are cached. Not sure why this happens yet. A case study:
+
+ https://github.com/headjs/headjs/issues/closed#issue/83
+ */
+ setTimeout(function() {
+ isHeadReady = true;
+ each(queue, function(fn) { fn(); });
+
+ }, 300);
+
+})(document);
Added: incubator/usergrid/site/publish/js/head/index.html
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/js/head/index.html?rev=1542910&view=auto
==============================================================================
--- incubator/usergrid/site/publish/js/head/index.html (added)
+++ incubator/usergrid/site/publish/js/head/index.html Mon Nov 18 06:09:23 2013
@@ -0,0 +1,708 @@
+// // the most simple case. load and execute single script without blocking.
+// head.js("/path/to/file.js");
+
+// // load a script and execute a function after it has been loaded
+// head.js("/path/to/file.js", function() {
+
+// });
+
+// // load files in parallel but execute them in sequence
+// head.js("file1.js", "file2.js", ... "fileN.js");
+
+// // execute function after all scripts have been loaded
+// head.js("file1.js", "file2.js", function() {
+
+// });
+
+// // files are loaded in parallel and executed in order they arrive
+// head.js("file1.js");
+// head.js("file2.js");
+// head.js("file3.js");
+
+// // the previous can also be written as
+// head.js("file1.js").js("file1.js").js("file3.js");
+
+
+
+
+
+/**
+ Head JS The only script in your <HEAD>
+ Copyright Tero Piirainen (tipiirai)
+ License MIT / http://bit.ly/mit-license
+ Version 0.96
+
+ http://headjs.com
+*/
+(function(doc) {
+
+ var html = doc.documentElement,
+ conf = {
+ screens: [320, 480, 640, 768, 1024, 1280, 1440, 1680, 1920],
+ section: "-section",
+ page: "-page",
+ head: "head"
+ },
+ klass = [];
+
+
+ if (window.head_conf) {
+ for (var key in head_conf) {
+ if (head_conf[key] !== undefined) {
+ conf[key] = head_conf[key];
+ }
+ }
+ }
+
+ function pushClass(name) {
+ klass[klass.length] = name;
+ }
+
+ function removeClass(name) {
+ var re = new RegExp("\\b" + name + "\\b");
+ html.className = html.className.replace(re, '');
+ }
+
+ function each(arr, fn) {
+ for (var i = 0, arr_length = arr.length; i < arr_length; i++) {
+ fn.call(arr, arr[i], i);
+ }
+ }
+
+ // API
+ var api = window[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;
+ }
+
+ 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;
+ };
+
+ // browser type & version
+ var ua = navigator.userAgent.toLowerCase();
+
+ ua = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || [];
+
+
+ if (ua[1] == 'msie') {
+ ua[1] = 'ie';
+ ua[2] = document.documentMode || ua[2];
+ }
+
+ pushClass(ua[1]);
+
+ api.browser = { version: ua[2] };
+ api.browser[ua[1]] = true;
+
+ // IE specific
+ if (api.browser.ie) {
+
+ pushClass("ie" + parseFloat(ua[2]));
+
+ // IE versions
+ for (var ver = 3; ver < 11; ver++) {
+ if (parseFloat(ua[2]) < ver) { pushClass("lt-ie" + ver); }
+ }
+
+ // HTML5 support
+ each("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video".split("|"), function(el) {
+ doc.createElement(el);
+ });
+
+ }
+
+
+ // CSS "router"
+ each(location.pathname.split("/"), function(el, i) {
+
+ if (this.length > 2 && this[i + 1] !== undefined) {
+ if (i) { pushClass(this.slice(1, i+1).join("-") + conf.section); }
+
+ } else {
+
+ // pageId
+ var id = el || "index", index = id.indexOf(".");
+ if (index > 0) { id = id.substring(0, index); }
+ html.id = id + conf.page;
+
+ // on root?
+ if (!i) { pushClass("root" + conf.section); }
+ }
+ });
+
+
+ // screen resolution: w-100, lt-480, lt-1024 ...
+ function screenSize() {
+ var w = window.outerWidth || html.clientWidth;
+
+ // remove earlier widths
+ html.className = html.className.replace(/ (w|lt)-\d+/g, "");
+
+ // add new ones
+ pushClass("w-" + Math.round(w / 100) * 100);
+
+ each(conf.screens, function(width) {
+ if (w <= width) { pushClass("lt-" + width); }
+ });
+
+ api.feature();
+ }
+
+ screenSize();
+ window.onresize = screenSize;
+
+ api.feature("js", true).feature();
+
+})(document);
+
+
+/**
+ Head JS The only script in your <HEAD>
+ Copyright Tero Piirainen (tipiirai)
+ License MIT / http://bit.ly/mit-license
+ Version 0.96
+
+ http://headjs.com
+*/
+(function() {
+ /*
+ 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 */
+ var el = document.createElement("i"),
+ style = el.style,
+ prefs = ' -o- -moz- -ms- -webkit- -khtml- '.split(' '),
+ domPrefs = 'Webkit Moz O ms Khtml'.split(' '),
+
+ head_var = window.head_conf && head_conf.head || "head",
+ api = window[head_var];
+
+
+ // Thanks Paul Irish!
+ function testProps(props) {
+ for (var i in props) {
+ if (style[props[i]] !== undefined) {
+ return true;
+ }
+ }
+ }
+
+
+ function testAll(prop) {
+ var camel = prop.charAt(0).toUpperCase() + prop.substr(1),
+ props = (prop + ' ' + domPrefs.join(camel + ' ') + camel).split(' ');
+
+ return !!testProps(props);
+ }
+
+ var tests = {
+
+ 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(//:),url(//:),red url(//:)";
+ return new RegExp("(url\\s*\\(.*?){3}").test(style.background);
+ },
+
+ 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");
+ },
+
+ /*
+ font-face support. Uses browser sniffing but is synchronous.
+
+ http://paulirish.com/2009/font-face-feature-detection/
+ */
+ fontface: function() {
+ var ua = navigator.userAgent, parsed;
+
+ if (/*@cc_on@if(@_jscript_version>=5)!@end@*/0)
+ return true;
+
+ if (parsed = ua.match(/Chrome\/(\d+\.\d+\.\d+\.\d+)/))
+ return parsed[1] >= '4.0.249.4' || 1 * parsed[1].split(".")[0] > 5;
+ if ((parsed = ua.match(/Safari\/(\d+\.\d+)/)) && !/iPhone/.test(ua))
+ return parsed[1] >= '525.13';
+ if (/Opera/.test({}.toString.call(window.opera)))
+ return opera.version() >= '10.00';
+ if (parsed = ua.match(/rv:(\d+\.\d+\.\d+)[^b].*Gecko\//))
+ return parsed[1] >= '1.9.1';
+
+ 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();
+
+})();
+
+
+/**
+ Head JS The only script in your <HEAD>
+ Copyright Tero Piirainen (tipiirai)
+ License MIT / http://bit.ly/mit-license
+ Version 0.96
+
+ http://headjs.com
+*/
+(function(doc) {
+
+ var head = doc.documentElement,
+ isHeadReady,
+ isDomReady,
+ domWaiters = [],
+ queue = [], // waiters for the "head ready" event
+ handlers = {}, // user functions waiting for events
+ scripts = {}, // loadable scripts in different states
+ isAsync = doc.createElement("script").async === true || "MozAppearance" in doc.documentElement.style || window.opera;
+
+
+ /*** public API ***/
+ var head_var = window.head_conf && head_conf.head || "head",
+ api = window[head_var] = (window[head_var] || function() { api.ready.apply(null, arguments); });
+
+ // states
+ var PRELOADED = 1,
+ PRELOADING = 2,
+ LOADING = 3,
+ LOADED = 4;
+
+
+ // Method 1: simply load and let browser take care of ordering
+ if (isAsync) {
+
+ api.js = function() {
+
+ var args = arguments,
+ fn = args[args.length -1],
+ els = {};
+
+ if (!isFunc(fn)) { fn = null; }
+
+ each(args, function(el, i) {
+
+ if (el != fn) {
+ el = getScript(el);
+ els[el.name] = el;
+
+ load(el, fn && i == args.length -2 ? function() {
+ if (allLoaded(els)) { one(fn); }
+
+ } : null);
+ }
+ });
+
+ return api;
+ };
+
+
+ // Method 2: preload with text/cache hack
+ } else {
+
+ api.js = function() {
+
+ var args = arguments,
+ rest = [].slice.call(args, 1),
+ next = rest[0];
+
+ // wait for a while. immediate execution causes some browsers to ignore caching
+ if (!isHeadReady) {
+ queue.push(function() {
+ api.js.apply(null, args);
+ });
+ return api;
+ }
+
+ // multiple arguments
+ if (next) {
+
+ // load
+ each(rest, function(el) {
+ if (!isFunc(el)) {
+ preload(getScript(el));
+ }
+ });
+
+ // execute
+ load(getScript(args[0]), isFunc(next) ? next : function() {
+ api.js.apply(null, rest);
+ });
+
+
+ // single script
+ } else {
+ load(getScript(args[0]));
+ }
+
+ return api;
+ };
+ }
+
+ api.ready = function(key, fn) {
+
+ // DOM ready check: head.ready(document, function() { });
+ if (key == doc) {
+ if (isDomReady) { one(fn); }
+ else { domWaiters.push(fn); }
+ return api;
+ }
+
+ // shift arguments
+ if (isFunc(key)) {
+ fn = key;
+ key = "ALL";
+ }
+
+ // make sure arguments are sane
+ if (typeof key != 'string' || !isFunc(fn)) { return api; }
+
+ var script = scripts[key];
+
+ // script already loaded --> execute and return
+ if (script && script.state == LOADED || key == 'ALL' && allLoaded() && isDomReady) {
+ one(fn);
+ return api;
+ }
+
+ var arr = handlers[key];
+ if (!arr) { arr = handlers[key] = [fn]; }
+ else { arr.push(fn); }
+ return api;
+ };
+
+
+ // perform this when DOM is ready
+ api.ready(doc, function() {
+
+ if (allLoaded()) {
+ each(handlers.ALL, function(fn) {
+ one(fn);
+ });
+ }
+
+ if (api.feature) {
+ api.feature("domloaded", true);
+ }
+ });
+
+
+ /*** private functions ***/
+
+
+ // call function once
+ function one(fn) {
+ if (fn._done) { return; }
+ fn();
+ fn._done = 1;
+ }
+
+
+ function toLabel(url) {
+ var els = url.split("/"),
+ name = els[els.length -1],
+ i = name.indexOf("?");
+
+ return i != -1 ? name.substring(0, i) : name;
+ }
+
+
+ function getScript(url) {
+
+ var script;
+
+ if (typeof url == 'object') {
+ for (var key in url) {
+ if (url[key]) {
+ script = { name: key, url: url[key] };
+ }
+ }
+ } else {
+ script = { name: toLabel(url), url: url };
+ }
+
+ var existing = scripts[script.name];
+ if (existing && existing.url === script.url) { return existing; }
+
+ scripts[script.name] = script;
+ return script;
+ }
+
+
+ function each(arr, fn) {
+ if (!arr) { return; }
+
+ // arguments special type
+ if (typeof arr == 'object') { arr = [].slice.call(arr); }
+
+ // do the job
+ for (var i = 0; i < arr.length; i++) {
+ fn.call(arr, arr[i], i);
+ }
+ }
+
+ function isFunc(el) {
+ return Object.prototype.toString.call(el) == '[object Function]';
+ }
+
+ function allLoaded(els) {
+
+ els = els || scripts;
+
+ var loaded;
+
+ for (var name in els) {
+ if (els.hasOwnProperty(name) && els[name].state != LOADED) { return false; }
+ loaded = true;
+ }
+
+ return loaded;
+ }
+
+
+ function onPreload(script) {
+ script.state = PRELOADED;
+
+ each(script.onpreload, function(el) {
+ el.call();
+ });
+ }
+
+ function preload(script, callback) {
+
+ if (script.state === undefined) {
+
+ script.state = PRELOADING;
+ script.onpreload = [];
+
+ scriptTag({ src: script.url, type: 'cache'}, function() {
+ onPreload(script);
+ });
+ }
+ }
+
+ function load(script, callback) {
+
+ if (script.state == LOADED) {
+ return callback && callback();
+ }
+
+ if (script.state == LOADING) {
+ return api.ready(script.name, callback);
+ }
+
+ if (script.state == PRELOADING) {
+ return script.onpreload.push(function() {
+ load(script, callback);
+ });
+ }
+
+ script.state = LOADING;
+
+ scriptTag(script.url, function() {
+
+ script.state = LOADED;
+
+ if (callback) { callback(); }
+
+ // handlers for this script
+ each(handlers[script.name], function(fn) {
+ one(fn);
+ });
+
+ // everything ready
+ if (allLoaded() && isDomReady) {
+ each(handlers.ALL, function(fn) {
+ one(fn);
+ });
+ }
+ });
+ }
+
+
+ function scriptTag(src, callback) {
+
+ var s = doc.createElement('script');
+ s.type = 'text/' + (src.type || 'javascript');
+ s.src = src.src || src;
+ s.async = false;
+
+ s.onreadystatechange = s.onload = function() {
+
+ var state = s.readyState;
+
+ if (!callback.done && (!state || /loaded|complete/.test(state))) {
+ callback.done = true;
+ callback();
+ }
+ };
+
+ // use body if available. more safe in IE
+ (doc.body || head).appendChild(s);
+ }
+
+ /*
+ The much desired DOM ready check
+ Thanks to jQuery and http://javascript.nwbox.com/IEContentLoaded/
+ */
+
+ function fireReady() {
+ if (!isDomReady) {
+ isDomReady = true;
+ each(domWaiters, function(fn) {
+ one(fn);
+ });
+ }
+ }
+
+ // W3C
+ if (window.addEventListener) {
+ doc.addEventListener("DOMContentLoaded", fireReady, false);
+
+ // fallback. this is always called
+ window.addEventListener("load", fireReady, false);
+
+ // IE
+ } else if (window.attachEvent) {
+
+ // for iframes
+ doc.attachEvent("onreadystatechange", function() {
+ if (doc.readyState === "complete" ) {
+ fireReady();
+ }
+ });
+
+
+ // avoid frames with different domains issue
+ var frameElement = 1;
+
+ try {
+ frameElement = window.frameElement;
+
+ } catch(e) {}
+
+
+ if (!frameElement && head.doScroll) {
+
+ (function() {
+ try {
+ head.doScroll("left");
+ fireReady();
+
+ } catch(e) {
+ setTimeout(arguments.callee, 1);
+ return;
+ }
+ })();
+ }
+
+ // fallback
+ window.attachEvent("onload", fireReady);
+ }
+
+
+ // enable document.readyState for Firefox <= 3.5
+ if (!doc.readyState && doc.addEventListener) {
+ doc.readyState = "loading";
+ doc.addEventListener("DOMContentLoaded", handler = function () {
+ doc.removeEventListener("DOMContentLoaded", handler, false);
+ doc.readyState = "complete";
+ }, false);
+ }
+
+ /*
+ We wait for 300 ms before script loading starts. for some reason this is needed
+ to make sure scripts are cached. Not sure why this happens yet. A case study:
+
+ https://github.com/headjs/headjs/issues/closed#issue/83
+ */
+ setTimeout(function() {
+ isHeadReady = true;
+ each(queue, function(fn) { fn(); });
+
+ }, 300);
+
+})(document);
Added: incubator/usergrid/site/publish/js/html5shiv.js
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/js/html5shiv.js?rev=1542910&view=auto
==============================================================================
--- incubator/usergrid/site/publish/js/html5shiv.js (added)
+++ incubator/usergrid/site/publish/js/html5shiv.js Mon Nov 18 06:09:23 2013
@@ -0,0 +1,8 @@
+/*
+ HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
+a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
+c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
+"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
+for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
Added: incubator/usergrid/site/publish/js/html5shiv/index.html
URL: http://svn.apache.org/viewvc/incubator/usergrid/site/publish/js/html5shiv/index.html?rev=1542910&view=auto
==============================================================================
--- incubator/usergrid/site/publish/js/html5shiv/index.html (added)
+++ incubator/usergrid/site/publish/js/html5shiv/index.html Mon Nov 18 06:09:23 2013
@@ -0,0 +1,8 @@
+/*
+ HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
+a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
+c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
+"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
+for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);