mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-13 12:27:49 +00:00
Update vendors.
Former-commit-id: e88301bddf23f177a2d14f2c729877eaede022e5
This commit is contained in:
6
vendor/backbone/test/view.js
vendored
6
vendor/backbone/test/view.js
vendored
@@ -286,11 +286,11 @@ $(document).ready(function() {
|
|||||||
test("dispose", 0, function() {
|
test("dispose", 0, function() {
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
events: {
|
events: {
|
||||||
click: function() { fail(); }
|
click: function() { ok(false); }
|
||||||
},
|
},
|
||||||
initialize: function() {
|
initialize: function() {
|
||||||
this.model.on('all x', function(){ fail(); }, this);
|
this.model.on('all x', function(){ ok(false); }, this);
|
||||||
this.collection.on('all x', function(){ fail(); }, this);
|
this.collection.on('all x', function(){ ok(false); }, this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
30
vendor/docdown/src/DocDown/Generator.php
vendored
30
vendor/docdown/src/DocDown/Generator.php
vendored
@@ -83,6 +83,9 @@ class Generator {
|
|||||||
if (!isset($options['lang'])) {
|
if (!isset($options['lang'])) {
|
||||||
$options['lang'] = 'js';
|
$options['lang'] = 'js';
|
||||||
}
|
}
|
||||||
|
if (!isset($options['toc'])) {
|
||||||
|
$options['toc'] = 'properties';
|
||||||
|
}
|
||||||
|
|
||||||
$this->options = $options;
|
$this->options = $options;
|
||||||
$this->source = str_replace(PHP_EOL, "\n", $options['source']);
|
$this->source = str_replace(PHP_EOL, "\n", $options['source']);
|
||||||
@@ -279,7 +282,7 @@ class Generator {
|
|||||||
*/
|
*/
|
||||||
public function generate() {
|
public function generate() {
|
||||||
$api = array();
|
$api = array();
|
||||||
$byCategory = @$this->options['toc'] == 'categories';
|
$byCategory = $this->options['toc'] == 'categories';
|
||||||
$categories = array();
|
$categories = array();
|
||||||
$closeTag = $this->closeTag;
|
$closeTag = $this->closeTag;
|
||||||
$compiling = false;
|
$compiling = false;
|
||||||
@@ -339,7 +342,7 @@ class Generator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add properties to each entry
|
// add properties to each entry
|
||||||
foreach ($api as $key => $entry) {
|
foreach ($api as $entry) {
|
||||||
$entry->hash = $this->getHash($entry);
|
$entry->hash = $this->getHash($entry);
|
||||||
$entry->href = $this->getLineUrl($entry);
|
$entry->href = $this->getLineUrl($entry);
|
||||||
|
|
||||||
@@ -408,7 +411,7 @@ class Generator {
|
|||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// add categories
|
// add categories
|
||||||
foreach ($api as $key => $entry) {
|
foreach ($api as $entry) {
|
||||||
$categories[$entry->getCategory()][] = $entry;
|
$categories[$entry->getCategory()][] = $entry;
|
||||||
foreach (array('static', 'plugin') as $kind) {
|
foreach (array('static', 'plugin') as $kind) {
|
||||||
foreach ($entry->{$kind} as $subentry) {
|
foreach ($entry->{$kind} as $subentry) {
|
||||||
@@ -435,7 +438,7 @@ class Generator {
|
|||||||
|
|
||||||
// compile TOC by categories
|
// compile TOC by categories
|
||||||
if ($byCategory) {
|
if ($byCategory) {
|
||||||
foreach ($categories as $key => $entries) {
|
foreach ($categories as $category => $entries) {
|
||||||
if ($compiling) {
|
if ($compiling) {
|
||||||
$result[] = $closeTag;
|
$result[] = $closeTag;
|
||||||
} else {
|
} else {
|
||||||
@@ -443,12 +446,12 @@ class Generator {
|
|||||||
}
|
}
|
||||||
// assign TOC hash
|
// assign TOC hash
|
||||||
if (count($result) == 2) {
|
if (count($result) == 2) {
|
||||||
$toc = $key;
|
$toc = $category;
|
||||||
}
|
}
|
||||||
// add category
|
// add category
|
||||||
array_push(
|
array_push(
|
||||||
$result,
|
$result,
|
||||||
$openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $key . '`'
|
$openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $category . '`'
|
||||||
);
|
);
|
||||||
// add entries
|
// add entries
|
||||||
foreach ($entries as $entry) {
|
foreach ($entries as $entry) {
|
||||||
@@ -458,8 +461,8 @@ class Generator {
|
|||||||
}
|
}
|
||||||
// compile TOC by namespace
|
// compile TOC by namespace
|
||||||
else {
|
else {
|
||||||
foreach ($api as $key => $entry) {
|
foreach ($api as $entry) {
|
||||||
if ($compiling) {
|
if ($compiling) {
|
||||||
$result[] = $closeTag;
|
$result[] = $closeTag;
|
||||||
} else {
|
} else {
|
||||||
$compiling = true;
|
$compiling = true;
|
||||||
@@ -488,7 +491,8 @@ class Generator {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
foreach ($entry->{$kind} as $subentry) {
|
foreach ($entry->{$kind} as $subentry) {
|
||||||
$result[] = Generator::interpolate('* [`' . $member . '#{separator}#{name}`](##{hash})', $subentry);
|
$subentry->member = $member;
|
||||||
|
$result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $subentry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -503,16 +507,16 @@ class Generator {
|
|||||||
$result[] = $openTag;
|
$result[] = $openTag;
|
||||||
|
|
||||||
if ($byCategory) {
|
if ($byCategory) {
|
||||||
foreach ($categories as $key => $entries) {
|
foreach ($categories as $category => $entries) {
|
||||||
if ($compiling) {
|
if ($compiling) {
|
||||||
$result[] = $closeTag;
|
$result[] = $closeTag;
|
||||||
} else {
|
} else {
|
||||||
$compiling = true;
|
$compiling = true;
|
||||||
}
|
}
|
||||||
if ($key != 'Methods' && $key != 'Properties') {
|
if ($category != 'Methods' && $category != 'Properties') {
|
||||||
$key = '“' . $key . '” Methods';
|
$category = '“' . $category . '” Methods';
|
||||||
}
|
}
|
||||||
array_push($result, $openTag, '## `' . $key . '`');
|
array_push($result, $openTag, '## `' . $category . '`');
|
||||||
$this->addEntries($result, $entries);
|
$this->addEntries($result, $entries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
vendor/qunit/README.md
vendored
14
vendor/qunit/README.md
vendored
@@ -1,4 +1,4 @@
|
|||||||
[QUnit](http://qunitjs.com) - A JavaScript Unit Testing framework.
|
[QUnit](http://docs.jquery.com/QUnit) - A JavaScript Unit Testing framework.
|
||||||
================================
|
================================
|
||||||
|
|
||||||
QUnit is a powerful, easy-to-use, JavaScript test suite. It's used by the jQuery
|
QUnit is a powerful, easy-to-use, JavaScript test suite. It's used by the jQuery
|
||||||
@@ -35,8 +35,7 @@ the change, run `grunt` to lint and test it, then commit, push and create a pull
|
|||||||
Include some background for the change in the commit message and `Fixes #nnn`, referring
|
Include some background for the change in the commit message and `Fixes #nnn`, referring
|
||||||
to the issue number you're addressing.
|
to the issue number you're addressing.
|
||||||
|
|
||||||
To run `grunt`, you need `node` and `npm`, then `npm install grunt -g`. That gives you a global
|
To run `grunt`, you need `node` and `npm`, then `npm install grunt -g`.
|
||||||
grunt binary. For additional grunt tasks, also run `npm install`.
|
|
||||||
|
|
||||||
Releases
|
Releases
|
||||||
--------
|
--------
|
||||||
@@ -48,12 +47,3 @@ tag, update them again to the next version, commit and push commits and tags
|
|||||||
|
|
||||||
Put the 'v' in front of the tag, e.g. `v1.8.0`. Clean up the changelog, removing merge commits
|
Put the 'v' in front of the tag, e.g. `v1.8.0`. Clean up the changelog, removing merge commits
|
||||||
or whitespace cleanups.
|
or whitespace cleanups.
|
||||||
|
|
||||||
To upload to code.jquery.com (replace $version accordingly):
|
|
||||||
|
|
||||||
scp -q qunit/qunit.js jqadmin@code.origin.jquery.com:/var/www/html/code.jquery.com/qunit/qunit-$version.js
|
|
||||||
scp -q qunit/qunit.css jqadmin@code.origin.jquery.com:/var/www/html/code.jquery.com/qunit/qunit-$version.css
|
|
||||||
|
|
||||||
Then update /var/www/html/code.jquery.com/index.html and purge it with:
|
|
||||||
|
|
||||||
curl -s http://code.origin.jquery.com/?reload
|
|
||||||
16
vendor/qunit/qunit/qunit.css
vendored
16
vendor/qunit/qunit/qunit.css
vendored
@@ -1,11 +1,11 @@
|
|||||||
/**
|
/**
|
||||||
* QUnit v1.10.0 - A JavaScript Unit Testing Framework
|
* QUnit v1.9.0 - A JavaScript Unit Testing Framework
|
||||||
*
|
*
|
||||||
* http://qunitjs.com
|
* http://docs.jquery.com/QUnit
|
||||||
*
|
*
|
||||||
* Copyright 2012 jQuery Foundation and other contributors
|
* Copyright (c) 2012 John Resig, Jörn Zaefferer
|
||||||
* Released under the MIT license.
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||||
* http://jquery.org/license
|
* or GPL (GPL-LICENSE.txt) licenses.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Font Family and Sizes */
|
/** Font Family and Sizes */
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/** Resets */
|
/** Resets */
|
||||||
|
|
||||||
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
|
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
@@ -67,7 +67,6 @@
|
|||||||
padding: 0.5em 0 0.5em 2em;
|
padding: 0.5em 0 0.5em 2em;
|
||||||
color: #5E740B;
|
color: #5E740B;
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#qunit-userAgent {
|
#qunit-userAgent {
|
||||||
@@ -77,9 +76,6 @@
|
|||||||
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#qunit-modulefilter-container {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Tests: Pass/Fail */
|
/** Tests: Pass/Fail */
|
||||||
|
|
||||||
|
|||||||
89
vendor/qunit/qunit/qunit.js
vendored
89
vendor/qunit/qunit/qunit.js
vendored
@@ -1,11 +1,11 @@
|
|||||||
/**
|
/**
|
||||||
* QUnit v1.10.0 - A JavaScript Unit Testing Framework
|
* QUnit v1.9.0 - A JavaScript Unit Testing Framework
|
||||||
*
|
*
|
||||||
* http://qunitjs.com
|
* http://docs.jquery.com/QUnit
|
||||||
*
|
*
|
||||||
* Copyright 2012 jQuery Foundation and other contributors
|
* Copyright (c) 2012 John Resig, Jörn Zaefferer
|
||||||
* Released under the MIT license.
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||||
* http://jquery.org/license
|
* or GPL (GPL-LICENSE.txt) licenses.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function( window ) {
|
(function( window ) {
|
||||||
@@ -17,8 +17,6 @@ var QUnit,
|
|||||||
fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
|
fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
|
||||||
toString = Object.prototype.toString,
|
toString = Object.prototype.toString,
|
||||||
hasOwn = Object.prototype.hasOwnProperty,
|
hasOwn = Object.prototype.hasOwnProperty,
|
||||||
// Keep a local reference to Date (GH-283)
|
|
||||||
Date = window.Date,
|
|
||||||
defined = {
|
defined = {
|
||||||
setTimeout: typeof window.setTimeout !== "undefined",
|
setTimeout: typeof window.setTimeout !== "undefined",
|
||||||
sessionStorage: (function() {
|
sessionStorage: (function() {
|
||||||
@@ -306,8 +304,7 @@ QUnit = {
|
|||||||
// call on start of module test to prepend name to all tests
|
// call on start of module test to prepend name to all tests
|
||||||
module: function( name, testEnvironment ) {
|
module: function( name, testEnvironment ) {
|
||||||
config.currentModule = name;
|
config.currentModule = name;
|
||||||
config.currentModuleTestEnvironment = testEnvironment;
|
config.currentModuleTestEnviroment = testEnvironment;
|
||||||
config.modules[name] = true;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
asyncTest: function( testName, expected, callback ) {
|
asyncTest: function( testName, expected, callback ) {
|
||||||
@@ -339,7 +336,7 @@ QUnit = {
|
|||||||
async: async,
|
async: async,
|
||||||
callback: callback,
|
callback: callback,
|
||||||
module: config.currentModule,
|
module: config.currentModule,
|
||||||
moduleTestEnvironment: config.currentModuleTestEnvironment,
|
moduleTestEnvironment: config.currentModuleTestEnviroment,
|
||||||
stack: sourceFromStacktrace( 2 )
|
stack: sourceFromStacktrace( 2 )
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -352,11 +349,7 @@ QUnit = {
|
|||||||
|
|
||||||
// Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
|
// Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
|
||||||
expect: function( asserts ) {
|
expect: function( asserts ) {
|
||||||
if (arguments.length === 1) {
|
config.current.expected = asserts;
|
||||||
config.current.expected = asserts;
|
|
||||||
} else {
|
|
||||||
return config.current.expected;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
start: function( count ) {
|
start: function( count ) {
|
||||||
@@ -422,8 +415,6 @@ QUnit.assert = {
|
|||||||
|
|
||||||
var source,
|
var source,
|
||||||
details = {
|
details = {
|
||||||
module: config.current.module,
|
|
||||||
name: config.current.testName,
|
|
||||||
result: result,
|
result: result,
|
||||||
message: msg
|
message: msg
|
||||||
};
|
};
|
||||||
@@ -609,9 +600,6 @@ config = {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
// Set of all modules.
|
|
||||||
modules: {},
|
|
||||||
|
|
||||||
// logging callback queues
|
// logging callback queues
|
||||||
begin: [],
|
begin: [],
|
||||||
done: [],
|
done: [],
|
||||||
@@ -722,10 +710,17 @@ extend( QUnit, {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Resets the test setup. Useful for tests that modify the DOM.
|
// Resets the test setup. Useful for tests that modify the DOM.
|
||||||
|
// If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
|
||||||
reset: function() {
|
reset: function() {
|
||||||
var fixture = id( "qunit-fixture" );
|
var fixture;
|
||||||
if ( fixture ) {
|
|
||||||
fixture.innerHTML = config.fixture;
|
if ( window.jQuery ) {
|
||||||
|
jQuery( "#qunit-fixture" ).html( config.fixture );
|
||||||
|
} else {
|
||||||
|
fixture = id( "qunit-fixture" );
|
||||||
|
if ( fixture ) {
|
||||||
|
fixture.innerHTML = config.fixture;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -786,8 +781,6 @@ extend( QUnit, {
|
|||||||
|
|
||||||
var output, source,
|
var output, source,
|
||||||
details = {
|
details = {
|
||||||
module: config.current.module,
|
|
||||||
name: config.current.testName,
|
|
||||||
result: result,
|
result: result,
|
||||||
message: message,
|
message: message,
|
||||||
actual: actual,
|
actual: actual,
|
||||||
@@ -833,8 +826,6 @@ extend( QUnit, {
|
|||||||
|
|
||||||
var output,
|
var output,
|
||||||
details = {
|
details = {
|
||||||
module: config.current.module,
|
|
||||||
name: config.current.testName,
|
|
||||||
result: false,
|
result: false,
|
||||||
message: message
|
message: message
|
||||||
};
|
};
|
||||||
@@ -925,9 +916,7 @@ QUnit.load = function() {
|
|||||||
runLoggingCallbacks( "begin", QUnit, {} );
|
runLoggingCallbacks( "begin", QUnit, {} );
|
||||||
|
|
||||||
// Initialize the config, saving the execution queue
|
// Initialize the config, saving the execution queue
|
||||||
var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes, moduleFilter,
|
var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes,
|
||||||
numModules = 0,
|
|
||||||
moduleFilterHtml = "",
|
|
||||||
urlConfigHtml = "",
|
urlConfigHtml = "",
|
||||||
oldconfig = extend( {}, config );
|
oldconfig = extend( {}, config );
|
||||||
|
|
||||||
@@ -951,15 +940,6 @@ QUnit.load = function() {
|
|||||||
urlConfigHtml += "<input id='qunit-urlconfig-" + val.id + "' name='" + val.id + "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) + " title='" + val.tooltip + "'><label for='qunit-urlconfig-" + val.id + "' title='" + val.tooltip + "'>" + val.label + "</label>";
|
urlConfigHtml += "<input id='qunit-urlconfig-" + val.id + "' name='" + val.id + "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) + " title='" + val.tooltip + "'><label for='qunit-urlconfig-" + val.id + "' title='" + val.tooltip + "'>" + val.label + "</label>";
|
||||||
}
|
}
|
||||||
|
|
||||||
moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " + ( config.module === undefined ? "selected" : "" ) + ">< All Modules ></option>";
|
|
||||||
for ( i in config.modules ) {
|
|
||||||
if ( config.modules.hasOwnProperty( i ) ) {
|
|
||||||
numModules += 1;
|
|
||||||
moduleFilterHtml += "<option value='" + encodeURIComponent(i) + "' " + ( config.module === i ? "selected" : "" ) + ">" + i + "</option>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
moduleFilterHtml += "</select>";
|
|
||||||
|
|
||||||
// `userAgent` initialized at top of scope
|
// `userAgent` initialized at top of scope
|
||||||
userAgent = id( "qunit-userAgent" );
|
userAgent = id( "qunit-userAgent" );
|
||||||
if ( userAgent ) {
|
if ( userAgent ) {
|
||||||
@@ -1022,19 +1002,6 @@ QUnit.load = function() {
|
|||||||
window.location = QUnit.url( params );
|
window.location = QUnit.url( params );
|
||||||
});
|
});
|
||||||
toolbar.appendChild( urlConfigCheckboxes );
|
toolbar.appendChild( urlConfigCheckboxes );
|
||||||
|
|
||||||
if (numModules > 1) {
|
|
||||||
moduleFilter = document.createElement( 'span' );
|
|
||||||
moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
|
|
||||||
moduleFilter.innerHTML = moduleFilterHtml;
|
|
||||||
addEvent( moduleFilter, "change", function() {
|
|
||||||
var selectBox = moduleFilter.getElementsByTagName("select")[0],
|
|
||||||
selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
|
|
||||||
|
|
||||||
window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
|
|
||||||
});
|
|
||||||
toolbar.appendChild(moduleFilter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// `main` initialized at top of scope
|
// `main` initialized at top of scope
|
||||||
@@ -1072,9 +1039,9 @@ window.onerror = function ( error, filePath, linerNr ) {
|
|||||||
}
|
}
|
||||||
QUnit.pushFailure( error, filePath + ":" + linerNr );
|
QUnit.pushFailure( error, filePath + ":" + linerNr );
|
||||||
} else {
|
} else {
|
||||||
QUnit.test( "global failure", extend( function() {
|
QUnit.test( "global failure", function() {
|
||||||
QUnit.pushFailure( error, filePath + ":" + linerNr );
|
QUnit.pushFailure( error, filePath + ":" + linerNr );
|
||||||
}, { validTest: validTest } ) );
|
});
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1141,11 +1108,6 @@ function done() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// scroll back to top to show results
|
|
||||||
if ( window.scrollTo ) {
|
|
||||||
window.scrollTo(0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
runLoggingCallbacks( "done", QUnit, {
|
runLoggingCallbacks( "done", QUnit, {
|
||||||
failed: config.stats.bad,
|
failed: config.stats.bad,
|
||||||
passed: passed,
|
passed: passed,
|
||||||
@@ -1161,12 +1123,6 @@ function validTest( test ) {
|
|||||||
module = config.module && config.module.toLowerCase(),
|
module = config.module && config.module.toLowerCase(),
|
||||||
fullName = (test.module + ": " + test.testName).toLowerCase();
|
fullName = (test.module + ": " + test.testName).toLowerCase();
|
||||||
|
|
||||||
// Internally-generated tests are always valid
|
|
||||||
if ( test.callback && test.callback.validTest === validTest ) {
|
|
||||||
delete test.callback.validTest;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( config.testNumber ) {
|
if ( config.testNumber ) {
|
||||||
return test.testNumber === config.testNumber;
|
return test.testNumber === config.testNumber;
|
||||||
}
|
}
|
||||||
@@ -1448,8 +1404,7 @@ QUnit.equiv = (function() {
|
|||||||
a.global === b.global &&
|
a.global === b.global &&
|
||||||
// (gmi) ...
|
// (gmi) ...
|
||||||
a.ignoreCase === b.ignoreCase &&
|
a.ignoreCase === b.ignoreCase &&
|
||||||
a.multiline === b.multiline &&
|
a.multiline === b.multiline;
|
||||||
a.sticky === b.sticky;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// - skip when the property is a method of an instance (OOP)
|
// - skip when the property is a method of an instance (OOP)
|
||||||
|
|||||||
679
vendor/requirejs/require.js
vendored
679
vendor/requirejs/require.js
vendored
@@ -1,5 +1,5 @@
|
|||||||
/** vim: et:ts=4:sw=4:sts=4
|
/** vim: et:ts=4:sw=4:sts=4
|
||||||
* @license RequireJS 2.0.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
|
* @license RequireJS 2.1.0 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
|
||||||
* Available via the MIT or new BSD license.
|
* Available via the MIT or new BSD license.
|
||||||
* see: http://github.com/jrburke/requirejs for details
|
* see: http://github.com/jrburke/requirejs for details
|
||||||
*/
|
*/
|
||||||
@@ -12,7 +12,7 @@ var requirejs, require, define;
|
|||||||
(function (global) {
|
(function (global) {
|
||||||
var req, s, head, baseElement, dataMain, src,
|
var req, s, head, baseElement, dataMain, src,
|
||||||
interactiveScript, currentlyAddingScript, mainScript, subPath,
|
interactiveScript, currentlyAddingScript, mainScript, subPath,
|
||||||
version = '2.0.6',
|
version = '2.1.0',
|
||||||
commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
|
commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
|
||||||
cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
|
cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
|
||||||
jsSuffixRegExp = /\.js$/,
|
jsSuffixRegExp = /\.js$/,
|
||||||
@@ -147,41 +147,6 @@ var requirejs, require, define;
|
|||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeContextModuleFunc(func, relMap, enableBuildCallback) {
|
|
||||||
return function () {
|
|
||||||
//A version of a require function that passes a moduleName
|
|
||||||
//value for items that may need to
|
|
||||||
//look up paths relative to the moduleName
|
|
||||||
var args = aps.call(arguments, 0), lastArg;
|
|
||||||
if (enableBuildCallback &&
|
|
||||||
isFunction((lastArg = args[args.length - 1]))) {
|
|
||||||
lastArg.__requireJsBuild = true;
|
|
||||||
}
|
|
||||||
args.push(relMap);
|
|
||||||
return func.apply(null, args);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function addRequireMethods(req, context, relMap) {
|
|
||||||
each([
|
|
||||||
['toUrl'],
|
|
||||||
['undef'],
|
|
||||||
['defined', 'requireDefined'],
|
|
||||||
['specified', 'requireSpecified']
|
|
||||||
], function (item) {
|
|
||||||
var prop = item[1] || item[0];
|
|
||||||
req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) :
|
|
||||||
//If no context, then use default context. Reference from
|
|
||||||
//contexts instead of early binding to default context, so
|
|
||||||
//that during builds, the latest instance of the default
|
|
||||||
//context with its config gets used.
|
|
||||||
function () {
|
|
||||||
var ctx = contexts[defContextName];
|
|
||||||
return ctx[prop].apply(ctx, arguments);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs an error with a pointer to an URL with more information.
|
* Constructs an error with a pointer to an URL with more information.
|
||||||
* @param {String} id the error ID that maps to an ID on a web page.
|
* @param {String} id the error ID that maps to an ID on a web page.
|
||||||
@@ -238,12 +203,7 @@ var requirejs, require, define;
|
|||||||
defined = {},
|
defined = {},
|
||||||
urlFetched = {},
|
urlFetched = {},
|
||||||
requireCounter = 1,
|
requireCounter = 1,
|
||||||
unnormalizedCounter = 1,
|
unnormalizedCounter = 1;
|
||||||
//Used to track the order in which modules
|
|
||||||
//should be executed, by the order they
|
|
||||||
//load. Important for consistent cycle resolution
|
|
||||||
//behavior.
|
|
||||||
waitAry = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trims the . and .. from an array of path segments.
|
* Trims the . and .. from an array of path segments.
|
||||||
@@ -405,12 +365,25 @@ var requirejs, require, define;
|
|||||||
//Pop off the first array value, since it failed, and
|
//Pop off the first array value, since it failed, and
|
||||||
//retry
|
//retry
|
||||||
pathConfig.shift();
|
pathConfig.shift();
|
||||||
context.undef(id);
|
context.require.undef(id);
|
||||||
context.require([id]);
|
context.require([id]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Turns a plugin!resource to [plugin, resource]
|
||||||
|
//with the plugin being undefined if the name
|
||||||
|
//did not have a plugin prefix.
|
||||||
|
function splitPrefix(name) {
|
||||||
|
var prefix,
|
||||||
|
index = name ? name.indexOf('!') : -1;
|
||||||
|
if (index > -1) {
|
||||||
|
prefix = name.substring(0, index);
|
||||||
|
name = name.substring(index + 1, name.length);
|
||||||
|
}
|
||||||
|
return [prefix, name];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a module mapping that includes plugin prefix, module
|
* Creates a module mapping that includes plugin prefix, module
|
||||||
* name, and path. If parentModuleMap is provided it will
|
* name, and path. If parentModuleMap is provided it will
|
||||||
@@ -427,8 +400,7 @@ var requirejs, require, define;
|
|||||||
* @returns {Object}
|
* @returns {Object}
|
||||||
*/
|
*/
|
||||||
function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
|
function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
|
||||||
var url, pluginModule, suffix,
|
var url, pluginModule, suffix, nameParts,
|
||||||
index = name ? name.indexOf('!') : -1,
|
|
||||||
prefix = null,
|
prefix = null,
|
||||||
parentName = parentModuleMap ? parentModuleMap.name : null,
|
parentName = parentModuleMap ? parentModuleMap.name : null,
|
||||||
originalName = name,
|
originalName = name,
|
||||||
@@ -442,10 +414,9 @@ var requirejs, require, define;
|
|||||||
name = '_@r' + (requireCounter += 1);
|
name = '_@r' + (requireCounter += 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index !== -1) {
|
nameParts = splitPrefix(name);
|
||||||
prefix = name.substring(0, index);
|
prefix = nameParts[0];
|
||||||
name = name.substring(index + 1, name.length);
|
name = nameParts[1];
|
||||||
}
|
|
||||||
|
|
||||||
if (prefix) {
|
if (prefix) {
|
||||||
prefix = normalize(prefix, parentName, applyMap);
|
prefix = normalize(prefix, parentName, applyMap);
|
||||||
@@ -466,6 +437,15 @@ var requirejs, require, define;
|
|||||||
} else {
|
} else {
|
||||||
//A regular module.
|
//A regular module.
|
||||||
normalizedName = normalize(name, parentName, applyMap);
|
normalizedName = normalize(name, parentName, applyMap);
|
||||||
|
|
||||||
|
//Normalized name may be a plugin ID due to map config
|
||||||
|
//application in normalize. The map config values must
|
||||||
|
//already be normalized, so do not need to redo that part.
|
||||||
|
nameParts = splitPrefix(normalizedName);
|
||||||
|
prefix = nameParts[0];
|
||||||
|
normalizedName = nameParts[1];
|
||||||
|
isNormalized = true;
|
||||||
|
|
||||||
url = context.nameToUrl(normalizedName);
|
url = context.nameToUrl(normalizedName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -557,148 +537,71 @@ var requirejs, require, define;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function that creates a require function object to give to
|
|
||||||
* modules that ask for it as a dependency. It needs to be specific
|
|
||||||
* per module because of the implication of path mappings that may
|
|
||||||
* need to be relative to the module name.
|
|
||||||
*/
|
|
||||||
function makeRequire(mod, enableBuildCallback, altRequire) {
|
|
||||||
var relMap = mod && mod.map,
|
|
||||||
modRequire = makeContextModuleFunc(altRequire || context.require,
|
|
||||||
relMap,
|
|
||||||
enableBuildCallback);
|
|
||||||
|
|
||||||
addRequireMethods(modRequire, context, relMap);
|
|
||||||
modRequire.isBrowser = isBrowser;
|
|
||||||
|
|
||||||
return modRequire;
|
|
||||||
}
|
|
||||||
|
|
||||||
handlers = {
|
handlers = {
|
||||||
'require': function (mod) {
|
'require': function (mod) {
|
||||||
return makeRequire(mod);
|
if (mod.require) {
|
||||||
|
return mod.require;
|
||||||
|
} else {
|
||||||
|
return (mod.require = context.makeRequire(mod.map));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
'exports': function (mod) {
|
'exports': function (mod) {
|
||||||
mod.usingExports = true;
|
mod.usingExports = true;
|
||||||
if (mod.map.isDefine) {
|
if (mod.map.isDefine) {
|
||||||
return (mod.exports = defined[mod.map.id] = {});
|
if (mod.exports) {
|
||||||
|
return mod.exports;
|
||||||
|
} else {
|
||||||
|
return (mod.exports = defined[mod.map.id] = {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'module': function (mod) {
|
'module': function (mod) {
|
||||||
return (mod.module = {
|
if (mod.module) {
|
||||||
id: mod.map.id,
|
return mod.module;
|
||||||
uri: mod.map.url,
|
} else {
|
||||||
config: function () {
|
return (mod.module = {
|
||||||
return (config.config && config.config[mod.map.id]) || {};
|
id: mod.map.id,
|
||||||
},
|
uri: mod.map.url,
|
||||||
exports: defined[mod.map.id]
|
config: function () {
|
||||||
});
|
return (config.config && config.config[mod.map.id]) || {};
|
||||||
|
},
|
||||||
|
exports: defined[mod.map.id]
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function removeWaiting(id) {
|
function cleanRegistry(id) {
|
||||||
//Clean up machinery used for waiting modules.
|
//Clean up machinery used for waiting modules.
|
||||||
delete registry[id];
|
delete registry[id];
|
||||||
|
|
||||||
each(waitAry, function (mod, i) {
|
|
||||||
if (mod.map.id === id) {
|
|
||||||
waitAry.splice(i, 1);
|
|
||||||
if (!mod.defined) {
|
|
||||||
context.waitCount -= 1;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function findCycle(mod, traced, processed) {
|
function breakCycle(mod, traced, processed) {
|
||||||
var id = mod.map.id,
|
var id = mod.map.id;
|
||||||
depArray = mod.depMaps,
|
|
||||||
foundModule;
|
|
||||||
|
|
||||||
//Do not bother with unitialized modules or not yet enabled
|
if (mod.error) {
|
||||||
//modules.
|
mod.emit('error', mod.error);
|
||||||
if (!mod.inited) {
|
} else {
|
||||||
return;
|
traced[id] = true;
|
||||||
}
|
each(mod.depMaps, function (depMap, i) {
|
||||||
|
var depId = depMap.id,
|
||||||
|
dep = registry[depId];
|
||||||
|
|
||||||
//Found the cycle.
|
//Only force things that have not completed
|
||||||
if (traced[id]) {
|
//being defined, so still in the registry,
|
||||||
return mod;
|
//and only if it has not been matched up
|
||||||
}
|
//in the module already.
|
||||||
|
if (dep && !mod.depMatched[i] && !processed[depId]) {
|
||||||
traced[id] = true;
|
if (traced[depId]) {
|
||||||
|
mod.defineDep(i, defined[depId]);
|
||||||
//Trace through the dependencies.
|
mod.check(); //pass false?
|
||||||
each(depArray, function (depMap) {
|
} else {
|
||||||
var depId = depMap.id,
|
breakCycle(dep, traced, processed);
|
||||||
depMod = registry[depId];
|
}
|
||||||
|
|
||||||
if (!depMod || processed[depId] ||
|
|
||||||
!depMod.inited || !depMod.enabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (foundModule = findCycle(depMod, traced, processed));
|
|
||||||
});
|
|
||||||
|
|
||||||
processed[id] = true;
|
|
||||||
|
|
||||||
return foundModule;
|
|
||||||
}
|
|
||||||
|
|
||||||
function forceExec(mod, traced, uninited) {
|
|
||||||
var id = mod.map.id,
|
|
||||||
depArray = mod.depMaps;
|
|
||||||
|
|
||||||
if (!mod.inited || !mod.map.isDefine) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (traced[id]) {
|
|
||||||
return defined[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
traced[id] = mod;
|
|
||||||
|
|
||||||
each(depArray, function (depMap) {
|
|
||||||
var depId = depMap.id,
|
|
||||||
depMod = registry[depId],
|
|
||||||
value;
|
|
||||||
|
|
||||||
if (handlers[depId]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (depMod) {
|
|
||||||
if (!depMod.inited || !depMod.enabled) {
|
|
||||||
//Dependency is not inited,
|
|
||||||
//so this module cannot be
|
|
||||||
//given a forced value yet.
|
|
||||||
uninited[id] = true;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
//Get the value for the current dependency
|
processed[id] = true;
|
||||||
value = forceExec(depMod, traced, uninited);
|
}
|
||||||
|
|
||||||
//Even with forcing it may not be done,
|
|
||||||
//in particular if the module is waiting
|
|
||||||
//on a plugin resource.
|
|
||||||
if (!uninited[depId]) {
|
|
||||||
mod.defineDepById(depId, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mod.check(true);
|
|
||||||
|
|
||||||
return defined[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
function modCheck(mod) {
|
|
||||||
mod.check();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkLoaded() {
|
function checkLoaded() {
|
||||||
@@ -707,6 +610,7 @@ var requirejs, require, define;
|
|||||||
//It is possible to disable the wait interval by using waitSeconds of 0.
|
//It is possible to disable the wait interval by using waitSeconds of 0.
|
||||||
expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
|
expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
|
||||||
noLoads = [],
|
noLoads = [],
|
||||||
|
reqCalls = [],
|
||||||
stillLoading = false,
|
stillLoading = false,
|
||||||
needCycleCheck = true;
|
needCycleCheck = true;
|
||||||
|
|
||||||
@@ -727,6 +631,10 @@ var requirejs, require, define;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!map.isDefine) {
|
||||||
|
reqCalls.push(mod);
|
||||||
|
}
|
||||||
|
|
||||||
if (!mod.error) {
|
if (!mod.error) {
|
||||||
//If the module should be executed, and it has not
|
//If the module should be executed, and it has not
|
||||||
//been inited and time is up, remember it.
|
//been inited and time is up, remember it.
|
||||||
@@ -761,31 +669,9 @@ var requirejs, require, define;
|
|||||||
|
|
||||||
//Not expired, check for a cycle.
|
//Not expired, check for a cycle.
|
||||||
if (needCycleCheck) {
|
if (needCycleCheck) {
|
||||||
|
each(reqCalls, function (mod) {
|
||||||
each(waitAry, function (mod) {
|
breakCycle(mod, {}, {});
|
||||||
if (mod.defined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var cycleMod = findCycle(mod, {}, {}),
|
|
||||||
traced = {};
|
|
||||||
|
|
||||||
if (cycleMod) {
|
|
||||||
forceExec(cycleMod, traced, {});
|
|
||||||
|
|
||||||
//traced modules may have been
|
|
||||||
//removed from the registry, but
|
|
||||||
//their listeners still need to
|
|
||||||
//be called.
|
|
||||||
eachProp(traced, modCheck);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//Now that dependencies have
|
|
||||||
//been satisfied, trigger the
|
|
||||||
//completion check that then
|
|
||||||
//notifies listeners.
|
|
||||||
eachProp(registry, modCheck);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//If still waiting on loads, and the waiting load is something
|
//If still waiting on loads, and the waiting load is something
|
||||||
@@ -851,7 +737,6 @@ var requirejs, require, define;
|
|||||||
//doing a direct modification of the depMaps array
|
//doing a direct modification of the depMaps array
|
||||||
//would affect that config.
|
//would affect that config.
|
||||||
this.depMaps = depMaps && depMaps.slice(0);
|
this.depMaps = depMaps && depMaps.slice(0);
|
||||||
this.depMaps.rjsSkipMap = depMaps.rjsSkipMap;
|
|
||||||
|
|
||||||
this.errback = errback;
|
this.errback = errback;
|
||||||
|
|
||||||
@@ -873,20 +758,6 @@ var requirejs, require, define;
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
defineDepById: function (id, depExports) {
|
|
||||||
var i;
|
|
||||||
|
|
||||||
//Find the index for this dependency.
|
|
||||||
each(this.depMaps, function (map, index) {
|
|
||||||
if (map.id === id) {
|
|
||||||
i = index;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return this.defineDep(i, depExports);
|
|
||||||
},
|
|
||||||
|
|
||||||
defineDep: function (i, depExports) {
|
defineDep: function (i, depExports) {
|
||||||
//Because of cycles, defined callback for a given
|
//Because of cycles, defined callback for a given
|
||||||
//export can be called more than once.
|
//export can be called more than once.
|
||||||
@@ -910,7 +781,9 @@ var requirejs, require, define;
|
|||||||
//If the manager is for a plugin managed resource,
|
//If the manager is for a plugin managed resource,
|
||||||
//ask the plugin to load it now.
|
//ask the plugin to load it now.
|
||||||
if (this.shim) {
|
if (this.shim) {
|
||||||
makeRequire(this, true)(this.shim.deps || [], bind(this, function () {
|
context.makeRequire(this.map, {
|
||||||
|
enableBuildCallback: true
|
||||||
|
})(this.shim.deps || [], bind(this, function () {
|
||||||
return map.prefix ? this.callPlugin() : this.load();
|
return map.prefix ? this.callPlugin() : this.load();
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
@@ -931,11 +804,9 @@ var requirejs, require, define;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks is the module is ready to define itself, and if so,
|
* Checks is the module is ready to define itself, and if so,
|
||||||
* define it. If the silent argument is true, then it will just
|
* define it.
|
||||||
* define, but not notify listeners, and not ask for a context-wide
|
|
||||||
* check of all loaded modules. That is useful for cycle breaking.
|
|
||||||
*/
|
*/
|
||||||
check: function (silent) {
|
check: function () {
|
||||||
if (!this.enabled || this.enabling) {
|
if (!this.enabled || this.enabling) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1013,11 +884,6 @@ var requirejs, require, define;
|
|||||||
delete registry[id];
|
delete registry[id];
|
||||||
|
|
||||||
this.defined = true;
|
this.defined = true;
|
||||||
context.waitCount -= 1;
|
|
||||||
if (context.waitCount === 0) {
|
|
||||||
//Clear the wait array used for cycles.
|
|
||||||
waitAry = [];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Finished the define stage. Allow calling check again
|
//Finished the define stage. Allow calling check again
|
||||||
@@ -1025,25 +891,33 @@ var requirejs, require, define;
|
|||||||
//cycle.
|
//cycle.
|
||||||
this.defining = false;
|
this.defining = false;
|
||||||
|
|
||||||
if (!silent) {
|
if (this.defined && !this.defineEmitted) {
|
||||||
if (this.defined && !this.defineEmitted) {
|
this.defineEmitted = true;
|
||||||
this.defineEmitted = true;
|
this.emit('defined', this.exports);
|
||||||
this.emit('defined', this.exports);
|
this.defineEmitComplete = true;
|
||||||
this.defineEmitComplete = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
callPlugin: function () {
|
callPlugin: function () {
|
||||||
var map = this.map,
|
var map = this.map,
|
||||||
id = map.id,
|
id = map.id,
|
||||||
pluginMap = makeModuleMap(map.prefix, null, false, true);
|
//Map already normalized the prefix.
|
||||||
|
pluginMap = makeModuleMap(map.prefix);
|
||||||
|
|
||||||
|
//Mark this as a dependency for this plugin, so it
|
||||||
|
//can be traced for cycles.
|
||||||
|
this.depMaps.push(pluginMap);
|
||||||
|
|
||||||
on(pluginMap, 'defined', bind(this, function (plugin) {
|
on(pluginMap, 'defined', bind(this, function (plugin) {
|
||||||
var load, normalizedMap, normalizedMod,
|
var load, normalizedMap, normalizedMod,
|
||||||
name = this.map.name,
|
name = this.map.name,
|
||||||
parentName = this.map.parentMap ? this.map.parentMap.name : null;
|
parentName = this.map.parentMap ? this.map.parentMap.name : null,
|
||||||
|
localRequire = context.makeRequire(map.parentMap, {
|
||||||
|
enableBuildCallback: true,
|
||||||
|
skipMap: true
|
||||||
|
});
|
||||||
|
|
||||||
//If current map is not normalized, wait for that
|
//If current map is not normalized, wait for that
|
||||||
//normalized name to load instead of continuing.
|
//normalized name to load instead of continuing.
|
||||||
@@ -1055,10 +929,10 @@ var requirejs, require, define;
|
|||||||
}) || '';
|
}) || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//prefix and name should already be normalized, no need
|
||||||
|
//for applying map config again either.
|
||||||
normalizedMap = makeModuleMap(map.prefix + '!' + name,
|
normalizedMap = makeModuleMap(map.prefix + '!' + name,
|
||||||
this.map.parentMap,
|
this.map.parentMap);
|
||||||
false,
|
|
||||||
true);
|
|
||||||
on(normalizedMap,
|
on(normalizedMap,
|
||||||
'defined', bind(this, function (value) {
|
'defined', bind(this, function (value) {
|
||||||
this.init([], function () { return value; }, null, {
|
this.init([], function () { return value; }, null, {
|
||||||
@@ -1066,8 +940,13 @@ var requirejs, require, define;
|
|||||||
ignore: true
|
ignore: true
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
normalizedMod = registry[normalizedMap.id];
|
normalizedMod = registry[normalizedMap.id];
|
||||||
if (normalizedMod) {
|
if (normalizedMod) {
|
||||||
|
//Mark this as a dependency for this plugin, so it
|
||||||
|
//can be traced for cycles.
|
||||||
|
this.depMaps.push(normalizedMap);
|
||||||
|
|
||||||
if (this.events.error) {
|
if (this.events.error) {
|
||||||
normalizedMod.on('error', bind(this, function (err) {
|
normalizedMod.on('error', bind(this, function (err) {
|
||||||
this.emit('error', err);
|
this.emit('error', err);
|
||||||
@@ -1094,7 +973,7 @@ var requirejs, require, define;
|
|||||||
//since they will never be resolved otherwise now.
|
//since they will never be resolved otherwise now.
|
||||||
eachProp(registry, function (mod) {
|
eachProp(registry, function (mod) {
|
||||||
if (mod.map.id.indexOf(id + '_unnormalized') === 0) {
|
if (mod.map.id.indexOf(id + '_unnormalized') === 0) {
|
||||||
removeWaiting(mod.map.id);
|
cleanRegistry(mod.map.id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1103,9 +982,19 @@ var requirejs, require, define;
|
|||||||
|
|
||||||
//Allow plugins to load other code without having to know the
|
//Allow plugins to load other code without having to know the
|
||||||
//context or how to 'complete' the load.
|
//context or how to 'complete' the load.
|
||||||
load.fromText = function (moduleName, text) {
|
load.fromText = bind(this, function (text, textAlt) {
|
||||||
/*jslint evil: true */
|
/*jslint evil: true */
|
||||||
var hasInteractive = useInteractive;
|
var moduleName = map.name,
|
||||||
|
moduleMap = makeModuleMap(moduleName),
|
||||||
|
hasInteractive = useInteractive;
|
||||||
|
|
||||||
|
//As of 2.1.0, support just passing the text, to reinforce
|
||||||
|
//fromText only being called once per resource. Still
|
||||||
|
//support old style of passing moduleName but discard
|
||||||
|
//that moduleName in favor of the internal ref.
|
||||||
|
if (textAlt) {
|
||||||
|
text = textAlt;
|
||||||
|
}
|
||||||
|
|
||||||
//Turn off interactive script matching for IE for any define
|
//Turn off interactive script matching for IE for any define
|
||||||
//calls in the text, then turn it back on at the end.
|
//calls in the text, then turn it back on at the end.
|
||||||
@@ -1115,25 +1004,35 @@ var requirejs, require, define;
|
|||||||
|
|
||||||
//Prime the system by creating a module instance for
|
//Prime the system by creating a module instance for
|
||||||
//it.
|
//it.
|
||||||
getModule(makeModuleMap(moduleName));
|
getModule(moduleMap);
|
||||||
|
|
||||||
req.exec(text);
|
try {
|
||||||
|
req.exec(text);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error('fromText eval for ' + moduleName +
|
||||||
|
' failed: ' + e);
|
||||||
|
}
|
||||||
|
|
||||||
if (hasInteractive) {
|
if (hasInteractive) {
|
||||||
useInteractive = true;
|
useInteractive = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Mark this as a dependency for the plugin
|
||||||
|
//resource
|
||||||
|
this.depMaps.push(moduleMap);
|
||||||
|
|
||||||
//Support anonymous modules.
|
//Support anonymous modules.
|
||||||
context.completeLoad(moduleName);
|
context.completeLoad(moduleName);
|
||||||
};
|
|
||||||
|
//Bind the value of that module to the value for this
|
||||||
|
//resource ID.
|
||||||
|
localRequire([moduleName], load);
|
||||||
|
});
|
||||||
|
|
||||||
//Use parentName here since the plugin's name is not reliable,
|
//Use parentName here since the plugin's name is not reliable,
|
||||||
//could be some weird string with no path that actually wants to
|
//could be some weird string with no path that actually wants to
|
||||||
//reference the parentName's path.
|
//reference the parentName's path.
|
||||||
plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb, er) {
|
plugin.load(map.name, localRequire, load, config);
|
||||||
deps.rjsSkipMap = true;
|
|
||||||
return context.require(deps, cb, er);
|
|
||||||
}), load, config);
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
context.enable(pluginMap, this);
|
context.enable(pluginMap, this);
|
||||||
@@ -1143,12 +1042,6 @@ var requirejs, require, define;
|
|||||||
enable: function () {
|
enable: function () {
|
||||||
this.enabled = true;
|
this.enabled = true;
|
||||||
|
|
||||||
if (!this.waitPushed) {
|
|
||||||
waitAry.push(this);
|
|
||||||
context.waitCount += 1;
|
|
||||||
this.waitPushed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Set flag mentioning that the module is enabling,
|
//Set flag mentioning that the module is enabling,
|
||||||
//so that immediate calls to the defined callbacks
|
//so that immediate calls to the defined callbacks
|
||||||
//for dependencies do not trigger inadvertent load
|
//for dependencies do not trigger inadvertent load
|
||||||
@@ -1165,7 +1058,7 @@ var requirejs, require, define;
|
|||||||
depMap = makeModuleMap(depMap,
|
depMap = makeModuleMap(depMap,
|
||||||
(this.map.isDefine ? this.map : this.map.parentMap),
|
(this.map.isDefine ? this.map : this.map.parentMap),
|
||||||
false,
|
false,
|
||||||
!this.depMaps.rjsSkipMap);
|
!this.skipMap);
|
||||||
this.depMaps[i] = depMap;
|
this.depMaps[i] = depMap;
|
||||||
|
|
||||||
handler = handlers[depMap.id];
|
handler = handlers[depMap.id];
|
||||||
@@ -1227,7 +1120,7 @@ var requirejs, require, define;
|
|||||||
if (name === 'error') {
|
if (name === 'error') {
|
||||||
//Now that the error handler was triggered, remove
|
//Now that the error handler was triggered, remove
|
||||||
//the listeners, since this broken Module instance
|
//the listeners, since this broken Module instance
|
||||||
//can stay around for a while in the registry/waitAry.
|
//can stay around for a while in the registry.
|
||||||
delete this.events[name];
|
delete this.events[name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1274,16 +1167,16 @@ var requirejs, require, define;
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return (context = {
|
context = {
|
||||||
config: config,
|
config: config,
|
||||||
contextName: contextName,
|
contextName: contextName,
|
||||||
registry: registry,
|
registry: registry,
|
||||||
defined: defined,
|
defined: defined,
|
||||||
urlFetched: urlFetched,
|
urlFetched: urlFetched,
|
||||||
waitCount: 0,
|
|
||||||
defQueue: defQueue,
|
defQueue: defQueue,
|
||||||
Module: Module,
|
Module: Module,
|
||||||
makeModuleMap: makeModuleMap,
|
makeModuleMap: makeModuleMap,
|
||||||
|
nextTick: req.nextTick,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a configuration for the context.
|
* Set a configuration for the context.
|
||||||
@@ -1325,8 +1218,8 @@ var requirejs, require, define;
|
|||||||
deps: value
|
deps: value
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (value.exports && !value.exports.__buildReady) {
|
if (value.exports && !value.exportsFn) {
|
||||||
value.exports = context.makeShimExports(value.exports);
|
value.exportsFn = context.makeShimExports(value);
|
||||||
}
|
}
|
||||||
shim[id] = value;
|
shim[id] = value;
|
||||||
});
|
});
|
||||||
@@ -1381,125 +1274,152 @@ var requirejs, require, define;
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
makeShimExports: function (exports) {
|
makeShimExports: function (value) {
|
||||||
var func;
|
function fn() {
|
||||||
if (typeof exports === 'string') {
|
var ret;
|
||||||
func = function () {
|
if (value.init) {
|
||||||
return getGlobal(exports);
|
ret = value.init.apply(global, arguments);
|
||||||
};
|
}
|
||||||
//Save the exports for use in nodefine checking.
|
return ret || getGlobal(value.exports);
|
||||||
func.exports = exports;
|
|
||||||
return func;
|
|
||||||
} else {
|
|
||||||
return function () {
|
|
||||||
return exports.apply(global, arguments);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
return fn;
|
||||||
},
|
},
|
||||||
|
|
||||||
requireDefined: function (id, relMap) {
|
makeRequire: function (relMap, options) {
|
||||||
return hasProp(defined, makeModuleMap(id, relMap, false, true).id);
|
options = options || {};
|
||||||
},
|
|
||||||
|
|
||||||
requireSpecified: function (id, relMap) {
|
function require(deps, callback, errback) {
|
||||||
id = makeModuleMap(id, relMap, false, true).id;
|
var id, map, requireMod, args;
|
||||||
return hasProp(defined, id) || hasProp(registry, id);
|
|
||||||
},
|
|
||||||
|
|
||||||
require: function (deps, callback, errback, relMap) {
|
if (options.enableBuildCallback && callback && isFunction(callback)) {
|
||||||
var moduleName, id, map, requireMod, args;
|
callback.__requireJsBuild = true;
|
||||||
if (typeof deps === 'string') {
|
|
||||||
if (isFunction(callback)) {
|
|
||||||
//Invalid call
|
|
||||||
return onError(makeError('requireargs', 'Invalid require call'), errback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Synchronous access to one module. If require.get is
|
if (typeof deps === 'string') {
|
||||||
//available (as in the Node adapter), prefer that.
|
if (isFunction(callback)) {
|
||||||
//In this case deps is the moduleName and callback is
|
//Invalid call
|
||||||
//the relMap
|
return onError(makeError('requireargs', 'Invalid require call'), errback);
|
||||||
if (req.get) {
|
}
|
||||||
return req.get(context, deps, callback);
|
|
||||||
|
//If require|exports|module are requested, get the
|
||||||
|
//value for them from the special handlers. Caveat:
|
||||||
|
//this only works while module is being defined.
|
||||||
|
if (relMap && handlers[deps]) {
|
||||||
|
return handlers[deps](registry[relMap.id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Synchronous access to one module. If require.get is
|
||||||
|
//available (as in the Node adapter), prefer that.
|
||||||
|
if (req.get) {
|
||||||
|
return req.get(context, deps, relMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Normalize module name, if it contains . or ..
|
||||||
|
map = makeModuleMap(deps, relMap, false, true);
|
||||||
|
id = map.id;
|
||||||
|
|
||||||
|
if (!hasProp(defined, id)) {
|
||||||
|
return onError(makeError('notloaded', 'Module name "' +
|
||||||
|
id +
|
||||||
|
'" has not been loaded yet for context: ' +
|
||||||
|
contextName +
|
||||||
|
(relMap ? '' : '. Use require([])')));
|
||||||
|
}
|
||||||
|
return defined[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Just return the module wanted. In this scenario, the
|
//Any defined modules in the global queue, intake them now.
|
||||||
//second arg (if passed) is just the relMap.
|
takeGlobalQueue();
|
||||||
moduleName = deps;
|
|
||||||
relMap = callback;
|
|
||||||
|
|
||||||
//Normalize module name, if it contains . or ..
|
//Make sure any remaining defQueue items get properly processed.
|
||||||
map = makeModuleMap(moduleName, relMap, false, true);
|
while (defQueue.length) {
|
||||||
id = map.id;
|
args = defQueue.shift();
|
||||||
|
if (args[0] === null) {
|
||||||
if (!hasProp(defined, id)) {
|
return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));
|
||||||
return onError(makeError('notloaded', 'Module name "' +
|
} else {
|
||||||
id +
|
//args are id, deps, factory. Should be normalized by the
|
||||||
'" has not been loaded yet for context: ' +
|
//define() function.
|
||||||
contextName));
|
callGetModule(args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return defined[id];
|
|
||||||
|
//Mark all the dependencies as needing to be loaded.
|
||||||
|
context.nextTick(function () {
|
||||||
|
requireMod = getModule(makeModuleMap(null, relMap));
|
||||||
|
|
||||||
|
//Store if map config should be applied to this require
|
||||||
|
//call for dependencies.
|
||||||
|
requireMod.skipMap = options.skipMap;
|
||||||
|
|
||||||
|
requireMod.init(deps, callback, errback, {
|
||||||
|
enabled: true
|
||||||
|
});
|
||||||
|
|
||||||
|
checkLoaded();
|
||||||
|
});
|
||||||
|
|
||||||
|
return require;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Callback require. Normalize args. if callback or errback is
|
mixin(require, {
|
||||||
//not a function, it means it is a relMap. Test errback first.
|
isBrowser: isBrowser,
|
||||||
if (errback && !isFunction(errback)) {
|
|
||||||
relMap = errback;
|
|
||||||
errback = undefined;
|
|
||||||
}
|
|
||||||
if (callback && !isFunction(callback)) {
|
|
||||||
relMap = callback;
|
|
||||||
callback = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Any defined modules in the global queue, intake them now.
|
/**
|
||||||
takeGlobalQueue();
|
* Converts a module name + .extension into an URL path.
|
||||||
|
* *Requires* the use of a module name. It does not support using
|
||||||
|
* plain URLs like nameToUrl.
|
||||||
|
*/
|
||||||
|
toUrl: function (moduleNamePlusExt) {
|
||||||
|
var index = moduleNamePlusExt.lastIndexOf('.'),
|
||||||
|
ext = null;
|
||||||
|
|
||||||
//Make sure any remaining defQueue items get properly processed.
|
if (index !== -1) {
|
||||||
while (defQueue.length) {
|
ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);
|
||||||
args = defQueue.shift();
|
moduleNamePlusExt = moduleNamePlusExt.substring(0, index);
|
||||||
if (args[0] === null) {
|
}
|
||||||
return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));
|
|
||||||
} else {
|
return context.nameToUrl(normalize(moduleNamePlusExt,
|
||||||
//args are id, deps, factory. Should be normalized by the
|
relMap && relMap.id, true), ext);
|
||||||
//define() function.
|
},
|
||||||
callGetModule(args);
|
|
||||||
|
defined: function (id) {
|
||||||
|
return hasProp(defined, makeModuleMap(id, relMap, false, true).id);
|
||||||
|
},
|
||||||
|
|
||||||
|
specified: function (id) {
|
||||||
|
id = makeModuleMap(id, relMap, false, true).id;
|
||||||
|
return hasProp(defined, id) || hasProp(registry, id);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//Mark all the dependencies as needing to be loaded.
|
|
||||||
requireMod = getModule(makeModuleMap(null, relMap));
|
|
||||||
|
|
||||||
requireMod.init(deps, callback, errback, {
|
|
||||||
enabled: true
|
|
||||||
});
|
});
|
||||||
|
|
||||||
checkLoaded();
|
//Only allow undef on top level require calls
|
||||||
|
if (!relMap) {
|
||||||
|
require.undef = function (id) {
|
||||||
|
//Bind any waiting define() calls to this context,
|
||||||
|
//fix for #408
|
||||||
|
takeGlobalQueue();
|
||||||
|
|
||||||
return context.require;
|
var map = makeModuleMap(id, relMap, true),
|
||||||
},
|
mod = registry[id];
|
||||||
|
|
||||||
undef: function (id) {
|
delete defined[id];
|
||||||
//Bind any waiting define() calls to this context,
|
delete urlFetched[map.url];
|
||||||
//fix for #408
|
delete undefEvents[id];
|
||||||
takeGlobalQueue();
|
|
||||||
|
|
||||||
var map = makeModuleMap(id, null, true),
|
if (mod) {
|
||||||
mod = registry[id];
|
//Hold on to listeners in case the
|
||||||
|
//module will be attempted to be reloaded
|
||||||
|
//using a different config.
|
||||||
|
if (mod.events.defined) {
|
||||||
|
undefEvents[id] = mod.events;
|
||||||
|
}
|
||||||
|
|
||||||
delete defined[id];
|
cleanRegistry(id);
|
||||||
delete urlFetched[map.url];
|
}
|
||||||
delete undefEvents[id];
|
};
|
||||||
|
|
||||||
if (mod) {
|
|
||||||
//Hold on to listeners in case the
|
|
||||||
//module will be attempted to be reloaded
|
|
||||||
//using a different config.
|
|
||||||
if (mod.events.defined) {
|
|
||||||
undefEvents[id] = mod.events;
|
|
||||||
}
|
|
||||||
|
|
||||||
removeWaiting(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return require;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1523,7 +1443,7 @@ var requirejs, require, define;
|
|||||||
completeLoad: function (moduleName) {
|
completeLoad: function (moduleName) {
|
||||||
var found, args, mod,
|
var found, args, mod,
|
||||||
shim = config.shim[moduleName] || {},
|
shim = config.shim[moduleName] || {},
|
||||||
shExports = shim.exports && shim.exports.exports;
|
shExports = shim.exports;
|
||||||
|
|
||||||
takeGlobalQueue();
|
takeGlobalQueue();
|
||||||
|
|
||||||
@@ -1563,31 +1483,13 @@ var requirejs, require, define;
|
|||||||
} else {
|
} else {
|
||||||
//A script that does not call define(), so just simulate
|
//A script that does not call define(), so just simulate
|
||||||
//the call for it.
|
//the call for it.
|
||||||
callGetModule([moduleName, (shim.deps || []), shim.exports]);
|
callGetModule([moduleName, (shim.deps || []), shim.exportsFn]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkLoaded();
|
checkLoaded();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a module name + .extension into an URL path.
|
|
||||||
* *Requires* the use of a module name. It does not support using
|
|
||||||
* plain URLs like nameToUrl.
|
|
||||||
*/
|
|
||||||
toUrl: function (moduleNamePlusExt, relModuleMap) {
|
|
||||||
var index = moduleNamePlusExt.lastIndexOf('.'),
|
|
||||||
ext = null;
|
|
||||||
|
|
||||||
if (index !== -1) {
|
|
||||||
ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);
|
|
||||||
moduleNamePlusExt = moduleNamePlusExt.substring(0, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
return context.nameToUrl(normalize(moduleNamePlusExt, relModuleMap && relModuleMap.id, true),
|
|
||||||
ext);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a module name to a file path. Supports cases where
|
* Converts a module name to a file path. Supports cases where
|
||||||
* moduleName may actually be just an URL.
|
* moduleName may actually be just an URL.
|
||||||
@@ -1701,7 +1603,10 @@ var requirejs, require, define;
|
|||||||
return onError(makeError('scripterror', 'Script error', evt, [data.id]));
|
return onError(makeError('scripterror', 'Script error', evt, [data.id]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
context.require = context.makeRequire();
|
||||||
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1762,6 +1667,16 @@ var requirejs, require, define;
|
|||||||
return req(config);
|
return req(config);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute something after the current tick
|
||||||
|
* of the event loop. Override for other envs
|
||||||
|
* that have a better solution than setTimeout.
|
||||||
|
* @param {Function} fn function to execute later.
|
||||||
|
*/
|
||||||
|
req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {
|
||||||
|
setTimeout(fn, 4);
|
||||||
|
} : function (fn) { fn(); };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Export require as a global, but only if it does not already exist.
|
* Export require as a global, but only if it does not already exist.
|
||||||
*/
|
*/
|
||||||
@@ -1782,9 +1697,21 @@ var requirejs, require, define;
|
|||||||
//Create default context.
|
//Create default context.
|
||||||
req({});
|
req({});
|
||||||
|
|
||||||
//Exports some context-sensitive methods on global require, using
|
//Exports some context-sensitive methods on global require.
|
||||||
//default context if no context specified.
|
each([
|
||||||
addRequireMethods(req);
|
'toUrl',
|
||||||
|
'undef',
|
||||||
|
'defined',
|
||||||
|
'specified'
|
||||||
|
], function (prop) {
|
||||||
|
//Reference from contexts instead of early binding to default context,
|
||||||
|
//so that during builds, the latest instance of the default context
|
||||||
|
//with its config gets used.
|
||||||
|
req[prop] = function () {
|
||||||
|
var ctx = contexts[defContextName];
|
||||||
|
return ctx.require[prop].apply(ctx, arguments);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
if (isBrowser) {
|
if (isBrowser) {
|
||||||
head = s.head = document.getElementsByTagName('head')[0];
|
head = s.head = document.getElementsByTagName('head')[0];
|
||||||
@@ -1962,7 +1889,7 @@ var requirejs, require, define;
|
|||||||
define = function (name, deps, callback) {
|
define = function (name, deps, callback) {
|
||||||
var node, context;
|
var node, context;
|
||||||
|
|
||||||
//Allow for anonymous functions
|
//Allow for anonymous modules
|
||||||
if (typeof name !== 'string') {
|
if (typeof name !== 'string') {
|
||||||
//Adjust args appropriately
|
//Adjust args appropriately
|
||||||
callback = deps;
|
callback = deps;
|
||||||
|
|||||||
2
vendor/underscore/underscore-min.js
vendored
2
vendor/underscore/underscore-min.js
vendored
File diff suppressed because one or more lines are too long
32
vendor/underscore/underscore.js
vendored
32
vendor/underscore/underscore.js
vendored
@@ -622,25 +622,25 @@
|
|||||||
// Returns a function, that, when invoked, will only be triggered at most once
|
// Returns a function, that, when invoked, will only be triggered at most once
|
||||||
// during a given window of time.
|
// during a given window of time.
|
||||||
_.throttle = function(func, wait) {
|
_.throttle = function(func, wait) {
|
||||||
var context, args, timeout, throttling, more, result;
|
var context, args, timeout, result;
|
||||||
var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
|
var previous = 0;
|
||||||
|
var later = function() {
|
||||||
|
previous = new Date;
|
||||||
|
timeout = null;
|
||||||
|
result = func.apply(context, args);
|
||||||
|
};
|
||||||
return function() {
|
return function() {
|
||||||
context = this; args = arguments;
|
var now = new Date;
|
||||||
var later = function() {
|
var remaining = wait - (now - previous);
|
||||||
timeout = null;
|
context = this;
|
||||||
if (more) {
|
args = arguments;
|
||||||
result = func.apply(context, args);
|
if (remaining <= 0) {
|
||||||
}
|
clearTimeout(timeout);
|
||||||
whenDone();
|
previous = now;
|
||||||
};
|
|
||||||
if (!timeout) timeout = setTimeout(later, wait);
|
|
||||||
if (throttling) {
|
|
||||||
more = true;
|
|
||||||
} else {
|
|
||||||
throttling = true;
|
|
||||||
result = func.apply(context, args);
|
result = func.apply(context, args);
|
||||||
|
} else if (!timeout) {
|
||||||
|
timeout = setTimeout(later, remaining);
|
||||||
}
|
}
|
||||||
whenDone();
|
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user