dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
123 lines (121 loc) • 3.5 kB
JavaScript
define([
"build/argv",
"build/fs",
"build/buildControl",
"build/messages",
"build/process",
"dojox/json/ref"
], function(argv, fs, bc, messages, process, json){
var parseViews = function(mids, mainLayer, views, params){
for(var key in views){
// ignore naming starting with _ (jsonref adding is own stuff in there)
if(key.indexOf("_") == 0){
continue;
}
var view = views[key];
// TODO deal with "./" shortcut & default view location (which relies on "./")
if(view.controller && view.controller != "none"){
var mid = view.controller.replace(/(\.js)$/, "");
if(!bc.layers[mid] && bc.multipleAppConfigLayers){
bc.layers[mid] = { include: [], exclude: [ "dojo/dojo", mainLayer ] };
mids = bc.layers[mid].include;
}
mids.push(mid);
}
if(view.template){
// we need dojo/text to load templates, let's put it in the main layer in all cases
// as this will be shared by a lot of views
if(!params.text){
params.text = true;
bc.layers[mainLayer].include.push("dojo/text");
}
mids.push(view.template);
}
if(view.nls){
// we use nls let's add dojo/i18n to the main layer as it will be shared by a lot of views
if(!params.nls){
params.nls = true;
bc.layers[mainLayer].include.push("dojo/i18n");
}
mids.push(view.nls);
}
if(view.dependencies){
Array.prototype.splice.apply(mids, [ mids.length, 0 ].concat(view.dependencies));
}
if(view.views){
parseViews(mids, mainLayer, view.views, params);
}
}
};
return function(){
var config;
try{
config = json.fromJson(fs.readFileSync(bc.getSrcModuleInfo(argv.args.appConfigFile, null, false).url));
}catch(e){
console.log(e);
}
if(config){
var mids = [], params = {};
if(config.loaderConfig){
require(config.loaderConfig);
}
// main layer
var mainLayer;
if(!argv.args.appConfigLayer){
// no layer specified, take the first one
for(var l in bc.layers){
mainLayer = l;
break;
}
}else{
mainLayer = argv.args.appConfigLayer;
if(!bc.layers[mainLayer]){
bc.layers[mainLayer] = { include: [], exclude: [ "dojo/dojo"] };
}
}
if(config.dependencies){
mids = mids.concat(config.dependencies);
}
if(config.controllers){
mids = mids.concat(config.controllers);
}
if(config.modules){
mids = mids.concat(config.modules);
}
if(config.transit){
mids.push(config.transit);
}else{
mids.push("dojox/css3/transit");
}
if(config.template){
params.text = true;
bc.layers[mainLayer].include.push("dojo/text");
mids.push(config.template);
}
if(config.controller && config.controller != "none"){
mids.push(config.controller.replace(/(\.js)$/, ""));
}
if(config.nls){
// we use nls let's add dojo/i18n to the main layer as it will be shared by a lot of views
params.nls = true;
bc.layers[mainLayer].include.push("dojo/i18n");
mids.push(config.nls);
}
if(config.view){
// we use a custom view class
mids.push(config.view);
}else{
// regular view
mids.push("dojox/app/View");
}
// go into the view children
if(config.views){
parseViews(mids, mainLayer, config.views, params);
}
Array.prototype.splice.apply(bc.layers[mainLayer].include, [bc.layers[mainLayer].length, 0].concat(mids));
}else{
messages.log("pacify", argv.args.appConfigFile+" is not a valid dojox/app JSON config file");
process.exit(-1);
}
};
});