reportbuilder 1.2.5 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +6 -0
  3. data/Manifest.txt +377 -0
  4. data/data/flot/API.txt +1024 -0
  5. data/data/flot/FAQ.txt +71 -0
  6. data/data/flot/LICENSE.txt +22 -0
  7. data/data/flot/Makefile +15 -0
  8. data/data/flot/NEWS.txt +340 -0
  9. data/data/flot/PLUGINS.txt +105 -0
  10. data/data/flot/README.txt +81 -0
  11. data/data/flot/examples/ajax.html +143 -0
  12. data/data/flot/examples/annotating.html +75 -0
  13. data/data/flot/examples/arrow-down.gif +0 -0
  14. data/data/flot/examples/arrow-left.gif +0 -0
  15. data/data/flot/examples/arrow-right.gif +0 -0
  16. data/data/flot/examples/arrow-up.gif +0 -0
  17. data/data/flot/examples/basic.html +38 -0
  18. data/data/flot/examples/data-eu-gdp-growth-1.json +4 -0
  19. data/data/flot/examples/data-eu-gdp-growth-2.json +4 -0
  20. data/data/flot/examples/data-eu-gdp-growth-3.json +4 -0
  21. data/data/flot/examples/data-eu-gdp-growth-4.json +4 -0
  22. data/data/flot/examples/data-eu-gdp-growth-5.json +4 -0
  23. data/data/flot/examples/data-eu-gdp-growth.json +4 -0
  24. data/data/flot/examples/data-japan-gdp-growth.json +4 -0
  25. data/data/flot/examples/data-usa-gdp-growth.json +4 -0
  26. data/data/flot/examples/dual-axis.html +39 -0
  27. data/data/flot/examples/graph-types.html +75 -0
  28. data/data/flot/examples/hs-2004-27-a-large_web.jpg +0 -0
  29. data/data/flot/examples/image.html +45 -0
  30. data/data/flot/examples/index.html +43 -0
  31. data/data/flot/examples/interacting.html +93 -0
  32. data/data/flot/examples/layout.css +6 -0
  33. data/data/flot/examples/navigate.html +118 -0
  34. data/data/flot/examples/selection.html +114 -0
  35. data/data/flot/examples/setting-options.html +65 -0
  36. data/data/flot/examples/stacking.html +77 -0
  37. data/data/flot/examples/thresholding.html +54 -0
  38. data/data/flot/examples/time.html +71 -0
  39. data/data/flot/examples/tracking.html +95 -0
  40. data/data/flot/examples/turning-series.html +98 -0
  41. data/data/flot/examples/visitors.html +90 -0
  42. data/data/flot/examples/zooming.html +98 -0
  43. data/data/flot/excanvas.js +1427 -0
  44. data/data/flot/excanvas.min.js +1 -0
  45. data/data/flot/jquery.colorhelpers.js +174 -0
  46. data/data/flot/jquery.colorhelpers.min.js +1 -0
  47. data/data/flot/jquery.flot.crosshair.js +156 -0
  48. data/data/flot/jquery.flot.crosshair.min.js +1 -0
  49. data/data/flot/jquery.flot.image.js +237 -0
  50. data/data/flot/jquery.flot.image.min.js +1 -0
  51. data/data/flot/jquery.flot.js +2119 -0
  52. data/data/flot/jquery.flot.min.js +1 -0
  53. data/data/flot/jquery.flot.navigate.js +272 -0
  54. data/data/flot/jquery.flot.navigate.min.js +1 -0
  55. data/data/flot/jquery.flot.selection.js +299 -0
  56. data/data/flot/jquery.flot.selection.min.js +1 -0
  57. data/data/flot/jquery.flot.stack.js +152 -0
  58. data/data/flot/jquery.flot.stack.min.js +1 -0
  59. data/data/flot/jquery.flot.threshold.js +103 -0
  60. data/data/flot/jquery.flot.threshold.min.js +1 -0
  61. data/data/flot/jquery.js +4376 -0
  62. data/data/flot/jquery.min.js +19 -0
  63. data/data/jqplot/MIT-LICENSE.txt +21 -0
  64. data/data/jqplot/README.txt +73 -0
  65. data/data/jqplot/changes.txt +261 -0
  66. data/data/jqplot/copyright.txt +33 -0
  67. data/data/jqplot/docs/files/MIT-LICENSE-txt.html +39 -0
  68. data/data/jqplot/docs/files/changes-txt.html +39 -0
  69. data/data/jqplot/docs/files/gpl-2-0-txt.html +39 -0
  70. data/data/jqplot/docs/files/images/background.jpg +0 -0
  71. data/data/jqplot/docs/files/images/basicline.png +0 -0
  72. data/data/jqplot/docs/files/images/basiclogaxis.png +0 -0
  73. data/data/jqplot/docs/files/images/basiclogoptions.png +0 -0
  74. data/data/jqplot/docs/files/images/basicoptions.png +0 -0
  75. data/data/jqplot/docs/files/images/dualaxis.png +0 -0
  76. data/data/jqplot/docs/files/images/logo.jpg +0 -0
  77. data/data/jqplot/docs/files/images/navdocs.png +0 -0
  78. data/data/jqplot/docs/files/images/navdocsover.png +0 -0
  79. data/data/jqplot/docs/files/images/navdownload.png +0 -0
  80. data/data/jqplot/docs/files/images/navdownloadover.png +0 -0
  81. data/data/jqplot/docs/files/images/navexamples.png +0 -0
  82. data/data/jqplot/docs/files/images/navexamplesover.png +0 -0
  83. data/data/jqplot/docs/files/images/navhome.png +0 -0
  84. data/data/jqplot/docs/files/images/navhomeover.png +0 -0
  85. data/data/jqplot/docs/files/images/new.png +0 -0
  86. data/data/jqplot/docs/files/images/sample3.png +0 -0
  87. data/data/jqplot/docs/files/images/samplesm.png +0 -0
  88. data/data/jqplot/docs/files/jqPlotCssStyling-txt.html +39 -0
  89. data/data/jqplot/docs/files/jqPlotOptions-txt.html +292 -0
  90. data/data/jqplot/docs/files/jqplot-axisLabelRenderer-js.html +47 -0
  91. data/data/jqplot/docs/files/jqplot-axisTickRenderer-js.html +69 -0
  92. data/data/jqplot/docs/files/jqplot-canvasGridRenderer-js.html +39 -0
  93. data/data/jqplot/docs/files/jqplot-core-js.html +353 -0
  94. data/data/jqplot/docs/files/jqplot-divTitleRenderer-js.html +39 -0
  95. data/data/jqplot/docs/files/jqplot-lineRenderer-js.html +53 -0
  96. data/data/jqplot/docs/files/jqplot-linearAxisRenderer-js.html +39 -0
  97. data/data/jqplot/docs/files/jqplot-markerRenderer-js.html +65 -0
  98. data/data/jqplot/docs/files/jqplot-shadowRenderer-js.html +61 -0
  99. data/data/jqplot/docs/files/jqplot-shapeRenderer-js.html +63 -0
  100. data/data/jqplot/docs/files/jqplot-themeEngine-js.html +190 -0
  101. data/data/jqplot/docs/files/optionsTutorial-txt.html +119 -0
  102. data/data/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html +45 -0
  103. data/data/jqplot/docs/files/plugins/jqplot-barRenderer-js.html +67 -0
  104. data/data/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html +53 -0
  105. data/data/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html +71 -0
  106. data/data/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html +63 -0
  107. data/data/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html +79 -0
  108. data/data/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html +46 -0
  109. data/data/jqplot/docs/files/plugins/jqplot-cursor-js.html +91 -0
  110. data/data/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html +93 -0
  111. data/data/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html +98 -0
  112. data/data/jqplot/docs/files/plugins/jqplot-dragable-js.html +45 -0
  113. data/data/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html +49 -0
  114. data/data/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html +87 -0
  115. data/data/jqplot/docs/files/plugins/jqplot-highlighter-js.html +80 -0
  116. data/data/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html +45 -0
  117. data/data/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html +49 -0
  118. data/data/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html +62 -0
  119. data/data/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html +103 -0
  120. data/data/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html +65 -0
  121. data/data/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html +93 -0
  122. data/data/jqplot/docs/files/plugins/jqplot-pointLabels-js.html +72 -0
  123. data/data/jqplot/docs/files/plugins/jqplot-trendline-js.html +67 -0
  124. data/data/jqplot/docs/files/usage-txt.html +58 -0
  125. data/data/jqplot/docs/index.html +1 -0
  126. data/data/jqplot/docs/index/Classes.html +58 -0
  127. data/data/jqplot/docs/index/Files.html +34 -0
  128. data/data/jqplot/docs/index/Functions.html +66 -0
  129. data/data/jqplot/docs/index/General.html +46 -0
  130. data/data/jqplot/docs/index/General2.html +46 -0
  131. data/data/jqplot/docs/index/General3.html +46 -0
  132. data/data/jqplot/docs/index/General4.html +50 -0
  133. data/data/jqplot/docs/index/General5.html +34 -0
  134. data/data/jqplot/docs/index/General6.html +58 -0
  135. data/data/jqplot/docs/index/Hooks.html +46 -0
  136. data/data/jqplot/docs/index/Properties.html +50 -0
  137. data/data/jqplot/docs/index/Properties2.html +50 -0
  138. data/data/jqplot/docs/index/Properties3.html +50 -0
  139. data/data/jqplot/docs/index/Properties4.html +34 -0
  140. data/data/jqplot/docs/index/Properties5.html +58 -0
  141. data/data/jqplot/docs/javascript/main.js +836 -0
  142. data/data/jqplot/docs/javascript/searchdata.js +182 -0
  143. data/data/jqplot/docs/search/ClassesA.html +20 -0
  144. data/data/jqplot/docs/search/ClassesG.html +20 -0
  145. data/data/jqplot/docs/search/ClassesJ.html +20 -0
  146. data/data/jqplot/docs/search/ClassesL.html +20 -0
  147. data/data/jqplot/docs/search/ClassesS.html +20 -0
  148. data/data/jqplot/docs/search/ClassesSymbols.html +20 -0
  149. data/data/jqplot/docs/search/ClassesT.html +20 -0
  150. data/data/jqplot/docs/search/FilesJ.html +20 -0
  151. data/data/jqplot/docs/search/FunctionsC.html +20 -0
  152. data/data/jqplot/docs/search/FunctionsD.html +20 -0
  153. data/data/jqplot/docs/search/FunctionsG.html +20 -0
  154. data/data/jqplot/docs/search/FunctionsI.html +20 -0
  155. data/data/jqplot/docs/search/FunctionsM.html +20 -0
  156. data/data/jqplot/docs/search/FunctionsN.html +20 -0
  157. data/data/jqplot/docs/search/FunctionsR.html +20 -0
  158. data/data/jqplot/docs/search/FunctionsS.html +20 -0
  159. data/data/jqplot/docs/search/FunctionsZ.html +20 -0
  160. data/data/jqplot/docs/search/GeneralA.html +20 -0
  161. data/data/jqplot/docs/search/GeneralB.html +20 -0
  162. data/data/jqplot/docs/search/GeneralC.html +20 -0
  163. data/data/jqplot/docs/search/GeneralD.html +20 -0
  164. data/data/jqplot/docs/search/GeneralE.html +20 -0
  165. data/data/jqplot/docs/search/GeneralF.html +20 -0
  166. data/data/jqplot/docs/search/GeneralG.html +20 -0
  167. data/data/jqplot/docs/search/GeneralH.html +20 -0
  168. data/data/jqplot/docs/search/GeneralI.html +20 -0
  169. data/data/jqplot/docs/search/GeneralJ.html +20 -0
  170. data/data/jqplot/docs/search/GeneralL.html +20 -0
  171. data/data/jqplot/docs/search/GeneralM.html +20 -0
  172. data/data/jqplot/docs/search/GeneralN.html +20 -0
  173. data/data/jqplot/docs/search/GeneralO.html +20 -0
  174. data/data/jqplot/docs/search/GeneralP.html +20 -0
  175. data/data/jqplot/docs/search/GeneralR.html +20 -0
  176. data/data/jqplot/docs/search/GeneralS.html +20 -0
  177. data/data/jqplot/docs/search/GeneralSymbols.html +20 -0
  178. data/data/jqplot/docs/search/GeneralT.html +20 -0
  179. data/data/jqplot/docs/search/GeneralU.html +20 -0
  180. data/data/jqplot/docs/search/GeneralV.html +20 -0
  181. data/data/jqplot/docs/search/GeneralW.html +20 -0
  182. data/data/jqplot/docs/search/GeneralX.html +20 -0
  183. data/data/jqplot/docs/search/GeneralY.html +20 -0
  184. data/data/jqplot/docs/search/GeneralZ.html +20 -0
  185. data/data/jqplot/docs/search/HooksA.html +20 -0
  186. data/data/jqplot/docs/search/HooksE.html +20 -0
  187. data/data/jqplot/docs/search/HooksJ.html +20 -0
  188. data/data/jqplot/docs/search/HooksP.html +20 -0
  189. data/data/jqplot/docs/search/NoResults.html +15 -0
  190. data/data/jqplot/docs/search/PropertiesA.html +20 -0
  191. data/data/jqplot/docs/search/PropertiesB.html +20 -0
  192. data/data/jqplot/docs/search/PropertiesC.html +20 -0
  193. data/data/jqplot/docs/search/PropertiesD.html +20 -0
  194. data/data/jqplot/docs/search/PropertiesE.html +20 -0
  195. data/data/jqplot/docs/search/PropertiesF.html +20 -0
  196. data/data/jqplot/docs/search/PropertiesG.html +20 -0
  197. data/data/jqplot/docs/search/PropertiesH.html +20 -0
  198. data/data/jqplot/docs/search/PropertiesI.html +20 -0
  199. data/data/jqplot/docs/search/PropertiesL.html +20 -0
  200. data/data/jqplot/docs/search/PropertiesM.html +20 -0
  201. data/data/jqplot/docs/search/PropertiesN.html +20 -0
  202. data/data/jqplot/docs/search/PropertiesO.html +20 -0
  203. data/data/jqplot/docs/search/PropertiesP.html +20 -0
  204. data/data/jqplot/docs/search/PropertiesR.html +20 -0
  205. data/data/jqplot/docs/search/PropertiesS.html +20 -0
  206. data/data/jqplot/docs/search/PropertiesT.html +20 -0
  207. data/data/jqplot/docs/search/PropertiesU.html +20 -0
  208. data/data/jqplot/docs/search/PropertiesV.html +20 -0
  209. data/data/jqplot/docs/search/PropertiesW.html +20 -0
  210. data/data/jqplot/docs/search/PropertiesX.html +20 -0
  211. data/data/jqplot/docs/search/PropertiesY.html +20 -0
  212. data/data/jqplot/docs/search/PropertiesZ.html +20 -0
  213. data/data/jqplot/docs/styles/1.css +767 -0
  214. data/data/jqplot/docs/styles/2.css +174 -0
  215. data/data/jqplot/docs/styles/main.css +2 -0
  216. data/data/jqplot/examples/.htaccess +1 -0
  217. data/data/jqplot/examples/OHLC.html +333 -0
  218. data/data/jqplot/examples/OHLC2.html +193 -0
  219. data/data/jqplot/examples/area.html +107 -0
  220. data/data/jqplot/examples/axisLabel.html +117 -0
  221. data/data/jqplot/examples/axisLabelsRotatedText.html +131 -0
  222. data/data/jqplot/examples/axisLabelsRotatedText2.html +155 -0
  223. data/data/jqplot/examples/barLinePieStack.html +198 -0
  224. data/data/jqplot/examples/barMissingValues.html +64 -0
  225. data/data/jqplot/examples/barTest.html +283 -0
  226. data/data/jqplot/examples/barTest2.html +74 -0
  227. data/data/jqplot/examples/bezierCurve.html +96 -0
  228. data/data/jqplot/examples/blockPlot.html +149 -0
  229. data/data/jqplot/examples/bubbleChart2.html +253 -0
  230. data/data/jqplot/examples/bubblechart.html +69 -0
  231. data/data/jqplot/examples/catchError.html +53 -0
  232. data/data/jqplot/examples/categoryHorizontalBar.html +81 -0
  233. data/data/jqplot/examples/categoryVsLinearAxes.html +74 -0
  234. data/data/jqplot/examples/chartInTable.html +33 -0
  235. data/data/jqplot/examples/customHighlighterCursorTrendline.html +72 -0
  236. data/data/jqplot/examples/customPieTests.html +73 -0
  237. data/data/jqplot/examples/dataLabels.html +192 -0
  238. data/data/jqplot/examples/dataTracking.html +91 -0
  239. data/data/jqplot/examples/donutTest.html +89 -0
  240. data/data/jqplot/examples/donutTest.js +96 -0
  241. data/data/jqplot/examples/examples.css +19 -0
  242. data/data/jqplot/examples/fillToZero.html +126 -0
  243. data/data/jqplot/examples/filledLine.html +78 -0
  244. data/data/jqplot/examples/filledLineCategoryAxis.html +80 -0
  245. data/data/jqplot/examples/funnelTest.html +82 -0
  246. data/data/jqplot/examples/funnelTest.js +74 -0
  247. data/data/jqplot/examples/gridCustomization.html +56 -0
  248. data/data/jqplot/examples/hiddenPlot.html +216 -0
  249. data/data/jqplot/examples/highlighter.html +95 -0
  250. data/data/jqplot/examples/highlighter2.html +63 -0
  251. data/data/jqplot/examples/horizontalLine.html +51 -0
  252. data/data/jqplot/examples/intticks.html +178 -0
  253. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  254. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  255. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  256. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  257. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  258. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  259. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  260. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  261. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  262. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  263. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  264. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  265. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  266. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  267. data/data/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
  268. data/data/jqplot/examples/jquery-ui/js/jquery-1.4.2.min.js +154 -0
  269. data/data/jqplot/examples/jquery-ui/js/jquery-ui-1.8.1.custom.min.js +756 -0
  270. data/data/jqplot/examples/legendLabels.html +205 -0
  271. data/data/jqplot/examples/legendLabels2.html +228 -0
  272. data/data/jqplot/examples/liz.zip +0 -0
  273. data/data/jqplot/examples/markerStyles.html +44 -0
  274. data/data/jqplot/examples/mekkoChart.html +217 -0
  275. data/data/jqplot/examples/meterGauge.html +132 -0
  276. data/data/jqplot/examples/meterGauge2.html +158 -0
  277. data/data/jqplot/examples/minMaxLines.html +61 -0
  278. data/data/jqplot/examples/missingValues.html +119 -0
  279. data/data/jqplot/examples/multiAxesRotatedText.html +70 -0
  280. data/data/jqplot/examples/multipleBarColors.html +149 -0
  281. data/data/jqplot/examples/multipleLines.html +47 -0
  282. data/data/jqplot/examples/multipleYAxes.html +85 -0
  283. data/data/jqplot/examples/nav.inc +35 -0
  284. data/data/jqplot/examples/pieTest.html +77 -0
  285. data/data/jqplot/examples/pieTest2.html +87 -0
  286. data/data/jqplot/examples/pieTest2.js +80 -0
  287. data/data/jqplot/examples/pieTest3.html +100 -0
  288. data/data/jqplot/examples/pointLabels.html +94 -0
  289. data/data/jqplot/examples/pointLabels2.html +47 -0
  290. data/data/jqplot/examples/prefix.html +90 -0
  291. data/data/jqplot/examples/resizablePlot.html +150 -0
  292. data/data/jqplot/examples/rotatedTickLabels.html +61 -0
  293. data/data/jqplot/examples/rotatedTickLabelsZoom.html +68 -0
  294. data/data/jqplot/examples/seriesCanvasReorder.html +93 -0
  295. data/data/jqplot/examples/seriesUpdate.html +123 -0
  296. data/data/jqplot/examples/shadowTests.html +133 -0
  297. data/data/jqplot/examples/singlePoint.html +70 -0
  298. data/data/jqplot/examples/sparkLine.html +48 -0
  299. data/data/jqplot/examples/stackedBar2.html +104 -0
  300. data/data/jqplot/examples/stackedBar3.html +76 -0
  301. data/data/jqplot/examples/stackedBarCategoryVsLinearAxes.html +121 -0
  302. data/data/jqplot/examples/stackedCategoryAxis.html +89 -0
  303. data/data/jqplot/examples/stackedFilledLine.html +77 -0
  304. data/data/jqplot/examples/stackedLine.html +56 -0
  305. data/data/jqplot/examples/test2.html +64 -0
  306. data/data/jqplot/examples/theming.html +483 -0
  307. data/data/jqplot/examples/trendlineDragableCustomization.html +79 -0
  308. data/data/jqplot/examples/verticalLine.html +52 -0
  309. data/data/jqplot/examples/waterfall.html +135 -0
  310. data/data/jqplot/examples/zoom1.html +125 -0
  311. data/data/jqplot/examples/zoom2.html +73 -0
  312. data/data/jqplot/examples/zoom3.html +69 -0
  313. data/data/jqplot/examples/zoomOptions.html +101 -0
  314. data/data/jqplot/examples/zoomProxy.html +108 -0
  315. data/data/jqplot/excanvas.js +1416 -0
  316. data/data/jqplot/excanvas.min.js +35 -0
  317. data/data/jqplot/gpl-2.0.txt +280 -0
  318. data/data/jqplot/jqPlotCssStyling.txt +53 -0
  319. data/data/jqplot/jqPlotOptions.txt +276 -0
  320. data/data/jqplot/jquery-1.4.1.min.js +152 -0
  321. data/data/jqplot/jquery-1.4.2.min.js +154 -0
  322. data/data/jqplot/jquery.jqplot.css +212 -0
  323. data/data/jqplot/jquery.jqplot.js +7004 -0
  324. data/data/jqplot/jquery.jqplot.min.css +1 -0
  325. data/data/jqplot/jquery.jqplot.min.js +34 -0
  326. data/data/jqplot/optionsTutorial.txt +239 -0
  327. data/data/jqplot/plugins/jqplot.BezierCurveRenderer.js +300 -0
  328. data/data/jqplot/plugins/jqplot.BezierCurveRenderer.min.js +34 -0
  329. data/data/jqplot/plugins/jqplot.barRenderer.js +629 -0
  330. data/data/jqplot/plugins/jqplot.barRenderer.min.js +34 -0
  331. data/data/jqplot/plugins/jqplot.blockRenderer.js +221 -0
  332. data/data/jqplot/plugins/jqplot.blockRenderer.min.js +34 -0
  333. data/data/jqplot/plugins/jqplot.bubbleRenderer.js +724 -0
  334. data/data/jqplot/plugins/jqplot.bubbleRenderer.min.js +34 -0
  335. data/data/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js +187 -0
  336. data/data/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js +34 -0
  337. data/data/jqplot/plugins/jqplot.canvasAxisTickRenderer.js +226 -0
  338. data/data/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js +34 -0
  339. data/data/jqplot/plugins/jqplot.canvasTextRenderer.js +408 -0
  340. data/data/jqplot/plugins/jqplot.canvasTextRenderer.min.js +34 -0
  341. data/data/jqplot/plugins/jqplot.categoryAxisRenderer.js +630 -0
  342. data/data/jqplot/plugins/jqplot.categoryAxisRenderer.min.js +34 -0
  343. data/data/jqplot/plugins/jqplot.cursor.js +952 -0
  344. data/data/jqplot/plugins/jqplot.cursor.min.js +34 -0
  345. data/data/jqplot/plugins/jqplot.dateAxisRenderer.js +313 -0
  346. data/data/jqplot/plugins/jqplot.dateAxisRenderer.min.js +34 -0
  347. data/data/jqplot/plugins/jqplot.donutRenderer.js +876 -0
  348. data/data/jqplot/plugins/jqplot.donutRenderer.min.js +34 -0
  349. data/data/jqplot/plugins/jqplot.dragable.js +206 -0
  350. data/data/jqplot/plugins/jqplot.dragable.min.js +34 -0
  351. data/data/jqplot/plugins/jqplot.enhancedLegendRenderer.js +186 -0
  352. data/data/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js +34 -0
  353. data/data/jqplot/plugins/jqplot.funnelRenderer.js +918 -0
  354. data/data/jqplot/plugins/jqplot.funnelRenderer.min.js +34 -0
  355. data/data/jqplot/plugins/jqplot.highlighter.js +374 -0
  356. data/data/jqplot/plugins/jqplot.highlighter.min.js +34 -0
  357. data/data/jqplot/plugins/jqplot.logAxisRenderer.js +434 -0
  358. data/data/jqplot/plugins/jqplot.logAxisRenderer.min.js +34 -0
  359. data/data/jqplot/plugins/jqplot.mekkoAxisRenderer.js +595 -0
  360. data/data/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js +34 -0
  361. data/data/jqplot/plugins/jqplot.mekkoRenderer.js +419 -0
  362. data/data/jqplot/plugins/jqplot.mekkoRenderer.min.js +34 -0
  363. data/data/jqplot/plugins/jqplot.meterGaugeRenderer.js +1112 -0
  364. data/data/jqplot/plugins/jqplot.meterGaugeRenderer.min.js +34 -0
  365. data/data/jqplot/plugins/jqplot.ohlcRenderer.js +343 -0
  366. data/data/jqplot/plugins/jqplot.ohlcRenderer.min.js +34 -0
  367. data/data/jqplot/plugins/jqplot.pieRenderer.js +749 -0
  368. data/data/jqplot/plugins/jqplot.pieRenderer.min.js +34 -0
  369. data/data/jqplot/plugins/jqplot.pointLabels.js +325 -0
  370. data/data/jqplot/plugins/jqplot.pointLabels.min.js +34 -0
  371. data/data/jqplot/plugins/jqplot.trendline.js +208 -0
  372. data/data/jqplot/plugins/jqplot.trendline.min.js +34 -0
  373. data/data/jqplot/usage.txt +119 -0
  374. data/examples/graph.rb +17 -0
  375. data/lib/reportbuilder.rb +21 -2
  376. data/lib/reportbuilder/builder.rb +31 -3
  377. data/lib/reportbuilder/builder/html.rb +39 -5
  378. data/lib/reportbuilder/graph.rb +252 -0
  379. data/lib/reportbuilder/graph/html_flot.rb +149 -0
  380. data/lib/reportbuilder/graph/html_jqplot.rb +145 -0
  381. data/lib/reportbuilder/image.rb +178 -78
  382. data/lib/reportbuilder/table/rtfbuilder.rb +2 -2
  383. data/test/helper_test.rb +6 -7
  384. data/test/test_graph.rb +44 -0
  385. data/test/test_graph_html_flot.rb +36 -0
  386. data/test/test_graph_html_jqplot.rb +36 -0
  387. data/test/test_html.rb +4 -7
  388. data/test/test_image.rb +35 -7
  389. data/test/test_reportbuilder.rb +4 -6
  390. data/test/test_table.rb +0 -2
  391. metadata +402 -7
  392. metadata.gz.sig +4 -2
