diff options
author | Rick Waldron <waldron.rick@gmail.com> | 2011-10-01 16:58:01 -0400 |
---|---|---|
committer | timmywil <timmywillisn@gmail.com> | 2011-10-01 16:58:01 -0400 |
commit | 9f5d56a8b5bdeb1186130f81e514982e089da7a2 (patch) | |
tree | cf978579a2786b6a61cab00aed7725dc84f4d13f | |
parent | 46219b57baa44cfdd2e7c1bab0227f38f2927508 (diff) | |
download | jquery-9f5d56a8b5bdeb1186130f81e514982e089da7a2.tar.gz jquery-9f5d56a8b5bdeb1186130f81e514982e089da7a2.zip |
Landing pull request 523. Adds character frequency reporting tool, use: make freq. Fixes #10372.
More Details:
- https://github.com/jquery/jquery/pull/523
- http://bugs.jquery.com/ticket/10372
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | build/freq.js | 79 |
2 files changed, 86 insertions, 0 deletions
@@ -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 ] ); + } +}); + |