bower updates

debug heroku

debug heroku

heroku debug cookies
This commit is contained in:
Adam Lofting 2014-04-17 12:34:08 +01:00
Родитель fe011ec608
Коммит 6fed1d3154
29 изменённых файлов: 16196 добавлений и 93 удалений

Просмотреть файл

@ -4,7 +4,10 @@
"define": true,
"requirejs": true,
"require": true,
"$": true
"$": true,
"document": true,
"navigator": true,
"window": true
},
"bitwise": true,
"curly": true,

Просмотреть файл

@ -11,6 +11,7 @@ module.exports = function (grunt) {
browserJSHint.browser = true;
var clientSideJS = [
'public/js/main.js',
'public/js/**/*.js',
'!public/js/lib/**',
'!public/js/vendor/**'

Просмотреть файл

@ -22,6 +22,7 @@
"dependencies": {
"jquery.validation": "~1.12.0",
"bootstrap-datepicker": "~1.3.0",
"jquery-cookie": "~1.4.0"
"jquery-cookie": "~1.4.0",
"jquery": "~2.1.0"
}
}

5
bower_components/jquery/.bower.json поставляемый
Просмотреть файл

@ -32,6 +32,7 @@
"commit": "130f395eb8906e16db8506571f125a6beb28327a"
},
"_source": "git://github.com/jquery/jquery.git",
"_target": ">= 1.6.4",
"_originalSource": "jquery"
"_target": "2.1.1-beta1",
"_originalSource": "jquery",
"_direct": true
}

33
bower_components/sizzle/.bower.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,33 @@
{
"name": "sizzle",
"version": "1.10.16",
"main": "./dist/sizzle.js",
"devDependencies": {
"qunit": "~1.12.0",
"benchmark": "~1.0.0",
"requirejs": "~2.1.8",
"requirejs-domready": "~2.0.1",
"requirejs-text": "~2.0.10"
},
"ignore": [
"**/.*",
"package.json",
"bower.json",
"speed",
"Makefile",
"*.md",
"*.txt",
"src",
"Gruntfile.js"
],
"homepage": "https://github.com/jquery/sizzle",
"_release": "1.10.16",
"_resolution": {
"type": "version",
"tag": "1.10.16",
"commit": "0fd151739d05648118002914c7a638411bbd0dbe"
},
"_source": "git://github.com/jquery/sizzle.git",
"_target": "1.10.16",
"_originalSource": "sizzle"
}

2015
bower_components/sizzle/dist/sizzle.js поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

3
bower_components/sizzle/dist/sizzle.min.js поставляемый Normal file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

1
bower_components/sizzle/dist/sizzle.min.map поставляемый Normal file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

10
bower_components/sizzle/tasks/commit.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,10 @@
"use strict";
var exec = require( "child_process" ).exec;
module.exports = function( grunt ) {
grunt.registerTask( "commit", "Add and commit changes", function( message ) {
// Always add dist directory
exec( "git add dist && git commit -m " + message, this.async() );
});
};

34
bower_components/sizzle/tasks/compile.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,34 @@
"use strict";
module.exports = function( grunt ) {
grunt.registerMultiTask(
"compile",
"Compile sizzle.js to the dist directory. Embed date/version.",
function() {
var data = this.data,
dest = data.dest,
src = data.src,
version = grunt.config( "pkg.version" ),
compiled = grunt.file.read( src );
// Embed version and date
compiled = compiled
.replace( /@VERSION/g, version )
.replace( "@DATE", function() {
var date = new Date();
// YYYY-MM-DD
return [
date.getFullYear(),
( "0" + ( date.getMonth() + 1 ) ).slice( -2 ),
( "0" + date.getDate() ).slice( -2 )
].join( "-" );
});
// Write source to file
grunt.file.write( dest, compiled );
grunt.log.ok( "File written to " + dest );
}
);
};

