common.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.charting.scaler.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  7. dojo._hasResource["dojox.charting.scaler.common"] = true;
  8. dojo.provide("dojox.charting.scaler.common");
  9. (function(){
  10. var eq = function(/*Number*/ a, /*Number*/ b){
  11. // summary: compare two FP numbers for equality
  12. return Math.abs(a - b) <= 1e-6 * (Math.abs(a) + Math.abs(b)); // Boolean
  13. };
  14. dojo.mixin(dojox.charting.scaler.common, {
  15. findString: function(/*String*/ val, /*Array*/ text){
  16. val = val.toLowerCase();
  17. for(var i = 0; i < text.length; ++i){
  18. if(val == text[i]){ return true; }
  19. }
  20. return false;
  21. },
  22. getNumericLabel: function(/*Number*/ number, /*Number*/ precision, /*Object*/ kwArgs){
  23. var def = "";
  24. if(dojo.number){
  25. def = (kwArgs.fixed ? dojo.number.format(number, {places : precision < 0 ? -precision : 0}) :
  26. dojo.number.format(number)) || "";
  27. }else{
  28. def = kwArgs.fixed ? number.toFixed(precision < 0 ? -precision : 0) : number.toString();
  29. }
  30. if(kwArgs.labelFunc){
  31. var r = kwArgs.labelFunc(def, number, precision);
  32. if(r){ return r; }
  33. // else fall through to the regular labels search
  34. }
  35. if(kwArgs.labels){
  36. // classic binary search
  37. var l = kwArgs.labels, lo = 0, hi = l.length;
  38. while(lo < hi){
  39. var mid = Math.floor((lo + hi) / 2), val = l[mid].value;
  40. if(val < number){
  41. lo = mid + 1;
  42. }else{
  43. hi = mid;
  44. }
  45. }
  46. // lets take into account FP errors
  47. if(lo < l.length && eq(l[lo].value, number)){
  48. return l[lo].text;
  49. }
  50. --lo;
  51. if(lo >= 0 && lo < l.length && eq(l[lo].value, number)){
  52. return l[lo].text;
  53. }
  54. lo += 2;
  55. if(lo < l.length && eq(l[lo].value, number)){
  56. return l[lo].text;
  57. }
  58. // otherwise we will produce a number
  59. }
  60. return def;
  61. }
  62. });
  63. })();
  64. }