2014-01-02 19:46:46 +01:00
|
|
|
'use strict';
|
2013-12-28 23:49:13 +01:00
|
|
|
var console = require('./console');
|
2013-12-24 01:09:49 +01:00
|
|
|
var File = java.io.File;
|
|
|
|
var FileWriter = java.io.FileWriter;
|
|
|
|
var PrintWriter = java.io.PrintWriter;
|
|
|
|
/*
|
|
|
|
plugin management
|
|
|
|
*/
|
|
|
|
var _plugins = {};
|
|
|
|
|
|
|
|
var _plugin = function(/* 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};
|
2014-01-12 12:26:26 +01:00
|
|
|
if (typeof moduleObject.store == 'undefined')
|
|
|
|
moduleObject.store = {};
|
|
|
|
|
2013-12-24 01:09:49 +01:00
|
|
|
_plugins[moduleName] = pluginData;
|
|
|
|
|
|
|
|
if (isPersistent){
|
2014-01-12 12:26:26 +01:00
|
|
|
moduleObject.store = persist(moduleName, moduleObject.store);
|
2013-12-24 01:09:49 +01:00
|
|
|
}
|
|
|
|
return moduleObject;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.plugin = _plugin;
|
|
|
|
|
|
|
|
var scriptCraftDir = null;
|
|
|
|
var pluginDir = null;
|
|
|
|
var dataDir = null;
|
|
|
|
|
|
|
|
exports.autoload = function(dir) {
|
|
|
|
|
|
|
|
scriptCraftDir = dir;
|
|
|
|
pluginDir = new File(dir, "plugins");
|
|
|
|
dataDir = new File(dir, "data");
|
|
|
|
|
|
|
|
var _canonize = function(file){
|
2014-01-12 12:26:26 +01:00
|
|
|
return '' + file.canonicalPath.replaceAll("\\\\","/");
|
2013-12-24 01:09:49 +01:00
|
|
|
};
|
|
|
|
/*
|
|
|
|
recursively walk the given directory and return a list of all .js files
|
|
|
|
*/
|
|
|
|
var _listSourceFiles = function(store,dir)
|
|
|
|
{
|
|
|
|
var files = dir.listFiles();
|
|
|
|
for (var i = 0;i < files.length; i++) {
|
|
|
|
var file = files[i];
|
|
|
|
if (file.isDirectory()){
|
|
|
|
_listSourceFiles(store,file);
|
|
|
|
}else{
|
2014-01-12 12:26:26 +01:00
|
|
|
if ( file.canonicalPath.endsWith('.js') ){
|
2013-12-24 01:09:49 +01:00
|
|
|
store.push(file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
/*
|
|
|
|
Reload all of the .js files in the given directory
|
|
|
|
*/
|
|
|
|
var _reload = function(pluginDir)
|
|
|
|
{
|
|
|
|
var sourceFiles = [];
|
|
|
|
_listSourceFiles(sourceFiles,pluginDir);
|
|
|
|
|
|
|
|
var len = sourceFiles.length;
|
|
|
|
if (config.verbose)
|
2014-01-12 12:26:26 +01:00
|
|
|
console.info(len + ' scriptcraft plugins found.');
|
2013-12-24 01:09:49 +01:00
|
|
|
for (var i = 0;i < len; i++){
|
|
|
|
var pluginPath = _canonize(sourceFiles[i]);
|
|
|
|
if (config.verbose)
|
2014-01-12 12:26:26 +01:00
|
|
|
console.info('Loading plugin: ' + pluginPath);
|
2013-12-28 23:49:13 +01:00
|
|
|
var module = {};
|
|
|
|
try {
|
|
|
|
module = require(pluginPath);
|
|
|
|
for (var property in module){
|
|
|
|
/*
|
|
|
|
all exports in plugins become global
|
|
|
|
*/
|
|
|
|
global[property] = module[property];
|
|
|
|
}
|
|
|
|
}catch (e){
|
|
|
|
|
2013-12-24 01:09:49 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
_reload(pluginDir);
|
|
|
|
};
|
2013-12-30 02:07:41 +01:00
|
|
|
|