Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Landing pull request 523. Adds character frequency reporting tool, us…

…e: make freq. Fixes #10372.

More Details:
 - #523
 - http://bugs.jquery.com/ticket/10372
  • Loading branch information...
commit 9f5d56a8b5bdeb1186130f81e514982e089da7a2 1 parent 46219b5
@rwaldron rwaldron authored timmywil committed
Showing with 86 additions and 0 deletions.
  1. +7 −0 Makefile
  2. +79 −0 build/freq.js
View
7 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}
View
79 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 ] );
+ }
+});
+
Please sign in to comment.
Something went wrong with that request. Please try again.