Permalink
Browse files

Froze acts_as_dashboard 0.4.0 .

  • Loading branch information...
1 parent 28a8bda commit f7316e6426a4bd00d038192b7f5501be53f8b964 @nickhoffman committed Aug 7, 2010
Showing with 17,483 additions and 0 deletions.
  1. +22 −0 vendor/gems/acts_as_dashboard-0.4.0/.gitignore
  2. +232 −0 vendor/gems/acts_as_dashboard-0.4.0/.specification
  3. +20 −0 vendor/gems/acts_as_dashboard-0.4.0/LICENSE
  4. +54 −0 vendor/gems/acts_as_dashboard-0.4.0/README.rdoc
  5. +23 −0 vendor/gems/acts_as_dashboard-0.4.0/Rakefile
  6. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/VERSION
  7. +180 −0 vendor/gems/acts_as_dashboard-0.4.0/acts_as_dashboard.gemspec
  8. +23 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/USAGE
  9. +112 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/dashboard_generator.rb
  10. +39 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/controller.erb
  11. +86 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/dashboard.css
  12. +307 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/dashboard.js
  13. +14 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/jquery.jqplot.min.js
  14. +404 −0 ...acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.js
  15. +14 −0 ..._as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.min.js
  16. +200 −0 ...board-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.js
  17. +14 −0 ...d-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.min.js
  18. +232 −0 ...hboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisTickRenderer.js
  19. +14 −0 ...rd-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisTickRenderer.min.js
  20. +408 −0 ..._dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasTextRenderer.js
  21. +14 −0 ...hboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasTextRenderer.min.js
  22. +238 −0 ...ashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.categoryAxisRenderer.js
  23. +14 −0 ...oard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.categoryAxisRenderer.min.js
  24. +812 −0 ...gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.cursor.js
  25. +14 −0 .../acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.cursor.min.js
  26. +313 −0 ...as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dateAxisRenderer.js
  27. +14 −0 ...ashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dateAxisRenderer.min.js
  28. +203 −0 ...ms/acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dragable.js
  29. +14 −0 ...cts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dragable.min.js
  30. +359 −0 ...acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.highlighter.js
  31. +14 −0 ..._as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.highlighter.min.js
  32. +434 −0 ..._as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.logAxisRenderer.js
  33. +14 −0 ...dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.logAxisRenderer.min.js
  34. +595 −0 ...s_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoAxisRenderer.js
  35. +14 −0 ...shboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoAxisRenderer.min.js
  36. +308 −0 ...ts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoRenderer.js
  37. +14 −0 ...s_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoRenderer.min.js
  38. +343 −0 ...cts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.ohlcRenderer.js
  39. +14 −0 ...as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.ohlcRenderer.min.js
  40. +333 −0 ...acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pieRenderer.js
  41. +14 −0 ..._as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pieRenderer.min.js
  42. +307 −0 ...acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.js
  43. +273 −0 ...as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.js.orig
  44. +14 −0 ..._as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.min.js
  45. +208 −0 ...s/acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.trendline.js
  46. +14 −0 ...ts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.trendline.min.js
  47. BIN ...ard-0.4.0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-anim_basic_16x16.gif
  48. BIN ...0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png
  49. BIN ...0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png
  50. BIN ...0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png
  51. BIN ...0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png
  52. BIN ...0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png
  53. BIN ...ators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png
  54. BIN ...ors/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png
  55. BIN ...erators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png
  56. BIN ...erators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png
  57. BIN ...0.4.0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_222222_256x240.png
  58. BIN ...0.4.0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png
  59. BIN ...0.4.0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_a83300_256x240.png
  60. BIN ...0.4.0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_cccccc_256x240.png
  61. BIN ...0.4.0/generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_ffffff_256x240.png
  62. +489 −0 ...shboard-0.4.0/generators/dashboard/templates/jquery-ui/css/ui-darkness/jquery-ui-1.8.2.custom.css
  63. +154 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/jquery-ui/js/jquery-1.4.2.min.js
  64. +1,012 −0 ...acts_as_dashboard-0.4.0/generators/dashboard/templates/jquery-ui/js/jquery-ui-1.8.2.custom.min.js
  65. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/jquery.jqplot.min.css
  66. +269 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/CHANGELOG
  67. +30 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/MIT-LICENSE
  68. +30 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/README
  69. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/command.js
  70. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/comparable.js
  71. +1 −0 .../gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/constant_scope.js
  72. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/core.js
  73. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/decorator.js
  74. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/enumerable.js
  75. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/forwardable.js
  76. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/hash.js
  77. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/linked_list.js
  78. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/loader.js
  79. +1 −0 ...or/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/method_chain.js
  80. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/observable.js
  81. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/package.js
  82. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/proxy.js
  83. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/ruby.js
  84. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/set.js
  85. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/stack_trace.js
  86. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/state.js
  87. +16 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/min/stdlib.js
  88. +93 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/command.js
  89. +37 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/comparable.js
  90. +48 −0 .../gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/constant_scope.js
  91. +1,060 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/core.js
  92. +50 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/decorator.js
  93. +505 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/enumerable.js
  94. +22 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/forwardable.js
  95. +334 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/hash.js
  96. +114 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/linked_list.js
  97. +458 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/loader.js
  98. +172 −0 ...or/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/method_chain.js
  99. +55 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/observable.js
  100. +377 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/package.js
  101. +58 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/proxy.js
  102. +44 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/ruby.js
  103. +332 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/set.js
  104. +151 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/stack_trace.js
  105. +95 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/state.js
  106. +2,517 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/js.class-2.1.4/src/stdlib.js
  107. +70 −0 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/show.html.erb
  108. +17 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard.rb
  109. +70 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/app/views/dashboards/show.html.erb
  110. +64 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/class_methods.rb
  111. +25 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/config.rb
  112. +32 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/instance_methods.rb
  113. +68 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/line_graph_widget.rb
  114. +307 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/public/javascripts/dashboard.js
  115. +86 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/public/stylesheets/dashboard.css
  116. +25 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/short_messages_widget.rb
  117. +55 −0 vendor/gems/acts_as_dashboard-0.4.0/lib/acts_as_dashboard/widget.rb
  118. +188 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/acts_as_dashboard/class_method_specs.rb
  119. +57 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/acts_as_dashboard/config_spec.rb
  120. +134 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/acts_as_dashboard/instance_methods_spec.rb
  121. +165 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/acts_as_dashboard/line_graph_widget_spec.rb
  122. +69 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/acts_as_dashboard/short_messages_widget_spec.rb
  123. +6 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/acts_as_dashboard/widget_spec.rb
  124. +15 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/acts_as_dashboard_spec.rb
  125. +171 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/shared/widget_behaviours.rb
  126. +1 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/spec.opts
  127. +10 −0 vendor/gems/acts_as_dashboard-0.4.0/spec/spec_helper.rb
