/*______________ | ______ | 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.FileBuilders.CompressedModules Package | / / / | | / / / /| | ONLINE : http://uize.com | /____/ /__/_| | COPYRIGHT : (c)2012-2014 UIZE | /___ | LICENSE : Available under MIT License or GNU General Public License |_______________| http://uize.com/license.html */ /* Module Meta Data type: Package importance: 5 codeCompleteness: 100 docCompleteness: 100 */ /*? Introduction The =Uize.Build.FileBuilders.CompressedModules= module defines a file builder for the compressed versions of the JavaScript modules of a site. *DEVELOPERS:* `Chris van Rensburg` Functions defined in the file builder are called as instance methods on an instance of a subclass of the =Uize.Services.FileBuilderAdapter= class, so the functions can access instance methods implemented in this class. */ Uize.module ({ name:'Uize.Build.FileBuilders.CompressedModules', required:[ 'Uize.Build.ModuleInfo', 'Uize.Util.Oop', 'Uize.Build.Scruncher', 'Uize.Date', 'Uize.Util.ModuleNaming', 'Uize.Str.Has' ], builder:function () { var _scruncherPrefixChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', _dotJsRegExp = /\.js$/, _compressedJsFileExtension = '.min.js', _moduleInheritanceDepthLookup = { Uize:0 // pre-cache this in order to prevent loading and re-evaluating the Uize base module } ; return Uize.package ({ description:'Compressed JavaScript modules', urlMatcher:function (_urlParts) { return ( _urlParts.fileType == 'js' && this.isTempUrl (_urlParts.folderPath) && Uize.Str.Has.hasSuffix (_urlParts.file,_compressedJsFileExtension) ); }, builderInputs:function (_urlParts) { var m = this, _jsTemp = _urlParts.pathname.slice (0,-_compressedJsFileExtension.length) + '.js', _builderInputs = {jsTemp:_jsTemp}, _params = m.params, _moduleName = m.moduleNameFromTempPath (_jsTemp), _scrunchedHeadComments = _params.scrunchedHeadComments, _scrunchedHeadCommentModule = _scrunchedHeadComments && _scrunchedHeadComments [Uize.Util.ModuleNaming.getNamespace (_moduleName)] ; if (_scrunchedHeadCommentModule) _builderInputs.scrunchedHeadComment = m.memoryUrl ( _params.modulesFolder + '/' + Uize.modulePathResolver (_scrunchedHeadCommentModule) + '.js.jst' ) ; return _builderInputs; }, builder:function (_inputs) { var m = this, _jsTemp = _inputs.jsTemp, _result = m.readFile ({path:_jsTemp}), _moduleName = m.moduleNameFromTempPath (_jsTemp), _scruncherSettings = {}, _scrunchedHeadComment = _inputs.scrunchedHeadComment, _keepHeadComment = _scrunchedHeadComment == undefined ; function _getModuleInheritanceDepth (_moduleName,_moduleCode) { if (_moduleName in _moduleInheritanceDepthLookup) { return _moduleInheritanceDepthLookup [_moduleName]; } else { var _inheritanceDepth = 0, _superclassKnown ; if (!_moduleCode) { var _moduleUrl = m.getModuleUrl (_moduleName); m.buildFile (Uize.copy (m.params,{url:_moduleUrl})); _moduleCode = m.readFile ({path:m.builtUrl (_moduleUrl)}); } var _moduleDefinition = Uize.Build.ModuleInfo.getDefinitionFromCode (_moduleCode); if (_moduleDefinition && (_superclassKnown = 'superclass' in _moduleDefinition)) { var _superclass = _moduleDefinition.superclass; if (_superclass) _inheritanceDepth = _getModuleInheritanceDepth (_superclass) + 1 ; } _superclassKnown || Uize.require ( _moduleName, function (_module) { _inheritanceDepth = Uize.Util.Oop.getInheritanceChain (_module).length; } ) ; _moduleInheritanceDepthLookup [_moduleName] = _inheritanceDepth; return _moduleInheritanceDepthLookup [_moduleName] = _inheritanceDepth; } } if (!_keepHeadComment) _scruncherSettings.KEEPHEADCOMMENT = 'FALSE' ; if (_moduleName) { var _inheritanceDepth = _getModuleInheritanceDepth (_moduleName,_result); _scruncherSettings.MAPPINGS = '=' + (_inheritanceDepth ? _scruncherPrefixChars.charAt (_inheritanceDepth - 1) : '') + ',' + _moduleName.replace (/\./g,'_') ; } var _scruncherResult = Uize.Build.Scruncher.scrunch (_result,_scruncherSettings); _result = ( _keepHeadComment ? '' : m.readFile ({path:_scrunchedHeadComment}) ({ buildDate:Uize.Date.toIso8601 (), moduleName:_moduleName }) ) + _scruncherResult.scrunchedCode ; return _result; } }); } });