From 3bcf0fc41856c66a56f13379a514add92c0e9b67 Mon Sep 17 00:00:00 2001 From: Lukas Macko Date: Thu, 9 Jan 2014 12:12:07 +0100 Subject: [PATCH 1/2] precision for x and y axis, escape $ in ticks, remove %s if label is undefined, use custom ticks% --- examples/custom_ticks.html | 70 +++++++++++++++++++++++++++ examples/dollar_in_tickformatter.html | 68 ++++++++++++++++++++++++++ js/jquery.flot.tooltip.js | 25 +++++++--- js/jquery.flot.tooltip.min.js | 4 +- js/jquery.flot.tooltip.source.js | 23 +++++++-- 5 files changed, 177 insertions(+), 13 deletions(-) create mode 100644 examples/custom_ticks.html create mode 100644 examples/dollar_in_tickformatter.html diff --git a/examples/custom_ticks.html b/examples/custom_ticks.html new file mode 100644 index 0000000..a678e4e --- /dev/null +++ b/examples/custom_ticks.html @@ -0,0 +1,70 @@ + + + + + + + + flot.tooltip plugin example page + + + + + + + + + + + + +

flot.tooltip plugin example page

+ +
+ Plot + + + + + diff --git a/examples/dollar_in_tickformatter.html b/examples/dollar_in_tickformatter.html new file mode 100644 index 0000000..5ccebaf --- /dev/null +++ b/examples/dollar_in_tickformatter.html @@ -0,0 +1,68 @@ + + + + + + + + flot.tooltip plugin example page + + + + + + + + + + + + +

flot.tooltip plugin example page

