You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.4 KiB
122 lines
3.4 KiB
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); |
|
} |
|
}; |
|
}); |
|
|
|
|