aboutsummaryrefslogtreecommitdiff
path: root/node_modules/montage/montage.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/montage/montage.js')
-rwxr-xr-xnode_modules/montage/montage.js90
1 files changed, 60 insertions, 30 deletions
diff --git a/node_modules/montage/montage.js b/node_modules/montage/montage.js
index c669f3f1..0906233f 100755
--- a/node_modules/montage/montage.js
+++ b/node_modules/montage/montage.js
@@ -41,11 +41,8 @@ if (typeof window !== "undefined") {
41 } 41 }
42})(function (require, exports, module) { 42})(function (require, exports, module) {
43 43
44 // The global context object, works for the browser and for node. 44 // The global context object
45 // XXX Will not work in strict mode 45 var global = new Function("return this")();
46 var global = (function() {
47 return this;
48 })();
49 46
50 /** 47 /**
51 * Initializes Montage and creates the application singleton if 48 * Initializes Montage and creates the application singleton if
@@ -106,7 +103,7 @@ if (typeof window !== "undefined") {
106 }); 103 });
107 }; 104 };
108 105
109 if ('autoPackage' in params) { 106 if ("autoPackage" in params) {
110 montageRequire.injectPackageDescription(location, { 107 montageRequire.injectPackageDescription(location, {
111 dependencies: { 108 dependencies: {
112 montage: "*" 109 montage: "*"
@@ -114,6 +111,16 @@ if (typeof window !== "undefined") {
114 }); 111 });
115 } 112 }
116 113
114 // handle explicit package.json location
115 if (location.slice(location.length - 5) === ".json") {
116 var packageDescriptionLocation = location;
117 location = URL.resolve(location, ".");
118 montageRequire.injectPackageDescriptionLocation(
119 location,
120 packageDescriptionLocation
121 );
122 }
123
117 return montageRequire.loadPackage(location) 124 return montageRequire.loadPackage(location)
118 .then(function (applicationRequire) { 125 .then(function (applicationRequire) {
119 global.require = applicationRequire; 126 global.require = applicationRequire;
@@ -149,7 +156,7 @@ if (typeof window !== "undefined") {
149 // avoid attempting to initialize a non-object 156 // avoid attempting to initialize a non-object
150 if (!(object instanceof Object)) { 157 if (!(object instanceof Object)) {
151 // avoid attempting to reinitialize an aliased property 158 // avoid attempting to reinitialize an aliased property
152 } else if (object.hasOwnProperty("_montage_metadata")) { 159 } else if (object.hasOwnProperty("_montage_metadata") && !object._montage_metadata.isInstance) {
153 object._montage_metadata.aliases.push(name); 160 object._montage_metadata.aliases.push(name);
154 object._montage_metadata.objectName = name; 161 object._montage_metadata.objectName = name;
155 } else if (!Object.isSealed(object)) { 162 } else if (!Object.isSealed(object)) {
@@ -269,7 +276,7 @@ if (typeof window !== "undefined") {
269 276
270 getConfig: function() { 277 getConfig: function() {
271 return { 278 return {
272 location: '' + window.location 279 location: "" + window.location
273 }; 280 };
274 }, 281 },
275 282
@@ -379,7 +386,7 @@ if (typeof window !== "undefined") {
379 } 386 }
380 }; 387 };
381 388
382 global.bootstrap('core/mini-url', urlModuleFactory); 389 global.bootstrap("core/mini-url", urlModuleFactory);
383 390
384 // miniature module system 391 // miniature module system
385 var bootModules = {}; 392 var bootModules = {};
@@ -410,31 +417,54 @@ if (typeof window !== "undefined") {
410 }, 417 },
411 418
412 initMontage: function (montageRequire, applicationRequire, params) { 419 initMontage: function (montageRequire, applicationRequire, params) {
413 // If a module was specified in the config then we initialize it now 420 var Promise, defaultEventManager, application;
414 if (params.module) { 421
415 applicationRequire.async(params.module) 422 montageRequire.async("core/promise").then(function(exports) {
416 .end(); 423 Promise = exports.Promise;
417 } else { 424 Promise.all([
418 // otherwise we load the application 425 montageRequire.async("core/event/event-manager"),
419 montageRequire.async("ui/application", function(exports) { 426 montageRequire.async("core/deserializer")
420 montageRequire.async("core/event/event-manager", function(eventManagerExports) { 427 ]).then(function(exportsArray) {
428 // Load the event-manager
429 defaultEventManager = exportsArray[0].EventManager.create().initWithWindow(window);
430
431 // montageWillLoad is mostly for testing purposes
432 if (typeof global.montageWillLoad === "function") {
433 global.montageWillLoad();
434 }
421 435
422 var defaultEventManager = eventManagerExports.defaultEventManager; 436 // Load the application
423 437
424 // montageWillLoad is mostly for testing purposes 438 var appProto = applicationRequire.packageDescription.applicationPrototype,
425 if (typeof global.montageWillLoad === "function") { 439 applicationDescription, appModulePromise;
426 global.montageWillLoad(); 440 if (appProto) {
427 } 441 applicationDescription = exportsArray[1].Deserializer.parseForModuleAndName(appProto);
428 exports.Application.load(function(application) { 442 appModulePromise = applicationRequire.async(applicationDescription.module);
429 window.document.application = application; 443 } else {
430 defaultEventManager.application = application; 444 appModulePromise = montageRequire.async("ui/application");
431 application.eventManager = defaultEventManager; 445 }
446
447 if (typeof window !== "undefined") {
448 montageRequire.async("core/event/binding").end();
449 }
450
451 appModulePromise.then(function(exports) {
452 application = exports[(applicationDescription ? applicationDescription.name : "Application")].create();
453 window.document.application = application;
454 defaultEventManager.application = application;
455 application.eventManager = defaultEventManager;
456 application._load(applicationRequire, function() {
457 if (params.module) {
458 // If a module was specified in the config then we initialize it now
459 applicationRequire.async(params.module).end();
460 }
432 }); 461 });
433 }); 462 }).end();
434 });
435 }
436 }
437 463
464 }).end();
465
466 });
467 }
438 }; 468 };
439 469
440 if (typeof window !== "undefined") { 470 if (typeof window !== "undefined") {