| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | var Template = require("./Template"); | 
					
						
							|  |  |  | var BasicEvaluatedExpression = require("./BasicEvaluatedExpression"); | 
					
						
							|  |  |  | var ModuleHotAcceptDependency = require("./dependencies/ModuleHotAcceptDependency"); | 
					
						
							|  |  |  | var ModuleHotDeclineDependency = require("./dependencies/ModuleHotDeclineDependency"); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | var RawSource = require("webpack-core/lib/RawSource"); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | function HotModuleReplacementPlugin(outputOptions) { | 
					
						
							|  |  |  | 	this.outputOptions = outputOptions; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | module.exports = HotModuleReplacementPlugin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | HotModuleReplacementPlugin.prototype.apply = function(compiler) { | 
					
						
							|  |  |  | 	var hotUpdateChunkFilename = this.outputOptions.hotUpdateChunkFilename || "[id].[hash].hot-update.js"; | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 	var hotUpdateMainFilename = this.outputOptions.hotUpdateMainFilename || "[hash].hot-update.json"; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	var hotUpdateFunction = this.outputOptions.hotUpdateFunction || ("webpackHotUpdate" + (this.outputOptions.library || "")); | 
					
						
							|  |  |  | 	compiler.plugin("compilation", function(compilation, params) { | 
					
						
							| 
									
										
										
										
											2013-06-20 18:04:31 +08:00
										 |  |  | 		var hotUpdateChunkTemplate = compilation.compiler.hotUpdateChunkTemplate; | 
					
						
							|  |  |  | 		if(!hotUpdateChunkTemplate) return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		var normalModuleFactory = params.normalModuleFactory; | 
					
						
							|  |  |  | 		var contextModuleFactory = params.contextModuleFactory; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.dependencyFactories.set(ModuleHotAcceptDependency, normalModuleFactory); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(ModuleHotAcceptDependency, new ModuleHotAcceptDependency.Template()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.dependencyFactories.set(ModuleHotDeclineDependency, normalModuleFactory); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(ModuleHotDeclineDependency, new ModuleHotDeclineDependency.Template()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.plugin("record", function(compilation, records) { | 
					
						
							|  |  |  | 			if(records.hash === this.hash) return; | 
					
						
							|  |  |  | 			records.hash = compilation.hash; | 
					
						
							|  |  |  | 			records.moduleHashs = {}; | 
					
						
							|  |  |  | 			this.modules.forEach(function(module) { | 
					
						
							|  |  |  | 				var identifier = module.identifier(); | 
					
						
							| 
									
										
										
										
											2013-07-11 05:20:07 +08:00
										 |  |  | 				var hash = require("crypto").createHash("md5"); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				module.updateHash(hash); | 
					
						
							|  |  |  | 				records.moduleHashs[identifier] = hash.digest("hex"); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			records.chunkHashs = {}; | 
					
						
							|  |  |  | 			this.chunks.forEach(function(chunk) { | 
					
						
							|  |  |  | 				records.chunkHashs[chunk.id] = chunk.hash; | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			records.chunkModuleIds = {}; | 
					
						
							|  |  |  | 			this.chunks.forEach(function(chunk) { | 
					
						
							|  |  |  | 				records.chunkModuleIds[chunk.id] = chunk.modules.map(function(m) { return m.id; }); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 		compilation.plugin("after-hash", function() { | 
					
						
							|  |  |  | 			var records = this.records; | 
					
						
							|  |  |  | 			if(!records) return; | 
					
						
							| 
									
										
										
										
											2013-07-08 14:12:48 +08:00
										 |  |  | 			var lastHash = records.hash || "x"; | 
					
						
							|  |  |  | 			var preHash = records.preHash || "x"; | 
					
						
							|  |  |  | 			var prepreHash = records.prepreHash || "x"; | 
					
						
							| 
									
										
										
										
											2013-07-05 20:17:19 +08:00
										 |  |  | 			if(preHash === this.hash) { | 
					
						
							| 
									
										
										
										
											2013-07-08 14:12:48 +08:00
										 |  |  | 				this.modifyHash(prepreHash); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 				return; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-07-05 20:56:16 +08:00
										 |  |  | 			records.prepreHash = records.hash || "x"; | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 			records.preHash = this.hash; | 
					
						
							| 
									
										
										
										
											2013-07-05 20:56:16 +08:00
										 |  |  | 			this.modifyHash(records.prepreHash); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 		compilation.plugin("additional-chunk-assets", function() { | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			var records = this.records; | 
					
						
							|  |  |  | 			if(records.hash === this.hash) return; | 
					
						
							|  |  |  | 			if(!records.moduleHashs || !records.chunkHashs || !records.chunkModuleIds) return; | 
					
						
							|  |  |  | 			var moduleHashs = {}; | 
					
						
							|  |  |  | 			this.modules.forEach(function(module) { | 
					
						
							|  |  |  | 				var identifier = module.identifier(); | 
					
						
							| 
									
										
										
										
											2013-07-11 05:20:07 +08:00
										 |  |  | 				var hash = require("crypto").createHash("md5"); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				module.updateHash(hash); | 
					
						
							|  |  |  | 				hash = hash.digest("hex"); | 
					
						
							|  |  |  | 				module.hotUpdate = records.moduleHashs[identifier] !== hash; | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 			var hotUpdateMainContent = { | 
					
						
							|  |  |  | 				h: this.hash, | 
					
						
							|  |  |  | 				c: [] | 
					
						
							|  |  |  | 			}; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			Object.keys(records.chunkHashs).forEach(function(chunkId) { | 
					
						
							|  |  |  | 				chunkId = +chunkId; | 
					
						
							|  |  |  | 				var currentChunk = this.chunks.filter(function(chunk) { | 
					
						
							|  |  |  | 					return chunk.id === chunkId; | 
					
						
							|  |  |  | 				})[0]; | 
					
						
							|  |  |  | 				if(currentChunk) { | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 					var newModules = currentChunk.modules.filter(function(module) { | 
					
						
							|  |  |  | 						return module.hotUpdate; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 					}); | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 					if(newModules.length > 0) { | 
					
						
							|  |  |  | 						var source = hotUpdateChunkTemplate.render(chunkId, newModules, this.hash, this.moduleTemplate, this.dependencyTemplates); | 
					
						
							|  |  |  | 						var filename = hotUpdateChunkFilename | 
					
						
							|  |  |  | 							.replace(Template.REGEXP_HASH, records.hash) | 
					
						
							|  |  |  | 							.replace(Template.REGEXP_ID, chunkId); | 
					
						
							|  |  |  | 						this.assets[filename] = source; | 
					
						
							|  |  |  | 						hotUpdateMainContent.c.push(chunkId); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 						currentChunk.files.push(filename); | 
					
						
							|  |  |  | 						this.applyPlugins("chunk-asset", currentChunk, filename); | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			}, this); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 			var source = new RawSource(JSON.stringify(hotUpdateMainContent)); | 
					
						
							|  |  |  | 			var filename = hotUpdateMainFilename.replace(Template.REGEXP_HASH, records.hash); | 
					
						
							|  |  |  | 			this.assets[filename] = source; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var mainTemplate = compilation.mainTemplate; | 
					
						
							|  |  |  | 		compilation.mainTemplate = Object.create(mainTemplate); | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		compilation.mainTemplate.updateHash = function(hash) { | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 			hash.update("HotMainTemplateDecorator"); | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 			mainTemplate.updateHash(hash); | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		compilation.mainTemplate.renderRequireFunctionForModule = function(hash, chunk, varModuleId) { | 
					
						
							|  |  |  | 			return "hotCreateRequire(" + varModuleId + ")"; | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.mainTemplate.renderInit = function(hash, chunk) { | 
					
						
							|  |  |  | 			var buf = mainTemplate.renderInit(hash, chunk); | 
					
						
							|  |  |  | 			var currentHotUpdateChunkFilename = JSON.stringify(hotUpdateChunkFilename) | 
					
						
							|  |  |  | 				.replace(Template.REGEXP_HASH, "\" + " + this.renderCurrentHashCode(hash) + " + \"") | 
					
						
							|  |  |  | 				.replace(Template.REGEXP_ID, "\" + chunkId + \""); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 			var currentHotUpdateMainFilename = JSON.stringify(hotUpdateMainFilename) | 
					
						
							|  |  |  | 				.replace(Template.REGEXP_HASH, "\" + " + this.renderCurrentHashCode(hash) + " + \""); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			buf.push("this[" + JSON.stringify(hotUpdateFunction) + "] = " + | 
					
						
							|  |  |  | 				(hotInitCode | 
					
						
							|  |  |  | 					.replace(/\$require\$/g, this.requireFn) | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 					.replace(/\$hotMainFilename\$/g, currentHotUpdateMainFilename) | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 					.replace(/\$hotChunkFilename\$/g, currentHotUpdateChunkFilename) | 
					
						
							|  |  |  | 					.replace(/\$hash\$/g, JSON.stringify(hash)) | 
					
						
							|  |  |  | 					.replace(/\/\*foreachInstalledChunks\*\//g, chunk.chunks.length > 0 ? "for(var chunkId in installedChunks)" : "var chunkId = 0;"))); | 
					
						
							|  |  |  | 			return buf; | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.mainTemplate.renderCurrentHashCode = function(hash) { | 
					
						
							|  |  |  | 			return "hotCurrentHash"; | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.mainTemplate.renderModule = function(hash, chunk, varModuleId) { | 
					
						
							|  |  |  | 			var buf = mainTemplate.renderModule(hash, chunk, varModuleId); | 
					
						
							|  |  |  | 			buf.push(buf.pop() + ","); | 
					
						
							|  |  |  | 			buf.push("hot: hotCreateModule(" + varModuleId + "),"); | 
					
						
							|  |  |  | 			buf.push("parents: [hotCurrentParent],"); | 
					
						
							| 
									
										
										
										
											2013-06-20 04:31:12 +08:00
										 |  |  | 			buf.push("data: hotCurrentModuleData[" + varModuleId + "],"); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			buf.push("children: []"); | 
					
						
							|  |  |  | 			return buf; | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	compiler.parser.plugin("evaluate Identifier module.hot", function(expr) { | 
					
						
							| 
									
										
										
										
											2013-06-20 18:04:31 +08:00
										 |  |  | 		return new BasicEvaluatedExpression() | 
					
						
							|  |  |  | 			.setBoolean(!!this.state.compilation.compiler.hotUpdateChunkTemplate) | 
					
						
							|  |  |  | 			.setRange(expr.range); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 	compiler.parser.plugin("call module.hot.accept", function(expr) { | 
					
						
							| 
									
										
										
										
											2013-06-20 18:04:31 +08:00
										 |  |  | 		if(!this.state.compilation.compiler.hotUpdateChunkTemplate) return false; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		if(expr.arguments.length > 1) { | 
					
						
							|  |  |  | 			var param = this.evaluateExpression(expr.arguments[0]); | 
					
						
							|  |  |  | 			if(param.isString()) { | 
					
						
							|  |  |  | 				var dep = new ModuleHotAcceptDependency(param.string, param.range); | 
					
						
							|  |  |  | 				dep.optional = true; | 
					
						
							|  |  |  | 				this.state.module.addDependency(dep); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	compiler.parser.plugin("call module.hot.decline", function(expr) { | 
					
						
							| 
									
										
										
										
											2013-06-20 18:04:31 +08:00
										 |  |  | 		if(!this.state.compilation.compiler.hotUpdateChunkTemplate) return false; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		if(expr.arguments.length > 1) { | 
					
						
							|  |  |  | 			var param = this.evaluateExpression(expr.arguments[0]); | 
					
						
							|  |  |  | 			if(param.isString()) { | 
					
						
							|  |  |  | 				var dep = new ModuleHotDeclineDependency(param.string, param.range); | 
					
						
							|  |  |  | 				dep.optional = true; | 
					
						
							|  |  |  | 				this.state.module.addDependency(dep); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	compiler.parser.plugin("expression module.hot", function() { | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var hotInitCode = function() { | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 	function webpackHotUpdateCallback(chunkId, moreModules) { | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		for(var moduleId in moreModules) { | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 			hotUpdate[moduleId] = moreModules[moduleId]; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 		if(--hotWaitingFiles === 0 && hotChunksLoading === 0) { | 
					
						
							|  |  |  | 			hotUpdateDownloaded(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	var hotApplyOnUpdate = true; | 
					
						
							|  |  |  | 	var hotCurrentHash = $hash$; | 
					
						
							| 
									
										
										
										
											2013-06-20 04:31:12 +08:00
										 |  |  | 	var hotCurrentModuleData = {}; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	var hotCurrentParent = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotCreateRequire(moduleId) { | 
					
						
							|  |  |  | 		var me = installedModules[moduleId]; | 
					
						
							|  |  |  | 		var fn = function(request) { | 
					
						
							|  |  |  | 			if(installedModules[request] && installedModules[request].parents.indexOf(moduleId) < 0) | 
					
						
							|  |  |  | 				installedModules[request].parents.push(moduleId); | 
					
						
							|  |  |  | 			if(me && me.children.indexOf(request) < 0) | 
					
						
							|  |  |  | 				me.children.push(request); | 
					
						
							|  |  |  | 			hotCurrentParent = moduleId; | 
					
						
							|  |  |  | 			return $require$(request); | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		fn.e = function(chunkId, callback) { | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 			if(hotStatus === "ready") | 
					
						
							|  |  |  | 				hotSetStatus("prepare"); | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 			hotChunksLoading++; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			$require$.e(chunkId, function() { | 
					
						
							| 
									
										
										
										
											2013-06-20 04:31:12 +08:00
										 |  |  | 				try { | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 					callback.call(null, fn); | 
					
						
							| 
									
										
										
										
											2013-10-11 17:09:42 +08:00
										 |  |  | 				} finally { | 
					
						
							| 
									
										
										
										
											2013-06-20 04:31:12 +08:00
										 |  |  | 					finishChunkLoading(); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				finishChunkLoading(); | 
					
						
							|  |  |  | 				function finishChunkLoading() { | 
					
						
							|  |  |  | 					hotChunksLoading--; | 
					
						
							|  |  |  | 					if(hotStatus === "prepare") { | 
					
						
							|  |  |  | 						if(!hotWaitingFilesMap[chunkId]) { | 
					
						
							|  |  |  | 							hotDownloadUpdateChunk(chunkId); | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						if(hotChunksLoading === 0 && hotWaitingFiles === 0) { | 
					
						
							|  |  |  | 							hotUpdateDownloaded(); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		fn.cache = $require$.cache; | 
					
						
							|  |  |  | 		fn.modules = $require$.modules; | 
					
						
							|  |  |  | 		return fn; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotCreateModule(moduleId) { | 
					
						
							|  |  |  | 		var hot = { | 
					
						
							|  |  |  | 			// private stuff
 | 
					
						
							|  |  |  | 			_acceptedDependencies: {}, | 
					
						
							|  |  |  | 			_declinedDependencies: {}, | 
					
						
							|  |  |  | 			_selfAccepted: false, | 
					
						
							|  |  |  | 			_selfDeclined: false, | 
					
						
							|  |  |  | 			_disposeHandlers: [], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Module API
 | 
					
						
							|  |  |  | 			accept: function(dep, callback) { | 
					
						
							|  |  |  | 				if(typeof dep === "undefined") | 
					
						
							|  |  |  | 					hot._selfAccepted = true; | 
					
						
							|  |  |  | 				else if(typeof dep === "number") | 
					
						
							|  |  |  | 					hot._acceptedDependencies[dep] = callback; | 
					
						
							|  |  |  | 				else for(var i = 0; i < dep.length; i++) | 
					
						
							|  |  |  | 					hot._acceptedDependencies[dep[i]] = callback; | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			decline: function(dep) { | 
					
						
							|  |  |  | 				if(typeof dep === "undefined") | 
					
						
							|  |  |  | 					hot._selfDeclined = true; | 
					
						
							|  |  |  | 				else if(typeof dep === "number") | 
					
						
							|  |  |  | 					hot._declinedDependencies[dep] = true; | 
					
						
							|  |  |  | 				else for(var i = 0; i < dep.length; i++) | 
					
						
							|  |  |  | 					hot._declinedDependencies[dep[i]] = true; | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			dispose: function(callback) { | 
					
						
							|  |  |  | 				hot._disposeHandlers.push(callback); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			addDisposeHandler: function(callback) { | 
					
						
							|  |  |  | 				hot._disposeHandlers.push(callback); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			removeDisposeHandler: function(callback) { | 
					
						
							|  |  |  | 				var idx = hot._disposeHandlers.indexOf(callback); | 
					
						
							|  |  |  | 				if(idx >= 0) hot._disposeHandlers.splice(idx, 1); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Management API
 | 
					
						
							|  |  |  | 			check: hotCheck, | 
					
						
							|  |  |  | 			apply: hotApply, | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 			setApplyOnUpdate: function(applyOnUpdate) { | 
					
						
							|  |  |  | 				hotApplyOnUpdate = applyOnUpdate; | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			status: function(l) { | 
					
						
							|  |  |  | 				if(!l) return hotStatus; | 
					
						
							|  |  |  | 				hotStatusHandlers.push(l); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			addStatusHandler: function(l) { | 
					
						
							|  |  |  | 				hotStatusHandlers.push(l); | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 			removeStatusHandler: function(l) { | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				var idx = hotStatusHandlers.indexOf(l); | 
					
						
							|  |  |  | 				if(idx >= 0) hotStatusHandlers.splice(idx, 1); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		return hot; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var hotStatusHandlers = []; | 
					
						
							|  |  |  | 	var hotStatus = "idle"; | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	function hotSetStatus(newStatus) { | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 		var oldStatus = hotStatus; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		hotStatus = newStatus; | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 		for(var i = 0; i < hotStatusHandlers.length; i++) | 
					
						
							|  |  |  | 			hotStatusHandlers[i].call(null, newStatus); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 	// while downloading
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	var hotWaitingFiles = 0; | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 	var hotChunksLoading = 0; | 
					
						
							|  |  |  | 	var hotWaitingFilesMap = {}; | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 	var hotAvailibleFilesMap = {}; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	var hotCallback; | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// The update info
 | 
					
						
							|  |  |  | 	var hotUpdate, hotUpdateNewHash; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 	function hotCheck(callback) { | 
					
						
							| 
									
										
										
										
											2013-06-19 22:41:57 +08:00
										 |  |  | 		callback = callback || function(err) { if(err) throw err }; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		if(hotStatus !== "idle") throw new Error("check() is only allowed in idle status"); | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		if(typeof XMLHttpRequest === "undefined") | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			return callback(new Error("No browser support")); | 
					
						
							|  |  |  | 		hotSetStatus("check"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		try { | 
					
						
							|  |  |  | 			var request = new XMLHttpRequest(); | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 			request.open("GET", modules.c + $hotMainFilename$, true); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			request.send(null); | 
					
						
							|  |  |  | 		} catch(err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		request.onreadystatechange = function() { | 
					
						
							|  |  |  | 			if(request.readyState !== 4) return; | 
					
						
							|  |  |  | 			if(request.status !== 200 && request.status !== 304) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				hotSetStatus("idle"); | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 				callback(null, null); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 				try { | 
					
						
							|  |  |  | 					var update = JSON.parse(request.responseText); | 
					
						
							|  |  |  | 				} catch(e) { | 
					
						
							|  |  |  | 					hotSetStatus("idle"); | 
					
						
							|  |  |  | 					callback(null, null); | 
					
						
							|  |  |  | 					return; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				hotAvailibleFilesMap = {}; | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 				hotWaitingFilesMap = {}; | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 				for(var i = 0; i < update.c.length; i++) | 
					
						
							|  |  |  | 					hotAvailibleFilesMap[update.c[i]] = true; | 
					
						
							|  |  |  | 				hotUpdateNewHash = update.h; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				hotSetStatus("prepare"); | 
					
						
							| 
									
										
										
										
											2013-06-19 22:41:57 +08:00
										 |  |  | 				hotCallback = callback; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				hotUpdate = {}; | 
					
						
							|  |  |  | 				/*foreachInstalledChunks*/ { | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 					hotDownloadUpdateChunk(chunkId); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 				if(hotChunksLoading === 0 && hotWaitingFiles === 0) { | 
					
						
							|  |  |  | 					hotUpdateDownloaded(); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 	function hotDownloadUpdateChunk(chunkId) { | 
					
						
							| 
									
										
										
										
											2013-07-01 19:59:02 +08:00
										 |  |  | 		if(hotAvailibleFilesMap[chunkId]) { | 
					
						
							|  |  |  | 			hotWaitingFiles++; | 
					
						
							|  |  |  | 			var head = document.getElementsByTagName('head')[0]; | 
					
						
							|  |  |  | 			var script = document.createElement('script'); | 
					
						
							|  |  |  | 			script.type = 'text/javascript'; | 
					
						
							|  |  |  | 			script.charset = 'utf-8'; | 
					
						
							|  |  |  | 			script.src = modules.c + $hotChunkFilename$; | 
					
						
							|  |  |  | 			head.appendChild(script); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 22:09:46 +08:00
										 |  |  | 		hotWaitingFilesMap[chunkId] = true; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 	function hotUpdateDownloaded() { | 
					
						
							|  |  |  | 		hotSetStatus("ready"); | 
					
						
							|  |  |  | 		var callback = hotCallback; | 
					
						
							|  |  |  | 		hotCallback = null; | 
					
						
							|  |  |  | 		if(!callback) return; | 
					
						
							|  |  |  | 		if(hotApplyOnUpdate) { | 
					
						
							|  |  |  | 			hotApply(callback); | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			var outdatedModules = []; | 
					
						
							|  |  |  | 			for(var id in hotUpdate) { | 
					
						
							|  |  |  | 				outdatedModules.push(+id); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 			callback(null, outdatedModules); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	function hotApply(callback) { | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 		callback = callback || function(err) { if(err) throw err }; | 
					
						
							|  |  |  | 		if(hotStatus !== "ready") throw new Error("apply() is only allowed in ready status"); | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// at begin all updates modules are outdated
 | 
					
						
							|  |  |  | 		// the "outdated" status can propagate to parents if they don't accept the children
 | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 		var outdatedDependencies = {}; | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		var outdatedModules = []; | 
					
						
							|  |  |  | 		for(var id in hotUpdate) { | 
					
						
							|  |  |  | 			outdatedModules.push(+id); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-23 20:59:39 +08:00
										 |  |  | 		var queue = outdatedModules.slice(); | 
					
						
							|  |  |  | 		while(queue.length > 0) { | 
					
						
							|  |  |  | 			var moduleId = queue.pop(); | 
					
						
							|  |  |  | 			var module = installedModules[moduleId]; | 
					
						
							|  |  |  | 			if(!module || module.hot._selfAccepted) | 
					
						
							|  |  |  | 				continue; | 
					
						
							|  |  |  | 			if(module.hot._selfDeclined) { | 
					
						
							|  |  |  | 				hotSetStatus("abort"); | 
					
						
							|  |  |  | 				return callback(new Error("Aborted because of self decline: " + moduleId)); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(moduleId === 0) { | 
					
						
							|  |  |  | 				hotSetStatus("abort"); | 
					
						
							|  |  |  | 				return callback(new Error("Aborted because of bubbling")); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			for(var i = 0; i < module.parents.length; i++) { | 
					
						
							|  |  |  | 				var parentId = module.parents[i]; | 
					
						
							|  |  |  | 				var parent = installedModules[parentId]; | 
					
						
							|  |  |  | 				if(parent.hot._declinedDependencies[moduleId]) { | 
					
						
							|  |  |  | 					hotSetStatus("abort"); | 
					
						
							|  |  |  | 					return callback(new Error("Aborted because of declined dependency: " + moduleId + " in " + parentId)); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				if(outdatedModules.indexOf(parentId) >= 0) continue; | 
					
						
							|  |  |  | 				if(parent.hot._acceptedDependencies[moduleId]) { | 
					
						
							|  |  |  | 					if(!outdatedDependencies[parentId]) outdatedDependencies[parentId] = []; | 
					
						
							|  |  |  | 					if(outdatedDependencies[parentId].indexOf(moduleId) >= 0) continue; | 
					
						
							|  |  |  | 					outdatedDependencies[parentId].push(moduleId); | 
					
						
							|  |  |  | 					continue; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				delete outdatedDependencies[parentId]; | 
					
						
							|  |  |  | 				outdatedModules.push(parentId); | 
					
						
							|  |  |  | 				queue.push(parentId); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 		// Store self accepted outdated modules to require them later by the module system
 | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		var outdatedSelfAcceptedModules = []; | 
					
						
							|  |  |  | 		for(var i = 0; i < outdatedModules.length; i++) { | 
					
						
							|  |  |  | 			var moduleId = outdatedModules[i]; | 
					
						
							|  |  |  | 			if(installedModules[moduleId] && installedModules[moduleId].hot._selfAccepted) | 
					
						
							|  |  |  | 				outdatedSelfAcceptedModules.push(moduleId); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 		// Now in "dispose" phase
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		hotSetStatus("dispose"); | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 		var queue = outdatedModules.slice(); | 
					
						
							|  |  |  | 		while(queue.length > 0) { | 
					
						
							|  |  |  | 			var moduleId = queue.pop(); | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			var module = installedModules[moduleId]; | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			if(!module) continue; | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			var data = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Call dispose handlers
 | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			var disposeHandlers = module.hot._disposeHandlers; | 
					
						
							|  |  |  | 			for(var j = 0; j < disposeHandlers.length; j++) { | 
					
						
							|  |  |  | 				var cb = disposeHandlers[j] | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				cb(data); | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-06-20 04:31:12 +08:00
										 |  |  | 			hotCurrentModuleData[moduleId] = data; | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			// remove module from cache
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			delete installedModules[moduleId]; | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			// remove "parents" references from all children
 | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			for(var j = 0; j < module.children.length; j++) { | 
					
						
							|  |  |  | 				var child = installedModules[module.children[j]]; | 
					
						
							|  |  |  | 				if(!child) continue; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				var idx = child.parents.indexOf(moduleId); | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 				if(idx >= 0) { | 
					
						
							|  |  |  | 					child.parents.splice(idx, 1); | 
					
						
							|  |  |  | 					if(child.parents.length === 0 && child.hot && child.hot._disposeHandlers && child.hot._disposeHandlers.length > 0) { | 
					
						
							|  |  |  | 						// Child has dispose handlers and no more references, dispose it too
 | 
					
						
							|  |  |  | 						queue.push(child.id); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// remove outdated dependency from module children
 | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		for(var moduleId in outdatedDependencies) { | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			var module = installedModules[moduleId]; | 
					
						
							|  |  |  | 			var moduleOutdatedDependencies = outdatedDependencies[moduleId]; | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			for(var j = 0; j < moduleOutdatedDependencies.length; j++) { | 
					
						
							|  |  |  | 				var dependency = moduleOutdatedDependencies[j]; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				var idx = module.children.indexOf(dependency); | 
					
						
							|  |  |  | 				if(idx >= 0) module.children.splice(idx, 1); | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 		// Not in "apply" phase
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		hotSetStatus("apply"); | 
					
						
							| 
									
										
										
										
											2013-07-05 14:35:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		hotCurrentHash = hotUpdateNewHash; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		// insert new code
 | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		for(var moduleId in hotUpdate) { | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 			modules[moduleId] = hotUpdate[moduleId]; | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// call accept handlers
 | 
					
						
							|  |  |  | 		var error = null; | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		for(var moduleId in outdatedDependencies) { | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			var module = installedModules[moduleId]; | 
					
						
							|  |  |  | 			var moduleOutdatedDependencies = outdatedDependencies[moduleId]; | 
					
						
							|  |  |  | 			var callbacks = []; | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			for(var i = 0; i < moduleOutdatedDependencies.length; i++) { | 
					
						
							|  |  |  | 				var dependency = moduleOutdatedDependencies[i]; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				var cb = module.hot._acceptedDependencies[dependency]; | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 				if(callbacks.indexOf(cb) >= 0) continue; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				callbacks.push(cb); | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			for(var i = 0; i < callbacks.length; i++) { | 
					
						
							|  |  |  | 				var cb = callbacks[i]; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 				try { | 
					
						
							|  |  |  | 					cb(outdatedDependencies); | 
					
						
							|  |  |  | 				} catch(err) { | 
					
						
							|  |  |  | 					if(!error) | 
					
						
							|  |  |  | 						error = err; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 		if(error) { | 
					
						
							|  |  |  | 			hotSetStatus("fail"); | 
					
						
							|  |  |  | 			return callback(error); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-25 02:50:41 +08:00
										 |  |  | 		// Load self accepted modules
 | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		for(var i = 0; i < outdatedSelfAcceptedModules.length; i++) { | 
					
						
							|  |  |  | 			var moduleId = outdatedSelfAcceptedModules[i]; | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 			hotCurrentParent = moduleId; | 
					
						
							|  |  |  | 			$require$(moduleId); | 
					
						
							| 
									
										
										
										
											2013-06-24 19:43:28 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-06-19 19:49:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		hotSetStatus("idle"); | 
					
						
							|  |  |  | 		callback(null, outdatedModules); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }.toString().replace(/^function\s?\(\)\s?\{\n?|\n?\}$/g, "").replace(/^\t/mg, ""); |