/*______________
| ______ | U I Z E J A V A S C R I P T F R A M E W O R K
| / / | ---------------------------------------------------
| / O / | MODULE : Uize.Build.Widget Package
| / / / |
| / / / /| | ONLINE : http://uize.com
| /____/ /__/_| | COPYRIGHT : (c)2013-2016 UIZE
| /___ | LICENSE : Available under MIT License or GNU General Public License
|_______________| http://uize.com/license.html
*/
/* Module Meta Data
type: Package
importance: 1
codeCompleteness: 100
docCompleteness: 4
*/
/*?
Introduction
The =Uize.Build.Widget= package provides a convenient way to stub out a UIZE V2 widget class.
*DEVELOPERS:* `Chris van Rensburg`
*/
/*
- params
- namespace
- superclass: optional, defaults to Uize.Widget.V2
- hasHtml: false|true, defaults to true
- hasCss: false|true, defaulst to true
- hasAssets: false|true, defaults to false
- developers: comma-separated list of developers
*/
Uize.module ({
name:'Uize.Build.Widget',
required:[
'Uize.Util.ModuleNaming',
'Uize.Services.FileSystem',
'Uize.Build.Templates.Module.Widget.Widget',
'Uize.Build.Templates.Module.Widget.VisualSampler',
'Uize.Build.Templates.Module.Widget.VisualTests',
'Uize.Flo'
],
builder:function () {
'use strict';
return Uize.package ({
perform:function (_params) {
var
_fileSystem = Uize.Services.FileSystem.singleton (),
_fileSystemWriteFile = _fileSystem.writeFile,
_modulesPath = _params.sourcePath + '/' + _params.modulesFolder + '/',
_namespace = _params.namespace,
_projectNamespace = Uize.Util.ModuleNaming.getNamespace (_namespace),
_hasHtml = _params.hasHtml + '' != 'false',
_hasCss = _params.hasCss + '' != 'false',
_hasLoc = _params.hasLoc + '' != 'false',
_console = _params.console || 'verbose',
_developers = _params.developers
;
_developers = _developers ? _developers.split (',') : [];
_fileSystem.writeFile = function (_params) {
if (_console == 'verbose')
console.log ('CREATED FILE: ' + _params.path)
;
_fileSystemWriteFile.apply (_fileSystem,arguments);
};
function _getModulePath (_moduleName,_sourceType) {
return _modulesPath + Uize.modulePathResolver (_moduleName) + (_sourceType ? ('.' + _sourceType) : '');
}
/*** create the HTML module's source file, if necessary ***/
_hasHtml && _fileSystem.writeFile ({
path:_getModulePath (_namespace + '.Html','htmlt'),
contents:'BLANK WIDGET
'
});
/*** create the CSS module's source .csst file, if necessary ***/
_hasCss && _fileSystem.writeFile ({
path:_getModulePath (_namespace + '.Css','csst'),
contents:[
'.`` {',
' background: #ccc;',
' padding: 5px;',
'}'
].join ('\n')
});
/*** create the primary language's source .loc file, if necessary ***/
var
_locConfig = (_params.moduleConfigs || {}) ['Uize.Build.Loc'] || {},
_locProjectConfig = (_locConfig.projects || {}) [_projectNamespace] || {},
_locCommonConfig = _locConfig.common || {},
_primaryLanguage = _locProjectConfig.primaryLanguage || _locCommonConfig.primaryLanguage || 'en-US'
;
_hasLoc && _fileSystem.writeFile ({
path:_getModulePath (_namespace + '.Loc.' + _primaryLanguage.replace ('-','_'),'loc'),
contents:''
});
/*** create the CSS assets folder, if necessary ***/
if (_params.hasAssets + '' == 'true')
_fileSystem.makeFolder ({path:_getModulePath (_namespace + '.Css')})
;
/*** create the JavaScript modules ***/
var
_headCommentModule = (_params.headComments || {}) [_projectNamespace],
_headCommentGenerator
;
Uize.Flo.block (
function (_next) {
if (_headCommentModule) {
Uize.require (
_headCommentModule,
function (_headCommentModule) {
_headCommentGenerator = _headCommentModule.process;
_next ();
}
);
} else {
_next ()
}
},
function (_next) {
function _createJavaScriptModule (_moduleType,_templateParams) {
var _moduleName = _namespace + '.' + _moduleType;
_fileSystem.writeFile ({
path:_getModulePath (_moduleName,'js'),
contents:Uize.Build.Templates.Module.Widget [_moduleType].process (
Uize.copyInto (
{
headComment:_headCommentGenerator
? _headCommentGenerator ({
moduleName:_moduleName,
creationYear:(new Date).getFullYear ()
})
: ''
,
widgetNamespace:_namespace,
developers:_developers
},
_templateParams
)
)
});
}
_createJavaScriptModule (
'Widget',
{
superclass:_params.superclass,
hasHtml:_hasHtml,
hasCss:_hasCss,
hasLoc:_hasLoc
}
);
_createJavaScriptModule ('VisualSampler');
_createJavaScriptModule ('VisualTests');
_next ();
}
) ();
}
});
}
});