3.0 source code

This commit is contained in:
agolybev
2015-04-28 17:59:00 +03:00
parent c69fd34bdd
commit 7b3b2248e5
16311 changed files with 1445974 additions and 3108429 deletions

View File

@@ -0,0 +1,16 @@
require({
baseUrl: requirejs.isBrowser ? './' : './circular/414'
},
["MyClass"],
function(MyClass) {
doh.register(
"circular414",
[
function circularComplexPlugin(t) {
t.is("MyClass,A,B,C:MyClass,A,B,C:MyClass,A,B,C:MyClass,A,B,C", MyClass.sayAll());
}
]
);
doh.run();
}
);

View File

@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<title>require.js: #414: Multi-cycle Bundle Test</title>
<script type="text/javascript" src="../../../require.js"></script>
<script type="text/javascript" src="../../doh/runner.js"></script>
<script type="text/javascript" src="../../doh/_browserRunner.js"></script>
<script type="text/javascript" src="414-tests.js"></script>
</head>
<body>
<h1>#414: Multi-cycle Bundle Test</h1>
<p>A set of modules have multiple cycles in them, but the require() that
uses the top module in that bundle should get a fully constructed
module set.<a href="https://github.com/jrburke/requirejs/issues/414">More info</a>.</p>
<p>Check console for messages</p>
</body>
</html>

View File

@@ -0,0 +1,19 @@
define(
[
"exports",
"./MyClass",
"./B",
"./C"
],
function (exports, MyClass, B, C) {
exports.name = "A";
exports.say = function(){
return [MyClass.name, exports.name, B.name, C.name].join(',');
};
}
);

View File

@@ -0,0 +1,19 @@
define(
[
"exports",
"./MyClass",
"./A",
"./C"
],
function (exports, MyClass, A, C) {
exports.name = "B";
exports.say = function(){
return [MyClass.name, A.name, exports.name, C.name].join(',');
};
}
);

View File

@@ -0,0 +1,20 @@
define(
[
"exports",
"./MyClass",
"./A",
"./B"
],
function (exports, MyClass, A, B) {
exports.name = "C";
exports.say = function(){
return [MyClass.name, A.name, B.name, exports.name].join(',');
};
}
);

View File

@@ -0,0 +1,30 @@
define(
[
"exports",
"./A",
"./B",
"./C"
],
function (exports, A, B, C) {
exports.name = "MyClass";
exports.sayAll = function(){
return [
exports.say(),
A.say(),
B.say(),
C.say()
].join(':');
};
exports.say = function(){
return [exports.name, A.name, B.name, C.name].join(',');
};
return exports;
}
);

View File

@@ -0,0 +1,4 @@
define(['b', 'exports'], function (b, exports) {
exports.name = 'a';
exports.b = b;
});

View File

@@ -0,0 +1,4 @@
define(['c', 'exports'], function (c, exports) {
exports.name = 'b';
exports.c = c;
});

View File

@@ -0,0 +1,4 @@
define(['a', 'exports'], function (a, exports) {
exports.name = 'c';
exports.a = a;
});

View File

@@ -0,0 +1,18 @@
require({
baseUrl: requirejs.isBrowser ? './' : './circular'
},
["require", "plugin!a"],
function(require, a) {
doh.register(
"circularPlugin",
[
function circularPlugin(t) {
t.is("a", a.name);
t.is("b", a.b.name);
t.is("c", a.b.c.name);
}
]
);
doh.run();
}
);

View File

@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<title>require.js: Circular Dependency under Plugin Test</title>
<script type="text/javascript" src="../../require.js"></script>
<script type="text/javascript" src="../doh/runner.js"></script>
<script type="text/javascript" src="../doh/_browserRunner.js"></script>
<script type="text/javascript" src="circularPlugin-tests.js"></script>
</head>
<body>
<h1>require.js: Circular Dependency under Plugin Test</h1>
<p>Tests if a plugin that depends on a module with a circular dependency,
does the plugin get stuck as unresolved? In particular, can cycles be
broken when a plugin resource depedency is not loaded = true.</p>
<p>Check console for messages</p>
</body>
</html>

View File