@@ -0,0 +1,630 @@
1
+ /**
2
+ * Copyright (c) 2009 - 2010 Chris Leonello
3
+ * jqPlot is currently available for use in all personal or commercial projects
4
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
5
+ * choose the license that best suits your project and use it accordingly.
6
+ *
7
+ * The author would appreciate an email letting him know of any substantial
8
+ * use of jqPlot. You can reach the author at: chris at jqplot dot com
9
+ * or see http://www.jqplot.com/info.php . This is, of course,
10
+ * not required.
11
+ *
12
+ * If you are feeling kind and generous, consider supporting the project by
13
+ * making a donation at: http://www.jqplot.com/donate.php .
14
+ *
15
+ * Thanks for using jqPlot!
16
+ *
17
+ */
18
+ (function($) {
19
+ /**
20
+ * class: $.jqplot.CategoryAxisRenderer
21
+ * A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
22
+ *
23
+ * To use this renderer, include the plugin in your source
24
+ * > <script type="text/javascript" language="javascript" src="plugins/jqplot.categoryAxisRenderer.js"></script>
25
+ *
26
+ * and supply the appropriate options to your plot
27
+ *
28
+ * > {axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}
29
+ **/
30
+ $.jqplot.CategoryAxisRenderer = function(options) {
31
+ $.jqplot.LinearAxisRenderer.call(this);
32
+ // prop: sortMergedLabels
33
+ // True to sort tick labels when labels are created by merging
34
+ // x axis values from multiple series. That is, say you have
35
+ // two series like:
36
+ // > line1 = [[2006, 4], [2008, 9], [2009, 16]];
37
+ // > line2 = [[2006, 3], [2007, 7], [2008, 6]];
38
+ // If no label array is specified, tick labels will be collected
39
+ // from the x values of the series. With sortMergedLabels
40
+ // set to true, tick labels will be:
41
+ // > [2006, 2007, 2008, 2009]
42
+ // With sortMergedLabels set to false, tick labels will be:
43
+ // > [2006, 2008, 2009, 2007]
44
+ //
45
+ // Note, this property is specified on the renderOptions for the
46
+ // axes when creating a plot:
47
+ // > axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}
48
+ this.sortMergedLabels = false;
49
+ };
50
+
51
+ $.jqplot.CategoryAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
52
+ $.jqplot.CategoryAxisRenderer.prototype.constructor = $.jqplot.CategoryAxisRenderer;
53
+
54
+ $.jqplot.CategoryAxisRenderer.prototype.init = function(options){
55
+ this.groups = 1;
56
+ this.groupLabels = [];
57
+ this._groupLabels = [];
58
+ this._grouped = false;
59
+ this._barsPerGroup = null;
60
+ // prop: tickRenderer
61
+ // A class of a rendering engine for creating the ticks labels displayed on the plot,
62
+ // See <$.jqplot.AxisTickRenderer>.
63
+ // this.tickRenderer = $.jqplot.AxisTickRenderer;
64
+ // this.labelRenderer = $.jqplot.AxisLabelRenderer;
65
+ $.extend(true, this, {tickOptions:{formatString:'%d'}}, options);
66
+ var db = this._dataBounds;
67
+ // Go through all the series attached to this axis and find
68
+ // the min/max bounds for this axis.
69
+ for (var i=0; i<this._series.length; i++) {
70
+ var s = this._series[i];
71
+ if (s.groups) {
72
+ this.groups = s.groups;
73
+ }
74
+ var d = s.data;
75
+
76
+ for (var j=0; j<d.length; j++) {
77
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
78
+ if (d[j][0] < db.min || db.min == null) {
79
+ db.min = d[j][0];
80
+ }
81
+ if (d[j][0] > db.max || db.max == null) {
82
+ db.max = d[j][0];
83
+ }
84
+ }
85
+ else {
86
+ if (d[j][1] < db.min || db.min == null) {
87
+ db.min = d[j][1];
88
+ }
89
+ if (d[j][1] > db.max || db.max == null) {
90
+ db.max = d[j][1];
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+ if (this.groupLabels.length) {
97
+ this.groups = this.groupLabels.length;
98
+ }
99
+ };
100
+
101
+
102
+ $.jqplot.CategoryAxisRenderer.prototype.createTicks = function() {
103
+ // we're are operating on an axis here
104
+ var ticks = this._ticks;
105
+ var userTicks = this.ticks;
106
+ var name = this.name;
107
+ // databounds were set on axis initialization.
108
+ var db = this._dataBounds;
109
+ var dim, interval;
110
+ var min, max;
111
+ var pos1, pos2;
112
+ var tt, i;
113
+
114
+ // if we already have ticks, use them.
115
+ if (userTicks.length) {
116
+ // adjust with blanks if we have groups
117
+ if (this.groups > 1 && !this._grouped) {
118
+ var l = userTicks.length;
119
+ var skip = parseInt(l/this.groups, 10);
120
+ var count = 0;
121
+ for (var i=skip; i<l; i+=skip) {
122
+ userTicks.splice(i+count, 0, ' ');
123
+ count++;
124
+ }
125
+ this._grouped = true;
126
+ }
127
+ this.min = 0.5;
128
+ this.max = userTicks.length + 0.5;
129
+ var range = this.max - this.min;
130
+ this.numberTicks = 2*userTicks.length + 1;
131
+ for (i=0; i<userTicks.length; i++){
132
+ tt = this.min + 2 * i * range / (this.numberTicks-1);
133
+ // need a marker before and after the tick
134
+ var t = new this.tickRenderer(this.tickOptions);
135
+ t.showLabel = false;
136
+ t.showMark = true;
137
+ t.setTick(tt, this.name);
138
+ this._ticks.push(t);
139
+ var t = new this.tickRenderer(this.tickOptions);
140
+ t.label = userTicks[i];
141
+ t.showLabel = true;
142
+ t.showMark = false;
143
+ t.showGridline = false;
144
+ t.setTick(tt+0.5, this.name);
145
+ this._ticks.push(t);
146
+ }
147
+ // now add the last tick at the end
148
+ var t = new this.tickRenderer(this.tickOptions);
149
+ t.showLabel = false;
150
+ t.showMark = true;
151
+ t.setTick(tt+1, this.name);
152
+ this._ticks.push(t);
153
+ }
154
+
155
+ // we don't have any ticks yet, let's make some!
156
+ else {
157
+ if (name == 'xaxis' || name == 'x2axis') {
158
+ dim = this._plotDimensions.width;
159
+ }
160
+ else {
161
+ dim = this._plotDimensions.height;
162
+ }
163
+
164
+ // if min, max and number of ticks specified, user can't specify interval.
165
+ if (this.min != null && this.max != null && this.numberTicks != null) {
166
+ this.tickInterval = null;
167
+ }
168
+
169
+ // if max, min, and interval specified and interval won't fit, ignore interval.
170
+ if (this.min != null && this.max != null && this.tickInterval != null) {
171
+ if (parseInt((this.max-this.min)/this.tickInterval, 10) != (this.max-this.min)/this.tickInterval) {
172
+ this.tickInterval = null;
173
+ }
174
+ }
175
+
176
+ // find out how many categories are in the lines and collect labels
177
+ var labels = [];
178
+ var numcats = 0;
179
+ var min = 0.5;
180
+ var max, val;
181
+ var isMerged = false;
182
+ for (var i=0; i<this._series.length; i++) {
183
+ var s = this._series[i];
184
+ for (var j=0; j<s.data.length; j++) {
185
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
186
+ val = s.data[j][0];
187
+ }
188
+ else {
189
+ val = s.data[j][1];
190
+ }
191
+ if ($.inArray(val, labels) == -1) {
192
+ isMerged = true;
193
+ numcats += 1;
194
+ labels.push(val);
195
+ }
196
+ }
197
+ }
198
+
199
+ if (isMerged && this.sortMergedLabels) {
200
+ labels.sort(function(a,b) { return a - b; });
201
+ }
202
+
203
+ // keep a reference to these tick labels to use for redrawing plot (see bug #57)
204
+ this.ticks = labels;
205
+
206
+ // now bin the data values to the right lables.
207
+ for (var i=0; i<this._series.length; i++) {
208
+ var s = this._series[i];
209
+ for (var j=0; j<s.data.length; j++) {
210
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
211
+ val = s.data[j][0];
212
+ }
213
+ else {
214
+ val = s.data[j][1];
215
+ }
216
+ // for category axis, force the values into category bins.
217
+ // we should have the value in the label array now.
218
+ var idx = $.inArray(val, labels)+1;
219
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
220
+ s.data[j][0] = idx;
221
+ }
222
+ else {
223
+ s.data[j][1] = idx;
224
+ }
225
+ }
226
+ }
227
+
228
+ // adjust with blanks if we have groups
229
+ if (this.groups > 1 && !this._grouped) {
230
+ var l = labels.length;
231
+ var skip = parseInt(l/this.groups, 10);
232
+ var count = 0;
233
+ for (var i=skip; i<l; i+=skip+1) {
234
+ labels[i] = ' ';
235
+ }
236
+ this._grouped = true;
237
+ }
238
+
239
+ max = numcats + 0.5;
240
+ if (this.numberTicks == null) {
241
+ this.numberTicks = 2*numcats + 1;
242
+ }
243
+
244
+ var range = max - min;
245
+ this.min = min;
246
+ this.max = max;
247
+ var track = 0;
248
+
249
+ // todo: adjust this so more ticks displayed.
250
+ var maxVisibleTicks = parseInt(3+dim/20, 10);
251
+ var skip = parseInt(numcats/maxVisibleTicks, 10);
252
+
253
+ if (this.tickInterval == null) {
254
+
255
+ this.tickInterval = range / (this.numberTicks-1);
256
+
257
+ }
258
+ // if tickInterval is specified, we will ignore any computed maximum.
259
+ for (var i=0; i<this.numberTicks; i++){
260
+ tt = this.min + i * this.tickInterval;
261
+ var t = new this.tickRenderer(this.tickOptions);
262
+ // if even tick, it isn't a category, it's a divider
263
+ if (i/2 == parseInt(i/2, 10)) {
264
+ t.showLabel = false;
265
+ t.showMark = true;
266
+ }
267
+ else {
268
+ if (skip>0 && track<skip) {
269
+ t.showLabel = false;
270
+ track += 1;
271
+ }
272
+ else {
273
+ t.showLabel = true;
274
+ track = 0;
275
+ }
276
+ t.label = t.formatter(t.formatString, labels[(i-1)/2]);
277
+ t.showMark = false;
278
+ t.showGridline = false;
279
+ }
280
+ if (!this.showTicks) {
281
+ t.showLabel = false;
282
+ t.showMark = false;
283
+ }
284
+ else if (!this.showTickMarks) {
285
+ t.showMark = false;
286
+ }
287
+ t.setTick(tt, this.name);
288
+ this._ticks.push(t);
289
+ }
290
+ }
291
+
292
+ };
293
+
294
+ // called with scope of axis
295
+ $.jqplot.CategoryAxisRenderer.prototype.draw = function(ctx) {
296
+ if (this.show) {
297
+ // populate the axis label and value properties.
298
+ // createTicks is a method on the renderer, but
299
+ // call it within the scope of the axis.
300
+ this.renderer.createTicks.call(this);
301
+ // fill a div with axes labels in the right direction.
302
+ // Need to pregenerate each axis to get it's bounds and
303
+ // position it and the labels correctly on the plot.
304
+ var dim=0;
305
+ var temp;
306
+ // Added for theming.
307
+ if (this._elem) {
308
+ this._elem.empty();
309
+ }
310
+
311
+ this._elem = this._elem || $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');
312
+
313
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
314
+ this._elem.width(this._plotDimensions.width);
315
+ }
316
+ else {
317
+ this._elem.height(this._plotDimensions.height);
318
+ }
319
+
320
+ // create a _label object.
321
+ this.labelOptions.axis = this.name;
322
+ this._label = new this.labelRenderer(this.labelOptions);
323
+ if (this._label.show) {
324
+ var elem = this._label.draw(ctx);
325
+ elem.appendTo(this._elem);
326
+ }
327
+
328
+ if (this.showTicks) {
329
+ var t = this._ticks;
330
+ for (var i=0; i<t.length; i++) {
331
+ var tick = t[i];
332
+ if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
333
+ var elem = tick.draw(ctx);
334
+ elem.appendTo(this._elem);
335
+ }
336
+ }
337
+ }
338
+
339
+ this._groupLabels = [];
340
+ // now make group labels
341
+ for (var i=0; i<this.groupLabels.length; i++)
342
+ {
343
+ var elem = $('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');
344
+ elem.html(this.groupLabels[i]);
345
+ this._groupLabels.push(elem);
346
+ elem.appendTo(this._elem);
347
+ }
348
+ }
349
+ return this._elem;
350
+ };
351
+
352
+ // called with scope of axis
353
+ $.jqplot.CategoryAxisRenderer.prototype.set = function() {
354
+ var dim = 0;
355
+ var temp;
356
+ var w = 0;
357
+ var h = 0;
358
+ var lshow = (this._label == null) ? false : this._label.show;
359
+ if (this.show && this.showTicks) {
360
+ var t = this._ticks;
361
+ for (var i=0; i<t.length; i++) {
362
+ var tick = t[i];
363
+ if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
364
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
365
+ temp = tick._elem.outerHeight(true);
366
+ }
367
+ else {
368
+ temp = tick._elem.outerWidth(true);
369
+ }
370
+ if (temp > dim) {
371
+ dim = temp;
372
+ }
373
+ }
374
+ }
375
+
376
+ var dim2 = 0;
377
+ for (var i=0; i<this._groupLabels.length; i++) {
378
+ var l = this._groupLabels[i];
379
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
380
+ temp = l.outerHeight(true);
381
+ }
382
+ else {
383
+ temp = l.outerWidth(true);
384
+ }
385
+ if (temp > dim2) {
386
+ dim2 = temp;
387
+ }
388
+ }
389
+
390
+ if (lshow) {
391
+ w = this._label._elem.outerWidth(true);
392
+ h = this._label._elem.outerHeight(true);
393
+ }
394
+ if (this.name == 'xaxis') {
395
+ dim += dim2 + h;
396
+ this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
397
+ }
398
+ else if (this.name == 'x2axis') {
399
+ dim += dim2 + h;
400
+ this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
401
+ }
402
+ else if (this.name == 'yaxis') {
403
+ dim += dim2 + w;
404
+ this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
405
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
406
+ this._label._elem.css('width', w+'px');
407
+ }
408
+ }
409
+ else {
410
+ dim += dim2 + w;
411
+ this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
412
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
413
+ this._label._elem.css('width', w+'px');
414
+ }
415
+ }
416
+ }
417
+ };
418
+
419
+ // called with scope of axis
420
+ $.jqplot.CategoryAxisRenderer.prototype.pack = function(pos, offsets) {
421
+ var ticks = this._ticks;
422
+ var max = this.max;
423
+ var min = this.min;
424
+ var offmax = offsets.max;
425
+ var offmin = offsets.min;
426
+ var lshow = (this._label == null) ? false : this._label.show;
427
+
428
+ for (var p in pos) {
429
+ this._elem.css(p, pos[p]);
430
+ }
431
+
432
+ this._offsets = offsets;
433
+ // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
434
+ var pixellength = offmax - offmin;
435
+ var unitlength = max - min;
436
+
437
+ // point to unit and unit to point conversions references to Plot DOM element top left corner.
438
+ this.p2u = function(p){
439
+ return (p - offmin) * unitlength / pixellength + min;
440
+ };
441
+
442
+ this.u2p = function(u){
443
+ return (u - min) * pixellength / unitlength + offmin;
444
+ };
445
+
446
+ if (this.name == 'xaxis' || this.name == 'x2axis'){
447
+ this.series_u2p = function(u){
448
+ return (u - min) * pixellength / unitlength;
449
+ };
450
+ this.series_p2u = function(p){
451
+ return p * unitlength / pixellength + min;
452
+ };
453
+ }
454
+
455
+ else {
456
+ this.series_u2p = function(u){
457
+ return (u - max) * pixellength / unitlength;
458
+ };
459
+ this.series_p2u = function(p){
460
+ return p * unitlength / pixellength + max;
461
+ };
462
+ }
463
+
464
+ if (this.show) {
465
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
466
+ for (i=0; i<ticks.length; i++) {
467
+ var t = ticks[i];
468
+ if (t.show && t.showLabel) {
469
+ var shim;
470
+
471
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
472
+ // will need to adjust auto positioning based on which axis this is.
473
+ var temp = (this.name == 'xaxis') ? 1 : -1;
474
+ switch (t.labelPosition) {
475
+ case 'auto':
476
+ // position at end
477
+ if (temp * t.angle < 0) {
478
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
479
+ }
480
+ // position at start
481
+ else {
482
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
483
+ }
484
+ break;
485
+ case 'end':
486
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
487
+ break;
488
+ case 'start':
489
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
490
+ break;
491
+ case 'middle':
492
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
493
+ break;
494
+ default:
495
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
496
+ break;
497
+ }
498
+ }
499
+ else {
500
+ shim = -t.getWidth()/2;
501
+ }
502
+ var val = this.u2p(t.value) + shim + 'px';
503
+ t._elem.css('left', val);
504
+ t.pack();
505
+ }
506
+ }
507
+
508
+ var labeledge=['bottom', 0];
509
+ if (lshow) {
510
+ var w = this._label._elem.outerWidth(true);
511
+ this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
512
+ if (this.name == 'xaxis') {
513
+ this._label._elem.css('bottom', '0px');
514
+ labeledge = ['bottom', this._label._elem.outerHeight(true)];
515
+ }
516
+ else {
517
+ this._label._elem.css('top', '0px');
518
+ labeledge = ['top', this._label._elem.outerHeight(true)];
519
+ }
520
+ this._label.pack();
521
+ }
522
+
523
+ // draw the group labels
524
+ var step = parseInt(this._ticks.length/this.groups, 10);
525
+ for (i=0; i<this._groupLabels.length; i++) {
526
+ var mid = 0;
527
+ var count = 0;
528
+ for (var j=i*step; j<=(i+1)*step; j++) {
529
+ if (this._ticks[j]._elem && this._ticks[j].label != " ") {
530
+ var t = this._ticks[j]._elem;
531
+ var p = t.position();
532
+ mid += p.left + t.outerWidth(true)/2;
533
+ count++;
534
+ }
535
+ }
536
+ mid = mid/count;
537
+ this._groupLabels[i].css({'left':(mid - this._groupLabels[i].outerWidth(true)/2)});
538
+ this._groupLabels[i].css(labeledge[0], labeledge[1]);
539
+ }
540
+ }
541
+ else {
542
+ for (i=0; i<ticks.length; i++) {
543
+ var t = ticks[i];
544
+ if (t.show && t.showLabel) {
545
+ var shim;
546
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
547
+ // will need to adjust auto positioning based on which axis this is.
548
+ var temp = (this.name == 'yaxis') ? 1 : -1;
549
+ switch (t.labelPosition) {
550
+ case 'auto':
551
+ // position at end
552
+ case 'end':
553
+ if (temp * t.angle < 0) {
554
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
555
+ }
556
+ else {
557
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
558
+ }
559
+ break;
560
+ case 'start':
561
+ if (t.angle > 0) {
562
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
563
+ }
564
+ else {
565
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
566
+ }
567
+ break;
568
+ case 'middle':
569
+ // if (t.angle > 0) {
570
+ // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
571
+ // }
572
+ // else {
573
+ // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
574
+ // }
575
+ shim = -t.getHeight()/2;
576
+ break;
577
+ default:
578
+ shim = -t.getHeight()/2;
579
+ break;
580
+ }
581
+ }
582
+ else {
583
+ shim = -t.getHeight()/2;
584
+ }
585
+
586
+ var val = this.u2p(t.value) + shim + 'px';
587
+ t._elem.css('top', val);
588
+ t.pack();
589
+ }
590
+ }
591
+
592
+ var labeledge=['left', 0];
593
+ if (lshow) {
594
+ var h = this._label._elem.outerHeight(true);
595
+ this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
596
+ if (this.name == 'yaxis') {
597
+ this._label._elem.css('left', '0px');
598
+ labeledge = ['left', this._label._elem.outerWidth(true)];
599
+ }
600
+ else {
601
+ this._label._elem.css('right', '0px');
602
+ labeledge = ['right', this._label._elem.outerWidth(true)];
603
+ }
604
+ this._label.pack();
605
+ }
606
+
607
+ // draw the group labels, position top here, do left after label position.
608
+ var step = parseInt(this._ticks.length/this.groups, 10);
609
+ for (i=0; i<this._groupLabels.length; i++) {
610
+ var mid = 0;
611
+ var count = 0;
612
+ for (var j=i*step; j<=(i+1)*step; j++) {
613
+ if (this._ticks[j]._elem && this._ticks[j].label != " ") {
614
+ var t = this._ticks[j]._elem;
615
+ var p = t.position();
616
+ mid += p.top + t.outerHeight()/2;
617
+ count++;
618
+ }
619
+ }
620
+ mid = mid/count;
621
+ this._groupLabels[i].css({'top':mid - this._groupLabels[i].outerHeight()/2});
622
+ this._groupLabels[i].css(labeledge[0], labeledge[1]);
623
+
624
+ }
625
+ }
626
+ }
627
+ };
628
+
629
+
630
+ })(jQuery);