+ +
+ Plot + + + + + diff --git a/js/jquery.flot.tooltip.js b/js/jquery.flot.tooltip.js index cc4e714..2c3a01f 100644 --- a/js/jquery.flot.tooltip.js +++ b/js/jquery.flot.tooltip.js @@ -6,7 +6,7 @@ * author: Krzysztof Urbas @krzysu [myviews.pl] * website: https://github.com/krzysu/flot.tooltip * - * build on 2013-12-21 + * build on 2014-01-09 * released under MIT License, 2012 */ (function ($) { @@ -165,8 +165,10 @@ var percentPattern = /%p\.{0,1}(\d{0,})/; var seriesPattern = /%s/; - var xPattern = /%x\.{0,1}(?:\d{0,})/; - var yPattern = /%y\.{0,1}(?:\d{0,})/; + var xPattern = /%x\.{0,1}(\d{0,})/; + var yPattern = /%y\.{0,1}(\d{0,})/; + var xPatternWithoutPrecision = "%x"; + var yPatternWithoutPrecision = "%y"; var x = item.datapoint[0]; var y = item.datapoint[1]; @@ -185,6 +187,10 @@ if( typeof(item.series.label) !== 'undefined' ) { content = content.replace(seriesPattern, item.series.label); } + else{ + //remove %s if label is undefined + content = content.replace(seriesPattern, ""); + } // time mode axes with custom dateFormat if(this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) { @@ -203,12 +209,19 @@ content = this.adjustValPrecision(yPattern, content, y); } + // change x from number to given label, if given + if(typeof item.series.xaxis.ticks !== 'undefined') { + if(item.series.xaxis.ticks.length > item.dataIndex && !this.isTimeMode('xaxis', item)) + content = content.replace(xPattern, item.series.xaxis.ticks[item.dataIndex].label); + } // if no value customization, use tickFormatter by default - if(typeof item.series.xaxis.tickFormatter !== 'undefined') { - content = content.replace(xPattern, item.series.xaxis.tickFormatter(x, item.series.xaxis)); + if(typeof item.series.xaxis.tickFormatter !== 'undefined' && item.series.xaxis.ticks.length <= item.dataIndex) { + //escape dollar + content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$')); } if(typeof item.series.yaxis.tickFormatter !== 'undefined') { - content = content.replace(yPattern, item.series.yaxis.tickFormatter(y, item.series.yaxis)); + //escape dollar + content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$')); } return content; diff --git a/js/jquery.flot.tooltip.min.js b/js/jquery.flot.tooltip.min.js index 59e634a..e8b5a1f 100644 --- a/js/jquery.flot.tooltip.min.js +++ b/js/jquery.flot.tooltip.min.js @@ -6,7 +6,7 @@ * author: Krzysztof Urbas @krzysu [myviews.pl] * website: https://github.com/krzysu/flot.tooltip * - * build on 2013-12-21 + * build on 2014-01-09 * released under MIT License, 2012 */ -(function(t){var o={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,monthNames:null,dayNames:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},i=function(t){this.tipPosition={x:0,y:0},this.init(t)};i.prototype.init=function(o){function i(t){var o={};o.x=t.pageX,o.y=t.pageY,s.updateTooltipPosition(o)}function e(t,o,i){var e=s.getDomElement();if(i){var n;n=s.stringFormat(s.tooltipOptions.content,i),e.html(n),s.updateTooltipPosition({x:o.pageX,y:o.pageY}),e.css({left:s.tipPosition.x+s.tooltipOptions.shifts.x,top:s.tipPosition.y+s.tooltipOptions.shifts.y}).show(),"function"==typeof s.tooltipOptions.onHover&&s.tooltipOptions.onHover(i,e)}else e.hide().html("")}var s=this;o.hooks.bindEvents.push(function(o,n){s.plotOptions=o.getOptions(),s.plotOptions.tooltip!==!1&&void 0!==s.plotOptions.tooltip&&(s.tooltipOptions=s.plotOptions.tooltipOpts,s.getDomElement(),t(o.getPlaceholder()).bind("plothover",e),t(n).bind("mousemove",i))}),o.hooks.shutdown.push(function(o,s){t(o.getPlaceholder()).unbind("plothover",e),t(s).unbind("mousemove",i)})},i.prototype.getDomElement=function(){var o;return t("#flotTip").length>0?o=t("#flotTip"):(o=t("
").attr("id","flotTip"),o.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&o.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),o},i.prototype.updateTooltipPosition=function(o){var i=t("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,e=t("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;o.x-t(window).scrollLeft()>t(window).innerWidth()-i&&(o.x-=i),o.y-t(window).scrollTop()>t(window).innerHeight()-e&&(o.y-=e),this.tipPosition.x=o.x,this.tipPosition.y=o.y},i.prototype.stringFormat=function(t,o){var i=/%p\.{0,1}(\d{0,})/,e=/%s/,s=/%x\.{0,1}(?:\d{0,})/,n=/%y\.{0,1}(?:\d{0,})/,p=o.datapoint[0],r=o.datapoint[1];return"function"==typeof t&&(t=t(o.series.label,p,r,o)),o.series.percent!==void 0&&(t=this.adjustValPrecision(i,t,o.series.percent)),o.series.label!==void 0&&(t=t.replace(e,o.series.label)),this.isTimeMode("xaxis",o)&&this.isXDateFormat(o)&&(t=t.replace(s,this.timestampToDate(p,this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",o)&&this.isYDateFormat(o)&&(t=t.replace(n,this.timestampToDate(r,this.tooltipOptions.yDateFormat))),"number"==typeof p&&(t=this.adjustValPrecision(s,t,p)),"number"==typeof r&&(t=this.adjustValPrecision(n,t,r)),o.series.xaxis.tickFormatter!==void 0&&(t=t.replace(s,o.series.xaxis.tickFormatter(p,o.series.xaxis))),o.series.yaxis.tickFormatter!==void 0&&(t=t.replace(n,o.series.yaxis.tickFormatter(r,o.series.yaxis))),t},i.prototype.isTimeMode=function(t,o){return o.series[t].options.mode!==void 0&&"time"===o.series[t].options.mode},i.prototype.isXDateFormat=function(){return this.tooltipOptions.xDateFormat!==void 0&&null!==this.tooltipOptions.xDateFormat},i.prototype.isYDateFormat=function(){return this.tooltipOptions.yDateFormat!==void 0&&null!==this.tooltipOptions.yDateFormat},i.prototype.timestampToDate=function(o,i){var e=new Date(1*o);return t.plot.formatDate(e,i,this.tooltipOptions.monthNames,this.tooltipOptions.dayNames)},i.prototype.adjustValPrecision=function(t,o,i){var e,s=o.match(t);return null!==s&&""!==RegExp.$1&&(e=RegExp.$1,i=i.toFixed(e),o=o.replace(t,i)),o};var e=function(t){new i(t)};t.plot.plugins.push({init:e,options:o,name:"tooltip",version:"0.6.1"})})(jQuery); \ No newline at end of file +!function(a){var b={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,monthNames:null,dayNames:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},c=function(a){this.tipPosition={x:0,y:0},this.init(a)};c.prototype.init=function(b){function c(a){var b={};b.x=a.pageX,b.y=a.pageY,e.updateTooltipPosition(b)}function d(a,b,c){var d=e.getDomElement();if(c){var f;f=e.stringFormat(e.tooltipOptions.content,c),d.html(f),e.updateTooltipPosition({x:b.pageX,y:b.pageY}),d.css({left:e.tipPosition.x+e.tooltipOptions.shifts.x,top:e.tipPosition.y+e.tooltipOptions.shifts.y}).show(),"function"==typeof e.tooltipOptions.onHover&&e.tooltipOptions.onHover(c,d)}else d.hide().html("")}var e=this;b.hooks.bindEvents.push(function(b,f){if(e.plotOptions=b.getOptions(),e.plotOptions.tooltip!==!1&&"undefined"!=typeof e.plotOptions.tooltip){e.tooltipOptions=e.plotOptions.tooltipOpts;{e.getDomElement()}a(b.getPlaceholder()).bind("plothover",d),a(f).bind("mousemove",c)}}),b.hooks.shutdown.push(function(b,e){a(b.getPlaceholder()).unbind("plothover",d),a(e).unbind("mousemove",c)})},c.prototype.getDomElement=function(){var b;return a("#flotTip").length>0?b=a("#flotTip"):(b=a("
").attr("id","flotTip"),b.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&b.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),b},c.prototype.updateTooltipPosition=function(b){var c=a("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,d=a("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;b.x-a(window).scrollLeft()>a(window).innerWidth()-c&&(b.x-=c),b.y-a(window).scrollTop()>a(window).innerHeight()-d&&(b.y-=d),this.tipPosition.x=b.x,this.tipPosition.y=b.y},c.prototype.stringFormat=function(a,b){var c=/%p\.{0,1}(\d{0,})/,d=/%s/,e=/%x\.{0,1}(\d{0,})/,f=/%y\.{0,1}(\d{0,})/,g="%x",h="%y",i=b.datapoint[0],j=b.datapoint[1];return"function"==typeof a&&(a=a(b.series.label,i,j,b)),"undefined"!=typeof b.series.percent&&(a=this.adjustValPrecision(c,a,b.series.percent)),a="undefined"!=typeof b.series.label?a.replace(d,b.series.label):a.replace(d,""),this.isTimeMode("xaxis",b)&&this.isXDateFormat(b)&&(a=a.replace(e,this.timestampToDate(i,this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",b)&&this.isYDateFormat(b)&&(a=a.replace(f,this.timestampToDate(j,this.tooltipOptions.yDateFormat))),"number"==typeof i&&(a=this.adjustValPrecision(e,a,i)),"number"==typeof j&&(a=this.adjustValPrecision(f,a,j)),"undefined"!=typeof b.series.xaxis.ticks&&b.series.xaxis.ticks.length>b.dataIndex&&!this.isTimeMode("xaxis",b)&&(a=a.replace(e,b.series.xaxis.ticks[b.dataIndex].label)),"undefined"!=typeof b.series.xaxis.tickFormatter&&b.series.xaxis.ticks.length<=b.dataIndex&&(a=a.replace(g,b.series.xaxis.tickFormatter(i,b.series.xaxis).replace(/\$/g,"$$"))),"undefined"!=typeof b.series.yaxis.tickFormatter&&(a=a.replace(h,b.series.yaxis.tickFormatter(j,b.series.yaxis).replace(/\$/g,"$$"))),a},c.prototype.isTimeMode=function(a,b){return"undefined"!=typeof b.series[a].options.mode&&"time"===b.series[a].options.mode},c.prototype.isXDateFormat=function(){return"undefined"!=typeof this.tooltipOptions.xDateFormat&&null!==this.tooltipOptions.xDateFormat},c.prototype.isYDateFormat=function(){return"undefined"!=typeof this.tooltipOptions.yDateFormat&&null!==this.tooltipOptions.yDateFormat},c.prototype.timestampToDate=function(b,c){var d=new Date(1*b);return a.plot.formatDate(d,c,this.tooltipOptions.monthNames,this.tooltipOptions.dayNames)},c.prototype.adjustValPrecision=function(a,b,c){var d,e=b.match(a);return null!==e&&""!==RegExp.$1&&(d=RegExp.$1,c=c.toFixed(d),b=b.replace(a,c)),b};var d=function(a){new c(a)};a.plot.plugins.push({init:d,options:b,name:"tooltip",version:"0.6.1"})}(jQuery); \ No newline at end of file diff --git a/js/jquery.flot.tooltip.source.js b/js/jquery.flot.tooltip.source.js index 68bf315..d33e930 100644 --- a/js/jquery.flot.tooltip.source.js +++ b/js/jquery.flot.tooltip.source.js @@ -154,8 +154,10 @@ var percentPattern = /%p\.{0,1}(\d{0,})/; var seriesPattern = /%s/; - var xPattern = /%x\.{0,1}(?:\d{0,})/; - var yPattern = /%y\.{0,1}(?:\d{0,})/; + var xPattern = /%x\.{0,1}(\d{0,})/; + var yPattern = /%y\.{0,1}(\d{0,})/; + var xPatternWithoutPrecision = "%x"; + var yPatternWithoutPrecision = "%y"; var x = item.datapoint[0]; var y = item.datapoint[1]; @@ -174,6 +176,10 @@ if( typeof(item.series.label) !== 'undefined' ) { content = content.replace(seriesPattern, item.series.label); } + else{ + //remove %s if label is undefined + content = content.replace(seriesPattern, ""); + } // time mode axes with custom dateFormat if(this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) { @@ -192,12 +198,19 @@ content = this.adjustValPrecision(yPattern, content, y); } + // change x from number to given label, if given + if(typeof item.series.xaxis.ticks !== 'undefined') { + if(item.series.xaxis.ticks.length > item.dataIndex && !this.isTimeMode('xaxis', item)) + content = content.replace(xPattern, item.series.xaxis.ticks[item.dataIndex].label); + } // if no value customization, use tickFormatter by default - if(typeof item.series.xaxis.tickFormatter !== 'undefined') { - content = content.replace(xPattern, item.series.xaxis.tickFormatter(x, item.series.xaxis)); + if(typeof item.series.xaxis.tickFormatter !== 'undefined' && item.series.xaxis.ticks.length <= item.dataIndex) { + //escape dollar + content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$')); } if(typeof item.series.yaxis.tickFormatter !== 'undefined') { - content = content.replace(yPattern, item.series.yaxis.tickFormatter(y, item.series.yaxis)); + //escape dollar + content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$')); } return content; From a7cdda4d17d29bb4a80446b31a8d25724f27cbef Mon Sep 17 00:00:00 2001 From: Lukas Macko Date: Thu, 9 Jan 2014 12:29:57 +0100 Subject: [PATCH 2/2] Fix custom ticks --- examples/custom_ticks.html | 2 +- js/jquery.flot.tooltip.js | 2 +- js/jquery.flot.tooltip.min.js | 2 +- js/jquery.flot.tooltip.source.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/custom_ticks.html b/examples/custom_ticks.html index a678e4e..ac4fcfd 100644 --- a/examples/custom_ticks.html +++ b/examples/custom_ticks.html @@ -51,7 +51,7 @@

flot.tooltip plugin example page

}, tooltip: true, tooltipOpts: { - content: "%s of %x is %y", + content: "%s: value of %x is %y", shifts: { x: -60, y: 25 diff --git a/js/jquery.flot.tooltip.js b/js/jquery.flot.tooltip.js index 2c3a01f..75bedf6 100644 --- a/js/jquery.flot.tooltip.js +++ b/js/jquery.flot.tooltip.js @@ -215,7 +215,7 @@ content = content.replace(xPattern, item.series.xaxis.ticks[item.dataIndex].label); } // if no value customization, use tickFormatter by default - if(typeof item.series.xaxis.tickFormatter !== 'undefined' && item.series.xaxis.ticks.length <= item.dataIndex) { + if(typeof item.series.xaxis.tickFormatter !== 'undefined') { //escape dollar content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$')); } diff --git a/js/jquery.flot.tooltip.min.js b/js/jquery.flot.tooltip.min.js index e8b5a1f..b20b7b9 100644 --- a/js/jquery.flot.tooltip.min.js +++ b/js/jquery.flot.tooltip.min.js @@ -9,4 +9,4 @@ * build on 2014-01-09 * released under MIT License, 2012 */ -!function(a){var b={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,monthNames:null,dayNames:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},c=function(a){this.tipPosition={x:0,y:0},this.init(a)};c.prototype.init=function(b){function c(a){var b={};b.x=a.pageX,b.y=a.pageY,e.updateTooltipPosition(b)}function d(a,b,c){var d=e.getDomElement();if(c){var f;f=e.stringFormat(e.tooltipOptions.content,c),d.html(f),e.updateTooltipPosition({x:b.pageX,y:b.pageY}),d.css({left:e.tipPosition.x+e.tooltipOptions.shifts.x,top:e.tipPosition.y+e.tooltipOptions.shifts.y}).show(),"function"==typeof e.tooltipOptions.onHover&&e.tooltipOptions.onHover(c,d)}else d.hide().html("")}var e=this;b.hooks.bindEvents.push(function(b,f){if(e.plotOptions=b.getOptions(),e.plotOptions.tooltip!==!1&&"undefined"!=typeof e.plotOptions.tooltip){e.tooltipOptions=e.plotOptions.tooltipOpts;{e.getDomElement()}a(b.getPlaceholder()).bind("plothover",d),a(f).bind("mousemove",c)}}),b.hooks.shutdown.push(function(b,e){a(b.getPlaceholder()).unbind("plothover",d),a(e).unbind("mousemove",c)})},c.prototype.getDomElement=function(){var b;return a("#flotTip").length>0?b=a("#flotTip"):(b=a("
").attr("id","flotTip"),b.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&b.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),b},c.prototype.updateTooltipPosition=function(b){var c=a("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,d=a("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;b.x-a(window).scrollLeft()>a(window).innerWidth()-c&&(b.x-=c),b.y-a(window).scrollTop()>a(window).innerHeight()-d&&(b.y-=d),this.tipPosition.x=b.x,this.tipPosition.y=b.y},c.prototype.stringFormat=function(a,b){var c=/%p\.{0,1}(\d{0,})/,d=/%s/,e=/%x\.{0,1}(\d{0,})/,f=/%y\.{0,1}(\d{0,})/,g="%x",h="%y",i=b.datapoint[0],j=b.datapoint[1];return"function"==typeof a&&(a=a(b.series.label,i,j,b)),"undefined"!=typeof b.series.percent&&(a=this.adjustValPrecision(c,a,b.series.percent)),a="undefined"!=typeof b.series.label?a.replace(d,b.series.label):a.replace(d,""),this.isTimeMode("xaxis",b)&&this.isXDateFormat(b)&&(a=a.replace(e,this.timestampToDate(i,this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",b)&&this.isYDateFormat(b)&&(a=a.replace(f,this.timestampToDate(j,this.tooltipOptions.yDateFormat))),"number"==typeof i&&(a=this.adjustValPrecision(e,a,i)),"number"==typeof j&&(a=this.adjustValPrecision(f,a,j)),"undefined"!=typeof b.series.xaxis.ticks&&b.series.xaxis.ticks.length>b.dataIndex&&!this.isTimeMode("xaxis",b)&&(a=a.replace(e,b.series.xaxis.ticks[b.dataIndex].label)),"undefined"!=typeof b.series.xaxis.tickFormatter&&b.series.xaxis.ticks.length<=b.dataIndex&&(a=a.replace(g,b.series.xaxis.tickFormatter(i,b.series.xaxis).replace(/\$/g,"$$"))),"undefined"!=typeof b.series.yaxis.tickFormatter&&(a=a.replace(h,b.series.yaxis.tickFormatter(j,b.series.yaxis).replace(/\$/g,"$$"))),a},c.prototype.isTimeMode=function(a,b){return"undefined"!=typeof b.series[a].options.mode&&"time"===b.series[a].options.mode},c.prototype.isXDateFormat=function(){return"undefined"!=typeof this.tooltipOptions.xDateFormat&&null!==this.tooltipOptions.xDateFormat},c.prototype.isYDateFormat=function(){return"undefined"!=typeof this.tooltipOptions.yDateFormat&&null!==this.tooltipOptions.yDateFormat},c.prototype.timestampToDate=function(b,c){var d=new Date(1*b);return a.plot.formatDate(d,c,this.tooltipOptions.monthNames,this.tooltipOptions.dayNames)},c.prototype.adjustValPrecision=function(a,b,c){var d,e=b.match(a);return null!==e&&""!==RegExp.$1&&(d=RegExp.$1,c=c.toFixed(d),b=b.replace(a,c)),b};var d=function(a){new c(a)};a.plot.plugins.push({init:d,options:b,name:"tooltip",version:"0.6.1"})}(jQuery); \ No newline at end of file +!function(a){var b={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,monthNames:null,dayNames:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},c=function(a){this.tipPosition={x:0,y:0},this.init(a)};c.prototype.init=function(b){function c(a){var b={};b.x=a.pageX,b.y=a.pageY,e.updateTooltipPosition(b)}function d(a,b,c){var d=e.getDomElement();if(c){var f;f=e.stringFormat(e.tooltipOptions.content,c),d.html(f),e.updateTooltipPosition({x:b.pageX,y:b.pageY}),d.css({left:e.tipPosition.x+e.tooltipOptions.shifts.x,top:e.tipPosition.y+e.tooltipOptions.shifts.y}).show(),"function"==typeof e.tooltipOptions.onHover&&e.tooltipOptions.onHover(c,d)}else d.hide().html("")}var e=this;b.hooks.bindEvents.push(function(b,f){if(e.plotOptions=b.getOptions(),e.plotOptions.tooltip!==!1&&"undefined"!=typeof e.plotOptions.tooltip){e.tooltipOptions=e.plotOptions.tooltipOpts;{e.getDomElement()}a(b.getPlaceholder()).bind("plothover",d),a(f).bind("mousemove",c)}}),b.hooks.shutdown.push(function(b,e){a(b.getPlaceholder()).unbind("plothover",d),a(e).unbind("mousemove",c)})},c.prototype.getDomElement=function(){var b;return a("#flotTip").length>0?b=a("#flotTip"):(b=a("
").attr("id","flotTip"),b.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&b.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),b},c.prototype.updateTooltipPosition=function(b){var c=a("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,d=a("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;b.x-a(window).scrollLeft()>a(window).innerWidth()-c&&(b.x-=c),b.y-a(window).scrollTop()>a(window).innerHeight()-d&&(b.y-=d),this.tipPosition.x=b.x,this.tipPosition.y=b.y},c.prototype.stringFormat=function(a,b){var c=/%p\.{0,1}(\d{0,})/,d=/%s/,e=/%x\.{0,1}(\d{0,})/,f=/%y\.{0,1}(\d{0,})/,g="%x",h="%y",i=b.datapoint[0],j=b.datapoint[1];return"function"==typeof a&&(a=a(b.series.label,i,j,b)),"undefined"!=typeof b.series.percent&&(a=this.adjustValPrecision(c,a,b.series.percent)),a="undefined"!=typeof b.series.label?a.replace(d,b.series.label):a.replace(d,""),this.isTimeMode("xaxis",b)&&this.isXDateFormat(b)&&(a=a.replace(e,this.timestampToDate(i,this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",b)&&this.isYDateFormat(b)&&(a=a.replace(f,this.timestampToDate(j,this.tooltipOptions.yDateFormat))),"number"==typeof i&&(a=this.adjustValPrecision(e,a,i)),"number"==typeof j&&(a=this.adjustValPrecision(f,a,j)),"undefined"!=typeof b.series.xaxis.ticks&&b.series.xaxis.ticks.length>b.dataIndex&&!this.isTimeMode("xaxis",b)&&(a=a.replace(e,b.series.xaxis.ticks[b.dataIndex].label)),"undefined"!=typeof b.series.xaxis.tickFormatter&&(a=a.replace(g,b.series.xaxis.tickFormatter(i,b.series.xaxis).replace(/\$/g,"$$"))),"undefined"!=typeof b.series.yaxis.tickFormatter&&(a=a.replace(h,b.series.yaxis.tickFormatter(j,b.series.yaxis).replace(/\$/g,"$$"))),a},c.prototype.isTimeMode=function(a,b){return"undefined"!=typeof b.series[a].options.mode&&"time"===b.series[a].options.mode},c.prototype.isXDateFormat=function(){return"undefined"!=typeof this.tooltipOptions.xDateFormat&&null!==this.tooltipOptions.xDateFormat},c.prototype.isYDateFormat=function(){return"undefined"!=typeof this.tooltipOptions.yDateFormat&&null!==this.tooltipOptions.yDateFormat},c.prototype.timestampToDate=function(b,c){var d=new Date(1*b);return a.plot.formatDate(d,c,this.tooltipOptions.monthNames,this.tooltipOptions.dayNames)},c.prototype.adjustValPrecision=function(a,b,c){var d,e=b.match(a);return null!==e&&""!==RegExp.$1&&(d=RegExp.$1,c=c.toFixed(d),b=b.replace(a,c)),b};var d=function(a){new c(a)};a.plot.plugins.push({init:d,options:b,name:"tooltip",version:"0.6.1"})}(jQuery); \ No newline at end of file diff --git a/js/jquery.flot.tooltip.source.js b/js/jquery.flot.tooltip.source.js index d33e930..888f388 100644 --- a/js/jquery.flot.tooltip.source.js +++ b/js/jquery.flot.tooltip.source.js @@ -204,7 +204,7 @@ content = content.replace(xPattern, item.series.xaxis.ticks[item.dataIndex].label); } // if no value customization, use tickFormatter by default - if(typeof item.series.xaxis.tickFormatter !== 'undefined' && item.series.xaxis.ticks.length <= item.dataIndex) { + if(typeof item.series.xaxis.tickFormatter !== 'undefined') { //escape dollar content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$')); }