let mini_require play nice with requireJS

This commit is contained in:
Fabian Jakobs 2011-02-03 16:09:27 +01:00
commit 88e1e43cb7
4 changed files with 165 additions and 113 deletions

View file

@ -54,6 +54,12 @@ copy({
}); });
var ace = copy.createDataObject(); var ace = copy.createDataObject();
copy({
source: [
'build_support/mini_require.js'
],
dest: ace
});
copy({ copy({
source: [ source: [
copy.source.commonjs({ copy.source.commonjs({
@ -96,7 +102,6 @@ copy({
}); });
copy({ copy({
source: [ source: [
'build_support/mini_require.js',
'build_support/boot.js' 'build_support/boot.js'
], ],
dest: ace dest: ace

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -40,10 +40,17 @@
* @param module a name for the payload * @param module a name for the payload
* @param payload a function to call with (require, exports, module) params * @param payload a function to call with (require, exports, module) params
*/ */
function define(module, payload) {
(function() {
var _define = function(module, payload) {
if (typeof module !== 'string') { if (typeof module !== 'string') {
console.error('dropping module because define wasn\'t a string.'); if (_define.original)
console.trace(); _define.original.apply(window, arguments);
else {
console.error('dropping module because define wasn\'t a string.');
console.trace();
}
return; return;
} }
@ -51,16 +58,24 @@ function define(module, payload) {
define.modules = {}; define.modules = {};
define.modules[module] = payload; define.modules[module] = payload;
} };
if (window.define)
_define.original = window.define;
window.define = _define;
/** /**
* Get at functionality define()ed using the function above * Get at functionality define()ed using the function above
*/ */
function require(module, callback) { var _require = function(module, callback) {
if (Object.prototype.toString.call(module) === "[object Array]") { if (Object.prototype.toString.call(module) === "[object Array]") {
var params = []; var params = [];
for (var i = 0, l = module.length; i < l; ++i) { for (var i = 0, l = module.length; i < l; ++i) {
params.push(define.lookup(module[i])); var dep = lookup(module[i]);
if (!dep && _require.original)
return _require.original.apply(window, arguments);
params.push(dep);
}; };
if (callback) { if (callback) {
callback.apply(null, params); callback.apply(null, params);
@ -68,7 +83,10 @@ function require(module, callback) {
} }
if (typeof module === 'string') { if (typeof module === 'string') {
var payload = define.lookup(module); var payload = lookup(module);
if (!payload && _require.original)
return _require.original.apply(window, arguments);
if (callback) { if (callback) {
callback(); callback();
} }
@ -77,13 +95,17 @@ function require(module, callback) {
}; };
} }
if (window.require)
_require.original = window.require;
window.require = _require;
require.packaged = true; require.packaged = true;
/** /**
* Internal function to lookup moduleNames and resolve them by calling the * Internal function to lookup moduleNames and resolve them by calling the
* definition function if needed. * definition function if needed.
*/ */
define.lookup = function(moduleName) { var lookup = function(moduleName) {
var module = define.modules[moduleName]; var module = define.modules[moduleName];
if (module == null) { if (module == null) {
console.error('Missing module: ' + moduleName); console.error('Missing module: ' + moduleName);
@ -100,3 +122,5 @@ define.lookup = function(moduleName) {
return module; return module;
}; };
})();