123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- var jQuery = require('example:widget/ui/jquery/jquery.js')
- return (function( root, factory ) {
- var modules = {},
- // 内部require, 简单不完全实现。
- // https://github.com/amdjs/amdjs-api/wiki/require
- _require = function( deps, callback ) {
- var args, len, i;
- // 如果deps不是数组,则直接返回指定module
- if ( typeof deps === 'string' ) {
- return getModule( deps );
- } else {
- args = [];
- for( len = deps.length, i = 0; i < len; i++ ) {
- args.push( getModule( deps[ i ] ) );
- }
- return callback.apply( null, args );
- }
- },
- // 内部define,暂时不支持不指定id.
- _define = function( id, deps, factory ) {
- if ( arguments.length === 2 ) {
- factory = deps;
- deps = null;
- }
- _require( deps || [], function() {
- setModule( id, factory, arguments );
- });
- },
- // 设置module, 兼容CommonJs写法。
- setModule = function( id, factory, args ) {
- var module = {
- exports: factory
- },
- returned;
- if ( typeof factory === 'function' ) {
- args.length || (args = [ _require, module.exports, module ]);
- returned = factory.apply( null, args );
- returned !== undefined && (module.exports = returned);
- }
- modules[ id ] = module.exports;
- },
- // 根据id获取module
- getModule = function( id ) {
- var module = modules[ id ] || root[ id ];
- if ( !module ) {
- throw new Error( '`' + id + '` is undefined' );
- }
- return module;
- },
- // 将所有modules,将路径ids装换成对象。
- exportsTo = function( obj ) {
- var key, host, parts, part, last, ucFirst;
- // make the first character upper case.
- ucFirst = function( str ) {
- return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));
- };
- for ( key in modules ) {
- host = obj;
- if ( !modules.hasOwnProperty( key ) ) {
- continue;
- }
- parts = key.split('/');
- last = ucFirst( parts.pop() );
- while( (part = ucFirst( parts.shift() )) ) {
- host[ part ] = host[ part ] || {};
- host = host[ part ];
- }
- host[ last ] = modules[ key ];
- }
- return obj;
- },
- makeExport = function( dollar ) {
- root.__dollar = dollar;
- // exports every module.
- return exportsTo( factory( root, _define, _require ) );
- };
- return makeExport( jQuery );
- })( window, function( window, define, require ) {
|