From: Tim Wood Date: Sat, 7 May 2011 00:10:47 +0000 (-0700) Subject: adding jshint to build script X-Git-Tag: 0.4.1~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ca23fc769163e49c7f5d8aa1355162b2c0de70a;p=thirdparty%2Fmoment.git adding jshint to build script --- diff --git a/build.js b/build.js index 672bdb617..b4a7affc7 100755 --- a/build.js +++ b/build.js @@ -1,12 +1,40 @@ var fs = require('fs'), - uglify = require('uglify-js'); + uglify = require('uglify-js'), + jshint = require('jshint'); +var config = { + "node" : true, + "es5" : true, + "browser" : true, + "boss" : false, + "curly": true, + "debug": false, + "devel": false, + "eqeqeq": true, + "evil": false, + "forin": false, + "immed": false, + "laxbreak": false, + "newcap": true, + "noarg": true, + "noempty": false, + "nonew": false, + "nomen": false, + "onevar": true, + "plusplus": false, + "regexp": false, + "undef": true, + "sub": true, + "strict": false, + "white": true +} + function makeFile(filename, contents) { fs.writeFileSync(filename, contents); console.log(filename + " saved"); } -(function() { +function minify() { var output = fs.readFileSync('./underscore.date.js', 'utf8'), ast, ugly; @@ -16,4 +44,26 @@ function makeFile(filename, contents) { ugly = uglify.uglify.gen_code(ast); makeFile('./underscore.date.min.js', ugly); -})(); +} + +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'); + + var passed = jshint.JSHINT(source, config); + + if (passed) { + console.log(' passed jshint '); + minify(); + } else { + console.log('============================================'); + console.log(' failed jshint '); + jshint.JSHINT.errors.forEach(logError); + console.log('============================================'); + } +})(); \ No newline at end of file diff --git a/underscore.date.js b/underscore.date.js index 672a0e929..815774539 100644 --- a/underscore.date.js +++ b/underscore.date.js @@ -5,12 +5,10 @@ // // Version 0.4.0 -(function(undefined){ +(function (undefined) { // Establish the root object, "window" in the browser, or "global" on the server. - var root = this; - - // assign variables here so they can be overwritten for i18n or customization - var self = this, _date, + var root = this, + _date, wordsMonths = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], wordsMonthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], wordsWeekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], @@ -30,7 +28,7 @@ y: "a year", yy: "%d years" }, - createOrdinal = function(number) { + createOrdinal = function (number) { var b = number % 10; return (~~ (number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : @@ -49,7 +47,7 @@ } // helper function for _.addTime and _.subtractTime - function dateAddRemove(_this, input, adding){ + function dateAddRemove(_this, input, adding) { var self = _this.date, ms = (input.ms || 0) + (input.s || 0) * 1e3 + // 1000 @@ -92,9 +90,9 @@ // array = new Date(array) // number = new Date(number) // string = new Date(string) - function makeInputDate(input){ + function makeInputDate(input) { return input === undefined ? new Date() : - input instanceof _Date ? input.date : + input.date instanceof Date ? input.date : input instanceof Date ? input : isArray(input) ? dateFromArray(input) : new Date(input); @@ -107,7 +105,7 @@ // date = date.gettime() // array = new Date(array).getTime() // string = new Date(string).getTime() - function makeInputMilliseconds(input){ + function makeInputMilliseconds(input) { return isNaN(input) ? makeInputDate(input).getTime() : input; } @@ -139,15 +137,15 @@ substituteTimeAgo('yy', ~~ years); } - // _Date prototype object - function _Date(input) { + // UnderscoreDate prototype object + function UnderscoreDate(input) { this.date = makeInputDate(input); return this; } - var _DateProto = _Date.prototype = { + UnderscoreDate.prototype = { - format : function(inputString) { + format : function (inputString) { // shortcuts to this and getting time functions // done to save bytes in minification var date = this.date, @@ -172,107 +170,108 @@ var a, b; switch (input) { // MONTH - case 'M' : - return currentMonth + 1; - case 'Mo' : - return (currentMonth + 1) + createOrdinal(currentMonth + 1); - case 'MM' : - return leftZeroFill(currentMonth + 1, 2); - case 'MMM' : - return wordsMonthsShort[currentMonth]; - case 'MMMM' : - return wordsMonths[currentMonth]; - // DAY OF MONTH - case 'D' : - return currentDate; - case 'Do' : - return currentDate + createOrdinal(currentDate); - case 'DD' : - return leftZeroFill(currentDate, 2); - // DAY OF YEAR - case 'DDD' : - a = new Date(currentYear, currentMonth, currentDate); - b = new Date(currentYear, 0, 1); - return ~~ (((a - b) / 864e5) + 1.5); - case 'DDDo' : - a = replaceFunction('DDD'); - return a + createOrdinal(a); - case 'DDDD' : - return leftZeroFill(replaceFunction('DDD'), 3); - // WEEKDAY - case 'd' : - return currentDay; - case 'do' : - return currentDay + createOrdinal(currentDay); - case 'ddd' : - return wordsWeekdaysShort[currentDay]; - case 'dddd' : - return wordsWeekdays[currentDay]; - // WEEK OF YEAR - case 'w' : - a = new Date(currentYear, currentMonth, currentDate - currentDay + 5); - b = new Date(a.getFullYear(), 0, 4); - return ~~ ((a - b) / 864e5 / 7 + 1.5); - case 'wo' : - a = replaceFunction('w'); - return a + createOrdinal(a); - case 'ww' : - return leftZeroFill(replaceFunction('w'), 2); - // YEAR - case 'YY' : - return (currentYear + '').slice(-2); - case 'YYYY' : - return currentYear; - // AM / PM - case 'a' : - return currentHours > 11 ? 'pm' : 'am'; - case 'A' : - return currentHours > 11 ? 'PM' : 'AM'; - // 24 HOUR - case 'H' : - return currentHours; - case 'HH' : - return leftZeroFill(currentHours, 2); - // 12 HOUR - case 'h' : - return currentHours % 12 || 12; - case 'hh' : - return leftZeroFill(currentHours % 12 || 12, 2); - // MINUTE - case 'm' : - return currentMinutes; - case 'mm' : - return leftZeroFill(currentMinutes, 2); - // SECOND - case 's' : - return currentSeconds; - case 'ss' : - return leftZeroFill(currentSeconds, 2); - // TIMEZONE - case 'z' : - return replaceFunction('zz').replace(nonuppercaseLetters, ''); - case 'zz' : - a = currentString.indexOf('('); - if (a > -1) { - return currentString.slice(a + 1, currentString.indexOf(')')); - } - return currentString.slice(currentString.indexOf(':')).replace(nonuppercaseLetters, ''); - // DEFAULT - default : - return input.replace("\\", ""); + case 'M' : + return currentMonth + 1; + case 'Mo' : + return (currentMonth + 1) + createOrdinal(currentMonth + 1); + case 'MM' : + return leftZeroFill(currentMonth + 1, 2); + case 'MMM' : + return wordsMonthsShort[currentMonth]; + case 'MMMM' : + return wordsMonths[currentMonth]; + // DAY OF MONTH + case 'D' : + return currentDate; + case 'Do' : + return currentDate + createOrdinal(currentDate); + case 'DD' : + return leftZeroFill(currentDate, 2); + // DAY OF YEAR + case 'DDD' : + a = new Date(currentYear, currentMonth, currentDate); + b = new Date(currentYear, 0, 1); + return ~~ (((a - b) / 864e5) + 1.5); + case 'DDDo' : + a = replaceFunction('DDD'); + return a + createOrdinal(a); + case 'DDDD' : + return leftZeroFill(replaceFunction('DDD'), 3); + // WEEKDAY + case 'd' : + return currentDay; + case 'do' : + return currentDay + createOrdinal(currentDay); + case 'ddd' : + return wordsWeekdaysShort[currentDay]; + case 'dddd' : + return wordsWeekdays[currentDay]; + // WEEK OF YEAR + case 'w' : + a = new Date(currentYear, currentMonth, currentDate - currentDay + 5); + b = new Date(a.getFullYear(), 0, 4); + return ~~ ((a - b) / 864e5 / 7 + 1.5); + case 'wo' : + a = replaceFunction('w'); + return a + createOrdinal(a); + case 'ww' : + return leftZeroFill(replaceFunction('w'), 2); + // YEAR + case 'YY' : + return (currentYear + '').slice(-2); + case 'YYYY' : + return currentYear; + // AM / PM + case 'a' : + return currentHours > 11 ? 'pm' : 'am'; + case 'A' : + return currentHours > 11 ? 'PM' : 'AM'; + // 24 HOUR + case 'H' : + return currentHours; + case 'HH' : + return leftZeroFill(currentHours, 2); + // 12 HOUR + case 'h' : + return currentHours % 12 || 12; + case 'hh' : + return leftZeroFill(currentHours % 12 || 12, 2); + // MINUTE + case 'm' : + return currentMinutes; + case 'mm' : + return leftZeroFill(currentMinutes, 2); + // SECOND + case 's' : + return currentSeconds; + case 'ss' : + return leftZeroFill(currentSeconds, 2); + // TIMEZONE + case 'z' : + return replaceFunction('zz').replace(nonuppercaseLetters, ''); + case 'zz' : + a = currentString.indexOf('('); + if (a > -1) { + return currentString.slice(a + 1, currentString.indexOf(')')); + } + return currentString.slice(currentString.indexOf(':')).replace(nonuppercaseLetters, ''); + // DEFAULT + default : + return input.replace("\\", ""); } } return inputString.replace(charactersToReplace, replaceFunction); }, - add : function(input) { + add : function (input) { return dateAddRemove(this, input, 1); }, - subtract : function(input) { + subtract : function (input) { return dateAddRemove(this, input, -1); }, - customize : function(input) { + customize : function (input) { var inputOrdinal = input.ordinal, - inputRelativeTime = input.relativeTime; + inputRelativeTime = input.relativeTime, + key; if (input.weekdays) { wordsWeekdays = input.weekdays; } @@ -286,7 +285,7 @@ wordsMonthsShort = input.monthsShort; } if (inputRelativeTime) { - for (var key in inputRelativeTime) { + for (key in inputRelativeTime) { if (inputRelativeTime.hasOwnProperty(key)) { wordsTimeAgo[key] = inputRelativeTime[key]; } @@ -296,17 +295,17 @@ createOrdinal = inputOrdinal; } }, - from : function(time, withoutSuffix, asMilliseconds) { + from : function (time, withoutSuffix, asMilliseconds) { var difference = msApart(this.date, time), string = difference < 0 ? wordsTimeAgo.past : wordsTimeAgo.future; return asMilliseconds ? difference : withoutSuffix ? relativeTime(difference) : string.replace(/%s/i, relativeTime(difference)); }, - fromNow : function(withoutSuffix, asMilliseconds) { + fromNow : function (withoutSuffix, asMilliseconds) { return this.from(_date.now(), withoutSuffix, asMilliseconds); }, - isLeapYear : function() { + isLeapYear : function () { return _date.isLeapYear(this.date.getFullYear()); } }; @@ -322,67 +321,67 @@ // function to convert string input to date function addTime(format, input) { switch (format) { - // MONTH - case 'M' : - // fall through to MM - case 'MM' : - array[1] = ~~input - 1; - break; - // DAY OF MONTH - case 'D' : - // fall through to DDDD - case 'DD' : - // fall through to DDDD - case 'DDD' : - // fall through to DDDD - case 'DDDD' : - array[2] = ~~input; - break; - // YEAR - case 'YY' : - input = ~~input; - array[0] = input + (input > 70 ? 1900 : 2000); - break; - case 'YYYY' : - array[0] = ~~input; - break; - // AM / PM - case 'a' : - // fall through to A - case 'A' : - isPm = (input.toLowerCase() === 'pm'); - break; - // 24 HOUR - case 'H' : - // fall through to hh - case 'HH' : - // fall through to hh - case 'h' : - // fall through to hh - case 'hh' : - array[3] = ~~input; - break; - // MINUTE - case 'm' : - // fall through to mm - case 'mm' : - array[4] = ~~input; - break; - // SECOND - case 's' : - // fall through to ss - case 'ss' : - array[5] = ~~input; - break; + // MONTH + case 'M' : + // fall through to MM + case 'MM' : + array[1] = ~~input - 1; + break; + // DAY OF MONTH + case 'D' : + // fall through to DDDD + case 'DD' : + // fall through to DDDD + case 'DDD' : + // fall through to DDDD + case 'DDDD' : + array[2] = ~~input; + break; + // YEAR + case 'YY' : + input = ~~input; + array[0] = input + (input > 70 ? 1900 : 2000); + break; + case 'YYYY' : + array[0] = ~~input; + break; + // AM / PM + case 'a' : + // fall through to A + case 'A' : + isPm = (input.toLowerCase() === 'pm'); + break; + // 24 HOUR + case 'H' : + // fall through to hh + case 'HH' : + // fall through to hh + case 'h' : + // fall through to hh + case 'hh' : + array[3] = ~~input; + break; + // MINUTE + case 'm' : + // fall through to mm + case 'mm' : + array[4] = ~~input; + break; + // SECOND + case 's' : + // fall through to ss + case 'ss' : + array[5] = ~~input; + break; } } // add input parts to array - string.replace(charactersToPutInArray, function(input) { + string.replace(charactersToPutInArray, function (input) { inputParts.push(input); }); // add format parts to array - format.replace(charactersToPutInArray, function(input) { + format.replace(charactersToPutInArray, function (input) { formatParts.push(input); }); @@ -395,17 +394,17 @@ array[3] += 12; } - return new _Date(array); + return new UnderscoreDate(array); } _date = { - date : function(input, format) { - return format ? makeDateFromStringAndFormat(input, format) : new _Date(input); + date : function (input, format) { + return format ? makeDateFromStringAndFormat(input, format) : new UnderscoreDate(input); }, - now : function(asTimestamp) { + now : function (asTimestamp) { return asTimestamp ? new Date().getTime() : _date.date(); }, - isLeapYear : function(year) { + isLeapYear : function (year) { return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; } }; diff --git a/underscore.date.min.js b/underscore.date.min.js index bc79668b6..f82557a7d 100644 --- a/underscore.date.min.js +++ b/underscore.date.min.js @@ -1 +1 @@ -(function(a){function v(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=[],f=[],g,h;a.replace(d,function(a){e.push(a)}),b.replace(d,function(a){f.push(a)});for(g=0;g11?"pm":"am";case"A":return m>11?"PM":"AM";case"H":return m;case"HH":return k(m,2);case"h":return m%12||12;case"hh":return k(m%12||12,2);case"m":return n;case"mm":return k(n,2);case"s":return o;case"ss":return k(o,2);case"z":return s("zz").replace(r,"");case"zz":b=p.indexOf("(");if(b>-1)return p.slice(b+1,p.indexOf(")"));return p.slice(p.indexOf(":")).replace(r,"");default:return a.replace("\\","")}}var b=this.date,c=b.getMonth(),d=b.getDate(),i=b.getFullYear(),l=b.getDay(),m=b.getHours(),n=b.getMinutes(),o=b.getSeconds(),p=b.toString(),q=/(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|zz?)/g,r=/[^A-Z]/g;return a.replace(q,s)},add:function(a){return l(this,a,1)},subtract:function(a){return l(this,a,-1)},customize:function(a){var b=a.ordinal,c=a.relativeTime;a.weekdays&&(g=a.weekdays),a.weekdaysShort&&(h=a.weekdaysShort),a.months&&(e=a.months),a.monthsShort&&(f=a.monthsShort);if(c)for(var d in c)c.hasOwnProperty(d)&&(i[d]=c[d]);b&&b instanceof Function&&(j=b)},from:function(a,b,c){var d=r(this.date,a),e=d<0?i.past:i.future;return c?d:b?s(d):e.replace(/%s/i,s(d))},fromNow:function(a,b){return this.from(d.now(),a,b)},isLeapYear:function(){return d.isLeapYear(this.date.getFullYear())}};d={date:function(a,b){return b?v(a,b):new t(a)},now:function(a){return a?(new Date).getTime():d.date()},isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0}},typeof window=="undefined"&&typeof module!="undefined"?module.exports=d:b._!==a?b._.mixin(d):b._date=d})() \ No newline at end of file +(function(a){function t(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=[],f=[],g,h;a.replace(d,function(a){e.push(a)}),b.replace(d,function(a){f.push(a)});for(g=0;g11?"pm":"am";case"A":return m>11?"PM":"AM";case"H":return m;case"HH":return j(m,2);case"h":return m%12||12;case"hh":return j(m%12||12,2);case"m":return n;case"mm":return j(n,2);case"s":return o;case"ss":return j(o,2);case"z":return s("zz").replace(r,"");case"zz":b=p.indexOf("(");if(b>-1)return p.slice(b+1,p.indexOf(")"));return p.slice(p.indexOf(":")).replace(r,"");default:return a.replace("\\","")}}var b=this.date,c=b.getMonth(),h=b.getDate(),k=b.getFullYear(),l=b.getDay(),m=b.getHours(),n=b.getMinutes(),o=b.getSeconds(),p=b.toString(),q=/(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|zz?)/g,r=/[^A-Z]/g;return a.replace(q,s)},add:function(a){return k(this,a,1)},subtract:function(a){return k(this,a,-1)},customize:function(a){var b=a.ordinal,c=a.relativeTime,j;a.weekdays&&(f=a.weekdays),a.weekdaysShort&&(g=a.weekdaysShort),a.months&&(d=a.months),a.monthsShort&&(e=a.monthsShort);if(c)for(j in c)c.hasOwnProperty(j)&&(h[j]=c[j]);b&&b instanceof Function&&(i=b)},from:function(a,b,c){var d=q(this.date,a),e=d<0?h.past:h.future;return c?d:b?r(d):e.replace(/%s/i,r(d))},fromNow:function(a,b){return this.from(c.now(),a,b)},isLeapYear:function(){return c.isLeapYear(this.date.getFullYear())}},c={date:function(a,b){return b?t(a,b):new s(a)},now:function(a){return a?(new Date).getTime():c.date()},isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0}},typeof window=="undefined"&&typeof module!="undefined"?module.exports=c:b._!==a?b._.mixin(c):b._date=c})() \ No newline at end of file