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.
- data/LICENSE +20 -0
- data/README.md +6 -0
- data/Rakefile +21 -0
- data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.eot +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.svg +154 -0
- data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.ttf +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Bold-webfont.woff +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.eot +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.svg +154 -0
- data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.ttf +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-BoldItalic-webfont.woff +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.eot +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.svg +154 -0
- data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.ttf +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Italic-webfont.woff +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.eot +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.svg +154 -0
- data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.ttf +0 -0
- data/app/assets/fonts/alchemy/LiberationSans-Regular-webfont.woff +0 -0
- data/app/assets/fonts/alchemy/Red Hat Liberation License.txt +78 -0
- data/app/assets/fonts/alchemy/overpass_bold-web.eot +0 -0
- data/app/assets/fonts/alchemy/overpass_bold-web.svg +470 -0
- data/app/assets/fonts/alchemy/overpass_bold-web.ttf +0 -0
- data/app/assets/fonts/alchemy/overpass_bold-web.woff +0 -0
- data/app/assets/fonts/alchemy/overpass_regular-web.eot +0 -0
- data/app/assets/fonts/alchemy/overpass_regular-web.svg +470 -0
- data/app/assets/fonts/alchemy/overpass_regular-web.ttf +0 -0
- data/app/assets/fonts/alchemy/overpass_regular-web.woff +0 -0
- data/app/assets/images/alchemy/icons/action-icons.png +0 -0
- data/app/assets/images/alchemy/icons/arrow_icon.png +0 -0
- data/app/assets/images/alchemy/icons/chosen-sprite.png +0 -0
- data/app/assets/images/alchemy/icons/error_icon.png +0 -0
- data/app/assets/images/alchemy/icons/objects.png +0 -0
- data/app/assets/images/alchemy/icons/spinner.gif +0 -0
- data/app/assets/images/alchemy/icons/spinner_head.gif +0 -0
- data/app/assets/images/alchemy/icons/success_icon.png +0 -0
- data/app/assets/images/alchemy/icons/warning_icon.png +0 -0
- data/app/assets/javascripts/alchemy/flash_messages.js +12 -0
- data/app/assets/javascripts/alchemy/forms.js +25 -0
- data/app/assets/javascripts/alchemy/i18n.js +36 -0
- data/app/assets/javascripts/alchemy/login.js +130 -0
- data/app/assets/javascripts/alchemy/password.js +99 -0
- data/app/assets/stylesheets/alchemy/components/_chosen.scss +423 -0
- data/app/assets/stylesheets/alchemy/components/_content.scss +58 -0
- data/app/assets/stylesheets/alchemy/components/_helpers.scss +38 -0
- data/app/assets/stylesheets/alchemy/components/_media.scss +49 -0
- data/app/assets/stylesheets/alchemy/components/_normalize.scss +448 -0
- data/app/assets/stylesheets/alchemy/components/_shared.scss +18 -0
- data/app/assets/stylesheets/alchemy/components/buttons/_buttons.scss +241 -0
- data/app/assets/stylesheets/alchemy/components/buttons/_buttons_vars.scss +10 -0
- data/app/assets/stylesheets/alchemy/components/flash_messages/_flash_messages.scss +93 -0
- data/app/assets/stylesheets/alchemy/components/flash_messages/_flash_messages_vars.scss +3 -0
- data/app/assets/stylesheets/alchemy/components/fonts/_liberation.scss +44 -0
- data/app/assets/stylesheets/alchemy/components/fonts/_overpass.scss +24 -0
- data/app/assets/stylesheets/alchemy/components/footer/_footer.scss +53 -0
- data/app/assets/stylesheets/alchemy/components/footer/_footer_vars.scss +4 -0
- data/app/assets/stylesheets/alchemy/components/forms/_forms.scss +536 -0
- data/app/assets/stylesheets/alchemy/components/forms/_forms_ie.scss +45 -0
- data/app/assets/stylesheets/alchemy/components/forms/_forms_mixins.scss +18 -0
- data/app/assets/stylesheets/alchemy/components/forms/_forms_responsive.scss +161 -0
- data/app/assets/stylesheets/alchemy/components/forms/_forms_vars.scss +25 -0
- data/app/assets/stylesheets/alchemy/components/header/_header.scss +214 -0
- data/app/assets/stylesheets/alchemy/components/header/_header_vars.scss +11 -0
- data/app/assets/stylesheets/alchemy/components/login/_login.scss +169 -0
- data/app/assets/stylesheets/alchemy/components/login/_login_mixins.scss +7 -0
- data/app/assets/stylesheets/alchemy/components/login/_login_vars.scss +19 -0
- data/app/assets/stylesheets/alchemy/components/sprites/_sprites.scss +110 -0
- data/app/assets/stylesheets/alchemy/components/sprites/_sprites_mixins.scss +9 -0
- data/app/assets/stylesheets/alchemy/components/text/_text.scss +30 -0
- data/app/assets/stylesheets/alchemy/components/text/_text_vars.scss +1 -0
- data/app/assets/stylesheets/alchemy/composites/content_elements.scss +6 -0
- data/app/assets/stylesheets/alchemy/composites/login.scss +9 -0
- data/app/assets/stylesheets/alchemy/composites/shell.scss +4 -0
- data/app/assets/stylesheets/alchemy/partials/_base.scss +8 -0
- data/app/assets/stylesheets/alchemy/partials/_colors.scss +99 -0
- data/app/assets/stylesheets/alchemy/partials/_mixins.scss +24 -0
- data/app/assets/stylesheets/alchemy/partials/_vars.scss +31 -0
- data/app/helpers/alchemy/gettext_translations.rb +27 -0
- data/app/helpers/alchemy/layout_helper.rb +19 -0
- data/app/helpers/alchemy/rails_translations.rb +21 -0
- data/app/helpers/alchemy/translation_helper.rb +19 -0
- data/app/views/alchemy/layouts/_base.haml +20 -0
- data/app/views/alchemy/layouts/_change_password_layout.html.haml +20 -0
- data/app/views/alchemy/layouts/_common_i18n.haml +4 -0
- data/app/views/alchemy/layouts/_header_layout.haml +13 -0
- data/app/views/alchemy/layouts/_login_layout.html.haml +58 -0
- data/app/views/alchemy/layouts/_user_session_layout.haml +17 -0
- data/app/views/alchemy/layouts/shell_layout.haml +10 -0
- data/lib/alchemy.rb +6 -0
- data/lib/alchemy/version.rb +3 -0
- data/test/alchemy_test.rb +7 -0
- data/test/test_helper.rb +9 -0
- data/vendor/assets/javascripts/alchemy/html5shiv.js +298 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-icons_8f8f8f_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-icons_97baed_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/css/custom-theme/jquery-ui-1.8.11.custom.css +573 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/AUTHORS.txt +30 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/GPL-LICENSE.txt +278 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/MIT-LICENSE.txt +25 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/collapsible.html +57 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/custom-icons.html +69 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/default.html +85 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/fillspace.html +76 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/hoverintent.html +134 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/index.html +25 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/mouseover.html +57 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/no-auto-height.html +60 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/accordion/sortable.html +83 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/addClass/default.html +52 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/addClass/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/animate/default.html +61 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/animate/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/categories.html +71 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/combobox.html +171 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/custom-data.html +95 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/default.html +64 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/folding.html +62 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/jquery_32x32.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/jqueryui_32x32.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/sizzlejs_32x32.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/transparent_1x1.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/images/ui-anim_basic_16x16.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/index.html +27 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/london.xml +114 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/maxheight.html +79 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/multiple-remote.html +84 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/multiple.html +99 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/remote-jsonp.html +86 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/remote-with-cache.html +59 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/remote.html +59 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/search.php +640 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/autocomplete/xml.html +72 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/checkbox.html +44 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/default.html +38 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/icons.html +56 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/index.html +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/radio.html +39 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/splitbutton.html +55 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/button/toolbar.html +120 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/alt-field.html +36 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/animation.html +58 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/buttonbar.html +35 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/date-formats.html +47 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/date-range.html +49 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/default.html +33 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/dropdown-month-year.html +36 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/icon-trigger.html +37 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/images/calendar.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/index.html +31 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/inline.html +33 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/localization.html +162 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/min-max.html +33 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/multiple-calendars.html +36 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/other-months.html +37 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/datepicker/show-week.html +39 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/demos.css +334 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/animated.html +56 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/default.html +54 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/index.html +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal-confirmation.html +69 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal-form.html +167 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal-message.html +71 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/dialog/modal.html +60 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/constrain-movement.html +69 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/cursor-style.html +49 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/default.html +39 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/delay-start.html +45 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/events.html +77 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/handle.html +50 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/index.html +28 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/revert.html +44 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/scroll.html +51 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/snap-to.html +68 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/sortable.html +57 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/draggable/visual-feedback.html +77 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/accepted-elements.html +60 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/default.html +53 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras2.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras2_min.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras3.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras3_min.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras4.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras4_min.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/images/high_tatras_min.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/index.html +24 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/photo-manager.html +184 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/propagation.html +80 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/revert.html +61 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/shopping-cart.html +101 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/droppable/visual-feedback.html +78 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/effect/default.html +109 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/effect/easing.html +108 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/effect/index.html +19 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/hide/default.html +102 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/hide/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/calendar.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-config-on-tile.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-config-on.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-spindown-closed.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/demo-spindown-open.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/icon-docs-info.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/images/pbar-ani.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/index.html +321 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/cycler.html +122 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/default.html +153 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/images/earth.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/images/flight.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/images/rocket.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/position/index.html +19 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/animated.html +44 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/default.html +35 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/images/pbar-ani.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/index.html +20 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/progressbar/resize.html +40 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/removeClass/default.html +52 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/removeClass/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/animate.html +43 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/aspect-ratio.html +42 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/constrain-area.html +47 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/default.html +40 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/delay-start.html +52 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/helper.html +43 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/index.html +28 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/max-min.html +45 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/snap-to-grid.html +42 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/synchronous-resize.html +49 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/textarea.html +41 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/resizable/visual-feedback.html +43 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/default.html +50 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/display-grid.html +55 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/index.html +20 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/selectable/serialize.html +61 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/show/default.html +104 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/show/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/colorpicker.html +95 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/default.html +37 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/hotelrooms.html +59 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/index.html +29 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/multiple-vertical.html +77 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/range-vertical.html +51 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/range.html +52 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/rangemax.html +50 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/rangemin.html +51 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/side-scroll.html +140 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/slider-vertical.html +52 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/steps.html +51 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/slider/tabs.html +67 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/connect-lists-through-tabs.html +78 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/connect-lists.html +58 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/default.html +51 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/delay-start.html +67 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/display-grid.html +54 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/empty-lists.html +69 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/index.html +26 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/items.html +70 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/placeholder.html +56 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/sortable/portlets.html +96 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/switchClass/default.html +47 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/switchClass/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax.html +53 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content1.html +4 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content2.html +4 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content3-slow.php +7 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/ajax/content4-broken.php +3 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/bottom.html +60 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/collapsible.html +55 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/cookie.html +56 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/default.html +49 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/index.html +25 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/manipulation.html +124 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/mouseover.html +53 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/sortable.html +58 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/tabs/vertical.html +61 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggle/default.html +94 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggle/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggleClass/default.html +46 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/demos/toggleClass/index.html +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/accordion.html +1017 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/addClass.html +109 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/animate.html +78 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/autocomplete.html +833 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/button.html +500 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/datepicker.html +2570 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/dialog.html +1698 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/draggable.html +1577 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/droppable.html +829 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/effect.html +143 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/hide.html +144 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/position.html +227 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/progressbar.html +460 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/removeClass.html +113 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/resizable.html +1201 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/selectable.html +848 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/show.html +144 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/slider.html +860 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/sortable.html +1952 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/switchClass.html +129 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/tabs.html +1549 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/toggle.html +144 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/docs/toggleClass.html +111 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/jquery.bgiframe-2.1.2.js +39 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/jquery.cookie.js +89 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/jquery.metadata.js +122 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/qunit.css +153 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/external/qunit.js +1261 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/jquery-1.5.1.js +8316 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_222222_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_454545_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_888888_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.accordion.css +19 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.all.css +11 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.autocomplete.css +53 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.base.css +11 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.button.css +38 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.core.css +41 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.datepicker.css +68 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.dialog.css +21 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.progressbar.css +11 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.resizable.css +20 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.selectable.css +10 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.slider.css +24 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.tabs.css +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/base/jquery.ui.theme.css +252 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-icons_8f8f8f_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-icons_97baed_256x240.png +0 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png +0 -0
- 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
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.accordion.css +19 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.all.css +11 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.autocomplete.css +53 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.base.css +11 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.button.css +38 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.core.css +41 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.datepicker.css +68 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.dialog.css +21 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.progressbar.css +11 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.resizable.css +20 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.selectable.css +10 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.slider.css +24 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.tabs.css +18 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/themes/custom-theme/jquery.ui.theme.css +254 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery-ui-i18n.js +1379 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-af.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ar-DZ.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ar.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-az.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-bg.js +24 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-bs.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ca.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-cs.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-da.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-de.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-el.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-en-AU.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-en-GB.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-en-NZ.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-eo.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-es.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-et.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-eu.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fa.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fi.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fo.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fr-CH.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-fr.js +25 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-gl.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-he.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-hr.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-hu.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-hy.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-id.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-is.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-it.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ja.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ko.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-kz.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-lt.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-lv.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ml.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ms.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-nl.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-no.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-pl.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-pt-BR.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-pt.js +22 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-rm.js +21 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ro.js +26 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ru.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sk.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sl.js +24 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sq.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sr-SR.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sr.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-sv.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-ta.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-th.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-tj.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-tr.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-uk.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-vi.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-zh-CN.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-zh-HK.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/i18n/jquery.ui.datepicker-zh-TW.js +23 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery-ui-1.8.11.custom.js +11577 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.blind.js +49 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.bounce.js +78 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.clip.js +54 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.core.js +747 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.drop.js +50 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.explode.js +79 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.fade.js +32 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.fold.js +56 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.highlight.js +50 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.pulsate.js +51 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.scale.js +178 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.shake.js +57 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.slide.js +50 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.effects.transfer.js +45 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.accordion.js +611 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.autocomplete.js +612 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.button.js +387 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.core.js +308 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.datepicker.js +1773 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.dialog.js +857 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.draggable.js +799 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.droppable.js +285 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.mouse.js +156 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.position.js +252 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.progressbar.js +108 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.resizable.js +812 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.selectable.js +266 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.slider.js +682 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.sortable.js +1073 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.tabs.js +758 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/jquery.ui.widget.js +262 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.blind.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.bounce.min.js +15 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.clip.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.core.min.js +30 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.drop.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.explode.min.js +15 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.fade.min.js +13 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.fold.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.highlight.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.pulsate.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.scale.min.js +20 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.shake.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.slide.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.effects.transfer.min.js +14 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.accordion.min.js +30 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.autocomplete.min.js +32 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.button.min.js +25 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.core.min.js +17 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.datepicker.min.js +82 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.dialog.min.js +40 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.draggable.min.js +50 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.droppable.min.js +26 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.mouse.min.js +17 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.position.min.js +16 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.progressbar.min.js +16 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.resizable.min.js +47 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.selectable.min.js +22 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.slider.min.js +33 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.sortable.min.js +60 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.tabs.min.js +35 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/ui/minified/jquery.ui.widget.min.js +15 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/development-bundle/version.txt +1 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/js/jquery-1.5.1.min.js +16 -0
- data/vendor/assets/javascripts/alchemy/jquery-ui-1.8.11.custom/js/jquery-ui-1.8.11.custom.min.js +783 -0
- data/vendor/assets/javascripts/alchemy/jquery/jquery-1.6.2.js +8981 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/chosen.jquery.js +1003 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/API.txt +1201 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/FAQ.txt +76 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/LICENSE.txt +22 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/Makefile +9 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/NEWS.txt +508 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/PLUGINS.txt +137 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/README.txt +90 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/ajax.html +143 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/annotating.html +75 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-down.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-left.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-right.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/arrow-up.gif +0 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/basic.html +38 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-1.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-2.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-3.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-4.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth-5.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-eu-gdp-growth.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-japan-gdp-growth.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/data-usa-gdp-growth.json +4 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/graph-types.html +75 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/hs-2004-27-a-large_web.jpg +0 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/image.html +45 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/index.html +44 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/interacting-axes.html +97 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/interacting.html +93 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/layout.css +6 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/multiple-axes.html +60 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/navigate.html +118 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/percentiles.html +57 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/pie.html +756 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/realtime.html +83 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/resize.html +61 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/selection.html +114 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/setting-options.html +61 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/stacking.html +77 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/symbols.html +49 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/thresholding.html +54 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/time.html +71 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/tracking.html +95 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/turning-series.html +98 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/visitors.html +90 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/examples/zooming.html +98 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/excanvas.js +1427 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/excanvas.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.colorhelpers.js +179 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.colorhelpers.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.crosshair.js +167 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.crosshair.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.fillbetween.js +183 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.fillbetween.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.image.js +238 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.image.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.js +2599 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.min.js +6 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.navigate.js +336 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.navigate.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.pie.js +750 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.pie.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.resize.js +60 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.resize.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.selection.js +344 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.selection.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.stack.js +184 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.stack.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.symbol.js +70 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.symbol.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.threshold.js +103 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/flot-0.7/jquery.flot.threshold.min.js +1 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/blank.svg +3 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/custom_test.js +67 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.css +9 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.js +1101 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.min.js +7 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svg.pack.js +7 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svgfilter.js +396 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svgfilter.min.js +7 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svgfilter.pack.js +7 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svggraph.js +1337 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svggraph.min.js +7 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/jquery.svggraph.pack.js +7 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/lion.svg +161 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery-svg/test.js +714 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ajaxfileupload.js +205 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ba-bbq.js +1137 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ba-resize.js +246 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.cookie.js +92 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.easing.1.3.js +205 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.fancyqueries.js +106 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.flash.js +288 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.form.js +964 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.hoverIntent.js +106 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jeditable.ajaxupload.js +62 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jeditable.js +556 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jnotify.js +210 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jscrollpane.js +1390 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.jscrollpane.min.js +11 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.linkHover.js +89 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.loadmask.min.js +10 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.mousewheel.js +78 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.multiselect.filter.js +176 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.multiselect.js +668 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.pack.js +11 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.periodicalupdater.js +175 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.sortElements.js +75 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.sparkline.min.js +94 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.text-overflow.js +60 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.timepickr.js +214 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.timers.js +142 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.tipsy.js +358 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.treeTable.js +226 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.trunk8.js +203 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ui.multiselect.js +338 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.ui.totop.js +58 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/jquery.uitablefilter.js +95 -0
- data/vendor/assets/javascripts/alchemy/jquery/plugins/ui.spinner.js +683 -0
- data/vendor/assets/javascripts/alchemy/rails.js +331 -0
- data/vendor/assets/javascripts/alchemy/underscore-1.3.1.js +999 -0
- 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,'&');a=a.replace(/</g,'<');a=a.replace(/>/g,'>');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)
|