intro.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. var jQuery = require('example:widget/ui/jquery/jquery.js')
  2. return (function( root, factory ) {
  3. var modules = {},
  4. // 内部require, 简单不完全实现。
  5. // https://github.com/amdjs/amdjs-api/wiki/require
  6. _require = function( deps, callback ) {
  7. var args, len, i;
  8. // 如果deps不是数组,则直接返回指定module
  9. if ( typeof deps === 'string' ) {
  10. return getModule( deps );
  11. } else {
  12. args = [];
  13. for( len = deps.length, i = 0; i < len; i++ ) {
  14. args.push( getModule( deps[ i ] ) );
  15. }
  16. return callback.apply( null, args );
  17. }
  18. },
  19. // 内部define,暂时不支持不指定id.
  20. _define = function( id, deps, factory ) {
  21. if ( arguments.length === 2 ) {
  22. factory = deps;
  23. deps = null;
  24. }
  25. _require( deps || [], function() {
  26. setModule( id, factory, arguments );
  27. });
  28. },
  29. // 设置module, 兼容CommonJs写法。
  30. setModule = function( id, factory, args ) {
  31. var module = {
  32. exports: factory
  33. },
  34. returned;
  35. if ( typeof factory === 'function' ) {
  36. args.length || (args = [ _require, module.exports, module ]);
  37. returned = factory.apply( null, args );
  38. returned !== undefined && (module.exports = returned);
  39. }
  40. modules[ id ] = module.exports;
  41. },
  42. // 根据id获取module
  43. getModule = function( id ) {
  44. var module = modules[ id ] || root[ id ];
  45. if ( !module ) {
  46. throw new Error( '`' + id + '` is undefined' );
  47. }
  48. return module;
  49. },
  50. // 将所有modules,将路径ids装换成对象。
  51. exportsTo = function( obj ) {
  52. var key, host, parts, part, last, ucFirst;
  53. // make the first character upper case.
  54. ucFirst = function( str ) {
  55. return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));
  56. };
  57. for ( key in modules ) {
  58. host = obj;
  59. if ( !modules.hasOwnProperty( key ) ) {
  60. continue;
  61. }
  62. parts = key.split('/');
  63. last = ucFirst( parts.pop() );
  64. while( (part = ucFirst( parts.shift() )) ) {
  65. host[ part ] = host[ part ] || {};
  66. host = host[ part ];
  67. }
  68. host[ last ] = modules[ key ];
  69. }
  70. return obj;
  71. },
  72. makeExport = function( dollar ) {
  73. root.__dollar = dollar;
  74. // exports every module.
  75. return exportsTo( factory( root, _define, _require ) );
  76. };
  77. return makeExport( jQuery );
  78. })( window, function( window, define, require ) {