From 9e86bf8d1c8d18cafccba26475d6ad1fc57e0be7 Mon Sep 17 00:00:00 2001 From: Tim Wood Date: Thu, 13 Oct 2011 11:41:22 -0700 Subject: [PATCH] Adding minifier in build script for lang files Now builds `lang/fr.min.js` and `lang/all.min.js` --- build.js | 102 ++++++++++++++++++++++++++++++++++------- lang/all.min.js | 1 + lang/fr.js | 2 +- lang/fr.min.js | 1 + lang/it.min.js | 1 + lang/pt.min.js | 1 + underscore.date.min.js | 2 +- 7 files changed, 92 insertions(+), 18 deletions(-) create mode 100644 lang/all.min.js create mode 100644 lang/fr.min.js create mode 100644 lang/it.min.js create mode 100644 lang/pt.min.js diff --git a/build.js b/build.js index b4a7affc7..5e05b08a6 100755 --- a/build.js +++ b/build.js @@ -2,7 +2,13 @@ var fs = require('fs'), uglify = require('uglify-js'), jshint = require('jshint'); -var config = { + +/********************************************* + Constants +*********************************************/ + + +var JSHINT_CONFIG = { "node" : true, "es5" : true, "browser" : true, @@ -27,43 +33,107 @@ var config = { "sub": true, "strict": false, "white": true -} - +}; +var LANGS = "fr it pt".split(" "); + + +/********************************************* + Helpers +*********************************************/ + +/* + * function to minify a string and write to a file + * + * @param {String} source The source JS + * @param {String} dest The file destination + */ function makeFile(filename, contents) { fs.writeFileSync(filename, contents); console.log(filename + " saved"); } -function minify() { - var output = fs.readFileSync('./underscore.date.js', 'utf8'), - ast, +/********************************************* + Uglify +*********************************************/ + +/* + * function to minify a string and write to a file + * + * @param {String} source The source JS + * @param {String} dest The file destination + */ +function minifyToFile(source, dest) { + var ast, ugly; - ast = uglify.parser.parse(output); + ast = uglify.parser.parse(source); ast = uglify.uglify.ast_mangle(ast); ast = uglify.uglify.ast_squeeze(ast); ugly = uglify.uglify.gen_code(ast); - - makeFile('./underscore.date.min.js', ugly); + + makeFile('./' + dest + '.min.js', ugly); } + +/********************************************* + JSHint +*********************************************/ + + function logError(error) { console.log('==== ' + error.id + ' ' + error.line + ':' + error.character); console.log(' ' + error.reason); console.log(' ' + error.evidence); } -(function(){ - var source = fs.readFileSync('./underscore.date.js', 'utf8'); +function hint(source, name) { + var passed = jshint.JSHINT(source, JSHINT_CONFIG); - var passed = jshint.JSHINT(source, config); - if (passed) { - console.log(' passed jshint '); - minify(); + console.log(name + ' passed jshint '); + return true; } else { console.log('============================================'); - console.log(' failed jshint '); + console.log(name + ' failed jshint '); jshint.JSHINT.errors.forEach(logError); console.log('============================================'); + return false; + } +} + + +/********************************************* + Lang +*********************************************/ + + +(function(){ + var allSource = '', + i, + failures = 0, + source; + for (i = 0; i < LANGS.length; i++) { + source = fs.readFileSync('./lang/' + LANGS[i] + '.js', 'utf8'); + if (hint(source, 'lang/' + LANGS[i])) { + minifyToFile(source, 'lang/' + LANGS[i]); + allSource += source; + } else { + failures ++; + } + } + if (failures === 0) { + minifyToFile(allSource, 'lang/all'); + } +})(); + + +/********************************************* + Main +*********************************************/ + + +(function(){ + var source = fs.readFileSync('./underscore.date.js', 'utf8'); + if (hint(source, 'underscore.date')) { + minifyToFile(source, 'underscore.date'); } })(); \ No newline at end of file diff --git a/lang/all.min.js b/lang/all.min.js new file mode 100644 index 000000000..68d4cc8a4 --- /dev/null +++ b/lang/all.min.js @@ -0,0 +1 @@ +(function(){var a={months:"Janvier_Février_Mars_Avril_Mai_Juin_Juillet_Aout_Septembre_Octobre_Novembre_Décembre".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Jui_Jui_Aou_Sep_Oct_Nov_Dec".split("_"),weekdays:"Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi".split("_"),weekdaysShort:"Dim_Lun_Mar_Mer_Jeu_Ven_Sam".split("_"),relativeTime:{future:"in %s",past:"il y a %s",s:"secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"une année",yy:"%d années"},ordinal:function(a){return~~(a%100/10)===1?"er":"ème"}};typeof module!="undefined"&&(module.exports=a),typeof window!="undefined"&&this._date&&this._date.lang&&this._date.lang("fr",a)})(),function(){var a={months:"Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settebre_Ottobre_Novembre_Dicembre".split("_"),monthsShort:"Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),weekdays:"Domenica_Lunedi_Martedi_Mercoledi_Giovedi_Venerdi_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),relativeTime:{future:"in %s",past:"%s fa",s:"secondi",m:"un minuto",mm:"%d minuti",h:"un ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(){return"º"}};typeof module!="undefined"&&(module.exports=a),typeof window!="undefined"&&this._date&&this._date.lang&&this._date.lang("it",a)}(),function(){var a={months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Feb_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:function(a){return"º"}};typeof module!="undefined"&&(module.exports=a),typeof window!="undefined"&&this._date&&this._date.lang&&this._date.lang("pt",a)}() \ No newline at end of file diff --git a/lang/fr.js b/lang/fr.js index 00c591971..b2d4e7bf7 100644 --- a/lang/fr.js +++ b/lang/fr.js @@ -19,7 +19,7 @@ y : "une année", yy : "%d années" }, - ordinal : function(number) { + ordinal : function (number) { return (~~ (number % 100 / 10) === 1) ? 'er' : 'ème'; } }; diff --git a/lang/fr.min.js b/lang/fr.min.js new file mode 100644 index 000000000..f3b1bcd66 --- /dev/null +++ b/lang/fr.min.js @@ -0,0 +1 @@ +(function(){var a={months:"Janvier_Février_Mars_Avril_Mai_Juin_Juillet_Aout_Septembre_Octobre_Novembre_Décembre".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Jui_Jui_Aou_Sep_Oct_Nov_Dec".split("_"),weekdays:"Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi".split("_"),weekdaysShort:"Dim_Lun_Mar_Mer_Jeu_Ven_Sam".split("_"),relativeTime:{future:"in %s",past:"il y a %s",s:"secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"une année",yy:"%d années"},ordinal:function(a){return~~(a%100/10)===1?"er":"ème"}};typeof module!="undefined"&&(module.exports=a),typeof window!="undefined"&&this._date&&this._date.lang&&this._date.lang("fr",a)})() \ No newline at end of file diff --git a/lang/it.min.js b/lang/it.min.js new file mode 100644 index 000000000..ae9bc0d8c --- /dev/null +++ b/lang/it.min.js @@ -0,0 +1 @@ +(function(){var a={months:"Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settebre_Ottobre_Novembre_Dicembre".split("_"),monthsShort:"Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),weekdays:"Domenica_Lunedi_Martedi_Mercoledi_Giovedi_Venerdi_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),relativeTime:{future:"in %s",past:"%s fa",s:"secondi",m:"un minuto",mm:"%d minuti",h:"un ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(){return"º"}};typeof module!="undefined"&&(module.exports=a),typeof window!="undefined"&&this._date&&this._date.lang&&this._date.lang("it",a)})() \ No newline at end of file diff --git a/lang/pt.min.js b/lang/pt.min.js new file mode 100644 index 000000000..0909f9b3e --- /dev/null +++ b/lang/pt.min.js @@ -0,0 +1 @@ +(function(){var a={months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Feb_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:function(a){return"º"}};typeof module!="undefined"&&(module.exports=a),typeof window!="undefined"&&this._date&&this._date.lang&&this._date.lang("pt",a)})() \ No newline at end of file diff --git a/underscore.date.min.js b/underscore.date.min.js index 76e39f277..0359ac313 100755 --- a/underscore.date.min.js +++ b/underscore.date.min.js @@ -1 +1 @@ -(function(a,b){function i(a,b){var c=a+"";while(c.length11?"pm":"am";case"A":return j>11?"PM":"AM";case"H":return j;case"HH":return i(j,2);case"h":return j%12||12;case"hh":return i(j%12||12,2);case"m":return k;case"mm":return i(k,2);case"s":return l;case"ss":return i(l,2);case"zz":case"z":return(b.toString().match(o)||[""])[0].replace(n,"");default:return d.replace("\\","")}}var e=b.getMonth(),f=b.getDate(),g=b.getFullYear(),h=b.getDay(),j=b.getHours(),k=b.getMinutes(),l=b.getSeconds(),m=/(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|zz?)/g,n=/[^A-Z]/g,o=/\([A-Za-z ]+\)|:[0-9]{2} [A-Z]{3} /g;return d.replace(m,p)}function n(a,b){function i(a,b){switch(a){case"M":case"MM":c[1]=~~b-1;break;case"D":case"DD":case"DDD":case"DDDD":c[2]=~~b;break;case"YY":b=~~b,c[0]=b+(b>70?1900:2e3);break;case"YYYY":c[0]=~~b;break;case"a":case"A":h=b.toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b}}var c=[0],d=/[0-9a-zA-Z]+/g,e=a.match(d),f=b.match(d),g,h;for(g=0;g11?"pm":"am";case"A":return i>11?"PM":"AM";case"H":return i;case"HH":return j(i,2);case"h":return i%12||12;case"hh":return j(i%12||12,2);case"m":return k;case"mm":return j(k,2);case"s":return l;case"ss":return j(l,2);case"zz":case"z":return(b.toString().match(o)||[""])[0].replace(n,"");default:return d.replace("\\","")}}var e=b.getMonth(),f=b.getDate(),g=b.getFullYear(),h=b.getDay(),i=b.getHours(),k=b.getMinutes(),l=b.getSeconds(),m=/(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|zz?)/g,n=/[^A-Z]/g,o=/\([A-Za-z ]+\)|:[0-9]{2} [A-Z]{3} /g;return d.replace(m,p)}function o(a,b){function i(a,b){switch(a){case"M":case"MM":c[1]=~~b-1;break;case"D":case"DD":case"DDD":case"DDDD":c[2]=~~b;break;case"YY":b=~~b,c[0]=b+(b>70?1900:2e3);break;case"YYYY":c[0]=~~b;break;case"a":case"A":h=b.toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b}}var c=[0],d=/[0-9a-zA-Z]+/g,e=a.match(d),f=b.match(d),g,h;for(g=0;g