UNPKG

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
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); } }; });