mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-28 19:10:28 +00:00
886514aa52
Deno's node emulation can run TiddlyWiki now that it supports the VM isolates API, but the window global exists in that environment, so both browser and node were being detected, causing the autoboot to trip up on nonexistent argv, as the boot was happening in the constructor right before argv was set. Ref: https://github.com/denoland/deno/issues/19286 Ref: https://github.com/flexdinesh/browser-or-node
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" && typeof(document) !== "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
|