View
22 vendor/gems/acts_as_dashboard-0.4.0/.gitignore
@@ -0,0 +1,22 @@
+## MAC OS
+.DS_Store
+
+## TEXTMATE
+*.tmproj
+tmtags
+
+## EMACS
+*~
+\#*
+.\#*
+
+## VIM
+*.swp
+
+## PROJECT::GENERAL
+coverage
+rdoc
+pkg
+.document
+
+## PROJECT::SPECIFIC
View
232 vendor/gems/acts_as_dashboard-0.4.0/.specification
@@ -0,0 +1,232 @@
+--- !ruby/object:Gem::Specification
+name: acts_as_dashboard
+version: !ruby/object:Gem::Version
+ hash: 15
+ prerelease: false
+ segments:
+ - 0
+ - 4
+ - 0
+ version: 0.4.0
+platform: ruby
+authors:
+- Nick Hoffman
+autorequire:
+bindir: bin
+cert_chain: []
+
+date: 2010-08-05 00:00:00 -04:00
+default_executable:
+dependencies:
+- !ruby/object:Gem::Dependency
+ name: rspec
+ prerelease: false
+ requirement: &id001 !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ hash: 13
+ segments:
+ - 1
+ - 2
+ - 9
+ version: 1.2.9
+ type: :development
+ version_requirements: *id001
+- !ruby/object:Gem::Dependency
+ name: rspec-rails
+ prerelease: false
+ requirement: &id002 !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ hash: 31
+ segments:
+ - 1
+ - 3
+ - 2
+ version: 1.3.2
+ type: :development
+ version_requirements: *id002
+description: acts_as_dashboard makes it easy to create dashboards in Rails apps. Very little configuration is required. Read the docs to get started.
+email: nick@deadorange.com
+executables: []
+
+extensions: []
+
+extra_rdoc_files:
+- LICENSE
+- README.rdoc
+files:
+- .gitignore
+- LICENSE
+- README.rdoc
+- Rakefile
+- VERSION
+- acts_as_dashboard.gemspec
+- generators/dashboard/USAGE
+- generators/dashboard/dashboard_generator.rb
+- generators/dashboard/templates/controller.erb
+- generators/dashboard/templates/dashboard.css
+- generators/dashboard/templates/dashboard.js
+- generators/dashboard/templates/jqplot-0.9.7/jquery.jqplot.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisTickRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisTickRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasTextRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasTextRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.categoryAxisRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.categoryAxisRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.cursor.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.cursor.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dateAxisRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dateAxisRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dragable.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dragable.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.highlighter.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.highlighter.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.logAxisRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.logAxisRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoAxisRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoAxisRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.ohlcRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.ohlcRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pieRenderer.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pieRenderer.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.js.orig
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.min.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.trendline.js
+- generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.trendline.min.js
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-anim_basic_16x16.gif
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_222222_256x240.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_a83300_256x240.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_cccccc_256x240.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_ffffff_256x240.png
+- generators/dashboard/templates/jquery-ui/css/ui-darkness/jquery-ui-1.8.2.custom.css
+- generators/dashboard/templates/jquery-ui/js/jquery-1.4.2.min.js
+- generators/dashboard/templates/jquery-ui/js/jquery-ui-1.8.2.custom.min.js
+- generators/dashboard/templates/jquery.jqplot.min.css
+- generators/dashboard/templates/js.class-2.1.4/CHANGELOG
+- generators/dashboard/templates/js.class-2.1.4/MIT-LICENSE
+- generators/dashboard/templates/js.class-2.1.4/README
+- generators/dashboard/templates/js.class-2.1.4/min/command.js
+- generators/dashboard/templates/js.class-2.1.4/min/comparable.js
+- generators/dashboard/templates/js.class-2.1.4/min/constant_scope.js
+- generators/dashboard/templates/js.class-2.1.4/min/core.js
+- generators/dashboard/templates/js.class-2.1.4/min/decorator.js
+- generators/dashboard/templates/js.class-2.1.4/min/enumerable.js
+- generators/dashboard/templates/js.class-2.1.4/min/forwardable.js
+- generators/dashboard/templates/js.class-2.1.4/min/hash.js
+- generators/dashboard/templates/js.class-2.1.4/min/linked_list.js
+- generators/dashboard/templates/js.class-2.1.4/min/loader.js
+- generators/dashboard/templates/js.class-2.1.4/min/method_chain.js
+- generators/dashboard/templates/js.class-2.1.4/min/observable.js
+- generators/dashboard/templates/js.class-2.1.4/min/package.js
+- generators/dashboard/templates/js.class-2.1.4/min/proxy.js
+- generators/dashboard/templates/js.class-2.1.4/min/ruby.js
+- generators/dashboard/templates/js.class-2.1.4/min/set.js
+- generators/dashboard/templates/js.class-2.1.4/min/stack_trace.js
+- generators/dashboard/templates/js.class-2.1.4/min/state.js
+- generators/dashboard/templates/js.class-2.1.4/min/stdlib.js
+- generators/dashboard/templates/js.class-2.1.4/src/command.js
+- generators/dashboard/templates/js.class-2.1.4/src/comparable.js
+- generators/dashboard/templates/js.class-2.1.4/src/constant_scope.js
+- generators/dashboard/templates/js.class-2.1.4/src/core.js
+- generators/dashboard/templates/js.class-2.1.4/src/decorator.js
+- generators/dashboard/templates/js.class-2.1.4/src/enumerable.js
+- generators/dashboard/templates/js.class-2.1.4/src/forwardable.js
+- generators/dashboard/templates/js.class-2.1.4/src/hash.js
+- generators/dashboard/templates/js.class-2.1.4/src/linked_list.js
+- generators/dashboard/templates/js.class-2.1.4/src/loader.js
+- generators/dashboard/templates/js.class-2.1.4/src/method_chain.js
+- generators/dashboard/templates/js.class-2.1.4/src/observable.js
+- generators/dashboard/templates/js.class-2.1.4/src/package.js
+- generators/dashboard/templates/js.class-2.1.4/src/proxy.js
+- generators/dashboard/templates/js.class-2.1.4/src/ruby.js
+- generators/dashboard/templates/js.class-2.1.4/src/set.js
+- generators/dashboard/templates/js.class-2.1.4/src/stack_trace.js
+- generators/dashboard/templates/js.class-2.1.4/src/state.js
+- generators/dashboard/templates/js.class-2.1.4/src/stdlib.js
+- generators/dashboard/templates/show.html.erb
+- lib/acts_as_dashboard.rb
+- lib/acts_as_dashboard/app/views/dashboards/show.html.erb
+- lib/acts_as_dashboard/class_methods.rb
+- lib/acts_as_dashboard/config.rb
+- lib/acts_as_dashboard/instance_methods.rb
+- lib/acts_as_dashboard/line_graph_widget.rb
+- lib/acts_as_dashboard/public/javascripts/dashboard.js
+- lib/acts_as_dashboard/public/stylesheets/dashboard.css
+- lib/acts_as_dashboard/short_messages_widget.rb
+- lib/acts_as_dashboard/widget.rb
+- spec/acts_as_dashboard/class_method_specs.rb
+- spec/acts_as_dashboard/config_spec.rb
+- spec/acts_as_dashboard/instance_methods_spec.rb
+- spec/acts_as_dashboard/line_graph_widget_spec.rb
+- spec/acts_as_dashboard/short_messages_widget_spec.rb
+- spec/acts_as_dashboard/widget_spec.rb
+- spec/acts_as_dashboard_spec.rb
+- spec/shared/widget_behaviours.rb
+- spec/spec.opts
+- spec/spec_helper.rb
+has_rdoc: true
+homepage: http://github.com/nickhoffman/acts_as_dashboard
+licenses: []
+
+post_install_message:
+rdoc_options:
+- --charset=UTF-8
+require_paths:
+- lib
+required_ruby_version: !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
+ version: "0"
+required_rubygems_version: !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
+ version: "0"
+requirements: []
+
+rubyforge_project:
+rubygems_version: 1.3.7
+signing_key:
+specification_version: 3
+summary: Create dashboards in Rails apps easily.
+test_files:
+- spec/acts_as_dashboard_spec.rb
+- spec/spec_helper.rb
+- spec/shared/widget_behaviours.rb
+- spec/acts_as_dashboard/line_graph_widget_spec.rb
+- spec/acts_as_dashboard/config_spec.rb
+- spec/acts_as_dashboard/class_method_specs.rb
+- spec/acts_as_dashboard/short_messages_widget_spec.rb
+- spec/acts_as_dashboard/instance_methods_spec.rb
+- spec/acts_as_dashboard/widget_spec.rb
View
20 vendor/gems/acts_as_dashboard-0.4.0/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2009 Nick Hoffman
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
View
54 vendor/gems/acts_as_dashboard-0.4.0/README.rdoc
@@ -0,0 +1,54 @@
+= acts_as_dashboard
+
+== Description
+
+acts_as_dashboard makes it easy to create dashboards in Rails apps.
+
+
+== Usage
+
+1. Install the gem.
+
+2. Run the generator. Eg:
+ script/generate dashboard
+
+3. Fire up your web server. Eg:
+ $ script/server
+
+4. Browse to http://localhost:3000/dashboard and watch the magic!
+
+5. Customize the dashboard's widgets in app/controllers/dashboards_controller.rb .
+
+6. Reload the dashboard in your web browser.
+
+
+== To Do
+
+* Make LineGraphWidget#line_colours accept a string or array.
+* Decide if routes should added to config/routes.rb , or loaded by acts_as_dashboard using ActionController::Routing::Routes#add_route . If the latter figure out how to make it work.
+* Make the "show" view template sexy.
+* Add more widget types.
+* If getting a new value for a widget fails, keep the last value, and mark the widget as failing.
+* Set a default value for the Widget class' "update_interval" attribute.
+* Generate the value for the Widget class' "name" attribute automatically so that the user needn't specify it.
+
+
+== Bugs
+
+* At the moment, if there's a single-quote (') in a widget's name or title, the JSON that is used to build the dashboard is invalid. This breaks all of the JavaScript functionality in the dashboard. This needs to be fixed in AAD::InstanceMethods#show .
+
+
+== Note On Patches/Pull Requests
+
+* Fork the project.
+* Make your feature addition or bug fix.
+* Add RSpec specs for it. This is important so I don't break it in a
+ future version unintentionally.
+* Commit, do not mess with rakefile, version, or history.
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
+* Send me a pull request. Bonus points for topic branches.
+
+
+== Copyright
+
+Copyright (c) 2010 Nick Hoffman. See LICENSE for details.
View
23 vendor/gems/acts_as_dashboard-0.4.0/Rakefile
@@ -0,0 +1,23 @@
+require 'rubygems'
+require 'rake'
+
+begin
+ require 'jeweler'
+ Jeweler::Tasks.new do |gemspec|
+ gemspec.name = "acts_as_dashboard"
+ gemspec.summary = %Q{Create dashboards in Rails apps easily.}
+ gemspec.description = %Q{acts_as_dashboard makes it easy to create dashboards in Rails apps. Very little configuration is required. Read the docs to get started.}
+ gemspec.email = "nick@deadorange.com"
+ gemspec.homepage = "http://github.com/nickhoffman/acts_as_dashboard"
+ gemspec.authors = ["Nick Hoffman"]
+
+ gemspec.add_development_dependency "rspec", ">= 1.2.9"
+ gemspec.add_development_dependency "rspec-rails", ">= 1.3.2"
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
+ end
+
+ Jeweler::GemcutterTasks.new
+rescue LoadError
+ puts "Jeweler (or a dependency) is not available. Install it with: gem install jeweler"
+end
+
View
1 vendor/gems/acts_as_dashboard-0.4.0/VERSION
@@ -0,0 +1 @@
+0.4.0
View
180 vendor/gems/acts_as_dashboard-0.4.0/acts_as_dashboard.gemspec
@@ -0,0 +1,180 @@
+# Generated by jeweler
+# DO NOT EDIT THIS FILE DIRECTLY
+# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
+# -*- encoding: utf-8 -*-
+
+Gem::Specification.new do |s|
+ s.name = %q{acts_as_dashboard}
+ s.version = "0.4.0"
+
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
+ s.authors = ["Nick Hoffman"]
+ s.date = %q{2010-08-05}
+ s.description = %q{acts_as_dashboard makes it easy to create dashboards in Rails apps. Very little configuration is required. Read the docs to get started.}
+ s.email = %q{nick@deadorange.com}
+ s.extra_rdoc_files = [
+ "LICENSE",
+ "README.rdoc"
+ ]
+ s.files = [
+ ".gitignore",
+ "LICENSE",
+ "README.rdoc",
+ "Rakefile",
+ "VERSION",
+ "acts_as_dashboard.gemspec",
+ "generators/dashboard/USAGE",
+ "generators/dashboard/dashboard_generator.rb",
+ "generators/dashboard/templates/controller.erb",
+ "generators/dashboard/templates/dashboard.css",
+ "generators/dashboard/templates/dashboard.js",
+ "generators/dashboard/templates/jqplot-0.9.7/jquery.jqplot.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisTickRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisTickRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasTextRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasTextRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.categoryAxisRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.categoryAxisRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.cursor.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.cursor.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dateAxisRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dateAxisRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dragable.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.dragable.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.highlighter.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.highlighter.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.logAxisRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.logAxisRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoAxisRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoAxisRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.mekkoRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.ohlcRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.ohlcRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pieRenderer.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pieRenderer.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.js.orig",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.pointLabels.min.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.trendline.js",
+ "generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.trendline.min.js",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-anim_basic_16x16.gif",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_222222_256x240.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_a83300_256x240.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_cccccc_256x240.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/images/ui-icons_ffffff_256x240.png",
+ "generators/dashboard/templates/jquery-ui/css/ui-darkness/jquery-ui-1.8.2.custom.css",
+ "generators/dashboard/templates/jquery-ui/js/jquery-1.4.2.min.js",
+ "generators/dashboard/templates/jquery-ui/js/jquery-ui-1.8.2.custom.min.js",
+ "generators/dashboard/templates/jquery.jqplot.min.css",
+ "generators/dashboard/templates/js.class-2.1.4/CHANGELOG",
+ "generators/dashboard/templates/js.class-2.1.4/MIT-LICENSE",
+ "generators/dashboard/templates/js.class-2.1.4/README",
+ "generators/dashboard/templates/js.class-2.1.4/min/command.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/comparable.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/constant_scope.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/core.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/decorator.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/enumerable.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/forwardable.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/hash.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/linked_list.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/loader.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/method_chain.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/observable.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/package.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/proxy.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/ruby.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/set.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/stack_trace.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/state.js",
+ "generators/dashboard/templates/js.class-2.1.4/min/stdlib.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/command.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/comparable.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/constant_scope.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/core.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/decorator.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/enumerable.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/forwardable.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/hash.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/linked_list.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/loader.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/method_chain.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/observable.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/package.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/proxy.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/ruby.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/set.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/stack_trace.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/state.js",
+ "generators/dashboard/templates/js.class-2.1.4/src/stdlib.js",
+ "generators/dashboard/templates/show.html.erb",
+ "lib/acts_as_dashboard.rb",
+ "lib/acts_as_dashboard/app/views/dashboards/show.html.erb",
+ "lib/acts_as_dashboard/class_methods.rb",
+ "lib/acts_as_dashboard/config.rb",
+ "lib/acts_as_dashboard/instance_methods.rb",
+ "lib/acts_as_dashboard/line_graph_widget.rb",
+ "lib/acts_as_dashboard/public/javascripts/dashboard.js",
+ "lib/acts_as_dashboard/public/stylesheets/dashboard.css",
+ "lib/acts_as_dashboard/short_messages_widget.rb",
+ "lib/acts_as_dashboard/widget.rb",
+ "spec/acts_as_dashboard/class_method_specs.rb",
+ "spec/acts_as_dashboard/config_spec.rb",
+ "spec/acts_as_dashboard/instance_methods_spec.rb",
+ "spec/acts_as_dashboard/line_graph_widget_spec.rb",
+ "spec/acts_as_dashboard/short_messages_widget_spec.rb",
+ "spec/acts_as_dashboard/widget_spec.rb",
+ "spec/acts_as_dashboard_spec.rb",
+ "spec/shared/widget_behaviours.rb",
+ "spec/spec.opts",
+ "spec/spec_helper.rb"
+ ]
+ s.homepage = %q{http://github.com/nickhoffman/acts_as_dashboard}
+ s.rdoc_options = ["--charset=UTF-8"]
+ s.require_paths = ["lib"]
+ s.rubygems_version = %q{1.3.7}
+ s.summary = %q{Create dashboards in Rails apps easily.}
+ s.test_files = [
+ "spec/acts_as_dashboard_spec.rb",
+ "spec/spec_helper.rb",
+ "spec/shared/widget_behaviours.rb",
+ "spec/acts_as_dashboard/line_graph_widget_spec.rb",
+ "spec/acts_as_dashboard/config_spec.rb",
+ "spec/acts_as_dashboard/class_method_specs.rb",
+ "spec/acts_as_dashboard/short_messages_widget_spec.rb",
+ "spec/acts_as_dashboard/instance_methods_spec.rb",
+ "spec/acts_as_dashboard/widget_spec.rb"
+ ]
+
+ if s.respond_to? :specification_version then
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
+ s.specification_version = 3
+
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
+ s.add_development_dependency(%q<rspec-rails>, [">= 1.3.2"])
+ else
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
+ s.add_dependency(%q<rspec-rails>, [">= 1.3.2"])
+ end
+ else
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
+ s.add_dependency(%q<rspec-rails>, [">= 1.3.2"])
+ end
+end
+
View
23 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/USAGE
@@ -0,0 +1,23 @@
+Description:
+ The dashboard generator creates the files and configuration for a "dashboard"
+ powered by ActsAsDashboard.
+
+ The generator takes an optional controller name as its argument. The controller
+ name may be given in CamelCase or snake_case. It should not be suffixed with
+ anything. For example, if the controller is to be named "StatsController",
+ specify "Stats" rather than "StatsController".
+
+ If the optional controller name is not provided, it will default to "Dashboard",
+ and a controller named DashboardsController will be created.
+
+Example:
+ script/generate dashboard
+
+ This will create a "dashboard" named "dashboard" that can be accessed at
+ http://localhost:3000/dashboard .
+
+Example:
+ script/generate dashboard overview
+
+ This will create a "dashboard" named "overview" that can be accessed at
+ http://localhost:3000/overview .
View
112 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/dashboard_generator.rb
@@ -0,0 +1,112 @@
+class DashboardGenerator < Rails::Generator::Base
+ attr_reader :base_name, :controller_name, :controller_filename
+
+ @@default_name = 'dashboard'
+ @@show_view_file = 'show.html.erb'
+ @@dashboard_js_file = 'dashboard.js'
+ @@dashboard_css_file = 'dashboard.css'
+ @@jqplot_css_file = 'jquery.jqplot.min.css'
+ @@jqplot_js_dir = 'jqplot-0.9.7'
+ @@jsclass_js_dir = 'js.class-2.1.4'
+ @@jquery_ui_js_dir = 'jquery-ui/js'
+ @@jquery_ui_css_dir = 'jquery-ui/css'
+ @@public_js_dir = File.join Rails.public_path, 'javascripts/'
+ @@public_css_dir = File.join Rails.public_path, 'stylesheets/'
+
+ def manifest
+ build_names args[0]
+ build_routes @controller_name
+
+ record do |m|
+ m.directory File.join('app', 'views', @base_name)
+
+ m.file @@show_view_file, File.join('app', 'views', @base_name, @@show_view_file)
+ m.file @@dashboard_js_file, File.join('public', 'javascripts', @@dashboard_js_file )
+ m.file @@dashboard_css_file, File.join('public', 'stylesheets', @@dashboard_css_file )
+ m.file @@jqplot_css_file, File.join('public', 'stylesheets', @@jqplot_css_file )
+
+ m.template 'controller.erb',
+ File.join('app', 'controllers', controller_filename),
+ :assigns => {:controller_name => controller_name}
+
+ if options[:command] == :create
+ logger.directory File.join('public', 'javascripts', @@jqplot_js_dir , '/')
+ FileUtils.cp_r source_path(@@jqplot_js_dir), @@public_js_dir unless options[:pretend]
+
+ logger.directory File.join('public', 'javascripts', @@jsclass_js_dir , '/')
+ FileUtils.cp_r source_path(@@jsclass_js_dir), @@public_js_dir unless options[:pretend]
+
+ logger.directory File.join('public', 'javascripts', @@jquery_ui_js_dir, '/')
+ m.directory File.join('public', 'javascripts', 'jquery-ui')
+ FileUtils.cp_r source_path(@@jquery_ui_js_dir), File.join(@@public_js_dir, 'jquery-ui/') unless options[:pretend]
+
+ logger.directory File.join('public', 'stylesheets', @@jquery_ui_css_dir, '/')
+ m.directory File.join('public', 'stylesheets', 'jquery-ui')
+ FileUtils.cp_r source_path(@@jquery_ui_css_dir), File.join(@@public_css_dir, 'jquery-ui/') unless options[:pretend]
+
+ add_dashboard_routes controller_name
+ elsif options[:command] == :destroy
+ app_jqplot_js_dir = File.join(@@public_js_dir, @@jqplot_js_dir)
+ app_jsclass_js_dir = File.join(@@public_js_dir, @@jsclass_js_dir)
+
+ if File.directory? app_jqplot_js_dir and not options[:pretend]
+ logger.rm File.join('public', 'javascripts', @@jqplot_js_dir , '/')
+ FileUtils.rm_r app_jqplot_js_dir
+ end
+
+ if File.directory? app_jsclass_js_dir and not options[:pretend]
+ logger.rm File.join('public', 'javascripts', @@jsclass_js_dir , '/')
+ FileUtils.rm_r app_jsclass_js_dir
+ end
+
+ remove_dashboard_routes controller_name
+ end
+ end
+ end
+
+ protected
+
+ def banner # {{{
+ "Usage: #{$0} #{spec.name} [ControllerName]"
+ end # }}}
+
+ def build_names(original_name) # {{{
+ @base_name = (original_name || @@default_name).pluralize.downcase
+ @controller_name = @base_name.camelize + 'Controller'
+ @controller_filename = @base_name.underscore + '_controller.rb'
+ end # }}}
+
+ def build_routes(controller_name) # {{{
+ controller = controller_name.downcase.gsub /controller$/, ''
+ @singleton_resource = %Q(map.resource :#{controller.singularize}, :only => :show)
+ @widgets_route = %Q(map.connect '#{controller.singularize}/widgets/*path', :controller => :#{controller.pluralize}, :action => 'widget_data')
+ end # }}}
+
+ def add_dashboard_routes(controller_name) # {{{
+ logger.route @singleton_resource
+ logger.route @widgets_route
+
+ return if options[:pretend]
+
+ gsub_file 'config/routes.rb', /^end$/mi do |match|
+ "\n #{@singleton_resource}\n #{@widgets_route}\n#{match}"
+ end
+ end # }}}
+
+ def remove_dashboard_routes(controller_name) # {{{
+ logger.route @singleton_resource
+ logger.route @widgets_route
+
+ return if options[:pretend]
+
+ gsub_file 'config/routes.rb', / #{Regexp.escape @singleton_resource}\n/mi, ''
+ gsub_file 'config/routes.rb', / #{Regexp.escape @widgets_route}\n/mi, ''
+ end # }}}
+
+ # Found in lib/rails_generator/commands.rb in Rails 2.3.5 .
+ def gsub_file(relative_destination, regexp, *args, &block) # {{{
+ path = destination_path(relative_destination)
+ content = File.read(path).gsub(regexp, *args, &block)
+ File.open(path, 'wb') { |file| file.write(content) }
+ end # }}}
+end
View
39 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/controller.erb
@@ -0,0 +1,39 @@
+class <%= controller_name -%> < ApplicationController
+ # NOTE: Remove this line if you don't mind restarting the server after modifying this class.
+ include ActsAsDashboard
+
+ acts_as_dashboard
+
+ dashboard_number do |d|
+ d.name = :seconds
+ d.title = 'Seconds This Minute'
+ d.update_interval = '5s'
+ d.data {Time.now.strftime '%S'}
+ end
+
+ dashboard_short_messages do |d|
+ d.name = :todays_full_date
+ d.title = 'Todays Full Date'
+ d.update_interval = '10s'
+ d.data {Time.now.to_s}
+ end
+
+ dashboard_line_graph do |d|
+ d.name = :random_dates_and_numbers
+ d.title = 'Random Dates and Numbers'
+ d.update_interval = '15s'
+ d.line_colours = %w(blue)
+ d.x_axis = :dates
+ d.data do
+ (0..10).map do
+ year = Time.now.year
+ month = sprintf '%02d', rand(12) + 1
+ day = sprintf '%02d', rand(31) + 1
+ date = "#{year}-#{month}-#{day}"
+ data_point = rand(20) + 1
+
+ [date, data_point]
+ end.to_json
+ end
+ end
+end
View
86 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/dashboard.css
@@ -0,0 +1,86 @@
+body {
+ background-color: black;
+ color: white;
+}
+
+.dashboard-clear {
+ clear: both;
+}
+
+#dashboard {
+ width: 100%;
+}
+ #dashboard .widget {
+ }
+
+ #dashboard .dashboard-numbers {
+ }
+ #dashboard .dashboard-numbers .number-widget {
+ float: left;
+ margin: 1em;
+ text-align: center;
+ }
+ #dashboard .dashboard-numbers .number-widget .widget-title {
+ padding: 0.25em;
+ border-top: 1px solid #666666;
+ border-bottom: none;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ }
+ #dashboard .dashboard-numbers .number-widget .widget-data {
+ font-size: 4em;
+ border-top: none;
+ border-bottom: 1px solid #666666;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ }
+
+ /* dashboard-short-message is not complete */
+ #dashboard .dashboard-short-messages {
+ }
+ #dashboard .dashboard-short-messages .short-messages-widget {
+ float: left;
+ margin: 1em;
+ }
+ #dashboard .dashboard-short-messages .short-messages-widget .widget-title {
+ padding: 0.5em;
+ text-align: center;
+ font-weight: bold;
+ }
+ #dashboard .dashboard-short-messages .short-messages-widget .widget-data {
+ margin: 0;
+ padding: 0;
+ }
+ #dashboard .dashboard-short-messages .short-messages-widget .widget-data ul {
+ margin: 0;
+ padding: 0;
+ }
+ #dashboard .dashboard-short-messages .short-messages-widget .widget-data li {
+ margin-top: 4px;
+ padding: 0.25em;
+ list-style-type: none;
+ font-size: 0.8em;
+ }
+
+ #dashboard .dashboard-line-graphs {
+ }
+ #dashboard .dashboard-line-graphs .line-graph-widget {
+ float: left;
+ margin: 1em;
+ }
+ #dashboard .dashboard-line-graphs .line-graph-widget .widget-title {
+ text-align: center;
+ border-top: 1px solid #666666;
+ border-bottom: none;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ }
+ #dashboard .dashboard-line-graphs .line-graph-widget .widget-data {
+ xborder: none;
+ border-top: none;
+ border-bottom: 1px solid #666666;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ padding-right: 1.5em;
+ }
+
View
307 vendor/gems/acts_as_dashboard-0.4.0/generators/dashboard/templates/dashboard.js
@@ -0,0 +1,307 @@
+// function includeJavaScriptFile(path) {{{
+//
+// Creates a JavaScript <script> element and appends it
+// to the <head>.
+//
+function includeJavaScriptFile(path) {
+ // Ensure that we have a non-empty string.'
+ if ((typeof(path) != 'string') || (!path))
+ {return;}
+
+ // Ensure that we can find the <head>.
+ var head = jQuery('head');
+ if (!head)
+ {return;}
+
+ var element = document.createElement('script');
+ element.type = 'text/javascript';
+ element.src = path;
+
+ head.append(element);
+
+ return true;
+} // }}}
+
+// function buildTheDashboard() {{{
+//
+// Determines which dashboard widgets to build,
+// builds them, and adds them to the DOM.
+//
+function buildTheDashboard() {
+ var parsed_widgets = jQuery.parseJSON(json_widgets);
+
+ jQuery.each(parsed_widgets, function(index, widget) {
+ if (widget.type == 'number')
+ {dashboard.addNumberWidget(widget);}
+ else if (widget.type == 'short_messages')
+ {dashboard.addShortMessagesWidget(widget);}
+ else if (widget.type == 'line_graph')
+ {dashboard.addLineGraphWidget(widget);}
+ });
+} // }}}
+
+function createUpdateTimerFor(widget) { // {{{
+ $(this).everyTime(widget.update_interval, widget.name, function() {
+ widget.updateData();
+ });
+} // }}}
+
+// Begin Dashboard class. {{{
+var Dashboard = new JS.Class({
+ initialize: function(options) { // {{{
+ this.basePath = options.basePath;
+
+ this.numberWidgets = new Array();
+ this.shortMessagesWidgets = new Array();
+ this.lineGraphWidgets = new Array();
+
+ this.div = jQuery('#dashboard');
+ this.numberWidgetsDiv = this.div.find('.dashboard-numbers');
+ this.shortMessagesWidgetsDiv = this.div.find('.dashboard-short-messages');
+ this.lineGraphWidgetsDiv = this.div.find('.dashboard-line-graphs');
+ }, // }}}
+
+ addNumberWidget: function(options) { // {{{
+ var widget = new NumberWidget(options);
+ var templateDiv = this.numberWidgetsDiv.find('.widget-template');
+
+ var widgetDiv = templateDiv.clone(false)
+ .removeClass('widget-template')
+ .addClass('number-widget')
+ .attr('id', widget.divID())
+ .appendTo(this.numberWidgetsDiv);
+
+ // Set the new div's title.
+ widgetDiv.find('.widget-title').html(widget.title);
+
+ widget.setDataDivTo(widgetDiv.find('.widget-data'));
+ widget.updateData();
+
+ createUpdateTimerFor(widget);
+
+ this.numberWidgets.push(widget);
+
+ widgetDiv.show();
+ }, // }}}
+
+ addShortMessagesWidget: function(options) { // {{{
+ var widget = new ShortMessagesWidget(options);
+ var templateDiv = this.shortMessagesWidgetsDiv.find('.widget-template');
+
+ var widgetDiv = templateDiv.clone(false)
+ .removeClass('widget-template')
+ .addClass('short-messages-widget')
+ .attr('id', widget.divID())
+ .appendTo(this.shortMessagesWidgetsDiv);
+
+ // Set the new div's title.
+ widgetDiv.find('.widget-title').html(widget.title);
+
+ widget.setDataDivTo(widgetDiv.find('.widget-data'));
+ widget.updateData();
+
+ createUpdateTimerFor(widget);
+
+ this.shortMessagesWidgets.push(widget);
+
+ widgetDiv.show();
+ }, // }}}
+
+ addLineGraphWidget: function(options) { // {{{
+ var widget = new LineGraphWidget(options);
+ var templateDiv = this.lineGraphWidgetsDiv.find('.widget-template');
+
+ var widgetDiv = templateDiv.clone(false)
+ .removeClass('widget-template')
+ .addClass('line-graph-widget')
+ .attr('id', widget.divID())
+ .appendTo(this.lineGraphWidgetsDiv);
+
+ // Set the new div's title.
+ widgetDiv.find('.widget-title').html(widget.title);
+
+ var dataDiv = widgetDiv.find('.widget-data')
+ .attr('id', widget.divID() + '-data');
+
+ widget.setDataDivTo(dataDiv);
+
+ widget.updateData();
+
+ // I don't know why, but setting these properties when dataDiv
+ // is initialized fails to work. They work here, though...
+ dataDiv.css('height', widget.height)
+ dataDiv.css('width', widget.width)
+
+ createUpdateTimerFor(widget);
+
+ this.lineGraphWidgets.push(widget);
+
+ widgetDiv.show();
+ } // }}}
+});
+// End Dashboard class. }}}
+
+// Begin DashboardWidget class. {{{
+var DashboardWidget = new JS.Class({
+ initialize: function(options) {
+ this.type = options.type;
+ this.name = options.name;
+ this.title = options.title;
+ this.update_interval = options.update_interval;
+ },
+
+ dataURL: function() {
+ return dashboard.basePath + this.name;
+ },
+
+ divID: function() {
+ return this.name + '-' + this.type + '-widget';
+ },
+
+ setDataDivTo: function(element) {
+ this.dataDiv = element;
+ }
+});
+// End DashboardWidget class. }}}
+
+// Begin NumberWidget class. {{{
+var NumberWidget = new JS.Class(DashboardWidget, {
+ initialize: function(options) {
+ options['type'] = 'number';
+ this.callSuper(options);
+ },
+
+ updateData: function() {
+ if (!this.dataDiv)
+ {return false;}
+
+ // This is needed so that the dataDiv property is accessible with jQuery.get() .
+ var element = this.dataDiv;
+
+ jQuery.get(this.dataURL(), function(data) {
+ element.fadeOut(400, function() {
+ element.html(data);
+ element.fadeIn();
+ });
+ }, 'text');
+ }
+});
+// End NumberWidget class. }}}
+
+// Begin ShortMessagesWidget class. {{{
+var ShortMessagesWidget = new JS.Class(DashboardWidget, {
+ initialize: function(options) {
+ options['type'] = 'short_messages';
+ this.callSuper(options);
+ this.maxDataItems = 5;
+ },
+
+ firstDataItem: function() {
+ return this.dataDiv.find('li.widget-data-item:first');
+ },
+
+ dataItemsCount: function() {
+ return this.dataDiv.find('li.widget-data-item').length;
+ },
+
+ createDataItem: function() {
+ return this.dataDiv.find('li.widget-data-template')
+ .clone(false)
+ .removeClass('widget-data-template')
+ .addClass('widget-data-item');
+ },
+
+ updateData: function() {
+ if (!this.dataDiv)
+ {return false;}
+
+ var new_data = '';
+ var new_li = this.createDataItem();
+
+ // We use ajax() instead of get() because the "async" option must
+ // be false. If it isn't, we're unable to determine if data was
+ // obtained.
+ var get_result = jQuery.ajax({
+ url: this.dataURL(),
+ type: 'GET',
+ async: false,
+ cache: false,
+ dataType: 'text',
+ timeout: this.updateInterval,
+ success: function(data) {
+ new_li.html(data);
+ new_data = data;
+ }
+ });
+
+ // If no data was obtained, return. Otherwise, an empty list item
+ // will be shown.
+ if (new_data == '')
+ {return false;}
+
+ // Ensure that we don't show the same data twice in a row.
+ if (this.dataDiv.find('li:last-child').html() != new_li.html()) {
+ new_li.appendTo(this.dataDiv.find('ul'));
+
+ // Hide the first list item if we've reached the maximum number of
+ // list items to show in this widget.
+ if (this.dataItemsCount() > this.maxDataItems) {
+ var firstDataItem = this.firstDataItem();
+
+ firstDataItem.slideUp(400, function() {
+ firstDataItem.remove();
+ });
+ }
+
+ new_li.slideDown();
+ }
+ }
+});
+// End ShortMessagesWidget class. }}}
+
+// Begin LineGraphWidget class. {{{
+var LineGraphWidget = new JS.Class(DashboardWidget, {
+ initialize: function(options) {
+ this.height = options.height;
+ this.width = options.width;
+ this.seriesColours = options.line_colours;
+ this.x_axis = options.x_axis;
+
+ options.type = 'line_graph';
+ this.callSuper(options);
+ },
+
+ updateData: function() {
+ if (!this.graph)
+ {this.createGraph();}
+
+ // This is needed so that the dataDiv property is accessible with jQuery.get() .
+ var graph = this.graph;
+
+ jQuery.get(this.dataURL(), function(data) {
+ graph.series[0].data = data;
+ graph.replot({resetAxes: true});
+ }, 'json');
+ },
+
+ createGraph: function() {
+ includeJavaScriptFile('/javascripts/jqplot-0.9.7/plugins/jqplot.dateAxisRenderer.min.js');
+
+ var x_axis_format = {};
+ if (this.x_axis === 'dates') {
+ var x_axis_format = {
+ renderer: jQuery.jqplot.DateAxisRenderer,
+ tickOptions: {formatString: '%Y-%m-%d'}
+ }
+ }
+
+ this.graph = jQuery.jqplot(this.dataDiv.attr('id'), [ [] ], {
+ seriesColors: this.seriesColours,
+ axes: {
+ xaxis: x_axis_format
+ }
+ });
+ }
+});
+// End LineGraphWidget class. }}}
+
View
14 .../acts_as_dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/jquery.jqplot.min.js
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) 2009 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris dot leonello at gmail dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ */
+(function(h){var c;h.jqplot=function(A,y,w){var x,v;if(y==null){throw"No data specified"}if(y.constructor==Array&&y.length==0||y[0].constructor!=Array){throw"Improper Data Array"}if(w==null){if(y instanceof Array){x=y;v=null}else{if(y.constructor==Object){x=null;v=y}}}else{x=y;v=w}var z=new n();z.init(A,x,v);z.draw();return z};h.jqplot.debug=1;h.jqplot.config={debug:1,enablePlugins:true,defaultHeight:300,defaultWidth:400};h.jqplot.enablePlugins=h.jqplot.config.enablePlugins;h.jqplot.preInitHooks=[];h.jqplot.postInitHooks=[];h.jqplot.preParseOptionsHooks=[];h.jqplot.postParseOptionsHooks=[];h.jqplot.preDrawHooks=[];h.jqplot.postDrawHooks=[];h.jqplot.preDrawSeriesHooks=[];h.jqplot.postDrawSeriesHooks=[];h.jqplot.preDrawLegendHooks=[];h.jqplot.addLegendRowHooks=[];h.jqplot.preSeriesInitHooks=[];h.jqplot.postSeriesInitHooks=[];h.jqplot.preParseSeriesOptionsHooks=[];h.jqplot.postParseSeriesOptionsHooks=[];h.jqplot.eventListenerHooks=[];h.jqplot.preDrawSeriesShadowHooks=[];h.jqplot.postDrawSeriesShadowHooks=[];h.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};h.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};h.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};h.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};h.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};h.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};h.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};h.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function l(v){h.jqplot.ElemContainer.call(this);this.name=v;this._series=[];this.show=false;this.tickRenderer=h.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=h.jqplot.AxisLabelRenderer;this.labelOptions={};this.label=null;this.showLabel=true;this.min=null;this.max=null;this.autoscale=false;this.pad=1.2;this.padMax=null;this.padMin=null;this.ticks=[];this.numberTicks;this.tickInterval;this.renderer=h.jqplot.LinearAxisRenderer;this.rendererOptions={};this.showTicks=true;this.showTickMarks=true;this.showMinorTicks=true;this.useSeriesColor=false;this.borderWidth=null;this.borderColor=null;this._dataBounds={min:null,max:null};this._offsets={min:null,max:null};this._ticks=[];this._label=null;this.syncTicks=null;this.tickSpacing=75;this._min=null;this._max=null;this._tickInterval=null;this._numberTicks=null;this.__ticks=null}l.prototype=new h.jqplot.ElemContainer();l.prototype.constructor=l;l.prototype.init=function(){this.renderer=new this.renderer();this.tickOptions.axis=this.name;if(this.label==null||this.label==""){this.showLabel=false}else{this.labelOptions.label=this.label}if(this.showLabel==false){this.labelOptions.show=false}if(this.pad==0){this.pad=1}if(this.padMax==0){this.padMax=1}if(this.padMin==0){this.padMin=1}if(this.padMax==null){this.padMax=(this.pad-1)/2+1}if(this.padMin==null){this.padMin=(this.pad-1)/2+1}this.pad=this.padMax+this.padMin-1;if(this.min!=null||this.max!=null){this.autoscale=false}if(this.syncTicks==null&&this.name.indexOf("y")>-1){this.syncTicks=true}else{if(this.syncTicks==null){this.syncTicks=false}}this.renderer.init.call(this,this.rendererOptions)};l.prototype.draw=function(v){return this.renderer.draw.call(this,v)};l.prototype.set=function(){this.renderer.set.call(this)};l.prototype.pack=function(w,v){if(this.show){this.renderer.pack.call(this,w,v)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};l.prototype.reset=function(){this.renderer.reset.call(this)};l.prototype.resetScale=function(){this.min=null;this.max=null;this.numberTicks=null;this.tickInterval=null};function b(v){h.jqplot.ElemContainer.call(this);this.show=false;this.location="ne";this.xoffset=12;this.yoffset=12;this.border;this.background;this.textColor;this.fontFamily;this.fontSize;this.rowSpacing="0.5em";this.renderer=h.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.escapeHtml=false;this._series=[];h.extend(true,this,v)}b.prototype=new h.jqplot.ElemContainer();b.prototype.constructor=b;b.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};b.prototype.draw=function(w){for(var v=0;v<h.jqplot.preDrawLegendHooks.length;v++){h.jqplot.preDrawLegendHooks[v].call(this,w)}return this.renderer.draw.call(this,w)};b.prototype.pack=function(v){this.renderer.pack.call(this,v)};function k(v){h.jqplot.ElemContainer.call(this);this.text=v;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=h.jqplot.DivTitleRenderer;this.rendererOptions={}}k.prototype=new h.jqplot.ElemContainer();k.prototype.constructor=k;k.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};k.prototype.draw=function(v){return this.renderer.draw.call(this,v)};k.prototype.pack=function(){this.renderer.pack.call(this)};function o(){h.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=h.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.lineWidth=2.5;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=h.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new h.jqplot.GenericCanvas();this.shadowCanvas=new h.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0}o.prototype=new h.jqplot.ElemContainer();o.prototype.constructor=o;o.prototype.init=function(w,B,y){this.index=w;this.gridBorderWidth=B;var A=this.data;for(var x=0;x<A.length;x++){if(!this.breakOnNull){if(A[x]==null||A[x][0]==null||A[x][1]==null){A.splice(x,1);continue}}else{if(A[x]==null||A[x][0]==null||A[x][1]==null){var z}}}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var v=h.jqplot.normalize2rgb(this.fillColor);var v=h.jqplot.getColorComponents(v);this.fillColor="rgba("+v[0]+","+v[1]+","+v[2]+","+this.fillAlpha+")"}this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions,y);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.markerRenderer.init(this.markerOptions)};o.prototype.draw=function(B,y,A){var w=(y==c)?{}:y;B=(B==c)?this.canvas._ctx:B;for(var v=0;v<h.jqplot.preDrawSeriesHooks.length;v++){h.jqplot.preDrawSeriesHooks[v].call(this,B,w)}if(this.show){this.renderer.setGridData.call(this,A);if(!w.preventJqPlotSeriesDrawTrigger){h(B.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}var z=[];if(w.data){z=w.data}else{if(!this._stack){z=this.data}else{z=this._plotData}}var x=w.gridData||this.renderer.makeGridData.call(this,z,A);this.renderer.draw.call(this,B,x,w)}for(var v=0;v<h.jqplot.postDrawSeriesHooks.length;v++){h.jqplot.postDrawSeriesHooks[v].call(this,B,w)}};o.prototype.drawShadow=function(B,y,A){var w=(y==c)?{}:y;B=(B==c)?this.shadowCanvas._ctx:B;for(var v=0;v<h.jqplot.preDrawSeriesShadowHooks.length;v++){h.jqplot.preDrawSeriesShadowHooks[v].call(this,B,w)}if(this.shadow){this.renderer.setGridData.call(this,A);var z=[];if(w.data){z=w.data}else{if(!this._stack){z=this.data}else{z=this._plotData}}var x=w.gridData||this.renderer.makeGridData.call(this,z,A);this.renderer.drawShadow.call(this,B,x,w)}for(var v=0;v<h.jqplot.postDrawSeriesShadowHooks.length;v++){h.jqplot.postDrawSeriesShadowHooks[v].call(this,B,w)}};function g(){h.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=h.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}g.prototype=new h.jqplot.ElemContainer();g.prototype.constructor=g;g.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};g.prototype.createElement=function(v){this._offsets=v;return this.renderer.createElement.call(this)};g.prototype.draw=function(){this.renderer.draw.call(this)};h.jqplot.GenericCanvas=function(){h.jqplot.ElemContainer.call(this);this._ctx};h.jqplot.GenericCanvas.prototype=new h.jqplot.ElemContainer();h.jqplot.GenericCanvas.prototype.constructor=h.jqplot.GenericCanvas;h.jqplot.GenericCanvas.prototype.createElement=function(z,x,w){this._offsets=z;var v="jqplot";if(x!=c){v=x}var y=document.createElement("canvas");if(w!=c){this._plotDimensions=w}y.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;y.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=h(y);this._elem.addClass(v);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});if(h.browser.msie){window.G_vmlCanvasManager.init_(document)}if(h.browser.msie){y=window.G_vmlCanvasManager.initElement(y)}return this._elem};h.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};function n(){this.data=[];this.targetId=null;this.target=null;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{}},seriesDefaults:{},gridPadding:{top:10,right:10,bottom:23,left:10},series:[]};this.series=[];this.axes={xaxis:new l("xaxis"),yaxis:new l("yaxis"),x2axis:new l("x2axis"),y2axis:new l("y2axis"),y3axis:new l("y3axis"),y4axis:new l("y4axis"),y5axis:new l("y5axis"),y6axis:new l("y6axis"),y7axis:new l("y7axis"),y8axis:new l("y8axis"),y9axis:new l("y9axis")};this.grid=new g();this.legend=new b();this.baseCanvas=new h.jqplot.GenericCanvas();this.eventCanvas=new h.jqplot.GenericCanvas();this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:10,right:10,bottom:10,left:10};this.syncXTicks=true;this.syncYTicks=true;this.seriesColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.negativeSeriesColors=["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"];this.sortData=true;var y=0;this.textColor;this.fontFamily;this.fontSize;this.title=new k();this.options={};this.stackSeries=false;this._stackData=[];this._plotData=[];this.plugins={};this._drawCount=0;this.drawIfHidden=false;this._sumy=0;this._sumx=0;this.colorGenerator=h.jqplot.ColorGenerator;this.init=function(G,F,C){for(var D=0;D<h.jqplot.preInitHooks.length;D++){h.jqplot.preInitHooks[D].call(this,G,F,C)}this.targetId="#"+G;this.target=h("#"+G);if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var E;if(C&&C.height){E=parseInt(C.height,10)}else{if(this.target.attr("data-height")){E=parseInt(this.target.attr("data-height"),10)}else{E=parseInt(h.jqplot.config.defaultHeight,10)}}this._height=E;this.target.css("height",E+"px")}else{this._height=this.target.height()}if(!this.target.width()){var z;if(C&&C.width){z=parseInt(C.width,10)}else{if(this.target.attr("data-width")){z=parseInt(this.target.attr("data-width"),10)}else{z=parseInt(h.jqplot.config.defaultWidth,10)}}this._width=z;this.target.css("width",z+"px")}else{this._width=this.target.width()}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}this.data=F;this.parseOptions(C);if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;for(var D=0;D<this.series.length;D++){this.series[D].shadowCanvas._plotDimensions=this._plotDimensions;this.series[D].canvas._plotDimensions=this._plotDimensions;for(var B=0;B<h.jqplot.preSeriesInitHooks.length;B++){h.jqplot.preSeriesInitHooks[B].call(this.series[D],G,F,this.options.seriesDefaults,this.options.series[D])}this.populatePlotData(this.series[D],D);this.series[D]._plotDimensions=this._plotDimensions;this.series[D].init(D,this.grid.borderWidth,this);for(var B=0;B<h.jqplot.postSeriesInitHooks.length;B++){h.jqplot.postSeriesInitHooks[B].call(this.series[D],G,F,this.options.seriesDefaults,this.options.series[D])}this._sumy+=this.series[D]._sumy;this._sumx+=this.series[D]._sumx}for(var A in this.axes){this.axes[A]._plotDimensions=this._plotDimensions;this.axes[A].init()}if(this.sortData){v(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var D=0;D<h.jqplot.postInitHooks.length;D++){h.jqplot.postInitHooks[D].call(this,G,F,C)}};this.resetAxesScale=function(C){var B=(C!=c)?C:this.axes;if(B===true){B=this.axes}if(B.constructor===Array){for(var A=0;A<B.length;A++){this.axes[B[A]].resetScale()}}else{if(B.constructor===Object){for(var z in B){this.axes[z].resetScale()}}}};this.reInitialize=function(){if(!this.target.height()){var D;if(options&&options.height){D=parseInt(options.height,10)}else{if(this.target.attr("data-height")){D=parseInt(this.target.attr("data-height"),10)}else{D=parseInt(h.jqplot.config.defaultHeight,10)}}this._height=D;this.target.css("height",D+"px")}else{this._height=this.target.height()}if(!this.target.width()){var z;if(options&&options.width){z=parseInt(options.width,10)}else{if(this.target.attr("data-width")){z=parseInt(this.target.attr("data-width"),10)}else{z=parseInt(h.jqplot.config.defaultWidth,10)}}this._width=z;this.target.css("width",z+"px")}else{this._width=this.target.width()}if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var E in this.axes){var C=this.axes[E];C._plotWidth=this._width;C._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;for(var B=0;B<this.series.length;B++){this.populatePlotData(this.series[B],B);this.series[B]._plotDimensions=this._plotDimensions;this.series[B].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[B]._sumy;this._sumx+=this.series[B]._sumx}for(var A in this.axes){this.axes[A]._plotDimensions=this._plotDimensions;this.axes[A]._ticks=[];this.axes[A].renderer.init.call(this.axes[A],{})}if(this.sortData){v(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function v(D){var E,B;for(var C=0;C<D.length;C++){E=D[C].data;var z=true;if(D[C]._stackAxis=="x"){for(var A=0;A<E.length;A++){if(typeof(E[A][1])!="number"){z=false;break}}if(z){E.sort(function(G,F){return G[1]-F[1]})}}else{for(var A=0;A<E.length;A++){if(typeof(E[A][0])!="number"){z=false;break}}if(z){E.sort(function(G,F){return G[0]-F[0]})}}}}this.populatePlotData=function(D,E){this._plotData=[];this._stackData=[];D._stackData=[];D._plotData=[];var H={x:[],y:[]};if(this.stackSeries&&!D.disableStack){D._stack=true;var F=D._stackAxis=="x"?0:1;var G=F?0:1;var I=h.extend(true,[],D.data);var J=h.extend(true,[],D.data);for(var B=0;B<E;B++){var z=this.series[B].data;for(var A=0;A<z.length;A++){I[A][0]+=z[A][0];I[A][1]+=z[A][1];J[A][F]+=z[A][F]}}for(var C=0;C<J.length;C++){H.x.push(J[C][0]);H.y.push(J[C][1])}this._plotData.push(J);this._stackData.push(I);D._stackData=I;D._plotData=J;D._plotValues=H}else{for(var C=0;C<D.data.length;C++){H.x.push(D.data[C][0]);H.y.push(D.data[C][1])}this._stackData.push(D.data);this.series[E]._stackData=D.data;this._plotData.push(D.data);D._plotData=D.data;D._plotValues=H}if(E>0){D._prevPlotData=this.series[E-1]._plotData}D._sumy=0;D._sumx=0;for(C=D.data.length-1;C>-1;C--){D._sumy+=D.data[C][1];D._sumx+=D.data[C][0]}};this.getNextSeriesColor=(function(A){var z=0;var B=A.seriesColors;return function(){if(z<B.length){return B[z++]}else{z=0;return B[z++]}}})(this);this.parseOptions=function(H){for(var E=0;E<h.jqplot.preParseOptionsHooks.length;E++){h.jqplot.preParseOptionsHooks[E].call(this,H)}this.options=h.extend(true,{},this.defaults,H);this.stackSeries=this.options.stackSeries;if(this.options.seriesColors){this.seriesColors=this.options.seriesColors}var z=new this.colorGenerator(this.seriesColors);h.extend(true,this._gridPadding,this.options.gridPadding);this.sortData=(this.options.sortData!=null)?this.options.sortData:this.sortData;for(var A in this.axes){var C=this.axes[A];h.extend(true,C,this.options.axesDefaults,this.options.axes[A]);C._plotWidth=this._width;C._plotHeight=this._height}if(this.data.length==0){this.data=[];for(var E=0;E<this.options.series.length;E++){this.data.push(this.options.series.data)}}var F=function(L,J){var I=[];var K;J=J||"vertical";if(!(L[0] instanceof Array)){for(var K=0;K<L.length;K++){if(J=="vertical"){I.push([K+1,L[K]])}else{I.push([L[K],K+1])}}}else{h.extend(true,I,L)}return I};for(var E=0;E<this.data.length;E++){var G=new o();for(var D=0;D<h.jqplot.preParseSeriesOptionsHooks.length;D++){h.jqplot.preParseSeriesOptionsHooks[D].call(G,this.options.seriesDefaults,this.options.series[E])}h.extend(true,G,{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[E]);var B="vertical";if(G.renderer.constructor==h.jqplot.barRenderer&&G.rendererOptions&&G.rendererOptions.barDirection=="horizontal"){B="horizontal"}G.data=F(this.data[E],B);switch(G.xaxis){case"xaxis":G._xaxis=this.axes.xaxis;break;case"x2axis":G._xaxis=this.axes.x2axis;break;default:break}G._yaxis=this.axes[G.yaxis];G._xaxis._series.push(G);G._yaxis._series.push(G);if(G.show){G._xaxis.show=true;G._yaxis.show=true}if(!G.color&&G.show!=false){G.color=z.next()}if(!G.label){G.label="Series "+(E+1).toString()}this.series.push(G);for(var D=0;D<h.jqplot.postParseSeriesOptionsHooks.length;D++){h.jqplot.postParseSeriesOptionsHooks[D].call(this.series[E],this.options.seriesDefaults,this.options.series[E])}}h.extend(true,this.grid,this.options.grid);for(var A in this.axes){var C=this.axes[A];if(C.borderWidth==null){C.borderWidth=this.grid.borderWidth}if(C.borderColor==null){if(A!="xaxis"&&A!="x2axis"&&C.useSeriesColor===true&&C.show){C.borderColor=C._series[0].color}else{C.borderColor=this.grid.borderColor}}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){h.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;h.extend(true,this.legend,this.options.legend);for(var E=0;E<h.jqplot.postParseOptionsHooks.length;E++){h.jqplot.postParseOptionsHooks[E].call(this,H)}};this.replot=function(A){var B=(A!=c)?A:{};var z=(B.clear!=c)?B.clear:true;var C=(B.resetAxes!=c)?B.resetAxes:false;this.target.trigger("jqplotPreReplot");if(z){this.target.empty()}if(C){this.resetAxesScale(C)}this.reInitialize();this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(z){z=(z!=null)?z:true;this.target.trigger("jqplotPreRedraw");if(z){this.target.empty()}for(var B in this.axes){this.axes[B]._ticks=[]}for(var A=0;A<this.series.length;A++){this.populatePlotData(this.series[A],A)}this._sumy=0;this._sumx=0;for(A=0;A<this.series.length;A++){this._sumy+=this.series[A]._sumy;this._sumx+=this.series[A]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var F;for(F=0;F<h.jqplot.preDrawHooks.length;F++){h.jqplot.preDrawHooks[F].call(this)}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas"));var E=this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});for(var B in this.axes){this.target.append(this.axes[B].draw(E));this.axes[B].set()}if(this.axes.yaxis.show){this._gridPadding.left=this.axes.yaxis.getWidth()}var C=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var A=[0,0,0,0];var H=0;var D,z;for(D=8;D>0;D--){z=this.axes[C[D-1]];if(z.show){A[D-1]=H;H+=z.getWidth()}}if(H>this._gridPadding.right){this._gridPadding.right=H}if(this.title.show&&this.axes.x2axis.show){this._gridPadding.top=this.title.getHeight()+this.axes.x2axis.getHeight()}else{if(this.title.show){this._gridPadding.top=this.title.getHeight()}else{if(this.axes.x2axis.show){this._gridPadding.top=this.axes.x2axis.getHeight()}}}if(this.axes.xaxis.show){this._gridPadding.bottom=this.axes.xaxis.getHeight()}this.axes.xaxis.pack({position:"absolute",bottom:0,left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});this.axes.yaxis.pack({position:"absolute",top:0,left:0,height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});this.axes.x2axis.pack({position:"absolute",top:this.title.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(F=8;F>0;F--){this.axes[C[F-1]].pack({position:"absolute",top:0,right:A[F-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}this.target.append(this.grid.createElement(this._gridPadding));this.grid.draw();for(F=0;F<this.series.length;F++){this.target.append(this.series[F].shadowCanvas.createElement(this._gridPadding,"jqplot-series-canvas jqplot-shadow"));this.series[F].shadowCanvas.setContext()}for(F=0;F<this.series.length;F++){this.target.append(this.series[F].canvas.createElement(this._gridPadding,"jqplot-series-canvas"));this.series[F].canvas.setContext()}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas"));var I=this.eventCanvas.setContext();I.fillStyle="rgba(0,0,0,0)";I.fillRect(0,0,I.canvas.width,I.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.target.append(this.legend.draw());this.legend.pack(this._gridPadding);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();h(this.series[this.series.length-1].canvas._elem).after(this.legend.draw());this.legend.pack(this._gridPadding)}for(var F=0;F<h.jqplot.eventListenerHooks.length;F++){var G=h.jqplot.eventListenerHooks[F];this.eventCanvas._elem.bind(G[0],{plot:this},G[1])}for(var F=0;F<h.jqplot.postDrawHooks.length;F++){h.jqplot.postDrawHooks[F].call(this)}if(this.target.is(":visible")){this._drawCount+=1}this.target.trigger("jqplotPostDraw",[this])}};this.bindCustomEvents=function(){this.eventCanvas._elem.bind("click",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("mousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("mouseup",{plot:this},this.onMouseUp);this.eventCanvas._elem.bind("mousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave)};function w(H){var G=H.data.plot;var C=G.eventCanvas._elem.offset();var F={x:H.pageX-C.left,y:H.pageY-C.top};var D={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null};var E=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var z=G.axes;for(var A=11;A>0;A--){var B=E[A-1];if(z[B].show){D[B]=z[B].series_p2u(F[B.charAt(0)])}}return({offsets:C,gridPos:F,dataPos:D})}function x(F,J,I){var G=null;var K,D,B,H,C,A;var E;for(var D=0;D<F.series.length;D++){K=F.series[D];A=K.renderer;if(K.show){E=Math.abs(K.markerRenderer.size/2+K.neighborThreshold);for(var C=0;C<K.gridData.length;C++){p=K.gridData[C];if(A.constructor==h.jqplot.OHLCRenderer){if(A.candleStick){var z=K._yaxis.series_u2p;if(J>=p[0]-A._bodyWidth/2&&J<=p[0]+A._bodyWidth/2&&I>=z(K.data[C][2])&&I<=z(K.data[C][3])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}else{if(!A.hlc){var z=K._yaxis.series_u2p;if(J>=p[0]-A._tickLength&&J<=p[0]+A._tickLength&&I>=z(K.data[C][2])&&I<=z(K.data[C][3])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}else{var z=K._yaxis.series_u2p;if(J>=p[0]-A._tickLength&&J<=p[0]+A._tickLength&&I>=z(K.data[C][1])&&I<=z(K.data[C][2])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}}}else{H=Math.sqrt((J-p[0])*(J-p[0])+(I-p[1])*(I-p[1]));if(H<=E&&(H<=B||B==null)){B=H;G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}}}}return G}this.onClick=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotClick",[z.gridPos,z.dataPos,B,C])};this.onDblClick=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotDblClick",[z.gridPos,z.dataPos,B,C])};this.onMouseDown=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotMouseDown",[z.gridPos,z.dataPos,B,C])};this.onMouseUp=function(A){var z=w(A);A.data.plot.eventCanvas._elem.trigger("jqplotMouseUp",[z.gridPos,z.dataPos,null,A.data.plot])};this.onMouseMove=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotMouseMove",[z.gridPos,z.dataPos,B,C])};this.onMouseEnter=function(A){var z=w(A);var B=A.data.plot;A.data.plot.eventCanvas._elem.trigger("jqplotMouseEnter",[z.gridPos,z.dataPos,null,B])};this.onMouseLeave=function(A){var z=w(A);var B=A.data.plot;A.data.plot.eventCanvas._elem.trigger("jqplotMouseLeave",[z.gridPos,z.dataPos,null,B])};this.drawSeries=function(B,z){var D,C,A;if(z!=c){C=this.series[z];A=C.shadowCanvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.drawShadow(A,B,this);A=C.canvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.draw(A,B,this)}else{for(D=0;D<this.series.length;D++){C=this.series[D];A=C.shadowCanvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.drawShadow(A,B,this);A=C.canvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.draw(A,B,this)}}}}h.jqplot.ColorGenerator=function(w){var v=0;this.next=function(){if(v<w.length){return w[v++]}else{v=0;return w[v++]}};this.previous=function(){if(v>0){return w[v--]}else{v=w.length-1;return w[v]}};this.get=function(x){return w[x]};this.setColors=function(x){w=x};this.reset=function(){v=0}};h.jqplot.hex2rgb=function(x,v){x=x.replace("#","");if(x.length==3){x=x[0]+x[0]+x[1]+x[1]+x[2]+x[2]}var w;w="rgba("+parseInt(x.slice(0,2),16)+", "+parseInt(x.slice(2,4),16)+", "+parseInt(x.slice(4,6),16);if(v){w+=", "+v}w+=")";return w};h.jqplot.rgb2hex=function(z){var x=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var v=z.match(x);var y="#";for(i=1;i<4;i++){var w;if(v[i].search(/%/)!=-1){w=parseInt(255*v[i]/100,10).toString(16);if(w.length==1){w="0"+w}}else{w=parseInt(v[i],10).toString(16);if(w.length==1){w="0"+w}}y+=w}return y};h.jqplot.normalize2rgb=function(w,v){if(w.search(/^ *rgba?\(/)!=-1){return w}else{if(w.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return h.jqplot.hex2rgb(w,v)}else{throw"invalid color spec"}}};h.jqplot.getColorComponents=function(z){var y=h.jqplot.normalize2rgb(z);var x=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var v=y.match(x);var w=[];for(i=1;i<4;i++){if(v[i].search(/%/)!=-1){w[i-1]=parseInt(255*v[i]/100,10)}else{w[i-1]=parseInt(v[i],10)}}w[3]=parseFloat(v[4])?parseFloat(v[4]):1;return w};h.jqplot.log=function(){if(window.console&&h.jqplot.debug){if(arguments.length==1){console.log(arguments[0])}else{console.log(arguments)}}};var f=h.jqplot.log;h.jqplot.AxisLabelRenderer=function(v){h.jqplot.ElemContainer.call(this);this.axis;this.show=true;this.label="";this._elem;this.escapeHTML=false;h.extend(true,this,v)};h.jqplot.AxisLabelRenderer.prototype=new h.jqplot.ElemContainer();h.jqplot.AxisLabelRenderer.prototype.constructor=h.jqplot.AxisLabelRenderer;h.jqplot.AxisLabelRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.AxisLabelRenderer.prototype.draw=function(){this._elem=h('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}return this._elem};h.jqplot.AxisLabelRenderer.prototype.pack=function(){};h.jqplot.AxisTickRenderer=function(v){h.jqplot.ElemContainer.call(this);this.mark="outside";this.axis;this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.size=4;this.markSize=6;this.show=true;this.showLabel=true;this.label="";this.value=null;this._styles={};this.formatter=h.jqplot.DefaultTickFormatter;this.formatString="";this.fontFamily;this.fontSize;this.textColor;this._elem;h.extend(true,this,v)};h.jqplot.AxisTickRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.AxisTickRenderer.prototype=new h.jqplot.ElemContainer();h.jqplot.AxisTickRenderer.prototype.constructor=h.jqplot.AxisTickRenderer;h.jqplot.AxisTickRenderer.prototype.setTick=function(v,x,w){this.value=v;this.axis=x;if(w){this.isMinorTick=true}return this};h.jqplot.AxisTickRenderer.prototype.draw=function(){if(!this.label){this.label=this.formatter(this.formatString,this.value)}style='style="position:absolute;';if(Number(this.label)){style+="white-space:nowrap;"}style+='"';this._elem=h("<div "+style+' class="jqplot-'+this.axis+'-tick">'+this.label+"</div>");for(var v in this._styles){this._elem.css(v,this._styles[v])}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};h.jqplot.DefaultTickFormatter=function(v,w){if(typeof w=="number"){if(!v){v="%.1f"}return h.jqplot.sprintf(v,w)}else{return String(w)}};h.jqplot.AxisTickRenderer.prototype.pack=function(){};h.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new h.jqplot.ShadowRenderer()};h.jqplot.CanvasGridRenderer.prototype.init=function(w){this._ctx;h.extend(true,this,w);var v={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false};this.renderer.shadowRenderer.init(v)};h.jqplot.CanvasGridRenderer.prototype.createElement=function(){var y=document.createElement("canvas");var v=this._plotDimensions.width;var x=this._plotDimensions.height;y.width=v;y.height=x;this._elem=h(y);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});if(h.browser.msie){window.G_vmlCanvasManager.init_(document)}if(h.browser.msie){y=window.G_vmlCanvasManager.initElement(y)}this._top=this._offsets.top;this._bottom=x-this._offsets.bottom;this._left=this._offsets.left;this._right=v-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;return this._elem};h.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var L=this._ctx;var E=this._axes;L.save();L.fillStyle=this.background;L.fillRect(this._left,this._top,this._width,this._height);if(this.drawGridlines){L.save();L.lineJoin="miter";L.lineCap="butt";L.lineWidth=this.gridLineWidth;L.strokeStyle=this.gridLineColor;var G,D;var v=["xaxis","yaxis","x2axis","y2axis"];for(var A=4;A>0;A--){var w=v[A-1];var y=E[w];var H=y._ticks;if(y.show){for(var z=H.length;z>0;z--){var K=H[z-1];if(K.show){var F=Math.round(y.u2p(K.value))+0.5;switch(w){case"xaxis":if(K.showGridline){C(F,this._top,F,this._bottom)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._bottom;D=this._bottom+s;break;case"inside":G=this._bottom-s;D=this._bottom;break;case"cross":G=this._bottom-s;D=this._bottom+s;break;default:G=this._bottom;D=this._bottom+s;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[F,G],[F,D]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}C(F,G,F,D)}break;case"yaxis":if(K.showGridline){C(this._right,F,this._left,F)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._left-s;D=this._left;break;case"inside":G=this._left;D=this._left+s;break;case"cross":G=this._left-s;D=this._left+s;break;default:G=this._left-s;D=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[G,F],[D,F]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}break;case"x2axis":if(K.showGridline){C(F,this._bottom,F,this._top)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._top-s;D=this._top;break;case"inside":G=this._top;D=this._top+s;break;case"cross":G=this._top-s;D=this._top+s;break;default:G=this._top-s;D=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[F,G],[F,D]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}C(F,G,F,D)}break;case"y2axis":if(K.showGridline){C(this._left,F,this._right,F)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._right;D=this._right+s;break;case"inside":G=this._right-s;D=this._right;break;case"cross":G=this._right-s;D=this._right+s;break;default:G=this._right;D=this._right+s;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[G,F],[D,F]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}break;default:break}}}}}v=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];for(var A=7;A>0;A--){var y=E[v[A-1]];var H=y._ticks;if(y.show){var J=H[y.numberTicks-1];var B=H[0];var x=y.getLeft();var I=[[x,J.getTop()+J.getHeight()/2],[x,B.getTop()+B.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(L,I,{lineCap:"butt",fill:false,closePath:false})}C(I[0][0],I[0][1],I[1][0],I[1][1],{lineCap:"butt",strokeStyle:y.borderColor,lineWidth:y.borderWidth});for(var z=H.length;z>0;z--){var K=H[z-1];s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;if(K.showMark&&K.mark){switch(m){case"outside":G=x;D=x+s;break;case"inside":G=x-s;D=x;break;case"cross":G=x-s;D=x+s;break;default:G=x;D=x+s;break}I=[[G,F],[D,F]];if(this.shadow){this.renderer.shadowRenderer.draw(L,I,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}}}}L.restore()}function C(Q,P,N,M,O){L.save();O=O||{};h.extend(true,L,O);L.beginPath();L.moveTo(Q,P);L.lineTo(N,M);L.stroke();L.restore()}if(this.shadow){var I=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(L,I)}C(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:E.x2axis.borderColor,lineWidth:E.x2axis.borderWidth});C(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:E.y2axis.borderColor,lineWidth:E.y2axis.borderWidth});C(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:E.xaxis.borderColor,lineWidth:E.xaxis.borderWidth});C(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:E.yaxis.borderColor,lineWidth:E.yaxis.borderWidth});L.restore()};var r=24*60*60*1000;var j=function(v,w){v=String(v);while(v.length<w){v="0"+v}return v};var e={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:r,week:7*r,month:{add:function(x,v){e.year.add(x,Math[v>0?"floor":"ceil"](v/12));var w=x.getMonth()+(v%12);if(w==12){w=0;x.setYear(x.getFullYear()+1)}else{if(w==-1){w=11;x.setYear(x.getFullYear()-1)}}x.setMonth(w)},diff:function(z,x){var v=z.getFullYear()-x.getFullYear();var w=z.getMonth()-x.getMonth()+(v*12);var y=z.getDate()-x.getDate();return w+(y/30)}},year:{add:function(w,v){w.setYear(w.getFullYear()+Math[v>0?"floor":"ceil"](v))},diff:function(w,v){return e.month.diff(w,v)/12}}};for(var u in e){if(u.substring(u.length-1)!="s"){e[u+"s"]=e[u]}}var t=function(y,x){if(Date.prototype.strftime.formatShortcuts[x]){return y.strftime(Date.prototype.strftime.formatShortcuts[x])}else{var v=(Date.prototype.strftime.formatCodes[x]||"").split(".");var w=y["get"+v[0]]?y["get"+v[0]]():"";if(v[1]){w=j(w,v[1])}return w}};var q={succ:function(v){return this.clone().add(1,v)},add:function(x,w){var v=e[w]||e.day;if(typeof v=="number"){this.setTime(this.getTime()+(v*x))}else{v.add(this,x)}return this},diff:function(w,z,v){w=Date.create(w);if(w===null){return null}var x=e[z]||e.day;if(typeof x=="number"){var y=(this.getTime()-w.getTime())/x}else{var y=x.diff(this,w)}return(v?y:Math[y>0?"floor":"ceil"](y))},strftime:function(w){var y=w||"%Y-%m-%d",v="",x;while(y.length>0){if(x=y.match(Date.prototype.strftime.formatCodes.matcher)){v+=y.slice(0,x.index);v+=(x[1]||"")+t(this,x[2]);y=y.slice(x.index+x[0].length)}else{v+=y;y=""}}return v},getShortYear:function(){return this.getYear()%100},getMonthNumber:function(){return this.getMonth()+1},getMonthName:function(){return Date.MONTHNAMES[this.getMonth()]},getAbbrMonthName:function(){return Date.ABBR_MONTHNAMES[this.getMonth()]},getDayName:function(){return Date.DAYNAMES[this.getDay()]},getAbbrDayName:function(){return Date.ABBR_DAYNAMES[this.getDay()]},getDayOrdinal:function(){return Date.ORDINALNAMES[this.getDate()%10]},getHours12:function(){var v=this.getHours();return v>12?v-12:(v==0?12:v)},getAmPm:function(){return this.getHours()>=12?"PM":"AM"},getUnix:function(){return Math.round(this.getTime()/1000,0)},getGmtOffset:function(){var v=this.getTimezoneOffset()/60;var w=v<0?"+":"-";v=Math.abs(v);return w+j(Math.floor(v),2)+":"+j((v%1)*60,2)},getTimezoneName:function(){var v=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return v[1]||v[2]||"GMT"+this.getGmtOffset()},toYmdInt:function(){return(this.getFullYear()*10000)+(this.getMonthNumber()*100)+this.getDate()},clone:function(){return new Date(this.getTime())}};for(var a in q){Date.prototype[a]=q[a]}var d={create:function(v){if(v instanceof Date){return v}if(typeof v=="number"){return new Date(v)}var A=String(v).replace(/^\s*(.+)\s*$/,"$1"),w=0,x=Date.create.patterns.length,y;var z=A;while(w<x){ms=Date.parse(z);if(!isNaN(ms)){return new Date(ms)}y=Date.create.patterns[w];if(typeof y=="function"){obj=y(z);if(obj instanceof Date){return obj}}else{z=A.replace(y[0],y[1])}w++}return NaN},MONTHNAMES:"January February March April May June July August September October November December".split(" "),ABBR_MONTHNAMES:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAYNAMES:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ABBR_DAYNAMES:"Sun Mon Tue Wed Thu Fri Sat".split(" "),ORDINALNAMES:"th st nd rd th th th th th th".split(" "),ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S",daysInMonth:function(v,w){if(w==2){return new Date(v,1,29).getDate()==29?29:28}return[c,31,c,31,30,31,30,31,31,30,31,30,31][w]}};for(var a in d){Date[a]=d[a]}Date.prototype.strftime.formatCodes={matcher:/()%(#?(%|[a-z]))/i,Y:"FullYear",y:"ShortYear.2",m:"MonthNumber.2","#m":"MonthNumber",B:"MonthName",b:"AbbrMonthName",d:"Date.2","#d":"Date",e:"Date",A:"DayName",a:"AbbrDayName",w:"Day",o:"DayOrdinal",H:"Hours.2","#H":"Hours",I:"Hours12.2","#I":"Hours12",p:"AmPm",M:"Minutes.2","#M":"Minutes",S:"Seconds.2","#S":"Seconds",s:"Unix",N:"Milliseconds.3","#N":"Milliseconds",O:"TimezoneOffset",Z:"TimezoneName",G:"GmtOffset"};Date.prototype.strftime.formatShortcuts={F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",D:"%m/%d/%y","#c":"%a %b %e %H:%M:%S %Y",v:"%e-%b-%Y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"};Date.create.patterns=[[/-/g,"/"],[/st|nd|rd|th/g,""],[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(y){var w=y.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(w){if(w[1]){var x=Date.create(w[1]);if(isNaN(x)){return}}else{var x=new Date();x.setMilliseconds(0)}var v=parseFloat(w[2]);if(w[6]){v=w[6].toLowerCase()=="am"?(v==12?0:v):(v==12?12:v+12)}x.setHours(v,parseInt(w[3]||0,10),parseInt(w[4]||0,10),((parseFloat(w[5]||0))||0)*1000);return x}else{return y}},function(y){var w=y.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(w){if(w[1]){var x=Date.create(w[1]);if(isNaN(x)){return}}else{var x=new Date();x.setMilliseconds(0)}var v=parseFloat(w[2]);x.setHours(v,parseInt(w[3],10),parseInt(w[4],10),parseFloat(w[5])*1000);return x}else{return y}},function(A){var x=A.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(x){var z=new Date();var B=parseFloat(String(z.getFullYear()).slice(2,4));var C=parseInt(String(z.getFullYear())/100,10)*100;var E=1;var F=parseFloat(x[1]);var D=parseFloat(x[3]);var w,v,G;if(F>31){v=x[3];if(F<B+E){w=C+F}else{w=C-100+F}}else{v=x[1];if(D<B+E){w=C+D}else{w=C-100+D}}var G=h.inArray(x[2],Date.ABBR_MONTHNAMES);if(G==-1){G=h.inArray(x[2],Date.MONTHNAMES)}z.setFullYear(w,G,v);z.setHours(0,0,0,0);return z}else{return A}}];if(h.jqplot.config.debug){h.date=Date.create}h.jqplot.DivTitleRenderer=function(){};h.jqplot.DivTitleRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.DivTitleRenderer.prototype.draw=function(){var w=this.renderer;if(!this.text){this.show=false;this._elem=h('<div style="height:0px;width:0px;"></div>')}else{if(this.text){var v="position:absolute;top:0px;left:0px;";v+=(this._plotWidth)?"width:"+this._plotWidth+"px;":"";v+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";v+=(this.fontSize)?"font-size:"+this.fontSize+";":"";v+=(this.textAlign)?"text-align:"+this.textAlign+";":"text-align:center;";v+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=h('<div class="jqplot-title" style="'+v+'">'+this.text+"</div>")}}return this._elem};h.jqplot.DivTitleRenderer.prototype.pack=function(){};h.jqplot.LineRenderer=function(){this.shapeRenderer=new h.jqplot.ShapeRenderer();this.shadowRenderer=new h.jqplot.ShadowRenderer()};h.jqplot.LineRenderer.prototype.init=function(w){h.extend(true,this.renderer,w);var y={lineJoin:"round",lineCap:"round",fill:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.fillColor,lineWidth:this.lineWidth,closePath:this.fill};this.renderer.shapeRenderer.init(y);if(this.lineWidth>2.5){var x=this.shadowOffset*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{var x=this.shadowOffset*Math.atan((this.lineWidth/2.5))/0.785398163}var v={lineJoin:"round",lineCap:"round",fill:this.fill,isarc:false,angle:this.shadowAngle,offset:x,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,closePath:this.fill};this.renderer.shadowRenderer.init(v)};h.jqplot.LineRenderer.prototype.setGridData=function(A){var w=this._xaxis.series_u2p;var z=this._yaxis.series_u2p;var x=this._plotData;var y=this._prevPlotData;this.gridData=[];this._prevGridData=[];for(var v=0;v<this.data.length;v++){if(x[v]!=null){this.gridData.push([w.call(this._xaxis,x[v][0]),z.call(this._yaxis,x[v][1])])}if(y[v]!=null){this._prevGridData.push([w.call(this._xaxis,y[v][0]),z.call(this._yaxis,y[v][1])])}}};h.jqplot.LineRenderer.prototype.makeGridData=function(y,A){var x=this._xaxis.series_u2p;var z=this._yaxis.series_u2p;var w=[];var B=[];for(var v=0;v<y.length;v++){if(y[v]!=null){w.push([x.call(this._xaxis,y[v][0]),z.call(this._yaxis,y[v][1])])}}return w};h.jqplot.LineRenderer.prototype.draw=function(G,N,w){var K;var E=(w!=c)?w:{};var y=(E.shadow!=c)?E.shadow:this.shadow;var P=(E.showLine!=c)?E.showLine:this.showLine;var J=(E.fill!=c)?E.fill:this.fill;var v=(E.fillAndStroke!=c)?E.fillAndStroke:this.fillAndStroke;G.save();if(N.length){if(P){if(J){if(this.fillToZero){var z=new h.jqplot.ColorGenerator(this.negativeSeriesColors);var L=z.get(this.index);if(!this.useNegativeColors){L=E.fillStyle}var C=false;var D=E.fillStyle;if(v){var O=N.slice(0)}if(this.index==0||!this._stack){var H=[];var M=this._yaxis.series_u2p(0);var x=this._xaxis.series_u2p(0);if(this.fillAxis=="y"){H.push([N[0][0],M]);for(var K=0;K<N.length-1;K++){H.push(N[K]);if(this._plotData[K][1]*this._plotData[K+1][1]<0){if(this._plotData[K][1]<0){C=true;E.fillStyle=L}else{C=false;E.fillStyle=D}var B=N[K][0]+(N[K+1][0]-N[K][0])*(M-N[K][1])/(N[K+1][1]-N[K][1]);H.push([B,M]);if(y){this.renderer.shadowRenderer.draw(G,H,E)}this.renderer.shapeRenderer.draw(G,H,E);H=[[B,M]]}}if(this._plotData[N.length-1][1]<0){C=true;E.fillStyle=L}else{C=false;E.fillStyle=D}H.push(N[N.length-1]);H.push([N[N.length-1][0],M])}if(y){this.renderer.shadowRenderer.draw(G,H,E)}this.renderer.shapeRenderer.draw(G,H,E)}else{var F=this._prevGridData;for(var K=F.length;K>0;K--){N.push(F[K-1])}if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}}else{if(v){var O=N.slice(0)}if(this.index==0||!this._stack){var A=G.canvas.height;N.unshift([N[0][0],A]);len=N.length;N.push([N[len-1][0],A])}else{var F=this._prevGridData;for(var K=F.length;K>0;K--){N.push(F[K-1])}}if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}if(v){var I=h.extend(true,{},E,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(G,O,I);if(this.markerRenderer.show){for(K=0;K<O.length;K++){this.markerRenderer.draw(O[K][0],O[K][1],G,E.markerOptions)}}}}else{if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}}if(this.markerRenderer.show&&!J){for(K=0;K<N.length;K++){this.markerRenderer.draw(N[K][0],N[K][1],G,E.markerOptions)}}}G.restore()};h.jqplot.LineRenderer.prototype.drawShadow=function(v,x,w){};h.jqplot.LinearAxisRenderer=function(){};h.jqplot.LinearAxisRenderer.prototype.init=function(x){h.extend(true,this,x);var v=this._dataBounds;for(var y=0;y<this._series.length;y++){var z=this._series[y];var A=z._plotData;for(var w=0;w<A.length;w++){if(this.name=="xaxis"||this.name=="x2axis"){if(A[w][0]<v.min||v.min==null){v.min=A[w][0]}if(A[w][0]>v.max||v.max==null){v.max=A[w][0]}}else{if(A[w][1]<v.min||v.min==null){v.min=A[w][1]}if(A[w][1]>v.max||v.max==null){v.max=A[w][1]}}}}};h.jqplot.LinearAxisRenderer.prototype.draw=function(v){if(this.show){this.renderer.createTicks.call(this);var B=0;var w;this._elem=h('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var A=this._label.draw(v);A.appendTo(this._elem)}if(this.showTicks){var z=this._ticks;for(var y=0;y<z.length;y++){var x=z[y];if(x.showLabel&&(!x.isMinorTick||this.showMinorTicks)){var A=x.draw(v);A.appendTo(this._elem)}}}}return this._elem};h.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks};h.jqplot.LinearAxisRenderer.prototype.set=function(){var D=0;var y;var x=0;var C=0;var v=(this._label==null)?false:this._label.show;if(this.show&&this.showTicks){var B=this._ticks;for(var A=0;A<B.length;A++){var z=B[A];if(z.showLabel&&(!z.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){y=z._elem.outerHeight(true)}else{y=z._elem.outerWidth(true)}if(y>D){D=y}}}if(v){x=this._label._elem.outerWidth(true);C=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){D=D+C;this._elem.css({height:D+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){D=D+C;this._elem.css({height:D+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){D=D+x;this._elem.css({width:D+"px",left:"0px",top:"0px"});if(v&&this._label.constructor==h.jqplot.AxisLabelRenderer){this._label._elem.css("width",x+"px")}}else{D=D+x;this._elem.css({width:D+"px",right:"0px",top:"0px"});if(v&&this._label.constructor==h.jqplot.AxisLabelRenderer){this._label._elem.css("width",x+"px")}}}}}};h.jqplot.LinearAxisRenderer.prototype.createTicks=function(){var ab=this._ticks;var X=this.ticks;var ac=this.name;var aa=this._dataBounds;var S,Y;var P,T;var y,x;var v,U;if(X.length){for(U=0;U<X.length;U++){var D=X[U];var G=new this.tickRenderer(this.tickOptions);if(D.constructor==Array){G.value=D[0];G.label=D[1];if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(D[0],this.name);this._ticks.push(G)}else{G.value=D;if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(D,this.name);this._ticks.push(G)}}this.numberTicks=X.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(ac=="xaxis"||ac=="x2axis"){S=this._plotDimensions.width}else{S=this._plotDimensions.height}if(!this.autoscale&&this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}P=((this.min!=null)?this.min:aa.min);T=((this.max!=null)?this.max:aa.max);if(P==T){var E=0.05;if(P>0){E=Math.max(Math.log(P)/Math.LN10,0.05)}P-=E;T+=E}var K=T-P;var O,R;var W;if(this.autoscale&&this.min==null&&this.max==null){var J,z,L;var F=false;var N=false;var w={min:null,max:null,average:null,stddev:null};for(var U=0;U<this._series.length;U++){var I=this._series[U];var B=(I.fillAxis=="x")?I._xaxis.name:I._yaxis.name;if(this.name==B){var H=I._plotValues[I.fillAxis];var A=H[0];var C=H[0];for(var Q=1;Q<H.length;Q++){if(H[Q]<A){A=H[Q]}else{if(H[Q]>C){C=H[Q]}}}var M=(C-A)/C;if(I.renderer.constructor==h.jqplot.BarRenderer){if(A>=0&&(I.fillToZero||M>0.1)){F=true}else{F=false;if(I.fill&&I.fillToZero&&A<0&&C>0){N=true}else{N=false}}}else{if(I.fill){if(A>=0&&(I.fillToZero||M>0.1)){F=true}else{if(A<0&&C>0&&I.fillToZero){F=false;N=true}else{F=false;N=false}}}else{if(A<0){F=false}}}}}if(F){this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing);this.min=0;z=T/(this.numberTicks-1);W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)));if(z/W==parseInt(z/W,10)){z+=W}this.tickInterval=Math.ceil(z/W)*W;this.max=this.tickInterval*(this.numberTicks-1)}else{if(N){this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing);var V=Math.ceil(Math.abs(P)/K*(this.numberTicks-1));var Z=this.numberTicks-1-V;z=Math.max(Math.abs(P/V),Math.abs(T/Z));W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)));this.tickInterval=Math.ceil(z/W)*W;this.max=this.tickInterval*Z;this.min=-this.tickInterval*V}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(K/this.tickInterval)}else{this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){z=K/(this.numberTicks-1);if(z<1){W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)))}else{W=1}this.tickInterval=Math.ceil(z*W*this.pad)/W}else{W=1/this.tickInterval}J=this.tickInterval*(this.numberTicks-1);L=(J-K)/2;if(this.min==null){this.min=Math.floor(W*(P-L))/W}if(this.max==null){this.max=this.min+J}}}}else{O=(this.min!=null)?this.min:P-K*(this.padMin-1);R=(this.max!=null)?this.max:T+K*(this.padMax-1);this.min=O;this.max=R;K=this.max-this.min;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(S>100){this.numberTicks=parseInt(3+(S-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=K/(this.numberTicks-1)}}for(var U=0;U<this.numberTicks;U++){v=this.min+U*this.tickInterval;var G=new this.tickRenderer(this.tickOptions);if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(v,this.name);this._ticks.push(G)}}};h.jqplot.LinearAxisRenderer.prototype.pack=function(F,A){var I=this._ticks;var G=this.max;var C=this.min;var z=A.max;var M=A.min;var D=(this._label==null)?false:this._label.show;for(var v in F){this._elem.css(v,F[v])}this._offsets=A;var y=z-M;var L=G-C;this.p2u=function(w){return(w-M)*L/y+C};this.u2p=function(w){return(w-C)*y/L+M};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(w){return(w-C)*y/L};this.series_p2u=function(w){return w*L/y+C}}else{this.series_u2p=function(w){return(w-G)*y/L};this.series_p2u=function(w){return w*L/y+G}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(i=0;i<I.length;i++){var K=I[i];if(K.show&&K.showLabel){var B;if(K.constructor==h.jqplot.CanvasAxisTickRenderer&&K.angle){var J=(this.name=="xaxis")?1:-1;switch(K.labelPosition){case"auto":if(J*K.angle<0){B=-K.getWidth()+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2}else{B=-K._textRenderer.height*Math.sin(K._textRenderer.angle)/2}break;case"end":B=-K.getWidth()+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break;case"start":B=-K._textRenderer.height*Math.sin(K._textRenderer.angle)/2;break;case"middle":B=-K.getWidth()/2+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break;default:B=-K.getWidth()/2+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break}}else{B=-K.getWidth()/2}var x=this.u2p(K.value)+B+"px";K._elem.css("left",x);K.pack()}}if(D){var H=this._label._elem.outerWidth(true);this._label._elem.css("left",M+y/2-H/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(i=0;i<I.length;i++){var K=I[i];if(K.show&&K.showLabel){var B;if(K.constructor==h.jqplot.CanvasAxisTickRenderer&&K.angle){var J=(this.name=="yaxis")?1:-1;switch(K.labelPosition){case"auto":case"end":if(J*K.angle<0){B=-K._textRenderer.height*Math.cos(-K._textRenderer.angle)/2}else{B=-K.getHeight()+K._textRenderer.height*Math.cos(K._textRenderer.angle)/2}break;case"start":if(K.angle>0){B=-K._textRenderer.height*Math.cos(-K._textRenderer.angle)/2}else{B=-K.getHeight()+K._textRenderer.height*Math.cos(K._textRenderer.angle)/2}break;case"middle":B=-K.getHeight()/2;break;default:B=-K.getHeight()/2;break}}else{B=-K.getHeight()/2}var x=this.u2p(K.value)+B+"px";K._elem.css("top",x);K.pack()}}if(D){var E=this._label._elem.outerHeight(true);this._label._elem.css("top",z-y/2-E/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}};h.jqplot.MarkerRenderer=function(v){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new h.jqplot.ShadowRenderer();this.shapeRenderer=new h.jqplot.ShapeRenderer();h.extend(true,this,v)};h.jqplot.MarkerRenderer.prototype.init=function(v){h.extend(true,this,v);var x={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){x.fill=true}if(this.style.indexOf("ircle")!=-1){x.isarc=true;x.closePath=false}this.shadowRenderer.init(x);var w={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){w.fill=true}if(this.style.indexOf("ircle")!=-1){w.isarc=true;w.closePath=false}this.shapeRenderer.init(w)};h.jqplot.MarkerRenderer.prototype.drawDiamond=function(z,w,C,B,E){var v=1.2;var F=this.size/2/v;var D=this.size/2*v;var A=[[z-F,w],[z,w+D],[z+F,w],[z,w-D]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawPlus=function(A,z,D,C,G){var w=1;var H=this.size/2*w;var E=this.size/2*w;var F=[[A,z-E],[A,z+E]];var B=[[A+H,z],[A-H,z]];var v=h.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(D,F,{closePath:false});this.shadowRenderer.draw(D,B,{closePath:false})}this.shapeRenderer.draw(D,F,v);this.shapeRenderer.draw(D,B,v);D.restore()};h.jqplot.MarkerRenderer.prototype.drawX=function(A,z,D,C,G){var w=1;var H=this.size/2*w;var E=this.size/2*w;var v=h.extend(true,{},this.options,{closePath:false});var F=[[A-H,z-E],[A+H,z+E]];var B=[[A-H,z+E],[A+H,z-E]];if(this.shadow){this.shadowRenderer.draw(D,F,{closePath:false});this.shadowRenderer.draw(D,B,{closePath:false})}this.shapeRenderer.draw(D,F,v);this.shapeRenderer.draw(D,B,v);D.restore()};h.jqplot.MarkerRenderer.prototype.drawDash=function(z,w,C,B,E){var v=1;var F=this.size/2*v;var D=this.size/2*v;var A=[[z-F,w],[z+F,w]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawSquare=function(z,w,C,B,E){var v=1;var F=this.size/2/v;var D=this.size/2*v;var A=[[z-F,w-D],[z-F,w+D],[z+F,w+D],[z+F,w-D]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawCircle=function(w,E,A,D,B){var v=this.size/2;var z=2*Math.PI;var C=[w,E,v,0,z,true];if(this.shadow){this.shadowRenderer.draw(A,C)}this.shapeRenderer.draw(A,C,B);A.restore()};h.jqplot.MarkerRenderer.prototype.draw=function(v,A,w,z){z=z||{};switch(this.style){case"diamond":this.drawDiamond(v,A,w,false,z);break;case"filledDiamond":this.drawDiamond(v,A,w,true,z);break;case"circle":this.drawCircle(v,A,w,false,z);break;case"filledCircle":this.drawCircle(v,A,w,true,z);break;case"square":this.drawSquare(v,A,w,false,z);break;case"filledSquare":this.drawSquare(v,A,w,true,z);break;case"x":this.drawX(v,A,w,true,z);break;case"plus":this.drawPlus(v,A,w,true,z);break;case"dash":this.drawDash(v,A,w,true,z);break;default:this.drawDiamond(v,A,w,false,z);break}};h.jqplot.ShadowRenderer=function(v){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.isarc=false;h.extend(true,this,v)};h.jqplot.ShadowRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.ShadowRenderer.prototype.draw=function(E,C,F){E.save();var v=(F!=null)?F:{};var D=(v.fill!=null)?v.fill:this.fill;var B=(v.closePath!=null)?v.closePath:this.closePath;var y=(v.offset!=null)?v.offset:this.offset;var w=(v.alpha!=null)?v.alpha:this.alpha;var A=(v.depth!=null)?v.depth:this.depth;E.lineWidth=(v.lineWidth!=null)?v.lineWidth:this.lineWidth;E.lineJoin=(v.lineJoin!=null)?v.lineJoin:this.lineJoin;E.lineCap=(v.lineCap!=null)?v.lineCap:this.lineCap;E.strokeStyle="rgba(0,0,0,"+w+")";E.fillStyle="rgba(0,0,0,"+w+")";for(var x=0;x<A;x++){E.translate(Math.cos(this.angle*Math.PI/180)*y,Math.sin(this.angle*Math.PI/180)*y);E.beginPath();if(this.isarc){E.arc(C[0],C[1],C[2],C[3],C[4],true)}else{E.moveTo(C[0][0],C[0][1]);for(var z=1;z<C.length;z++){E.lineTo(C[z][0],C[z][1])}}if(B){E.closePath()}if(D){E.fill()}else{E.stroke()}}E.restore()};h.jqplot.ShapeRenderer=function(v){this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";h.extend(true,this,v)};h.jqplot.ShapeRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.ShapeRenderer.prototype.draw=function(D,B,F){D.save();var v=(F!=null)?F:{};var C=(v.fill!=null)?v.fill:this.fill;var z=(v.closePath!=null)?v.closePath:this.closePath;var A=(v.fillRect!=null)?v.fillRect:this.fillRect;var x=(v.strokeRect!=null)?v.strokeRect:this.strokeRect;var w=(v.clearRect!=null)?v.clearRect:this.clearRect;var E=(v.isarc!=null)?v.isarc:this.isarc;D.lineWidth=v.lineWidth||this.lineWidth;D.lineJoin=v.lineJoing||this.lineJoin;D.lineCap=v.lineCap||this.lineCap;D.strokeStyle=(v.strokeStyle||v.color)||this.strokeStyle;D.fillStyle=v.fillStyle||this.fillStyle;D.beginPath();if(E){D.arc(B[0],B[1],B[2],B[3],B[4],true);if(z){D.closePath()}if(C){D.fill()}else{D.stroke()}D.restore();return}else{if(w){D.clearRect(B[0],B[1],B[2],B[3]);D.restore();return}else{if(A||x){if(A){D.fillRect(B[0],B[1],B[2],B[3])}if(x){D.strokeRect(B[0],B[1],B[2],B[3]);D.restore();return}}else{D.moveTo(B[0][0],B[0][1]);for(var y=1;y<B.length;y++){D.lineTo(B[y][0],B[y][1])}if(z){D.closePath()}if(C){D.fill()}else{D.stroke()}}}}D.restore()};h.jqplot.TableLegendRenderer=function(){};h.jqplot.TableLegendRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.TableLegendRenderer.prototype.addrow=function(x,w,A){var v=(A)?this.rowSpacing:"0";var z=h('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);h('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+v+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+w+';"></div></div></td>').appendTo(z);var y=h('<td class="jqplot-table-legend" style="padding-top:'+v+';"></td>');y.appendTo(z);if(this.escapeHtml){y.text(x)}else{y.html(x)}};h.jqplot.TableLegendRenderer.prototype.draw=function(){var B=this;if(this.show){var z=this._series;var D="position:absolute;";D+=(this.background)?"background:"+this.background+";":"";D+=(this.border)?"border:"+this.border+";":"";D+=(this.fontSize)?"font-size:"+this.fontSize+";":"";D+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";D+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=h('<table class="jqplot-table-legend" style="'+D+'"></table>');var v=false;for(var A=0;A<z.length;A++){s=z[A];if(s.show&&s.showLabel){var y=s.label.toString();if(y){var w=s.color;if(s._stack&&!s.fill){w=""}this.renderer.addrow.call(this,y,w,v);v=true}for(var x=0;x<h.jqplot.addLegendRowHooks.length;x++){var C=h.jqplot.addLegendRowHooks[x].call(this,s);if(C){this.renderer.addrow.call(this,C.label,C.color,v);v=true}}}}}return this._elem};h.jqplot.TableLegendRenderer.prototype.pack=function(y){if(this.show){var x={_top:y.top,_left:y.left,_right:y.right,_bottom:this._plotDimensions.height-y.bottom};switch(this.location){case"nw":var w=x._left+this.xoffset;var v=x._top+this.yoffset;this._elem.css("left",w);this._elem.css("top",v);break;case"n":var w=(y.left+(this._plotDimensions.width-y.right))/2-this.getWidth()/2;var v=x._top+this.yoffset;this._elem.css("left",w);this._elem.css("top",v);break;case"ne":var w=y.right+this.xoffset;var v=x._top+this.yoffset;this._elem.css({right:w,top:v});break;case"e":var w=y.right+this.xoffset;var v=(y.top+(this._plotDimensions.height-y.bottom))/2-this.getHeight()/2;this._elem.css({right:w,top:v});break;case"se":var w=y.right+this.xoffset;var v=y.bottom+this.yoffset;this._elem.css({right:w,bottom:v});break;case"s":var w=(y.left+(this._plotDimensions.width-y.right))/2-this.getWidth()/2;var v=y.bottom+this.yoffset;this._elem.css({left:w,bottom:v});break;case"sw":var w=x._left+this.xoffset;var v=y.bottom+this.yoffset;this._elem.css({left:w,bottom:v});break;case"w":var w=x._left+this.xoffset;var v=(y.top+(this._plotDimensions.height-y.bottom))/2-this.getHeight()/2;this._elem.css({left:w,top:v});break;default:var w=x._right-this.xoffset;var v=x._bottom+this.yoffset;this._elem.css({right:w,bottom:v});break}}};h.jqplot.sprintf=function(){function A(G,C,D,F){var E=(G.length>=C)?"":Array(1+C-G.length>>>0).join(D);return F?G+E:E+G}function x(H,G,J,E,F,D){var I=E-H.length;if(I>0){var C=" ";if(D){C="&nbsp;"}if(J||!F){H=A(H,E,C,J)}else{H=H.slice(0,G.length)+A("",I,"0",true)+H.slice(G.length)}}return H}function B(K,D,I,E,C,H,J,G){var F=K>>>0;I=I&&F&&{"2":"0b","8":"0","16":"0x"}[D]||"";K=I+A(F.toString(D),H||0,"0",false);return x(K,I,E,C,J,G)}function v(G,H,E,C,F,D){if(C!=null){G=G.slice(0,C)}return x(G,"",H,E,F,D)}var w=arguments,y=0,z=w[y++];return z.replace(h.jqplot.sprintf.regex,function(V,I,J,M,X,T,G){if(V=="%%"){return"%"}var N=false,K="",L=false,U=false,H=false;for(var S=0;J&&S<J.length;S++){switch(J.charAt(S)){case" ":K=" ";break;case"+":K="+";break;case"-":N=true;break;case"0":L=true;break;case"#":U=true;break;case"&":H=true;break}}if(!M){M=0}else{if(M=="*"){M=+w[y++]}else{if(M.charAt(0)=="*"){M=+w[M.slice(1,-1)]}else{M=+M}}}if(M<0){M=-M;N=true}if(!isFinite(M)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!T){T="fFeE".indexOf(G)>-1?6:(G=="d")?0:void (0)}else{if(T=="*"){T=+w[y++]}else{if(T.charAt(0)=="*"){T=+w[T.slice(1,-1)]}else{T=+T}}}var P=I?w[I.slice(0,-1)]:w[y++];switch(G){case"s":if(P==null){return""}return v(String(P),N,M,T,L,H);case"c":return v(String.fromCharCode(+P),N,M,T,L,H);case"b":return B(P,2,U,N,M,T,L,H);case"o":return B(P,8,U,N,M,T,L,H);case"x":return B(P,16,U,N,M,T,L,H);case"X":return B(P,16,U,N,M,T,L,H).toUpperCase();case"u":return B(P,10,U,N,M,T,L,H);case"i":case"d":var E=parseInt(+P,10);if(isNaN(E)){return""}var R=E<0?"-":K;P=R+A(String(Math.abs(E)),T,"0",false);return x(P,R,N,M,L,H);case"e":case"E":case"f":case"F":case"g":case"G":var E=+P;if(isNaN(E)){return""}var R=E<0?"-":K;var F=["toExponential","toFixed","toPrecision"]["efg".indexOf(G.toLowerCase())];var W=["toString","toUpperCase"]["eEfFgG".indexOf(G)%2];P=R+Math.abs(E)[F](T);return x(P,R,N,M,L,H)[W]();case"p":case"P":var E=+P;if(isNaN(E)){return""}var R=E<0?"-":K;var O=String(Number(Math.abs(E)).toExponential()).split(/e|E/);var D=(O[0].indexOf(".")!=-1)?O[0].length-1:O[0].length;var Q=(O[1]<0)?-O[1]-1:0;if(Math.abs(E)<1){if(D+Q<=T){P=R+Math.abs(E).toPrecision(D)}else{if(D<=T-1){P=R+Math.abs(E).toExponential(D-1)}else{P=R+Math.abs(E).toExponential(T-1)}}}else{var C=(D<=T)?D:T;P=R+Math.abs(E).toPrecision(C)}var W=["toString","toUpperCase"]["pP".indexOf(G)%2];return x(P,R,N,M,L,H)[W]();case"n":return"";default:return V}})};h.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0& ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g})(jQuery);
View
404 ...dashboard-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.js
@@ -0,0 +1,404 @@
+/**
+ * Copyright (c) 2009 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * The author would appreciate an email letting him know of any substantial
+ * use of jqPlot. You can reach the author at: chris dot leonello at gmail
+ * dot com or see http://www.jqplot.com/info.php . This is, of course,
+ * not required.
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * Thanks for using jqPlot!
+ *
+ */
+(function($) {
+
+ // Class: $.jqplot.BarRenderer
+ // A plugin renderer for jqPlot to draw a bar plot.
+ // Draws series as a line.
+
+ $.jqplot.BarRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.BarRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.BarRenderer.prototype.constructor = $.jqplot.BarRenderer;
+
+ // called with scope of series.
+ $.jqplot.BarRenderer.prototype.init = function(options) {
+ // Group: Properties
+ //
+ // prop: barPadding
+ // Number of pixels between adjacent bars at the same axis value.
+ this.barPadding = 8;
+ // prop: barMargin
+ // Number of pixels between groups of bars at adjacent axis values.
+ this.barMargin = 10;
+ // prop: barDirection
+ // 'vertical' = up and down bars, 'horizontal' = side to side bars
+ this.barDirection = 'vertical';
+ // prop: barWidth
+ // Width of the bar in pixels (auto by devaul). null = calculated automatically.
+ this.barWidth = null;
+ // prop: shadowOffset
+ // offset of the shadow from the slice and offset of
+ // each succesive stroke of the shadow from the last.
+ this.shadowOffset = 2;
+ // prop: shadowDepth
+ // number of strokes to apply to the shadow,
+ // each stroke offset shadowOffset from the last.
+ this.shadowDepth = 5;
+ // prop: shadowAlpha
+ // transparency of the shadow (0 = transparent, 1 = opaque)
+ this.shadowAlpha = 0.08;
+ // prop: waterfall
+ // true to enable waterfall plot.
+ this.waterfall = false;
+ // prop: varyBarColor
+ // true to color each bar separately.
+ this.varyBarColor = false;
+ $.extend(true, this, options);
+ // fill is still needed to properly draw the legend.
+ // bars have to be filled.
+ this.fill = true;
+
+ if (this.waterfall) {
+ this.fillToZero = false;
+ this.disableStack = true;
+ }
+
+ if (this.barDirection == 'vertical' ) {
+ this._primaryAxis = '_xaxis';
+ this._stackAxis = 'y';
+ this.fillAxis = 'y';
+ }
+ else {
+ this._primaryAxis = '_yaxis';
+ this._stackAxis = 'x';
+ this.fillAxis = 'x';
+ }
+ // set the shape renderer options
+ var opts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill};
+ this.renderer.shapeRenderer.init(opts);
+ // set the shadow renderer options
+ var sopts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill};
+ this.renderer.shadowRenderer.init(sopts);
+ };
+
+ // called with scope of series
+ function barPreInit(target, data, seriesDefaults, options) {
+ if (this.rendererOptions.barDirection == 'horizontal') {
+ this._stackAxis = 'x';
+ this._primaryAxis = '_yaxis';
+ }
+ if (this.rendererOptions.waterfall == true) {
+ this._data = $.extend(true, [], this.data);
+ var sum = 0;
+ var pos = (!this.rendererOptions.barDirection || this.rendererOptions.barDirection == 'vertical') ? 1 : 0;
+ for(var i=0; i<this.data.length; i++) {
+ sum += this.data[i][pos];
+ if (i>0) {
+ this.data[i][pos] += this.data[i-1][pos];
+ }
+ }
+ this.data[this.data.length] = (pos == 1) ? [this.data.length+1, sum] : [sum, this.data.length+1];
+ this._data[this._data.length] = (pos == 1) ? [this._data.length+1, sum] : [sum, this._data.length+1];
+ }
+ }
+
+ $.jqplot.preSeriesInitHooks.push(barPreInit);
+
+ // needs to be called with scope of series, not renderer.
+ $.jqplot.BarRenderer.prototype.calcSeriesNumbers = function() {
+ var nvals = 0;
+ var nseries = 0;
+ var paxis = this[this._primaryAxis];
+ var s, series, pos;
+ // loop through all series on this axis
+ for (var i=0; i < paxis._series.length; i++) {
+ series = paxis._series[i];
+ if (series === this) {
+ pos = i;
+ }
+ // is the series rendered as a bar?
+ if (series.renderer.constructor == $.jqplot.BarRenderer) {
+ // gridData may not be computed yet, use data length insted
+ nvals += series.data.length;
+ nseries += 1;
+ }
+ }
+ return [nvals, nseries, pos];
+ };
+
+ $.jqplot.BarRenderer.prototype.setBarWidth = function() {
+ // need to know how many data values we have on the approprate axis and figure it out.
+ var i;
+ var nvals = 0;
+ var nseries = 0;
+ var paxis = this[this._primaryAxis];
+ var s, series, pos;
+ var temp = this.renderer.calcSeriesNumbers.call(this);
+ nvals = temp[0];
+ nseries = temp[1];
+ var nticks = paxis.numberTicks;
+ var nbins = (nticks-1)/2;
+ // so, now we have total number of axis values.
+ if (paxis.name == 'xaxis' || paxis.name == 'x2axis') {
+ if (this._stack) {
+ this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals * nseries - this.barMargin;
+ }
+ else {
+ this.barWidth = ((paxis._offsets.max - paxis._offsets.min)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
+ // this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding - this.barMargin/nseries;
+ }
+ }
+ else {
+ if (this._stack) {
+ this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals * nseries - this.barMargin;
+ }
+ else {
+ this.barWidth = ((paxis._offsets.min - paxis._offsets.max)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
+ // this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding - this.barMargin/nseries;
+ }
+ }
+ return [nvals, nseries];
+ };
+
+ $.jqplot.BarRenderer.prototype.draw = function(ctx, gridData, options) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var xaxis = this.xaxis;
+ var yaxis = this.yaxis;
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var pointx, pointy, nvals, nseries, pos;
+
+ if (this.barWidth == null) {
+ this.renderer.setBarWidth.call(this);
+ }
+
+ var temp = this.renderer.calcSeriesNumbers.call(this);
+ nvals = temp[0];
+ nseries = temp[1];
+ pos = temp[2];
+
+ if (this._stack) {
+ this._barNudge = 0;
+ }
+ else {
+ this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
+ }
+ if (showLine) {
+ var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors);
+ var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors);
+ var negativeColor = negativeColors.get(this.index);
+ if (! this.useNegativeColors) {
+ negativeColor = opts.fillStyle;
+ }
+ var positiveColor = opts.fillStyle;
+
+ if (this.barDirection == 'vertical') {
+ for (var i=0; i<gridData.length; i++) {
+ points = [];
+ var base = gridData[i][0] + this._barNudge;
+ var ystart;
+
+ // stacked
+ if (this._stack && this._prevGridData.length) {
+ ystart = this._prevGridData[i][1];
+ }
+ // not stacked and first series in stack
+ else {
+ if (this.fillToZero) {
+ ystart = this._yaxis.series_u2p(0);
+ }
+ else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
+ ystart = this.gridData[i-1][1];
+ }
+ else {
+ ystart = ctx.canvas.height;
+ }
+ }
+ if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
+ if (this.varyBarColor) {
+ if (this.useNegativeColors) {
+ opts.fillStyle = negativeColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColors.next();
+ }
+ }
+ else {
+ opts.fillStyle = negativeColor;
+ }
+ }
+ else {
+ if (this.varyBarColor) {
+ opts.fillStyle = positiveColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColor;
+ }
+ }
+
+ points.push([base-this.barWidth/2, ystart]);
+ points.push([base-this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, ystart]);
+ // now draw the shadows if not stacked.
+ // for stacked plots, they are predrawn by drawShadow
+ if (shadow && !this._stack) {
+ this.renderer.shadowRenderer.draw(ctx, points, opts);
+ }
+ this.renderer.shapeRenderer.draw(ctx, points, opts);
+ }
+ }
+
+ else if (this.barDirection == 'horizontal'){
+ for (var i=0; i<gridData.length; i++) {
+ points = [];
+ var base = gridData[i][1] - this._barNudge;
+ var xstart;
+
+ if (this._stack && this._prevGridData.length) {
+ xstart = this._prevGridData[i][0];
+ }
+ // not stacked and first series in stack
+ else {
+ if (this.fillToZero) {
+ xstart = this._xaxis.series_u2p(0);
+ }
+ else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
+ xstart = this.gridData[i-1][1];
+ }
+ else {
+ xstart = 0;
+ }
+ }
+ if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
+ if (this.varyBarColor) {
+ if (this.useNegativeColors) {
+ opts.fillStyle = negativeColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColors.next();
+ }
+ }
+ }
+ else {
+ if (this.varyBarColor) {
+ opts.fillStyle = positiveColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColor;
+ }
+ }
+
+ points.push([xstart, base+this.barWidth/2]);
+ points.push([gridData[i][0], base+this.barWidth/2]);
+ points.push([gridData[i][0], base-this.barWidth/2]);
+ points.push([xstart, base-this.barWidth/2]);
+ // now draw the shadows if not stacked.
+ // for stacked plots, they are predrawn by drawShadow
+ if (shadow && !this._stack) {
+ this.renderer.shadowRenderer.draw(ctx, points, opts);
+ }
+ this.renderer.shapeRenderer.draw(ctx, points, opts);
+ }
+ }
+ }
+
+ };
+
+
+ // for stacked plots, shadows will be pre drawn by drawShadow.
+ $.jqplot.BarRenderer.prototype.drawShadow = function(ctx, gridData, options) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var xaxis = this.xaxis;
+ var yaxis = this.yaxis;
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var pointx, pointy, nvals, nseries, pos;
+
+ if (this._stack && this.shadow) {
+ if (this.barWidth == null) {
+ this.renderer.setBarWidth.call(this);
+ }
+
+ var temp = this.renderer.calcSeriesNumbers.call(this);
+ nvals = temp[0];
+ nseries = temp[1];
+ pos = temp[2];
+
+ if (this._stack) {
+ this._barNudge = 0;
+ }
+ else {
+ this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
+ }
+ if (showLine) {
+
+ if (this.barDirection == 'vertical') {
+ for (var i=0; i<gridData.length; i++) {
+ points = [];
+ var base = gridData[i][0] + this._barNudge;
+ var ystart;
+
+ if (this._stack && this._prevGridData.length) {
+ ystart = this._prevGridData[i][1];
+ }
+ else {
+ if (this.fillToZero) {
+ ystart = this._yaxis.series_u2p(0);
+ }
+ else {
+ ystart = ctx.canvas.height;
+ }
+ }
+
+ points.push([base-this.barWidth/2, ystart]);
+ points.push([base-this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, ystart]);
+ this.renderer.shadowRenderer.draw(ctx, points, opts);
+ }
+ }
+
+ else if (this.barDirection == 'horizontal'){
+ for (var i=0; i<gridData.length; i++) {
+ points = [];
+ var base = gridData[i][1] - this._barNudge;
+ var xstart;
+
+ if (this._stack && this._prevGridData.length) {
+ xstart = this._prevGridData[i][0];
+ }
+ else {
+ xstart = 0;
+ }
+
+ points.push([xstart, base+this.barWidth/2]);
+ points.push([gridData[i][0], base+this.barWidth/2]);
+ points.push([gridData[i][0], base-this.barWidth/2]);
+ points.push([xstart, base-this.barWidth/2]);
+ this.renderer.shadowRenderer.draw(ctx, points, opts);
+ }
+ }
+ }
+
+ }
+
+
+ };
+})(jQuery);
View
14 ...board-0.4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.barRenderer.min.js
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) 2009 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris dot leonello at gmail dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ */
+(function(b){b.jqplot.BarRenderer=function(){b.jqplot.LineRenderer.call(this)};b.jqplot.BarRenderer.prototype=new b.jqplot.LineRenderer();b.jqplot.BarRenderer.prototype.constructor=b.jqplot.BarRenderer;b.jqplot.BarRenderer.prototype.init=function(d){this.barPadding=8;this.barMargin=10;this.barDirection="vertical";this.barWidth=null;this.shadowOffset=2;this.shadowDepth=5;this.shadowAlpha=0.08;this.waterfall=false;this.varyBarColor=false;b.extend(true,this,d);this.fill=true;if(this.waterfall){this.fillToZero=false;this.disableStack=true}if(this.barDirection=="vertical"){this._primaryAxis="_xaxis";this._stackAxis="y";this.fillAxis="y"}else{this._primaryAxis="_yaxis";this._stackAxis="x";this.fillAxis="x"}var e={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill};this.renderer.shapeRenderer.init(e);var c={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill};this.renderer.shadowRenderer.init(c)};function a(h,g,f,c){if(this.rendererOptions.barDirection=="horizontal"){this._stackAxis="x";this._primaryAxis="_yaxis"}if(this.rendererOptions.waterfall==true){this._data=b.extend(true,[],this.data);var e=0;var j=(!this.rendererOptions.barDirection||this.rendererOptions.barDirection=="vertical")?1:0;for(var d=0;d<this.data.length;d++){e+=this.data[d][j];if(d>0){this.data[d][j]+=this.data[d-1][j]}}this.data[this.data.length]=(j==1)?[this.data.length+1,e]:[e,this.data.length+1];this._data[this._data.length]=(j==1)?[this._data.length+1,e]:[e,this._data.length+1]}}b.jqplot.preSeriesInitHooks.push(a);b.jqplot.BarRenderer.prototype.calcSeriesNumbers=function(){var g=0;var h=0;var f=this[this._primaryAxis];var e,d,j;for(var c=0;c<f._series.length;c++){d=f._series[c];if(d===this){j=c}if(d.renderer.constructor==b.jqplot.BarRenderer){g+=d.data.length;h+=1}}return[g,h,j]};b.jqplot.BarRenderer.prototype.setBarWidth=function(){var f;var c=0;var d=0;var h=this[this._primaryAxis];var m,g,k;var l=this.renderer.calcSeriesNumbers.call(this);c=l[0];d=l[1];var j=h.numberTicks;var e=(j-1)/2;if(h.name=="xaxis"||h.name=="x2axis"){if(this._stack){this.barWidth=(h._offsets.max-h._offsets.min)/c*d-this.barMargin}else{this.barWidth=((h._offsets.max-h._offsets.min)/e-this.barPadding*(d-1)-this.barMargin*2)/d}}else{if(this._stack){this.barWidth=(h._offsets.min-h._offsets.max)/c*d-this.barMargin}else{this.barWidth=((h._offsets.min-h._offsets.max)/e-this.barPadding*(d-1)-this.barMargin*2)/d}}return[c,d]};b.jqplot.BarRenderer.prototype.draw=function(s,x,e){var u;var o=(e!=undefined)?e:{};var k=(o.shadow!=undefined)?o.shadow:this.shadow;var A=(o.showLine!=undefined)?o.showLine:this.showLine;var t=(o.fill!=undefined)?o.fill:this.fill;var d=this.xaxis;var v=this.yaxis;var n=this._xaxis.series_u2p;var w=this._yaxis.series_u2p;var r,q,m,l,g;if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var z=this.renderer.calcSeriesNumbers.call(this);m=z[0];l=z[1];g=z[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(l/2-0.5)+g)*(this.barWidth+this.barPadding)}if(A){var j=new b.jqplot.ColorGenerator(this.negativeSeriesColors);var p=new b.jqplot.ColorGenerator(this.seriesColors);var y=j.get(this.index);if(!this.useNegativeColors){y=o.fillStyle}var h=o.fillStyle;if(this.barDirection=="vertical"){for(var u=0;u<x.length;u++){points=[];var f=x[u][0]+this._barNudge;var c;if(this._stack&&this._prevGridData.length){c=this._prevGridData[u][1]}else{if(this.fillToZero){c=this._yaxis.series_u2p(0)}else{if(this.waterfall&&u>0&&u<this.gridData.length-1){c=this.gridData[u-1][1]}else{c=s.canvas.height}}}if((this.fillToZero&&this._plotData[u][1]<0)||(this.waterfall&&this._data[u][1]<0)){if(this.varyBarColor){if(this.useNegativeColors){o.fillStyle=j.next()}else{o.fillStyle=p.next()}}else{o.fillStyle=y}}else{if(this.varyBarColor){o.fillStyle=p.next()}else{o.fillStyle=h}}points.push([f-this.barWidth/2,c]);points.push([f-this.barWidth/2,x[u][1]]);points.push([f+this.barWidth/2,x[u][1]]);points.push([f+this.barWidth/2,c]);if(k&&!this._stack){this.renderer.shadowRenderer.draw(s,points,o)}this.renderer.shapeRenderer.draw(s,points,o)}}else{if(this.barDirection=="horizontal"){for(var u=0;u<x.length;u++){points=[];var f=x[u][1]-this._barNudge;var B;if(this._stack&&this._prevGridData.length){B=this._prevGridData[u][0]}else{if(this.fillToZero){B=this._xaxis.series_u2p(0)}else{if(this.waterfall&&u>0&&u<this.gridData.length-1){B=this.gridData[u-1][1]}else{B=0}}}if((this.fillToZero&&this._plotData[u][1]<0)||(this.waterfall&&this._data[u][1]<0)){if(this.varyBarColor){if(this.useNegativeColors){o.fillStyle=j.next()}else{o.fillStyle=p.next()}}}else{if(this.varyBarColor){o.fillStyle=p.next()}else{o.fillStyle=h}}points.push([B,f+this.barWidth/2]);points.push([x[u][0],f+this.barWidth/2]);points.push([x[u][0],f-this.barWidth/2]);points.push([B,f-this.barWidth/2]);if(k&&!this._stack){this.renderer.shadowRenderer.draw(s,points,o)}this.renderer.shapeRenderer.draw(s,points,o)}}}}};b.jqplot.BarRenderer.prototype.drawShadow=function(p,u,e){var r;var m=(e!=undefined)?e:{};var h=(m.shadow!=undefined)?m.shadow:this.shadow;var w=(m.showLine!=undefined)?m.showLine:this.showLine;var q=(m.fill!=undefined)?m.fill:this.fill;var d=this.xaxis;var s=this.yaxis;var l=this._xaxis.series_u2p;var t=this._yaxis.series_u2p;var o,n,k,j,g;if(this._stack&&this.shadow){if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var v=this.renderer.calcSeriesNumbers.call(this);k=v[0];j=v[1];g=v[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(j/2-0.5)+g)*(this.barWidth+this.barPadding)}if(w){if(this.barDirection=="vertical"){for(var r=0;r<u.length;r++){points=[];var f=u[r][0]+this._barNudge;var c;if(this._stack&&this._prevGridData.length){c=this._prevGridData[r][1]}else{if(this.fillToZero){c=this._yaxis.series_u2p(0)}else{c=p.canvas.height}}points.push([f-this.barWidth/2,c]);points.push([f-this.barWidth/2,u[r][1]]);points.push([f+this.barWidth/2,u[r][1]]);points.push([f+this.barWidth/2,c]);this.renderer.shadowRenderer.draw(p,points,m)}}else{if(this.barDirection=="horizontal"){for(var r=0;r<u.length;r++){points=[];var f=u[r][1]-this._barNudge;var x;if(this._stack&&this._prevGridData.length){x=this._prevGridData[r][0]}else{x=0}points.push([x,f+this.barWidth/2]);points.push([u[r][0],f+this.barWidth/2]);points.push([u[r][0],f-this.barWidth/2]);points.push([x,f-this.barWidth/2]);this.renderer.shadowRenderer.draw(p,points,m)}}}}}}})(jQuery);
View
200 ...4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.js
@@ -0,0 +1,200 @@
+/**
+ * Copyright (c) 2009 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * The author would appreciate an email letting him know of any substantial
+ * use of jqPlot. You can reach the author at: chris dot leonello at gmail
+ * dot com or see http://www.jqplot.com/info.php . This is, of course,
+ * not required.
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * Thanks for using jqPlot!
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.CanvasAxisLabelRenderer
+ * Renderer to draw axis labels with a canvas element to support advanced
+ * featrues such as rotated text. This renderer uses a separate rendering engine
+ * to draw the text on the canvas. Two modes of rendering the text are available.
+ * If the browser has native font support for canvas fonts (currently Mozila 3.5
+ * and Safari 4), you can enable text rendering with the canvas fillText method.
+ * You do so by setting the "enableFontSupport" option to true.
+ *
+ * Browsers lacking native font support will have the text drawn on the canvas
+ * using the Hershey font metrics. Even if the "enableFontSupport" option is true
+ * non-supporting browsers will still render with the Hershey font.
+ *
+ */
+ $.jqplot.CanvasAxisLabelRenderer = function(options) {
+ // Group: Properties
+
+ // prop: angle
+ // angle of text, measured clockwise from x axis.
+ this.angle = 0;
+ // name of the axis associated with this tick
+ this.axis;
+ // prop: show
+ // wether or not to show the tick (mark and label).
+ this.show = true;
+ // prop: showLabel
+ // wether or not to show the label.
+ this.showLabel = true;
+ // prop: label
+ // label for the axis.
+ this.label = '';
+ // prop: fontFamily
+ // CSS spec for the font-family css attribute.
+ // Applies only to browsers supporting native font rendering in the
+ // canvas tag. Currently Mozilla 3.5 and Safari 4.
+ this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
+ // prop: fontSize
+ // CSS spec for font size.
+ this.fontSize = '11pt';
+ // prop: fontWeight
+ // CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100 - 900
+ this.fontWeight = 'normal';
+ // prop: fontStretch
+ // Multiplier to condense or expand font width.
+ // Applies only to browsers which don't support canvas native font rendering.
+ this.fontStretch = 1.0;
+ // prop: textColor
+ // css spec for the color attribute.
+ this.textColor = '#666666';
+ // prop: enableFontSupport
+ // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
+ // If true, label will be drawn with canvas tag native support for fonts.
+ // If false, label will be drawn with Hershey font metrics.
+ this.enableFontSupport = false;
+ // prop: pt2px
+ // Point to pixel scaling factor, used for computing height of bounding box
+ // around a label. The labels text renderer has a default setting of 1.4, which
+ // should be suitable for most fonts. Leave as null to use default. If tops of
+ // letters appear clipped, increase this. If bounding box seems too big, decrease.
+ // This is an issue only with the native font renderering capabilities of Mozilla
+ // 3.5 and Safari 4 since they do not provide a method to determine the font height.
+ this.pt2px = null;
+
+ this._elem;
+ this._ctx;
+ this._plotWidth;
+ this._plotHeight;
+ this._plotDimensions = {height:null, width:null};
+
+ $.extend(true, this, options);
+
+ if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') {
+ this.angle = -90;
+ }
+
+ var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
+ if (this.pt2px) {
+ ropts.pt2px = this.pt2px;
+ }
+
+ if (this.enableFontSupport) {
+ if ($.browser.safari) {
+ var p = $.browser.version.split('.');
+ for (var i=0; i<p.length; i++) { p[i] = Number(p[i]); }
+ if (p[0] > 528 || (p[0] == 528 && p[1] >= 16)) {
+ this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
+ }
+ }
+ else if ($.browser.mozilla) {
+ var p = $.browser.version.split(".");
+ if (p[0] > 1 || (p[0] == 1 && p[1] >= 9 && p[2] > 0) ) {
+ this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
+ }
+ else {
+ this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
+ }
+ }
+
+ // TODO: test and enable this
+ // else if ($.browser.msie) {
+ // this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
+ // }
+
+ else {
+ this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
+ }
+ }
+ else {
+ this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
+ }
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
+ };
+
+ // return width along the x axis
+ // will check first to see if an element exists.
+ // if not, will return the computed text box width.
+ $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) {
+ if (this._elem) {
+ return this._elem.outerWidth(true);
+ }
+ else {
+ var tr = this._textRenderer;
+ var l = tr.getWidth(ctx);
+ var h = tr.getHeight(ctx);
+ var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
+ return w;
+ }
+ };
+
+ // return height along the y axis.
+ $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) {
+ if (this._elem) {
+ return this._elem.outerHeight(true);
+ }
+ else {
+ var tr = this._textRenderer;
+ var l = tr.getWidth(ctx);
+ var h = tr.getHeight(ctx);
+ var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
+ return w;
+ }
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() {
+ var a = this.angle * Math.PI/180;
+ return a;
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx) {
+ // create a canvas here, but can't draw on it untill it is appended
+ // to dom for IE compatability.
+ var domelem = document.createElement('canvas');
+ this._textRenderer.setText(this.label, ctx);
+ var w = this.getWidth(ctx);
+ var h = this.getHeight(ctx);
+ domelem.width = w;
+ domelem.height = h;
+ domelem.style.width = w;
+ domelem.style.height = h;
+ // domelem.style.textAlign = 'center';
+ domelem.style.position = 'absolute';
+ this._domelem = domelem;
+ this._elem = $(domelem);
+ this._elem.addClass('jqplot-'+this.axis+'-label');
+
+ return this._elem;
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() {
+ if ($.browser.msie) {
+ window.G_vmlCanvasManager.init_(document);
+ this._domelem = window.G_vmlCanvasManager.initElement(this._domelem);
+ }
+ var ctx = this._elem.get(0).getContext("2d");
+ this._textRenderer.draw(ctx, this.label);
+ };
+
+})(jQuery);
View
14 ...generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisLabelRenderer.min.js
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) 2009 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris dot leonello at gmail dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ */
+(function(a){a.jqplot.CanvasAxisLabelRenderer=function(b){this.angle=0;this.axis;this.show=true;this.showLabel=true;this.label="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="11pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=false;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);if(b.angle==null&&this.axis!="xaxis"&&this.axis!="x2axis"){this.angle=-90}var e={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){e.pt2px=this.pt2px}if(this.enableFontSupport){if(a.browser.safari){var d=a.browser.version.split(".");for(var c=0;c<d.length;c++){d[c]=Number(d[c])}if(d[0]>528||(d[0]==528&&d[1]>=16)){this._textRenderer=new a.jqplot.CanvasFontRenderer(e)}}else{if(a.browser.mozilla){var d=a.browser.version.split(".");if(d[0]>1||(d[0]==1&&d[1]>=9&&d[2]>0)){this._textRenderer=new a.jqplot.CanvasFontRenderer(e)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(e)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(e)}}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(e)}};a.jqplot.CanvasAxisLabelRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisLabelRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisLabelRenderer.prototype.draw=function(c){var e=document.createElement("canvas");this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.position="absolute";this._domelem=e;this._elem=a(e);this._elem.addClass("jqplot-"+this.axis+"-label");return this._elem};a.jqplot.CanvasAxisLabelRenderer.prototype.pack=function(){if(a.browser.msie){window.G_vmlCanvasManager.init_(document);this._domelem=window.G_vmlCanvasManager.initElement(this._domelem)}var b=this._elem.get(0).getContext("2d");this._textRenderer.draw(b,this.label)}})(jQuery);
View
232 ....4.0/generators/dashboard/templates/jqplot-0.9.7/plugins/jqplot.canvasAxisTickRenderer.js
@@ -0,0 +1,232 @@
+/**
+ * Copyright (c) 2009 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * The author would appreciate an email letting him know of any substantial
+ * use of jqPlot. You can reach the author at: chris dot leonello at gmail
+ * dot com or see http://www.jqplot.com/info.php . This is, of course,
+ * not required.
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * Thanks for using jqPlot!
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.CanvasAxisTickRenderer
+ * Renderer to draw axis ticks with a canvas element to support advanced
+ * featrues such as rotated text. This renderer uses a separate rendering engine
+ * to draw the text on the canvas. Two modes of rendering the text are available.
+ * If the browser has native font support for canvas fonts (currently Mozila 3.5
+ * and Safari 4), you can enable text rendering with the canvas fillText method.
+ * You do so by setting the "enableFontSupport" option to true.
+ *
+ * Browsers lacking native font support will have the text drawn on the canvas
+ * using the Hershey font metrics. Even if the "enableFontSupport" option is true
+ * non-supporting browsers will still render with the Hershey font.
+ */
+ $.jqplot.CanvasAxisTickRenderer = function(options) {
+ // Group: Properties
+
+ // prop: mark
+ // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null.
+ this.mark = 'outside';
+ // prop: showMark
+ // wether or not to show the mark on the axis.
+ this.showMark = true;
+ // prop: showGridline
+ // wether or not to draw the gridline on the grid at this tick.
+ this.showGridline = true;
+ // prop: isMinorTick
+ // if this is a minor tick.
+ this.isMinorTick = false;
+ // prop: angle
+ // angle of text, measured clockwise from x axis.
+ this.angle = 0;
+ // prop: markSize
+ // Length of the tick marks in pixels. For 'cross' style, length
+ // will be stoked above and below axis, so total length will be twice this.
+ this.markSize = 4;
+ // prop: show
+ // wether or not to show the tick (mark and label).
+ this.show = true;
+ // prop: showLabel
+ // wether or not to show the label.
+ this.showLabel = true;
+ // prop: labelPosition
+ // 'auto', 'start', 'middle' or 'end'.
+ // Whether tick label should be positioned so the start, middle, or end