mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-09-07 13:28:01 +00:00
Merge backlog of changes from master branch
This is too easy. I'm worried.
This commit is contained in:
97
boot/boot.js
97
boot/boot.js
@@ -20,23 +20,16 @@ The module definitions on the browser look like this:
|
||||
In practice, each module is wrapped in a separate script block.
|
||||
|
||||
\*/
|
||||
(function() {
|
||||
|
||||
var _boot = (function($tw) {
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global modules: false, $tw: false */
|
||||
"use strict";
|
||||
|
||||
/////////////////////////// Setting up $tw
|
||||
|
||||
// Set up $tw global for the server (set up for browser is in bootprefix.js)
|
||||
if(typeof(window) === "undefined") {
|
||||
global.$tw = global.$tw || {}; // No `browser` member for the server
|
||||
exports.$tw = $tw; // Export $tw for when boot.js is required directly in node.js
|
||||
}
|
||||
|
||||
// Include bootprefix if we're on the server
|
||||
if(!$tw.browser) {
|
||||
require("./bootprefix.js");
|
||||
// Include bootprefix if we're not given module data
|
||||
if(!$tw) {
|
||||
$tw = require("./bootprefix.js").bootprefix();
|
||||
}
|
||||
|
||||
$tw.utils = $tw.utils || {};
|
||||
@@ -318,6 +311,7 @@ name `.` refers to the current directory
|
||||
*/
|
||||
$tw.utils.resolvePath = function(sourcepath,rootpath) {
|
||||
// If the source path starts with ./ or ../ then it is relative to the root
|
||||
|
||||
if(sourcepath.substr(0,2) === "./" || sourcepath.substr(0,3) === "../" ) {
|
||||
var src = sourcepath.split("/"),
|
||||
root = rootpath.split("/");
|
||||
@@ -337,7 +331,14 @@ $tw.utils.resolvePath = function(sourcepath,rootpath) {
|
||||
return root.join("/");
|
||||
} else {
|
||||
// If it isn't relative, just return the path
|
||||
return sourcepath;
|
||||
if(rootpath) {
|
||||
var root = rootpath.split("/");
|
||||
// Remove the filename part of the root
|
||||
root.splice(root.length - 1, 1);
|
||||
return root.join("/") + "/" + sourcepath;
|
||||
} else {
|
||||
return sourcepath;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -367,9 +368,7 @@ $tw.utils.registerFileType = function(type,encoding,extension) {
|
||||
Run code globally with specified context variables in scope
|
||||
*/
|
||||
$tw.utils.evalGlobal = function(code,context,filename) {
|
||||
var contextCopy = $tw.utils.extend({},context,{
|
||||
exports: {}
|
||||
});
|
||||
var contextCopy = $tw.utils.extend({},context);
|
||||
// Get the context variables as a pair of arrays of names and values
|
||||
var contextNames = [], contextValues = [];
|
||||
$tw.utils.each(contextCopy,function(value,name) {
|
||||
@@ -394,9 +393,6 @@ Run code in a sandbox with only the specified context variables in scope
|
||||
*/
|
||||
$tw.utils.evalSandboxed = $tw.browser ? $tw.utils.evalGlobal : function(code,context,filename) {
|
||||
var sandbox = $tw.utils.extend({},context);
|
||||
$tw.utils.extend(sandbox,{
|
||||
exports: {}
|
||||
});
|
||||
vm.runInNewContext(code,sandbox,filename);
|
||||
return sandbox.exports;
|
||||
};
|
||||
@@ -545,12 +541,14 @@ $tw.utils.Crypto = function() {
|
||||
Execute the module named 'moduleName'. The name can optionally be relative to the module named 'moduleRoot'
|
||||
*/
|
||||
$tw.modules.execute = function(moduleName,moduleRoot) {
|
||||
var name = moduleRoot ? $tw.utils.resolvePath(moduleName,moduleRoot) : moduleName,
|
||||
moduleInfo = $tw.modules.titles[name],
|
||||
tiddler = $tw.wiki.getTiddler(name),
|
||||
var name = moduleName[0] === "." ? $tw.utils.resolvePath(moduleName,moduleRoot) : moduleName,
|
||||
moduleInfo = $tw.modules.titles[name] || $tw.modules.titles[name + ".js"] || $tw.modules.titles[moduleName] || $tw.modules.titles[moduleName + ".js"] ,
|
||||
tiddler = $tw.wiki.getTiddler(name) || $tw.wiki.getTiddler(name + ".js") || $tw.wiki.getTiddler(moduleName) || $tw.wiki.getTiddler(moduleName + ".js") ,
|
||||
_exports = {},
|
||||
sandbox = {
|
||||
module: moduleInfo,
|
||||
exports: {},
|
||||
module: {},
|
||||
//moduleInfo: moduleInfo,
|
||||
exports: _exports,
|
||||
console: console,
|
||||
setInterval: setInterval,
|
||||
clearInterval: clearInterval,
|
||||
@@ -558,18 +556,45 @@ $tw.modules.execute = function(moduleName,moduleRoot) {
|
||||
clearTimeout: clearTimeout,
|
||||
$tw: $tw,
|
||||
require: function(title) {
|
||||
return $tw.modules.execute(title,name);
|
||||
return $tw.modules.execute(title, name);
|
||||
}
|
||||
};
|
||||
|
||||
Object.defineProperty(sandbox.module, "id", {
|
||||
value: name,
|
||||
writable: false,
|
||||
enumerable: true,
|
||||
configurable: false
|
||||
});
|
||||
|
||||
if(!$tw.browser) {
|
||||
$tw.utils.extend(sandbox,{
|
||||
process: process
|
||||
});
|
||||
} else {
|
||||
/*
|
||||
CommonJS optional require.main property:
|
||||
In a browser we offer a fake main module which points back to the boot function
|
||||
(Theoretically, this may allow TW to eventually load itself as a module in the browser)
|
||||
*/
|
||||
Object.defineProperty(sandbox.require, "main", {
|
||||
value: (typeof(require) !== "undefined") ? require.main : {TiddlyWiki: _boot},
|
||||
writable: false,
|
||||
enumerable: true,
|
||||
configurable: false
|
||||
});
|
||||
}
|
||||
if(!moduleInfo) {
|
||||
// We could not find the module on this path
|
||||
// Try to defer to browserify etc, or node
|
||||
var deferredModule;
|
||||
if($tw.browser) {
|
||||
return $tw.utils.error("Cannot find module named '" + moduleName + "' required by module '" + moduleRoot + "', resolved to " + name);
|
||||
|
||||
if(window.require) {
|
||||
try {
|
||||
return window.require(moduleName);
|
||||
} catch(e) {}
|
||||
}
|
||||
throw "Cannot find module named '" + moduleName + "' required by module '" + moduleRoot + "', resolved to " + name;
|
||||
} else {
|
||||
// If we don't have a module with that name, let node.js try to find it
|
||||
return require(moduleName);
|
||||
@@ -580,10 +605,11 @@ $tw.modules.execute = function(moduleName,moduleRoot) {
|
||||
try {
|
||||
// Check the type of the definition
|
||||
if(typeof moduleInfo.definition === "function") { // Function
|
||||
moduleInfo.exports = {};
|
||||
moduleInfo.exports = _exports;
|
||||
moduleInfo.definition(moduleInfo,moduleInfo.exports,sandbox.require);
|
||||
} else if(typeof moduleInfo.definition === "string") { // String
|
||||
moduleInfo.exports = $tw.utils.evalSandboxed(moduleInfo.definition,sandbox,tiddler.fields.title);
|
||||
moduleInfo.exports = _exports;
|
||||
$tw.utils.evalSandboxed(moduleInfo.definition,sandbox,tiddler.fields.title);
|
||||
} else { // Object
|
||||
moduleInfo.exports = moduleInfo.definition;
|
||||
}
|
||||
@@ -1411,4 +1437,15 @@ if($tw.browser) {
|
||||
$tw.boot.boot();
|
||||
}
|
||||
|
||||
})();
|
||||
return $tw;
|
||||
|
||||
});
|
||||
|
||||
if(typeof(exports) !== "undefined") {
|
||||
exports.TiddlyWiki = _boot;
|
||||
} else {
|
||||
_boot(window.$tw);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -12,12 +12,11 @@ See Boot.js for further details of the boot process.
|
||||
|
||||
\*/
|
||||
|
||||
// Set up $tw global for the browser
|
||||
if(typeof(window) === "undefined") {
|
||||
global.$tw = global.$tw || {}; // No `browser` member for the server
|
||||
} else {
|
||||
window.$tw = window.$tw || {browser: {}};
|
||||
}
|
||||
var _bootprefix = (function($tw) {
|
||||
|
||||
"use strict";
|
||||
|
||||
$tw = $tw || {browser: typeof(window) !== "undefined" ? {} : null};
|
||||
|
||||
/*
|
||||
Information about each module is kept in an object with these members:
|
||||
@@ -81,3 +80,18 @@ Convenience function for pushing a tiddler onto the preloading array
|
||||
$tw.preloadTiddler = function(fields) {
|
||||
$tw.preloadTiddlers.push(fields);
|
||||
};
|
||||
|
||||
return $tw
|
||||
|
||||
});
|
||||
|
||||
if(typeof(exports) === "undefined") {
|
||||
// Set up $tw global for the browser
|
||||
window.$tw = _bootprefix();
|
||||
} else {
|
||||
// Export functionality as a module
|
||||
exports.bootprefix = _bootprefix;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user