123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.charting.axis2d.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.charting.axis2d.common"] = true;
- dojo.provide("dojox.charting.axis2d.common");
- dojo.require("dojox.gfx");
- (function(){
- var g = dojox.gfx;
- var clearNode = function(s){
- s.marginLeft = "0px";
- s.marginTop = "0px";
- s.marginRight = "0px";
- s.marginBottom = "0px";
- s.paddingLeft = "0px";
- s.paddingTop = "0px";
- s.paddingRight = "0px";
- s.paddingBottom = "0px";
- s.borderLeftWidth = "0px";
- s.borderTopWidth = "0px";
- s.borderRightWidth = "0px";
- s.borderBottomWidth = "0px";
- };
- var getBoxWidth = function(n){
- // marginBox is incredibly slow, so avoid it if we can
- if(n["getBoundingClientRect"]){
- var bcr = n.getBoundingClientRect();
- return bcr.width || (bcr.right - bcr.left);
- }else{
- return dojo.marginBox(n).w;
- }
- };
- dojo.mixin(dojox.charting.axis2d.common, {
- // summary:
- // Common methods to be used by any axis. This is considered "static".
- createText: {
- gfx: function(chart, creator, x, y, align, text, font, fontColor){
- // summary:
- // Use dojox.gfx to create any text.
- // chart: dojox.charting.Chart2D
- // The chart to create the text into.
- // creator: dojox.gfx.Surface
- // The graphics surface to use for creating the text.
- // x: Number
- // Where to create the text along the x axis (CSS left).
- // y: Number
- // Where to create the text along the y axis (CSS top).
- // align: String
- // How to align the text. Can be "left", "right", "center".
- // text: String
- // The text to render.
- // font: String
- // The font definition, a la CSS "font".
- // fontColor: String|dojo.Color
- // The color of the resultant text.
- // returns: dojox.gfx.Text
- // The resultant GFX object.
- return creator.createText({
- x: x, y: y, text: text, align: align
- }).setFont(font).setFill(fontColor); // dojox.gfx.Text
- },
- html: function(chart, creator, x, y, align, text, font, fontColor, labelWidth){
- // summary:
- // Use the HTML DOM to create any text.
- // chart: dojox.charting.Chart2D
- // The chart to create the text into.
- // creator: dojox.gfx.Surface
- // The graphics surface to use for creating the text.
- // x: Number
- // Where to create the text along the x axis (CSS left).
- // y: Number
- // Where to create the text along the y axis (CSS top).
- // align: String
- // How to align the text. Can be "left", "right", "center".
- // text: String
- // The text to render.
- // font: String
- // The font definition, a la CSS "font".
- // fontColor: String|dojo.Color
- // The color of the resultant text.
- // labelWidth: Number?
- // The maximum width of the resultant DOM node.
- // returns: DOMNode
- // The resultant DOMNode (a "div" element).
- // setup the text node
- var p = dojo.doc.createElement("div"), s = p.style, boxWidth;
- clearNode(s);
- s.font = font;
- p.innerHTML = String(text).replace(/\s/g, " ");
- s.color = fontColor;
- // measure the size
- s.position = "absolute";
- s.left = "-10000px";
- dojo.body().appendChild(p);
- var size = g.normalizedLength(g.splitFontString(font).size);
- // do we need to calculate the label width?
- if(!labelWidth){
- boxWidth = getBoxWidth(p);
- }
- // new settings for the text node
- dojo.body().removeChild(p);
- s.position = "relative";
- if(labelWidth){
- s.width = labelWidth + "px";
- // s.border = "1px dotted grey";
- switch(align){
- case "middle":
- s.textAlign = "center";
- s.left = (x - labelWidth / 2) + "px";
- break;
- case "end":
- s.textAlign = "right";
- s.left = (x - labelWidth) + "px";
- break;
- default:
- s.left = x + "px";
- s.textAlign = "left";
- break;
- }
- }else{
- switch(align){
- case "middle":
- s.left = Math.floor(x - boxWidth / 2) + "px";
- // s.left = Math.floor(x - p.offsetWidth / 2) + "px";
- break;
- case "end":
- s.left = Math.floor(x - boxWidth) + "px";
- // s.left = Math.floor(x - p.offsetWidth) + "px";
- break;
- //case "start":
- default:
- s.left = Math.floor(x) + "px";
- break;
- }
- }
- s.top = Math.floor(y - size) + "px";
- s.whiteSpace = "nowrap"; // hack for WebKit
- // setup the wrapper node
- var wrap = dojo.doc.createElement("div"), w = wrap.style;
- clearNode(w);
- w.width = "0px";
- w.height = "0px";
- // insert nodes
- wrap.appendChild(p)
- chart.node.insertBefore(wrap, chart.node.firstChild);
- return wrap; // DOMNode
- }
- }
- });
- })();
- }
|