@@ -0,0 +1,21 @@
require({
baseUrl: requirejs.isBrowser ? './' : './circular/complexPlugin'
},
["require", "main"],
function(require, main) {
doh.register(
"circularComplexPlugin",
[
function circularComplexPlugin(t) {
t.is("main", main.name);
t.is('viewport', main.viewport.name);
t.is('viewportTemplate', main.viewport.template);
t.is('toolbar', main.viewport.toolbar.name);
t.is('toolbarTemplate', main.viewport.toolbar.template);
t.is('helper', main.helper.name);
}
]
);
doh.run();
}
);

View File

@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<title>require.js: Complex Circular Dependency under Plugin Test</title>
<script type="text/javascript" src="../../../require.js"></script>
<script type="text/javascript" src="../../doh/runner.js"></script>
<script type="text/javascript" src="../../doh/_browserRunner.js"></script>
<script type="text/javascript" src="complexPlugin-tests.js"></script>
</head>
<body>
<h1>require.js: Complex Circular Dependency under Plugin Test</h1>
<p>Complex test of plugins where some modules have a circular dependency.</p>
<p>Check console for messages</p>
<div class="content"></div>
</body>
</html>

View File

@@ -0,0 +1,6 @@
define(function (require, exports) {
//Create circular dependency here
var main = require('main');
exports.name = 'helper';
});

View File

@@ -0,0 +1,6 @@
define(['exports', 'viewport', 'helper'], function (exports, viewport, helper) {
exports.name = 'main';
exports.viewport = viewport;
exports.helper = helper;
});

View File

