alchemy 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. data/LICENSE +20 -0
  2. data/README.md +6 -0
  3. data/Rakefile +21 -0
  4. data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.eot +0 -0
  5. data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.svg +154 -0
  6. data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.ttf +0 -0
  7. data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.woff +0 -0
  8. data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.eot +0 -0
  9. data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.svg +154 -0
  10. data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.ttf +0 -0
  11. data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.woff +0 -0
  12. data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.eot +0 -0
  13. data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.svg +154 -0
  14. data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.ttf +0 -0
  15. data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.woff +0 -0
  16. data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.eot +0 -0
  17. data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.svg +154 -0
  18. data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.ttf +0 -0
  19. data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.woff +0 -0
  20. data/app/assets/fonts/alchemy/Red Hat Liberation License.txt +78 -0
  21. data/app/assets/fonts/alchemy/overpass_bold-web.eot +0 -0
  22. data/app/assets/fonts/alchemy/overpass_bold-web.svg +470 -0
  23. data/app/assets/fonts/alchemy/overpass_bold-web.ttf +0 -0
  24. data/app/assets/fonts/alchemy/overpass_bold-web.woff +0 -0
  25. data/app/assets/fonts/alchemy/overpass_regular-web.eot +0 -0
  26. data/app/assets/fonts/alchemy/overpass_regular-web.svg +470 -0
  27. data/app/assets/fonts/alchemy/overpass_regular-web.ttf +0 -0
  28. data/app/assets/fonts/alchemy/overpass_regular-web.woff +0 -0
  29. data/app/assets/images/alchemy/icons/action-icons.png +0 -0
  30. data/app/assets/images/alchemy/icons/arrow_icon.png +0 -0
  31. data/app/assets/images/alchemy/icons/chosen-sprite.png +0 -0
  32. data/app/assets/images/alchemy/icons/error_icon.png +0 -0
  33. data/app/assets/images/alchemy/icons/objects.png +0 -0
  34. data/app/assets/images/alchemy/icons/spinner.gif +0 -0
  35. data/app/assets/images/alchemy/icons/spinner_head.gif +0 -0
  36. data/app/assets/images/alchemy/icons/success_icon.png +0 -0
  37. data/app/assets/images/alchemy/icons/warning_icon.png +0 -0
  38. data/app/assets/javascripts/alchemy/flash_messages.js +12 -0
  39. data/app/assets/javascripts/alchemy/forms.js +25 -0
  40. data/app/assets/javascripts/alchemy/i18n.js +36 -0
  41. data/app/assets/javascripts/alchemy/login.js +130 -0
  42. data/app/assets/javascripts/alchemy/password.js +99 -0
  43. data/app/assets/stylesheets/alchemy/components/_chosen.scss +423 -0
  44. data/app/assets/stylesheets/alchemy/components/_content.scss +58 -0
  45. data/app/assets/stylesheets/alchemy/components/_helpers.scss +38 -0
  46. data/app/assets/stylesheets/alchemy/components/_media.scss +49 -0
  47. data/app/assets/stylesheets/alchemy/components/_normalize.scss +448 -0
  48. data/app/assets/stylesheets/alchemy/components/_shared.scss +18 -0
  49. data/app/assets/stylesheets/alchemy/components/buttons/_buttons.scss +241 -0
  50. data/app/assets/stylesheets/alchemy/components/buttons/_buttons_vars.scss +10 -0
  51. data/app/assets/stylesheets/alchemy/components/flash_messages/_flash_messages.scss +93 -0
  52. data/app/assets/stylesheets/alchemy/components/flash_messages/_flash_messages_vars.scss +3 -0
  53. data/app/assets/stylesheets/alchemy/components/fonts/_liberation.scss +44 -0
  54. data/app/assets/stylesheets/alchemy/components/fonts/_overpass.scss +24 -0
  55. data/app/assets/stylesheets/alchemy/components/footer/_footer.scss +53 -0
  56. data/app/assets/stylesheets/alchemy/components/footer/_footer_vars.scss +4 -0
  57. data/app/assets/stylesheets/alchemy/components/forms/_forms.scss +536 -0
  58. data/app/assets/stylesheets/alchemy/components/forms/_forms_ie.scss +45 -0
  59. data/app/assets/stylesheets/alchemy/components/forms/_forms_mixins.scss +18 -0
  60. data/app/assets/stylesheets/alchemy/components/forms/_forms_responsive.scss +161 -0
  61. data/app/assets/stylesheets/alchemy/components/forms/_forms_vars.scss +25 -0
  62. data/app/assets/stylesheets/alchemy/components/header/_header.scss +214 -0
  63. data/app/assets/stylesheets/alchemy/components/header/_header_vars.scss +11 -0
  64. data/app/assets/stylesheets/alchemy/components/login/_login.scss +169 -0
  65. data/app/assets/stylesheets/alchemy/components/login/_login_mixins.scss +7 -0
  66. data/app/assets/stylesheets/alchemy/components/login/_login_vars.scss +19 -0
  67. data/app/assets/stylesheets/alchemy/components/sprites/_sprites.scss +110 -0
  68. data/app/assets/stylesheets/alchemy/components/sprites/_sprites_mixins.scss +9 -0
  69. data/app/assets/stylesheets/alchemy/components/text/_text.scss +30 -0
  70. data/app/assets/stylesheets/alchemy/components/text/_text_vars.scss +1 -0
  71. data/app/assets/stylesheets/alchemy/composites/content_elements.scss +6 -0
  72. data/app/assets/stylesheets/alchemy/composites/login.scss +9 -0
  73. data/app/assets/stylesheets/alchemy/composites/shell.scss +4 -0
  74. data/app/assets/stylesheets/alchemy/partials/_base.scss +8 -0
  75. data/app/assets/stylesheets/alchemy/partials/_colors.scss +99 -0
  76. data/app/assets/stylesheets/alchemy/partials/_mixins.scss +24 -0
  77. data/app/assets/stylesheets/alchemy/partials/_vars.scss +31 -0
  78. data/app/helpers/alchemy/gettext_translations.rb +27 -0
  79. data/app/helpers/alchemy/layout_helper.rb +19 -0
  80. data/app/helpers/alchemy/rails_translations.rb +21 -0
  81. data/app/helpers/alchemy/translation_helper.rb +19 -0
  82. data/app/views/alchemy/layouts/_base.haml +20 -0
  83. data/app/views/alchemy/layouts/_change_password_layout.html.haml +20 -0
  84. data/app/views/alchemy/layouts/_common_i18n.haml +4 -0
  85. data/app/views/alchemy/layouts/_header_layout.haml +13 -0
  86. data/app/views/alchemy/layouts/_login_layout.html.haml +58 -0
  87. data/app/views/alchemy/layouts/_user_session_layout.haml +17 -0
  88. data/app/views/alchemy/layouts/shell_layout.haml +10 -0
  89. data/lib/alchemy.rb +6 -0
  90. data/lib/alchemy/version.rb +3 -0
  91. data/test/alchemy_test.rb +7 -0
  92. data/test/test_helper.rb +9 -0
  93. data/vendor/assets/javascripts/alchemy/html5shiv.js +298 -0
  94. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  95. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  96. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_highlight-hard_75_dadada_1x100.png +0 -0
  97. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_highlight-hard_75_e6e6e6_1x100.png +0 -0
  98. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_highlight-hard_95_ffffff_1x100.png +0 -0
  99. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_highlight-soft_80_e0e0e0_1x100.png +0 -0
  100. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_inset-hard_65_ffffff_1x100.png +0 -0
  101. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  102. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-icons_8f8f8f_256x240.png +0 -0
  103. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-icons_97baed_256x240.png +0 -0
  104. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-icons_cd0a0a_256x240.png +0 -0
  105. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/jquery-ui-1.8.11.custom.css +573 -0
  106. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/AUTHORS.txt +30 -0
  107. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/GPL-LICENSE.txt +278 -0
  108. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/MIT-LICENSE.txt +25 -0
  109. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/collapsible.html +57 -0
  110. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/custom-icons.html +69 -0
  111. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/default.html +85 -0
  112. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/fillspace.html +76 -0
  113. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/hoverintent.html +134 -0
  114. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/index.html +25 -0
  115. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/mouseover.html +57 -0
  116. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/no-auto-height.html +60 -0
  117. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/sortable.html +83 -0
  118. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/addClass/default.html +52 -0
  119. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/addClass/index.html +18 -0
  120. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/animate/default.html +61 -0
  121. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/animate/index.html +18 -0
  122. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/categories.html +71 -0
  123. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/combobox.html +171 -0
  124. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/custom-data.html +95 -0
  125. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/default.html +64 -0
  126. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/folding.html +62 -0
  127. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/jquery_32x32.png +0 -0
  128. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/jqueryui_32x32.png +0 -0
  129. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/sizzlejs_32x32.png +0 -0
  130. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/transparent_1x1.png +0 -0
  131. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/ui-anim_basic_16x16.gif +0 -0
  132. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/index.html +27 -0
  133. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/london.xml +114 -0
  134. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/maxheight.html +79 -0
  135. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/multiple-remote.html +84 -0
  136. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/multiple.html +99 -0
  137. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/remote-jsonp.html +86 -0
  138. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/remote-with-cache.html +59 -0
  139. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/remote.html +59 -0
  140. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/search.php +640 -0
  141. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/xml.html +72 -0
  142. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/checkbox.html +44 -0
  143. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/default.html +38 -0
  144. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/icons.html +56 -0
  145. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/index.html +23 -0
  146. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/radio.html +39 -0
  147. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/splitbutton.html +55 -0
  148. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/toolbar.html +120 -0
  149. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/alt-field.html +36 -0
  150. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/animation.html +58 -0
  151. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/buttonbar.html +35 -0
  152. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/date-formats.html +47 -0
  153. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/date-range.html +49 -0
  154. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/default.html +33 -0
  155. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/dropdown-month-year.html +36 -0
  156. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/icon-trigger.html +37 -0
  157. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/images/calendar.gif +0 -0
  158. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/index.html +31 -0
  159. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/inline.html +33 -0
  160. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/localization.html +162 -0
  161. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/min-max.html +33 -0
  162. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/multiple-calendars.html +36 -0
  163. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/other-months.html +37 -0
  164. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/show-week.html +39 -0
  165. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/demos.css +334 -0
  166. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/animated.html +56 -0
  167. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/default.html +54 -0
  168. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/index.html +23 -0
  169. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal-confirmation.html +69 -0
  170. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal-form.html +167 -0
  171. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal-message.html +71 -0
  172. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal.html +60 -0
  173. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/constrain-movement.html +69 -0
  174. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/cursor-style.html +49 -0
  175. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/default.html +39 -0
  176. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/delay-start.html +45 -0
  177. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/events.html +77 -0
  178. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/handle.html +50 -0
  179. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/index.html +28 -0
  180. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/revert.html +44 -0
  181. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/scroll.html +51 -0
  182. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/snap-to.html +68 -0
  183. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/sortable.html +57 -0
  184. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/visual-feedback.html +77 -0
  185. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/accepted-elements.html +60 -0
  186. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/default.html +53 -0
  187. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras.jpg +0 -0
  188. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras2.jpg +0 -0
  189. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras2_min.jpg +0 -0
  190. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras3.jpg +0 -0
  191. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras3_min.jpg +0 -0
  192. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras4.jpg +0 -0
  193. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras4_min.jpg +0 -0
  194. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras_min.jpg +0 -0
  195. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/index.html +24 -0
  196. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/photo-manager.html +184 -0
  197. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/propagation.html +80 -0
  198. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/revert.html +61 -0
  199. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/shopping-cart.html +101 -0
  200. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/visual-feedback.html +78 -0
  201. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/effect/default.html +109 -0
  202. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/effect/easing.html +108 -0
  203. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/effect/index.html +19 -0
  204. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/hide/default.html +102 -0
  205. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/hide/index.html +18 -0
  206. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/calendar.gif +0 -0
  207. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-config-on-tile.gif +0 -0
  208. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-config-on.gif +0 -0
  209. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-spindown-closed.gif +0 -0
  210. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-spindown-open.gif +0 -0
  211. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/icon-docs-info.gif +0 -0
  212. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/pbar-ani.gif +0 -0
  213. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/index.html +321 -0
  214. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/cycler.html +122 -0
  215. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/default.html +153 -0
  216. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/images/earth.jpg +0 -0
  217. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/images/flight.jpg +0 -0
  218. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/images/rocket.jpg +0 -0
  219. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/index.html +19 -0
  220. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/animated.html +44 -0
  221. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/default.html +35 -0
  222. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/images/pbar-ani.gif +0 -0
  223. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/index.html +20 -0
  224. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/resize.html +40 -0
  225. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/removeClass/default.html +52 -0
  226. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/removeClass/index.html +18 -0
  227. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/animate.html +43 -0
  228. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/aspect-ratio.html +42 -0
  229. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/constrain-area.html +47 -0
  230. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/default.html +40 -0
  231. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/delay-start.html +52 -0
  232. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/helper.html +43 -0
  233. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/index.html +28 -0
  234. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/max-min.html +45 -0
  235. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/snap-to-grid.html +42 -0
  236. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/synchronous-resize.html +49 -0
  237. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/textarea.html +41 -0
  238. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/visual-feedback.html +43 -0
  239. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/default.html +50 -0
  240. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/display-grid.html +55 -0
  241. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/index.html +20 -0
  242. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/serialize.html +61 -0
  243. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/show/default.html +104 -0
  244. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/show/index.html +18 -0
  245. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/colorpicker.html +95 -0
  246. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/default.html +37 -0
  247. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/hotelrooms.html +59 -0
  248. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/index.html +29 -0
  249. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/multiple-vertical.html +77 -0
  250. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/range-vertical.html +51 -0
  251. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/range.html +52 -0
  252. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/rangemax.html +50 -0
  253. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/rangemin.html +51 -0
  254. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/side-scroll.html +140 -0
  255. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/slider-vertical.html +52 -0
  256. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/steps.html +51 -0
  257. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/tabs.html +67 -0
  258. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/connect-lists-through-tabs.html +78 -0
  259. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/connect-lists.html +58 -0
  260. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/default.html +51 -0
  261. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/delay-start.html +67 -0
  262. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/display-grid.html +54 -0
  263. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/empty-lists.html +69 -0
  264. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/index.html +26 -0
  265. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/items.html +70 -0
  266. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/placeholder.html +56 -0
  267. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/portlets.html +96 -0
  268. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/switchClass/default.html +47 -0
  269. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/switchClass/index.html +18 -0
  270. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax.html +53 -0
  271. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content1.html +4 -0
  272. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content2.html +4 -0
  273. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content3-slow.php +7 -0
  274. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content4-broken.php +3 -0
  275. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/bottom.html +60 -0
  276. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/collapsible.html +55 -0
  277. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/cookie.html +56 -0
  278. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/default.html +49 -0
  279. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/index.html +25 -0
  280. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/manipulation.html +124 -0
  281. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/mouseover.html +53 -0
  282. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/sortable.html +58 -0
  283. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/vertical.html +61 -0
  284. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggle/default.html +94 -0
  285. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggle/index.html +18 -0
  286. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggleClass/default.html +46 -0
  287. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggleClass/index.html +18 -0
  288. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/accordion.html +1017 -0
  289. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/addClass.html +109 -0
  290. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/animate.html +78 -0
  291. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/autocomplete.html +833 -0
  292. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/button.html +500 -0
  293. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/datepicker.html +2570 -0
  294. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/dialog.html +1698 -0
  295. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/draggable.html +1577 -0
  296. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/droppable.html +829 -0
  297. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/effect.html +143 -0
  298. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/hide.html +144 -0
  299. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/position.html +227 -0
  300. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/progressbar.html +460 -0
  301. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/removeClass.html +113 -0
  302. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/resizable.html +1201 -0
  303. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/selectable.html +848 -0
  304. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/show.html +144 -0
  305. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/slider.html +860 -0
  306. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/sortable.html +1952 -0
  307. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/switchClass.html +129 -0
  308. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/tabs.html +1549 -0
  309. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/toggle.html +144 -0
  310. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/toggleClass.html +111 -0
  311. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/jquery.bgiframe-2.1.2.js +39 -0
  312. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/jquery.cookie.js +89 -0
  313. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/jquery.metadata.js +122 -0
  314. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/qunit.css +153 -0
  315. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/qunit.js +1261 -0
  316. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/jquery-1.5.1.js +8316 -0
  317. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  318. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  319. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  320. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  321. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  322. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  323. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  324. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  325. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_222222_256x240.png +0 -0
  326. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png +0 -0
  327. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_454545_256x240.png +0 -0
  328. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_888888_256x240.png +0 -0
  329. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png +0 -0
  330. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.accordion.css +19 -0
  331. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.all.css +11 -0
  332. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.autocomplete.css +53 -0
  333. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.base.css +11 -0
  334. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.button.css +38 -0
  335. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.core.css +41 -0
  336. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.datepicker.css +68 -0
  337. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.dialog.css +21 -0
  338. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.progressbar.css +11 -0
  339. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.resizable.css +20 -0
  340. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.selectable.css +10 -0
  341. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.slider.css +24 -0
  342. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.tabs.css +18 -0
  343. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.theme.css +252 -0
  344. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  345. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  346. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_highlight-hard_75_dadada_1x100.png +0 -0
  347. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_highlight-hard_75_e6e6e6_1x100.png +0 -0
  348. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_highlight-hard_95_ffffff_1x100.png +0 -0
  349. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_highlight-soft_80_e0e0e0_1x100.png +0 -0
  350. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_inset-hard_65_ffffff_1x100.png +0 -0
  351. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  352. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-icons_8f8f8f_256x240.png +0 -0
  353. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-icons_97baed_256x240.png +0 -0
  354. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png +0 -0
  355. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery-ui-1.8.11.custom.css +573 -0
  356. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.accordion.css +19 -0
  357. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.all.css +11 -0
  358. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.autocomplete.css +53 -0
  359. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.base.css +11 -0
  360. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.button.css +38 -0
  361. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.core.css +41 -0
  362. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.datepicker.css +68 -0
  363. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.dialog.css +21 -0
  364. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.progressbar.css +11 -0
  365. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.resizable.css +20 -0
  366. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.selectable.css +10 -0
  367. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.slider.css +24 -0
  368. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.tabs.css +18 -0
  369. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.theme.css +254 -0
  370. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery-ui-i18n.js +1379 -0
  371. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-af.js +23 -0
  372. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ar-DZ.js +23 -0
  373. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ar.js +23 -0
  374. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-az.js +23 -0
  375. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-bg.js +24 -0
  376. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-bs.js +23 -0
  377. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ca.js +23 -0
  378. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-cs.js +23 -0
  379. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-da.js +23 -0
  380. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-de.js +23 -0
  381. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-el.js +23 -0
  382. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-en-AU.js +23 -0
  383. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-en-GB.js +23 -0
  384. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-en-NZ.js +23 -0
  385. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-eo.js +23 -0
  386. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-es.js +23 -0
  387. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-et.js +23 -0
  388. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-eu.js +23 -0
  389. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fa.js +23 -0
  390. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fi.js +23 -0
  391. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fo.js +23 -0
  392. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fr-CH.js +23 -0
  393. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fr.js +25 -0
  394. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-gl.js +23 -0
  395. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-he.js +23 -0
  396. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-hr.js +23 -0
  397. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-hu.js +23 -0
  398. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-hy.js +23 -0
  399. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-id.js +23 -0
  400. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-is.js +23 -0
  401. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-it.js +23 -0
  402. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ja.js +23 -0
  403. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ko.js +23 -0
  404. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-kz.js +23 -0
  405. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-lt.js +23 -0
  406. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-lv.js +23 -0
  407. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ml.js +23 -0
  408. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ms.js +23 -0
  409. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-nl.js +23 -0
  410. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-no.js +23 -0
  411. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-pl.js +23 -0
  412. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-pt-BR.js +23 -0
  413. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-pt.js +22 -0
  414. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-rm.js +21 -0
  415. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ro.js +26 -0
  416. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ru.js +23 -0
  417. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sk.js +23 -0
  418. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sl.js +24 -0
  419. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sq.js +23 -0
  420. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sr-SR.js +23 -0
  421. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sr.js +23 -0
  422. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sv.js +23 -0
  423. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ta.js +23 -0
  424. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-th.js +23 -0
  425. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-tj.js +23 -0
  426. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-tr.js +23 -0
  427. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-uk.js +23 -0
  428. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-vi.js +23 -0
  429. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-zh-CN.js +23 -0
  430. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-zh-HK.js +23 -0
  431. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-zh-TW.js +23 -0
  432. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery-ui-1.8.11.custom.js +11577 -0
  433. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.blind.js +49 -0
  434. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.bounce.js +78 -0
  435. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.clip.js +54 -0
  436. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.core.js +747 -0
  437. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.drop.js +50 -0
  438. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.explode.js +79 -0
  439. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.fade.js +32 -0
  440. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.fold.js +56 -0
  441. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.highlight.js +50 -0
  442. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.pulsate.js +51 -0
  443. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.scale.js +178 -0
  444. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.shake.js +57 -0
  445. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.slide.js +50 -0
  446. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.transfer.js +45 -0
  447. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.accordion.js +611 -0
  448. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.autocomplete.js +612 -0
  449. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.button.js +387 -0
  450. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.core.js +308 -0
  451. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.datepicker.js +1773 -0
  452. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.dialog.js +857 -0
  453. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.draggable.js +799 -0
  454. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.droppable.js +285 -0
  455. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.mouse.js +156 -0
  456. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.position.js +252 -0
  457. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.progressbar.js +108 -0
  458. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.resizable.js +812 -0
  459. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.selectable.js +266 -0
  460. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.slider.js +682 -0
  461. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.sortable.js +1073 -0
  462. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.tabs.js +758 -0
  463. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.widget.js +262 -0
  464. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.blind.min.js +14 -0
  465. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.bounce.min.js +15 -0
  466. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.clip.min.js +14 -0
  467. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.core.min.js +30 -0
  468. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.drop.min.js +14 -0
  469. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.explode.min.js +15 -0
  470. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.fade.min.js +13 -0
  471. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.fold.min.js +14 -0
  472. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.highlight.min.js +14 -0
  473. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.pulsate.min.js +14 -0
  474. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.scale.min.js +20 -0
  475. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.shake.min.js +14 -0
  476. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.slide.min.js +14 -0
  477. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.transfer.min.js +14 -0
  478. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.accordion.min.js +30 -0
  479. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.autocomplete.min.js +32 -0
  480. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.button.min.js +25 -0
  481. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.core.min.js +17 -0
  482. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.datepicker.min.js +82 -0
  483. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.dialog.min.js +40 -0
  484. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.draggable.min.js +50 -0
  485. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.droppable.min.js +26 -0
  486. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.mouse.min.js +17 -0
  487. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.position.min.js +16 -0
  488. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.progressbar.min.js +16 -0
  489. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.resizable.min.js +47 -0
  490. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.selectable.min.js +22 -0
  491. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.slider.min.js +33 -0
  492. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.sortable.min.js +60 -0
  493. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.tabs.min.js +35 -0
  494. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.widget.min.js +15 -0
  495. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/version.txt +1 -0
  496. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/js/jquery-1.5.1.min.js +16 -0
  497. data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/js/jquery-ui-1.8.11.custom.min.js +783 -0
  498. data/vendor/assets/javascripts/alchemy/jquery/jquery-1.6.2.js +8981 -0
  499. data/vendor/assets/javascripts/alchemy/jquery/plugins/chosen.jquery.js +1003 -0
  500. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/API.txt +1201 -0
  501. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/FAQ.txt +76 -0
  502. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/LICENSE.txt +22 -0
  503. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/Makefile +9 -0
  504. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/NEWS.txt +508 -0
  505. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/PLUGINS.txt +137 -0
  506. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/README.txt +90 -0
  507. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/ajax.html +143 -0
  508. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/annotating.html +75 -0
  509. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-down.gif +0 -0
  510. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-left.gif +0 -0
  511. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-right.gif +0 -0
  512. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-up.gif +0 -0
  513. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/basic.html +38 -0
  514. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-1.json +4 -0
  515. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-2.json +4 -0
  516. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-3.json +4 -0
  517. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-4.json +4 -0
  518. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-5.json +4 -0
  519. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth.json +4 -0
  520. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-japan-gdp-growth.json +4 -0
  521. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-usa-gdp-growth.json +4 -0
  522. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/graph-types.html +75 -0
  523. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/hs-2004-27-a-large_web.jpg +0 -0
  524. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/image.html +45 -0
  525. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/index.html +44 -0
  526. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/interacting-axes.html +97 -0
  527. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/interacting.html +93 -0
  528. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/layout.css +6 -0
  529. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/multiple-axes.html +60 -0
  530. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/navigate.html +118 -0
  531. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/percentiles.html +57 -0
  532. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/pie.html +756 -0
  533. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/realtime.html +83 -0
  534. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/resize.html +61 -0
  535. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/selection.html +114 -0
  536. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/setting-options.html +61 -0
  537. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/stacking.html +77 -0
  538. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/symbols.html +49 -0
  539. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/thresholding.html +54 -0
  540. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/time.html +71 -0
  541. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/tracking.html +95 -0
  542. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/turning-series.html +98 -0
  543. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/visitors.html +90 -0
  544. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/zooming.html +98 -0
  545. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/excanvas.js +1427 -0
  546. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/excanvas.min.js +1 -0
  547. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.colorhelpers.js +179 -0
  548. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.colorhelpers.min.js +1 -0
  549. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.crosshair.js +167 -0
  550. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.crosshair.min.js +1 -0
  551. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.fillbetween.js +183 -0
  552. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.fillbetween.min.js +1 -0
  553. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.image.js +238 -0
  554. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.image.min.js +1 -0
  555. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.js +2599 -0
  556. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.min.js +6 -0
  557. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.navigate.js +336 -0
  558. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.navigate.min.js +1 -0
  559. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.pie.js +750 -0
  560. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.pie.min.js +1 -0
  561. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.resize.js +60 -0
  562. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.resize.min.js +1 -0
  563. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.selection.js +344 -0
  564. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.selection.min.js +1 -0
  565. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.stack.js +184 -0
  566. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.stack.min.js +1 -0
  567. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.symbol.js +70 -0
  568. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.symbol.min.js +1 -0
  569. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.threshold.js +103 -0
  570. data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.threshold.min.js +1 -0
  571. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/blank.svg +3 -0
  572. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/custom_test.js +67 -0
  573. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.css +9 -0
  574. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.js +1101 -0
  575. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.min.js +7 -0
  576. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.pack.js +7 -0
  577. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svgfilter.js +396 -0
  578. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svgfilter.min.js +7 -0
  579. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svgfilter.pack.js +7 -0
  580. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svggraph.js +1337 -0
  581. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svggraph.min.js +7 -0
  582. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svggraph.pack.js +7 -0
  583. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/lion.svg +161 -0
  584. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/test.js +714 -0
  585. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ajaxfileupload.js +205 -0
  586. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ba-bbq.js +1137 -0
  587. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ba-resize.js +246 -0
  588. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.cookie.js +92 -0
  589. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.easing.1.3.js +205 -0
  590. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.fancyqueries.js +106 -0
  591. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.flash.js +288 -0
  592. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.form.js +964 -0
  593. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.hoverIntent.js +106 -0
  594. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jeditable.ajaxupload.js +62 -0
  595. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jeditable.js +556 -0
  596. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jnotify.js +210 -0
  597. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jscrollpane.js +1390 -0
  598. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jscrollpane.min.js +11 -0
  599. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.linkHover.js +89 -0
  600. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.loadmask.min.js +10 -0
  601. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.mousewheel.js +78 -0
  602. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.multiselect.filter.js +176 -0
  603. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.multiselect.js +668 -0
  604. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.pack.js +11 -0
  605. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.periodicalupdater.js +175 -0
  606. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.sortElements.js +75 -0
  607. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.sparkline.min.js +94 -0
  608. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.text-overflow.js +60 -0
  609. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.timepickr.js +214 -0
  610. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.timers.js +142 -0
  611. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.tipsy.js +358 -0
  612. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.treeTable.js +226 -0
  613. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.trunk8.js +203 -0
  614. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ui.multiselect.js +338 -0
  615. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ui.totop.js +58 -0
  616. data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.uitablefilter.js +95 -0
  617. data/vendor/assets/javascripts/alchemy/jquery/plugins/ui.spinner.js +683 -0
  618. data/vendor/assets/javascripts/alchemy/rails.js +331 -0
  619. data/vendor/assets/javascripts/alchemy/underscore-1.3.1.js +999 -0
  620. metadata +683 -0
