mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-31 07:32:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*\
 | |
| title: $:/boot/bootprefix.js
 | |
| type: application/javascript
 | |
| 
 | |
| This file sets up the globals that need to be available when JavaScript modules are executed in the browser. The overall sequence is:
 | |
| 
 | |
| # BootPrefix.js
 | |
| # <module definitions>
 | |
| # Boot.js
 | |
| 
 | |
| See Boot.js for further details of the boot process.
 | |
| 
 | |
| \*/
 | |
| 
 | |
| var _bootprefix = (function($tw) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| $tw = $tw || Object.create(null);
 | |
| $tw.boot = $tw.boot || Object.create(null);
 | |
| 
 | |
| // Detect platforms
 | |
| if(!("browser" in $tw)) {
 | |
| 	$tw.browser = typeof(window) !== "undefined" ? {} : null;
 | |
| }
 | |
| if(!("node" in $tw)) {
 | |
| 	$tw.node = typeof(process) === "object" ? {} : null;
 | |
| }
 | |
| if(!("nodeWebKit" in $tw)) {
 | |
| 	$tw.nodeWebKit = $tw.node && global.window && global.window.nwDispatcher ? {} : null;
 | |
| }
 | |
| 
 | |
| // Set default boot tasks
 | |
| $tw.boot.tasks = {
 | |
| 	trapErrors: !!($tw.browser && !$tw.node),
 | |
| 	readBrowserTiddlers: !!($tw.browser && !$tw.node)
 | |
| };
 | |
| 
 | |
| /*
 | |
| Information about each module is kept in an object with these members:
 | |
| 	moduleType: type of module
 | |
| 	definition: object, function or string defining the module; see below
 | |
| 	exports: exports of the module, filled in after execution
 | |
| 
 | |
| The `definition` can be of several types:
 | |
| 
 | |
| * An object can be used to directly specify the exports of the module
 | |
| * A function with the arguments `module,require,exports` that returns `exports`
 | |
| * A string function body with the same arguments
 | |
| 
 | |
| Each moduleInfo object is stored in two hashmaps: $tw.modules.titles and $tw.modules.types. The first is indexed by title and the second is indexed by type and then title
 | |
| */
 | |
| $tw.modules = {
 | |
| 	titles: {}, // hashmap by module name of moduleInfo
 | |
| 	types: {} // hashmap by module type and then name of moduleInfo
 | |
| };
 | |
| 
 | |
| /*
 | |
| Define a JavaScript tiddler module for later execution
 | |
| 	moduleName: name of module being defined
 | |
| 	moduleType: type of module
 | |
| 	definition: module definition; see discussion above
 | |
| */
 | |
| $tw.modules.define = function(moduleName,moduleType,definition) {
 | |
| 	// Create the moduleInfo
 | |
| 	var moduleInfo = {
 | |
| 		moduleType: moduleType,
 | |
| 		definition: definition,
 | |
| 		exports: undefined
 | |
| 	};
 | |
| 	// If the definition is already an object we can use it as the exports
 | |
| 	if(typeof moduleInfo.definition === "object") {
 | |
| 		moduleInfo.exports = definition;
 | |
| 	}
 | |
| 	// Store the module in the titles hashmap
 | |
| 	if(Object.prototype.hasOwnProperty.call($tw.modules.titles,moduleName)) {
 | |
| 		console.log("Warning: Redefined module - " + moduleName);
 | |
| 	}
 | |
| 	$tw.modules.titles[moduleName] = moduleInfo;
 | |
| 	// Store the module in the types hashmap
 | |
| 	if(!Object.prototype.hasOwnProperty.call($tw.modules.types,moduleType)) {
 | |
| 		$tw.modules.types[moduleType] = {};
 | |
| 	}
 | |
| 	if(Object.prototype.hasOwnProperty.call($tw.modules.types[moduleType],moduleName)) {
 | |
| 		console.log("Warning: Redefined module - " + moduleName);
 | |
| 	}
 | |
| 	$tw.modules.types[moduleType][moduleName] = moduleInfo;
 | |
| };
 | |
| 
 | |
| /*
 | |
| External JavaScript can populate this array before calling boot.js in order to preload tiddlers
 | |
| */
 | |
| $tw.preloadTiddlers = $tw.preloadTiddlers || [];
 | |
| 
 | |
| /*
 | |
| Convenience function for pushing a tiddler onto the preloading array
 | |
| */
 | |
| $tw.preloadTiddler = function(fields) {
 | |
| 	$tw.preloadTiddlers.push(fields);
 | |
| };
 | |
| 
 | |
| /*
 | |
| Convenience function for pushing an array of tiddlers onto the preloading array
 | |
| */
 | |
| $tw.preloadTiddlerArray = function(fieldsArray) {
 | |
| 	$tw.preloadTiddlers.push.apply($tw.preloadTiddlers,fieldsArray);
 | |
| };
 | |
| 
 | |
| return $tw;
 | |
| 
 | |
| });
 | |
| 
 | |
| if(typeof(exports) === "undefined") {
 | |
| 	// Set up $tw global for the browser
 | |
| 	window.$tw = _bootprefix(window.$tw);
 | |
| } else {
 | |
| 	// Export functionality as a module
 | |
| 	exports.bootprefix = _bootprefix;
 | |
| }
 | |
| //# sourceURL=$:/boot/bootprefix.js
 | 