@@ -0,0 +1,289 @@
//Like text.js but does a setTimeout before returning a value, to simulate
//slow template fetching.
/**
* @license RequireJS text 1.0.2 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.
* Available via the MIT or new BSD license.
* see: http://github.com/jrburke/requirejs for details
*/
/*jslint regexp: false, nomen: false, plusplus: false, strict: false */
/*global require: false, XMLHttpRequest: false, ActiveXObject: false,
define: false, window: false, process: false, Packages: false,
java: false, location: false, setTimeout */
(function () {
var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'],
xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,
bodyRegExp = /<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,
hasLocation = typeof location !== 'undefined' && location.href,
defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''),
defaultHostName = hasLocation && location.hostname,
defaultPort = hasLocation && (location.port || undefined),
buildMap = [];
define(function () {
var text, get, fs;
if (typeof window !== "undefined" && window.navigator && window.document) {
get = function (url, callback) {
var xhr = text.createXhr();
xhr.open('GET', url, true);
xhr.onreadystatechange = function (evt) {
//Do not explicitly handle errors, those should be
//visible via console output in the browser.
if (xhr.readyState === 4) {
callback(xhr.responseText);
}
};
xhr.send(null);
};
} else if (typeof process !== "undefined" &&
process.versions &&
!!process.versions.node) {
//Using special require.nodeRequire, something added by r.js.
fs = require.nodeRequire('fs');
get = function (url, callback) {
callback(fs.readFileSync(url, 'utf8'));
};
} else if (typeof Packages !== 'undefined') {
//Why Java, why is this so awkward?
get = function (url, callback) {
var encoding = "utf-8",
file = new java.io.File(url),
lineSeparator = java.lang.System.getProperty("line.separator"),
input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)),
stringBuffer, line,
content = '';
try {
stringBuffer = new java.lang.StringBuffer();
line = input.readLine();
// Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324
// http://www.unicode.org/faq/utf_bom.html
// Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK:
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
if (line && line.length() && line.charAt(0) === 0xfeff) {
// Eat the BOM, since we've already found the encoding on this file,
// and we plan to concatenating this buffer with others; the BOM should
// only appear at the top of a file.
line = line.substring(1);
}
stringBuffer.append(line);
while ((line = input.readLine()) !== null) {
stringBuffer.append(lineSeparator);
stringBuffer.append(line);
}
//Make sure we return a JavaScript string and not a Java string.
content = String(stringBuffer.toString()); //String
} finally {
input.close();
}
callback(content);
};
}
text = {
version: '1.0.2',
strip: function (content) {
//Strips <?xml ...?> declarations so that external SVG and XML
//documents can be added to a document without worry. Also, if the string
//is an HTML document, only the part inside the body tag is returned.
if (content) {
content = content.replace(xmlRegExp, "");
var matches = content.match(bodyRegExp);
if (matches) {
content = matches[1];
}
} else {
content = "";
}
return content;
},
jsEscape: function (content) {
return content.replace(/(['\\])/g, '\\$1')
.replace(/[\f]/g, "\\f")
.replace(/[\b]/g, "\\b")
.replace(/[\n]/g, "\\n")
.replace(/[\t]/g, "\\t")
.replace(/[\r]/g, "\\r");
},
createXhr: function () {
//Would love to dump the ActiveX crap in here. Need IE 6 to die first.
var xhr, i, progId;
if (typeof XMLHttpRequest !== "undefined") {
return new XMLHttpRequest();
} else {
for (i = 0; i < 3; i++) {
progId = progIds[i];
try {
xhr = new ActiveXObject(progId);
} catch (e) {}
if (xhr) {
progIds = [progId]; // so faster next time
break;
}
}
}
if (!xhr) {
throw new Error("createXhr(): XMLHttpRequest not available");
}
return xhr;
},
get: get,
/**
* Parses a resource name into its component parts. Resource names
* look like: module/name.ext!strip, where the !strip part is
* optional.
* @param {String} name the resource name
* @returns {Object} with properties "moduleName", "ext" and "strip"
* where strip is a boolean.
*/
parseName: function (name) {
var strip = false, index = name.indexOf("."),
modName = name.substring(0, index),
ext = name.substring(index + 1, name.length);
index = ext.indexOf("!");
if (index !== -1) {
//Pull off the strip arg.
strip = ext.substring(index + 1, ext.length);
strip = strip === "strip";
ext = ext.substring(0, index);
}
return {
moduleName: modName,
ext: ext,
strip: strip
};
},
xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/,
/**
* Is an URL on another domain. Only works for browser use, returns
* false in non-browser environments. Only used to know if an
* optimized .js version of a text resource should be loaded
* instead.
* @param {String} url
* @returns Boolean
*/
useXhr: function (url, protocol, hostname, port) {
var match = text.xdRegExp.exec(url),
uProtocol, uHostName, uPort;
if (!match) {
return true;
}
uProtocol = match[2];
uHostName = match[3];
uHostName = uHostName.split(':');
uPort = uHostName[1];
uHostName = uHostName[0];
return (!uProtocol || uProtocol === protocol) &&
(!uHostName || uHostName === hostname) &&
((!uPort && !uHostName) || uPort === port);
},
finishLoad: function (name, strip, content, onLoad, config) {
content = strip ? text.strip(content) : content;
if (config.isBuild) {
buildMap[name] = content;
}
setTimeout(function () {
onLoad(content);
}, 500);
},
load: function (name, req, onLoad, config) {
//Name has format: some.module.filext!strip
//The strip part is optional.
//if strip is present, then that means only get the string contents
//inside a body tag in an HTML string. For XML/SVG content it means
//removing the <?xml ...?> declarations so the content can be inserted
//into the current doc without problems.
// Do not bother with the work if a build and text will
// not be inlined.
if (config.isBuild && !config.inlineText) {
onLoad();
return;
}
var parsed = text.parseName(name),
nonStripName = parsed.moduleName + '.' + parsed.ext,
url = req.toUrl(nonStripName),
useXhr = (config && config.text && config.text.useXhr) ||
text.useXhr;
//Load the text. Use XHR if possible and in a browser.
if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) {
text.get(url, function (content) {
text.finishLoad(name, parsed.strip, content, onLoad, config);
});
} else {
//Need to fetch the resource across domains. Assume
//the resource has been optimized into a JS module. Fetch
//by the module name + extension, but do not include the
//!strip part to avoid file system issues.
req([nonStripName], function (content) {
text.finishLoad(parsed.moduleName + '.' + parsed.ext,
parsed.strip, content, onLoad, config);
});
}
},
write: function (pluginName, moduleName, write, config) {
if (moduleName in buildMap) {
var content = text.jsEscape(buildMap[moduleName]);
write.asModule(pluginName + "!" + moduleName,
"define(function () { return '" +
content +
"';});\n");
}
},
writeFile: function (pluginName, moduleName, req, write, config) {
var parsed = text.parseName(moduleName),
nonStripName = parsed.moduleName + '.' + parsed.ext,
//Use a '.js' file name so that it indicates it is a
//script that can be loaded across domains.
fileName = req.toUrl(parsed.moduleName + '.' +
parsed.ext) + '.js';
//Leverage own load() method to load plugin value, but only
//write out values that do not have the strip argument,
//to avoid any potential issues with ! in file names.
text.load(nonStripName, req, function (value) {
//Use own write() method to construct full module value.
//But need to create shell that translates writeFile's
//write() to the right interface.
var textWrite = function (contents) {
return write(fileName, contents);
};
textWrite.asModule = function (moduleName, contents) {
return write.asModule(moduleName, fileName, contents);
};
text.write(pluginName, nonStripName, textWrite, config);
}, config);
}
};
return text;
});
}());