@@ -0,0 +1,7 @@
1
+ /* http://keith-wood.name/svg.html
2
+ SVG for jQuery v1.0.1.
3
+ Written by Keith Wood (kbwood@iprimus.com.au) August 2007.
4
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
5
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
6
+ Please attribute the author if you use it. */
7
+ var svgManager=null;(function($){function SVGManager(){this._nextId=0;this._svgs=[];this._settings=[];this._extensions=[];this.regional=[];this.regional['']={notSupportedText:'This browser does not support SVG',errorLoadingText:'Error loading'};this.local=this.regional['']}$.extend(SVGManager.prototype,{svgNS:'http://www.w3.org/2000/svg',xlinkNS:'http://www.w3.org/1999/xlink',_rootClass:SVGRoot,_connectSVG:function(a,b,c,d){var e=this._nextId++;a._svgId=e;var f=null;if($.browser.msie){a.innerHTML='<embed type="image/svg+xml" width="'+a.clientWidth+'" height="'+a.clientHeight+'" src="blank.svg"/>';this._settings[e]=[a,b,d,c]}else if(document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#SVG","1.1")||document.implementation.hasFeature("org.w3c.svg","1.1")){f=document.createElementNS(this.svgNS,'svg');f.setAttribute('version','1.1');f.setAttribute('width',a.clientWidth);f.setAttribute('height',a.clientHeight);a.appendChild(f);this._afterLoad(e,f,[a,b,d,c])}else{a.innerHTML='<p class="svg_error">'+this.local.notSupportedText+'</p>'}return e},_registerSVG:function(){for(var i=0;i<document.embeds.length;i++){var a=document.embeds[i].parentNode._svgId;var b=document.embeds[i].getSVGDocument();b=(b?b.documentElement:null);if(a!=null&&b&&!this._svgs[a]){this._afterLoad(a,b)}}},_afterLoad:function(a,b,c){var c=c||this._settings[a];var d=this._svgs[a]=new this._rootClass(b,c[0]);if(c[1]){d.load(c[1])}if(c[2]){d.configure(c[2])}if(c[3]){c[3](c[0])}},getSVGFor:function(a){a=(typeof a=='string'?$(a)[0]:(a.jquery?a[0]:a));return this._svgs[a._svgId]},addExtension:function(a,b){this._extensions[this._extensions.length]=[a,b]}});function SVGRoot(a,b){this._svg=a;this._container=b;for(var i=0;i<svgManager._extensions.length;i++){var c=svgManager._extensions[i];this[c[0]]=new c[1](this)}}$.extend(SVGRoot.prototype,{_width:function(){return this._container.clientWidth},_height:function(){return this._container.clientHeight},configure:function(a,b){if(b){for(var i=this._svg.attributes.length-1;i>=0;i--){var c=this._svg.attributes.item(i);if(!(c.nodeName=='onload'||c.nodeName=='version'||c.nodeName.substring(0,5)=='xmlns')){this._svg.attributes.removeNamedItem(c.nodeName)}}}for(var d in a){this._svg.setAttribute(d,a[d])}return this},getElementById:function(a){return this._svg.getElementById(a)},title:function(a,b,c){var d=this._makeNode(a,'title',c||{});d.appendChild(this._svg.ownerDocument.createTextNode(b));return d},describe:function(a,b,c){var d=this._makeNode(a,'desc',c||{});d.appendChild(this._svg.ownerDocument.createTextNode(b));return d},defs:function(a,b,c){if(typeof b!='string'){c=b;b=null}return this._makeNode(a,'defs',$.extend((b?{id:b}:{}),c||{}))},symbol:function(a,b,c,d,e,f,g){return this._makeNode(a,'symbol',$.extend({id:b,viewBox:c+' '+d+' '+e+' '+f},g||{}))},marker:function(a,b,c,d,e,f,g,h){if(typeof g=='object'){h=g;g=null}return this._makeNode(a,'marker',$.extend({id:b,refX:c,refY:d,markerWidth:e,markerHeight:f,orient:g||'auto'},h||{}))},style:function(a,b,c){var d=this._makeNode(a,'style',$.extend({type:'text/css'},c||{}));d.appendChild(this._svg.ownerDocument.createTextNode(this._escapeXML(b)));return d},script:function(a,b,c,d){if(typeof c=='object'){d=c;c=null}var e=this._makeNode(a,'script',$.extend({type:c||'text/javascript'},d||{}));e.appendChild(this._svg.ownerDocument.createTextNode(this._escapeXML(b)));return e},linearGradient:function(a,b,c,d,e,f,g,h){if(typeof d=='object'){h=d;d=null}var i=$.extend({id:b},(d!=null?{x1:d,y1:e,x2:f,y2:g}:{}));return this._gradient(a,'linearGradient',$.extend(i,h||{}),c)},radialGradient:function(a,b,c,d,e,r,f,g,h){if(typeof d=='object'){h=d;d=null}var i=$.extend({id:b},(d!=null?{cx:d,cy:e,r:r,fx:f,fy:g}:{}));return this._gradient(a,'radialGradient',$.extend(i,h||{}),c)},_gradient:function(a,b,c,d){var e=this._makeNode(a,b,c);for(var i=0;i<d.length;i++){var f=d[i];this._makeNode(e,'stop',$.extend({offset:f[0],stop_color:f[1]},(f[2]!=null?{stop_opacity:f[2]}:{})))}return e},pattern:function(a,b,x,y,c,d,e,f,g,h,i){if(typeof e=='object'){i=e;e=null}var j=$.extend({id:b,x:x,y:y,width:c,height:d},(e!=null?{viewBox:e+' '+f+' '+g+' '+h}:{}));return this._makeNode(a,'pattern',$.extend(j,i||{}))},mask:function(a,b,x,y,c,d,e){return this._makeNode(a,'mask',$.extend({id:b,x:x,y:y,width:c,height:d},e||{}))},createPath:function(){return new SVGPath()},createText:function(){return new SVGText()},svg:function(a,x,y,b,c,d,e,f,g,h){if(typeof d=='object'){h=d;d=null}var i=$.extend({x:x,y:y,width:b,height:c},(d!=null?{viewBox:d+' '+e+' '+f+' '+g}:{}));return this._makeNode(a,'svg',$.extend(i,h||{}))},group:function(a,b,c){if(typeof b=='object'){c=b;b=null}return this._makeNode(a,'g',$.extend({id:b},c||{}))},use:function(a,x,y,b,c,d,e){if(typeof x=='string'){d=x;e=y;x=y=b=c=null}var f=this._makeNode(a,'use',$.extend({x:x,y:y,width:b,height:c},e||{}));f.setAttributeNS(svgManager.xlinkNS,'href',d);return f},link:function(a,b,c){var d=this._makeNode(a,'a',c);d.setAttributeNS(svgManager.xlinkNS,'href',b);return d},image:function(a,x,y,b,c,d,e){var f=this._makeNode(a,'image',$.extend({x:x,y:y,width:b,height:c},e||{}));f.setAttributeNS(svgManager.xlinkNS,'href',d);return f},path:function(a,b,c){return this._makeNode(a,'path',$.extend({d:(b.path?b.path():b)},c||{}))},rect:function(a,x,y,b,c,d){return this._makeNode(a,'rect',$.extend({x:x,y:y,width:b,height:c},d||{}))},roundrect:function(a,x,y,b,c,d,e,f){return this._makeNode(a,'rect',$.extend({x:x,y:y,width:b,height:c,rx:d,ry:e},f||{}))},circle:function(a,b,c,r,d){return this._makeNode(a,'circle',$.extend({cx:b,cy:c,r:r},d||{}))},ellipse:function(a,b,c,d,e,f){return this._makeNode(a,'ellipse',$.extend({cx:b,cy:c,rx:d,ry:e},f||{}))},line:function(a,b,c,d,e,f){return this._makeNode(a,'line',$.extend({x1:b,y1:c,x2:d,y2:e},f||{}))},polyline:function(a,b,c){return this._poly(a,'polyline',b,c)},polygon:function(a,b,c){return this._poly(a,'polygon',b,c)},_poly:function(a,b,c,d){var e='';for(var i=0;i<c.length;i++){e+=c[i].join()+' '}return this._makeNode(a,b,$.extend({points:e},d||{}))},text:function(a,x,y,b,c){if(typeof x=='string'&&arguments.length<4){b=x;c=y;x=y=null}return this._text(a,'text',b,$.extend({x:(x&&isArray(x)?x.join(' '):x),y:(y&&isArray(y)?y.join(' '):y)},c||{}))},textpath:function(a,b,c,d){var e=this._text(a,'textPath',c,d||{});e.setAttributeNS(svgManager.xlinkNS,'href',b);return e},_text:function(a,b,c,d){var e=this._makeNode(a,b,d);if(typeof c=='string'){e.appendChild(e.ownerDocument.createTextNode(c))}else{for(var i=0;i<c._parts.length;i++){var f=c._parts[i];if(f[0]=='tspan'){var g=this._makeNode(e,f[0],f[2]);g.appendChild(e.ownerDocument.createTextNode(f[1]));e.appendChild(g)}else if(f[0]=='tref'){var g=this._makeNode(e,f[0],f[2]);g.setAttributeNS(svgManager.xlinkNS,'href',f[1]);e.appendChild(g)}else if(f[0]=='textpath'){var h=f[2].href;f[2].href=null;var g=this._makeNode(e,f[0],f[2]);g.setAttributeNS(svgManager.xlinkNS,'href',h);g.appendChild(e.ownerDocument.createTextNode(f[1]));e.appendChild(g)}else{e.appendChild(e.ownerDocument.createTextNode(f[1]))}}}return e},other:function(a,b,c){return this._makeNode(a,other,c||{})},_makeNode:function(a,b,c){a=a||this._svg;var d=this._svg.ownerDocument.createElementNS(svgManager.svgNS,b);for(var b in c){var e=c[b];if(e!=null&&e!=null&&(typeof e!='string'||e!='')){d.setAttribute(this._fromJSName(b),e)}}a.appendChild(d);return d},_fromJSName:function(a){return a.replace(/^_/,'').replace(/_/g,'-')},add:function(b,c){var d=this;b=b||this._svg;c=(c.jquery?c:$(c));c.each(function(){var a=d._cloneAsSVG(this);if(a){b.appendChild(a)}})},_cloneAsSVG:function(a){var b=null;if(a.nodeType==1){b=this._svg.ownerDocument.createElementNS(a.namespaceURI||svgManager.svgNS,this._checkName(a.nodeName));for(var i=0;i<a.attributes.length;i++){var c=a.attributes.item(i);if(c.nodeName!='xmlns'){if(c.prefix=='xlink'){b.setAttributeNS(svgManager.xlinkNS,c.localName,c.nodeValue)}else{b.setAttribute(this._checkName(c.nodeName),c.nodeValue)}}}for(var i=0;i<a.childNodes.length;i++){var d=this._cloneAsSVG(a.childNodes[i]);if(d){b.appendChild(d)}}}else if(a.nodeType==3){if($.trim(a.nodeValue)){b=this._svg.ownerDocument.createTextNode(a.nodeValue)}}else if(a.nodeType==4){if($.trim(a.nodeValue)){b=this._svg.ownerDocument.createCDATASection(a.nodeValue)}}return b},_checkName:function(a){a=(a.substring(0,1)>='A'&&a.substring(0,1)<='Z'?a.toLowerCase():a);return(a.substring(0,4)=='svg:'?a.substring(4):a)},load:function(e,f){if(!f){this.clear(true)}var g=this;var h=$.ajax({url:e,dataType:'xml',success:function(a){if($.browser.msie){a.loadXML(h.responseText);if(a.parseError.errorCode!=0){g.text(null,10,20,svgManager.local.errorLoadingText+': '+a.parseError.reason);return}}var b={};for(var i=0;i<a.documentElement.attributes.length;i++){var c=a.documentElement.attributes.item(i);if(!(c.nodeName=='version'||c.nodeName.substring(0,5)=='xmlns')){b[c.nodeName]=c.nodeValue}}g.configure(b,true);var d=a.documentElement.childNodes;for(var i=0;i<d.length;i++){g.add(null,d[i])}},error:function(a,b,c){g.text(null,10,20,svgManager.local.errorLoadingText+': '+b+(c?' '+c.message:''))}})},remove:function(a){a.parentNode.removeChild(a)},clear:function(a){if(a){this.configure({},true)}while(this._svg.firstChild){this._svg.removeChild(this._svg.firstChild)}},toSVG:function(){return this._toSVG(this._svg)},_toSVG:function(a){var b='';if(!a){return b}if(a.nodeType==3){b=a.nodeValue}else if(a.nodeType==4){b='<![CDATA['+a.nodeValue+']]>'}else{b='<'+a.nodeName;if(a.attributes){for(var i=0;i<a.attributes.length;i++){var c=a.attributes.item(i);if(!($.trim(c.nodeValue)==''||c.nodeValue.match(/^\[object/)||c.nodeValue.match(/^function/))){b+=' '+(c.namespaceURI==svgManager.xlinkNS?'xlink:':'')+c.nodeName+'="'+c.nodeValue+'"'}}}if(a.firstChild){b+='>';var d=a.firstChild;while(d){b+=this._toSVG(d);d=d.nextSibling}b+='</'+a.nodeName+'>'}else{b+='/>'}}return b},_escapeXML:function(a){a=a.replace(/&/g,'&amp;');a=a.replace(/</g,'&lt;');a=a.replace(/>/g,'&gt;');return a}});function SVGPath(){this._path=''}$.extend(SVGPath.prototype,{reset:function(){this._path='';return this},moveTo:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'m':'M'),x,y)},lineTo:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'l':'L'),x,y)},horizTo:function(x,a){this._path+=(a?'h':'H')+x;return this},vertTo:function(y,a){this._path+=(a?'v':'V')+y;return this},curveCTo:function(a,b,c,d,x,y,e){e=(isArray(a)?b:e);return this._coords((e?'c':'C'),a,b,c,d,x,y)},smoothCTo:function(a,b,x,y,c){c=(isArray(a)?b:c);return this._coords((c?'s':'S'),a,b,x,y)},curveQTo:function(a,b,x,y,c){c=(isArray(a)?b:c);return this._coords((c?'q':'Q'),a,b,x,y)},smoothQTo:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'t':'T'),x,y)},_coords:function(a,b,c,d,e,f,g){if(isArray(b)){for(var i=0;i<b.length;i++){var h=b[i];this._path+=(i==0?a:' ')+h[0]+','+h[1]+(h.length<4?'':' '+h[2]+','+h[3]+(h.length<6?'':' '+h[4]+','+h[5]))}}else{this._path+=a+b+','+c+(d==null?'':' '+d+','+e+(f==null?'':' '+f+','+g))}return this},arcTo:function(a,b,c,d,e,x,y,f){f=(isArray(a)?b:f);this._path+=(f?'a':'A');if(isArray(a)){for(var i=0;i<a.length;i++){var g=a[i];this._path+=(i==0?'':' ')+g[0]+','+g[1]+' '+g[2]+' '+(g[3]?'1':'0')+','+(g[4]?'1':'0')+' '+g[5]+','+g[6]}}else{this._path+=a+','+b+' '+c+' '+(d?'1':'0')+','+(e?'1':'0')+' '+x+','+y}return this},close:function(){this._path+='z';return this},path:function(){return this._path}});function SVGText(){this._parts=[]}$.extend(SVGText.prototype,{reset:function(){this._parts=[];return this},string:function(a){this._parts[this._parts.length]=['text',a];return this},span:function(a,b){this._parts[this._parts.length]=['tspan',a,b];return this},ref:function(a,b){this._parts[this._parts.length]=['tref',a,b];return this},path:function(a,b,c){this._parts[this._parts.length]=['textpath',b,$.extend({href:a},c||{})];return this}});$.fn.svg=function(a,b,c){if(typeof a=='function'){c=b;b=a;a=null}if(a&&typeof a=='object'){c=a;a=b=null}if(b&&typeof b=='object'){c=b;b=null}return this.each(function(){svgManager._connectSVG(this,a,b,c)})};function isArray(a){return(a.constructor&&a.constructor.toString().match(/\Array\(\)/))}svgManager=new SVGManager()})(jQuery);
@@ -0,0 +1,7 @@
1
+ /* http://keith-wood.name/svg.html
2
+ SVG for jQuery v1.0.1.
3
+ Written by Keith Wood (kbwood@iprimus.com.au) August 2007.
4
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
5
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
6
+ Please attribute the author if you use it. */
7
+ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('k E=o;(8($){8 1t(){7.27=0;7.1j=[];7.1u=[];7.1f=[];7.1v=[];7.1v[\'\']={28:\'2W 1w 2X 2Y 2Z 29\',1x:\'30 31\'};7.1k=7.1v[\'\']}$.u(1t.1l,{1m:\'1y://1z.1A.1n/32/Y\',11:\'1y://1z.1A.1n/33/1B\',2a:1C,2b:8(a,b,c,d){k e=7.27++;a.1D=e;k f=o;n($.1w.2c){a.2d=\'<34 1E="1F/Y+2e" 12="\'+a.1G+\'" 13="\'+a.1H+\'" 35="36.Y"/>\';7.1u[e]=[a,b,d,c]}J n(1o||1b.2f.2g("1y://1z.1A.1n/37/38/39#29","1.1")||1b.2f.2g("1n.3a.Y","1.1")){f=1b.1I(7.1m,\'Y\');f.1c(\'1J\',\'1.1\');f.1c(\'12\',a.1G);f.1c(\'13\',a.1H);a.G(f);7.1K(e,f,[a,b,d,c])}J{a.2d=\'<p 3b="3c">\'+7.1k.28+\'</p>\'}9 e},3d:8(){I(k i=0;i<1b.1L.B;i++){k a=1b.1L[i].2h.1D;k b=1b.1L[i].3e();b=(b?b.1p:o);n(a!=o&&b&&!7.1j[a]){7.1K(a,b)}}},1K:8(a,b,c){k c=c||7.1u[a];k d=7.1j[a]=1g 7.2a(b,c[0]);n(c[1]){d.2i(c[1])}n(c[2]){d.1q(c[2])}n(c[3]){c[3](c[0])}},3f:8(a){a=(F a==\'17\'?$(a)[0]:(a.2j?a[0]:a));9 7.1j[a.1D]},3g:8(a,b){7.1f[7.1f.B]=[a,b]}});8 1C(a,b){7.D=a;7.1M=b;I(k i=0;i<E.1f.B;i++){k c=E.1f[i];7[c[0]]=1g c[1](7)}}$.u(1C.1l,{3h:8(){9 7.1M.1G},3i:8(){9 7.1M.1H},1q:8(a,b){n(b){I(k i=7.D.W.B-1;i>=0;i--){k c=7.D.W.1r(i);n(!(c.K==\'3j\'||c.K==\'1J\'||c.K.1d(0,5)==\'1N\')){7.D.W.3k(c.K)}}}I(k d 2k a){7.D.1c(d,a[d])}9 7},2l:8(a){9 7.D.2l(a)},2m:8(a,b,c){k d=7.w(a,\'2m\',c||{});d.G(7.D.O.14(b));9 d},3l:8(a,b,c){k d=7.w(a,\'3m\',c||{});d.G(7.D.O.14(b));9 d},2n:8(a,b,c){n(F b!=\'17\'){c=b;b=o}9 7.w(a,\'2n\',$.u((b?{16:b}:{}),c||{}))},2o:8(a,b,c,d,e,f,g){9 7.w(a,\'2o\',$.u({16:b,1O:c+\' \'+d+\' \'+e+\' \'+f},g||{}))},2p:8(a,b,c,d,e,f,g,h){n(F g==\'X\'){h=g;g=o}9 7.w(a,\'2p\',$.u({16:b,3n:c,3o:d,3p:e,3q:f,3r:g||\'3s\'},h||{}))},2q:8(a,b,c){k d=7.w(a,\'2q\',$.u({1E:\'18/3t\'},c||{}));d.G(7.D.O.14(7.1P(b)));9 d},2r:8(a,b,c,d){n(F c==\'X\'){d=c;c=o}k e=7.w(a,\'2r\',$.u({1E:c||\'18/3u\'},d||{}));e.G(7.D.O.14(7.1P(b)));9 e},2s:8(a,b,c,d,e,f,g,h){n(F d==\'X\'){h=d;d=o}k i=$.u({16:b},(d!=o?{2t:d,2u:e,2v:f,2w:g}:{}));9 7.1Q(a,\'2s\',$.u(i,h||{}),c)},2x:8(a,b,c,d,e,r,f,g,h){n(F d==\'X\'){h=d;d=o}k i=$.u({16:b},(d!=o?{1R:d,1S:e,r:r,3v:f,3w:g}:{}));9 7.1Q(a,\'2x\',$.u(i,h||{}),c)},1Q:8(a,b,c,d){k e=7.w(a,b,c);I(k i=0;i<d.B;i++){k f=d[i];7.w(e,\'3x\',$.u({3y:f[0],3z:f[1]},(f[2]!=o?{3A:f[2]}:{})))}9 e},2y:8(a,b,x,y,c,d,e,f,g,h,i){n(F e==\'X\'){i=e;e=o}k j=$.u({16:b,x:x,y:y,12:c,13:d},(e!=o?{1O:e+\' \'+f+\' \'+g+\' \'+h}:{}));9 7.w(a,\'2y\',$.u(j,i||{}))},2z:8(a,b,x,y,c,d,e){9 7.w(a,\'2z\',$.u({16:b,x:x,y:y,12:c,13:d},e||{}))},3B:8(){9 1g 1T()},3C:8(){9 1g 1U()},Y:8(a,x,y,b,c,d,e,f,g,h){n(F d==\'X\'){h=d;d=o}k i=$.u({x:x,y:y,12:b,13:c},(d!=o?{1O:d+\' \'+e+\' \'+f+\' \'+g}:{}));9 7.w(a,\'Y\',$.u(i,h||{}))},3D:8(a,b,c){n(F b==\'X\'){c=b;b=o}9 7.w(a,\'g\',$.u({16:b},c||{}))},2A:8(a,x,y,b,c,d,e){n(F x==\'17\'){d=x;e=y;x=y=b=c=o}k f=7.w(a,\'2A\',$.u({x:x,y:y,12:b,13:c},e||{}));f.19(E.11,\'15\',d);9 f},3E:8(a,b,c){k d=7.w(a,\'a\',c);d.19(E.11,\'15\',b);9 d},1F:8(a,x,y,b,c,d,e){k f=7.w(a,\'1F\',$.u({x:x,y:y,12:b,13:c},e||{}));f.19(E.11,\'15\',d);9 f},1e:8(a,b,c){9 7.w(a,\'1e\',$.u({d:(b.1e?b.1e():b)},c||{}))},1V:8(a,x,y,b,c,d){9 7.w(a,\'1V\',$.u({x:x,y:y,12:b,13:c},d||{}))},3F:8(a,x,y,b,c,d,e,f){9 7.w(a,\'1V\',$.u({x:x,y:y,12:b,13:c,2B:d,2C:e},f||{}))},2D:8(a,b,c,r,d){9 7.w(a,\'2D\',$.u({1R:b,1S:c,r:r},d||{}))},2E:8(a,b,c,d,e,f){9 7.w(a,\'2E\',$.u({1R:b,1S:c,2B:d,2C:e},f||{}))},2F:8(a,b,c,d,e,f){9 7.w(a,\'2F\',$.u({2t:b,2u:c,2v:d,2w:e},f||{}))},2G:8(a,b,c){9 7.1W(a,\'2G\',b,c)},2H:8(a,b,c){9 7.1W(a,\'2H\',b,c)},1W:8(a,b,c,d){k e=\'\';I(k i=0;i<c.B;i++){e+=c[i].1X()+\' \'}9 7.w(a,b,$.u({3G:e},d||{}))},18:8(a,x,y,b,c){n(F x==\'17\'&&3H.B<4){b=x;c=y;x=y=o}9 7.1Y(a,\'18\',b,$.u({x:(x&&P(x)?x.1X(\' \'):x),y:(y&&P(y)?y.1X(\' \'):y)},c||{}))},1Z:8(a,b,c,d){k e=7.1Y(a,\'3I\',c,d||{});e.19(E.11,\'15\',b);9 e},1Y:8(a,b,c,d){k e=7.w(a,b,d);n(F c==\'17\'){e.G(e.O.14(c))}J{I(k i=0;i<c.R.B;i++){k f=c.R[i];n(f[0]==\'2I\'){k g=7.w(e,f[0],f[2]);g.G(e.O.14(f[1]));e.G(g)}J n(f[0]==\'2J\'){k g=7.w(e,f[0],f[2]);g.19(E.11,\'15\',f[1]);e.G(g)}J n(f[0]==\'1Z\'){k h=f[2].15;f[2].15=o;k g=7.w(e,f[0],f[2]);g.19(E.11,\'15\',h);g.G(e.O.14(f[1]));e.G(g)}J{e.G(e.O.14(f[1]))}}}9 e},2K:8(a,b,c){9 7.w(a,2K,c||{})},w:8(a,b,c){a=a||7.D;k d=7.D.O.1I(E.1m,b);I(k b 2k c){k e=c[b];n(e!=o&&e!=o&&(F e!=\'17\'||e!=\'\')){d.1c(7.2L(b),e)}}a.G(d);9 d},2L:8(a){9 a.1h(/^2M/,\'\').1h(/2M/g,\'-\')},2N:8(b,c){k d=7;b=b||7.D;c=(c.2j?c:$(c));c.2O(8(){k a=d.21(7);n(a){b.G(a)}})},21:8(a){k b=o;n(a.1i==1){b=7.D.O.1I(a.2P||E.1m,7.22(a.K));I(k i=0;i<a.W.B;i++){k c=a.W.1r(i);n(c.K!=\'1N\'){n(c.3J==\'1B\'){b.19(E.11,c.3K,c.N)}J{b.1c(7.22(c.K),c.N)}}}I(k i=0;i<a.23.B;i++){k d=7.21(a.23[i]);n(d){b.G(d)}}}J n(a.1i==3){n($.24(a.N)){b=7.D.O.14(a.N)}}J n(a.1i==4){n($.24(a.N)){b=7.D.O.3L(a.N)}}9 b},22:8(a){a=(a.1d(0,1)>=\'A\'&&a.1d(0,1)<=\'Z\'?a.3M():a);9(a.1d(0,4)==\'Y:\'?a.1d(4):a)},2i:8(e,f){n(!f){7.2Q(1o)}k g=7;k h=$.3N({3O:e,3P:\'2e\',3Q:8(a){n($.1w.2c){a.3R(h.3S);n(a.2R.3T!=0){g.18(o,10,20,E.1k.1x+\': \'+a.2R.3U);9}}k b={};I(k i=0;i<a.1p.W.B;i++){k c=a.1p.W.1r(i);n(!(c.K==\'1J\'||c.K.1d(0,5)==\'1N\')){b[c.K]=c.N}}g.1q(b,1o);k d=a.1p.23;I(k i=0;i<d.B;i++){g.2N(o,d[i])}},3V:8(a,b,c){g.18(o,10,20,E.1k.1x+\': \'+b+(c?\' \'+c.3W:\'\'))}})},3X:8(a){a.2h.2S(a)},2Q:8(a){n(a){7.1q({},1o)}2T(7.D.1s){7.D.2S(7.D.1s)}},3Y:8(){9 7.25(7.D)},25:8(a){k b=\'\';n(!a){9 b}n(a.1i==3){b=a.N}J n(a.1i==4){b=\'<![3Z[\'+a.N+\']]>\'}J{b=\'<\'+a.K;n(a.W){I(k i=0;i<a.W.B;i++){k c=a.W.1r(i);n(!($.24(c.N)==\'\'||c.N.26(/^\\[X/)||c.N.26(/^8/))){b+=\' \'+(c.2P==E.11?\'1B:\':\'\')+c.K+\'="\'+c.N+\'"\'}}}n(a.1s){b+=\'>\';k d=a.1s;2T(d){b+=7.25(d);d=d.40}b+=\'</\'+a.K+\'>\'}J{b+=\'/>\'}}9 b},1P:8(a){a=a.1h(/&/g,\'&41;\');a=a.1h(/</g,\'&42;\');a=a.1h(/>/g,\'&43;\');9 a}});8 1T(){7.U=\'\'}$.u(1T.1l,{2U:8(){7.U=\'\';9 7},44:8(x,y,a){a=(P(x)?y:a);9 7.1a((a?\'m\':\'M\'),x,y)},45:8(x,y,a){a=(P(x)?y:a);9 7.1a((a?\'l\':\'L\'),x,y)},46:8(x,a){7.U+=(a?\'h\':\'H\')+x;9 7},47:8(y,a){7.U+=(a?\'v\':\'V\')+y;9 7},48:8(a,b,c,d,x,y,e){e=(P(a)?b:e);9 7.1a((e?\'c\':\'C\'),a,b,c,d,x,y)},49:8(a,b,x,y,c){c=(P(a)?b:c);9 7.1a((c?\'s\':\'S\'),a,b,x,y)},4a:8(a,b,x,y,c){c=(P(a)?b:c);9 7.1a((c?\'q\':\'Q\'),a,b,x,y)},4b:8(x,y,a){a=(P(x)?y:a);9 7.1a((a?\'t\':\'T\'),x,y)},1a:8(a,b,c,d,e,f,g){n(P(b)){I(k i=0;i<b.B;i++){k h=b[i];7.U+=(i==0?a:\' \')+h[0]+\',\'+h[1]+(h.B<4?\'\':\' \'+h[2]+\',\'+h[3]+(h.B<6?\'\':\' \'+h[4]+\',\'+h[5]))}}J{7.U+=a+b+\',\'+c+(d==o?\'\':\' \'+d+\',\'+e+(f==o?\'\':\' \'+f+\',\'+g))}9 7},4c:8(a,b,c,d,e,x,y,f){f=(P(a)?b:f);7.U+=(f?\'a\':\'A\');n(P(a)){I(k i=0;i<a.B;i++){k g=a[i];7.U+=(i==0?\'\':\' \')+g[0]+\',\'+g[1]+\' \'+g[2]+\' \'+(g[3]?\'1\':\'0\')+\',\'+(g[4]?\'1\':\'0\')+\' \'+g[5]+\',\'+g[6]}}J{7.U+=a+\',\'+b+\' \'+c+\' \'+(d?\'1\':\'0\')+\',\'+(e?\'1\':\'0\')+\' \'+x+\',\'+y}9 7},4d:8(){7.U+=\'z\';9 7},1e:8(){9 7.U}});8 1U(){7.R=[]}$.u(1U.1l,{2U:8(){7.R=[];9 7},17:8(a){7.R[7.R.B]=[\'18\',a];9 7},4e:8(a,b){7.R[7.R.B]=[\'2I\',a,b];9 7},4f:8(a,b){7.R[7.R.B]=[\'2J\',a,b];9 7},1e:8(a,b,c){7.R[7.R.B]=[\'1Z\',b,$.u({15:a},c||{})];9 7}});$.4g.Y=8(a,b,c){n(F a==\'8\'){c=b;b=a;a=o}n(a&&F a==\'X\'){c=a;a=b=o}n(b&&F b==\'X\'){c=b;b=o}9 7.2O(8(){E.2b(7,a,b,c)})};8 P(a){9(a.2V&&a.2V.4h().26(/\\4i\\(\\)/))}E=1g 1t()})(4j);',62,268,'|||||||this|function|return|||||||||||var|||if|null||||||extend||_makeNode|||||length||_svg|svgManager|typeof|appendChild||for|else|nodeName|||nodeValue|ownerDocument|isArray||_parts|||_path||attributes|object|svg|||xlinkNS|width|height|createTextNode|href|id|string|text|setAttributeNS|_coords|document|setAttribute|substring|path|_extensions|new|replace|nodeType|_svgs|local|prototype|svgNS|org|true|documentElement|configure|item|firstChild|SVGManager|_settings|regional|browser|errorLoadingText|http|www|w3|xlink|SVGRoot|_svgId|type|image|clientWidth|clientHeight|createElementNS|version|_afterLoad|embeds|_container|xmlns|viewBox|_escapeXML|_gradient|cx|cy|SVGPath|SVGText|rect|_poly|join|_text|textpath||_cloneAsSVG|_checkName|childNodes|trim|_toSVG|match|_nextId|notSupportedText|SVG|_rootClass|_connectSVG|msie|innerHTML|xml|implementation|hasFeature|parentNode|load|jquery|in|getElementById|title|defs|symbol|marker|style|script|linearGradient|x1|y1|x2|y2|radialGradient|pattern|mask|use|rx|ry|circle|ellipse|line|polyline|polygon|tspan|tref|other|_fromJSName|_|add|each|namespaceURI|clear|parseError|removeChild|while|reset|constructor|This|does|not|support|Error|loading|2000|1999|embed|src|blank|TR|SVG11|feature|w3c|class|svg_error|_registerSVG|getSVGDocument|getSVGFor|addExtension|_width|_height|onload|removeNamedItem|describe|desc|refX|refY|markerWidth|markerHeight|orient|auto|css|javascript|fx|fy|stop|offset|stop_color|stop_opacity|createPath|createText|group|link|roundrect|points|arguments|textPath|prefix|localName|createCDATASection|toLowerCase|ajax|url|dataType|success|loadXML|responseText|errorCode|reason|error|message|remove|toSVG|CDATA|nextSibling|amp|lt|gt|moveTo|lineTo|horizTo|vertTo|curveCTo|smoothCTo|curveQTo|smoothQTo|arcTo|close|span|ref|fn|toString|Array|jQuery'.split('|'),0,{}))
@@ -0,0 +1,396 @@
1
+ /* http://keith-wood.name/svg.html
2
+ SVG filters for jQuery v1.0.1.
3
+ Written by Keith Wood (kbwood@iprimus.com.au) August 2007.
4
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
5
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
6
+ Please attribute the author if you use it. */
7
+
8
+ (function($) { // Hide scope, no $ conflict
9
+
10
+ svgManager.addExtension('filters', SVGFilter);
11
+
12
+ $.extend(svgManager._rootClass.prototype, {
13
+
14
+ /* Add a filter definition.
15
+ @param parent element - the parent node for the new filter
16
+ @param id string - the ID for this filter
17
+ @param x number - the x-coordinate for the left edge of the filter
18
+ @param y number - the y-coordinate for the top edge of the filter
19
+ @param width number - the width of the filter
20
+ @param height number - the height of the filter
21
+ @param settings object - additional settings for the filter (optional)
22
+ @return the new filter node */
23
+ filter: function(parent, id, x, y, width, height, settings) {
24
+ return this._makeNode(parent, 'filter', $.extend(
25
+ {id: id, x: x, y: y, width: width, height: height}, settings || {}));
26
+ }
27
+ });
28
+
29
+ /* Extension point for SVG filters.
30
+ Access through root.filters. */
31
+ function SVGFilter(root) {
32
+ this._root = root; // The attached SVG root object
33
+ }
34
+
35
+ $.extend(SVGFilter.prototype, {
36
+
37
+ /* Add a distant light filter.
38
+ @param parent element - the parent node for the new filter
39
+ @param result string - the ID of this filter
40
+ @param azimuth number - the angle (degrees) in the XY plane for the light source
41
+ @param elevation number - the angle (degrees) in the YZ plane for the light source
42
+ @param settings object - additional settings for the filter (optional)
43
+ @return the new filter node */
44
+ distantLight: function(parent, result, azimuth, elevation, settings) {
45
+ return this._root._makeNode(parent, 'feDistantLight', $.extend(
46
+ {result: result, azimuth: azimuth, elevantion: elevation}, settings || {}));
47
+ },
48
+
49
+ /* Add a point light filter.
50
+ @param parent element - the parent node for the new filter
51
+ @param result string - the ID of this filter
52
+ @param x number - the x-coordinate for the light source
53
+ @param y number - the y-coordinate for the light source
54
+ @param z number - the z-coordinate for the light source
55
+ @param settings object - additional settings for the filter (optional)
56
+ @return the new filter node */
57
+ pointLight: function(parent, result, x, y, z, settings) {
58
+ return this._root._makeNode(parent, 'fePointLight', $.extend(
59
+ {result: result, x: x, y: y, z: z}, settings || {}));
60
+ },
61
+
62
+ /* Add a spot light filter.
63
+ Specify all of toX, toY, toZ or none of them.
64
+ @param parent element - the parent node for the new filter
65
+ @param result string - the ID of this filter
66
+ @param x number - the x-coordinate for the light source
67
+ @param y number - the y-coordinate for the light source
68
+ @param z number - the z-coordinate for the light source
69
+ @param toX number - the x-coordinate for where the light is pointing (optional)
70
+ @param toY number - the y-coordinate for where the light is pointing (optional)
71
+ @param toZ number - the z-coordinate for where the light is pointing (optional)
72
+ @param settings object - additional settings for the filter (optional)
73
+ @return the new filter node */
74
+ spotLight: function(parent, result, x, y, z, toX, toY, toZ, settings) {
75
+ if (typeof toX == 'object') {
76
+ settings = toX;
77
+ toX = null;
78
+ }
79
+ var sets = $.extend({result: result, x: x, y: y, z: z},
80
+ (toX != null ? {pointsAtX: toX, pointsAtY: toY, pointsAtZ: toZ} : {}));
81
+ return this._root._makeNode(parent, 'feSpotLight', $.extend(sets, settings || {}));
82
+ },
83
+
84
+ /* Add a blend filter.
85
+ @param parent element - the parent node for the new filter
86
+ @param result string - the ID of this filter
87
+ @param mode string - normal | multiply | screen | darken | lighten
88
+ @param in1 string - the first image to blend
89
+ @param in2 string - the second image to blend
90
+ @param settings object - additional settings for the filter (optional)
91
+ @return the new filter node */
92
+ blend: function(parent, result, mode, in1, in2, settings) {
93
+ return this._root._makeNode(parent, 'feBlend', $.extend(
94
+ {result: result, mode: mode, _in: in1, in2: in2}, settings || {}));
95
+ },
96
+
97
+ /* Add a colour matrix filter.
98
+ @param parent element - the parent node for the new filter
99
+ @param result string - the ID of this filter
100
+ @param in1 string - the source to colour
101
+ @param type string - matrix | saturate | hueRotate | luminanceToAlpha
102
+ @param values number[][] - for 'matrix' the matrix (5x4) values to apply
103
+ number - for 'saturate' 0.0 to 1.0
104
+ number - for 'hueRotate' degrees
105
+ void - for 'luminanceToAlpha'
106
+ @param settings object - additional settings for the filter (optional)
107
+ @return the new filter node */
108
+ colorMatrix: function(parent, result, in1, type, values, settings) {
109
+ if (isArray(values)) {
110
+ var vs = '';
111
+ for (var i = 0; i < values.length; i++) {
112
+ vs += (i == 0 ? '' : ' ') + values[i].join(' ');
113
+ }
114
+ values = vs;
115
+ }
116
+ else if (typeof values == 'object') {
117
+ settings = values;
118
+ values = null;
119
+ }
120
+ var sets = $.extend({result: result, _in: in1, type: type},
121
+ (values != null ? {values: values} : {}));
122
+ return this._root._makeNode(parent, 'feColorMatrix', $.extend(sets, settings || {}));
123
+ },
124
+
125
+ /* Add a component transfer filter.
126
+ @param parent element - the parent node for the new filter
127
+ @param result string - the ID of this filter
128
+ @param functions object[] - one for each of RGB and A (alpha, optional)
129
+ for each entry:
130
+ [0] is string - identity | table | discrete | linear | gamma
131
+ [1] is number[] - for 'table' or 'discrete' the list of
132
+ interpolation or step values OR
133
+ number - for 'linear' the slope, for 'gamma' the amplitude,
134
+ [2] is number - for 'linear' the intercept, for 'gamma' the exponent,
135
+ [3] is number - for 'gamma' the offset
136
+ @param settings object - additional settings for the filter (optional)
137
+ @return the new filter node */
138
+ componentTransfer: function(parent, result, functions, settings) {
139
+ var node = this._root._makeNode(parent, 'feComponentTransfer',
140
+ $.extend({result: result}, settings || {}));
141
+ var rgba = ['R', 'G', 'B', 'A'];
142
+ for (var i = 0; i < Math.min(4, functions.length); i++) {
143
+ var props = functions[i];
144
+ var sets = $.extend({type: props[0]},
145
+ (type == 'table' || type == 'discrete' ? {table: props[1].join(' ')} :
146
+ (type == 'linear' ? {slope: props[1], intercept: props[2]} :
147
+ (type == 'gamma' ? {amplitude: props[1],
148
+ exponent: props[2], offset: props[3]} : {}))));
149
+ this._root._makeNode(node, 'feFunc' + rgba[i], sets);
150
+ }
151
+ return node;
152
+ },
153
+
154
+ /* Add a composite filter.
155
+ Specify all of k1, k2, k3, k4 or none of them.
156
+ @param parent element - the parent node for the new filter
157
+ @param result string - the ID of this filter
158
+ @param operator string - over | in | out | atop | xor | arithmetic
159
+ @param in1 string - the first filter to compose
160
+ @param in2 string - the second filter to compose
161
+ @param k1 number - for 'arithmetic' (optional)
162
+ @param k2 number - for 'arithmetic' (optional)
163
+ @param k3 number - for 'arithmetic' (optional)
164
+ @param k4 number - for 'arithmetic' (optional)
165
+ @param settings object - additional settings for the filter (optional)
166
+ @return the new filter node */
167
+ composite: function(parent, result, operator, in1, in2, k1, k2, k3, k4, settings) {
168
+ if (typeof k1 == 'object') {
169
+ settings = k1;
170
+ k1 = null;
171
+ }
172
+ var sets = $.extend({result: result, operator: operator, _in: in1, in2: in2},
173
+ (k1 != null ? {k1: k1, k2: k2, k3: k3, k4: k4} : {}));
174
+ return this._root._makeNode(parent, 'feComposite',
175
+ $.extend(sets, settings || {}));
176
+ },
177
+
178
+ /* Add a convolve matrix filter.
179
+ @param parent element - the parent node for the new filter
180
+ @param result string - the ID of this filter
181
+ @param order int or 'int int' - the size(s) of the matrix
182
+ @param matrix number[][] - the kernel matrix for the convolution
183
+ @param settings object - additional settings for the filter (optional)
184
+ @return the new filter node */
185
+ convolveMatrix: function(parent, result, order, matrix, settings) {
186
+ var mx = '';
187
+ for (var i = 0; i < matrix.length; i++) {
188
+ mx += (i == 0 ? '' : ' ') + matrix[i].join(' ');
189
+ }
190
+ matrix = mx;
191
+ return this._root._makeNode(parent, 'feConvolveMatrix', $.extend(
192
+ {result: result, order: order, kernelMatrix: matrix}, settings || {}));
193
+ },
194
+
195
+ /* Add a diffuse lighting filter.
196
+ @param parent element - the parent node for the new filter
197
+ @param result string - the ID of this filter
198
+ @param colour string - the lighting colour (optional)
199
+ @param settings object - additional settings for the filter (optional)
200
+ @return the new filter node */
201
+ diffuseLighting: function(parent, result, colour, settings) {
202
+ if (typeof colour == 'object') {
203
+ settings = colour;
204
+ colour = null;
205
+ }
206
+ return this._root._makeNode(parent, 'feDiffuseLighting',
207
+ $.extend($.extend({result: result}, (colour ? {lighting_color: colour} : {})), settings || {}));
208
+ },
209
+
210
+ /* Add a displacement map filter.
211
+ @param parent element - the parent node for the new filter
212
+ @param result string - the ID of this filter
213
+ @param in1 string - the source image
214
+ @param in2 string - the displacement image
215
+ @param settings object - additional settings for the filter (optional)
216
+ @return the new filter node */
217
+ displacementMap: function(parent, result, in1, in2, settings) {
218
+ return this._root._makeNode(parent, 'feDisplacementMap',
219
+ $.extend({result: result, _in: in1, in2: in2}, settings || {}));
220
+ },
221
+
222
+ /* Add a flood filter.
223
+ Specify all of x, y, width, height or none of them.
224
+ @param parent element - the parent node for the new filter
225
+ @param result string - the ID of this filter
226
+ @param x number - the left coordinate of the rectangle (optional)
227
+ @param y number - the top coordinate of the rectangle (optional)
228
+ @param width number - the width of the rectangle (optional)
229
+ @param height number - the height of the rectangle (optional)
230
+ @param colour string - the colour to fill with
231
+ @param opacity number - the opacity 0.0-1.0
232
+ @param settings object - additional settings for the filter (optional)
233
+ @return the new filter node */
234
+ flood: function(parent, result, x, y, width, height, colour, opacity, settings) {
235
+ if (arguments.length < 6) {
236
+ colour = x;
237
+ opacity = y;
238
+ settings = width;
239
+ x = null;
240
+ }
241
+ var sets = $.extend({result: result, flood_color: colour, flood_opacity: opacity},
242
+ (x != null ? {x: x, y: y, width: width, height: height} : {}));
243
+ return this._root._makeNode(parent, 'feFlood',
244
+ $.extend(sets, settings || {}));
245
+ },
246
+
247
+ /* Add a Gaussian blur filter.
248
+ @param parent element - the parent node for the new filter
249
+ @param result string - the ID of this filter
250
+ @param in1 string - the source filter
251
+ @param stdDevX number - the standard deviation along the x-axis
252
+ @param stdDevY number - the standard deviation along the y-axis (optional)
253
+ @param settings object - additional settings for the filter (optional)
254
+ @return the new filter node */
255
+ gaussianBlur: function(parent, result, in1, stdDevX, stdDevY, settings) {
256
+ if (typeof stdDevY == 'object') {
257
+ settings = stdDevY;
258
+ stdDevY = null;
259
+ }
260
+ return this._root._makeNode(parent, 'feGaussianBlur', $.extend(
261
+ {result: result, _in: in1, stdDeviation: stdDevX + (stdDevY ? ' ' + stdDevY : '')},
262
+ settings || {}));
263
+ },
264
+
265
+ /* Add an image filter.
266
+ @param parent element - the parent node for the new filter
267
+ @param result string - the ID of this filter
268
+ @param href string - the URL of the image
269
+ @param settings object - additional settings for the filter (optional)
270
+ @return the new filter node */
271
+ image: function(parent, result, href, settings) {
272
+ var node = this._root._makeNode(parent, 'feImage', $.extend(
273
+ {result: result}, settings || {}));
274
+ node.setAttributeNS(svgManager._xlinkNS, 'href', href);
275
+ return node;
276
+ },
277
+
278
+ /* Add a merge filter.
279
+ @param parent element - the parent node for the new filter
280
+ @param result string - the ID of this filter
281
+ @param refs string[] - the IDs of the filters to merge
282
+ @param settings object - additional settings for the filter (optional)
283
+ @return the new filter node */
284
+ merge: function(parent, result, refs, settings) {
285
+ var node = this._root._makeNode(parent, 'feMerge', $.extend(
286
+ {result: result}, settings || {}));
287
+ for (var i = 0; i < refs.length; i++) {
288
+ this._root._makeNode(node, 'feMergeNode', {_in: refs[i]});
289
+ }
290
+ return node;
291
+ },
292
+
293
+ /* Add a morphology filter.
294
+ @param parent element - the parent node for the new filter
295
+ @param result string - the ID of this filter
296
+ @param in1 string - the source filter
297
+ @param operator string - erode | dilate
298
+ @param radiusX number - the size of the operation in the x-axis
299
+ @param radiusY number - the size of the operation in the y-axis (optional)
300
+ @param settings object - additional settings for the filter (optional)
301
+ @return the new filter node */
302
+ morphology: function(parent, result, in1, operator, radiusX, radiusY, settings) {
303
+ if (typeof radiusY == 'object') {
304
+ settings = radiusY;
305
+ radiusY = null;
306
+ }
307
+ return this._root._makeNode(parent, 'feMorphology', $.extend(
308
+ {result: result, _in: in1, operator: operator,
309
+ radius: radiusX + (radiusY ? ' ' + radiusY : '')}, settings || {}));
310
+ },
311
+
312
+ /* Add an offset filter.
313
+ @param parent element - the parent node for the new filter
314
+ @param result string - the ID of this filter
315
+ @param in1 string - the source filter
316
+ @param dX number - the offset in the x-axis
317
+ @param dY number - the offset in the y-axis
318
+ @param settings object - additional settings for the filter (optional)
319
+ @return the new filter node */
320
+ offset: function(parent, result, in1, dx, dy, settings) {
321
+ return this._root._makeNode(parent, 'feOffset', $.extend(
322
+ {result: result, _in: in1, dx: dx, dy: dy}, settings || {}));
323
+ },
324
+
325
+ /* Add a specular lighting filter.
326
+ Numeric params are only optional if following numeric params are also omitted.
327
+ @param parent element - the parent node for the new filter
328
+ @param result string - the ID of this filter
329
+ @param in1 string - the source filter
330
+ @param surfaceScale number - the surface height when Ain = 1 (optional)
331
+ @param specularConstant number - the ks in Phong lighting model (optional)
332
+ @param specularExponent number - the shininess 1.0-128.0 (optional)
333
+ @param settings object - additional settings for the filter (optional)
334
+ @return the new filter node */
335
+ specularLighting: function(parent, result, in1, surfaceScale,
336
+ specularConstant, specularExponent, settings) {
337
+ if (typeof surfaceScale == 'object') {
338
+ settings = surfaceScale;
339
+ surfaceScale = null;
340
+ }
341
+ if (typeof specularConstant == 'object') {
342
+ settings = specularConstant;
343
+ specularConstant = null;
344
+ }
345
+ if (typeof specularExponent == 'object') {
346
+ settings = specularExponent;
347
+ specularExponent = null;
348
+ }
349
+ return this._root._makeNode(parent, 'feSpecularLighting', $.extend(
350
+ {result: result, _in: in1, surfaceScale: surfaceScale,
351
+ specularConstant: specularConstant, specularExponent: specularExponent},
352
+ settings || {}));
353
+ },
354
+
355
+ /* Add a tile filter.
356
+ @param parent element - the parent node for the new filter
357
+ @param result string - the ID of this filter
358
+ @param in1 string - the source filter
359
+ @param x number - the left coordinate of the rectangle
360
+ @param y number - the top coordinate of the rectangle
361
+ @param width number - the width of the rectangle
362
+ @param height number - the height of the rectangle
363
+ @param settings object - additional settings for the filter (optional)
364
+ @return the new filter node */
365
+ tile: function(parent, result, in1, x, y, width, height, settings) {
366
+ return this._root._makeNode(parent, 'feTile', $.extend(
367
+ {result: result, _in: in1, x: x, y: y, width: width, height: height},
368
+ settings || {}));
369
+ },
370
+
371
+ /* Add a turbulence filter.
372
+ @param parent element - the parent node for the new filter
373
+ @param result string - the ID of this filter
374
+ @param type string - fractalNoise | turbulence
375
+ @param baseFreq number or 'number number' - the base frequency,
376
+ optionally separated into x- and y-components
377
+ @param octaves number - the amount of turbulence (optional)
378
+ @param settings object - additional settings for the filter (optional)
379
+ @return the new filter node */
380
+ turbulence: function(parent, result, type, baseFreq, octaves, settings) {
381
+ if (typeof octaves == 'object') {
382
+ settings = octaves;
383
+ octaves = null;
384
+ }
385
+ return this._root._makeNode(parent, 'feTurbulence', $.extend(
386
+ {result: result, type: type, baseFrequency: baseFreq, numOctaves: octaves},
387
+ settings || {}));
388
+ }
389
+ });
390
+
391
+ /* Determine whether an object is an array. */
392
+ function isArray(a) {
393
+ return (a.constructor && a.constructor.toString().match(/\Array\(\)/));
394
+ }
395
+
396
+ })(jQuery)
@@ -0,0 +1,7 @@
1
+ /* http://keith-wood.name/svg.html
2
+ SVG filters for jQuery v1.0.1.
3
+ Written by Keith Wood (kbwood@iprimus.com.au) August 2007.
4
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
5
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
6
+ Please attribute the author if you use it. */
7
+ (function($){svgManager.addExtension('filters',SVGFilter);$.extend(svgManager._rootClass.prototype,{filter:function(a,b,x,y,c,d,e){return this._makeNode(a,'filter',$.extend({id:b,x:x,y:y,width:c,height:d},e||{}))}});function SVGFilter(a){this._root=a}$.extend(SVGFilter.prototype,{distantLight:function(a,b,c,d,e){return this._root._makeNode(a,'feDistantLight',$.extend({result:b,azimuth:c,elevantion:d},e||{}))},pointLight:function(a,b,x,y,z,c){return this._root._makeNode(a,'fePointLight',$.extend({result:b,x:x,y:y,z:z},c||{}))},spotLight:function(a,b,x,y,z,c,d,e,f){if(typeof c=='object'){f=c;c=null}var g=$.extend({result:b,x:x,y:y,z:z},(c!=null?{pointsAtX:c,pointsAtY:d,pointsAtZ:e}:{}));return this._root._makeNode(a,'feSpotLight',$.extend(g,f||{}))},blend:function(a,b,c,d,e,f){return this._root._makeNode(a,'feBlend',$.extend({result:b,mode:c,_in:d,in2:e},f||{}))},colorMatrix:function(a,b,c,d,e,f){if(isArray(e)){var g='';for(var i=0;i<e.length;i++){g+=(i==0?'':' ')+e[i].join(' ')}e=g}else if(typeof e=='object'){f=e;e=null}var h=$.extend({result:b,_in:c,type:d},(e!=null?{values:e}:{}));return this._root._makeNode(a,'feColorMatrix',$.extend(h,f||{}))},componentTransfer:function(a,b,c,d){var e=this._root._makeNode(a,'feComponentTransfer',$.extend({result:b},d||{}));var f=['R','G','B','A'];for(var i=0;i<Math.min(4,c.length);i++){var g=c[i];var h=$.extend({type:g[0]},(type=='table'||type=='discrete'?{table:g[1].join(' ')}:(type=='linear'?{slope:g[1],intercept:g[2]}:(type=='gamma'?{amplitude:g[1],exponent:g[2],offset:g[3]}:{}))));this._root._makeNode(e,'feFunc'+f[i],h)}return e},composite:function(a,b,c,d,e,f,g,h,i,j){if(typeof f=='object'){j=f;f=null}var k=$.extend({result:b,operator:c,_in:d,in2:e},(f!=null?{k1:f,k2:g,k3:h,k4:i}:{}));return this._root._makeNode(a,'feComposite',$.extend(k,j||{}))},convolveMatrix:function(a,b,c,d,e){var f='';for(var i=0;i<d.length;i++){f+=(i==0?'':' ')+d[i].join(' ')}d=f;return this._root._makeNode(a,'feConvolveMatrix',$.extend({result:b,order:c,kernelMatrix:d},e||{}))},diffuseLighting:function(a,b,c,d){if(typeof c=='object'){d=c;c=null}return this._root._makeNode(a,'feDiffuseLighting',$.extend($.extend({result:b},(c?{lighting_color:c}:{})),d||{}))},displacementMap:function(a,b,c,d,e){return this._root._makeNode(a,'feDisplacementMap',$.extend({result:b,_in:c,in2:d},e||{}))},flood:function(a,b,x,y,c,d,e,f,g){if(arguments.length<6){e=x;f=y;g=c;x=null}var h=$.extend({result:b,flood_color:e,flood_opacity:f},(x!=null?{x:x,y:y,width:c,height:d}:{}));return this._root._makeNode(a,'feFlood',$.extend(h,g||{}))},gaussianBlur:function(a,b,c,d,e,f){if(typeof e=='object'){f=e;e=null}return this._root._makeNode(a,'feGaussianBlur',$.extend({result:b,_in:c,stdDeviation:d+(e?' '+e:'')},f||{}))},image:function(a,b,c,d){var e=this._root._makeNode(a,'feImage',$.extend({result:b},d||{}));e.setAttributeNS(svgManager._xlinkNS,'href',c);return e},merge:function(a,b,c,d){var e=this._root._makeNode(a,'feMerge',$.extend({result:b},d||{}));for(var i=0;i<c.length;i++){this._root._makeNode(e,'feMergeNode',{_in:c[i]})}return e},morphology:function(a,b,c,d,e,f,g){if(typeof f=='object'){g=f;f=null}return this._root._makeNode(a,'feMorphology',$.extend({result:b,_in:c,operator:d,radius:e+(f?' '+f:'')},g||{}))},offset:function(a,b,c,d,e,f){return this._root._makeNode(a,'feOffset',$.extend({result:b,_in:c,dx:d,dy:e},f||{}))},specularLighting:function(a,b,c,d,e,f,g){if(typeof d=='object'){g=d;d=null}if(typeof e=='object'){g=e;e=null}if(typeof f=='object'){g=f;f=null}return this._root._makeNode(a,'feSpecularLighting',$.extend({result:b,_in:c,surfaceScale:d,specularConstant:e,specularExponent:f},g||{}))},tile:function(a,b,c,x,y,d,e,f){return this._root._makeNode(a,'feTile',$.extend({result:b,_in:c,x:x,y:y,width:d,height:e},f||{}))},turbulence:function(a,b,c,d,e,f){if(typeof e=='object'){f=e;e=null}return this._root._makeNode(a,'feTurbulence',$.extend({result:b,type:c,baseFrequency:d,numOctaves:e},f||{}))}});function isArray(a){return(a.constructor&&a.constructor.toString().match(/\Array\(\)/))}})(jQuery)
@@ -0,0 +1,7 @@
1
+ /* http://keith-wood.name/svg.html
2
+ SVG filters for jQuery v1.0.1.
3
+ Written by Keith Wood (kbwood@iprimus.com.au) August 2007.
4
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
5
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
6
+ Please attribute the author if you use it. */
7
+ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(7($){C.2d(\'1B\',H);$.5(C.2a.N,{J:7(a,b,x,y,c,d,e){m 8.l(a,\'J\',$.5({1s:b,x:x,y:y,E:c,F:d},e||{}))}});7 H(a){8.9=a}$.5(H.N,{1d:7(a,b,c,d,e){m 8.9.l(a,\'1a\',$.5({n:b,X:c,U:d},e||{}))},T:7(a,b,x,y,z,c){m 8.9.l(a,\'29\',$.5({n:b,x:x,y:y,z:z},c||{}))},1T:7(a,b,x,y,z,c,d,e,f){q(s c==\'r\'){f=c;c=p}o g=$.5({n:b,x:x,y:y,z:z},(c!=p?{1w:c,1r:d,1p:e}:{}));m 8.9.l(a,\'1o\',$.5(g,f||{}))},1l:7(a,b,c,d,e,f){m 8.9.l(a,\'1k\',$.5({n:b,1i:c,t:d,I:e},f||{}))},1c:7(a,b,c,d,e,f){q(M(e)){o g=\'\';w(o i=0;i<e.v;i++){g+=(i==0?\'\':\' \')+e[i].D(\' \')}e=g}Z q(s e==\'r\'){f=e;e=p}o h=$.5({n:b,t:c,u:d},(e!=p?{S:e}:{}));m 8.9.l(a,\'13\',$.5(h,f||{}))},Q:7(a,b,c,d){o e=8.9.l(a,\'15\',$.5({n:b},d||{}));o f=[\'R\',\'G\',\'B\',\'A\'];w(o i=0;i<1P.1M(4,c.v);i++){o g=c[i];o h=$.5({u:g[0]},(u==\'O\'||u==\'1K\'?{O:g[1].D(\' \')}:(u==\'1J\'?{1I:g[1],1G:g[2]}:(u==\'1D\'?{1C:g[1],1A:g[2],K:g[3]}:{}))));8.9.l(e,\'1t\'+f[i],h)}m e},1q:7(a,b,c,d,e,f,g,h,i,j){q(s f==\'r\'){j=f;f=p}o k=$.5({n:b,L:c,t:d,I:e},(f!=p?{1n:f,1m:g,1u:h,1v:i}:{}));m 8.9.l(a,\'1j\',$.5(k,j||{}))},1x:7(a,b,c,d,e){o f=\'\';w(o i=0;i<d.v;i++){f+=(i==0?\'\':\' \')+d[i].D(\' \')}d=f;m 8.9.l(a,\'1y\',$.5({n:b,1z:c,1h:d},e||{}))},1g:7(a,b,c,d){q(s c==\'r\'){d=c;c=p}m 8.9.l(a,\'1f\',$.5($.5({n:b},(c?{1e:c}:{})),d||{}))},1E:7(a,b,c,d,e){m 8.9.l(a,\'1F\',$.5({n:b,t:c,I:d},e||{}))},1b:7(a,b,x,y,c,d,e,f,g){q(1H.v<6){e=x;f=y;g=c;x=p}o h=$.5({n:b,19:e,18:f},(x!=p?{x:x,y:y,E:c,F:d}:{}));m 8.9.l(a,\'1L\',$.5(h,g||{}))},17:7(a,b,c,d,e,f){q(s e==\'r\'){f=e;e=p}m 8.9.l(a,\'16\',$.5({n:b,t:c,Y:d+(e?\' \'+e:\'\')},f||{}))},1O:7(a,b,c,d){o e=8.9.l(a,\'W\',$.5({n:b},d||{}));e.V(C.1Q,\'1R\',c);m e},10:7(a,b,c,d){o e=8.9.l(a,\'1S\',$.5({n:b},d||{}));w(o i=0;i<c.v;i++){8.9.l(e,\'11\',{t:c[i]})}m e},1U:7(a,b,c,d,e,f,g){q(s f==\'r\'){g=f;f=p}m 8.9.l(a,\'12\',$.5({n:b,t:c,L:d,1W:e+(f?\' \'+f:\'\')},g||{}))},K:7(a,b,c,d,e,f){m 8.9.l(a,\'1X\',$.5({n:b,t:c,1Y:d,14:e},f||{}))},1Z:7(a,b,c,d,e,f,g){q(s d==\'r\'){g=d;d=p}q(s e==\'r\'){g=e;e=p}q(s f==\'r\'){g=f;f=p}m 8.9.l(a,\'20\',$.5({n:b,t:c,21:d,23:e,22:f},g||{}))},1V:7(a,b,c,x,y,d,e,f){m 8.9.l(a,\'24\',$.5({n:b,t:c,x:x,y:y,E:d,F:e},f||{}))},25:7(a,b,c,d,e,f){q(s e==\'r\'){f=e;e=p}m 8.9.l(a,\'26\',$.5({n:b,u:c,27:d,28:e},f||{}))}});7 M(a){m(a.P&&a.P.1N().2b(/\\2c\\(\\)/))}})(2e)',62,139,'|||||extend||function|this|_root||||||||||||_makeNode|return|result|var|null|if|object|typeof|_in|type|length|for||||||svgManager|join|width|height||SVGFilter|in2|filter|offset|operator|isArray|prototype|table|constructor|componentTransfer||values|pointLight|elevantion|setAttributeNS|feImage|azimuth|stdDeviation|else|merge|feMergeNode|feMorphology|feColorMatrix|dy|feComponentTransfer|feGaussianBlur|gaussianBlur|flood_opacity|flood_color|feDistantLight|flood|colorMatrix|distantLight|lighting_color|feDiffuseLighting|diffuseLighting|kernelMatrix|mode|feComposite|feBlend|blend|k2|k1|feSpotLight|pointsAtZ|composite|pointsAtY|id|feFunc|k3|k4|pointsAtX|convolveMatrix|feConvolveMatrix|order|exponent|filters|amplitude|gamma|displacementMap|feDisplacementMap|intercept|arguments|slope|linear|discrete|feFlood|min|toString|image|Math|_xlinkNS|href|feMerge|spotLight|morphology|tile|radius|feOffset|dx|specularLighting|feSpecularLighting|surfaceScale|specularExponent|specularConstant|feTile|turbulence|feTurbulence|baseFrequency|numOctaves|fePointLight|_rootClass|match|Array|addExtension|jQuery'.split('|'),0,{}))
@@ -0,0 +1,1337 @@
1
+ /* http://keith-wood.name/svg.html
2
+ SVG graphing extension for jQuery v1.0.1.
3
+ Written by Keith Wood (kbwood@iprimus.com.au) August 2007.
4
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
5
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
6
+ Please attribute the author if you use it. */
7
+
8
+ var svgGraphing = null;
9
+
10
+ (function($) { // Hide scope, no $ conflict
11
+
12
+ svgManager.addExtension('graph', SVGGraph);
13
+
14
+ // Singleton primary SVG graphing interface
15
+ svgGraphing = new SVGGraphing();
16
+
17
+ function SVGGraphing() {
18
+ this.regional = [];
19
+ this.regional[''] = {percentageText: 'Percentage'};
20
+ this.region = this.regional[''];
21
+ }
22
+
23
+ $.extend(SVGGraphing.prototype, {
24
+ _chartTypes: [],
25
+
26
+ /* Add a new chart rendering type to the package.
27
+ The rendering object must implement the following functions:
28
+ getTitle(), getDescription(), getOptions(), drawChart(graph).
29
+ @param id string - the ID of this graph renderer
30
+ @param chartType object - the object implementing this chart type */
31
+ addChartType: function(id, chartType) {
32
+ this._chartTypes[id] = chartType;
33
+ },
34
+
35
+ /* Retrieve the list of chart types.
36
+ @return object[string] - the array of chart types indexed by ID */
37
+ chartTypes: function() {
38
+ return this._chartTypes;
39
+ }
40
+ });
41
+
42
+ /* Extension point for SVG graphing.
43
+ Access through root.filters. */
44
+ function SVGGraph(root) {
45
+ this._root = root; // The attached SVG root object
46
+ this._drawNow = true; // True for immediate update, false to wait for redraw call
47
+ for (var id in svgGraphing._chartTypes) {
48
+ this._chartType = svgGraphing._chartTypes[id]; // Use first graph renderer
49
+ break;
50
+ }
51
+ this._chartOptions = {}; // Extra options for the graph type
52
+ // The graph title and settings
53
+ this._title = {value: '', offset: 25, settings: {text_anchor: 'middle'}};
54
+ this._area = [0.1, 0.1, 0.8, 0.9]; // The chart area: left, top, right, bottom,
55
+ // > 1 in pixels, <= 1 as proportion
56
+ this._chartFormat = {fill: 'none', stroke: 'black'}; // The formatting for the chart area
57
+ this._gridlines = []; // The formatting of the x- and y-gridlines
58
+ this._series = []; // The series to be plotted, each is an object
59
+ this._onstatus = null; // The callback function for status updates
60
+ this._chartGroup = this._root.group(null, 'graph'); // The main group for the graph
61
+
62
+ this.xAxis = new SVGGraphAxis(); // The main x-axis
63
+ this.xAxis.title('', 40);
64
+ this.yAxis = new SVGGraphAxis(); // The main y-axis
65
+ this.yAxis.title('', 40);
66
+ this.x2Axis = null; // The secondary x-axis
67
+ this.y2Axis = null; // The secondary y-axis
68
+ this.legend = new SVGGraphLegend(); // The chart legend
69
+ }
70
+
71
+ $.extend(SVGGraph.prototype, {
72
+
73
+ /* Useful indexes. */
74
+ X: 0,
75
+ Y: 1,
76
+ W: 2,
77
+ H: 3,
78
+ L: 0,
79
+ T: 1,
80
+ R: 2,
81
+ B: 3,
82
+
83
+ /* Standard percentage axis. */
84
+ _percentageAxis: new SVGGraphAxis(svgGraphing.region.percentageText, 0, 100, 10, 0),
85
+
86
+ /* Set or retrieve the type of chart to be rendered.
87
+ See svgGraphing.getChartTypes() for the list of available types.
88
+ @param id string - the ID of the chart type
89
+ @param options object - additional settings for this chart type (optional)
90
+ @return SVGGraph - this graph object or
91
+ string - the chart type (if no parameters) */
92
+ chartType: function(id, options) {
93
+ if (arguments.length == 0) {
94
+ return this._chartType;
95
+ }
96
+ var chartType = svgGraphing._chartTypes[id];
97
+ if (chartType) {
98
+ this._chartType = chartType;
99
+ this._chartOptions = $.extend({}, options || {});
100
+ }
101
+ this._drawGraph();
102
+ return this;
103
+ },
104
+
105
+ /* Set or retrieve additional options for the particular chart type.
106
+ @param options object - the extra options
107
+ @return SVGGraph - this graph object or
108
+ object - the chart options (if no parameters) */
109
+ chartOptions: function(options) {
110
+ if (arguments.length == 0) {
111
+ return this._chartOptions;
112
+ }
113
+ this._chartOptions = $.extend({}, options);
114
+ this._drawGraph();
115
+ return this;
116
+ },
117
+
118
+ /* Set or retrieve the background of the graph chart.
119
+ @param fill string - how to fill the chart background
120
+ @param stroke string - the colour of the outline (optional)
121
+ @param settings object - additional formatting for the chart background (optional)
122
+ @return SVGGraph - this graph object or
123
+ object - the chart format (if no parameters) */
124
+ chartFormat: function(fill, stroke, settings) {
125
+ if (arguments.length == 0) {
126
+ return this._chartFormat;
127
+ }
128
+ if (typeof stroke == 'object') {
129
+ settings = stroke;
130
+ stroke = null;
131
+ }
132
+ this._chartFormat = $.extend($.extend({fill: fill},
133
+ (stroke ? {stroke: stroke} : {})), settings || {});
134
+ this._drawGraph();
135
+ return this;
136
+ },
137
+
138
+ /* Set or retrieve the main chart area.
139
+ @param left number - > 1 is pixels, <= 1 is proportion of width or
140
+ number[4] - for left, top, right, bottom
141
+ @param top number - > 1 is pixels, <= 1 is proportion of height
142
+ @param right number - > 1 is pixels, <= 1 is proportion of width
143
+ @param bottom number - > 1 is pixels, <= 1 is proportion of height
144
+ @return SVGGraph - this graph object or
145
+ number[4] - the chart area: left, top, right, bottom (if no parameters) */
146
+ chartArea: function(left, top, right, bottom) {
147
+ if (arguments.length == 0) {
148
+ return this._area;
149
+ }
150
+ this._area = (isArray(left) ? left : [left, top, right, bottom]);
151
+ this._drawGraph();
152
+ return this;
153
+ },
154
+
155
+ /* Set or retrieve the gridlines formatting for the graph chart.
156
+ @param xSettings string - the colour of the gridlines along the x-axis, or
157
+ object - formatting for the gridlines along the x-axis, or
158
+ null for none
159
+ @param ySettings string - the colour of the gridlines along the y-axis, or
160
+ object - formatting for the gridlines along the y-axis, or
161
+ null for none
162
+ @return SVGGraph - this graph object or
163
+ object[2] - the gridlines formatting (if no parameters) */
164
+ gridlines: function(xSettings, ySettings) {
165
+ if (arguments.length == 0) {
166
+ return this._gridlines;
167
+ }
168
+ this._gridlines = [(typeof xSettings == 'string' ? {stroke: xSettings} : xSettings),
169
+ (typeof ySettings == 'string' ? {stroke: ySettings} : ySettings)];
170
+ this._drawGraph();
171
+ return this;
172
+ },
173
+
174
+ /* Set or retrieve the title of the graph and its formatting.
175
+ @param value string - the title
176
+ @param offset number - the vertical positioning of the title
177
+ > 1 is pixels, <= 1 is proportion of width (optional)
178
+ @param settings object - formatting for the title (optional)
179
+ @return SVGGraph - this graph object or
180
+ object - value, offset, and settings for the title (if no parameters) */
181
+ title: function(value, offset, settings) {
182
+ if (arguments.length == 0) {
183
+ return this._title;
184
+ }
185
+ if (typeof offset == 'object') {
186
+ settings = offset;
187
+ offset = null;
188
+ }
189
+ this._title = {value: value, offset: offset || this._title.offset,
190
+ settings: $.extend({text_anchor: 'middle'}, settings || {})};
191
+ this._drawGraph();
192
+ return this;
193
+ },
194
+
195
+ /* Add a series of values to be plotted on the graph.
196
+ @param name string - the name of this series
197
+ @param values number[] - the values to be plotted
198
+ @param fill string - how the plotted values are filled
199
+ @param stroke string - the colour of the plotted lines
200
+ @param strokeWidth number - the width of the plotted lines (optional)
201
+ @param settings object - additional settings for the plotted values (optional)
202
+ @return SVGGraph - this graph object */
203
+ addSeries: function(name, values, fill, stroke, strokeWidth, settings) {
204
+ if (typeof strokeWidth == 'object') {
205
+ settings = strokeWidth;
206
+ strokeWidth = null;
207
+ }
208
+ this._series[this._series.length] =
209
+ new SVGGraphSeries(name, values, fill, stroke, strokeWidth, settings || {});
210
+ this._drawGraph();
211
+ return this;
212
+ },
213
+
214
+ /* Retrieve the series wrappers.
215
+ @return SVGGraphSeries[] - the list of series */
216
+ series: function() {
217
+ return this._series;
218
+ },
219
+
220
+ /* Suppress drawing of the graph until redraw() is called.
221
+ @return SVGGraph - this graph object */
222
+ noDraw: function() {
223
+ this._drawNow = false;
224
+ return this;
225
+ },
226
+
227
+ /* Redraw the entire graph with the current settings and values.
228
+ @return SVGGraph - this graph object */
229
+ redraw: function() {
230
+ this._drawNow = true;
231
+ this._drawGraph();
232
+ return this;
233
+ },
234
+
235
+ /* Set the callback function for status updates.
236
+ @param onstatus function - the callback function
237
+ @return SVGGraph - this graph object */
238
+ status: function(onstatus) {
239
+ this._onstatus = onstatus;
240
+ return this;
241
+ },
242
+
243
+ /* Actually draw the graph (if allowed) based on the graph type set. */
244
+ _drawGraph: function() {
245
+ if (!this._drawNow) {
246
+ return;
247
+ }
248
+ while (this._chartGroup.firstChild) {
249
+ this._chartGroup.removeChild(this._chartGroup.firstChild);
250
+ }
251
+ if (!this._chartGroup.parent) {
252
+ this._root._svg.appendChild(this._chartGroup);
253
+ }
254
+ this._chartType.drawGraph(this);
255
+ },
256
+
257
+ /* Draw the graph title - centred. */
258
+ _drawTitle: function() {
259
+ this._root.text(this._chartGroup, this._root._width() / 2, this._title.offset,
260
+ this._title.value, this._title.settings);
261
+ },
262
+
263
+ /* Calculate the actual dimensions of the chart area.
264
+ @param area number[4] - the area values to evaluate (optional)
265
+ @return an array of dimension values: left, top, width, height */
266
+ _getDims: function(area) {
267
+ area = area || this._area;
268
+ var left = (area[this.L] > 1 ? area[this.L] :
269
+ this._root._width() * area[this.L]);
270
+ var top = (area[this.T] > 1 ? area[this.T] :
271
+ this._root._height() * area[this.T]);
272
+ var width = (area[this.R] > 1 ? area[this.R] :
273
+ this._root._width() * area[this.R]) - left;
274
+ var height = (area[this.B] > 1 ? area[this.B] :
275
+ this._root._height() * area[this.B]) - top;
276
+ return [left, top, width, height];
277
+ },
278
+
279
+ /* Draw the chart background, including gridlines.
280
+ @param noXGrid boolean - true to suppress the x-gridlines, false to draw them (optional)
281
+ @param noYGrid boolean - true to suppress the y-gridlines, false to draw them (optional)
282
+ @return the background group element */
283
+ _drawChartBackground: function(noXGrid, noYGrid) {
284
+ var bg = this._root.group(this._chartGroup, 'background');
285
+ var dims = this._getDims();
286
+ this._root.rect(bg, dims[this.X], dims[this.Y], dims[this.W], dims[this.H], this._chartFormat);
287
+ if (this._gridlines[0] && this.yAxis._ticks.major && !noYGrid) {
288
+ this._drawGridlines(bg, this.yAxis, true, dims, this._gridlines[0]);
289
+ }
290
+ if (this._gridlines[1] && this.xAxis._ticks.major && !noXGrid) {
291
+ this._drawGridlines(bg, this.xAxis, false, dims, this._gridlines[1]);
292
+ }
293
+ return bg;
294
+ },
295
+
296
+ /* Draw one set of gridlines.
297
+ @param bg element - the background group element
298
+ @param axis SVGGraphAxis - the axis definition
299
+ @param horiz boolean - true if horizontal, false if vertical
300
+ @param dims number[] - the left, top, width, height of the chart area
301
+ @param format object - additional settings for the gridlines */
302
+ _drawGridlines: function(bg, axis, horiz, dims, format) {
303
+ var g = this._root.group(bg, format);
304
+ var scale = (horiz ? dims[this.H] : dims[this.W]) / (axis._scale.max - axis._scale.min);
305
+ var major = Math.floor(axis._scale.min / axis._ticks.major) * axis._ticks.major;
306
+ major = (major < axis._scale.min ? major + axis._ticks.major : major);
307
+ while (major <= axis._scale.max) {
308
+ var v = (horiz ? axis._scale.max - major : major - axis._scale.min) * scale +
309
+ (horiz ? dims[this.Y] : dims[this.X]);
310
+ this._root.line(g, (horiz ? dims[this.X] : v), (horiz ? v : dims[this.Y]),
311
+ (horiz ? dims[this.X] + dims[this.W] : v), (horiz ? v : dims[this.Y] + dims[this.H]));
312
+ major += axis._ticks.major;
313
+ }
314
+ },
315
+
316
+ /* Draw the axes in their standard configuration.
317
+ @param noX boolean - true to suppress the x-axes, false to draw it (optional) */
318
+ _drawAxes: function(noX) {
319
+ var dims = this._getDims();
320
+ if (this.xAxis && !noX) {
321
+ if (this.xAxis._title) {
322
+ this._root.text(this._chartGroup, dims[this.X] + dims[this.W] / 2,
323
+ dims[this.Y] + dims[this.H] + this.xAxis._titleOffset, this.xAxis._title);
324
+ }
325
+ this._drawAxis(this.xAxis, 'xAxis', dims[this.X], dims[this.Y] + dims[this.H],
326
+ dims[this.X] + dims[this.W], dims[this.Y] + dims[this.H]);
327
+ }
328
+ if (this.yAxis) {
329
+ if (this.yAxis._title) {
330
+ this._root.text(this._chartGroup, 0, 0, this.yAxis._title, {text_anchor: 'middle',
331
+ transform: 'translate(' + (dims[this.X] - this.yAxis._titleOffset) + ',' +
332
+ (dims[this.Y] + dims[this.H] / 2) + ') rotate(-90)'});
333
+ }
334
+ this._drawAxis(this.yAxis, 'yAxis', dims[this.X], dims[this.Y],
335
+ dims[this.X], dims[this.Y] + dims[this.H]);
336
+ }
337
+ if (this.x2Axis && !noX) {
338
+ if (this.x2Axis._title) {
339
+ this._root.text(this._chartGroup, dims[this.X] + dims[this.W] / 2,
340
+ dims[this.X] - this.x2Axis._titleOffset, this.x2Axis._title);
341
+ }
342
+ this._drawAxis(this.x2Axis, 'x2Axis', dims[this.X], dims[this.Y],
343
+ dims[this.X] + dims[this.W], dims[this.Y]);
344
+ }
345
+ if (this.y2Axis) {
346
+ if (this.y2Axis._title) {
347
+ this._root.text(this._chartGroup, 0, 0, this.y2Axis._title, {text_anchor: 'middle',
348
+ transform: 'translate(' + (dims[this.X] + dims[this.W] + this.y2Axis._titleOffset) +
349
+ ',' + (dims[this.Y] + dims[this.H] / 2) + ') rotate(-90)'});
350
+ }
351
+ this._drawAxis(this.y2Axis, 'y2Axis', dims[this.X] + dims[this.W], dims[this.Y],
352
+ dims[this.X] + dims[this.W], dims[this.Y] + dims[this.H]);
353
+ }
354
+ },
355
+
356
+ /* Draw an axis and its tick marks.
357
+ @param axis SVGGraphAxis - the axis definition
358
+ @param id string - the identifier for the axis group element
359
+ @param x1 number - starting x-coodinate for the axis
360
+ @param y1 number - starting y-coodinate for the axis
361
+ @param x2 number - ending x-coodinate for the axis
362
+ @param y2 number - ending y-coodinate for the axis */
363
+ _drawAxis: function(axis, id, x1, y1, x2, y2) {
364
+ var horiz = (y1 == y2);
365
+ var gl = this._root.group(this._chartGroup, id, axis._lineFormat);
366
+ var gt = this._root.group(this._chartGroup, id + 'Labels',
367
+ $.extend({text_anchor: (horiz ? 'middle' : 'end')}, axis._labelFormat));
368
+ this._root.line(gl, x1, y1, x2, y2);
369
+ if (axis._ticks.major) {
370
+ var bottomRight = (x2 > (this._root._width() / 2) &&
371
+ y2 > (this._root._height() / 2));
372
+ var scale = (horiz ? x2 - x1 : y2 - y1) / (axis._scale.max - axis._scale.min);
373
+ var size = axis._ticks.size;
374
+ var major = Math.floor(axis._scale.min / axis._ticks.major) * axis._ticks.major;
375
+ major = (major < axis._scale.min ? major + axis._ticks.major : major);
376
+ var minor = (!axis._ticks.minor ? axis._scale.max + 1 :
377
+ Math.floor(axis._scale.min / axis._ticks.minor) * axis._ticks.minor);
378
+ minor = (minor < axis._scale.min ? minor + axis._ticks.minor : minor);
379
+ var offsets = this._getTickOffsets(axis, bottomRight);
380
+ while (major <= axis._scale.max || minor <= axis._scale.max) {
381
+ var cur = Math.min(major, minor);
382
+ var len = (cur == major ? size : size / 2);
383
+ var v = (horiz ? x1 : y1) +
384
+ (horiz ? cur - axis._scale.min : axis._scale.max - cur) * scale;
385
+ this._root.line(gl, (horiz ? v : x1 + len * offsets[0]),
386
+ (horiz ? y1 + len * offsets[0] : v),
387
+ (horiz ? v : x1 + len * offsets[1]),
388
+ (horiz ? y1 + len * offsets[1] : v));
389
+ if (cur == major) {
390
+ this._root.text(gt, (horiz ? v : x1 - size), (horiz ? y1 + 2 * size : v),
391
+ (axis._labels ? axis._labels[cur] : '' + cur));
392
+ }
393
+ major += (cur == major ? axis._ticks.major : 0);
394
+ minor += (cur == minor ? axis._ticks.minor : 0);
395
+ }
396
+ }
397
+ },
398
+
399
+ /* Calculate offsets based on axis and tick positions.
400
+ @param axis SVGGraphAxis - the axis definition
401
+ @param bottomRight boolean - true if this axis is appearing on the bottom or
402
+ right of the chart area, false if to the top or left
403
+ @return the array of offset multipliers (-1..+1) */
404
+ _getTickOffsets: function(axis, bottomRight) {
405
+ return [(axis._ticks.position == (bottomRight ? 'in' : 'out') ||
406
+ axis._ticks.position == 'both' ? -1 : 0),
407
+ (axis._ticks.position == (bottomRight ? 'out' : 'in') ||
408
+ axis._ticks.position == 'both' ? +1 : 0), ];
409
+ },
410
+
411
+ /* Retrieve the standard percentage axis.
412
+ @return percentage axis */
413
+ _getPercentageAxis: function() {
414
+ this._percentageAxis._title = svgGraphing.region.percentageText;
415
+ return this._percentageAxis;
416
+ },
417
+
418
+ /* Calculate the column totals across all the series. */
419
+ _getTotals: function() {
420
+ var totals = [];
421
+ var numVal = (this._series.length ? this._series[0]._values.length : 0);
422
+ for (var i = 0; i < numVal; i++) {
423
+ totals[i] = 0;
424
+ for (var j = 0; j < this._series.length; j++) {
425
+ totals[i] += this._series[j]._values[i];
426
+ }
427
+ }
428
+ return totals;
429
+ },
430
+
431
+ /* Draw the chart legend. */
432
+ _drawLegend: function() {
433
+ if (!this.legend._show) {
434
+ return;
435
+ }
436
+ var g = this._root.group(this._chartGroup, 'legend');
437
+ var dims = this._getDims(this.legend._area);
438
+ this._root.rect(g, dims[this.X], dims[this.Y], dims[this.W], dims[this.H],
439
+ this.legend._bgSettings);
440
+ var horiz = dims[this.W] > dims[this.H];
441
+ var numSer = this._series.length;
442
+ var offset = (horiz ? dims[this.W] : dims[this.H]) / numSer;
443
+ var xBase = dims[this.X] + 5;
444
+ var yBase = dims[this.Y] + (horiz ? dims[this.H] / 2 : offset / 2);
445
+ for (var i = 0; i < numSer; i++) {
446
+ var series = this._series[i];
447
+ this._root.rect(g, xBase + (horiz ? i * offset : 0),
448
+ yBase + (horiz ? 0 : i * offset) - this.legend._sampleSize,
449
+ this.legend._sampleSize, this.legend._sampleSize,
450
+ {fill: series._fill, stroke: series._stroke, stroke_width: 1});
451
+ this._root.text(g, xBase + (horiz ? i * offset : 0) + this.legend._sampleSize + 5,
452
+ yBase + (horiz ? 0 : i * offset), series._name, this.legend._textSettings);
453
+ }
454
+ },
455
+
456
+ /* Show the current value status on hover. */
457
+ _showStatus: function(value) {
458
+ var onStatus = (!this._onstatus ? '' :
459
+ this._onstatus.toString().replace(/function (.*)\([\s\S]*/m, '$1'));
460
+ return (!this._onstatus ? {} :
461
+ {onmouseover: 'window.parent.' + onStatus + '(\'' + value + '\');',
462
+ onmouseout: 'window.parent.' + onStatus + '(\'\');'});
463
+ }
464
+ });
465
+
466
+ /* Details about each graph axis.
467
+ @param title string - the title of the axis
468
+ @param min number - the minimum value displayed on this axis
469
+ @param max number - the maximum value displayed on this axis
470
+ @param major number - the distance between major ticks
471
+ @param minor number - the distance between minor ticks (optional)
472
+ @return the new axis object */
473
+ function SVGGraphAxis(title, min, max, major, minor) {
474
+ /* Title of this axis. */
475
+ this._title = title || '';
476
+ /* Formatting settings for the title. */
477
+ this._titleFormat = {};
478
+ /* The offset for positioning the title. */
479
+ this._titleOffset = 0;
480
+ /* List of labels for this axis - one per possible value across all series. */
481
+ this._labels = null;
482
+ /* Formatting settings for the labels. */
483
+ this._labelFormat = {};
484
+ /* Formatting settings for the axis lines. */
485
+ this._lineFormat = {stroke: 'black'};
486
+ /* Tick mark options. */
487
+ this._ticks = {major: major || 10, minor: minor || 0, size: 10, position: 'out'};
488
+ /* Axis scale settings. */
489
+ this._scale = {min: min || 0, max: max || 100};
490
+ /* Where this axis crosses the other one. */
491
+ this._crossAt = 0;
492
+ }
493
+
494
+ $.extend(SVGGraphAxis.prototype, {
495
+
496
+ /* Set or retrieve the scale for this axis.
497
+ @param min number - the minimum value shown
498
+ @param max number - the maximum value shown
499
+ @return SVGGraphAxis - this axis object or
500
+ object - min and max values (if no parameters) */
501
+ scale: function(min, max) {
502
+ if (arguments.length == 0) {
503
+ return this._scale;
504
+ }
505
+ this._scale.min = min;
506
+ this._scale.max = max;
507
+ return this;
508
+ },
509
+
510
+ /* Set or retrieve the ticks for this axis.
511
+ @param major number - the distance between major ticks
512
+ @param minor number - the distance between minor ticks
513
+ @param size number - the length of the major ticks (minor are half) (optional)
514
+ @param position string - the location of the ticks:
515
+ 'in', 'out', 'both' (optional)
516
+ @return SVGGraphAxis - this axis object or
517
+ object - major, minor, size, and position values (if no parameters) */
518
+ ticks: function(major, minor, size, position) {
519
+ if (arguments.length == 0) {
520
+ return this._ticks;
521
+ }
522
+ if (typeof size == 'string') {
523
+ position = size;
524
+ size = null;
525
+ }
526
+ this._ticks.major = major;
527
+ this._ticks.minor = minor;
528
+ this._ticks.size = size || 10;
529
+ this._ticks.position = position || 'out';
530
+ return this;
531
+ },
532
+
533
+ /* Set or retrieve the title for this axis.
534
+ @param title string - the title text
535
+ @param offset number - the distance to offset the title position (optional)
536
+ @param format object - formatting settings for the title (optional)
537
+ @return SVGGraphAxis - this axis object or
538
+ object - title, offset, and format values (if no parameters) */
539
+ title: function(title, offset, format) {
540
+ if (arguments.length == 0) {
541
+ return {title: this._title, offset: this._titleOffset, format: this._titleFormat};
542
+ }
543
+ if (typeof offset == 'object') {
544
+ format = offset;
545
+ offset = null;
546
+ }
547
+ this._title = title;
548
+ if (offset != null) {
549
+ this._titleOffset = offset;
550
+ }
551
+ if (format) {
552
+ this._titleFormat = format;
553
+ }
554
+ return this;
555
+ },
556
+
557
+ /* Set or retrieve the labels for this axis.
558
+ @param labels string[] - the text for each entry
559
+ @param format object - formatting settings for the labels (optional)
560
+ @return SVGGraphAxis - this axis object or
561
+ object - labels and format values (if no parameters) */
562
+ labels: function(labels, format) {
563
+ if (arguments.length == 0) {
564
+ return {labels: this._labels, format: this._labelFormat};
565
+ }
566
+ this._labels = labels;
567
+ if (format) {
568
+ this._labelFormat = format;
569
+ }
570
+ return this;
571
+ },
572
+
573
+ /* Set or retrieve the line formatting for this axis.
574
+ @param colour string - the line's colour
575
+ @param width number - the line's width (optional)
576
+ @param settings object - additional formatting settings for the line (optional)
577
+ @return SVGGraphAxis - this axis object or
578
+ object - line formatting values (if no parameters) */
579
+ line: function(colour, width, settings) {
580
+ if (arguments.length == 0) {
581
+ return this._lineFormat;
582
+ }
583
+ if (typeof width == 'object') {
584
+ settings = width;
585
+ width = null;
586
+ }
587
+ $.extend(this._lineFormat, {stroke: colour, stroke_width: width || 1});
588
+ $.extend(this._lineFormat, settings || {});
589
+ return this;
590
+ }
591
+ });
592
+
593
+ var defaultSeriesFill = 'green';
594
+ var defaultSeriesStroke = 'black';
595
+
596
+ /* Details about each graph series.
597
+ @param name string - the name of this series
598
+ @param values number[] - the list of values to be plotted
599
+ @param fill string - how the series should be displayed
600
+ @param stroke string - the colour of the (out)line for the series
601
+ @param strokeWidth number - the width of the (out)line for the series
602
+ @param settings object - additional formatting settings
603
+ @return the new series object */
604
+ function SVGGraphSeries(name, values, fill, stroke, strokeWidth, settings) {
605
+ /* The name of this series. */
606
+ this._name = name || '';
607
+ /* The list of values for this series. */
608
+ this._values = values || [];
609
+ /* Which axis this series applies to: 1 = primary, 2 = secondary. */
610
+ this._axis = 1;
611
+ /* How the series is plotted. */
612
+ this._fill = fill || defaultSeriesFill;
613
+ /* The colour for the (out)line. */
614
+ this._stroke = stroke || defaultSeriesStroke;
615
+ /* The (out)line width. */
616
+ this._strokeWidth = strokeWidth || 1;
617
+ /* Additional formatting settings for the series. */
618
+ this._settings = settings || {};
619
+ }
620
+
621
+ $.extend(SVGGraphSeries.prototype, {
622
+
623
+ /* Set or retrieve the name for this series.
624
+ @param name string - the series' name
625
+ @return SVGGraphSeries - this series object or
626
+ string - the series name (if no parameters) */
627
+ name: function(name) {
628
+ if (arguments.length == 0) {
629
+ return this._name;
630
+ }
631
+ this._name = name;
632
+ return this;
633
+ },
634
+
635
+ /* Set or retrieve the values for this series.
636
+ @param name string - the series' name (optional)
637
+ @param values number[] - the values to be graphed
638
+ @return SVGGraphSeries - this series object or
639
+ number[] - the series values (if no parameters) */
640
+ values: function(name, values) {
641
+ if (arguments.length == 0) {
642
+ return this._values;
643
+ }
644
+ if (isArray(name)) {
645
+ valus = name;
646
+ name = null;
647
+ }
648
+ this._name = name || this._name;
649
+ this._values = values;
650
+ return this;
651
+ },
652
+
653
+ /* Set or retrieve the formatting for this series.
654
+ @param fill string - how the values are filled when plotted
655
+ @param stroke string - the (out)line colour
656
+ @param strokeWidth number - the line's width (optional)
657
+ @param settings object - additional formatting settings for the series (optional)
658
+ @return SVGGraphSeries - this series object or
659
+ object - formatting settings (if no parameters) */
660
+ format: function(fill, stroke, strokeWidth, settings) {
661
+ if (arguments.length == 0) {
662
+ return $.extend({fill: this._fill, stroke: this._stroke,
663
+ stroke_width: this._strokeWidth}, this._settings);
664
+ }
665
+ if (typeof strokeWidth == 'object') {
666
+ settings = strokeWidth;
667
+ strokeWidth = null;
668
+ }
669
+ this._fill = fill || defaultSeriesFill;
670
+ this._stroke = stroke || this._stroke;
671
+ this._strokeWidth = strokeWidth || this._strokeWidth;
672
+ $.extend(this._settings, settings || {});
673
+ return this;
674
+ }
675
+ });
676
+
677
+ /* Details about the graph legend.
678
+ @param bgSettings object - additional formatting settings for the legend background (optional)
679
+ @param textSettings object - additional formatting settings for the legend text (optional)
680
+ @return the new legend object */
681
+ function SVGGraphLegend(bgSettings, textSettings) {
682
+ this._show = true; // Show the legend?
683
+ this._area = [0.9, 0.1, 1.0, 0.9]; // The legend area: left, top, right, bottom,
684
+ // > 1 in pixels, <= 1 as proportion
685
+ this._sampleSize = 15; // Size of sample box
686
+ this._bgSettings = bgSettings || {stroke: 'gray'}; // Additional formatting settings for the legend background
687
+ this._textSettings = textSettings || {}; // Additional formatting settings for the text
688
+ }
689
+
690
+ $.extend(SVGGraphLegend.prototype, {
691
+
692
+ /* Set or retrieve whether the legend should be shown.
693
+ @param show boolean - true to display it, false to hide it
694
+ @return SVGGraphLegend - this legend object or
695
+ boolean - show the legend? (if no parameters) */
696
+ show: function(show) {
697
+ if (arguments.length == 0) {
698
+ return this._show;
699
+ }
700
+ this._show = show;
701
+ return this;
702
+ },
703
+
704
+ /* Set or retrieve the legend area.
705
+ @param left number - > 1 is pixels, <= 1 is proportion of width or
706
+ number[4] - for left, top, right, bottom
707
+ @param top number - > 1 is pixels, <= 1 is proportion of height
708
+ @param right number - > 1 is pixels, <= 1 is proportion of width
709
+ @param bottom number - > 1 is pixels, <= 1 is proportion of height
710
+ @return SVGGraphLegend - this legend object or
711
+ number[4] - the legend area: left, top, right, bottom (if no parameters) */
712
+ area: function(left, top, right, bottom) {
713
+ if (arguments.length == 0) {
714
+ return this._area;
715
+ }
716
+ this._area = (isArray(left) ? left : [left, top, right, bottom]);
717
+ return this;
718
+ },
719
+
720
+ /* Set or retrieve additional settings for the legend area.
721
+ @param sampleSize number - the size of the sample box to display (optional)
722
+ @param bgSettings object - additional formatting settings for the legend background
723
+ @param textSettings object - additional formatting settings for the legend text (optional)
724
+ @return SVGGraphLegend - this legend object or
725
+ object - bgSettings and textSettings for the legend (if no parameters) */
726
+ settings: function(sampleSize, bgSettings, textSettings) {
727
+ if (arguments.length == 0) {
728
+ return {sampleSize: this._sampleSize, bgSettings: this._bgSettings,
729
+ textSettings: this._textSettings};
730
+ }
731
+ if (typeof sampleSize == 'object') {
732
+ textSettings = bgSettings;
733
+ bgSettings = sampleSize;
734
+ sampleSize = null;
735
+ }
736
+ if (sampleSize) {
737
+ this._sampleSize = sampleSize;
738
+ }
739
+ this._bgSettings = bgSettings;
740
+ if (textSettings) {
741
+ this._textSettings = textSettings;
742
+ }
743
+ return this;
744
+ }
745
+ });
746
+
747
+ //==============================================================================
748
+
749
+ /* Round a number to a given number of decimal points. */
750
+ function roundNumber(num, dec) {
751
+ return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
752
+ }
753
+
754
+ var barOptions = ['barWidth (number) - the width of each bar',
755
+ 'barGap (number) - the gap between sets of bars'];
756
+
757
+ //------------------------------------------------------------------------------
758
+
759
+ /* Draw a standard grouped column bar chart. */
760
+ function SVGColumnChart() {
761
+ }
762
+
763
+ $.extend(SVGColumnChart.prototype, {
764
+
765
+ /* Retrieve the display title for this chart type.
766
+ @return the title */
767
+ title: function() {
768
+ return 'Basic column chart';
769
+ },
770
+
771
+ /* Retrieve a description of this chart type.
772
+ @return its description */
773
+ description: function() {
774
+ return 'Compare sets of values as vertical bars with grouped categories.';
775
+ },
776
+
777
+ /* Retrieve a list of the options that may be set for this chart type.
778
+ @return options list */
779
+ options: function() {
780
+ return barOptions;
781
+ },
782
+
783
+ /* Actually draw the graph in this type's style.
784
+ @param graph object - the SVGGraph object */
785
+ drawGraph: function(graph) {
786
+ graph._drawChartBackground(true);
787
+ var barWidth = graph._chartOptions.barWidth || 10;
788
+ var barGap = graph._chartOptions.barGap || 10;
789
+ var numSer = graph._series.length;
790
+ var numVal = (numSer ? (graph._series[0])._values.length : 0);
791
+ var dims = graph._getDims();
792
+ var xScale = dims[graph.W] / ((numSer * barWidth + barGap) * numVal + barGap);
793
+ var yScale = dims[graph.H] / (graph.yAxis._scale.max - graph.yAxis._scale.min);
794
+ this._chart = graph._root.group(graph._chartGroup, 'chart');
795
+ for (var i = 0; i < numSer; i++) {
796
+ this._drawSeries(graph, i, numSer, barWidth, barGap, dims, xScale, yScale);
797
+ }
798
+ graph._drawTitle();
799
+ graph._drawAxes(true);
800
+ this._drawXAxis(graph, numSer, numVal, barWidth, barGap, dims, xScale);
801
+ graph._drawLegend();
802
+ },
803
+
804
+ /* Plot an individual series. */
805
+ _drawSeries: function(graph, cur, numSer, barWidth, barGap, dims, xScale, yScale) {
806
+ var series = graph._series[cur];
807
+ var g = graph._root.group(this._chart, 'series' + cur,
808
+ $.extend({stroke: series._stroke,
809
+ stroke_width: series._strokeWidth}, series._settings || {}));
810
+ for (var i = 0; i < series._values.length; i++) {
811
+ graph._root.rect(g,
812
+ dims[graph.X] + xScale * (barGap + i * (numSer * barWidth + barGap) + (cur * barWidth)),
813
+ dims[graph.Y] + yScale * (graph.yAxis._scale.max - series._values[i]),
814
+ xScale * barWidth, yScale * series._values[i], $.extend({fill: series._fill},
815
+ graph._showStatus(series._name + ' ' + series._values[i])));
816
+ }
817
+ },
818
+
819
+ /* Draw the x-axis and its ticks. */
820
+ _drawXAxis: function(graph, numSer, numVal, barWidth, barGap, dims, xScale) {
821
+ var axis = graph.xAxis;
822
+ if (axis._title) {
823
+ graph._root.text(graph._chartGroup, dims[graph.X] + dims[graph.W] / 2,
824
+ dims[graph.Y] + dims[graph.H] + axis._titleOffset,
825
+ axis._title, {text_anchor: 'middle'});
826
+ }
827
+ var gl = graph._root.group(graph._chartGroup, 'xAxis', axis._lineFormat);
828
+ var gt = graph._root.group(graph._chartGroup, 'xAxisLabels',
829
+ $.extend({text_anchor: 'middle'}, axis._labelFormat));
830
+ graph._root.line(gl, dims[graph.X], dims[graph.Y] + dims[graph.H],
831
+ dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
832
+ if (axis._ticks.major) {
833
+ var offsets = graph._getTickOffsets(axis, true);
834
+ for (var i = 1; i < numVal; i++) {
835
+ var x = dims[graph.X] + xScale * (barGap / 2 + i * (numSer * barWidth + barGap));
836
+ graph._root.line(gl, x, dims[graph.Y] + dims[graph.H] + offsets[0] * axis._ticks.size,
837
+ x, dims[graph.Y] + dims[graph.H] + offsets[1] * axis._ticks.size);
838
+ }
839
+ for (var i = 0; i < numVal; i++) {
840
+ var x = dims[graph.X] + xScale * (barGap / 2 + (i + 0.5) * (numSer * barWidth + barGap));
841
+ graph._root.text(gt, x, dims[graph.Y] + dims[graph.H] + 2 * axis._ticks.size,
842
+ (axis._labels ? axis._labels[i] : '' + i));
843
+ }
844
+ }
845
+ }
846
+ });
847
+
848
+ //------------------------------------------------------------------------------
849
+
850
+ /* Draw a stacked column bar chart. */
851
+ function SVGStackedColumnChart() {
852
+ }
853
+
854
+ $.extend(SVGStackedColumnChart.prototype, {
855
+
856
+ /* Retrieve the display title for this chart type.
857
+ @return the title */
858
+ title: function() {
859
+ return 'Stacked column chart';
860
+ },
861
+
862
+ /* Retrieve a description of this chart type.
863
+ @return its description */
864
+ description: function() {
865
+ return 'Compare sets of values as vertical bars showing ' +
866
+ 'relative contributions to the whole for each category.';
867
+ },
868
+
869
+ /* Retrieve a list of the options that may be set for this chart type.
870
+ @return options list */
871
+ options: function() {
872
+ return barOptions;
873
+ },
874
+
875
+ /* Actually draw the graph in this type's style.
876
+ @param graph object - the SVGGraph object */
877
+ drawGraph: function(graph) {
878
+ var bg = graph._drawChartBackground(true, true);
879
+ var dims = graph._getDims();
880
+ if (graph._gridlines[0] && graph.xAxis._ticks.major) {
881
+ graph._drawGridlines(bg, graph._getPercentageAxis(), true, dims, graph._gridlines[0]);
882
+ }
883
+ var barWidth = graph._chartOptions.barWidth || 10;
884
+ var barGap = graph._chartOptions.barGap || 10;
885
+ var numSer = graph._series.length;
886
+ var numVal = (numSer ? (graph._series[0])._values.length : 0);
887
+ var xScale = dims[graph.W] / ((barWidth + barGap) * numVal + barGap);
888
+ var yScale = dims[graph.H];
889
+ this._chart = graph._root.group(graph._chartGroup, 'chart');
890
+ this._drawColumns(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale);
891
+ graph._drawTitle();
892
+ graph._root.text(graph._chartGroup, 0, 0, svgGraphing.region.percentageText,
893
+ {text_anchor: 'middle', transform: 'translate(' + (dims[graph.X] - graph.yAxis._titleOffset) +
894
+ ',' +(dims[graph.Y] + dims[graph.H] / 2) + ') rotate(-90)'});
895
+ //graph._drawAxis(graph._getPercentageAxis(), 'yAxis',
896
+ //dims[graph.X], dims[graph.Y], dims[graph.X], dims[graph.Y] + dims[graph.H]);
897
+ this._drawXAxis(graph, numVal, barWidth, barGap, dims, xScale);
898
+ graph._drawLegend();
899
+ },
900
+
901
+ /* Plot all of the columns. */
902
+ _drawColumns: function(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale) {
903
+ var totals = graph._getTotals();
904
+ var accum = [];
905
+ for (var i = 0; i < numVal; i++) {
906
+ accum[i] = 0;
907
+ }
908
+ for (var s = 0; s < numSer; s++) {
909
+ var series = graph._series[s];
910
+ var g = graph._root.group(this._chart, 'series' + s,
911
+ $.extend({stroke: series._stroke, stroke_width: series._strokeWidth},
912
+ series._settings || {}));
913
+ for (var i = 0; i < series._values.length; i++) {
914
+ accum[i] += series._values[i];
915
+ graph._root.rect(g,
916
+ dims[graph.X] + xScale * (barGap + i * (barWidth + barGap)),
917
+ dims[graph.Y] + yScale * (totals[i] - accum[i]) / totals[i],
918
+ xScale * barWidth, yScale * series._values[i] / totals[i],
919
+ $.extend({fill: series._fill}, graph._showStatus(series._name + ' ' +
920
+ roundNumber(series._values[i] / totals[i] * 100, 2) + '%')));
921
+ }
922
+ }
923
+ },
924
+
925
+ /* Draw the x-axis and its ticks. */
926
+ _drawXAxis: function(graph, numVal, barWidth, barGap, dims, xScale) {
927
+ var axis = graph.xAxis;
928
+ if (axis._title) {
929
+ graph._root.text(graph._chartGroup, dims[graph.X] + dims[graph.W] / 2,
930
+ dims[graph.Y] + dims[graph.H] + axis._titleOffset,
931
+ axis._title, {text_anchor: 'middle'});
932
+ }
933
+ var gl = graph._root.group(graph._chartGroup, 'xAxis', axis._lineFormat);
934
+ var gt = graph._root.group(graph._chartGroup, 'xAxisLabels',
935
+ $.extend({text_anchor: 'middle'}, axis._labelFormat));
936
+ graph._root.line(gl, dims[graph.X], dims[graph.Y] + dims[graph.H],
937
+ dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
938
+ if (axis._ticks.major) {
939
+ var offsets = graph._getTickOffsets(axis, true);
940
+ for (var i = 1; i < numVal; i++) {
941
+ var x = dims[graph.X] + xScale * (barGap / 2 + i * (barWidth + barGap));
942
+ graph._root.line(gl, x, dims[graph.Y] + dims[graph.H] + offsets[0] * axis._ticks.size,
943
+ x, dims[graph.Y] + dims[graph.H] + offsets[1] * axis._ticks.size);
944
+ }
945
+ for (var i = 0; i < numVal; i++) {
946
+ var x = dims[graph.X] + xScale * (barGap / 2 + (i + 0.5) * (barWidth + barGap));
947
+ graph._root.text(gt, x, dims[graph.Y] + dims[graph.H] + 2 * axis._ticks.size,
948
+ (axis._labels ? axis._labels[i] : '' + i));
949
+ }
950
+ }
951
+ }
952
+ });
953
+
954
+ //------------------------------------------------------------------------------
955
+
956
+ /* Draw a standard grouped row bar chart. */
957
+ function SVGRowChart() {
958
+ }
959
+
960
+ $.extend(SVGRowChart.prototype, {
961
+
962
+ /* Retrieve the display title for this chart type.
963
+ @return the title */
964
+ title: function() {
965
+ return 'Basic row chart';
966
+ },
967
+
968
+ /* Retrieve a description of this chart type.
969
+ @return its description */
970
+ description: function() {
971
+ return 'Compare sets of values as horizontal rows with grouped categories.';
972
+ },
973
+
974
+ /* Retrieve a list of the options that may be set for this chart type.
975
+ @return options list */
976
+ options: function() {
977
+ return barOptions;
978
+ },
979
+
980
+ /* Actually draw the graph in this type's style.
981
+ @param graph object - the SVGGraph object */
982
+ drawGraph: function(graph) {
983
+ var bg = graph._drawChartBackground(true, true);
984
+ var dims = graph._getDims();
985
+ graph._drawGridlines(bg, graph.yAxis, false, dims, graph._gridlines[0]);
986
+ var barWidth = graph._chartOptions.barWidth || 10;
987
+ var barGap = graph._chartOptions.barGap || 10;
988
+ var numSer = graph._series.length;
989
+ var numVal = (numSer ? (graph._series[0])._values.length : 0);
990
+ var xScale = dims[graph.W] / (graph.yAxis._scale.max - graph.yAxis._scale.min);
991
+ var yScale = dims[graph.H] / ((numSer * barWidth + barGap) * numVal + barGap);
992
+ this._chart = graph._root.group(graph._chartGroup, 'chart');
993
+ for (var i = 0; i < numSer; i++) {
994
+ this._drawSeries(graph, i, numSer, barWidth, barGap, dims, xScale, yScale);
995
+ }
996
+ graph._drawTitle();
997
+ this._drawAxes(graph, numSer, numVal, barWidth, barGap, dims, yScale);
998
+ graph._drawLegend();
999
+ },
1000
+
1001
+ /* Plot an individual series. */
1002
+ _drawSeries: function(graph, cur, numSer, barWidth, barGap, dims, xScale, yScale) {
1003
+ var series = graph._series[cur];
1004
+ var g = graph._root.group(this._chart, 'series' + cur,
1005
+ $.extend({stroke: series._stroke, stroke_width: series._strokeWidth},
1006
+ series._settings || {}));
1007
+ for (var i = 0; i < series._values.length; i++) {
1008
+ graph._root.rect(g,
1009
+ dims[graph.X] + xScale * (0 - graph.yAxis._scale.min),
1010
+ dims[graph.Y] + yScale * (barGap + i * (numSer * barWidth + barGap) + (cur * barWidth)),
1011
+ xScale * series._values[i], yScale * barWidth, $.extend({fill: series._fill},
1012
+ graph._showStatus(series._name + ' ' + series._values[i])));
1013
+ }
1014
+ },
1015
+
1016
+ /* Draw the axes for this graph. */
1017
+ _drawAxes: function(graph, numSer, numVal, barWidth, barGap, dims, yScale) {
1018
+ // X-axis
1019
+ var axis = graph.yAxis;
1020
+ if (axis) {
1021
+ if (axis._title) {
1022
+ graph._root.text(graph._chartGroup, dims[graph.X] + dims[graph.W] / 2,
1023
+ dims[graph.Y] + dims[graph.H] + axis._titleOffset, axis._title, axis._titleFormat);
1024
+ }
1025
+ graph._drawAxis(axis, 'xAxis', dims[graph.X], dims[graph.Y] + dims[graph.H],
1026
+ dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
1027
+ }
1028
+ // Y-axis
1029
+ var axis = graph.xAxis;
1030
+ if (axis._title) {
1031
+ graph._root.text(graph._chartGroup, 0, 0, axis._title, {text_anchor: 'middle',
1032
+ transform: 'translate(' + (dims[graph.X] - axis._titleOffset) + ',' +
1033
+ (dims[graph.Y] + dims[graph.H] / 2) + ') rotate(-90)'});
1034
+ }
1035
+ var gl = graph._root.group(graph._chartGroup, 'yAxis', axis._lineFormat);
1036
+ var gt = graph._root.group(graph._chartGroup, 'yAxisLabels',
1037
+ $.extend({text_anchor: 'end'}, axis._labelFormat));
1038
+ graph._root.line(gl, dims[graph.X], dims[graph.Y], dims[graph.X], dims[graph.Y] + dims[graph.H]);
1039
+ if (axis._ticks.major) {
1040
+ var offsets = graph._getTickOffsets(axis, false);
1041
+ for (var i = 1; i < numVal; i++) {
1042
+ var y = dims[graph.Y] + yScale * (barGap / 2 + i * (numSer * barWidth + barGap));
1043
+ graph._root.line(gl, dims[graph.X] + offsets[0] * axis._ticks.size, y,
1044
+ dims[graph.X] + offsets[1] * axis._ticks.size, y);
1045
+ }
1046
+ for (var i = 0; i < numVal; i++) {
1047
+ var y = dims[graph.Y] + yScale * (barGap / 2 + (i + 0.5) * (numSer * barWidth + barGap));
1048
+ graph._root.text(gt, dims[graph.X] - axis._ticks.size, y,
1049
+ (axis._labels ? axis._labels[i] : '' + i));
1050
+ }
1051
+ }
1052
+ }
1053
+ });
1054
+
1055
+ //------------------------------------------------------------------------------
1056
+
1057
+ /* Draw a stacked row bar chart. */
1058
+ function SVGStackedRowChart() {
1059
+ }
1060
+
1061
+ $.extend(SVGStackedRowChart.prototype, {
1062
+
1063
+ /* Retrieve the display title for this chart type.
1064
+ @return the title */
1065
+ title: function() {
1066
+ return 'Stacked row chart';
1067
+ },
1068
+
1069
+ /* Retrieve a description of this chart type.
1070
+ @return its description */
1071
+ description: function() {
1072
+ return 'Compare sets of values as horizontal bars showing ' +
1073
+ 'relative contributions to the whole for each category.';
1074
+ },
1075
+
1076
+ /* Retrieve a list of the options that may be set for this chart type.
1077
+ @return options list */
1078
+ options: function() {
1079
+ return barOptions;
1080
+ },
1081
+
1082
+ /* Actually draw the graph in this type's style.
1083
+ @param graph object - the SVGGraph object */
1084
+ drawGraph: function(graph) {
1085
+ var bg = graph._drawChartBackground(true, true);
1086
+ var dims = graph._getDims();
1087
+ if (graph._gridlines[0] && graph.xAxis._ticks.major) {
1088
+ graph._drawGridlines(bg, graph._getPercentageAxis(), false, dims, graph._gridlines[0]);
1089
+ }
1090
+ var barWidth = graph._chartOptions.barWidth || 10;
1091
+ var barGap = graph._chartOptions.barGap || 10;
1092
+ var numSer = graph._series.length;
1093
+ var numVal = (numSer ? (graph._series[0])._values.length : 0);
1094
+ var xScale = dims[graph.W];
1095
+ var yScale = dims[graph.H] / ((barWidth + barGap) * numVal + barGap);
1096
+ this._chart = graph._root.group(graph._chartGroup, 'chart');
1097
+ this._drawRows(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale);
1098
+ graph._drawTitle();
1099
+ graph._root.text(graph._chartGroup, dims[graph.X] + dims[graph.W] / 2,
1100
+ dims[graph.Y] + dims[graph.H] + graph.xAxis._titleOffset,
1101
+ svgGraphing.region.percentageText, {text_anchor: 'middle'});
1102
+ // graph._drawAxis(graph._getPercentageAxis(), 'xAxis',
1103
+ // dims[graph.X], dims[graph.Y] + dims[graph.H],
1104
+ // dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
1105
+ // this._drawYAxis(graph, numVal, barWidth, barGap, dims, yScale);
1106
+ graph._drawLegend();
1107
+ },
1108
+
1109
+ /* Plot all of the rows. */
1110
+ _drawRows: function(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale) {
1111
+ var totals = graph._getTotals();
1112
+ var accum = [];
1113
+ for (var i = 0; i < numVal; i++) {
1114
+ accum[i] = 0;
1115
+ }
1116
+ for (var s = 0; s < numSer; s++) {
1117
+ var series = graph._series[s];
1118
+ var g = graph._root.group(this._chart, 'series' + s,
1119
+ $.extend({stroke: series._stroke, stroke_width: series._strokeWidth},
1120
+ series._settings || {}));
1121
+ for (var i = 0; i < series._values.length; i++) {
1122
+ graph._root.rect(g,
1123
+ dims[graph.X] + xScale * accum[i] / totals[i],
1124
+ dims[graph.Y] + yScale * (barGap + i * (barWidth + barGap)),
1125
+ xScale * series._values[i] / totals[i], yScale * barWidth,
1126
+ $.extend({fill: series._fill}, graph._showStatus(series._name + ' ' +
1127
+ roundNumber(series._values[i] / totals[i] * 100, 2) + '%')));
1128
+ accum[i] += series._values[i];
1129
+ }
1130
+ }
1131
+ },
1132
+
1133
+ /* Draw the y-axis and its ticks. */
1134
+ _drawYAxis: function(graph, numVal, barWidth, barGap, dims, yScale) {
1135
+ var axis = graph.xAxis;
1136
+ if (axis._title) {
1137
+ graph._root.text(graph._chartGroup, 0, 0, axis._title, {text_anchor: 'middle',
1138
+ transform: 'translate(' + (dims[graph.X] - axis._titleOffset) + ',' +
1139
+ (dims[graph.Y] + dims[graph.H] / 2) + ') rotate(-90)'});
1140
+ }
1141
+ var gl = graph._root.group(graph._chartGroup, 'yAxis', axis._lineFormat);
1142
+ var gt = graph._root.group(graph._chartGroup, 'yAxisLabels',
1143
+ $.extend({text_anchor: 'end'}, axis._labelFormat));
1144
+ graph._root.line(gl, dims[graph.X], dims[graph.Y], dims[graph.X], dims[graph.Y] + dims[graph.H]);
1145
+ if (axis._ticks.major) {
1146
+ var offsets = graph._getTickOffsets(axis, false);
1147
+ for (var i = 1; i < numVal; i++) {
1148
+ var y = dims[graph.Y] + yScale * (barGap / 2 + i * (barWidth + barGap));
1149
+ graph._root.line(gl, dims[graph.X] + offsets[0] * axis._ticks.size, y,
1150
+ dims[graph.X] + offsets[1] * axis._ticks.size, y);
1151
+ }
1152
+ for (var i = 0; i < numVal; i++) {
1153
+ var y = dims[graph.Y] + yScale * (barGap / 2 + (i + 0.5) * (barWidth + barGap));
1154
+ graph._root.text(gt, dims[graph.X] - axis._ticks.size, y,
1155
+ (axis._labels ? axis._labels[i] : '' + i));
1156
+ }
1157
+ }
1158
+ }
1159
+ });
1160
+
1161
+ //------------------------------------------------------------------------------
1162
+
1163
+ /* Draw a standard line chart. */
1164
+ function SVGLineChart() {
1165
+ }
1166
+
1167
+ $.extend(SVGLineChart.prototype, {
1168
+
1169
+ /* Retrieve the display title for this chart type.
1170
+ @return the title */
1171
+ title: function() {
1172
+ return 'Basic line chart';
1173
+ },
1174
+
1175
+ /* Retrieve a description of this chart type.
1176
+ @return its description */
1177
+ description: function() {
1178
+ return 'Compare sets of values as continuous lines.';
1179
+ },
1180
+
1181
+ /* Retrieve a list of the options that may be set for this chart type.
1182
+ @return options list */
1183
+ options: function() {
1184
+ return [];
1185
+ },
1186
+
1187
+ /* Actually draw the graph in this type's style.
1188
+ @param graph object - the SVGGraph object */
1189
+ drawGraph: function(graph) {
1190
+ graph._drawChartBackground();
1191
+ var dims = graph._getDims();
1192
+ var xScale = dims[graph.W] / (graph.xAxis._scale.max - graph.xAxis._scale.min);
1193
+ var yScale = dims[graph.H] / (graph.yAxis._scale.max - graph.yAxis._scale.min);
1194
+ this._chart = graph._root.group(graph._chartGroup, 'chart');
1195
+ for (var i = 0; i < graph._series.length; i++) {
1196
+ this._drawSeries(graph, i, dims, xScale, yScale);
1197
+ }
1198
+ graph._drawTitle();
1199
+ graph._drawAxes();
1200
+ graph._drawLegend();
1201
+ },
1202
+
1203
+ /* Plot an individual series. */
1204
+ _drawSeries: function(graph, cur, dims, xScale, yScale) {
1205
+ var series = graph._series[cur];
1206
+ var path = graph._root.createPath();
1207
+ for (var i = 0; i < series._values.length; i++) {
1208
+ var x = dims[graph.X] + i * xScale;
1209
+ var y = dims[graph.Y] + (graph.yAxis._scale.max - series._values[i]) * yScale;
1210
+ if (i == 0) {
1211
+ path.moveTo(x, y);
1212
+ }
1213
+ else {
1214
+ path.lineTo(x, y);
1215
+ }
1216
+ }
1217
+ graph._root.path(this._chart, path,
1218
+ $.extend($.extend({id: 'series' + cur, fill: 'none', stroke: series._stroke,
1219
+ stroke_width: series._strokeWidth}, graph._showStatus(series._name),
1220
+ series._settings || {})));
1221
+ }
1222
+ });
1223
+
1224
+ //------------------------------------------------------------------------------
1225
+
1226
+ /* Draw a standard pie chart. */
1227
+ function SVGPieChart() {
1228
+ }
1229
+
1230
+ $.extend(SVGPieChart.prototype, {
1231
+
1232
+ _options: ['explode (number[]) - indexes of sections to explode out of the pie',
1233
+ 'explodeDist (number) - the distance to move an exploded section',
1234
+ 'pieGap (number) - the distance between pies for multiple values'],
1235
+
1236
+ /* Retrieve the display title for this chart type.
1237
+ @return the title */
1238
+ title: function() {
1239
+ return 'Pie chart';
1240
+ },
1241
+
1242
+ /* Retrieve a description of this chart type.
1243
+ @return its description */
1244
+ description: function() {
1245
+ return 'Compare relative sizes of values as contributions to the whole.';
1246
+ },
1247
+
1248
+ /* Retrieve a list of the options that may be set for this chart type.
1249
+ @return options list */
1250
+ options: function() {
1251
+ return this._options;
1252
+ },
1253
+
1254
+ /* Actually draw the graph in this type's style.
1255
+ @param graph object - the SVGGraph object */
1256
+ drawGraph: function(graph) {
1257
+ graph._drawChartBackground(true, true);
1258
+ this._chart = graph._root.group(graph._chartGroup, 'chart');
1259
+ var dims = graph._getDims();
1260
+ this._drawSeries(graph, dims);
1261
+ graph._drawTitle();
1262
+ graph._drawLegend();
1263
+ },
1264
+
1265
+ /* Plot all the series. */
1266
+ _drawSeries: function(graph, dims) {
1267
+ var totals = graph._getTotals();
1268
+ var numSer = graph._series.length;
1269
+ var numVal = (numSer ? (graph._series[0])._values.length : 0);
1270
+ var path = graph._root.createPath();
1271
+ var explode = graph._chartOptions.explode || [];
1272
+ var explodeDist = graph._chartOptions.explodeDist || 10;
1273
+ var pieGap = (numVal <= 1 ? 0 : graph._chartOptions.pieGap || 10);
1274
+ var xBase = (dims[graph.W] - (numVal * pieGap) - pieGap) / numVal / 2;
1275
+ var yBase = dims[graph.H] / 2;
1276
+ var radius = Math.min(xBase, yBase) - (explode.length > 0 ? explodeDist : 0);
1277
+ var gt = graph._root.group(graph._chartGroup, 'xAxisLabels',
1278
+ $.extend({text_anchor: 'middle'}, graph.xAxis._labelFormat));
1279
+ var gl = [];
1280
+ for (var i = 0; i < numVal; i++) {
1281
+ var cx = dims[graph.X] + xBase + (i * (2 * Math.min(xBase, yBase) + pieGap)) + pieGap;
1282
+ var cy = dims[graph.Y] + yBase;
1283
+ var curTotal = 0;
1284
+ for (var j = 0; j < numSer; j++) {
1285
+ var series = graph._series[j];
1286
+ if (i == 0) {
1287
+ gl[j] = graph._root.group(this._chart, 'series' + j,
1288
+ $.extend({stroke: series._stroke, stroke_width: series._strokeWidth},
1289
+ series._settings || {}));
1290
+ }
1291
+ if (series._values[i] == 0) {
1292
+ continue;
1293
+ }
1294
+ var start = (curTotal / totals[i]) * 2 * Math.PI;
1295
+ curTotal += series._values[i];
1296
+ var end = (curTotal / totals[i]) * 2 * Math.PI;
1297
+ var exploding = false;
1298
+ for (var k = 0; k < explode.length; k++) {
1299
+ if (explode[k] == j) {
1300
+ exploding = true;
1301
+ break;
1302
+ }
1303
+ }
1304
+ var x = cx + (exploding ? explodeDist * Math.cos((start + end) / 2) : 0);
1305
+ var y = cy + (exploding ? explodeDist * Math.sin((start + end) / 2) : 0);
1306
+ var status = series._name + ' ' +
1307
+ roundNumber((end - start) / 2 / Math.PI * 100, 2) + '%';
1308
+ graph._root.path(gl[j], path.reset().moveTo(x, y).
1309
+ lineTo(x + radius * Math.cos(start), y + radius * Math.sin(start)).
1310
+ arcTo(radius, radius, 0, (end - start < Math.PI ? 0 : 1), 1,
1311
+ x + radius * Math.cos(end), y + radius * Math.sin(end)).close(),
1312
+ $.extend({fill: series._fill}, graph._showStatus(status)));
1313
+ }
1314
+ if (graph.xAxis) {
1315
+ graph._root.text(gt, cx, dims[graph.Y] + dims[graph.H] + graph.xAxis._titleOffset,
1316
+ graph.xAxis._labels[i])
1317
+ }
1318
+ }
1319
+ }
1320
+ });
1321
+
1322
+ //------------------------------------------------------------------------------
1323
+
1324
+ /* Determine whether an object is an array. */
1325
+ function isArray(a) {
1326
+ return (a.constructor && a.constructor.toString().match(/\Array\(\)/));
1327
+ }
1328
+
1329
+ // Basic chart types
1330
+ svgGraphing.addChartType('column', new SVGColumnChart());
1331
+ svgGraphing.addChartType('stackedColumn', new SVGStackedColumnChart());
1332
+ svgGraphing.addChartType('row', new SVGRowChart());
1333
+ svgGraphing.addChartType('stackedRow', new SVGStackedRowChart());
1334
+ svgGraphing.addChartType('line', new SVGLineChart());
1335
+ svgGraphing.addChartType('pie', new SVGPieChart());
1336
+
1337
+ })(jQuery)