diff --git a/Makefile b/Makefile index b91952f60..77219e351 100644 --- a/Makefile +++ b/Makefile @@ -83,6 +83,13 @@ size: jquery min echo "You must have NodeJS installed in order to size jQuery."; \ fi +freq: jquery min + @@if test ! -z ${JS_ENGINE}; then \ + ${JS_ENGINE} ${BUILD_DIR}/freq.js; \ + else \ + echo "You must have NodeJS installed to report the character frequency of minified jQuery."; \ + fi + min: jquery ${JQ_MIN} ${JQ_MIN}: ${JQ} diff --git a/build/freq.js b/build/freq.js new file mode 100644 index 000000000..0549f6af4 --- /dev/null +++ b/build/freq.js @@ -0,0 +1,79 @@ +#! /usr/bin/env node + +var fs = require( "fs" ); + +function isEmptyObject( obj ) { + for ( var name in obj ) { + return false; + } + return true; +} +function extend( obj ) { + var dest = obj, + src = [].slice.call( arguments, 1 ); + + Object.keys( src ).forEach(function( key ) { + var copy = src[ key ]; + + for ( var prop in copy ) { + dest[ prop ] = copy[ prop ]; + } + }); + + return dest; +}; + +function charSort( obj, callback ) { + + var ordered = [], + table = {}, + copied; + + copied = extend({}, obj ); + + (function order() { + + var largest = 0, + c; + + for ( var i in obj ) { + if ( obj[ i ] >= largest ) { + largest = obj[ i ]; + c = i; + } + } + + ordered.push( c ); + delete obj[ c ]; + + if ( !isEmptyObject( obj ) ) { + order(); + } else { + ordered.forEach(function( val ) { + table[ val ] = copied[ val ]; + }); + + callback( table ); + } + + })(); +} +function charFrequency( src, callback ) { + var obj = {}; + + src.replace(/[^\w]|\d/gi, "").split("").forEach(function( c ) { + obj[ c ] ? ++obj[ c ] : ( obj[ c ] = 1 ); + }); + + return charSort( obj, callback ); +} + + +charFrequency( fs.readFileSync( "dist/jquery.min.js", "utf8" ), function( obj ) { + var chr; + + for ( chr in obj ) { + console.log( " " + chr + " " + obj[ chr ] ); + } +}); +