Commits

Chris Leonello committed b1671a0

Labels off of grid are removed. Added edgeTolerance function to control how close label can be to axis edge and be drawn.

  • Participants
  • Parent commits 101da1c

Comments (0)

Files changed (2)

src/plugins/jqplot.pointLabels.js

 	    // true to escape html entities in the labels.
 	    // If you want to include markup in the labels, set to false.
 	    this.escapeHTML = true;
+	    // prop: edgeTolerance
+	    // number of pixels that the label must be away from an axis
+	    // boundary in order to be drawn.
+	    this.edgeTolerance = 0;
 	    
 	    $.extend(true, this, options);
 	};
             }
         
             for (var i=0; i<p.labels.length; i++) {
+                var pd = this._plotData;
+                var xax = this._xaxis;
+                var yax = this._yaxis;
+                
                 var elem = $('<div class="jqplot-point-label" style="position:absolute"></div>');
                 elem.insertAfter(sctx.canvas);
                 if (p.escapeHTML) {
                 else {
                     elem.html(p.labels[i]);
                 }
-                var xp = this._plotData[i][0];
-                var yp = this._plotData[i][1];
-                var x = this._xaxis.u2p(this._plotData[i][0]) + xoffset(elem);
-                var y = this._yaxis.u2p(this._plotData[i][1]) + yoffset(elem);
-                elem.css('left', x);
-                elem.css('top', y);
+                var ell = xax.u2p(pd[i][0]) + xoffset(elem);
+                var elt = yax.u2p(pd[i][1]) + yoffset(elem);
+                elem.css('left', ell);
+                elem.css('top', elt);
+                var elr = ell + $(elem).width();
+                var elb = elt + $(elem).height();
+                var et = p.edgeTolerance;
+                var scl = $(sctx.canvas).position().left;
+                var sct = $(sctx.canvas).position().top;
+                var scr = sctx.canvas.width + scl;
+                var scb = sctx.canvas.height + sct;
+                // if label is outside of allowed area, remove it
+                if (ell - et < scl || elt - et < sct || elr + et > scr || elb + et > scb) {
+                    $(elem).remove();
+                }
             }
             
         }

tests/pointLabelTests.php

 line1 = [14, 32, 41, 44, 40, 47, 53, 67];
 plot1 = $.jqplot('chart1', [line1], {
     title: 'Chart with Point Labels', 
-    seriesDefaults: {showMarker:false}
+    seriesDefaults: {showMarker:false},
+    axesDefaults:{pad:1.3}
 });
 </pre>     
 
     }
 });
 </pre>
+
+<p class="description">Data point labels have an "edgeTolerance" option.  This options controls how close the data point label can be to an axis edge and still be drawn.  The default of 0 allows labels to touch the axis.  Positive values will increase the required distance between the axis and label, negative values will allow labels to overlap axes.</p>
+      
+<div class="jqPlot" id="chart5" style="height:320px; width:540px;"></div>
+
+<pre class="prettyprint plot">
+line1 = [14, 32, 41, 44, 40, 47, 53, 67];
+plot5 = $.jqplot('chart5', [line1], {
+    title: 'Chart with Point Labels', 
+    seriesDefaults: {
+      showMarker:false,
+      pointLabels: {
+        edgeTolerance: 5
+      }},
+    axes:{
+      xaxis:{min:3}
+    }
+});
+</pre>  
  
 <?php require('closer.php') ?>