73 lines
1.7 KiB
JavaScript
73 lines
1.7 KiB
JavaScript
'use strict';
|
|
/*global persist,exports,config,__plugin,require*/
|
|
var File = java.io.File,
|
|
FileWriter = java.io.FileWriter,
|
|
PrintWriter = java.io.PrintWriter,
|
|
find = require('./find');
|
|
/*
|
|
plugin management
|
|
*/
|
|
var _plugins = {};
|
|
|
|
function _plugin(/* String */ moduleName, /* Object */ moduleObject, isPersistent ) {
|
|
//
|
|
// don't load plugin more than once
|
|
//
|
|
if ( typeof _plugins[moduleName] != 'undefined' ) {
|
|
return _plugins[moduleName].module;
|
|
}
|
|
|
|
var pluginData = { persistent: isPersistent, module: moduleObject };
|
|
if ( typeof moduleObject.store == 'undefined' ) {
|
|
moduleObject.store = {};
|
|
}
|
|
_plugins[moduleName] = pluginData;
|
|
|
|
if ( isPersistent ) {
|
|
moduleObject.store = persist( moduleName, moduleObject.store );
|
|
}
|
|
return moduleObject;
|
|
}
|
|
|
|
function _autoload( context, pluginDir, options ) {
|
|
/*
|
|
Reload all of the .js files in the given directory
|
|
*/
|
|
var sourceFiles = [],
|
|
property,
|
|
module,
|
|
pluginPath;
|
|
sourceFiles = find(pluginDir);
|
|
|
|
var len = sourceFiles.length;
|
|
if ( config && config.verbose ) {
|
|
console.info( len + ' scriptcraft plugins found in ' + pluginDir );
|
|
}
|
|
|
|
for ( var i = 0; i < len; i++ ) {
|
|
|
|
pluginPath = sourceFiles[i];
|
|
if (!pluginPath.match(/\.js$/)){
|
|
continue;
|
|
}
|
|
module = {};
|
|
|
|
try {
|
|
module = require( pluginPath , options);
|
|
for ( property in module ) {
|
|
/*
|
|
all exports in plugins become members of context object
|
|
*/
|
|
context[property] = module[property];
|
|
}
|
|
} catch ( e ) {
|
|
var msg = 'Plugin ' + pluginPath + ' ' + e ;
|
|
console.error( msg );
|
|
}
|
|
}
|
|
|
|
}
|
|
exports.plugin = _plugin;
|
|
exports.autoload = _autoload;
|
|
|