angoose
Version:
Angoose is a Remote Method Invocation module that comes with built-in mongoose/angular support. Now you can call server side module in browser just like you're in the server side!
86 lines (78 loc) • 3.31 kB
JavaScript
/**
This extension is responsible to piggy back the angoose.ui angular sources to the angoose-client.js.
This is meant to be temporary - should use grunt task to do these concatenations.
*/
var path = require("path"), fs= require("fs");
var ui = {
afterCreateBundle: appendUISource
};
var angoose = require("../../lib/angoose");
angoose.extension("AngooseUI", ui);
// append angoose-ui sources
//@todo: call grunt task api to concat/minify the source & templates
function appendUISource(client){
angoose.getLogger('angoose').debug("Appending angoose-ui sources");
// client.source += " \n;console.log('####################----------- angoose-ui -----------##############');\n";
var output="";
output += readFile(path.resolve(__dirname, 'angular-modules.js'));
output += concatFilesInDirectory(['services', 'controllers', 'directives', 'filters']); //'directives',
output += concatTemplates();
client.source+="\n\n" + output;
}
function concatTemplates(){
// read default templates
var templates = {};
var files = fs.readdirSync( path.resolve(__dirname, 'tpl') );
files.forEach(function(filename){
var tmp = readFile( path.resolve(__dirname, 'tpl', filename), "tpl/"+filename);
templates[filename] = tmp;
});
// read user defined templates
var userDir=angoose.config("angoose-ui-template-dir")
if(userDir){
try{
var userfiles = fs.readdirSync( path.resolve(process.cwd(), userDir));
userfiles.forEach(function(filename){
var tmp = readFile( path.resolve(process.cwd(), userDir,filename), userDir+"/"+filename);
templates[filename] = tmp;
});
}
catch(ex){
angoose.getLogger('angoose').error(ex);
}
}
angoose.getLogger('angoose').debug("preprocessing templates: ", Object.keys(templates).length);
return $angooseTemplateCache.toString().replace("{/**TEMPLATES*/}", JSON.stringify(templates));
}
function concatFilesInDirectory( dirname){
var dirs = Array.isArray(dirname)? dirname : [dirname];
var output = '';
dirs.forEach(function(dir){
var absDir = path.resolve(__dirname, dir);
var files = fs.readdirSync( absDir );
files.forEach(function(filename){
angoose.getLogger('angoose').trace("concating file", filename)
output+= readFile( path.resolve(absDir, filename), dir+"/"+filename);
});
});
return output;
}
function readFile(filename, relativeName){
var output="/******* angoose-ui filename: "+ (relativeName || filename) +" *******/\n";
if(filename.indexOf(".tpl")>0)
output = "<!------------- angoose-ui filename: "+ (relativeName || filename) +" -->";
output+=fs.readFileSync(filename, 'ascii');
output+="\n\n";
return output;
}
//@todo: properly implement it according to angular $templateCache
function $angooseTemplateCache(name, content){
$angooseTemplateCache.templates = $angooseTemplateCache.templates || {/**TEMPLATES*/}; // this will be replaced
if(!name) return;
if(content){
$angooseTemplateCache.templates[name] = content;
}
else {
return $angooseTemplateCache.templates[name];
}
}