35
bower_components/sizzle/tasks/dist.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,35 @@
"use strict";
var fs = require( "fs" );
module.exports = function( grunt ) {
grunt.registerTask( "dist", "Process files for distribution", function() {
var files = grunt.file.expand( { filter: "isFile" }, "dist/*" );
files.forEach(function( filename ) {
var map,
text = fs.readFileSync( filename, "utf8" );
// Modify map/min so that it points to files in the same folder;
// see https://github.com/mishoo/UglifyJS2/issues/47
if ( /\.map$/.test( filename ) ) {
text = text.replace( /"dist\//g, "\"" );
fs.writeFileSync( filename, text, "utf-8" );
} else if ( /\.min\.js$/.test( filename ) ) {
// Wrap sourceMap directive in multiline comments (#13274)
text = text.replace( /\n?(\/\/@\s*sourceMappingURL=)(.*)/,
function( _, directive, path ) {
map = "\n" + directive + path.replace( /^dist\//, "" );
return "";
});
if ( map ) {
text = text.replace( /(^\/\*[\w\W]*?)\s*\*\/|$/,
function( _, comment ) {
return ( comment || "\n/*" ) + map + "\n*/";
});
}
fs.writeFileSync( filename, text, "utf-8" );
}
});
});
};

43
bower_components/sizzle/tasks/release.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,43 @@
"use strict";
var exec = require( "child_process" ).exec;
module.exports = function( grunt ) {
var rpreversion = /(\d\.\d+\.\d+)-pre/;
grunt.registerTask( "release",
"Release a version of sizzle, updates a pre version to released, " +
"inserts `next` as the new pre version", function( next ) {
if ( !rpreversion.test( next ) ) {
grunt.fatal( "Next version should be a -pre version (x.x.x-pre): " + next );
return;
}
var done,
version = grunt.config( "pkg.version" );
if ( !rpreversion.test( version ) ) {
grunt.fatal( "Existing version is not a pre version: " + version );
return;
}
version = version.replace( rpreversion, "$1" );
done = this.async();
exec( "git diff --quiet HEAD", function( err ) {
if ( err ) {
grunt.fatal( "The working directory should be clean when releasing. Commit or stash changes." );
return;
}
// Build to dist directories along with a map and tag the release
grunt.task.run([
// Commit new version
"version:" + version,
// Tag new version
"tag:" + version,
// Commit next version
"version:" + next
]);
done();
});
});
};

9
bower_components/sizzle/tasks/tag.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,9 @@
"use strict";
var exec = require( "child_process" ).exec;
module.exports = function( grunt ) {
grunt.registerTask( "tag", "Tag the specified version", function( version ) {
exec( "git tag " + version, this.async() );
});
};

35
bower_components/sizzle/tasks/version.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,35 @@
"use strict";
var exec = require( "child_process" ).exec;
module.exports = function( grunt ) {
grunt.registerTask( "version", "Commit a new version", function( version ) {
if ( !/\d\.\d+\.\d+(?:-pre)?/.test( version ) ) {
grunt.fatal( "Version must follow semver release format: " + version );
return;
}
var done = this.async(),
files = grunt.config( "version.files" ),
rversion = /("version":\s*")[^"]+/;
// Update version in specified files
files.forEach(function( filename ) {
var text = grunt.file.read( filename );
text = text.replace( rversion, "$1" + version );
grunt.file.write( filename, text );
});
// Add files to git index
exec( "git add -A", function( err ) {
if ( err ) {
grunt.fatal( err );
return;
}
// Commit next pre version
grunt.config( "pkg.version", version );
grunt.task.run([ "build", "uglify", "dist", "commit:'Update version to " + version + "'" ]);
done();
});
});
};

0
bower_components/sizzle/test/data/empty.js поставляемый Normal file
Просмотреть файл

22
bower_components/sizzle/test/data/mixed_sort.html поставляемый Normal file
Просмотреть файл

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>var QUnit = parent.QUnit</script>
<script src="testinit.js"></script>
<script src="../../dist/sizzle.js"></script>
</head>
<body>
<script>
var doc = parent.document,
unframed = [ doc.getElementById( "qunit-fixture" ), doc.body, doc.documentElement ],
framed = Sizzle( "*" );
window.parent.iframeCallback(
Sizzle.uniqueSort( unframed.concat( framed ) ),
framed.concat( unframed.reverse() ),
"Mixed array was sorted correctly"
);
</script>
</body>
</html>

136
bower_components/sizzle/test/data/testinit.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,136 @@
var fireNative,
jQuery = this.jQuery || "jQuery", // For testing .noConflict()
$ = this.$ || "$",
originaljQuery = jQuery,
original$ = $;
(function() {
// Config parameter to force basic code paths
QUnit.config.urlConfig.push({
id: "basic",
label: "Bypass optimizations",
tooltip: "Force use of the most basic code by disabling native querySelectorAll; contains; compareDocumentPosition"
});
if ( QUnit.urlParams.basic ) {
document.querySelectorAll = null;
document.documentElement.contains = null;
document.documentElement.compareDocumentPosition = null;
// Return array of length two to pass assertion
// But support should be false as its not native
document.getElementsByClassName = function() { return [ 0, 1 ]; };
}
})();
/**
* Returns an array of elements with the given IDs
* @example q("main", "foo", "bar")
* @result [<div id="main">, <span id="foo">, <input id="bar">]
*/
function q() {
var r = [],
i = 0;
for ( ; i < arguments.length; i++ ) {
r.push( document.getElementById( arguments[i] ) );
}
return r;
}
/**
* Asserts that a select matches the given IDs
* @param {String} a - Assertion name
* @param {String} b - Sizzle selector
* @param {String} c - Array of ids to construct what is expected
* @example t("Check for something", "//[a]", ["foo", "baar"]);
* @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar'
*/
function t( a, b, c ) {
var f = Sizzle(b),
s = "",
i = 0;
for ( ; i < f.length; i++ ) {
s += ( s && "," ) + '"' + f[ i ].id + '"';
}
deepEqual(f, q.apply( q, c ), a + " (" + b + ")");
}
/**
* Add random number to url to stop caching
*
* @example url("data/test.html")
* @result "data/test.html?10538358428943"
*
* @example url("data/test.php?foo=bar")
* @result "data/test.php?foo=bar&10538358345554"
*/
function url( value ) {
return value + (/\?/.test(value) ? "&" : "?") + new Date().getTime() + "" + parseInt(Math.random()*100000);
}
var createWithFriesXML = function() {
var string = '<?xml version="1.0" encoding="UTF-8"?> \
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" \
xmlns:xsd="http://www.w3.org/2001/XMLSchema" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> \
<soap:Body> \
<jsconf xmlns="http://www.example.com/ns1"> \
<response xmlns:ab="http://www.example.com/ns2"> \
<meta> \
<component id="seite1" class="component"> \
<properties xmlns:cd="http://www.example.com/ns3"> \
<property name="prop1"> \
<thing /> \
<value>1</value> \
</property> \
<property name="prop2"> \
<thing att="something" /> \
</property> \
<foo_bar>foo</foo_bar> \
</properties> \
</component> \
</meta> \
</response> \
</jsconf> \
</soap:Body> \
</soap:Envelope>';
return jQuery.parseXML( string );
};
fireNative = document.createEvent ?
function( node, type ) {
var event = document.createEvent("HTMLEvents");
event.initEvent( type, true, true );
node.dispatchEvent( event );
} :
function( node, type ) {
var event = document.createEventObject();
node.fireEvent( "on" + type, event );
};
function testIframeWithCallback( title, fileName, func ) {
test( title, function() {
var iframe;
stop();
window.iframeCallback = function() {
var self = this,
args = arguments;
setTimeout(function() {
window.iframeCallback = undefined;
iframe.remove();
func.apply( self, args );
func = function() {};
start();
}, 0 );
};
iframe = jQuery( "<div/>" ).css({ position: "absolute", width: "500px", left: "-600px" })
.append( jQuery( "<iframe/>" ).attr( "src", url( "./data/" + fileName ) ) )
.appendTo( "#qunit-fixture" );
});
};
window.iframeCallback = undefined;
function moduleTeardown() {}

242
bower_components/sizzle/test/index.html поставляемый Normal file
Просмотреть файл

@ -0,0 +1,242 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" id="html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sizzle Test Suite</title>
<link rel="Stylesheet" media="screen" href="libs/qunit/qunit.css" />
<script type="text/javascript" src="libs/qunit/qunit.js"></script>
<script type="text/javascript" src="data/testinit.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="../dist/sizzle.js"></script>
<script type="text/javascript" src="unit/selector.js"></script>
<script type="text/javascript" src="unit/utilities.js"></script>
<script type="text/javascript" src="unit/extending.js"></script>
</head>
<body id="body">
<div id="qunit"></div>
<!-- Test HTML -->
<dl id="dl" style="position:absolute;top:-32767px;left:-32767px;width:1px">
<div id="qunit-fixture">
<p id="firstp">See <a id="simon1" href="http://simon.incutio.com/archive/2003/03/25/#getElementsBySelector" rel="bookmark">this blog entry</a> for more information.</p>
<p id="ap">
Here are some [links] in a normal paragraph: <a id="google" href="http://www.google.com/" title="Google!">Google</a>,
<a id="groups" href="http://groups.google.com/" class="GROUPS">Google Groups (Link)</a>.
This link has <code id="code1"><a href="http://smin" id="anchor1">class="blog"</a></code>:
<a href="http://diveintomark.org/" class="blog" hreflang="en" id="mark">diveintomark</a>
</p>
<div id="foo">
<p id="sndp">Everything inside the red border is inside a div with <code>id="foo"</code>.</p>
<p lang="en" id="en">This is a normal link: <a id="yahoo" href="http://www.yahoo.com/" class="blogTest">Yahoo</a></p>
<p id="sap">This link has <code><a href="#2" id="anchor2">class="blog"</a></code>: <a href="http://simon.incutio.com/" class="blog link" id="simon">Simon Willison's Weblog</a></p>
</div>
<div id="nothiddendiv" style="height:1px;background:white;" class="nothiddendiv">
<div id="nothiddendivchild"></div>
</div>
<span id="name+value"></span>
<p id="first">Try them out:</p>
<ul id="firstUL"></ul>
<ol id="empty"><!-- comment --></ol>
<form id="form" action="formaction">
<label for="action" id="label-for">Action:</label>
<input type="text" name="action" value="Test" id="text1" maxlength="30"/>
<input type="text" name="text2" value="Test" id="text2" disabled="disabled"/>
<input type="radio" name="radio1" id="radio1" value="on"/>
<input type="radio" name="radio2" id="radio2" checked="checked"/>
<input type="checkbox" name="check" id="check1" checked="checked"/>
<input type="checkbox" id="check2" value="on"/>
<input type="hidden" name="hidden" id="hidden1"/>
<input type="text" style="display:none;" name="foo[bar]" id="hidden2"/>
<input type="text" id="name" name="name" value="name" />
<input type="search" id="search" name="search" value="search" />
<button id="button" name="button" type="button">Button</button>
<textarea id="area1" maxlength="30">foobar</textarea>
<select name="select1" id="select1">
<option id="option1a" class="emptyopt" value="">Nothing</option>
<option id="option1b" value="1">1</option>
<option id="option1c" value="2">2</option>
<option id="option1d" value="3">3</option>
</select>
<select name="select2" id="select2">
<option id="option2a" class="emptyopt" value="">Nothing</option>
<option id="option2b" value="1">1</option>
<option id="option2c" value="2">2</option>
<option id="option2d" selected="selected" value="3">3</option>
</select>
<select name="select3" id="select3" multiple="multiple">
<option id="option3a" class="emptyopt" value="">Nothing</option>
<option id="option3b" selected="selected" value="1">1</option>
<option id="option3c" selected="selected" value="2">2</option>
<option id="option3d" value="3">3</option>
<option id="option3e">no value</option>
</select>
<select name="select4" id="select4" multiple="multiple">
<optgroup disabled="disabled">
<option id="option4a" class="emptyopt" value="">Nothing</option>
<option id="option4b" disabled="disabled" selected="selected" value="1">1</option>
<option id="option4c" selected="selected" value="2">2</option>
</optgroup>
<option selected="selected" disabled="disabled" id="option4d" value="3">3</option>
<option id="option4e">no value</option>
</select>
<select name="select5" id="select5">
<option id="option5a" value="3">1</option>
<option id="option5b" value="2">2</option>
<option id="option5c" value="1">3</option>
</select>
<object id="object1" codebase="stupid">
<param name="p1" value="x1" />
<param name="p2" value="x2" />
</object>
<span id="台北Táiběi"></span>
<span id="台北" lang="中文"></span>
<span id="utf8class1" class="台北Táiběi 台北"></span>
<span id="utf8class2" class="台北"></span>
<span id="foo:bar" class="foo:bar"><span id="foo_descendent"></span></span>
<span id="test.foo[5]bar" class="test.foo[5]bar"></span>
<foo_bar id="foobar">test element</foo_bar>
</form>
<b id="floatTest">Float test.</b>
<iframe id="iframe" name="iframe"></iframe>
<form id="lengthtest">
<input type="text" id="length" name="test"/>
<input type="text" id="idTest" name="id"/>
</form>
<table id="table"></table>
<form id="name-tests">
<!-- Inputs with a grouped name attribute. -->
<input name="types[]" id="types_all" type="checkbox" value="all" />
<input name="types[]" id="types_anime" type="checkbox" value="anime" />
<input name="types[]" id="types_movie" type="checkbox" value="movie" />
</form>
<form id="testForm" action="#" method="get">
<textarea name="T3" rows="2" cols="15">?
Z</textarea>
<input type="hidden" name="H1" value="x" />
<input type="hidden" name="H2" />
<input name="PWD" type="password" value="" />
<input name="T1" type="text" />
<input name="T2" type="text" value="YES" readonly="readonly" />
<input type="checkbox" name="C1" value="1" />
<input type="checkbox" name="C2" />
<input type="radio" name="R1" value="1" />
<input type="radio" name="R1" value="2" />
<input type="text" name="My Name" value="me" />
<input type="reset" name="reset" value="NO" />
<select name="S1">
<option value="abc">ABC</option>
<option value="abc">ABC</option>
<option value="abc">ABC</option>
</select>
<select name="S2" multiple="multiple" size="3">
<option value="abc">ABC</option>
<option value="abc">ABC</option>
<option value="abc">ABC</option>
</select>
<select name="S3">
<option selected="selected">YES</option>
</select>
<select name="S4">
<option value="" selected="selected">NO</option>
</select>
<input type="submit" name="sub1" value="NO" />
<input type="submit" name="sub2" value="NO" />
<input type="image" name="sub3" value="NO" />
<button name="sub4" type="submit" value="NO">NO</button>
<input name="D1" type="text" value="NO" disabled="disabled" />
<input type="checkbox" checked="checked" disabled="disabled" name="D2" value="NO" />
<input type="radio" name="D3" value="NO" checked="checked" disabled="disabled" />
<select name="D4" disabled="disabled">
<option selected="selected" value="NO">NO</option>
</select>
<input id="list-test" type="text" />
<datalist id="datalist">
<option value="option"></option>
</datalist>
</form>
<div id="moretests">
<form>
<div id="checkedtest" style="display:none;">
<input type="radio" name="checkedtestradios" checked="checked"/>
<input type="radio" name="checkedtestradios" value="on"/>
<input type="checkbox" name="checkedtestcheckboxes" checked="checked"/>
<input type="checkbox" name="checkedtestcheckboxes" />
</div>
</form>
<div id="nonnodes"><span>hi</span> there <!-- mon ami --></div>
<div id="t2037">
<div><div class="hidden">hidden</div></div>
</div>
<div id="t6652">
<div></div>
</div>
<div id="t12087">
<input type="hidden" id="el12087" data-comma="0,1"/>
</div>
<div id="no-clone-exception"><object><embed></embed></object></div>
<div id="names-group">
<span id="name-is-example" name="example"></span>
<span id="name-is-div" name="div"></span>
</div>
<script id="script-no-src"></script>
<script id="script-src" src="data/empty.js"></script>
<div id="id-name-tests">
<a id="tName1ID" name="tName1"><span></span></a>
<a id="tName2ID" name="tName2"><span></span></a>
<div id="tName1"><span id="tName1-span">C</span></div>
</div>
</div>
<div id="tabindex-tests">
<ol id="listWithTabIndex" tabindex="5">
<li id="foodWithNegativeTabIndex" tabindex="-1">Rice</li>
<li id="foodNoTabIndex">Beans</li>
<li>Blinis</li>
<li>Tofu</li>
</ol>
<div id="divWithNoTabIndex">I'm hungry. I should...</div>
<span>...</span><a href="#" id="linkWithNoTabIndex">Eat lots of food</a><span>...</span> |
<span>...</span><a href="#" id="linkWithTabIndex" tabindex="2">Eat a little food</a><span>...</span> |
<span>...</span><a href="#" id="linkWithNegativeTabIndex" tabindex="-1">Eat no food</a><span>...</span>
<span>...</span><a id="linkWithNoHrefWithNoTabIndex">Eat a burger</a><span>...</span>
<span>...</span><a id="linkWithNoHrefWithTabIndex" tabindex="1">Eat some funyuns</a><span>...</span>
<span>...</span><a id="linkWithNoHrefWithNegativeTabIndex" tabindex="-1">Eat some funyuns</a><span>...</span>
</div>
<div id="liveHandlerOrder">
<span id="liveSpan1"><a href="#" id="liveLink1"></a></span>
<span id="liveSpan2"><a href="#" id="liveLink2"></a></span>
</div>
<div id="siblingTest">
<em id="siblingfirst">1</em>
<em id="siblingnext">2</em>
<em id="siblingthird">
<em id="siblingchild">
<em id="siblinggrandchild">
<em id="siblinggreatgrandchild"></em>
</em>
</em>
</em>
<span id="siblingspan"></span>
</div>
</div>
</dl>
<br id="last"/>
</body>
</html>

9597
bower_components/sizzle/test/jquery.js поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

244
bower_components/sizzle/test/libs/qunit/qunit.css поставляемый Normal file
Просмотреть файл

@ -0,0 +1,244 @@
/**
* QUnit v1.12.0 - A JavaScript Unit Testing Framework
*
* http://qunitjs.com
*
* Copyright 2012 jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-top-right-radius: 5px;
-webkit-border-top-left-radius: 5px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-testrunner-toolbar label {
display: inline-block;
padding: 0 .5em 0 .1em;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
overflow: hidden;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
#qunit-modulefilter-container {
float: right;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests li .runtime {
float: right;
font-size: smaller;
}
.qunit-assert-list {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
.qunit-collapsed {
display: none;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
padding: 5px;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #3c510c;
background-color: #fff;
border-left: 10px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 10px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
#qunit-testresult .module-name {
font-weight: bold;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
width: 1000px;
height: 1000px;
}

2212
bower_components/sizzle/test/libs/qunit/qunit.js поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

95
bower_components/sizzle/test/unit/extending.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,95 @@
module("extending", { teardown: moduleTeardown });
test("custom pseudos", function() {
expect( 6 );
Sizzle.selectors.filters.foundation = Sizzle.selectors.filters.root;
deepEqual( Sizzle(":foundation"), [ document.documentElement ], "Copy element filter with new name" );
delete Sizzle.selectors.filters.foundation;
Sizzle.selectors.setFilters.primary = Sizzle.selectors.setFilters.first;
t( "Copy set filter with new name", "div:primary", ["qunit"] );
delete Sizzle.selectors.setFilters.primary;
Sizzle.selectors.filters.aristotlean = Sizzle.selectors.createPseudo(function() {
return function( elem ) {
return !!elem.id;
};
});
t( "Custom element filter", "#foo :aristotlean", [ "sndp", "en", "yahoo", "sap", "anchor2", "simon" ] );
delete Sizzle.selectors.filters.aristotlean;
Sizzle.selectors.filters.endswith = Sizzle.selectors.createPseudo(function( text ) {
return function( elem ) {
return Sizzle.getText( elem ).slice( -text.length ) === text;
};
});
t( "Custom element filter with argument", "a:endswith(ogle)", ["google"] );
delete Sizzle.selectors.filters.endswith;
Sizzle.selectors.setFilters.second = Sizzle.selectors.createPseudo(function() {
return Sizzle.selectors.createPseudo(function( seed, matches ) {
if ( seed[1] ) {
matches[1] = seed[1];
seed[1] = false;
}
});
});
t( "Custom set filter", "#qunit-fixture p:second", ["ap"] );
delete Sizzle.selectors.filters.second;
Sizzle.selectors.setFilters.slice = Sizzle.selectors.createPseudo(function( argument ) {
var bounds = argument.split(":");
return Sizzle.selectors.createPseudo(function( seed, matches ) {
var i = bounds[1];
// Match elements found at the specified indexes
while ( --i >= bounds[0] ) {
if ( seed[i] ) {
matches[i] = seed[i];
seed[i] = false;
}
}
});
});
t( "Custom set filter with argument", "#qunit-fixture p:slice(1:3)", [ "ap", "sndp" ] );
delete Sizzle.selectors.filters.slice;
});
test("backwards-compatible custom pseudos", function() {
expect( 3 );
Sizzle.selectors.filters.icontains = function( elem, i, match ) {
return Sizzle.getText( elem ).toLowerCase().indexOf( (match[3] || "").toLowerCase() ) > -1;
};
t( "Custom element filter with argument", "a:icontains(THIS BLOG ENTRY)", ["simon1"] );
delete Sizzle.selectors.filters.icontains;
Sizzle.selectors.setFilters.podium = function( elements, argument ) {
var count = argument == null || argument === "" ? 3 : +argument;
return elements.slice( 0, count );
};
// Using TAG as the first token here forces this setMatcher into a fail state
// Where the descendent combinator was lost
t( "Custom setFilter", "form#form :PODIUM", ["label-for", "text1", "text2"] );
t( "Custom setFilter with argument", "#form input:Podium(1)", ["text1"] );
delete Sizzle.selectors.setFilters.podium;
});
test("custom attribute getters", function() {
expect( 2 );
var original = Sizzle.selectors.attrHandle.hreflang,
selector = "a:contains('mark')[hreflang='http://diveintomark.org/en']";
Sizzle.selectors.attrHandle.hreflang = function( elem, name ) {
var href = elem.getAttribute("href"),
lang = elem.getAttribute( name );
return lang && ( href + lang );
};
deepEqual( Sizzle(selector, createWithFriesXML()), [], "Custom attrHandle (preferred document)" );
t( "Custom attrHandle (preferred document)", selector, ["mark"] );
Sizzle.selectors.attrHandle.hreflang = original;
});

1138
bower_components/sizzle/test/unit/selector.js поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

169
bower_components/sizzle/test/unit/utilities.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,169 @@
module("utilities", { teardown: moduleTeardown });
function testAttr( doc ) {
expect( 9 );
var el;
if ( doc ) {
// XML
el = doc.createElement( "input" );
el.setAttribute( "type", "checkbox" );
} else {
// Set checked on creation by creating with a fragment
// See http://jsfiddle.net/8sVgA/1/show/light in oldIE
el = jQuery( "<input type='checkbox' checked='checked' />" )[0];
}
// Set it again for good measure
el.setAttribute( "checked", "checked" );
el.setAttribute( "id", "id" );
el.setAttribute( "value", "on" );
strictEqual( Sizzle.attr( el, "nonexistent" ), null, "nonexistent" );
strictEqual( Sizzle.attr( el, "id" ), "id", "existent" );
strictEqual( Sizzle.attr( el, "value" ), "on", "value" );
strictEqual( Sizzle.attr( el, "checked" ), "checked", "boolean" );
strictEqual( Sizzle.attr( el, "href" ), null, "interpolation risk" );
strictEqual( Sizzle.attr( el, "constructor" ), null,
"Object.prototype property \"constructor\" (negative)" );
strictEqual( Sizzle.attr( el, "watch" ), null,
"Gecko Object.prototype property \"watch\" (negative)" );
el.setAttribute( "constructor", "foo" );
el.setAttribute( "watch", "bar" );
strictEqual( Sizzle.attr( el, "constructor" ), "foo",
"Object.prototype property \"constructor\"" );
strictEqual( Sizzle.attr( el, "watch" ), "bar",
"Gecko Object.prototype property \"watch\"" );
}
test("Sizzle.attr (HTML)", function() {
testAttr();
});
test("Sizzle.attr (XML)", function() {
testAttr( jQuery.parseXML("<root/>") );
});
test("Sizzle.contains", function() {
expect( 16 );
var container = document.getElementById("nonnodes"),
element = container.firstChild,
text = element.nextSibling,
nonContained = container.nextSibling,
detached = document.createElement("a");
ok( element && element.nodeType === 1, "preliminary: found element" );
ok( text && text.nodeType === 3, "preliminary: found text" );
ok( nonContained, "preliminary: found non-descendant" );
ok( Sizzle.contains(container, element), "child" );
ok( Sizzle.contains(container.parentNode, element), "grandchild" );
ok( Sizzle.contains(container, text), "text child" );
ok( Sizzle.contains(container.parentNode, text), "text grandchild" );
ok( !Sizzle.contains(container, container), "self" );
ok( !Sizzle.contains(element, container), "parent" );
ok( !Sizzle.contains(container, nonContained), "non-descendant" );
ok( !Sizzle.contains(container, document), "document" );
ok( !Sizzle.contains(container, document.documentElement), "documentElement (negative)" );
ok( !Sizzle.contains(container, null), "Passing null does not throw an error" );
ok( Sizzle.contains(document, document.documentElement), "documentElement (positive)" );
ok( Sizzle.contains(document, element), "document container (positive)" );
ok( !Sizzle.contains(document, detached), "document container (negative)" );
});
if ( jQuery("<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='1' width='1'><g/></svg>")[0].firstChild ) {
test("Sizzle.contains in SVG (jQuery #10832)", function() {
expect( 4 );
var svg = jQuery(
"<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='1' width='1'>" +
"<g><circle cx='1' cy='1' r='1' /></g>" +
"</svg>"
).appendTo("#qunit-fixture")[0];
ok( Sizzle.contains( svg, svg.firstChild ), "root child" );
ok( Sizzle.contains( svg.firstChild, svg.firstChild.firstChild ), "element child" );
ok( Sizzle.contains( svg, svg.firstChild.firstChild ), "root granchild" );
ok( !Sizzle.contains( svg.firstChild.firstChild, svg.firstChild ), "parent (negative)" );
});
}
test("Sizzle.uniqueSort", function() {
expect( 14 );
function Arrayish( arr ) {
var i = this.length = arr.length;
while ( i-- ) {
this[ i ] = arr[ i ];
}
}
Arrayish.prototype = {
slice: [].slice,
sort: [].sort,
splice: [].splice
};
var i, tests,
detached = [],
body = document.body,
fixture = document.getElementById("qunit-fixture"),
detached1 = document.createElement("p"),
detached2 = document.createElement("ul"),
detachedChild = detached1.appendChild( document.createElement("a") ),
detachedGrandchild = detachedChild.appendChild( document.createElement("b") );
for ( i = 0; i < 12; i++ ) {
detached.push( document.createElement("li") );
detached[i].id = "detached" + i;
detached2.appendChild( document.createElement("li") ).id = "detachedChild" + i;
}
tests = {
"Empty": {
input: [],
expected: []
},
"Single-element": {
input: [ fixture ],
expected: [ fixture ]
},
"No duplicates": {
input: [ fixture, body ],
expected: [ body, fixture ]
},
"Duplicates": {
input: [ body, fixture, fixture, body ],
expected: [ body, fixture ]
},
"Detached": {
input: detached.slice( 0 ),
expected: detached.slice( 0 )
},
"Detached children": {
input: [
detached2.childNodes[0],
detached2.childNodes[1],
detached2.childNodes[2],
detached2.childNodes[3]
],
expected: [
detached2.childNodes[0],
detached2.childNodes[1],
detached2.childNodes[2],
detached2.childNodes[3]
]
},
"Attached/detached mixture": {
input: [ detached1, fixture, detached2, document, detachedChild, body, detachedGrandchild ],
expected: [ document, body, fixture ],
length: 3
}
};
jQuery.each( tests, function( label, test ) {
var length = test.length || test.input.length;
deepEqual( Sizzle.uniqueSort( test.input ).slice( 0, length ), test.expected, label + " (array)" );
deepEqual( Sizzle.uniqueSort( new Arrayish(test.input) ).slice( 0, length ), test.expected, label + " (quasi-array)" );
});
});
testIframeWithCallback( "Sizzle.uniqueSort works cross-window (jQuery #14381)", "mixed_sort.html", deepEqual );

Просмотреть файл

@ -6,6 +6,11 @@
color: #428BCA;
}
body {
padding-top: 70px;
padding-bottom: 20px;
}

Просмотреть файл

@ -1,3 +1,96 @@
var login = document.querySelector("#login");
if (login) {
login.addEventListener("click", function () {
navigator.id.request({
siteName: "Ad hoc contribution logger"
});
}, false);
}
var logout = document.querySelector("#logout");
if (logout) {
logout.addEventListener("click", function () {
navigator.id.logout();
}, false);
}
var token = $("meta[name='csrf-token']").attr("content");
var currentUser = $("meta[name='persona-email']").attr("content");
if (!currentUser) {
currentUser = null; // specifically set to null to avoid persona looping on logout
}
navigator.id.watch({
loggedInUser: currentUser,
onlogin: function (assertion) {
$.ajax({
type: 'POST',
url: '/persona/verify',
data: {
assertion: assertion,
_csrf: token
},
success: function (res, status, xhr) {
window.location.reload();
},
error: function (xhr, status, err) {
navigator.id.logout();
window.alert("Login failure: " + err);
}
});
},
onlogout: function () {
$.ajax({
type: 'POST',
url: '/persona/logout',
data: {
_csrf: token
},
success: function (res, status, xhr) {
window.location.reload();
},
error: function (xhr, status, err) {
window.alert("Logout failure: " + err);
}
});
}
});
// pre-fill quick link
var type = $("#hiddenType").val();
var team = $("#hiddenTeam").val();
if (type) {
var textToFindType = type;
textToFindType = decodeURI(textToFindType);
var elType = document.getElementById('databucket');
for (var i = 0; i < elType.options.length; i++) {
if (elType.options[i].text === textToFindType) {
elType.selectedIndex = i;
break;
}
}
}
if (team) {
var textToFindTeam = team;
textToFindTeam = decodeURI(textToFindTeam);
var elTeam = document.getElementById('teamname');
for (var i = 0; i < elTeam.options.length; i++) {
if (elTeam.options[i].text === textToFindTeam) {
elTeam.selectedIndex = i;
break;
}
}
}
$(".deleteLink").click(function (event) {
if (!confirm("Are you sure?")) {
event.preventDefault();
}
});
// Validation
$.validator.addMethod("valueNotEquals", function (value, element, arg) {
return arg !== value;

Просмотреть файл

@ -6,14 +6,9 @@
<title>Ad hoc Contribution Logger</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{{token}}}">
<meta name="persona-email" content="{{{currentUser}}}">
<link rel="stylesheet" href="css/bootstrap.min.css">
<style>
body {
padding-top: 70px;
padding-bottom: 20px;
}
</style>
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="/bower/bootstrap-datepicker/css/datepicker.css">
<link rel="stylesheet" href="css/main.css">
@ -84,61 +79,12 @@
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="/js/vendor/jquery-1.11.0.min.js"><\/script>')</script>
<script src="/bower/jquery/dist/jquery.js"></script>
<script src="/bower/jquery.validation/dist/jquery.validate.min.js"></script>
<!-- <script src="/js/vendor/bootstrap.min.js"></script> -->
<script src="/bower/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="/bower/bootstrap-datepicker/js/bootstrap-datepicker.js"></script>
<script src="/bower/jquery-cookie/jquery.cookie.js"></script>
<script src="https://login.persona.org/include.js"></script>
<script type="text/javascript">
var login = document.querySelector("#login");
if (login) {
login.addEventListener("click", function() {
navigator.id.request({ siteName: "Ad hoc contribution logger" });
}, false);
}
var logout = document.querySelector("#logout");
if (logout) {
logout.addEventListener("click", function() {
navigator.id.logout();
}, false);
}
var currentUser = null;
{{#if currentUser}}
var currentUser = "{{{currentUser}}}";
{{/if}}
navigator.id.watch({
loggedInUser: currentUser,
onlogin: function(assertion) {
$.ajax({
type: 'POST',
url: '/persona/verify',
data: { assertion: assertion, _csrf: '{{{token}}}' },
success: function(res, status, xhr) {
window.location.reload();
},
error: function(xhr, status, err) {
navigator.id.logout();
alert("Login failure: " + err);
}
});
},
onlogout: function() {
$.ajax({
type: 'POST',
url: '/persona/logout',
data: { _csrf: '{{{token}}}' },
success: function(res, status, xhr) { window.location.reload(); },
error: function(xhr, status, err) { alert("Logout failure: " + err); }
});
}
});</script>
<script src="js/main.js"></script>
<script src="js/main.js"></script>
</body>
</html>

Просмотреть файл

@ -64,7 +64,7 @@
<td>{{this}}</td>
{{/each}}
<td><a href="/delete?contributor_id={{contributor_id}}&contribution_date={{contribution_date}}&mofo_team={{mofo_team}}&data_bucket={{data_bucket}}" onclick="return confirm('Are you sure?')" class="btn btn-xm"><span class="glyphicon glyphicon-trash"></span></a></td>
<td><a href="/delete?contributor_id={{contributor_id}}&contribution_date={{contribution_date}}&mofo_team={{mofo_team}}&data_bucket={{data_bucket}}" class="btn btn-xm deleteLink"><span class="glyphicon glyphicon-trash"></span></a></td>
</tr>
{{/each}}
</table>
@ -80,7 +80,7 @@
<h4 class="modal-title" id="myModalLinkLabel">Quick link</h4>
</div>
<div class="modal-body">
<p>Use this URL as a shortcut to pre-populate this page.</p>
<p>Use this URL as a shortcut to pre-populate this form with your What and When fields.</p>
<p><input type="text" class="form-control" id="linkToCopy"></p>
<p class="small">Save this as a bookmark, or copy and paste into your browser bar.</p>
</div>
@ -91,31 +91,5 @@
</div>
</div>
<script type="text/javascript">
{{#if type}}
var textToFindType = '{{{type}}}';
textToFindType = decodeURI(textToFindType);
var elType = document.getElementById('databucket');
for (var i = 0; i < elType.options.length; i++) {
if (elType.options[i].text === textToFindType) {
elType.selectedIndex = i;
break;
}
}
{{/if}}
{{#if team}}
var textToFindTeam = '{{{team}}}';
textToFindTeam = decodeURI(textToFindTeam);
var elTeam = document.getElementById('teamname');
for (var i = 0; i < elTeam.options.length; i++) {
if (elTeam.options[i].text === textToFindTeam) {
elTeam.selectedIndex = i;
break;
}
}
{{/if}}
</script>
<input type="hidden" id="hiddenType" value="{{{type}}}">
<input type="hidden" id="hiddenTeam" value="{{{team}}}">

8
web.js
Просмотреть файл

@ -10,6 +10,11 @@ var fs = require('fs');
var app = express();
var cspPolicy = {
'default-src': ["'self'", 'https://login.persona.org'],
'script-src': ["'self'", 'https://login.persona.org'],
};
// set up handlebars view engine
var handlebars = require('express3-handlebars').create({
defaultLayout: 'main'
@ -24,9 +29,9 @@ app.use(express.urlencoded());
app.use(express.cookieParser(process.env.COOKIE_SECRET));
app.use(express.session({
secret: process.env.COOKIE_SECRET,
proxy: true,
cookie: {
httpOnly: true,
proxy: true,
secure: true,
},
}));
@ -38,6 +43,7 @@ app.use(function (req, res, next) {
});
app.use(helmet.hsts()); // HTTP Strict Transport Security
app.use(helmet.xframe('deny')); // X-Frame-Options
app.use(helmet.csp(cspPolicy));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.use('/bower', express.static(__dirname + '/bower_components'));