cloudcmd/lib/server/minify.js

97 lines
3.5 KiB
JavaScript

/* Обьект для сжатия скриптов и стилей по умолчанию - сжимаються */
(function(){
"use strict";
var main = global.cloudcmd.main,
DIR = main.DIR,
LIBDIR = main.LIBDIR,
HTMLDIR = main.HTMLDIR,
Util = main.util,
Minify = main.require('minify');
exports.Minify = {
/* pathes to directories */
INDEX : HTMLDIR + 'index.html',
/* приватный переключатель минимизации */
_allowed : {
css : true,
js : true,
html : true,
img : true
},
/* minimize even if file not changed */
forse : false,
/* функция разрешает или
* запрещает минимизировать
* css/js/html
* @pAllowed: - структура, в которой
* передаються параметры
* минификации, вида
* {js:true,css:true,html:false; img:true}
* img отвечает за перевод картинок в base64
* и сохранение их в css-файл
*/
setAllowed :(function(pAllowed){
if(pAllowed){
this._allowed = pAllowed;
}
}),
optimize: function(pName, pParams){
var lResult;
if(Minify){
if(!pParams)
pParams = {};
if(this.force)
pParams.force = this.force;
if(!this.MinFolder)
this.MinFolder = Minify.MinFolder;
if(this._allowed.css || this._allowed.js || this._allowed.html){
main.srvrequire("ischanged").isFileChanged(pName, false, function(pChanged){
if(pChanged){
Minify.optimize(pName, pParams);
}else{
var lDot = pName.lastIndexOf('.'),
lExt = pName.substr(lDot);
pName = Minify.MinFolder + main.crypto.createHash('sha1')
.update(pName)
.digest('hex') + lExt;
console.log(pName);
pParams.callback = null;
pParams.name = pName;
if(pParams.request && pParams.response)
main.sendFile(pParams);
}
});
lResult = true;
}
}
else{
this._allowed = {
js : false,
css : false,
html : false
};
Util.log('Could not minify ' +
'without minify module\n' +
'npm i minify');
}
return lResult;
},
/* minification folder name */
MinFolder : ''
};
})();