View File

@@ -0,0 +1 @@
toolbarTemplate

View File

@@ -0,0 +1,6 @@
define(function(require) {
return {
name: 'toolbar',
template: require('slowText!toolbar.html')
};
});

View File

@@ -0,0 +1 @@
viewportTemplate

View File

@@ -0,0 +1,7 @@
define(function(require) {
return {
name: 'viewport',
template: require('slowText!viewport.html'),
toolbar: require('toolbar')
};
});

View File

@@ -0,0 +1,28 @@
<!DOCTYPE html>
<html>
<head>
<title>requirejs: Cycle: Dupe Dependencies Test</title>
<script type="text/javascript" src="../../doh/runner.js"></script>
<script type="text/javascript" src="../../doh/_browserRunner.js"></script>
<script src="../../../require.js"></script>
<script>
require(['func'], function(func) {
doh.register(
'circularDupe',
[
function circularDupe(t){
t.is('hello world suffix', func('world'));
}
]
);
doh.run();
});
</script>
</head>
<body>
<h1>requirejs: Cycle: Dupe Dependencies Test</h1>
<p>Handles a cycle where part of the cycle ends up with the cycle dependency
twice in the dependency array.</p>
<p>Check console for messages</p>
</body>
</html>

View File

@@ -0,0 +1,9 @@
define(function(require, exports) {
exports.makeMessage = function (title) {
return 'hello ' + title + ' ' + require('func').suffix;
};
exports.justSuffix = function() {
return require('func').suffix;
};
});

View File

@@ -0,0 +1,10 @@
define(['exported'], function (exported) {
function func(title) {
return exported.makeMessage(title);
}
func.suffix = 'suffix';
return func;
});

View File

@@ -0,0 +1,5 @@
define({
load: function (name, require, load, config) {
require([name], load);
}
});

View File

@@ -0,0 +1,4 @@
refine(['refine!b', 'exports'], function (b, exports) {
exports.name = 'a';
exports.b = b;
});

View File

@@ -0,0 +1,4 @@
refine(['refine!c', 'exports'], function (c, exports) {
exports.name = 'b';
exports.c = c;
});

View File

@@ -0,0 +1,4 @@
refine(['refine!a', 'exports'], function (a, exports) {
exports.name = 'c';
exports.a = a;
});

View File

@@ -0,0 +1,9 @@
define(['refine!e'], function(e) {
function d() {
return require('refine!e')();
}
d.name = 'd';
return d;
});

View File

@@ -0,0 +1,9 @@
define(['refine!d'], function(d) {
function e() {
return e.name + require('refine!d').name;
}
e.name = 'e';
return e;
});

View File

@@ -0,0 +1,25 @@
require({
baseUrl: requirejs.isBrowser ? './' : './circular/transpiler',
paths: {
'text': '../../../../text/text',
'refine': '../../plugins/fromText/refine'
}
},
["require", "refine!a", "refine!b", "refine!d"],
function(require, a, b, d) {
doh.register(
"circularTranspiler",
[
function circularTranspiler(t) {
t.is("a", a.name);
t.is("b", a.b.name);
t.is("c", a.b.c.name);
t.is("b", b.name);
t.is("c", b.c.name);
t.is("ed", d());
}
]
);
doh.run();
}
);

View File

@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<title>require.js: Circular Transpiler Plugin Test</title>
<script type="text/javascript" src="../../../require.js"></script>
<script type="text/javascript" src="../../doh/runner.js"></script>
<script type="text/javascript" src="../../doh/_browserRunner.js"></script>
<script type="text/javascript" src="transpiler-tests.js"></script>
</head>
<body>
<h1>require.js: Circular Transpiler Plugin Test</h1>
<p>Test support for transpiled modules with cycles in them More info:
<a href="https://github.com/jrburke/requirejs/issues/356">356</a>.</p>
<p>Check console for messages</p>
</body>
</html>