From a3a51656dc23bd1703eb937f96049bec7e0db738 Mon Sep 17 00:00:00 2001 From: Jeff Killingsworth Date: Wed, 2 Jul 2014 13:42:21 -0400 Subject: [PATCH 1/2] added font-weight spread to rendering --- build/angular-word-cloud.js | 64 +++++++++++++++++++++++++++++++-- build/angular-word-cloud.min.js | 4 +-- src/angular-word-cloud.js | 64 +++++++++++++++++++++++++++++++-- 3 files changed, 126 insertions(+), 6 deletions(-) diff --git a/build/angular-word-cloud.js b/build/angular-word-cloud.js index c6f615f..d63a427 100644 --- a/build/angular-word-cloud.js +++ b/build/angular-word-cloud.js @@ -39,7 +39,11 @@ angular.module('vr.directives.wordCloud',[]) var type = angular.isUndefined(attr.type) ? 'list' : attr.type; switch(type) { case 'cloud': - elem.children().eq(0).attr('style',"font-size: "+$interpolate.startSymbol()+" fontSize(word.size) "+$interpolate.endSymbol()+";"); + elem.children().eq(0).attr( + 'style', + "font-size: " + $interpolate.startSymbol() + " fontSize(word.size) " + $interpolate.endSymbol() + ";" + + "font-weight: " + $interpolate.startSymbol() + " fontWeight(word) " + $interpolate.endSymbol() + ";" + ); break; case 'list': break; @@ -68,7 +72,36 @@ angular.module('vr.directives.wordCloud',[]) words = []; } - words = words.map(function(e) { return {word: e.word, size: e.size, rawSize: parseFloat(e.size) }; }); + var min = words.reduce(function(a,b){ + if(a.size < b.size) { + return a; + } + return b; + }).size; + + var max = words.reduce(function(a,b){ + if(a.size > b.size) { + return a; + } + return b; + }).size; + + var uniqueCount = unique( + words.map(function(word){ + return word.size.toString(); + }) + ).length; + + words = words.map(function(e) { + return { + word: e.word, + size: e.size, + rawSize: parseFloat(e.size), + min: min, + max: max, + uniqueCount: uniqueCount + }; + }); scope.mywords = words; }; @@ -80,6 +113,20 @@ angular.module('vr.directives.wordCloud',[]) return size; }; + scope.fontWeight = function(word) { + + var weightRange = (word.max - word.min) / ( word.uniqueCount < 9 ? word.uniqueCount : 9); + + for( var i = 0; i < 10; i++) { + + if ( word.size < (weightRange * i) ){ + return i * 100; + } + } + + return 900; + }; + scope.$watch('words',function() { convertWords(); },true); @@ -90,6 +137,19 @@ angular.module('vr.directives.wordCloud',[]) scope.reverse = newVal.substr(-4).toLowerCase() == 'desc'; }); + function unique(array){ + var u = {}, + a = []; + + for(var i = 0; i < array.length; ++i){ + if(u.hasOwnProperty(array[i])) { + continue; + } + a.push(array[i]); + u[array[i]] = 1; + } + return a; + } } } }; diff --git a/build/angular-word-cloud.min.js b/build/angular-word-cloud.min.js index 8de3a1a..a6364a6 100644 --- a/build/angular-word-cloud.min.js +++ b/build/angular-word-cloud.min.js @@ -1,2 +1,2 @@ -/*! angular-word-cloud 2013-11-18 */ -angular.module("vr.directives.wordCloud",[]).directive("wordCloud",["$interpolate",function(a){return{restrict:"EA",replace:!0,transclude:!0,scope:{words:"=",sort:"@"},template:"
",controller:["$scope","$transclude",function(a,b){a.initClick=function(c){b(function(b,d){a.clickFn=d[c]})}}],compile:function(b,c){var d=angular.isUndefined(c.type)?"list":c.type;switch(d){case"cloud":b.children().eq(0).attr("style","font-size: "+a.startSymbol()+" fontSize(word.size) "+a.endSymbol()+";");break;case"list":}return function(a,b,c){a.clickFn=function(){},angular.isUndefined(c.ngClick)||a.initClick(c.ngClick);var d=function(){var b=angular.copy(a.words);angular.isArray(b)&&b.length>0?angular.isObject(b[0])?(angular.isUndefined(b[0].word)||angular.isUndefined(b[0].size))&&(b=[]):b=b.map(function(a){return{word:a,size:1}}):b=[],b=b.map(function(a){return{word:a.word,size:a.size,rawSize:parseFloat(a.size)}}),a.mywords=b};a.fontSize=function(a){return-1==(""+a).search("(px|em|in|cm|mm|ex|pt|pc|%)+")?a+"em":a},a.$watch("words",function(){d()},!0),a.$watch("sort",function(b){b||(b="no"),a.param="alpha"==b.substr(0,5)?"word":"no"==b?"":"rawSize",a.reverse="desc"==b.substr(-4).toLowerCase()})}}}}]); \ No newline at end of file +/*! angular-word-cloud 2014-07-02 */ +angular.module("vr.directives.wordCloud",[]).directive("wordCloud",["$interpolate",function(a){return{restrict:"EA",replace:!0,transclude:!0,scope:{words:"=",sort:"@"},template:"
",controller:["$scope","$transclude",function(a,b){a.initClick=function(c){b(function(b,d){a.clickFn=d[c]})}}],compile:function(b,c){var d=angular.isUndefined(c.type)?"list":c.type;switch(d){case"cloud":b.children().eq(0).attr("style","font-size: "+a.startSymbol()+" fontSize(word.size) "+a.endSymbol()+";font-weight: "+a.startSymbol()+" fontWeight(word) "+a.endSymbol()+";");break;case"list":}return function(a,b,c){function d(a){for(var b={},c=[],d=0;d0?angular.isObject(b[0])?(angular.isUndefined(b[0].word)||angular.isUndefined(b[0].size))&&(b=[]):b=b.map(function(a){return{word:a,size:1}}):b=[];var c=b.reduce(function(a,b){return a.sizeb.size?a:b}).size,f=d(b.map(function(a){return a.size.toString()})).length;b=b.map(function(a){return{word:a.word,size:a.size,rawSize:parseFloat(a.size),min:c,max:e,uniqueCount:f}}),a.mywords=b};a.fontSize=function(a){return-1==(""+a).search("(px|em|in|cm|mm|ex|pt|pc|%)+")?a+"em":a},a.fontWeight=function(a){for(var b=(a.max-a.min)/(a.uniqueCount<9?a.uniqueCount:9),c=0;10>c;c++)if(a.size b.size) { + return a; + } + return b; + }).size; + + var uniqueCount = unique( + words.map(function(word){ + return word.size.toString(); + }) + ).length; + + words = words.map(function(e) { + return { + word: e.word, + size: e.size, + rawSize: parseFloat(e.size), + min: min, + max: max, + uniqueCount: uniqueCount + }; + }); scope.mywords = words; }; @@ -80,6 +113,20 @@ angular.module('vr.directives.wordCloud',[]) return size; }; + scope.fontWeight = function(word) { + + var weightRange = (word.max - word.min) / ( word.uniqueCount < 9 ? word.uniqueCount : 9); + + for( var i = 0; i < 10; i++) { + + if ( word.size < (weightRange * i) ){ + return i * 100; + } + } + + return 900; + }; + scope.$watch('words',function() { convertWords(); },true); @@ -90,6 +137,19 @@ angular.module('vr.directives.wordCloud',[]) scope.reverse = newVal.substr(-4).toLowerCase() == 'desc'; }); + function unique(array){ + var u = {}, + a = []; + + for(var i = 0; i < array.length; ++i){ + if(u.hasOwnProperty(array[i])) { + continue; + } + a.push(array[i]); + u[array[i]] = 1; + } + return a; + } } } }; From 81f77ec040620b336139780299ecf61a636bbb49 Mon Sep 17 00:00:00 2001 From: Jeff Killingsworth Date: Wed, 2 Jul 2014 13:55:41 -0400 Subject: [PATCH 2/2] fixed array check --- src/angular-word-cloud.js | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/angular-word-cloud.js b/src/angular-word-cloud.js index d63a427..52bff46 100755 --- a/src/angular-word-cloud.js +++ b/src/angular-word-cloud.js @@ -72,19 +72,24 @@ angular.module('vr.directives.wordCloud',[]) words = []; } - var min = words.reduce(function(a,b){ - if(a.size < b.size) { - return a; - } - return b; - }).size; - - var max = words.reduce(function(a,b){ - if(a.size > b.size) { - return a; - } - return b; - }).size; + var min = 0, + max = 0; + + if ( angular.isArray(words) && words.length > 0 ){ + min = words.reduce(function(a,b){ + if(a.size < b.size) { + return a; + } + return b; + }).size; + + max = words.reduce(function(a,b){ + if(a.size > b.size) { + return a; + } + return b; + }).size; + } var uniqueCount = unique( words.map(function(word){