aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Miller <christopher@ctmiller.net>2010-02-19 22:34:36 -0500
committerChris Miller <christopher@ctmiller.net>2010-02-19 22:34:36 -0500
commit48ec7d720e9b81e7aa849587bef3a263bac2e8ca (patch)
treeed44303a9fcfd8fa15a20bcab14deed1e7b1cd41
downloadsnakeplan-48ec7d720e9b81e7aa849587bef3a263bac2e8ca.tar.bz2
snakeplan-48ec7d720e9b81e7aa849587bef3a263bac2e8ca.tar.xz
snakeplan-48ec7d720e9b81e7aa849587bef3a263bac2e8ca.zip
Initial check for iterations. YMMV.
-rw-r--r--.hgignore2
-rwxr-xr-xsnakeplan/__init__.py0
-rwxr-xr-xsnakeplan/manage.py11
-rwxr-xr-xsnakeplan/projects/__init__.py0
-rw-r--r--snakeplan/projects/admin.py8
-rwxr-xr-xsnakeplan/projects/models.py95
-rw-r--r--snakeplan/projects/templates/footer.html2
-rw-r--r--snakeplan/projects/templates/header.html4
-rwxr-xr-xsnakeplan/projects/tests.py23
-rw-r--r--snakeplan/projects/urls.py6
-rw-r--r--snakeplan/projects/views/__init__.py0
-rw-r--r--snakeplan/projects/views/iterations.py4
-rwxr-xr-xsnakeplan/settings.py55
-rw-r--r--snakeplan/snakeplan.dbbin0 -> 86016 bytes
-rwxr-xr-xsnakeplan/urls.py10
-rw-r--r--static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.pngbin0 -> 260 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.pngbin0 -> 251 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.pngbin0 -> 178 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.pngbin0 -> 104 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.pngbin0 -> 125 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 105 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.pngbin0 -> 4427 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngbin0 -> 90 bytes
-rw-r--r--static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngbin0 -> 129 bytes
-rw-r--r--static/css/ui-lightness/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/css/ui-lightness/images/ui-icons_228ef1_256x240.pngbin0 -> 5355 bytes
-rw-r--r--static/css/ui-lightness/images/ui-icons_ef8c08_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/css/ui-lightness/images/ui-icons_ffd27a_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/css/ui-lightness/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/css/ui-lightness/jquery-ui-1.7.2.custom.css406
-rw-r--r--static/development-bundle/AUTHORS.txt30
-rw-r--r--static/development-bundle/GPL-LICENSE.txt278
-rw-r--r--static/development-bundle/MIT-LICENSE.txt25
-rw-r--r--static/development-bundle/demos/accordion/collapsible.html58
-rw-r--r--static/development-bundle/demos/accordion/custom-icons.html60
-rw-r--r--static/development-bundle/demos/accordion/default.html83
-rw-r--r--static/development-bundle/demos/accordion/fillspace.html76
-rw-r--r--static/development-bundle/demos/accordion/index.html20
-rw-r--r--static/development-bundle/demos/accordion/mouseover.html57
-rw-r--r--static/development-bundle/demos/accordion/no-auto-height.html57
-rw-r--r--static/development-bundle/demos/addClass/default.html51
-rw-r--r--static/development-bundle/demos/addClass/index.html17
-rw-r--r--static/development-bundle/demos/animate/default.html52
-rw-r--r--static/development-bundle/demos/animate/index.html17
-rw-r--r--static/development-bundle/demos/datepicker/alt-field.html31
-rw-r--r--static/development-bundle/demos/datepicker/buttonbar.html33
-rw-r--r--static/development-bundle/demos/datepicker/date-formats.html43
-rw-r--r--static/development-bundle/demos/datepicker/default.html31
-rw-r--r--static/development-bundle/demos/datepicker/dropdown-month-year.html34
-rw-r--r--static/development-bundle/demos/datepicker/icon-trigger.html31
-rw-r--r--static/development-bundle/demos/datepicker/images/calendar.gifbin0 -> 269 bytes
-rw-r--r--static/development-bundle/demos/datepicker/index.html26
-rw-r--r--static/development-bundle/demos/datepicker/inline.html31
-rw-r--r--static/development-bundle/demos/datepicker/localization.html120
-rw-r--r--static/development-bundle/demos/datepicker/min-max.html31
-rw-r--r--static/development-bundle/demos/datepicker/multiple-calendars.html34
-rw-r--r--static/development-bundle/demos/demos.css334
-rw-r--r--static/development-bundle/demos/dialog/default.html51
-rw-r--r--static/development-bundle/demos/dialog/index.html21
-rw-r--r--static/development-bundle/demos/dialog/modal-confirmation.html67
-rw-r--r--static/development-bundle/demos/dialog/modal-form.html178
-rw-r--r--static/development-bundle/demos/dialog/modal-message.html64
-rw-r--r--static/development-bundle/demos/dialog/modal.html55
-rw-r--r--static/development-bundle/demos/draggable/constrain-movement.html67
-rw-r--r--static/development-bundle/demos/draggable/cursor-style.html46
-rw-r--r--static/development-bundle/demos/draggable/default.html38
-rw-r--r--static/development-bundle/demos/draggable/delay-start.html42
-rw-r--r--static/development-bundle/demos/draggable/events.html74
-rw-r--r--static/development-bundle/demos/draggable/handle.html45
-rw-r--r--static/development-bundle/demos/draggable/index.html27
-rw-r--r--static/development-bundle/demos/draggable/revert.html41
-rw-r--r--static/development-bundle/demos/draggable/scroll.html48
-rw-r--r--static/development-bundle/demos/draggable/snap-to.html67
-rw-r--r--static/development-bundle/demos/draggable/sortable.html54
-rw-r--r--static/development-bundle/demos/draggable/visual-feedback.html73
-rw-r--r--static/development-bundle/demos/droppable/accepted-elements.html55
-rw-r--r--static/development-bundle/demos/droppable/default.html46
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras.jpgbin0 -> 23627 bytes
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras2.jpgbin0 -> 26332 bytes
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras2_min.jpgbin0 -> 2164 bytes
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras3.jpgbin0 -> 25219 bytes
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras3_min.jpgbin0 -> 1901 bytes
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras4.jpgbin0 -> 25656 bytes
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras4_min.jpgbin0 -> 2541 bytes
-rw-r--r--static/development-bundle/demos/droppable/images/high_tatras_min.jpgbin0 -> 2147 bytes
-rw-r--r--static/development-bundle/demos/droppable/index.html22
-rw-r--r--static/development-bundle/demos/droppable/photo-manager.html164
-rw-r--r--static/development-bundle/demos/droppable/propagation.html71
-rw-r--r--static/development-bundle/demos/droppable/revert.html55
-rw-r--r--static/development-bundle/demos/droppable/visual-feedback.html70
-rw-r--r--static/development-bundle/demos/effect/default.html104
-rw-r--r--static/development-bundle/demos/effect/index.html17
-rw-r--r--static/development-bundle/demos/hide/default.html105
-rw-r--r--static/development-bundle/demos/hide/index.html17
-rw-r--r--static/development-bundle/demos/images/calendar.gifbin0 -> 269 bytes
-rw-r--r--static/development-bundle/demos/images/demo-config-on-tile.gifbin0 -> 180 bytes
-rw-r--r--static/development-bundle/demos/images/demo-config-on.gifbin0 -> 343 bytes
-rw-r--r--static/development-bundle/demos/images/demo-spindown-closed.gifbin0 -> 104 bytes
-rw-r--r--static/development-bundle/demos/images/demo-spindown-open.gifbin0 -> 105 bytes
-rw-r--r--static/development-bundle/demos/images/icon-docs-info.gifbin0 -> 214 bytes
-rw-r--r--static/development-bundle/demos/images/pbar-ani.gifbin0 -> 304064 bytes
-rw-r--r--static/development-bundle/demos/index.html292
-rw-r--r--static/development-bundle/demos/progressbar/animated.html42
-rw-r--r--static/development-bundle/demos/progressbar/default.html37
-rw-r--r--static/development-bundle/demos/progressbar/images/pbar-ani.gifbin0 -> 304064 bytes
-rw-r--r--static/development-bundle/demos/progressbar/index.html19
-rw-r--r--static/development-bundle/demos/progressbar/resize.html37
-rw-r--r--static/development-bundle/demos/removeClass/default.html51
-rw-r--r--static/development-bundle/demos/removeClass/index.html17
-rw-r--r--static/development-bundle/demos/resizable/animate.html38
-rw-r--r--static/development-bundle/demos/resizable/aspect-ratio.html37
-rw-r--r--static/development-bundle/demos/resizable/constrain-area.html42
-rw-r--r--static/development-bundle/demos/resizable/default.html35
-rw-r--r--static/development-bundle/demos/resizable/delay-start.html49
-rw-r--r--static/development-bundle/demos/resizable/index.html25
-rw-r--r--static/development-bundle/demos/resizable/max-min.html40
-rw-r--r--static/development-bundle/demos/resizable/snap-to-grid.html37
-rw-r--r--static/development-bundle/demos/resizable/synchronous-resize.html44
-rw-r--r--static/development-bundle/demos/resizable/visual-feedback.html38
-rw-r--r--static/development-bundle/demos/selectable/default.html45
-rw-r--r--static/development-bundle/demos/selectable/display-grid.html50
-rw-r--r--static/development-bundle/demos/selectable/index.html19
-rw-r--r--static/development-bundle/demos/selectable/serialize.html56
-rw-r--r--static/development-bundle/demos/show/default.html106
-rw-r--r--static/development-bundle/demos/show/index.html17
-rw-r--r--static/development-bundle/demos/slider/colorpicker.html92
-rw-r--r--static/development-bundle/demos/slider/default.html34
-rw-r--r--static/development-bundle/demos/slider/index.html25
-rw-r--r--static/development-bundle/demos/slider/multiple-vertical.html76
-rw-r--r--static/development-bundle/demos/slider/range-vertical.html47
-rw-r--r--static/development-bundle/demos/slider/range.html48
-rw-r--r--static/development-bundle/demos/slider/rangemax.html47
-rw-r--r--static/development-bundle/demos/slider/rangemin.html48
-rw-r--r--static/development-bundle/demos/slider/slider-vertical.html49
-rw-r--r--static/development-bundle/demos/slider/steps.html48
-rw-r--r--static/development-bundle/demos/sortable/connect-lists-through-tabs.html76
-rw-r--r--static/development-bundle/demos/sortable/connect-lists.html55
-rw-r--r--static/development-bundle/demos/sortable/default.html48
-rw-r--r--static/development-bundle/demos/sortable/delay-start.html64
-rw-r--r--static/development-bundle/demos/sortable/display-grid.html51
-rw-r--r--static/development-bundle/demos/sortable/empty-lists.html66
-rw-r--r--static/development-bundle/demos/sortable/index.html25
-rw-r--r--static/development-bundle/demos/sortable/items.html68
-rw-r--r--static/development-bundle/demos/sortable/placeholder.html53
-rw-r--r--static/development-bundle/demos/sortable/portlets.html93
-rw-r--r--static/development-bundle/demos/switchClass/default.html47
-rw-r--r--static/development-bundle/demos/switchClass/index.html17
-rw-r--r--static/development-bundle/demos/tabs/ajax.html40
-rw-r--r--static/development-bundle/demos/tabs/ajax/content1.html4
-rw-r--r--static/development-bundle/demos/tabs/ajax/content2.html4
-rw-r--r--static/development-bundle/demos/tabs/collapsible.html54
-rw-r--r--static/development-bundle/demos/tabs/default.html47
-rw-r--r--static/development-bundle/demos/tabs/index.html21
-rw-r--r--static/development-bundle/demos/tabs/mouseover.html52
-rw-r--r--static/development-bundle/demos/tabs/sortable.html62
-rw-r--r--static/development-bundle/demos/tabs/vertical.html62
-rw-r--r--static/development-bundle/demos/toggle/default.html94
-rw-r--r--static/development-bundle/demos/toggle/index.html17
-rw-r--r--static/development-bundle/demos/toggleClass/default.html45
-rw-r--r--static/development-bundle/demos/toggleClass/index.html17
-rw-r--r--static/development-bundle/docs/accordion.html869
-rw-r--r--static/development-bundle/docs/addClass.html108
-rw-r--r--static/development-bundle/docs/animate.html78
-rw-r--r--static/development-bundle/docs/datepicker.html2150
-rw-r--r--static/development-bundle/docs/dialog.html1520
-rw-r--r--static/development-bundle/docs/draggable.html1448
-rw-r--r--static/development-bundle/docs/droppable.html704
-rw-r--r--static/development-bundle/docs/effect.html142
-rw-r--r--static/development-bundle/docs/hide.html143
-rw-r--r--static/development-bundle/docs/progressbar.html295
-rw-r--r--static/development-bundle/docs/removeClass.html112
-rw-r--r--static/development-bundle/docs/resizable.html1075
-rw-r--r--static/development-bundle/docs/selectable.html707
-rw-r--r--static/development-bundle/docs/show.html143
-rw-r--r--static/development-bundle/docs/slider.html733
-rw-r--r--static/development-bundle/docs/sortable.html1818
-rw-r--r--static/development-bundle/docs/switchClass.html128
-rw-r--r--static/development-bundle/docs/tabs.html1426
-rw-r--r--static/development-bundle/docs/toggle.html143
-rw-r--r--static/development-bundle/docs/toggleClass.html110
-rw-r--r--static/development-bundle/external/bgiframe/ChangeLog.txt20
-rw-r--r--static/development-bundle/external/bgiframe/META.json32
-rw-r--r--static/development-bundle/external/bgiframe/docs/index.html113
-rw-r--r--static/development-bundle/external/bgiframe/jquery.bgiframe.js100
-rw-r--r--static/development-bundle/external/bgiframe/jquery.bgiframe.min.js10
-rw-r--r--static/development-bundle/external/bgiframe/jquery.bgiframe.pack.js10
-rw-r--r--static/development-bundle/external/bgiframe/test/index.html197
-rw-r--r--static/development-bundle/external/cookie/jquery.cookie.js97
-rw-r--r--static/development-bundle/external/cookie/jquery.cookie.min.js10
-rw-r--r--static/development-bundle/external/cookie/jquery.cookie.pack.js10
-rw-r--r--static/development-bundle/external/cookie/jquery.cookie.zipbin0 -> 3471 bytes
-rw-r--r--static/development-bundle/external/jsdiff/jsdiff.js159
-rw-r--r--static/development-bundle/external/qunit/testrunner.js780
-rw-r--r--static/development-bundle/external/qunit/testsuite.css120
-rw-r--r--static/development-bundle/external/simulate/jquery.simulate.js152
-rw-r--r--static/development-bundle/jquery-1.3.2.js4376
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.pngbin0 -> 180 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.pngbin0 -> 178 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.pngbin0 -> 120 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 105 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.pngbin0 -> 111 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.pngbin0 -> 110 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.pngbin0 -> 119 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin0 -> 101 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-icons_454545_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-icons_888888_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/base/ui.accordion.css9
-rw-r--r--static/development-bundle/themes/base/ui.all.css2
-rw-r--r--static/development-bundle/themes/base/ui.base.css8
-rw-r--r--static/development-bundle/themes/base/ui.core.css37
-rw-r--r--static/development-bundle/themes/base/ui.datepicker.css62
-rw-r--r--static/development-bundle/themes/base/ui.dialog.css13
-rw-r--r--static/development-bundle/themes/base/ui.progressbar.css4
-rw-r--r--static/development-bundle/themes/base/ui.resizable.css13
-rw-r--r--static/development-bundle/themes/base/ui.slider.css17
-rw-r--r--static/development-bundle/themes/base/ui.tabs.css11
-rw-r--r--static/development-bundle/themes/base/ui.theme.css245
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.pngbin0 -> 260 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.pngbin0 -> 251 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.pngbin0 -> 178 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.pngbin0 -> 104 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.pngbin0 -> 125 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 105 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.pngbin0 -> 4427 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngbin0 -> 90 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngbin0 -> 129 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-icons_228ef1_256x240.pngbin0 -> 5355 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-icons_ef8c08_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-icons_ffd27a_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--static/development-bundle/themes/ui-lightness/jquery-ui-1.7.2.custom.css406
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.accordion.css9
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.all.css2
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.base.css8
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.core.css37
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.datepicker.css62
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.dialog.css13
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.progressbar.css4
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.resizable.css13
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.slider.css17
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.tabs.css11
-rw-r--r--static/development-bundle/themes/ui-lightness/ui.theme.css247
-rw-r--r--static/development-bundle/ui/effects.blind.js49
-rw-r--r--static/development-bundle/ui/effects.bounce.js78
-rw-r--r--static/development-bundle/ui/effects.clip.js54
-rw-r--r--static/development-bundle/ui/effects.core.js545
-rw-r--r--static/development-bundle/ui/effects.drop.js50
-rw-r--r--static/development-bundle/ui/effects.explode.js79
-rw-r--r--static/development-bundle/ui/effects.fold.js56
-rw-r--r--static/development-bundle/ui/effects.highlight.js48
-rw-r--r--static/development-bundle/ui/effects.pulsate.js56
-rw-r--r--static/development-bundle/ui/effects.scale.js180
-rw-r--r--static/development-bundle/ui/effects.shake.js57
-rw-r--r--static/development-bundle/ui/effects.slide.js50
-rw-r--r--static/development-bundle/ui/effects.transfer.js45
-rw-r--r--static/development-bundle/ui/i18n/jquery-ui-i18n.js771
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-ar.js20
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-bg.js20
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-ca.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-cs.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-da.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-de.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-el.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-eo.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-es.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-fa.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-fi.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-fr.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-he.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-hr.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-hu.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-hy.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-id.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-is.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-it.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-ja.js20
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-ko.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-lt.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-lv.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-ms.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-nl.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-no.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-pl.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-pt-BR.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-ro.js22
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-ru.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-sk.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-sl.js20
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-sq.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-sr-SR.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-sr.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-sv.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-th.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-tr.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-uk.js25
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-zh-CN.js19
-rw-r--r--static/development-bundle/ui/i18n/ui.datepicker-zh-TW.js19
-rw-r--r--static/development-bundle/ui/jquery-ui-1.7.2.custom.js9133
-rw-r--r--static/development-bundle/ui/ui.accordion.js477
-rw-r--r--static/development-bundle/ui/ui.core.js519
-rw-r--r--static/development-bundle/ui/ui.datepicker.js1636
-rw-r--r--static/development-bundle/ui/ui.dialog.js671
-rw-r--r--static/development-bundle/ui/ui.draggable.js766
-rw-r--r--static/development-bundle/ui/ui.droppable.js282
-rw-r--r--static/development-bundle/ui/ui.progressbar.js116
-rw-r--r--static/development-bundle/ui/ui.resizable.js800
-rw-r--r--static/development-bundle/ui/ui.selectable.js257
-rw-r--r--static/development-bundle/ui/ui.slider.js558
-rw-r--r--static/development-bundle/ui/ui.sortable.js1019
-rw-r--r--static/development-bundle/ui/ui.tabs.js685
-rw-r--r--static/development-bundle/version.txt1
-rw-r--r--static/index.html367
-rw-r--r--static/js/jquery-1.3.2.min.js19
-rw-r--r--static/js/jquery-1.4.2.min.js154
-rw-r--r--static/js/jquery-ui-1.7.2.custom.min.js298
319 files changed, 48895 insertions, 0 deletions
diff --git a/.hgignore b/.hgignore
new file mode 100644
index 0000000..2c9154d
--- /dev/null
+++ b/.hgignore
@@ -0,0 +1,2 @@
1syntax: glob
2*.pyc
diff --git a/snakeplan/__init__.py b/snakeplan/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/snakeplan/__init__.py
diff --git a/snakeplan/manage.py b/snakeplan/manage.py
new file mode 100755
index 0000000..5e78ea9
--- /dev/null
+++ b/snakeplan/manage.py
@@ -0,0 +1,11 @@
1#!/usr/bin/env python
2from django.core.management import execute_manager
3try:
4 import settings # Assumed to be in the same directory.
5except ImportError:
6 import sys
7 sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
8 sys.exit(1)
9
10if __name__ == "__main__":
11 execute_manager(settings)
diff --git a/snakeplan/projects/__init__.py b/snakeplan/projects/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/snakeplan/projects/__init__.py
diff --git a/snakeplan/projects/admin.py b/snakeplan/projects/admin.py
new file mode 100644
index 0000000..7471356
--- /dev/null
+++ b/snakeplan/projects/admin.py
@@ -0,0 +1,8 @@
1from snakeplan.projects import models
2from django.contrib import admin
3
4admin.site.register(models.Task)
5admin.site.register(models.Story)
6admin.site.register(models.Project)
7admin.site.register(models.Iteration)
8admin.site.register(models.LoggedTime)
diff --git a/snakeplan/projects/models.py b/snakeplan/projects/models.py
new file mode 100755
index 0000000..b91ec7c
--- /dev/null
+++ b/snakeplan/projects/models.py
@@ -0,0 +1,95 @@
1from django.db import models as m
2from django.db.models import Model
3from django.contrib.auth.models import User
4
5
6STATUSES = (
7 (0, 'Active'),
8 (1, 'Inactive'),
9 )
10
11DISPOSITIONS = (
12 (0, 'Planned'),
13 (1, 'Carried Over'),
14 (2, 'Added'),
15 (3, 'Discovered'),
16 )
17
18TASK_TYPES = (
19 (0, 'Feature'),
20 (1, 'Debt'),
21 (2, 'Functional Test'),
22 (3, 'Acceptance Test'),
23 (4, 'Overhead'),
24 )
25
26
27class Project(Model):
28
29 name = m.CharField(max_length=200)
30 description = m.TextField(blank=True)
31 active = m.BooleanField(default=True)
32 hidden = m.BooleanField(default=False)
33 wiki_link = m.URLField(blank=True)
34
35 def __unicode__(self):
36 return self.name
37
38
39class Iteration(Model):
40
41 name = m.CharField(max_length=200)
42 project = m.ForeignKey(Project)
43 status = m.IntegerField(choices=STATUSES, default=0)
44 start_date = m.DateField()
45 end_date = m.DateField()
46 days_worked = m.DecimalField(default=0, decimal_places=2, max_digits=5)
47 description = m.TextField(blank=True)
48
49 def __unicode__(self):
50 return self.name
51
52
53class Story(Model):
54
55 name = m.CharField(max_length=200)
56 project = m.ForeignKey(Project)
57 iteration = m.ForeignKey(Iteration, blank=True)
58 disposition = m.IntegerField(choices=DISPOSITIONS)
59 customer = m.ForeignKey(User, blank=True, related_name='story_customer')
60 tracker = m.ForeignKey(User, blank=True)
61 status = m.IntegerField(choices=STATUSES, default=0)
62 priority = m.IntegerField()
63 order = m.IntegerField()
64 description = m.TextField(blank=True)
65
66 def __unicode__(self):
67 return self.name
68
69
70class Task(Model):
71
72 name = m.CharField(max_length=200)
73 story = m.ForeignKey(Story)
74 task_type = m.IntegerField(choices=TASK_TYPES)
75 disposition = m.IntegerField(choices=DISPOSITIONS)
76 acceptor = m.ForeignKey(User, blank=True)
77 estimated_hours = m.DecimalField(decimal_places=2, max_digits=5)
78 description = m.TextField(blank=True)
79
80 def __unicode__(self):
81 return self.name
82
83
84class LoggedTime(Model):
85
86 start_time = m.DateTimeField(blank=True)
87 end_time = m.DateTimeField(blank=True)
88 logged_date = m.DateField()
89 duration = m.DecimalField(decimal_places=2, max_digits=5)
90 person1 = m.ForeignKey(User, blank=True, related_name="person1")
91 person2 = m.ForeignKey(User, blank=True, related_name="person2")
92 description = m.TextField(blank=True)
93
94 def __unicode__(self):
95 return self.description
diff --git a/snakeplan/projects/templates/footer.html b/snakeplan/projects/templates/footer.html
new file mode 100644
index 0000000..308b1d0
--- /dev/null
+++ b/snakeplan/projects/templates/footer.html
@@ -0,0 +1,2 @@
1</body>
2</html>
diff --git a/snakeplan/projects/templates/header.html b/snakeplan/projects/templates/header.html
new file mode 100644
index 0000000..75ba4bf
--- /dev/null
+++ b/snakeplan/projects/templates/header.html
@@ -0,0 +1,4 @@
1<html>
2 <head><title>{{page_title]]</title></head>
3
4 <body>
diff --git a/snakeplan/projects/tests.py b/snakeplan/projects/tests.py
new file mode 100755
index 0000000..2247054
--- /dev/null
+++ b/snakeplan/projects/tests.py
@@ -0,0 +1,23 @@
1"""
2This file demonstrates two different styles of tests (one doctest and one
3unittest). These will both pass when you run "manage.py test".
4
5Replace these with more appropriate tests for your application.
6"""
7
8from django.test import TestCase
9
10class SimpleTest(TestCase):
11 def test_basic_addition(self):
12 """
13 Tests that 1 + 1 always equals 2.
14 """
15 self.failUnlessEqual(1 + 1, 2)
16
17__test__ = {"doctest": """
18Another way to test that 1 + 1 is equal to 2.
19
20>>> 1 + 1 == 2
21True
22"""}
23
diff --git a/snakeplan/projects/urls.py b/snakeplan/projects/urls.py
new file mode 100644
index 0000000..2386d33
--- /dev/null
+++ b/snakeplan/projects/urls.py
@@ -0,0 +1,6 @@
1from django.conf.urls.defaults import *
2from projects.views.iterations import *
3
4urlpatterns = patterns('',
5 ('^$', iteration_list),
6)
diff --git a/snakeplan/projects/views/__init__.py b/snakeplan/projects/views/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/snakeplan/projects/views/__init__.py
diff --git a/snakeplan/projects/views/iterations.py b/snakeplan/projects/views/iterations.py
new file mode 100644
index 0000000..189362a
--- /dev/null
+++ b/snakeplan/projects/views/iterations.py
@@ -0,0 +1,4 @@
1from django.http import HttpResponse
2
3def iteration_list(request):
4 return HttpResponse("Hello world")
diff --git a/snakeplan/settings.py b/snakeplan/settings.py
new file mode 100755
index 0000000..6da9ec1
--- /dev/null
+++ b/snakeplan/settings.py
@@ -0,0 +1,55 @@
1DEBUG = True
2TEMPLATE_DEBUG = DEBUG
3
4ADMINS = (
5 ('Mike Crute', 'mcrute@gmail.com'),
6)
7
8MANAGERS = ADMINS
9
10DATABASE_ENGINE = 'sqlite3'
11DATABASE_NAME = 'snakeplan.db'
12
13TIME_ZONE = 'America/New_York'
14LANGUAGE_CODE = 'en-us'
15
16SITE_ID = 1
17
18USE_I18N = False
19
20# Absolute path to the directory that holds media.
21# Example: "/home/media/media.lawrence.com/"
22MEDIA_ROOT = ''
23
24# URL that handles the media served from MEDIA_ROOT. Make sure to use a
25# trailing slash if there is a path component (optional in other cases).
26# Examples: "http://media.lawrence.com", "http://example.com/media/"
27MEDIA_URL = ''
28ADMIN_MEDIA_PREFIX = '/media/'
29
30SECRET_KEY = 'ow28jyl#0h8+^3$-!*%o-qfj5#zyr@xz+%vn_a3iizhn%l-3_='
31
32TEMPLATE_LOADERS = (
33 'django.template.loaders.filesystem.load_template_source',
34 'django.template.loaders.app_directories.load_template_source',
35)
36
37MIDDLEWARE_CLASSES = (
38 'django.middleware.common.CommonMiddleware',
39 'django.contrib.sessions.middleware.SessionMiddleware',
40 'django.contrib.auth.middleware.AuthenticationMiddleware',
41)
42
43ROOT_URLCONF = 'snakeplan.urls'
44
45TEMPLATE_DIRS = (
46)
47
48INSTALLED_APPS = (
49 'django.contrib.auth',
50 'django.contrib.contenttypes',
51 'django.contrib.sessions',
52 'django.contrib.sites',
53 'django.contrib.admin',
54 'snakeplan.projects',
55)
diff --git a/snakeplan/snakeplan.db b/snakeplan/snakeplan.db
new file mode 100644
index 0000000..a572f4b
--- /dev/null
+++ b/snakeplan/snakeplan.db
Binary files differ
diff --git a/snakeplan/urls.py b/snakeplan/urls.py
new file mode 100755
index 0000000..aa18c45
--- /dev/null
+++ b/snakeplan/urls.py
@@ -0,0 +1,10 @@
1from django.conf.urls.defaults import *
2from django.contrib import admin
3from snakeplan.projects import admin as snakeplan_admin
4
5admin.autodiscover()
6
7urlpatterns = patterns('',
8 (r'^snakeplan/iterations/', include('snakeplan.projects.urls')),
9 (r'^admin/', include(admin.site.urls)),
10)
diff --git a/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 0000000..954e22d
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 0000000..64ece57
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 0000000..abdc010
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 0000000..9b383f4
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 0000000..a23baad
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000..42ccba2
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 0000000..1b1972b
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 0000000..f127367
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 0000000..359397a
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-icons_222222_256x240.png b/static/css/ui-lightness/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000..ee039dc
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 0000000..6a05ba5
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 0000000..35bb8ef
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 0000000..baebb63
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
Binary files differ
diff --git a/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..bef5178
--- /dev/null
+++ b/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/static/css/ui-lightness/jquery-ui-1.7.2.custom.css b/static/css/ui-lightness/jquery-ui-1.7.2.custom.css
new file mode 100644
index 0000000..9d7aa08
--- /dev/null
+++ b/static/css/ui-lightness/jquery-ui-1.7.2.custom.css
@@ -0,0 +1,406 @@
1/*
2* jQuery UI CSS Framework
3* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
5*/
6
7/* Layout helpers
8----------------------------------*/
9.ui-helper-hidden { display: none; }
10.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
11.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
12.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
13.ui-helper-clearfix { display: inline-block; }
14/* required comment for clearfix to work in Opera \*/
15* html .ui-helper-clearfix { height:1%; }
16.ui-helper-clearfix { display:block; }
17/* end clearfix */
18.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
20
21/* Interaction Cues
22----------------------------------*/
23.ui-state-disabled { cursor: default !important; }
24
25
26/* Icons
27----------------------------------*/
28
29/* states and images */
30.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
31
32
33/* Misc visuals
34----------------------------------*/
35
36/* Overlays */
37.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
38
39
40
41/*
42* jQuery UI CSS Framework
43* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
44* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
45* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
46*/
47
48
49/* Component containers
50----------------------------------*/
51.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
52.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
53.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
54.ui-widget-content a { color: #333333; }
55.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
56.ui-widget-header a { color: #ffffff; }
57
58/* Interaction states
59----------------------------------*/
60.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
61.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
62.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
63.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
64.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
65.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
66
67/* Interaction Cues
68----------------------------------*/
69.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
70.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
71.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
72.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
73.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
74.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
75.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
76.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
77
78/* Icons
79----------------------------------*/
80
81/* states and images */
82.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
83.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
84.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
85.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
86.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
87.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
88.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
89.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
90
91/* positioning */
92.ui-icon-carat-1-n { background-position: 0 0; }
93.ui-icon-carat-1-ne { background-position: -16px 0; }
94.ui-icon-carat-1-e { background-position: -32px 0; }
95.ui-icon-carat-1-se { background-position: -48px 0; }
96.ui-icon-carat-1-s { background-position: -64px 0; }
97.ui-icon-carat-1-sw { background-position: -80px 0; }
98.ui-icon-carat-1-w { background-position: -96px 0; }
99.ui-icon-carat-1-nw { background-position: -112px 0; }
100.ui-icon-carat-2-n-s { background-position: -128px 0; }
101.ui-icon-carat-2-e-w { background-position: -144px 0; }
102.ui-icon-triangle-1-n { background-position: 0 -16px; }
103.ui-icon-triangle-1-ne { background-position: -16px -16px; }
104.ui-icon-triangle-1-e { background-position: -32px -16px; }
105.ui-icon-triangle-1-se { background-position: -48px -16px; }
106.ui-icon-triangle-1-s { background-position: -64px -16px; }
107.ui-icon-triangle-1-sw { background-position: -80px -16px; }
108.ui-icon-triangle-1-w { background-position: -96px -16px; }
109.ui-icon-triangle-1-nw { background-position: -112px -16px; }
110.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
111.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
112.ui-icon-arrow-1-n { background-position: 0 -32px; }
113.ui-icon-arrow-1-ne { background-position: -16px -32px; }
114.ui-icon-arrow-1-e { background-position: -32px -32px; }
115.ui-icon-arrow-1-se { background-position: -48px -32px; }
116.ui-icon-arrow-1-s { background-position: -64px -32px; }
117.ui-icon-arrow-1-sw { background-position: -80px -32px; }
118.ui-icon-arrow-1-w { background-position: -96px -32px; }
119.ui-icon-arrow-1-nw { background-position: -112px -32px; }
120.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
121.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
122.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
123.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
124.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
125.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
126.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
127.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
128.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
129.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
130.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
131.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
132.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
133.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
134.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
135.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
136.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
137.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
138.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
139.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
140.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
141.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
142.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
143.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
144.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
145.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
146.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
147.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
148.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
149.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
150.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
151.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
152.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
153.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
154.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
155.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
156.ui-icon-arrow-4 { background-position: 0 -80px; }
157.ui-icon-arrow-4-diag { background-position: -16px -80px; }
158.ui-icon-extlink { background-position: -32px -80px; }
159.ui-icon-newwin { background-position: -48px -80px; }
160.ui-icon-refresh { background-position: -64px -80px; }
161.ui-icon-shuffle { background-position: -80px -80px; }
162.ui-icon-transfer-e-w { background-position: -96px -80px; }
163.ui-icon-transferthick-e-w { background-position: -112px -80px; }
164.ui-icon-folder-collapsed { background-position: 0 -96px; }
165.ui-icon-folder-open { background-position: -16px -96px; }
166.ui-icon-document { background-position: -32px -96px; }
167.ui-icon-document-b { background-position: -48px -96px; }
168.ui-icon-note { background-position: -64px -96px; }
169.ui-icon-mail-closed { background-position: -80px -96px; }
170.ui-icon-mail-open { background-position: -96px -96px; }
171.ui-icon-suitcase { background-position: -112px -96px; }
172.ui-icon-comment { background-position: -128px -96px; }
173.ui-icon-person { background-position: -144px -96px; }
174.ui-icon-print { background-position: -160px -96px; }
175.ui-icon-trash { background-position: -176px -96px; }
176.ui-icon-locked { background-position: -192px -96px; }
177.ui-icon-unlocked { background-position: -208px -96px; }
178.ui-icon-bookmark { background-position: -224px -96px; }
179.ui-icon-tag { background-position: -240px -96px; }
180.ui-icon-home { background-position: 0 -112px; }
181.ui-icon-flag { background-position: -16px -112px; }
182.ui-icon-calendar { background-position: -32px -112px; }
183.ui-icon-cart { background-position: -48px -112px; }
184.ui-icon-pencil { background-position: -64px -112px; }
185.ui-icon-clock { background-position: -80px -112px; }
186.ui-icon-disk { background-position: -96px -112px; }
187.ui-icon-calculator { background-position: -112px -112px; }
188.ui-icon-zoomin { background-position: -128px -112px; }
189.ui-icon-zoomout { background-position: -144px -112px; }
190.ui-icon-search { background-position: -160px -112px; }
191.ui-icon-wrench { background-position: -176px -112px; }
192.ui-icon-gear { background-position: -192px -112px; }
193.ui-icon-heart { background-position: -208px -112px; }
194.ui-icon-star { background-position: -224px -112px; }
195.ui-icon-link { background-position: -240px -112px; }
196.ui-icon-cancel { background-position: 0 -128px; }
197.ui-icon-plus { background-position: -16px -128px; }
198.ui-icon-plusthick { background-position: -32px -128px; }
199.ui-icon-minus { background-position: -48px -128px; }
200.ui-icon-minusthick { background-position: -64px -128px; }
201.ui-icon-close { background-position: -80px -128px; }
202.ui-icon-closethick { background-position: -96px -128px; }
203.ui-icon-key { background-position: -112px -128px; }
204.ui-icon-lightbulb { background-position: -128px -128px; }
205.ui-icon-scissors { background-position: -144px -128px; }
206.ui-icon-clipboard { background-position: -160px -128px; }
207.ui-icon-copy { background-position: -176px -128px; }
208.ui-icon-contact { background-position: -192px -128px; }
209.ui-icon-image { background-position: -208px -128px; }
210.ui-icon-video { background-position: -224px -128px; }
211.ui-icon-script { background-position: -240px -128px; }
212.ui-icon-alert { background-position: 0 -144px; }
213.ui-icon-info { background-position: -16px -144px; }
214.ui-icon-notice { background-position: -32px -144px; }
215.ui-icon-help { background-position: -48px -144px; }
216.ui-icon-check { background-position: -64px -144px; }
217.ui-icon-bullet { background-position: -80px -144px; }
218.ui-icon-radio-off { background-position: -96px -144px; }
219.ui-icon-radio-on { background-position: -112px -144px; }
220.ui-icon-pin-w { background-position: -128px -144px; }
221.ui-icon-pin-s { background-position: -144px -144px; }
222.ui-icon-play { background-position: 0 -160px; }
223.ui-icon-pause { background-position: -16px -160px; }
224.ui-icon-seek-next { background-position: -32px -160px; }
225.ui-icon-seek-prev { background-position: -48px -160px; }
226.ui-icon-seek-end { background-position: -64px -160px; }
227.ui-icon-seek-first { background-position: -80px -160px; }
228.ui-icon-stop { background-position: -96px -160px; }
229.ui-icon-eject { background-position: -112px -160px; }
230.ui-icon-volume-off { background-position: -128px -160px; }
231.ui-icon-volume-on { background-position: -144px -160px; }
232.ui-icon-power { background-position: 0 -176px; }
233.ui-icon-signal-diag { background-position: -16px -176px; }
234.ui-icon-signal { background-position: -32px -176px; }
235.ui-icon-battery-0 { background-position: -48px -176px; }
236.ui-icon-battery-1 { background-position: -64px -176px; }
237.ui-icon-battery-2 { background-position: -80px -176px; }
238.ui-icon-battery-3 { background-position: -96px -176px; }
239.ui-icon-circle-plus { background-position: 0 -192px; }
240.ui-icon-circle-minus { background-position: -16px -192px; }
241.ui-icon-circle-close { background-position: -32px -192px; }
242.ui-icon-circle-triangle-e { background-position: -48px -192px; }
243.ui-icon-circle-triangle-s { background-position: -64px -192px; }
244.ui-icon-circle-triangle-w { background-position: -80px -192px; }
245.ui-icon-circle-triangle-n { background-position: -96px -192px; }
246.ui-icon-circle-arrow-e { background-position: -112px -192px; }
247.ui-icon-circle-arrow-s { background-position: -128px -192px; }
248.ui-icon-circle-arrow-w { background-position: -144px -192px; }
249.ui-icon-circle-arrow-n { background-position: -160px -192px; }
250.ui-icon-circle-zoomin { background-position: -176px -192px; }
251.ui-icon-circle-zoomout { background-position: -192px -192px; }
252.ui-icon-circle-check { background-position: -208px -192px; }
253.ui-icon-circlesmall-plus { background-position: 0 -208px; }
254.ui-icon-circlesmall-minus { background-position: -16px -208px; }
255.ui-icon-circlesmall-close { background-position: -32px -208px; }
256.ui-icon-squaresmall-plus { background-position: -48px -208px; }
257.ui-icon-squaresmall-minus { background-position: -64px -208px; }
258.ui-icon-squaresmall-close { background-position: -80px -208px; }
259.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
260.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
261.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
262.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
263.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
264.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
265
266
267/* Misc visuals
268----------------------------------*/
269
270/* Corner radius */
271.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
272.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
273.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
274.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
275.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
276.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
277.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
278.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
279.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
280
281/* Overlays */
282.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
283.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
284----------------------------------*/
285.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
286.ui-accordion .ui-accordion-li-fix { display: inline; }
287.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
288.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
289.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
290.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
291.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
292----------------------------------*/
293.ui-datepicker { width: 17em; padding: .2em .2em 0; }
294.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
295.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
296.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
297.ui-datepicker .ui-datepicker-prev { left:2px; }
298.ui-datepicker .ui-datepicker-next { right:2px; }
299.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
300.ui-datepicker .ui-datepicker-next-hover { right:1px; }
301.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
302.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
303.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
304.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
305.ui-datepicker select.ui-datepicker-month,
306.ui-datepicker select.ui-datepicker-year { width: 49%;}
307.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
308.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
309.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
310.ui-datepicker td { border: 0; padding: 1px; }
311.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
312.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
313.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
314.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
315
316/* with multiple calendars */
317.ui-datepicker.ui-datepicker-multi { width:auto; }
318.ui-datepicker-multi .ui-datepicker-group { float:left; }
319.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
320.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
321.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
322.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
323.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
324.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
325.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
326.ui-datepicker-row-break { clear:both; width:100%; }
327
328/* RTL support */
329.ui-datepicker-rtl { direction: rtl; }
330.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
331.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
332.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
333.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
334.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
335.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
336.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
337.ui-datepicker-rtl .ui-datepicker-group { float:right; }
338.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
339.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
340
341/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
342.ui-datepicker-cover {
343 display: none; /*sorry for IE5*/
344 display/**/: block; /*sorry for IE5*/
345 position: absolute; /*must have*/
346 z-index: -1; /*must have*/
347 filter: mask(); /*must have*/
348 top: -4px; /*must have*/
349 left: -4px; /*must have*/
350 width: 200px; /*must have*/
351 height: 200px; /*must have*/
352}/* Dialog
353----------------------------------*/
354.ui-dialog { position: relative; padding: .2em; width: 300px; }
355.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
356.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
357.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
358.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
359.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
360.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
361.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
362.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
363.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
364.ui-draggable .ui-dialog-titlebar { cursor: move; }
365/* Progressbar
366----------------------------------*/
367.ui-progressbar { height:2em; text-align: left; }
368.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
369----------------------------------*/
370.ui-resizable { position: relative;}
371.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
372.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
373.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
374.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
375.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
376.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
377.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
378.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
379.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
380.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
381----------------------------------*/
382.ui-slider { position: relative; text-align: left; }
383.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
384.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
385
386.ui-slider-horizontal { height: .8em; }
387.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
388.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
389.ui-slider-horizontal .ui-slider-range-min { left: 0; }
390.ui-slider-horizontal .ui-slider-range-max { right: 0; }
391
392.ui-slider-vertical { width: .8em; height: 100px; }
393.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
394.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
395.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
396.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
397----------------------------------*/
398.ui-tabs { padding: .2em; zoom: 1; }
399.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
400.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
401.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
402.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
403.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
404.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
405.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
406.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/static/development-bundle/AUTHORS.txt b/static/development-bundle/AUTHORS.txt
new file mode 100644
index 0000000..637175b
--- /dev/null
+++ b/static/development-bundle/AUTHORS.txt
@@ -0,0 +1,30 @@
1jQuery UI Authors (http://ui.jquery.com/about)
2
3This software consists of voluntary contributions made by many
4individuals. For exact contribution history, see the revision history
5and logs, available at http://jquery-ui.googlecode.com/svn/
6
7Brandon Aaron
8Paul Bakaus (paulbakaus.com)
9David Bolter
10Rich Caloggero
11Chi Cheng (cloudream@gmail.com)
12Colin Clark (http://colin.atrc.utoronto.ca/)
13Michelle D'Souza
14Aaron Eisenberger (aaronchi@gmail.com)
15Ariel Flesler
16Bohdan Ganicky
17Scott González
18Marc Grabanski (m@marcgrabanski.com)
19Klaus Hartl (stilbuero.de)
20Scott Jehl
21Cody Lindley
22Eduardo Lundgren (eduardolundgren@gmail.com)
23Todd Parker
24John Resig
25Patty Toland
26Ca-Phun Ung (yelotofu.com)
27Keith Wood (kbwood@virginbroadband.com.au)
28Maggie Costello Wachs
29Richard D. Worth (rdworth.org)
30Jörn Zaefferer (bassistance.de)
diff --git a/static/development-bundle/GPL-LICENSE.txt b/static/development-bundle/GPL-LICENSE.txt
new file mode 100644
index 0000000..11dddd0
--- /dev/null
+++ b/static/development-bundle/GPL-LICENSE.txt
@@ -0,0 +1,278 @@
1 GNU GENERAL PUBLIC LICENSE
2 Version 2, June 1991
3
4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed.
8
9 Preamble
10
11 The licenses for most software are designed to take away your
12freedom to share and change it. By contrast, the GNU General Public
13License is intended to guarantee your freedom to share and change free
14software--to make sure the software is free for all its users. This
15General Public License applies to most of the Free Software
16Foundation's software and to any other program whose authors commit to
17using it. (Some other Free Software Foundation software is covered by
18the GNU Lesser General Public License instead.) You can apply it to
19your programs, too.
20
21 When we speak of free software, we are referring to freedom, not
22price. Our General Public Licenses are designed to make sure that you
23have the freedom to distribute copies of free software (and charge for
24this service if you wish), that you receive source code or can get it
25if you want it, that you can change the software or use pieces of it
26in new free programs; and that you know you can do these things.
27
28 To protect your rights, we need to make restrictions that forbid
29anyone to deny you these rights or to ask you to surrender the rights.
30These restrictions translate to certain responsibilities for you if you
31distribute copies of the software, or if you modify it.
32
33 For example, if you distribute copies of such a program, whether
34gratis or for a fee, you must give the recipients all the rights that
35you have. You must make sure that they, too, receive or can get the
36source code. And you must show them these terms so they know their
37rights.
38
39 We protect your rights with two steps: (1) copyright the software, and
40(2) offer you this license which gives you legal permission to copy,
41distribute and/or modify the software.
42
43 Also, for each author's protection and ours, we want to make certain
44that everyone understands that there is no warranty for this free
45software. If the software is modified by someone else and passed on, we
46want its recipients to know that what they have is not the original, so
47that any problems introduced by others will not reflect on the original
48authors' reputations.
49
50 Finally, any free program is threatened constantly by software
51patents. We wish to avoid the danger that redistributors of a free
52program will individually obtain patent licenses, in effect making the
53program proprietary. To prevent this, we have made it clear that any
54patent must be licensed for everyone's free use or not licensed at all.
55
56 The precise terms and conditions for copying, distribution and
57modification follow.
58
59 GNU GENERAL PUBLIC LICENSE
60 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
62 0. This License applies to any program or other work which contains
63a notice placed by the copyright holder saying it may be distributed
64under the terms of this General Public License. The "Program", below,
65refers to any such program or work, and a "work based on the Program"
66means either the Program or any derivative work under copyright law:
67that is to say, a work containing the Program or a portion of it,
68either verbatim or with modifications and/or translated into another
69language. (Hereinafter, translation is included without limitation in
70the term "modification".) Each licensee is addressed as "you".
71
72Activities other than copying, distribution and modification are not
73covered by this License; they are outside its scope. The act of
74running the Program is not restricted, and the output from the Program
75is covered only if its contents constitute a work based on the
76Program (independent of having been made by running the Program).
77Whether that is true depends on what the Program does.
78
79 1. You may copy and distribute verbatim copies of the Program's
80source code as you receive it, in any medium, provided that you
81conspicuously and appropriately publish on each copy an appropriate
82copyright notice and disclaimer of warranty; keep intact all the
83notices that refer to this License and to the absence of any warranty;
84and give any other recipients of the Program a copy of this License
85along with the Program.
86
87You may charge a fee for the physical act of transferring a copy, and
88you may at your option offer warranty protection in exchange for a fee.
89
90 2. You may modify your copy or copies of the Program or any portion
91of it, thus forming a work based on the Program, and copy and
92distribute such modifications or work under the terms of Section 1
93above, provided that you also meet all of these conditions:
94
95 a) You must cause the modified files to carry prominent notices
96 stating that you changed the files and the date of any change.
97
98 b) You must cause any work that you distribute or publish, that in
99 whole or in part contains or is derived from the Program or any
100 part thereof, to be licensed as a whole at no charge to all third
101 parties under the terms of this License.
102
103 c) If the modified program normally reads commands interactively
104 when run, you must cause it, when started running for such
105 interactive use in the most ordinary way, to print or display an
106 announcement including an appropriate copyright notice and a
107 notice that there is no warranty (or else, saying that you provide
108 a warranty) and that users may redistribute the program under
109 these conditions, and telling the user how to view a copy of this
110 License. (Exception: if the Program itself is interactive but
111 does not normally print such an announcement, your work based on
112 the Program is not required to print an announcement.)
113
114These requirements apply to the modified work as a whole. If
115identifiable sections of that work are not derived from the Program,
116and can be reasonably considered independent and separate works in
117themselves, then this License, and its terms, do not apply to those
118sections when you distribute them as separate works. But when you
119distribute the same sections as part of a whole which is a work based
120on the Program, the distribution of the whole must be on the terms of
121this License, whose permissions for other licensees extend to the
122entire whole, and thus to each and every part regardless of who wrote it.
123
124Thus, it is not the intent of this section to claim rights or contest
125your rights to work written entirely by you; rather, the intent is to
126exercise the right to control the distribution of derivative or
127collective works based on the Program.
128
129In addition, mere aggregation of another work not based on the Program
130with the Program (or with a work based on the Program) on a volume of
131a storage or distribution medium does not bring the other work under
132the scope of this License.
133
134 3. You may copy and distribute the Program (or a work based on it,
135under Section 2) in object code or executable form under the terms of
136Sections 1 and 2 above provided that you also do one of the following:
137
138 a) Accompany it with the complete corresponding machine-readable
139 source code, which must be distributed under the terms of Sections
140 1 and 2 above on a medium customarily used for software interchange; or,
141
142 b) Accompany it with a written offer, valid for at least three
143 years, to give any third party, for a charge no more than your
144 cost of physically performing source distribution, a complete
145 machine-readable copy of the corresponding source code, to be
146 distributed under the terms of Sections 1 and 2 above on a medium
147 customarily used for software interchange; or,
148
149 c) Accompany it with the information you received as to the offer
150 to distribute corresponding source code. (This alternative is
151 allowed only for noncommercial distribution and only if you
152 received the program in object code or executable form with such
153 an offer, in accord with Subsection b above.)
154
155The source code for a work means the preferred form of the work for
156making modifications to it. For an executable work, complete source
157code means all the source code for all modules it contains, plus any
158associated interface definition files, plus the scripts used to
159control compilation and installation of the executable. However, as a
160special exception, the source code distributed need not include
161anything that is normally distributed (in either source or binary
162form) with the major components (compiler, kernel, and so on) of the
163operating system on which the executable runs, unless that component
164itself accompanies the executable.
165
166If distribution of executable or object code is made by offering
167access to copy from a designated place, then offering equivalent
168access to copy the source code from the same place counts as
169distribution of the source code, even though third parties are not
170compelled to copy the source along with the object code.
171
172 4. You may not copy, modify, sublicense, or distribute the Program
173except as expressly provided under this License. Any attempt
174otherwise to copy, modify, sublicense or distribute the Program is
175void, and will automatically terminate your rights under this License.
176However, parties who have received copies, or rights, from you under
177this License will not have their licenses terminated so long as such
178parties remain in full compliance.
179
180 5. You are not required to accept this License, since you have not
181signed it. However, nothing else grants you permission to modify or
182distribute the Program or its derivative works. These actions are
183prohibited by law if you do not accept this License. Therefore, by
184modifying or distributing the Program (or any work based on the
185Program), you indicate your acceptance of this License to do so, and
186all its terms and conditions for copying, distributing or modifying
187the Program or works based on it.
188
189 6. Each time you redistribute the Program (or any work based on the
190Program), the recipient automatically receives a license from the
191original licensor to copy, distribute or modify the Program subject to
192these terms and conditions. You may not impose any further
193restrictions on the recipients' exercise of the rights granted herein.
194You are not responsible for enforcing compliance by third parties to
195this License.
196
197 7. If, as a consequence of a court judgment or allegation of patent
198infringement or for any other reason (not limited to patent issues),
199conditions are imposed on you (whether by court order, agreement or
200otherwise) that contradict the conditions of this License, they do not
201excuse you from the conditions of this License. If you cannot
202distribute so as to satisfy simultaneously your obligations under this
203License and any other pertinent obligations, then as a consequence you
204may not distribute the Program at all. For example, if a patent
205license would not permit royalty-free redistribution of the Program by
206all those who receive copies directly or indirectly through you, then
207the only way you could satisfy both it and this License would be to
208refrain entirely from distribution of the Program.
209
210If any portion of this section is held invalid or unenforceable under
211any particular circumstance, the balance of the section is intended to
212apply and the section as a whole is intended to apply in other
213circumstances.
214
215It is not the purpose of this section to induce you to infringe any
216patents or other property right claims or to contest validity of any
217such claims; this section has the sole purpose of protecting the
218integrity of the free software distribution system, which is
219implemented by public license practices. Many people have made
220generous contributions to the wide range of software distributed
221through that system in reliance on consistent application of that
222system; it is up to the author/donor to decide if he or she is willing
223to distribute software through any other system and a licensee cannot
224impose that choice.
225
226This section is intended to make thoroughly clear what is believed to
227be a consequence of the rest of this License.
228
229 8. If the distribution and/or use of the Program is restricted in
230certain countries either by patents or by copyrighted interfaces, the
231original copyright holder who places the Program under this License
232may add an explicit geographical distribution limitation excluding
233those countries, so that distribution is permitted only in or among
234countries not thus excluded. In such case, this License incorporates
235the limitation as if written in the body of this License.
236
237 9. The Free Software Foundation may publish revised and/or new versions
238of the General Public License from time to time. Such new versions will
239be similar in spirit to the present version, but may differ in detail to
240address new problems or concerns.
241
242Each version is given a distinguishing version number. If the Program
243specifies a version number of this License which applies to it and "any
244later version", you have the option of following the terms and conditions
245either of that version or of any later version published by the Free
246Software Foundation. If the Program does not specify a version number of
247this License, you may choose any version ever published by the Free Software
248Foundation.
249
250 10. If you wish to incorporate parts of the Program into other free
251programs whose distribution conditions are different, write to the author
252to ask for permission. For software which is copyrighted by the Free
253Software Foundation, write to the Free Software Foundation; we sometimes
254make exceptions for this. Our decision will be guided by the two goals
255of preserving the free status of all derivatives of our free software and
256of promoting the sharing and reuse of software generally.
257
258 NO WARRANTY
259
260 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268REPAIR OR CORRECTION.
269
270 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278POSSIBILITY OF SUCH DAMAGES.
diff --git a/static/development-bundle/MIT-LICENSE.txt b/static/development-bundle/MIT-LICENSE.txt
new file mode 100644
index 0000000..f0f2ba9
--- /dev/null
+++ b/static/development-bundle/MIT-LICENSE.txt
@@ -0,0 +1,25 @@
1Copyright (c) 2009 Paul Bakaus, http://jqueryui.com/
2
3This software consists of voluntary contributions made by many
4individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
5contribution history, see the revision history and logs, available
6at http://jquery-ui.googlecode.com/svn/
7
8Permission is hereby granted, free of charge, to any person obtaining
9a copy of this software and associated documentation files (the
10"Software"), to deal in the Software without restriction, including
11without limitation the rights to use, copy, modify, merge, publish,
12distribute, sublicense, and/or sell copies of the Software, and to
13permit persons to whom the Software is furnished to do so, subject to
14the following conditions:
15
16The above copyright notice and this permission notice shall be
17included in all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/static/development-bundle/demos/accordion/collapsible.html b/static/development-bundle/demos/accordion/collapsible.html
new file mode 100644
index 0000000..381d5fe
--- /dev/null
+++ b/static/development-bundle/demos/accordion/collapsible.html
@@ -0,0 +1,58 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Accordion - Collapse content</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.accordion.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#accordion").accordion({
13 collapsible: true
14 });
15 });
16 </script>
17</head>
18<body>
19
20<div class="demo">
21
22<div id="accordion">
23 <h3><a href="#">Section 1</a></h3>
24 <div>
25 <p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
26 </div>
27 <h3><a href="#">Section 2</a></h3>
28 <div>
29 <p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
30 </div>
31 <h3><a href="#">Section 3</a></h3>
32 <div>
33 <p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
34 <ul>
35 <li>List item one</li>
36 <li>List item two</li>
37 <li>List item three</li>
38 </ul>
39 </div>
40 <h3><a href="#">Section 4</a></h3>
41 <div>
42 <p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
43 </div>
44</div>
45
46</div><!-- End demo -->
47
48
49
50<div class="demo-description">
51
52<p>By default, accordions always keep one section open. To allow for all sections to be be collapsible, set the <code>collapsible</code> option to true. Click on the currently open section to collapse its content pane.</p>
53
54
55</div><!-- End demo-description -->
56
57</body>
58</html>
diff --git a/static/development-bundle/demos/accordion/custom-icons.html b/static/development-bundle/demos/accordion/custom-icons.html
new file mode 100644
index 0000000..777fa52
--- /dev/null
+++ b/static/development-bundle/demos/accordion/custom-icons.html
@@ -0,0 +1,60 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Accordion - Customize icons</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.accordion.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#accordion").accordion({
13 icons: {
14 header: "ui-icon-circle-arrow-e",
15 headerSelected: "ui-icon-circle-arrow-s"
16 }
17 });
18 });
19 </script>
20</head>
21<body>
22
23<div class="demo">
24
25<div id="accordion">
26 <h3><a href="#">Section 1</a></h3>
27 <div>
28 <p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
29 </div>
30 <h3><a href="#">Section 2</a></h3>
31 <div>
32 <p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
33 </div>
34 <h3><a href="#">Section 3</a></h3>
35 <div>
36 <p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
37 <ul>
38 <li>List item one</li>
39 <li>List item two</li>
40 <li>List item three</li>
41 </ul>
42 </div>
43 <h3><a href="#">Section 4</a></h3>
44 <div>
45 <p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
46 </div>
47</div>
48
49</div><!-- End demo -->
50
51
52
53<div class="demo-description">
54
55<p>Customize the header icons with the <code>icons</code> option, which accepts classes for the header's default and selected (open) state. Use any class from the UI CSS framework, or create custom classes with background images.</p>
56
57</div><!-- End demo-description -->
58
59</body>
60</html>
diff --git a/static/development-bundle/demos/accordion/default.html b/static/development-bundle/demos/accordion/default.html
new file mode 100644
index 0000000..9493b26
--- /dev/null
+++ b/static/development-bundle/demos/accordion/default.html
@@ -0,0 +1,83 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Accordion - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.accordion.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#accordion").accordion();
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20<div id="accordion">
21 <h3><a href="#">Section 1</a></h3>
22 <div>
23 <p>
24 Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
25 ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
26 amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
27 odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
28 </p>
29 </div>
30 <h3><a href="#">Section 2</a></h3>
31 <div>
32 <p>
33 Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
34 purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
35 velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
36 suscipit faucibus urna.
37 </p>
38 </div>
39 <h3><a href="#">Section 3</a></h3>
40 <div>
41 <p>
42 Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
43 Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
44 ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
45 lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
46 </p>
47 <ul>
48 <li>List item one</li>
49 <li>List item two</li>
50 <li>List item three</li>
51 </ul>
52 </div>
53 <h3><a href="#">Section 4</a></h3>
54 <div>
55 <p>
56 Cras dictum. Pellentesque habitant morbi tristique senectus et netus
57 et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
58 faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
59 mauris vel est.
60 </p>
61 <p>
62 Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
63 Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
64 inceptos himenaeos.
65 </p>
66 </div>
67</div>
68
69</div><!-- End demo -->
70
71<div class="demo-description">
72<p>
73Click headers to expand/collapse content that is broken into logical sections, much like tabs.
74Optionally, toggle sections open/closed on mouseover.
75</p>
76<p>
77The underlying HTML markup is a series of headers (H3 tags) and content divs so the content is
78usable without JavaScript.
79</p>
80</div><!-- End demo-description -->
81
82</body>
83</html>
diff --git a/static/development-bundle/demos/accordion/fillspace.html b/static/development-bundle/demos/accordion/fillspace.html
new file mode 100644
index 0000000..3523d00
--- /dev/null
+++ b/static/development-bundle/demos/accordion/fillspace.html
@@ -0,0 +1,76 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Accordion - Fill space</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.accordion.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <script type="text/javascript">
12 $(function() {
13 $("#accordion").accordion({
14 fillSpace: true
15 });
16 });
17 $(function() {
18 $("#accordionResizer").resizable({
19 resize: function() {
20 $("#accordion").accordion("resize");
21 },
22 minHeight: 140
23 });
24 });
25 </script>
26</head>
27<body>
28
29<div class="demo">
30
31<h3 class="docs">Resize the outer container:</h3>
32
33<div id="accordionResizer" style="padding:10px; width:350px; height:220px;" class="ui-widget-content">
34
35<div id="accordion">
36 <h3><a href="#">Section 1</a></h3>
37 <div>
38 <p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
39 </div>
40 <h3><a href="#">Section 2</a></h3>
41 <div>
42 <p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
43 </div>
44 <h3><a href="#">Section 3</a></h3>
45 <div>
46 <p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
47 <ul>
48 <li>List item one</li>
49 <li>List item two</li>
50 <li>List item three</li>
51 </ul>
52 </div>
53 <h3><a href="#">Section 4</a></h3>
54 <div>
55 <p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
56 </div>
57</div>
58
59<span class="ui-icon ui-icon-grip-dotted-horizontal" style="margin:2px auto;"></span>
60</div><!-- End accordionResizer -->
61
62<div style="margin-top:7px; padding:10px; width:350px; height:50px;" class="ui-widget-content">I'm another panel</div>
63
64</div><!-- End demo -->
65
66
67
68<div class="demo-description">
69
70<p>Because the accordion is comprised of block-level elements, by default its width fills the available horizontal space. To fill the vertical space allocated by its container, set the boolean <code>fillSpace</code> option to true, and the script will automatically set the dimensions of the accordion to the height of its parent container. The accordion will also resize with its container if the container is <code>resizable</code>.</p>
71
72</div><!-- End demo-description -->
73
74
75</body>
76</html>
diff --git a/static/development-bundle/demos/accordion/index.html b/static/development-bundle/demos/accordion/index.html
new file mode 100644
index 0000000..f09fcf6
--- /dev/null
+++ b/static/development-bundle/demos/accordion/index.html
@@ -0,0 +1,20 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Accordion Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8 <div class="demos-nav">
9 <h4>Examples</h4>
10 <ul>
11 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
12 <li><a href="fillspace.html">Fill space</a></li>
13 <li><a href="no-auto-height.html">No auto height</a></li>
14 <li><a href="collapsible.html">Collapse content</a></li>
15 <li><a href="mouseover.html">Open on mouseover</a></li>
16 <li><a href="custom-icons.html">Customize icons</a></li>
17 </ul>
18 </div>
19</body>
20</html>
diff --git a/static/development-bundle/demos/accordion/mouseover.html b/static/development-bundle/demos/accordion/mouseover.html
new file mode 100644
index 0000000..2181649
--- /dev/null
+++ b/static/development-bundle/demos/accordion/mouseover.html
@@ -0,0 +1,57 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Accordion - Open on mouseover</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.accordion.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#accordion").accordion({
13 event: "mouseover"
14 });
15 });
16 </script>
17</head>
18<body>
19
20<div class="demo">
21
22<div id="accordion">
23 <h3><a href="#">Section 1</a></h3>
24 <div>
25 <p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
26 </div>
27 <h3><a href="#">Section 2</a></h3>
28 <div>
29 <p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
30 </div>
31 <h3><a href="#">Section 3</a></h3>
32 <div>
33 <p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
34 <ul>
35 <li>List item one</li>
36 <li>List item two</li>
37 <li>List item three</li>
38 </ul>
39 </div>
40 <h3><a href="#">Section 4</a></h3>
41 <div>
42 <p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
43 </div>
44</div>
45
46</div><!-- End demo -->
47
48
49
50<div class="demo-description">
51
52<p>Toggle sections open/closed on mouseover with the <code>event</code> option. The default value for event is "click."</p>
53
54</div><!-- End demo-description -->
55
56</body>
57</html>
diff --git a/static/development-bundle/demos/accordion/no-auto-height.html b/static/development-bundle/demos/accordion/no-auto-height.html
new file mode 100644
index 0000000..49b7c3b
--- /dev/null
+++ b/static/development-bundle/demos/accordion/no-auto-height.html
@@ -0,0 +1,57 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Accordion - No Auto Height</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.accordion.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#accordion").accordion({
13 autoHeight: false
14 });
15 });
16 </script>
17</head>
18<body>
19
20<div class="demo">
21
22<div id="accordion">
23 <h3><a href="#">Section 1</a></h3>
24 <div>
25 <p>Mauris mauris ante, blandit et, ultrices a, susceros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
26 </div>
27 <h3><a href="#">Section 2</a></h3>
28 <div>
29 <p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
30 </div>
31 <h3><a href="#">Section 3</a></h3>
32 <div>
33 <p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
34 <ul>
35 <li>List item</li>
36 <li>List item</li>
37 <li>List item</li>
38 <li>List item</li>
39 <li>List item</li>
40 <li>List item</li>
41 <li>List item</li>
42 </ul>
43 </div>
44</div>
45
46</div><!-- End demo -->
47
48
49
50<div class="demo-description">
51
52<p>Setting <code>autoHeight: false</code> allows to accordion panels to keep their native height.</p>
53
54</div><!-- End demo-description -->
55
56</body>
57</html>
diff --git a/static/development-bundle/demos/addClass/default.html b/static/development-bundle/demos/addClass/default.html
new file mode 100644
index 0000000..eae24b9
--- /dev/null
+++ b/static/development-bundle/demos/addClass/default.html
@@ -0,0 +1,51 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - addClass Demo</title>
5 <link type="text/css" href="http://jquery-ui.googlecode.com/svn/trunk/themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/trunk/jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/trunk/ui/effects.core.js"></script>
8 <link type="text/css" href="http://jquery-ui.googlecode.com/svn/trunk/demos/demos.css" rel="stylesheet" />
9 <style type="text/css">
10 .toggler { width: 500px; height: 200px; position: relative;}
11 #button { padding: .5em 1em; text-decoration: none; }
12 #effect {position: relative; width: 240px; padding: 1em; font-size: 1.2em; border: 1px solid #000; background: #eee; color: #333; }
13 #effect.newClass { text-indent: 40px; letter-spacing: .4em; width: 410px; height: 100px; padding: 30px; margin: 10px; font-size: 1.6em; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#button").click(function() {
18 $('#effect').addClass('newClass', 1000, callback);
19 return false;
20 });
21
22 function callback(){
23 setTimeout(function(){
24 $('#effect').removeClass('newClass');
25 }, 1500);
26 }
27 });
28 </script>
29</head>
30<body>
31
32<div class="demo">
33
34<div class="toggler">
35 <div id="effect" class=" ui-corner-all">
36 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede.
37 </div>
38</div>
39
40<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
41
42</div><!-- End demo -->
43
44<div class="demo-description">
45
46<p>This demo adds a class which animates: text-indent, letter-spacing, width, height, padding, margin, and font-size.</p>
47
48</div><!-- End demo-description -->
49
50</body>
51</html>
diff --git a/static/development-bundle/demos/addClass/index.html b/static/development-bundle/demos/addClass/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/addClass/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/animate/default.html b/static/development-bundle/demos/animate/default.html
new file mode 100644
index 0000000..a01f08a
--- /dev/null
+++ b/static/development-bundle/demos/animate/default.html
@@ -0,0 +1,52 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - Animate Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/effects.core.js"></script>
8 <link type="text/css" href="../demos.css" rel="stylesheet" />
9 <style type="text/css">
10 .toggler { width: 500px; height: 200px; position: relative;}
11 #button { padding: .5em 1em; text-decoration: none; }
12 #effect { width: 240px; height: 135px; padding: 0.4em; position: relative; background: #fff; }
13 #effect h3 { margin: 0; padding: 0.4em; text-align: center; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#button").toggle(
18 function() {
19 $("#effect").animate({backgroundColor: '#aa0000', color: '#fff', width: 500}, 1000);
20 },
21 function() {
22 $("#effect").animate({backgroundColor: '#fff', color: '#000', width: 240}, 1000);
23 }
24 );
25 });
26 </script>
27</head>
28<body>
29
30<div class="demo">
31
32<div class="toggler">
33 <div id="effect" class="ui-widget-content ui-corner-all">
34 <h3 class="ui-widget-header ui-corner-all">Animate</h3>
35 <p>
36 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
37 </p>
38 </div>
39</div>
40
41<a href="#" id="button" class="ui-state-default ui-corner-all">Toggle Effect</a>
42
43</div><!-- End demo -->
44
45<div class="demo-description">
46
47<p>Click the button above to preview the effect.</p>
48
49</div><!-- End demo-description -->
50
51</body>
52</html>
diff --git a/static/development-bundle/demos/animate/index.html b/static/development-bundle/demos/animate/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/animate/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/datepicker/alt-field.html b/static/development-bundle/demos/datepicker/alt-field.html
new file mode 100644
index 0000000..372e2bf
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/alt-field.html
@@ -0,0 +1,31 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Populate alternate field</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#datepicker").datepicker({altField: '#alternate', altFormat: 'DD, d MM, yy'});
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20<p>Date: <input type="text" id="datepicker">&nbsp;<input type="text" id="alternate" size="30"/></p>
21
22</div><!-- End demo -->
23
24<div class="demo-description">
25
26<p>Populate an alternate field with its own date format whenever a date is selected using the <code>altField</code> and <code>altFormat</code> options. This feature could be used to present a human-friendly date for user selection, while passing a more computer-friendly date through for further processing.</p>
27
28</div><!-- End demo-description -->
29
30</body>
31</html>
diff --git a/static/development-bundle/demos/datepicker/buttonbar.html b/static/development-bundle/demos/datepicker/buttonbar.html
new file mode 100644
index 0000000..eeea08a
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/buttonbar.html
@@ -0,0 +1,33 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Display button bar</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $('#datepicker').datepicker({
13 showButtonPanel: true
14 });
15 });
16 </script>
17</head>
18<body>
19
20<div class="demo">
21
22<p>Date: <input type="text" id="datepicker"></p>
23
24</div><!-- End demo -->
25
26<div class="demo-description">
27
28<p>Display a button for selecting Today's date and a Done button for closing the calendar with the boolean <code>showButtonPanel</code> option. Each button is enabled by default when the bar is displayed, but can be turned off with additional options. Button text is customizable.</p>
29
30</div><!-- End demo-description -->
31
32</body>
33</html>
diff --git a/static/development-bundle/demos/datepicker/date-formats.html b/static/development-bundle/demos/datepicker/date-formats.html
new file mode 100644
index 0000000..a8712ec
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/date-formats.html
@@ -0,0 +1,43 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Format date</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#datepicker").datepicker();
13 $("#format").change(function() { $('#datepicker').datepicker('option', {dateFormat: $(this).val()}); });
14 });
15 </script>
16</head>
17<body>
18
19<div class="demo">
20
21<p>Date: <input type="text" id="datepicker" size="30"/></p>
22
23<p>Format options:<br />
24 <select id="format">
25 <option value="mm/dd/yy">Default - mm/dd/yy</option>
26 <option value="yy-mm-dd">ISO 8601 - yy-mm-dd</option>
27 <option value="d M, y">Short - d M, yy</option>
28 <option value="d MM, y">Medium - d MM, yy</option>
29 <option value="DD, d MM, yy">Full - DD, d MM, yy</option>
30 <option value="'day' d 'of' MM 'in the year' yy">With text - 'day' d 'of' MM 'in the year' yy</option>
31 </select>
32</p>
33
34</div><!-- End demo -->
35
36<div class="demo-description">
37
38<p>Display date feedback in a variety of ways. Choose a date format from the dropdown, then click on the input and select a date to see it in that format.</p>
39
40</div><!-- End demo-description -->
41
42</body>
43</html>
diff --git a/static/development-bundle/demos/datepicker/default.html b/static/development-bundle/demos/datepicker/default.html
new file mode 100644
index 0000000..368e0bc
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/default.html
@@ -0,0 +1,31 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#datepicker").datepicker();
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20<p>Date: <input type="text" id="datepicker"></p>
21
22</div><!-- End demo -->
23
24<div class="demo-description">
25
26<p>The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.</p>
27
28</div><!-- End demo-description -->
29
30</body>
31</html>
diff --git a/static/development-bundle/demos/datepicker/dropdown-month-year.html b/static/development-bundle/demos/datepicker/dropdown-month-year.html
new file mode 100644
index 0000000..c169310
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/dropdown-month-year.html
@@ -0,0 +1,34 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Display month &amp; year menus</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $('#datepicker').datepicker({
13 changeMonth: true,
14 changeYear: true
15 });
16 });
17 </script>
18</head>
19<body>
20
21<div class="demo">
22
23<p>Date: <input type="text" id="datepicker"></p>
24
25</div><!-- End demo -->
26
27<div class="demo-description">
28
29<p>Show month and year dropdowns in place of the static month/year header to facilitate navigation through large timeframes. Add the boolean <code>changeMonth</code> and <code>changeYear</code> options.</p>
30
31</div><!-- End demo-description -->
32
33</body>
34</html>
diff --git a/static/development-bundle/demos/datepicker/icon-trigger.html b/static/development-bundle/demos/datepicker/icon-trigger.html
new file mode 100644
index 0000000..5b4de4a
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/icon-trigger.html
@@ -0,0 +1,31 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Icon trigger</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#datepicker").datepicker({showOn: 'button', buttonImage: 'images/calendar.gif', buttonImageOnly: true});
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20<p>Date: <input type="text" id="datepicker"></p>
21
22</div><!-- End demo -->
23
24<div class="demo-description">
25
26<p>Click the icon next to the input field to show the datepicker. Set the datepicker to open on focus (default behavior), on icon click, or both.</p>
27
28</div><!-- End demo-description -->
29
30</body>
31</html>
diff --git a/static/development-bundle/demos/datepicker/images/calendar.gif b/static/development-bundle/demos/datepicker/images/calendar.gif
new file mode 100644
index 0000000..d0abaa7
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/images/calendar.gif
Binary files differ
diff --git a/static/development-bundle/demos/datepicker/index.html b/static/development-bundle/demos/datepicker/index.html
new file mode 100644
index 0000000..dfe22db
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/index.html
@@ -0,0 +1,26 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="date-formats.html">Format date</a></li>
14 <li><a href="min-max.html">Restrict date range</a></li>
15 <li><a href="localization.html">Localize calendar</a></li>
16 <li><a href="alt-field.html">Populate alternate field</a></li>
17 <li><a href="inline.html">Display inline</a></li>
18 <li><a href="buttonbar.html">Display button bar</a></li>
19 <li><a href="dropdown-month-year.html">Display month &amp; year menus</a></li>
20 <li><a href="multiple-calendars.html">Display multiple months</a></li>
21 <li><a href="icon-trigger.html">Icon trigger</a></li>
22 </ul>
23</div>
24
25</body>
26</html>
diff --git a/static/development-bundle/demos/datepicker/inline.html b/static/development-bundle/demos/datepicker/inline.html
new file mode 100644
index 0000000..2d5ad75
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/inline.html
@@ -0,0 +1,31 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Display inline</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#datepicker").datepicker();
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20Date: <div id="datepicker"></div>
21
22</div><!-- End demo -->
23
24<div class="demo-description">
25
26<p>Display the datepicker embedded in the page instead of in an overlay. Simply call .datepicker() on a div instead of an input.</p>
27
28</div><!-- End demo-description -->
29
30</body>
31</html>
diff --git a/static/development-bundle/demos/datepicker/localization.html b/static/development-bundle/demos/datepicker/localization.html
new file mode 100644
index 0000000..39bc660
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/localization.html
@@ -0,0 +1,120 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Localize calendar</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ar.js"></script>
10 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-bg.js"></script>
11 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ca.js"></script>
12 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-cs.js"></script>
13 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-da.js"></script>
14 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-de.js"></script>
15 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-el.js"></script>
16 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-eo.js"></script>
17 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-es.js"></script>
18 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-fa.js"></script>
19 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-fi.js"></script>
20 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-fr.js"></script>
21 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-he.js"></script>
22 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-hr.js"></script>
23 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-hu.js"></script>
24 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-hy.js"></script>
25 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-id.js"></script>
26 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-is.js"></script>
27 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-it.js"></script>
28 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ja.js"></script>
29 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ko.js"></script>
30 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-lt.js"></script>
31 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-lv.js"></script>
32 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ms.js"></script>
33 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-nl.js"></script>
34 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-no.js"></script>
35 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-pl.js"></script>
36 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-pt-BR.js"></script>
37 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ro.js"></script>
38 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ru.js"></script>
39 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sk.js"></script>
40 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sl.js"></script>
41 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sq.js"></script>
42 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sr.js"></script>
43 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sr-SR.js"></script>
44 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sv.js"></script>
45 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-th.js"></script>
46 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-tr.js"></script>
47 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-uk.js"></script>
48 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-zh-CN.js"></script>
49 <script type="text/javascript" src="../../ui/i18n/ui.datepicker-zh-TW.js"></script>
50 <link type="text/css" href="../demos.css" rel="stylesheet" />
51 <script type="text/javascript">
52 $(function() {
53 $.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional['']));
54 $("#datepicker").datepicker($.datepicker.regional['fr']);
55 $("#locale").change(function() {
56 $('#datepicker').datepicker('option', $.extend({showMonthAfterYear: false},
57 $.datepicker.regional[$(this).val()]));
58 });
59 });
60 </script>
61</head>
62<body>
63
64<div class="demo">
65
66<p>Date: <input type="text" id="datepicker"/>&nbsp;
67 <select id="locale">
68 <option value="sq">Albanian (Gjuha shqipe)</option>
69 <option value="ar">Arabic (&#8235;(&#1604;&#1593;&#1585;&#1576;&#1610;</option>
70 <option value="hy">Armenian (&#1344;&#1377;&#1397;&#1381;&#1408;&#1381;&#1398;)</option>
71 <option value="bg">Bulgarian (&#1073;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; &#1077;&#1079;&#1080;&#1082;)</option>
72 <option value="ca">Catalan (Catal&agrave;)</option>
73 <option value="zh-CN">Chinese Simplified (&#31616;&#20307;&#20013;&#25991;)</option>
74 <option value="zh-TW">Chinese Traditional (&#32321;&#39636;&#20013;&#25991;)</option>
75 <option value="hr">Croatian (Hrvatski jezik)</option>
76 <option value="cs">Czech (Ce&ouml;tina)</option>
77 <option value="da">Danish (Dansk)</option>
78 <option value="nl">Dutch (Nederlands)</option>
79 <option value="eo">Esperanto</option>
80 <option value="fa">Farsi/Persian (&#8235;(&#1601;&#1575;&#1585;&#1587;&#1740;</option>
81 <option value="fi">Finnish (suomi)</option>
82 <option value="fr" selected="selected">French (Fran&ccedil;ais)</option>
83 <option value="de">German (Deutsch)</option>
84 <option value="el">Greek (&#917;&#955;&#955;&#951;&#957;&#953;&#954;&#940;)</option>
85 <option value="he">Hebrew (&#8235;(&#1506;&#1489;&#1512;&#1497;&#1514;</option>
86 <option value="hu">Hungarian (Magyar)</option>
87 <option value="is">Icelandic (&Otilde;slenska)</option>
88 <option value="id">Indonesian (Bahasa Indonesia)</option>
89 <option value="it">Italian (Italiano)</option>
90 <option value="ja">Japanese (&#26085;&#26412;&#35486;)</option>
91 <option value="ko">Korean (&#54620;&#44397;&#50612;)</option>
92 <option value="lv">Latvian (Latvie&ouml;u Valoda)</option>
93 <option value="lt">Lithuanian (lietuviu kalba)</option>
94 <option value="ms">Malaysian (Bahasa Malaysia)</option>
95 <option value="no">Norwegian (Norsk)</option>
96 <option value="pl">Polish (Polski)</option>
97 <option value="pt-BR">Portuguese/Brazilian (Portugu&ecirc;s)</option>
98 <option value="ro">Romanian (Rom&acirc;n&#259;)</option>
99 <option value="ru">Russian (&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;)</option>
100 <option value="sr">Serbian (&#1089;&#1088;&#1087;&#1089;&#1082;&#1080; &#1112;&#1077;&#1079;&#1080;&#1082;)</option>
101 <option value="sr-SR">Serbian (srpski jezik)</option>
102 <option value="sk">Slovak (Slovencina)</option>
103 <option value="sl">Slovenian (Slovenski Jezik)</option>
104 <option value="es">Spanish (Espa&ntilde;ol)</option>
105 <option value="sv">Swedish (Svenska)</option>
106 <option value="th">Thai (&#3616;&#3634;&#3625;&#3634;&#3652;&#3607;&#3618;)</option>
107 <option value="tr">Turkish (T&uuml;rk&ccedil;e)</option>
108 <option value="uk">Ukranian (&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;)</option>
109 </select></p>
110
111</div><!-- End demo -->
112
113<div class="demo-description">
114
115<p>Localize the datepicker calendar language and format (English / Western formatting is the default). The datepicker includes built-in support for languages that read right-to-left, such as Arabic and Hebrew.</p>
116
117</div><!-- End demo-description -->
118
119</body>
120</html>
diff --git a/static/development-bundle/demos/datepicker/min-max.html b/static/development-bundle/demos/datepicker/min-max.html
new file mode 100644
index 0000000..06a1776
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/min-max.html
@@ -0,0 +1,31 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Restrict date range</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#datepicker").datepicker({minDate: -20, maxDate: '+1M +10D'});
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20<p>Date: <input type="text" id="datepicker"></p>
21
22</div><!-- End demo -->
23
24<div class="demo-description">
25
26<p>Restrict the range of selectable dates with the <code>minDate</code> and <code>maxDate</code> options. Set the beginning and end dates as actual dates (new Date(2009, 1 - 1, 26)), as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D'). For the last, use 'D' for days, 'W' for weeks, 'M' for months, or 'Y' for years.</p>
27
28</div><!-- End demo-description -->
29
30</body>
31</html>
diff --git a/static/development-bundle/demos/datepicker/multiple-calendars.html b/static/development-bundle/demos/datepicker/multiple-calendars.html
new file mode 100644
index 0000000..86e55a0
--- /dev/null
+++ b/static/development-bundle/demos/datepicker/multiple-calendars.html
@@ -0,0 +1,34 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Datepicker - Display multiple months</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $('#datepicker').datepicker({
13 numberOfMonths: 3,
14 showButtonPanel: true
15 });
16 });
17 </script>
18</head>
19<body>
20
21<div class="demo">
22
23<p>Date: <input type="text" id="datepicker"></p>
24
25</div><!-- End demo -->
26
27<div class="demo-description">
28
29<p>Set the <code>numberOfMonths</code> option to an integer of 2 or more to show multiple months in a single datepicker.</p>
30
31</div><!-- End demo-description -->
32
33</body>
34</html>
diff --git a/static/development-bundle/demos/demos.css b/static/development-bundle/demos/demos.css
new file mode 100644
index 0000000..2d2ce1f
--- /dev/null
+++ b/static/development-bundle/demos/demos.css
@@ -0,0 +1,334 @@
1body {
2 font-size: 62.5%;
3}
4
5table {
6 font-size: 1em;
7}
8
9/* Site
10 -------------------------------- */
11
12body {
13 font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
14}
15
16/* Layout
17 -------------------------------- */
18
19.layout-grid {
20 width: 960px;
21}
22
23.layout-grid td {
24 vertical-align: top;
25}
26
27.layout-grid td.left-nav {
28 width: 140px;
29}
30
31.layout-grid td.normal {
32 border-left: 1px solid #eee;
33 padding: 20px 24px;
34 font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
35}
36
37.layout-grid td.demos {
38 background: url('/images/demos_bg.jpg') no-repeat;
39 height: 337px;
40 overflow: hidden;
41}
42
43/* Normal
44 -------------------------------- */
45
46.normal h3,
47.normal h4 {
48 margin: 0;
49 font-weight: normal;
50}
51
52.normal h3 {
53 padding: 0 0 9px;
54 font-size: 1.8em;
55}
56
57.normal h4 {
58 padding-bottom: 21px;
59 border-bottom: 1px dashed #999;
60 font-size: 1.2em;
61 font-weight: bold;
62}
63
64.normal p {
65 font-size: 1.2em;
66}
67
68/* Demos */
69
70.demos-nav, .demos-nav dt, .demos-nav dd, .demos-nav ul, .demos-nav li {
71 margin: 0;
72 padding: 0
73}
74
75.demos-nav {
76 float: left;
77 width: 170px;
78 font-size: 1.3em;
79}
80
81.demos-nav dt,
82.demos-nav h4 {
83 margin: 0;
84 padding: 0;
85 font: normal 1.1em "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
86 color: #e87b10;
87}
88
89.demos-nav dt,
90.demos-nav h4 {
91 margin-top: 1.5em;
92 margin-bottom: 0;
93 padding-left: 8px;
94 padding-bottom:5px;
95 line-height: 1.2em;
96 border-bottom: 1px solid #F4F4F4;
97}
98
99.demos-nav dd a,
100.demos-nav li a {
101 border-bottom: 1px solid #F4F4F4;
102 display:block;
103 padding: 4px 3px 4px 8px;
104 font-size: 90%;
105 text-decoration: none;
106 color: #555 ;
107 margin:2px 0;
108 height:13px;
109}
110
111.demos-nav dd a:hover,
112.demos-nav dd a:focus,
113.demos-nav dd a:hover,
114.demos-nav dd a:focus {
115 background: #f3f3f3;
116 color:#000;
117 -moz-border-radius: 5px; -webkit-border-radius: 5px;
118}
119 .demos-nav dd a.selected {
120 background: #555;
121 color:#ffffff;
122 -moz-border-radius: 5px; -webkit-border-radius: 5px;
123}
124
125
126/* new styles for demo pages, added by Filament 12.29.08
127eventually we should convert the font sizes to ems -- using px for now to minimize style conflicts
128*/
129
130.normal h3.demo-header { font-size:32px; padding:0 0 5px; border-bottom:1px solid #eee; text-transform: capitalize; }
131.normal h4.demo-subheader { font-size:10px; text-transform: uppercase; color:#999; padding:8px 0 3px; border:0; margin:0; }
132.normal a:link,
133.normal a:visited { color:#1b75bb; text-decoration:none; }
134.normal a:hover,
135.normal a:active { color:#0b559b; }
136
137#demo-config { padding:20px 0 0; }
138
139#demo-frame { float:left; width:540px; height:380px; border:1px solid #ddd; overflow: auto; position: relative; }
140#demo-frame h3, #demo-frame h4 { padding: 0; font-weight: bold; font-size: 1em; }
141
142#demo-config-menu { float:right; width:180px; }
143#demo-config-menu h4 { font-size:13px; color:#666; font-weight:normal; border:0; padding-left:18px; }
144
145#demo-config-menu ul { list-style: none; padding: 0; margin: 0; }
146
147#demo-config-menu li { font-size:12px; padding:0 0 0 10px; margin:3px 0; zoom: 1; }
148
149#demo-config-menu li a:link,
150#demo-config-menu li a:visited { display:block; padding:1px 8px 4px; border-bottom:1px dotted #b3b3b3; }
151* html #demo-config-menu li a:link,
152* html #demo-config-menu li a:visited { padding:1px 8px 2px; }
153#demo-config-menu li a:hover,
154#demo-config-menu li a:active { background-color:#f6f6f6; }
155
156#demo-config-menu li.demo-config-on { background: url(images/demo-config-on-tile.gif) repeat-x left center; }
157
158#demo-config-menu li.demo-config-on a:link,
159#demo-config-menu li.demo-config-on a:visited,
160#demo-config-menu li.demo-config-on a:hover,
161#demo-config-menu li.demo-config-on a:active { background: url(images/demo-config-on.gif) no-repeat left; padding-left:18px; color:#fff; border:0; margin-left:-10px; margin-top: 0px; margin-bottom: 0px; }
162
163#demo-source, #demo-notes {
164 clear: both;
165 padding: 20px 0 0;
166 font-size: 1.3em;
167}
168
169#demo-notes { width:520px; color:#333; font-size: 1em; }
170#demo-notes p code, .demo-description p code { padding: 0; font-weight: bold; }
171#demo-source pre, #demo-source code { padding: 0; }
172code, pre { padding:8px 0 8px 20px ; font-size: 1.2em; line-height:130%; }
173
174#demo-source a:link,
175#demo-source a:visited,
176#demo-source a:hover,
177#demo-source a:active { font-size:12px; padding-left:13px; background-position: left center; background-repeat: no-repeat; }
178
179#demo-source a.source-open:link,
180#demo-source a.source-open:visited,
181#demo-source a.source-open:hover,
182#demo-source a.source-open:active { background-image: url(images/demo-spindown-open.gif); }
183
184#demo-source a.source-closed:link,
185#demo-source a.source-closed:visited,
186#demo-source a.source-closed:hover,
187#demo-source a.source-closed:active { background-image: url(images/demo-spindown-closed.gif); }
188
189div.demo {
190 padding:12px;
191 font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif";
192}
193
194div.demo h3.docs { clear:left; font-size:12px; font-weight:normal; padding:0 0 1em; margin:0; }
195
196div.demo-description {
197 clear:both;
198 padding:12px;
199 font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif";
200 font-size: 1.3em;
201 line-height: 1.4em;
202}
203
204.ui-draggable, .ui-droppable {
205 background-position: top left;
206}
207
208.left-nav .demos-nav {
209 padding-right: 10px;
210}
211
212#demo-link { font-size:11px; padding-top: 6px; clear: both; overflow: hidden; }
213#demo-link a span.ui-icon { float:left; margin-right:3px; }
214
215/* Component containers
216----------------------------------*/
217#widget-docs .ui-widget { font-family: Trebuchet MS,Verdana,Arial,sans-serif; font-size: 1em; }
218#widget-docs .ui-widget input, #widget-docs .ui-widget select, #widget-docs .ui-widget textarea, #widget-docs .ui-widget button { font-family: Trebuchet MS,Verdana,Arial,sans-serif; font-size: 1em; }
219#widget-docs .ui-widget-header { border: 1px solid #ffffff; background: #464646 url(images/464646_40x100_textures_01_flat_100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
220#widget-docs .ui-widget-header a { color: #ffffff; }
221#widget-docs .ui-widget-content { border: 1px solid #ffffff; background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 50% 50% repeat-x; color: #222222; }
222#widget-docs .ui-widget-content a { color: #222222; }
223
224/* Interaction states
225----------------------------------*/
226#widget-docs .ui-state-default, #widget-docs .ui-widget-content #widget-docs .ui-state-default { border: 1px solid #666666; background: #555555 url(images/555555_40x100_textures_03_highlight_soft_75.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; outline: none; }
227#widget-docs .ui-state-default a { color: #ffffff; text-decoration: none; outline: none; }
228#widget-docs .ui-state-hover, #widget-docs .ui-widget-content #widget-docs .ui-state-hover, #widget-docs .ui-state-focus, #widget-docs .ui-widget-content #widget-docs .ui-state-focus { border: 1px solid #666666; background: #444444 url(images/444444_40x100_textures_03_highlight_soft_60.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; outline: none; }
229#widget-docs .ui-state-hover a { color: #ffffff; text-decoration: none; outline: none; }
230#widget-docs .ui-state-active, #widget-docs .ui-widget-content #widget-docs .ui-state-active { border: 1px solid #666666; background: #ffffff url(images/ffffff_40x100_textures_01_flat_65.png) 50% 50% repeat-x; font-weight: normal; color: #F6921E; outline: none; }
231#widget-docs .ui-state-active a { color: #F6921E; outline: none; text-decoration: none; }
232
233/* Interaction Cues
234----------------------------------*/
235#widget-docs .ui-state-highlight, #widget-docs .ui-widget-content #widget-docs .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/fbf9ee_40x100_textures_02_glass_55.png) 50% 50% repeat-x; color: #363636; }
236#widget-docs .ui-state-error, #widget-docs .ui-widget-content #widget-docs .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/fef1ec_40x100_textures_05_inset_soft_95.png) 50% bottom repeat-x; color: #cd0a0a; }
237#widget-docs .ui-state-error-text, #widget-docs .ui-widget-content #widget-docs .ui-state-error-text { color: #cd0a0a; }
238#widget-docs .ui-state-disabled, #widget-docs .ui-widget-content #widget-docs .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
239#widget-docs .ui-priority-primary, #widget-docs .ui-widget-content #widget-docs .ui-priority-primary { font-weight: bold; }
240#widget-docs .ui-priority-secondary, #widget-docs .ui-widget-content #widget-docs .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
241
242/* Icons
243----------------------------------*/
244
245/* states and images */
246#demo-frame-wrapper .ui-icon, #widget-docs .ui-icon { width: 16px; height: 16px; background-image: url(images/222222_256x240_icons_icons.png); }
247#widget-docs .ui-widget-content .ui-icon {background-image: url(images/222222_256x240_icons_icons.png); }
248#widget-docs .ui-widget-header .ui-icon {background-image: url(images/222222_256x240_icons_icons.png); }
249#widget-docs .ui-state-default .ui-icon { background-image: url(images/888888_256x240_icons_icons.png); }
250#widget-docs .ui-state-hover .ui-icon, #widget-docs .ui-state-focus .ui-icon {background-image: url(images/454545_256x240_icons_icons.png); }
251#widget-docs .ui-state-active .ui-icon {background-image: url(images/454545_256x240_icons_icons.png); }
252#widget-docs .ui-state-highlight .ui-icon {background-image: url(images/2e83ff_256x240_icons_icons.png); }
253#widget-docs .ui-state-error .ui-icon, #widget-docs .ui-state-error-text .ui-icon {background-image: url(images/cd0a0a_256x240_icons_icons.png); }
254
255
256/* Misc visuals
257----------------------------------*/
258
259/* Corner radius */
260#widget-docs .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
261#widget-docs .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
262#widget-docs .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
263#widget-docs .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
264#widget-docs .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
265#widget-docs .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
266#widget-docs .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
267#widget-docs .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
268#widget-docs .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
269
270/* Overlays */
271#widget-docs .ui-widget-overlay { background: #aaaaaa url(images/aaaaaa_40x100_textures_01_flat_0.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
272#widget-docs .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/aaaaaa_40x100_textures_01_flat_0.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }
273
274/*
275----------------------------------*/
276
277#widget-docs { margin:20px 0 0; border: none; }
278
279#widget-docs h2, #widget-docs h3, #widget-docs h4, #widget-docs p, #widget-docs ul, #widget-docs code { margin:0; padding:0; }
280#widget-docs code { display:block; color:#444; font-size:.9em; margin:0 0 1em; }
281#widget-docs code strong { color:#000; }
282#widget-docs p { margin:0 3em 1.2em 0; }
283#widget-docs p.intro { font-size:13px; color:#666; line-height:1.3; }
284#widget-docs ul { list-style-type: none; }
285
286#widget-docs h2 { font-size:16px; margin:1.2em 0 .5em; }
287#widget-docs h3 { font-size:14px; color:#e6820E; margin:1.5em 0 .5em; }
288.normal #widget-docs h4 { font-size:12px; color:#000; border:0; margin:0 0 .5em; }
289
290#docs-overview-main { width:400px; }
291#docs-overview-sidebar { float:right; width:200px; }
292#docs-overview-sidebar a span { color:#666; }
293#widget-docs #docs-overview-main p { margin-right:0; }
294#widget-docs #docs-overview-sidebar h4 { padding-left:0; }
295
296.docs-list-header { float:left; width:100%; margin:10px 0 0; border-bottom:1px solid #eee; }
297#widget-docs .docs-list-header h2 { float:left; margin:0; }
298#widget-docs .docs-list-header p { float:right; margin:5px 0; font-size:11px; }
299
300.docs-list { float:left; width:100%; padding:0 0 10px; }
301.docs-list .param-header { float:left; clear:left; width:100%; padding:8px 0; border-top:1px solid #eee; }
302#widget-docs .param-header h3, #widget-docs .param-header p { margin:0; float:left; }
303#widget-docs .param-header h3 { width:50%; }
304#widget-docs .param-header h3 span { background: url(images/demo-spindown-closed.gif) no-repeat left; padding-left:13px; }
305#widget-docs .param-open .param-header h3 span { background: url(images/demo-spindown-open.gif) no-repeat left; }
306#widget-docs .param-header p { width:24%; }
307#widget-docs .param-header p.param-type span { background: url(images/icon-docs-info.gif) no-repeat left; cursor:pointer; border-bottom:1px dashed #ccc; padding-left:15px; }
308
309.param-details { padding-left:13px; }
310.param-args { margin:0 0 1.5em; border-top:1px dotted #ccc;}
311.param-args td { padding:3px 30px 3px 5px; border-bottom:1px dotted #ccc; }
312
313
314/* overrides for ui-tab styles */
315#widget-docs ul.ui-tabs-nav { padding:0 0 0 8px; }
316#widget-docs .ui-tabs-nav li { margin:5px 5px 0 0; }
317
318#widget-docs .ui-tabs-nav li a:link,
319#widget-docs .ui-tabs-nav li a:visited,
320#widget-docs .ui-tabs-nav li a:hover,
321#widget-docs .ui-tabs-nav li a:active { font-size:14px; padding:4px 1.2em 3px; color:#fff; }
322
323#widget-docs .ui-tabs-nav li.ui-tabs-selected a:link,
324#widget-docs .ui-tabs-nav li.ui-tabs-selected a:visited,
325#widget-docs .ui-tabs-nav li.ui-tabs-selected a:hover,
326#widget-docs .ui-tabs-nav li.ui-tabs-selected a:active { color:#e6820E; }
327
328#widget-docs .ui-tabs-panel { padding:20px 9px; font-size:12px; line-height:1.4; color:#000; }
329
330#widget-docs .ui-widget-content a:link,
331#widget-docs .ui-widget-content a:visited { color:#1b75bb; text-decoration:none; }
332#widget-docs .ui-widget-content a:hover,
333#widget-docs .ui-widget-content a:active { color:#0b559b; }
334
diff --git a/static/development-bundle/demos/dialog/default.html b/static/development-bundle/demos/dialog/default.html
new file mode 100644
index 0000000..9d65926
--- /dev/null
+++ b/static/development-bundle/demos/dialog/default.html
@@ -0,0 +1,51 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Dialog - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
10 <script type="text/javascript" src="../../ui/ui.dialog.js"></script>
11 <script type="text/javascript" src="../../external/bgiframe/jquery.bgiframe.js"></script>
12 <link type="text/css" href="../demos.css" rel="stylesheet" />
13 <script type="text/javascript">
14 $.ui.dialog.defaults.bgiframe = true;
15 $(function() {
16 $("#dialog").dialog();
17 });
18 </script>
19</head>
20<body>
21
22<div class="demo">
23
24<div id="dialog" title="Basic dialog">
25 <p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
26</div>
27
28<!-- Sample page content to illustrate the layering of the dialog -->
29<div class="hiddenInViewSource" style="padding:20px;">
30<p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
31<form>
32 <input value="text input" /><br />
33 <input type="checkbox" />checkbox<br />
34 <input type="radio" />radio<br />
35 <select>
36 <option>select</option>
37 </select><br /><br />
38 <textarea>textarea</textarea><br />
39</form>
40</div><!-- End sample page content -->
41
42</div><!-- End demo -->
43
44<div class="demo-description">
45
46<p>The basic dialog window is an overlay positioned within the viewport and is protected from page content (like select elements) shining through with an iframe. It has a title bar and a content area, and can be moved, resized and closed with the 'x' icon by default.</p>
47
48</div><!-- End demo-description -->
49
50</body>
51</html>
diff --git a/static/development-bundle/demos/dialog/index.html b/static/development-bundle/demos/dialog/index.html
new file mode 100644
index 0000000..bed31ab
--- /dev/null
+++ b/static/development-bundle/demos/dialog/index.html
@@ -0,0 +1,21 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Dialog Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="modal.html">Modal dialog</a></li>
14 <li><a href="modal-message.html">Modal message</a></li>
15 <li><a href="modal-confirmation.html">Modal confirmation</a></li>
16 <li><a href="modal-form.html">Modal form</a></li>
17 </ul>
18</div>
19
20</body>
21</html>
diff --git a/static/development-bundle/demos/dialog/modal-confirmation.html b/static/development-bundle/demos/dialog/modal-confirmation.html
new file mode 100644
index 0000000..f46fb19
--- /dev/null
+++ b/static/development-bundle/demos/dialog/modal-confirmation.html
@@ -0,0 +1,67 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Dialog - Modal confirmation</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
10 <script type="text/javascript" src="../../ui/ui.dialog.js"></script>
11 <script type="text/javascript" src="../../external/bgiframe/jquery.bgiframe.js"></script>
12 <link type="text/css" href="../demos.css" rel="stylesheet" />
13 <script type="text/javascript">
14 $(function() {
15 $("#dialog").dialog({
16 bgiframe: true,
17 resizable: false,
18 height:140,
19 modal: true,
20 overlay: {
21 backgroundColor: '#000',
22 opacity: 0.5
23 },
24 buttons: {
25 'Delete all items in recycle bin': function() {
26 $(this).dialog('close');
27 },
28 Cancel: function() {
29 $(this).dialog('close');
30 }
31 }
32 });
33 });
34 </script>
35</head>
36<body>
37
38<div class="demo">
39
40<div id="dialog" title="Empty the recycle bin?">
41 <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>These items will be permanently deleted and cannot be recovered. Are you sure?</p>
42</div>
43
44<!-- Sample page content to illustrate the layering of the dialog -->
45<div class="hiddenInViewSource" style="padding:20px;">
46 <p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
47 <form>
48 <input value="text input" /><br />
49 <input type="checkbox" />checkbox<br />
50 <input type="radio" />radio<br />
51 <select>
52 <option>select</option>
53 </select><br /><br />
54 <textarea>textarea</textarea><br />
55 </form>
56</div><!-- End sample page content -->
57
58</div><!-- End demo -->
59
60<div class="demo-description">
61
62<p>Confirm an action that may be destructive or important. Set the <code>modal</code> option to true, and specify primary and secondary user actions with the <code>buttons</code> option.</p>
63
64</div><!-- End demo-description -->
65
66</body>
67</html>
diff --git a/static/development-bundle/demos/dialog/modal-form.html b/static/development-bundle/demos/dialog/modal-form.html
new file mode 100644
index 0000000..68a3648
--- /dev/null
+++ b/static/development-bundle/demos/dialog/modal-form.html
@@ -0,0 +1,178 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Dialog - Modal form</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
10 <script type="text/javascript" src="../../ui/ui.dialog.js"></script>
11 <script type="text/javascript" src="../../ui/effects.core.js"></script>
12 <script type="text/javascript" src="../../ui/effects.highlight.js"></script>
13 <script type="text/javascript" src="../../external/bgiframe/jquery.bgiframe.js"></script>
14 <link type="text/css" href="../demos.css" rel="stylesheet" />
15 <style type="text/css">
16 body { font-size: 62.5%; }
17 label, input { display:block; }
18 input.text { margin-bottom:12px; width:95%; padding: .4em; }
19 fieldset { padding:0; border:0; margin-top:25px; }
20 h1 { font-size: 1.2em; margin: .6em 0; }
21 div#users-contain { width: 350px; margin: 20px 0; }
22 div#users-contain table { margin: 1em 0; border-collapse: collapse; width: 100%; }
23 div#users-contain table td, div#users-contain table th { border: 1px solid #eee; padding: .6em 10px; text-align: left; }
24 .ui-button { outline: 0; margin:0; padding: .4em 1em .5em; text-decoration:none; !important; cursor:pointer; position: relative; text-align: center; }
25 .ui-dialog .ui-state-highlight, .ui-dialog .ui-state-error { padding: .3em; }
26
27
28 </style>
29 <script type="text/javascript">
30 $(function() {
31
32 var name = $("#name"),
33 email = $("#email"),
34 password = $("#password"),
35 allFields = $([]).add(name).add(email).add(password),
36 tips = $("#validateTips");
37
38 function updateTips(t) {
39 tips.text(t).effect("highlight",{},1500);
40 }
41
42 function checkLength(o,n,min,max) {
43
44 if ( o.val().length > max || o.val().length < min ) {
45 o.addClass('ui-state-error');
46 updateTips("Length of " + n + " must be between "+min+" and "+max+".");
47 return false;
48 } else {
49 return true;
50 }
51
52 }
53
54 function checkRegexp(o,regexp,n) {
55
56 if ( !( regexp.test( o.val() ) ) ) {
57 o.addClass('ui-state-error');
58 updateTips(n);
59 return false;
60 } else {
61 return true;
62 }
63
64 }
65
66 $("#dialog").dialog({
67 bgiframe: true,
68 autoOpen: false,
69 height: 300,
70 modal: true,
71 buttons: {
72 'Create an account': function() {
73 var bValid = true;
74 allFields.removeClass('ui-state-error');
75
76 bValid = bValid && checkLength(name,"username",3,16);
77 bValid = bValid && checkLength(email,"email",6,80);
78 bValid = bValid && checkLength(password,"password",5,16);
79
80 bValid = bValid && checkRegexp(name,/^[a-z]([0-9a-z_])+$/i,"Username may consist of a-z, 0-9, underscores, begin with a letter.");
81 // From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
82 bValid = bValid && checkRegexp(email,/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,"eg. ui@jquery.com");
83 bValid = bValid && checkRegexp(password,/^([0-9a-zA-Z])+$/,"Password field only allow : a-z 0-9");
84
85 if (bValid) {
86 $('#users tbody').append('<tr>' +
87 '<td>' + name.val() + '</td>' +
88 '<td>' + email.val() + '</td>' +
89 '<td>' + password.val() + '</td>' +
90 '</tr>');
91 $(this).dialog('close');
92 }
93 },
94 Cancel: function() {
95 $(this).dialog('close');
96 }
97 },
98 close: function() {
99 allFields.val('').removeClass('ui-state-error');
100 }
101 });
102
103
104
105 $('#create-user').click(function() {
106 $('#dialog').dialog('open');
107 })
108 .hover(
109 function(){
110 $(this).addClass("ui-state-hover");
111 },
112 function(){
113 $(this).removeClass("ui-state-hover");
114 }
115 ).mousedown(function(){
116 $(this).addClass("ui-state-active");
117 })
118 .mouseup(function(){
119 $(this).removeClass("ui-state-active");
120 });
121
122 });
123 </script>
124</head>
125<body>
126
127<div class="demo">
128
129<div id="dialog" title="Create new user">
130 <p id="validateTips">All form fields are required.</p>
131
132 <form>
133 <fieldset>
134 <label for="name">Name</label>
135 <input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" />
136 <label for="email">Email</label>
137 <input type="text" name="email" id="email" value="" class="text ui-widget-content ui-corner-all" />
138 <label for="password">Password</label>
139 <input type="password" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" />
140 </fieldset>
141 </form>
142</div>
143
144
145<div id="users-contain" class="ui-widget">
146
147 <h1>Existing Users:</h1>
148
149
150 <table id="users" class="ui-widget ui-widget-content">
151 <thead>
152 <tr class="ui-widget-header ">
153 <th>Name</th>
154 <th>Email</th>
155 <th>Password</th>
156 </tr>
157 </thead>
158 <tbody>
159 <tr>
160 <td>John Doe</td>
161 <td>john.doe@example.com</td>
162 <td>johndoe1</td>
163 </tr>
164 </tbody>
165 </table>
166</div>
167<button id="create-user" class="ui-button ui-state-default ui-corner-all">Create new user</button>
168
169</div><!-- End demo -->
170
171<div class="demo-description">
172
173<p>Use a modal dialog to require that the user enter data during a multi-step process. Embed form markup in the content area, set the <code>modal</code> option to true, and specify primary and secondary user actions with the <code>buttons</code> option.</p>
174
175</div><!-- End demo-description -->
176
177</body>
178</html>
diff --git a/static/development-bundle/demos/dialog/modal-message.html b/static/development-bundle/demos/dialog/modal-message.html
new file mode 100644
index 0000000..df60a5e
--- /dev/null
+++ b/static/development-bundle/demos/dialog/modal-message.html
@@ -0,0 +1,64 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Dialog - Modal message</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
10 <script type="text/javascript" src="../../ui/ui.dialog.js"></script>
11 <script type="text/javascript" src="../../external/bgiframe/jquery.bgiframe.js"></script>
12 <link type="text/css" href="../demos.css" rel="stylesheet" />
13 <script type="text/javascript">
14 $(function() {
15 $("#dialog").dialog({
16 bgiframe: true,
17 modal: true,
18 buttons: {
19 Ok: function() {
20 $(this).dialog('close');
21 }
22 }
23 });
24 });
25 </script>
26</head>
27<body>
28
29<div class="demo">
30
31<div id="dialog" title="Download complete">
32 <p>
33 <span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
34 Your files have downloaded successfully into the My Downloads folder.
35 </p>
36 <p>
37 Currently using <b>36% of your storage space</b>.
38 </p>
39</div>
40
41<!-- Sample page content to illustrate the layering of the dialog -->
42<div class="hiddenInViewSource" style="padding:20px;">
43 <p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
44 <form>
45 <input value="text input" /><br />
46 <input type="checkbox" />checkbox<br />
47 <input type="radio" />radio<br />
48 <select>
49 <option>select</option>
50 </select><br /><br />
51 <textarea>textarea</textarea><br />
52 </form>
53</div><!-- End sample page content -->
54
55</div><!-- End demo -->
56
57<div class="demo-description">
58
59<p>Use a modal dialog to explicitly acknowledge information or an action before continuing their work. Set the <code>modal</code> option to true, and specify a primary action (Ok) with the <code>buttons</code> option.</p>
60
61</div><!-- End demo-description -->
62
63</body>
64</html>
diff --git a/static/development-bundle/demos/dialog/modal.html b/static/development-bundle/demos/dialog/modal.html
new file mode 100644
index 0000000..dab3ea5
--- /dev/null
+++ b/static/development-bundle/demos/dialog/modal.html
@@ -0,0 +1,55 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Dialog - Basic modal</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
10 <script type="text/javascript" src="../../ui/ui.dialog.js"></script>
11 <script type="text/javascript" src="../../external/bgiframe/jquery.bgiframe.js"></script>
12 <link type="text/css" href="../demos.css" rel="stylesheet" />
13 <script type="text/javascript">
14 $(function() {
15 $("#dialog").dialog({
16 bgiframe: true,
17 height: 140,
18 modal: true
19 });
20 });
21 </script>
22</head>
23<body>
24
25
26<div class="demo">
27
28<div id="dialog" title="Basic modal dialog">
29 <p>Adding the modal overlay screen makes the dialog look more prominent because it dims out the page content.</p>
30</div>
31
32<!-- Sample page content to illustrate the layering of the dialog -->
33<div class="hiddenInViewSource" style="padding:20px;">
34 <p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
35 <form>
36 <input value="text input" /><br />
37 <input type="checkbox" />checkbox<br />
38 <input type="radio" />radio<br />
39 <select>
40 <option>select</option>
41 </select><br /><br />
42 <textarea>textarea</textarea><br />
43 </form>
44</div><!-- End sample page content -->
45
46</div><!-- End demo -->
47
48<div class="demo-description">
49
50<p>A modal dialog prevents the user from interacting with the rest of the page until it is closed. To add a semi-transparent layer that dims out the page content behind the dialog, set the background color and opacity of the <code>overlay</code> option.</p>
51
52</div><!-- End demo-description -->
53
54</body>
55</html>
diff --git a/static/development-bundle/demos/draggable/constrain-movement.html b/static/development-bundle/demos/draggable/constrain-movement.html
new file mode 100644
index 0000000..73496bb
--- /dev/null
+++ b/static/development-bundle/demos/draggable/constrain-movement.html
@@ -0,0 +1,67 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Constrain movement</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 .draggable { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
12 #draggable, #draggable2 { margin-bottom:20px; }
13 #draggable { cursor: n-resize; }
14 #draggable2 { cursor: e-resize; }
15 #containment-wrapper { width: 95%; height:150px; border:2px solid #ccc; padding: 10px;}
16 </style>
17 <script type="text/javascript">
18 $(function() {
19 $("#draggable").draggable({ axis: 'y' });
20 $("#draggable2").draggable({ axis: 'x' });
21
22 $("#draggable3").draggable({ containment: '#containment-wrapper', scroll: false });
23 $("#draggable4").draggable({ containment: '#demo-frame' });
24 $("#draggable5").draggable({ containment: 'parent' });
25
26 });
27 </script>
28</head>
29<body>
30<div class="demo">
31
32<h3 class="docs">Constrain movement along an axis:</h3>
33
34<div id="draggable" class="draggable ui-widget-content">
35 <p>I can be dragged only vertically</p>
36</div>
37
38<div id="draggable2" class="draggable ui-widget-content">
39 <p>I can be dragged only horizontally</p>
40</div>
41
42<h3 class="docs">Or to within another DOM element:</h3>
43<div id="containment-wrapper">
44<div id="draggable3" class="draggable ui-widget-content">
45 <p>I'm contained within the box</p>
46</div>
47
48<div id="draggable4" class="draggable ui-widget-content">
49 <p>I'm contained within the box's parent</p>
50</div>
51
52<div class="draggable ui-widget-content">
53 <p id="draggable5" class="ui-widget-header">I'm contained within my parent</p>
54</div>
55</div>
56
57</div><!-- End demo -->
58
59<div class="demo-description">
60
61<p>
62Constrain the movement of each draggable by defining the boundaries of the draggable area. Set the <code>axis</code> option to limit the draggable's path to the x- or y-axis, or use the <code>containment</code> option to specify a parent DOM element or a jQuery selector, like 'document.'
63</p>
64
65</div><!-- End demo-description -->
66</body>
67</html>
diff --git a/static/development-bundle/demos/draggable/cursor-style.html b/static/development-bundle/demos/draggable/cursor-style.html
new file mode 100644
index 0000000..14b3b29
--- /dev/null
+++ b/static/development-bundle/demos/draggable/cursor-style.html
@@ -0,0 +1,46 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Cursor style</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable, #draggable2, #draggable3 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#draggable").draggable({ cursorAt: { cursor: 'move', top: 56, left: 56 } });
16 $("#draggable2").draggable({ cursorAt: { cursor: 'crosshair', top: -5, left: -5 } });
17 $("#draggable3").draggable({ cursorAt: { bottom: 0 } });
18 });
19 </script>
20</head>
21<body>
22<div class="demo">
23
24<div id="draggable" class="ui-widget-content">
25 <p>I will always stick to the center (relative to the mouse)</p>
26</div>
27
28<div id="draggable2" class="ui-widget-content">
29 <p>My cursor is at left -5 and top -5</p>
30</div>
31
32<div id="draggable3" class="ui-widget-content">
33 <p>My cursor position is only controlled for the 'bottom' value</p>
34</div>
35
36</div><!-- End demo -->
37
38<div class="demo-description">
39
40<p>
41Position the cursor while dragging the object. By default the cursor appears in the center of the dragged object; use the <code>cursorAt</code> option to specify another location relative to the draggable (specify a pixel value from the top, right, bottom, and/or left). Customize the cursor's appearance by supplying the <code>cursor</code> option with a valid CSS cursor value: default, move, pointer, crosshair, etc.
42</p>
43
44</div><!-- End demo-description -->
45</body>
46</html>
diff --git a/static/development-bundle/demos/draggable/default.html b/static/development-bundle/demos/draggable/default.html
new file mode 100644
index 0000000..344accc
--- /dev/null
+++ b/static/development-bundle/demos/draggable/default.html
@@ -0,0 +1,38 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable { width: 150px; height: 150px; padding: 0.5em; }
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#draggable").draggable();
16 });
17 </script>
18</head>
19<body>
20
21<div class="demo">
22
23<div id="draggable" class="ui-widget-content">
24 <p>Drag me around</p>
25</div>
26
27</div><!-- End demo -->
28
29<div class="demo-description">
30
31<p>
32Enable draggable functionality on any DOM element. Move the draggable object by clicking on it with the mouse and dragging it anywhere within the viewport.
33</p>
34
35</div><!-- End demo-description -->
36
37</body>
38</html>
diff --git a/static/development-bundle/demos/draggable/delay-start.html b/static/development-bundle/demos/draggable/delay-start.html
new file mode 100644
index 0000000..6f49d17
--- /dev/null
+++ b/static/development-bundle/demos/draggable/delay-start.html
@@ -0,0 +1,42 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Delay start</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable, #draggable2 { width: 120px; height: 120px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#draggable").draggable({ distance: 20 });
16 $("#draggable2").draggable({ delay: 1000 });
17 $(".ui-draggable").disableSelection();
18 });
19 </script>
20</head>
21<body>
22<div class="demo">
23
24<div id="draggable" class="ui-widget-content">
25 <p>Only if you drag me by 20 pixels, the dragging will start</p>
26</div>
27
28<div id="draggable2" class="ui-widget-content">
29 <p>Regardless of the distance, you have to drag and wait for 1000ms before dragging starts</p>
30</div>
31
32</div><!-- End demo -->
33
34<div class="demo-description">
35
36<p>
37Delay the start of dragging for a number of milliseconds with the <code>delay</code> option; prevent dragging until the cursor is held down and dragged a specifed number of pixels with the <code>distance</code> option.
38</p>
39
40</div><!-- End demo-description -->
41</body>
42</html>
diff --git a/static/development-bundle/demos/draggable/events.html b/static/development-bundle/demos/draggable/events.html
new file mode 100644
index 0000000..ca13a9f
--- /dev/null
+++ b/static/development-bundle/demos/draggable/events.html
@@ -0,0 +1,74 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Events</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable { width: 16em; padding: 0 1em; }
12 #draggable ul li { margin: 1em 0; padding: 0.5em 0; } * html #draggable ul li { height: 1%; }
13 #draggable ul li span.ui-icon { float: left; }
14 #draggable ul li span.count { font-weight: bold; }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18 var $start_counter = $('#event-start'), $drag_counter = $('#event-drag'), $stop_counter = $('#event-stop');
19 var counts = [0,0,0];
20
21 $("#draggable").draggable({
22 start: function() {
23 counts[0]++;
24 updateCounterStatus($start_counter,counts[0]);
25 },
26 drag: function() {
27 counts[1]++;
28 updateCounterStatus($drag_counter,counts[1]);
29 },
30 stop: function() {
31 counts[2]++;
32 updateCounterStatus($stop_counter,counts[2]);
33 }
34 });
35 });
36
37 function updateCounterStatus($event_counter,new_count) {
38 // first update the status visually...
39 if (!$event_counter.hasClass('ui-state-hover')) {
40 $event_counter.addClass('ui-state-hover')
41 .siblings().removeClass('ui-state-hover');
42 }
43 // ...then update the numbers
44 $('span.count',$event_counter).text(new_count);
45 }
46 </script>
47</head>
48<body>
49
50<div class="demo">
51
52<div id="draggable" class="ui-widget ui-widget-content">
53
54 <p>Drag me to trigger the chain of events.</p>
55
56 <ul class="ui-helper-reset">
57 <li id="event-start" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-play"></span>"start" invoked <span class="count">0</span>x</li>
58 <li id="event-drag" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-arrow-4"></span>"drag" invoked <span class="count">0</span>x</li>
59 <li id="event-stop" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-stop"></span>"stop" invoked <span class="count">0</span>x</li>
60 </ul>
61</div>
62
63</div><!-- End demo -->
64
65<div class="demo-description">
66
67<p>
68Layer functionality onto the draggable using the <code>start</code>, <code>drag</code>, and <code>stop</code> events. Start is fired at the start of the drag; drag during the drag; and stop when dragging stops.
69</p>
70
71</div><!-- End demo-description -->
72
73</body>
74</html>
diff --git a/static/development-bundle/demos/draggable/handle.html b/static/development-bundle/demos/draggable/handle.html
new file mode 100644
index 0000000..8433a1e
--- /dev/null
+++ b/static/development-bundle/demos/draggable/handle.html
@@ -0,0 +1,45 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Handles</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
12 #draggable p { cursor: move; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#draggable").draggable({ handle: 'p' });
17 $("#draggable2").draggable({ cancel: "p.ui-widget-header" });
18 $("div, p").disableSelection();
19 });
20 </script>
21</head>
22<body>
23<div class="demo">
24
25<div id="draggable" class="ui-widget-content">
26 <p class="ui-widget-header">I can be dragged only by this handle</p>
27</div>
28
29<div id="draggable2" class="ui-widget-content">
30 <p>You can drag me around&hellip;</p>
31 <p class="ui-widget-header">&hellip;but you can't drag me by this handle.</p>
32</div>
33
34<!-- ADD CANCEL DEMO -->
35
36</div><!-- End demo -->
37
38<div class="demo-description">
39
40<p>Allow dragging only when the cursor is over a specific part of the draggable. Use the <code>handle</code> option to specify the jQuery selector of an element (or group of elements) used to drag the object.</p>
41<p>Or prevent dragging when the cursor is over a specific element (or group of elements) within the draggable. Use the <code>cancel</code> option to specify a jQuery selector over which to "cancel" draggable functionality.</p>
42
43</div><!-- End demo-description -->
44</body>
45</html>
diff --git a/static/development-bundle/demos/draggable/index.html b/static/development-bundle/demos/draggable/index.html
new file mode 100644
index 0000000..ba15243
--- /dev/null
+++ b/static/development-bundle/demos/draggable/index.html
@@ -0,0 +1,27 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="events.html">Events</a></li>
14 <li><a href="constrain-movement.html">Constrain movement</a></li>
15 <li><a href="delay-start.html">Delay start</a></li>
16 <li><a href="snap-to.html">Snap to element or&#160;grid</a></li>
17 <li><a href="scroll.html">Auto-scroll</a></li>
18 <li><a href="revert.html">Revert position</a></li>
19 <li><a href="visual-feedback.html">Visual feedback</a></li>
20 <li><a href="handle.html">Drag handle</a></li>
21 <li><a href="cursor-style.html">Cursor style</a></li>
22 <li><a href="sortable.html">Draggable + Sortable</a></li>
23 </ul>
24</div>
25
26</body>
27</html>
diff --git a/static/development-bundle/demos/draggable/revert.html b/static/development-bundle/demos/draggable/revert.html
new file mode 100644
index 0000000..8433640
--- /dev/null
+++ b/static/development-bundle/demos/draggable/revert.html
@@ -0,0 +1,41 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Revert position</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#draggable").draggable({ revert: true });
16 $("#draggable2").draggable({ revert: true, helper: 'clone' });
17 });
18 </script>
19</head>
20<body>
21<div class="demo">
22
23<div id="draggable" class="ui-widget-content">
24 <p>Revert the original</p>
25</div>
26
27<div id="draggable2" class="ui-widget-content">
28 <p>Revert the helper</p>
29</div>
30
31</div><!-- End demo -->
32
33<div class="demo-description">
34
35<p>
36Return the draggable (or it's helper) to its original location when dragging stops with the boolean <code>revert</code> option.
37</p>
38
39</div><!-- End demo-description -->
40</body>
41</html>
diff --git a/static/development-bundle/demos/draggable/scroll.html b/static/development-bundle/demos/draggable/scroll.html
new file mode 100644
index 0000000..201ce9c
--- /dev/null
+++ b/static/development-bundle/demos/draggable/scroll.html
@@ -0,0 +1,48 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Auto-scroll</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable, #draggable2, #draggable3 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#draggable").draggable({ scroll: true });
16 $("#draggable2").draggable({ scroll: true, scrollSensitivity: 100 });
17 $("#draggable3").draggable({ scroll: true, scrollSpeed: 100 });
18 });
19 </script>
20</head>
21<body>
22<div class="demo">
23
24<div id="draggable" class="ui-widget-content">
25 <p>Scroll set to true, default settings</p>
26</div>
27
28<div id="draggable2" class="ui-widget-content">
29 <p>scrollSensitivity set to 100</p>
30</div>
31
32<div id="draggable3" class="ui-widget-content">
33 <p>scrollSpeed set to 100</p>
34</div>
35
36<div style='height: 5000px; width: 1px;'></div>
37
38</div><!-- End demo -->
39
40<div class="demo-description">
41
42<p>
43Automatically scroll the document when the draggable is moved beyond the viewport. Set the <code>scroll</code> option to true to enable auto-scrolling, and fine-tune when scrolling is triggered and its speed with the <code>scrollSensitivity</code> and <code>scrollSpeed</code> options.
44</p>
45
46</div><!-- End demo-description -->
47</body>
48</html>
diff --git a/static/development-bundle/demos/draggable/snap-to.html b/static/development-bundle/demos/draggable/snap-to.html
new file mode 100644
index 0000000..43c0585
--- /dev/null
+++ b/static/development-bundle/demos/draggable/snap-to.html
@@ -0,0 +1,67 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Snap to element or grid</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 .draggable { width: 90px; height: 80px; padding: 5px; float: left; margin: 0 10px 10px 0; font-size: .9em; }
12 .ui-widget-header p, .ui-widget-content p { margin: 0; }
13 #snaptarget { height: 140px; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#draggable").draggable({ snap: true });
18 $("#draggable2").draggable({ snap: '.ui-widget-header' });
19 $("#draggable3").draggable({ snap: '.ui-widget-header', snapMode: 'outer' });
20 $("#draggable4").draggable({ grid: [20,20] });
21 $("#draggable5").draggable({ grid: [80, 80] });
22 });
23 </script>
24</head>
25<body>
26<div class="demo">
27
28<div id="snaptarget" class="ui-widget-header">
29 <p>I'm a snap target</p>
30</div>
31
32<br clear="both" />
33
34<div id="draggable" class="draggable ui-widget-content">
35 <p>Default (snap: true), snaps to all other draggable elements</p>
36</div>
37
38<div id="draggable2" class="draggable ui-widget-content">
39 <p>I only snap to the big box</p>
40</div>
41
42<div id="draggable3" class="draggable ui-widget-content">
43 <p>I only snap to the outer edges of the big box</p>
44</div>
45
46<div id="draggable4" class="draggable ui-widget-content">
47 <p>I snap to a 20 x 20 grid</p>
48</div>
49
50<div id="draggable5" class="draggable ui-widget-content">
51 <p>I snap to a 80 x 80 grid</p>
52</div>
53
54</div><!-- End demo -->
55
56<div class="demo-description">
57
58<p>Snap the draggable to the inner or outer boundaries of a DOM element. Use the <code>snap</code>, <code>snapMode</code> (inner, outer, both), and <code>snapTolerance</code> (distance in pixels the draggable must be from the element when snapping is invoked) options. </p>
59
60<p>Or snap the draggable to a grid. Set the dimensions of grid cells (height and width in pixels) with the <code>grid</code> option.</p>
61
62</div><!-- End demo-description -->
63
64
65
66</body>
67</html>
diff --git a/static/development-bundle/demos/draggable/sortable.html b/static/development-bundle/demos/draggable/sortable.html
new file mode 100644
index 0000000..6f15be4
--- /dev/null
+++ b/static/development-bundle/demos/draggable/sortable.html
@@ -0,0 +1,54 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable + Sortable</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <style type="text/css">
12 .demo ul { list-style-type: none; margin: 0; padding: 0; margin-bottom: 10px; }
13 .demo li { margin: 5px; padding: 5px; width: 150px; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#sortable").sortable({
18 revert: true
19 });
20 $("#draggable").draggable({
21 connectToSortable: '#sortable',
22 helper: 'clone',
23 revert: 'invalid'
24 })
25 $("ul, li").disableSelection();
26 });
27 </script>
28</head>
29<body>
30<div class="demo">
31
32<ul>
33 <li id="draggable" class="ui-state-highlight">Drag me down</li>
34</ul>
35
36<ul id="sortable">
37 <li class="ui-state-default">Item 1</li>
38 <li class="ui-state-default">Item 2</li>
39 <li class="ui-state-default">Item 3</li>
40 <li class="ui-state-default">Item 4</li>
41 <li class="ui-state-default">Item 5</li>
42</ul>
43
44</div><!-- End demo -->
45
46<div class="demo-description">
47
48<p>
49Draggables are built to interact seamlessly with <a href="#">sortables</a>.
50</p>
51
52</div><!-- End demo-description -->
53</body>
54</html>
diff --git a/static/development-bundle/demos/draggable/visual-feedback.html b/static/development-bundle/demos/draggable/visual-feedback.html
new file mode 100644
index 0000000..25c42fd
--- /dev/null
+++ b/static/development-bundle/demos/draggable/visual-feedback.html
@@ -0,0 +1,73 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Draggable - Visual feedback</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #draggable, #draggable2, #draggable3, #set div { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
12 #draggable, #draggable2, #draggable3 { margin-bottom:20px; }
13 #set { clear:both; float:left; width: 368px; height: 120px; }
14 p { clear:both; margin:0; padding:1em 0; }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18 $("#draggable").draggable({ helper: 'original' });
19 $("#draggable2").draggable({ opacity: 0.7, helper: 'clone' });
20 $("#draggable3").draggable({
21 cursor: 'move',
22 cursorAt: { top: -12, left: -20 },
23 helper: function(event) {
24 return $('<div class="ui-widget-header">I\'m a custom helper</div>');
25 }
26 });
27 $("#set div").draggable({ stack: { group: '#set div', min: 1 } });
28 });
29 </script>
30</head>
31<body>
32<div class="demo">
33
34<h3 class="docs">With helpers:</h3>
35
36<div id="draggable" class="ui-widget-content">
37 <p>Original</p>
38</div>
39
40<div id="draggable2" class="ui-widget-content">
41 <p>Semi-transparent clone</p>
42</div>
43
44<div id="draggable3" class="ui-widget-content">
45 <p>Custom helper (in combination with cursorAt)</p>
46</div>
47
48<h3 class="docs">Stacked:</h3>
49<div id="set">
50 <div class="ui-widget-content">
51 <p>We are draggables..</p>
52 </div>
53
54 <div class="ui-widget-content">
55 <p>..whose z-indexes are controlled automatically..</p>
56 </div>
57
58 <div class="ui-widget-content">
59 <p>..with the stack option.</p>
60 </div>
61</div>
62
63</div><!-- End demo -->
64
65<div class="demo-description">
66
67<p>Provide feedback to users as they drag an object in the form of a helper. The <code>helper</code> option accepts the values 'original' (the draggable object moves with the cursor), 'clone' (a duplicate of the draggable moves with the cursor), or a function that returns a DOM element (that element is shown near the cursor during drag). Control the helper's transparency with the <code>opacity</code> option.</p>
68
69<p>To clarify which draggable is in play, bring the draggable in motion to front. Use the <code>zIndex</code> option to set a higher z-index for the helper, if in play, or use the <code>stack</code> option to ensure that the last item dragged will appear on top of others in the same group on drag stop.</p>
70
71</div><!-- End demo-description -->
72</body>
73</html>
diff --git a/static/development-bundle/demos/droppable/accepted-elements.html b/static/development-bundle/demos/droppable/accepted-elements.html
new file mode 100644
index 0000000..3a12baa
--- /dev/null
+++ b/static/development-bundle/demos/droppable/accepted-elements.html
@@ -0,0 +1,55 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Droppable - Accept Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <style type="text/css">
12 #droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
13 #draggable, #draggable-nonvalid { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17
18 $("#draggable, #draggable-nonvalid").draggable();
19
20 $("#droppable").droppable({
21 accept: '#draggable',
22 activeClass: 'ui-state-hover',
23 hoverClass: 'ui-state-active',
24 drop: function(event, ui) {
25 $(this).addClass('ui-state-highlight').find('p').html('Dropped!');
26 }
27 });
28
29 });
30 </script>
31</head>
32<body>
33<div class="demo">
34
35<div id="draggable-nonvalid" class="ui-widget-content">
36 <p>I'm draggable but can't be dropped</p>
37</div>
38
39<div id="draggable" class="ui-widget-content">
40 <p>Drag me to my target</p>
41</div>
42
43<div id="droppable" class="ui-widget-header">
44 <p>accept: '#draggable'</p>
45</div>
46
47</div><!-- End demo -->
48
49<div class="demo-description">
50
51<p>Specify using the <code>accept</code> option which element (or group of elements) is accepted by the target droppable.</p>
52
53</div><!-- End demo-description -->
54</body>
55</html>
diff --git a/static/development-bundle/demos/droppable/default.html b/static/development-bundle/demos/droppable/default.html
new file mode 100644
index 0000000..03fdace
--- /dev/null
+++ b/static/development-bundle/demos/droppable/default.html
@@ -0,0 +1,46 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Droppable - Default Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <style type="text/css">
12 #draggable { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
13 #droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#draggable").draggable();
18 $("#droppable").droppable({
19 drop: function(event, ui) {
20 $(this).addClass('ui-state-highlight').find('p').html('Dropped!');
21 }
22 });
23
24 });
25 </script>
26</head>
27<body>
28<div class="demo">
29
30<div id="draggable" class="ui-widget-content">
31 <p>Drag me to my target</p>
32</div>
33
34<div id="droppable" class="ui-widget-header">
35 <p>Drop here</p>
36</div>
37
38</div><!-- End demo -->
39
40<div class="demo-description">
41
42<p>Enable any DOM element to be droppable, a target for draggable elements.</p>
43
44</div><!-- End demo-description -->
45</body>
46</html>
diff --git a/static/development-bundle/demos/droppable/images/high_tatras.jpg b/static/development-bundle/demos/droppable/images/high_tatras.jpg
new file mode 100644
index 0000000..e2365c2
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/images/high_tatras2.jpg b/static/development-bundle/demos/droppable/images/high_tatras2.jpg
new file mode 100644
index 0000000..909024a
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras2.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/images/high_tatras2_min.jpg b/static/development-bundle/demos/droppable/images/high_tatras2_min.jpg
new file mode 100644
index 0000000..493e082
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras2_min.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/images/high_tatras3.jpg b/static/development-bundle/demos/droppable/images/high_tatras3.jpg
new file mode 100644
index 0000000..05a4395
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras3.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/images/high_tatras3_min.jpg b/static/development-bundle/demos/droppable/images/high_tatras3_min.jpg
new file mode 100644
index 0000000..4aa96b0
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras3_min.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/images/high_tatras4.jpg b/static/development-bundle/demos/droppable/images/high_tatras4.jpg
new file mode 100644
index 0000000..ed753d1
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras4.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/images/high_tatras4_min.jpg b/static/development-bundle/demos/droppable/images/high_tatras4_min.jpg
new file mode 100644
index 0000000..794dbdf
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras4_min.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/images/high_tatras_min.jpg b/static/development-bundle/demos/droppable/images/high_tatras_min.jpg
new file mode 100644
index 0000000..51e0cde
--- /dev/null
+++ b/static/development-bundle/demos/droppable/images/high_tatras_min.jpg
Binary files differ
diff --git a/static/development-bundle/demos/droppable/index.html b/static/development-bundle/demos/droppable/index.html
new file mode 100644
index 0000000..3ffa565
--- /dev/null
+++ b/static/development-bundle/demos/droppable/index.html
@@ -0,0 +1,22 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Droppable Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="accepted-elements.html">Accepted elements</a></li>
14 <li><a href="propagation.html">Prevent propagation</a></li>
15 <li><a href="visual-feedback.html">Visual feedback</a></li>
16 <li><a href="revert.html">Revert draggable position</a></li>
17 <li><a href="photo-manager.html">Simple photo manager</a></li>
18 </ul>
19</div>
20
21</body>
22</html>
diff --git a/static/development-bundle/demos/droppable/photo-manager.html b/static/development-bundle/demos/droppable/photo-manager.html
new file mode 100644
index 0000000..868085a
--- /dev/null
+++ b/static/development-bundle/demos/droppable/photo-manager.html
@@ -0,0 +1,164 @@
1<!doctype html>
2<html lang="en">
3 <head>
4 <title>jQuery UI Droppable - Simple photo manager</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
10 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
11 <script type="text/javascript" src="../../ui/ui.dialog.js"></script>
12 <link type="text/css" href="../demos.css" rel="stylesheet" />
13 <style type="text/css">
14 #gallery { float: left; width: 65%; min-height: 12em; } * html #gallery { height: 12em; } /* IE6 */
15 .gallery.custom-state-active { background: #eee; }
16 .gallery li { float: left; width: 96px; padding: 0.4em; margin: 0 0.4em 0.4em 0; text-align: center; }
17 .gallery li h5 { margin: 0 0 0.4em; cursor: move; }
18 .gallery li a { float: right; }
19 .gallery li a.ui-icon-zoomin { float: left; }
20 .gallery li img { width: 100%; cursor: move; }
21
22 #trash { float: right; width: 32%; min-height: 18em; padding: 1%;} * html #trash { height: 18em; } /* IE6 */
23 #trash h4 { line-height: 16px; margin: 0 0 0.4em; }
24 #trash h4 .ui-icon { float: left; }
25 #trash .gallery h5 { display: none; }
26 </style>
27 <script type="text/javascript">
28 $(function() {
29 // there's the gallery and the trash
30 var $gallery = $('#gallery'), $trash = $('#trash');
31
32 // let the gallery items be draggable
33 $('li',$gallery).draggable({
34 cancel: 'a.ui-icon',// clicking an icon won't initiate dragging
35 revert: 'invalid', // when not dropped, the item will revert back to its initial position
36 containment: $('#demo-frame').length ? '#demo-frame' : 'document', // stick to demo-frame if present
37 helper: 'clone',
38 cursor: 'move'
39 });
40
41 // let the trash be droppable, accepting the gallery items
42 $trash.droppable({
43 accept: '#gallery > li',
44 activeClass: 'ui-state-highlight',
45 drop: function(ev, ui) {
46 deleteImage(ui.draggable);
47 }
48 });
49
50 // let the gallery be droppable as well, accepting items from the trash
51 $gallery.droppable({
52 accept: '#trash li',
53 activeClass: 'custom-state-active',
54 drop: function(ev, ui) {
55 recycleImage(ui.draggable);
56 }
57 });
58
59 // image deletion function
60 var recycle_icon = '<a href="link/to/recycle/script/when/we/have/js/off" title="Recycle this image" class="ui-icon ui-icon-refresh">Recycle image</a>';
61 function deleteImage($item) {
62 $item.fadeOut(function() {
63 var $list = $('ul',$trash).length ? $('ul',$trash) : $('<ul class="gallery ui-helper-reset"/>').appendTo($trash);
64
65 $item.find('a.ui-icon-trash').remove();
66 $item.append(recycle_icon).appendTo($list).fadeIn(function() {
67 $item.animate({ width: '48px' }).find('img').animate({ height: '36px' });
68 });
69 });
70 }
71
72 // image recycle function
73 var trash_icon = '<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>';
74 function recycleImage($item) {
75 $item.fadeOut(function() {
76 $item.find('a.ui-icon-refresh').remove();
77 $item.css('width','96px').append(trash_icon).find('img').css('height','72px').end().appendTo($gallery).fadeIn();
78 });
79 }
80
81 // image preview function, demonstrating the ui.dialog used as a modal window
82 function viewLargerImage($link) {
83 var src = $link.attr('href');
84 var title = $link.siblings('img').attr('alt');
85 var $modal = $('img[src$="'+src+'"]');
86
87 if ($modal.length) {
88 $modal.dialog('open')
89 } else {
90 var img = $('<img alt="'+title+'" width="384" height="288" style="display:none;padding: 8px;" />')
91 .attr('src',src).appendTo('body');
92 setTimeout(function() {
93 img.dialog({
94 title: title,
95 width: 400,
96 modal: true
97 });
98 }, 1);
99 }
100 }
101
102 // resolve the icons behavior with event delegation
103 $('ul.gallery > li').click(function(ev) {
104 var $item = $(this);
105 var $target = $(ev.target);
106
107 if ($target.is('a.ui-icon-trash')) {
108 deleteImage($item);
109 } else if ($target.is('a.ui-icon-zoomin')) {
110 viewLargerImage($target);
111 } else if ($target.is('a.ui-icon-refresh')) {
112 recycleImage($item);
113 }
114
115 return false;
116 });
117 });
118 </script>
119 </head>
120 <body>
121 <div class="demo ui-widget ui-helper-clearfix">
122
123 <ul id="gallery" class="gallery ui-helper-reset ui-helper-clearfix">
124 <li class="ui-widget-content ui-corner-tr">
125 <h5 class="ui-widget-header">High Tatras</h5>
126 <img src="images/high_tatras_min.jpg" alt="The peaks of High Tatras" width="96" height="72" />
127 <a href="images/high_tatras.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
128 <a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
129 </li>
130 <li class="ui-widget-content ui-corner-tr">
131 <h5 class="ui-widget-header">High Tatras 2</h5>
132 <img src="images/high_tatras2_min.jpg" alt="The chalet at the Green mountain lake" width="96" height="72" />
133 <a href="images/high_tatras2.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
134 <a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
135 </li>
136 <li class="ui-widget-content ui-corner-tr">
137 <h5 class="ui-widget-header">High Tatras 3</h5>
138 <img src="images/high_tatras3_min.jpg" alt="Planning the ascent" width="96" height="72" />
139 <a href="images/high_tatras3.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
140 <a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
141 </li>
142 <li class="ui-widget-content ui-corner-tr">
143 <h5 class="ui-widget-header">High Tatras 4</h5>
144 <img src="images/high_tatras4_min.jpg" alt="On top of Kozi kopka" width="96" height="72" />
145 <a href="images/high_tatras4.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
146 <a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
147 </li>
148 </ul>
149
150 <div id="trash" class="ui-widget-content ui-state-default">
151 <h4 class="ui-widget-header"><span class="ui-icon ui-icon-trash">Trash</span> Trash</h4>
152 </div>
153
154 </div><!-- End demo -->
155
156 <div class="demo-description">
157
158 <p>You can delete an image either by dragging it to the Trash or by clicking the trash icon.</p>
159 <p>You can "recycle" an image by dragging it back to the gallery or by clicking the recycle icon.</p>
160 <p>You can view larger image by clicking the zoom icon. jQuery UI dialog widget is used for the modal window.</p>
161
162 </div><!-- End demo-description -->
163 </body>
164</html>
diff --git a/static/development-bundle/demos/droppable/propagation.html b/static/development-bundle/demos/droppable/propagation.html
new file mode 100644
index 0000000..e9c5026
--- /dev/null
+++ b/static/development-bundle/demos/droppable/propagation.html
@@ -0,0 +1,71 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Droppable - Prevent propagation</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <style type="text/css">
12 #draggable { width: 100px; height: 40px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
13 #droppable, #droppable2 { width: 230px; height: 120px; padding: 0.5em; float: left; margin: 10px; }
14 #droppable-inner, #droppable2-inner { width: 170px; height: 60px; padding: 0.5em; float: left; margin: 10px; }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18
19 $("#draggable").draggable();
20
21 $("#droppable, #droppable-inner").droppable({
22 activeClass: 'ui-state-hover',
23 hoverClass: 'ui-state-active',
24 drop: function(event, ui) {
25 $(this).addClass('ui-state-highlight').find('> p').html('Dropped!');
26 return false;
27 }
28 });
29
30 $("#droppable2, #droppable2-inner").droppable({
31 greedy: true,
32 activeClass: 'ui-state-hover',
33 hoverClass: 'ui-state-active',
34 drop: function(event, ui) {
35 $(this).addClass('ui-state-highlight').find('> p').html('Dropped!');
36 }
37 });
38
39 });
40 </script>
41</head>
42<body>
43<div class="demo">
44
45<div id="draggable" class="ui-widget-content">
46 <p>Drag me to my target</p>
47</div>
48
49<div id="droppable" class="ui-widget-header">
50 <p>Outer droppable</p>
51 <div id="droppable-inner" class="ui-widget-header">
52 <p>Inner droppable (not greedy)</p>
53 </div>
54</div>
55
56<div id="droppable2" class="ui-widget-header">
57 <p>Outer droppable</p>
58 <div id="droppable2-inner" class="ui-widget-header">
59 <p>Inner droppable (greedy)</p>
60 </div>
61</div>
62
63</div><!-- End demo -->
64
65<div class="demo-description">
66
67<p>When working with nested droppables &#8212; for example, you may have an editable directory structure displayed as a tree, with folder and document nodes &#8212; the <code>greedy</code> option set to true prevents event propagation when a draggable is dropped on a child node (droppable).</p>
68
69</div><!-- End demo-description -->
70</body>
71</html>
diff --git a/static/development-bundle/demos/droppable/revert.html b/static/development-bundle/demos/droppable/revert.html
new file mode 100644
index 0000000..01fea57
--- /dev/null
+++ b/static/development-bundle/demos/droppable/revert.html
@@ -0,0 +1,55 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Droppable - Revert draggable position</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <style type="text/css">
12 #draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
13 #droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17
18 $("#draggable").draggable({ revert: 'valid' });
19 $("#draggable2").draggable({ revert: 'invalid' });
20
21 $("#droppable").droppable({
22 activeClass: 'ui-state-hover',
23 hoverClass: 'ui-state-active',
24 drop: function(event, ui) {
25 $(this).addClass('ui-state-highlight').find('p').html('Dropped!');
26 }
27 });
28
29 });
30 </script>
31</head>
32<body>
33<div class="demo">
34
35<div id="draggable" class="ui-widget-content">
36 <p>I revert when I'm dropped</p>
37</div>
38
39<div id="draggable2" class="ui-widget-content">
40 <p>I revert when I'm not dropped</p>
41</div>
42
43<div id="droppable" class="ui-widget-header">
44 <p>Drop me here</p>
45</div>
46
47</div><!-- End demo -->
48
49<div class="demo-description">
50
51<p>Return the draggable (or it's helper) to its original location when dragging stops with the boolean <code>revert</code> option set on the draggable.</p>
52
53</div><!-- End demo-description -->
54</body>
55</html>
diff --git a/static/development-bundle/demos/droppable/visual-feedback.html b/static/development-bundle/demos/droppable/visual-feedback.html
new file mode 100644
index 0000000..8f7e929
--- /dev/null
+++ b/static/development-bundle/demos/droppable/visual-feedback.html
@@ -0,0 +1,70 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Droppable - Visual feedback</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <style type="text/css">
12 #draggable, #draggable2 { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
13 #droppable, #droppable2 { width: 120px; height: 120px; padding: 0.5em; float: left; margin: 10px; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#draggable").draggable();
18 $("#droppable").droppable({
19 hoverClass: 'ui-state-active',
20 drop: function(event, ui) {
21 $(this).addClass('ui-state-highlight').find('p').html('Dropped!');
22 }
23 });
24
25 $("#draggable2").draggable();
26 $("#droppable2").droppable({
27 accept: "#draggable2",
28 activeClass: 'ui-state-hover',
29 drop: function(event, ui) {
30 $(this).addClass('ui-state-highlight').find('p').html('Dropped!');
31 }
32 });
33
34 });
35 </script>
36</head>
37<body>
38<div class="demo">
39
40<h3 class="docs">Feedback on hover:</h3>
41
42<div id="draggable" class="ui-widget-content">
43 <p>Drag me to my target</p>
44</div>
45
46<div id="droppable" class="ui-widget-header">
47 <p>Drop here</p>
48</div>
49
50<h3 class="docs">Feedback on activating draggable:</h3>
51
52<div id="draggable2" class="ui-widget-content">
53 <p>Drag me to my target</p>
54</div>
55
56<div id="droppable2" class="ui-widget-header">
57 <p>Drop here</p>
58</div>
59
60<!-- add active class demo -->
61
62</div><!-- End demo -->
63
64<div class="demo-description">
65
66<p>Change the droppable's appearance on hover, or when the droppable is active (an acceptable draggable is dropped on it). Use the <code>hoverClass</code> or <code>activeClass</code> options to specify respective classes.</p>
67
68</div><!-- End demo-description -->
69</body>
70</html>
diff --git a/static/development-bundle/demos/effect/default.html b/static/development-bundle/demos/effect/default.html
new file mode 100644
index 0000000..4187080
--- /dev/null
+++ b/static/development-bundle/demos/effect/default.html
@@ -0,0 +1,104 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - Effect Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/effects.core.js"></script>
8 <script type="text/javascript" src="../../ui/effects.blind.js"></script>
9 <script type="text/javascript" src="../../ui/effects.bounce.js"></script>
10 <script type="text/javascript" src="../../ui/effects.clip.js"></script>
11 <script type="text/javascript" src="../../ui/effects.drop.js"></script>
12 <script type="text/javascript" src="../../ui/effects.explode.js"></script>
13 <script type="text/javascript" src="../../ui/effects.fold.js"></script>
14 <script type="text/javascript" src="../../ui/effects.highlight.js"></script>
15 <script type="text/javascript" src="../../ui/effects.pulsate.js"></script>
16 <script type="text/javascript" src="../../ui/effects.scale.js"></script>
17 <script type="text/javascript" src="../../ui/effects.shake.js"></script>
18 <script type="text/javascript" src="../../ui/effects.slide.js"></script>
19 <script type="text/javascript" src="../../ui/effects.transfer.js"></script>
20 <link type="text/css" href="../demos.css" rel="stylesheet" />
21 <style type="text/css">
22 .toggler { width: 500px; height: 200px; position: relative;}
23 #button { padding: .5em 1em; text-decoration: none; }
24 #effect { width: 240px; height: 135px; padding: 0.4em; position: relative; }
25 #effect h3 { margin: 0; padding: 0.4em; text-align: center; }
26 .ui-effects-transfer { border: 2px dotted gray; }
27 </style>
28 <script type="text/javascript">
29 $(function() {
30
31 //run the currently selected effect
32 function runEffect(){
33 //get effect type from
34 var selectedEffect = $('#effectTypes').val();
35
36 //most effect types need no options passed by default
37 var options = {};
38 //check if it's scale, transfer, or size - they need options explicitly set
39 if(selectedEffect == 'scale'){ options = {percent: 0}; }
40 else if(selectedEffect == 'transfer'){ options = { to: "#button", className: 'ui-effects-transfer' }; }
41 else if(selectedEffect == 'size'){ options = { to: {width: 200,height: 60} }; }
42
43 //run the effect
44 $("#effect").effect(selectedEffect,options,500,callback);
45 };
46
47 //callback function to bring a hidden box back
48 function callback(){
49 setTimeout(function(){
50 $("#effect:hidden").removeAttr('style').hide().fadeIn();
51 }, 1000);
52 };
53
54 //set effect from select menu value
55 $("#button").click(function() {
56 runEffect();
57 return false;
58 });
59 });
60 </script>
61</head>
62<body>
63
64<div class="demo">
65
66<div class="toggler">
67 <div id="effect" class="ui-widget-content ui-corner-all">
68 <h3 class="ui-widget-header ui-corner-all">Effect</h3>
69 <p>
70 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
71 </p>
72 </div>
73</div>
74
75<select name="effects" id="effectTypes">
76 <option value="blind">Blind</option>
77 <option value="bounce">Bounce</option>
78 <option value="clip">Clip</option>
79 <option value="drop">Drop</option>
80 <option value="explode">Explode</option>
81 <option value="fold">Fold</option>
82 <option value="highlight">Highlight</option>
83 <option value="puff">Puff</option>
84 <option value="pulsate">Pulsate</option>
85 <option value="scale">Scale</option>
86 <option value="shake">Shake</option>
87 <option value="size">Size</option>
88 <option value="slide">Slide</option>
89 <option value="transfer">Transfer</option>
90</select>
91
92<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
93
94
95</div><!-- End demo -->
96
97<div class="demo-description">
98
99<p>Click the button above to show the effect.</p>
100
101</div><!-- End demo-description -->
102
103</body>
104</html>
diff --git a/static/development-bundle/demos/effect/index.html b/static/development-bundle/demos/effect/index.html
new file mode 100644
index 0000000..fbd0597
--- /dev/null
+++ b/static/development-bundle/demos/effect/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effect Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/hide/default.html b/static/development-bundle/demos/hide/default.html
new file mode 100644
index 0000000..a4a5ff2
--- /dev/null
+++ b/static/development-bundle/demos/hide/default.html
@@ -0,0 +1,105 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - Hide Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/effects.core.js"></script>
8 <script type="text/javascript" src="../../ui/effects.blind.js"></script>
9 <script type="text/javascript" src="../../ui/effects.bounce.js"></script>
10 <script type="text/javascript" src="../../ui/effects.clip.js"></script>
11 <script type="text/javascript" src="../../ui/effects.drop.js"></script>
12 <script type="text/javascript" src="../../ui/effects.explode.js"></script>
13 <script type="text/javascript" src="../../ui/effects.fold.js"></script>
14 <script type="text/javascript" src="../../ui/effects.highlight.js"></script>
15 <script type="text/javascript" src="../../ui/effects.pulsate.js"></script>
16 <script type="text/javascript" src="../../ui/effects.scale.js"></script>
17 <script type="text/javascript" src="../../ui/effects.shake.js"></script>
18 <script type="text/javascript" src="../../ui/effects.slide.js"></script>
19 <script type="text/javascript" src="../../ui/effects.transfer.js"></script>
20 <link type="text/css" href="../demos.css" rel="stylesheet" />
21 <style type="text/css">
22 .toggler { width: 500px; height: 200px; }
23 #button { padding: .5em 1em; text-decoration: none; }
24 #effect { width: 240px; height: 135px; padding: 0.4em; position: relative; }
25 #effect h3 { margin: 0; padding: 0.4em; text-align: center; }
26 .ui-effects-transfer { border: 2px dotted gray; }
27 </style>
28 <script type="text/javascript">
29 $(function() {
30
31 //run the currently selected effect
32 function runEffect(){
33 //get effect type from
34 var selectedEffect = $('#effectTypes').val();
35
36 //most effect types need no options passed by default
37 var options = {};
38 //check if it's scale, transfer, or size - they need options explicitly set
39 if(selectedEffect == 'scale'){ options = {percent: 0}; }
40 else if(selectedEffect == 'transfer'){ options = { to: "#button", className: 'ui-effects-transfer' }; }
41 else if(selectedEffect == 'size'){ options = { to: {width: 200,height: 60} }; }
42
43 //run the effect
44 $("#effect").hide(selectedEffect,options,500,callback);
45 };
46
47 //callback function to bring a hidden box back
48 function callback(){
49 setTimeout(function(){
50 $("#effect:hidden").removeAttr('style').hide().fadeIn();
51 }, 1000);
52 };
53
54 //set effect from select menu value
55 $("#button").click(function() {
56 runEffect();
57 return false;
58 });
59
60 });
61 </script>
62</head>
63<body>
64
65<div class="demo">
66
67<div class="toggler">
68 <div id="effect" class="ui-widget-content ui-corner-all">
69 <h3 class="ui-widget-header ui-corner-all">Hide</h3>
70 <p>
71 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
72 </p>
73 </div>
74</div>
75
76<select name="effects" id="effectTypes">
77 <option value="blind">Blind</option>
78 <option value="bounce">Bounce</option>
79 <option value="clip">Clip</option>
80 <option value="drop">Drop</option>
81 <option value="explode">Explode</option>
82 <option value="fold">Fold</option>
83 <option value="highlight">Highlight</option>
84 <option value="puff">Puff</option>
85 <option value="pulsate">Pulsate</option>
86 <option value="scale">Scale</option>
87 <option value="shake">Shake</option>
88 <option value="size">Size</option>
89 <option value="slide">Slide</option>
90 <option value="transfer">Transfer</option>
91</select>
92
93<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
94
95
96</div><!-- End demo -->
97
98<div class="demo-description">
99
100<p>Click the button above to preview the effect.</p>
101
102</div><!-- End demo-description -->
103
104</body>
105</html>
diff --git a/static/development-bundle/demos/hide/index.html b/static/development-bundle/demos/hide/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/hide/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/images/calendar.gif b/static/development-bundle/demos/images/calendar.gif
new file mode 100644
index 0000000..d0abaa7
--- /dev/null
+++ b/static/development-bundle/demos/images/calendar.gif
Binary files differ
diff --git a/static/development-bundle/demos/images/demo-config-on-tile.gif b/static/development-bundle/demos/images/demo-config-on-tile.gif
new file mode 100644
index 0000000..359da95
--- /dev/null
+++ b/static/development-bundle/demos/images/demo-config-on-tile.gif
Binary files differ
diff --git a/static/development-bundle/demos/images/demo-config-on.gif b/static/development-bundle/demos/images/demo-config-on.gif
new file mode 100644
index 0000000..9fcec1a
--- /dev/null
+++ b/static/development-bundle/demos/images/demo-config-on.gif
Binary files differ
diff --git a/static/development-bundle/demos/images/demo-spindown-closed.gif b/static/development-bundle/demos/images/demo-spindown-closed.gif
new file mode 100644
index 0000000..b247824
--- /dev/null
+++ b/static/development-bundle/demos/images/demo-spindown-closed.gif
Binary files differ
diff --git a/static/development-bundle/demos/images/demo-spindown-open.gif b/static/development-bundle/demos/images/demo-spindown-open.gif
new file mode 100644
index 0000000..e1c60aa
--- /dev/null
+++ b/static/development-bundle/demos/images/demo-spindown-open.gif
Binary files differ
diff --git a/static/development-bundle/demos/images/icon-docs-info.gif b/static/development-bundle/demos/images/icon-docs-info.gif
new file mode 100644
index 0000000..6b0464e
--- /dev/null
+++ b/static/development-bundle/demos/images/icon-docs-info.gif
Binary files differ
diff --git a/static/development-bundle/demos/images/pbar-ani.gif b/static/development-bundle/demos/images/pbar-ani.gif
new file mode 100644
index 0000000..0dfd45b
--- /dev/null
+++ b/static/development-bundle/demos/images/pbar-ani.gif
Binary files differ
diff --git a/static/development-bundle/demos/index.html b/static/development-bundle/demos/index.html
new file mode 100644
index 0000000..1f45c3c
--- /dev/null
+++ b/static/development-bundle/demos/index.html
@@ -0,0 +1,292 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>jQuery UI Demos</title>
6 <link type="text/css" href="../themes/base/ui.all.css" rel="stylesheet" />
7 <link type="text/css" href="demos.css" rel="stylesheet" />
8 <script type="text/javascript" src="../jquery-1.3.2.js"></script>
9 <script type="text/javascript" src="../external/bgiframe/jquery.bgiframe.js"></script>
10 <script type="text/javascript" src="../ui/ui.core.js"></script>
11 <script type="text/javascript" src="../ui/ui.accordion.js"></script>
12 <script type="text/javascript" src="../ui/ui.datepicker.js"></script>
13 <script type="text/javascript" src="../ui/ui.dialog.js"></script>
14 <script type="text/javascript" src="../ui/ui.draggable.js"></script>
15 <script type="text/javascript" src="../ui/ui.droppable.js"></script>
16 <script type="text/javascript" src="../ui/ui.progressbar.js"></script>
17 <script type="text/javascript" src="../ui/ui.resizable.js"></script>
18 <script type="text/javascript" src="../ui/ui.selectable.js"></script>
19 <script type="text/javascript" src="../ui/ui.slider.js"></script>
20 <script type="text/javascript" src="../ui/ui.sortable.js"></script>
21 <script type="text/javascript" src="../ui/ui.tabs.js"></script>
22 <script type="text/javascript" src="../ui/effects.core.js"></script>
23 <script type="text/javascript" src="../ui/effects.blind.js"></script>
24 <script type="text/javascript" src="../ui/effects.bounce.js"></script>
25 <script type="text/javascript" src="../ui/effects.clip.js"></script>
26 <script type="text/javascript" src="../ui/effects.drop.js"></script>
27 <script type="text/javascript" src="../ui/effects.explode.js"></script>
28 <script type="text/javascript" src="../ui/effects.fold.js"></script>
29 <script type="text/javascript" src="../ui/effects.highlight.js"></script>
30 <script type="text/javascript" src="../ui/effects.pulsate.js"></script>
31 <script type="text/javascript" src="../ui/effects.scale.js"></script>
32 <script type="text/javascript" src="../ui/effects.shake.js"></script>
33 <script type="text/javascript" src="../ui/effects.slide.js"></script>
34 <script type="text/javascript" src="../ui/effects.transfer.js"></script>
35 <script type="text/javascript" src="../ui/i18n/ui.datepicker-ar.js"></script>
36 <script type="text/javascript" src="../ui/i18n/ui.datepicker-bg.js"></script>
37 <script type="text/javascript" src="../ui/i18n/ui.datepicker-ca.js"></script>
38 <script type="text/javascript" src="../ui/i18n/ui.datepicker-cs.js"></script>
39 <script type="text/javascript" src="../ui/i18n/ui.datepicker-da.js"></script>
40 <script type="text/javascript" src="../ui/i18n/ui.datepicker-de.js"></script>
41 <script type="text/javascript" src="../ui/i18n/ui.datepicker-el.js"></script>
42 <script type="text/javascript" src="../ui/i18n/ui.datepicker-eo.js"></script>
43 <script type="text/javascript" src="../ui/i18n/ui.datepicker-es.js"></script>
44 <script type="text/javascript" src="../ui/i18n/ui.datepicker-fa.js"></script>
45 <script type="text/javascript" src="../ui/i18n/ui.datepicker-fi.js"></script>
46 <script type="text/javascript" src="../ui/i18n/ui.datepicker-fr.js"></script>
47 <script type="text/javascript" src="../ui/i18n/ui.datepicker-he.js"></script>
48 <script type="text/javascript" src="../ui/i18n/ui.datepicker-hr.js"></script>
49 <script type="text/javascript" src="../ui/i18n/ui.datepicker-hu.js"></script>
50 <script type="text/javascript" src="../ui/i18n/ui.datepicker-hy.js"></script>
51 <script type="text/javascript" src="../ui/i18n/ui.datepicker-id.js"></script>
52 <script type="text/javascript" src="../ui/i18n/ui.datepicker-is.js"></script>
53 <script type="text/javascript" src="../ui/i18n/ui.datepicker-it.js"></script>
54 <script type="text/javascript" src="../ui/i18n/ui.datepicker-ja.js"></script>
55 <script type="text/javascript" src="../ui/i18n/ui.datepicker-ko.js"></script>
56 <script type="text/javascript" src="../ui/i18n/ui.datepicker-lt.js"></script>
57 <script type="text/javascript" src="../ui/i18n/ui.datepicker-lv.js"></script>
58 <script type="text/javascript" src="../ui/i18n/ui.datepicker-ms.js"></script>
59 <script type="text/javascript" src="../ui/i18n/ui.datepicker-nl.js"></script>
60 <script type="text/javascript" src="../ui/i18n/ui.datepicker-no.js"></script>
61 <script type="text/javascript" src="../ui/i18n/ui.datepicker-pl.js"></script>
62 <script type="text/javascript" src="../ui/i18n/ui.datepicker-pt-BR.js"></script>
63 <script type="text/javascript" src="../ui/i18n/ui.datepicker-ro.js"></script>
64 <script type="text/javascript" src="../ui/i18n/ui.datepicker-ru.js"></script>
65 <script type="text/javascript" src="../ui/i18n/ui.datepicker-sk.js"></script>
66 <script type="text/javascript" src="../ui/i18n/ui.datepicker-sl.js"></script>
67 <script type="text/javascript" src="../ui/i18n/ui.datepicker-sq.js"></script>
68 <script type="text/javascript" src="../ui/i18n/ui.datepicker-sr.js"></script>
69 <script type="text/javascript" src="../ui/i18n/ui.datepicker-sr-SR.js"></script>
70 <script type="text/javascript" src="../ui/i18n/ui.datepicker-sv.js"></script>
71 <script type="text/javascript" src="../ui/i18n/ui.datepicker-th.js"></script>
72 <script type="text/javascript" src="../ui/i18n/ui.datepicker-tr.js"></script>
73 <script type="text/javascript" src="../ui/i18n/ui.datepicker-uk.js"></script>
74 <script type="text/javascript" src="../ui/i18n/ui.datepicker-zh-CN.js"></script>
75 <script type="text/javascript" src="../ui/i18n/ui.datepicker-zh-TW.js"></script>
76 <script type="text/javascript">
77 jQuery(function($) {
78
79 $('.left-nav a').click(function(ev) {
80 window.location.hash = this.href.replace(/.+\/([^\/]+)\/index\.html/,'$1') + '|default';
81 loadPage(this.href);
82 $('.left-nav a.selected').removeClass('selected');
83 $(this).addClass('selected');
84 ev.preventDefault();
85 });
86
87 if (window.location.hash) {
88 if (window.location.hash.indexOf('|') === -1) {
89 window.location.hash += '|default';
90 }
91 var path = window.location.href.replace(/(index\.html)?#/,'');
92 path = path.replace('\|','/') + '.html';
93 loadPage(path);
94 }
95
96 function loadPage(path) {
97 var section = path.replace(/\/[^\/]+\.html/,'');
98 var header = section.replace(/.+\/([^\/]+)/,'$1').replace(/_/, ' ');
99
100 $('td.normal div.normal')
101 .empty()
102 .append('<h4 class="demo-subheader">Functional demo:</h4>')
103 .append('<h3 class="demo-header">'+ header +'</h3>')
104 .append('<div id="demo-config"></div>')
105 .find('#demo-config')
106 .append('<div id="demo-frame"></div><div id="demo-config-menu"></div><div id="demo-link"><a class="demoWindowLink" href="#"><span class="ui-icon ui-icon-newwin"></span>Open demo in a new window</a></div>')
107 .find('#demo-config-menu')
108 .load(section + '/index.html .demos-nav', function() {
109 $('#demo-config-menu a').each(function() {
110 this.setAttribute('href', section + '/' + this.getAttribute('href').replace(/.+\/([^\/]+)/,'$1'));
111 $(this).attr('target', 'demo-frame');
112 $(this).click(function() {
113
114 resetDemos();
115
116 $(this).parents('ul').find('li').removeClass('demo-config-on');
117 $(this).parent().addClass('demo-config-on');
118 $('#demo-notes').fadeOut();
119
120 //Set the hash to the actual page without ".html"
121 window.location.hash = header + '|' + this.getAttribute('href').match((/\/([^\/\\]+)\.html/))[1];
122
123 loadDemo(this.getAttribute('href'));
124
125 return false;
126 });
127 });
128
129 if (window.location.hash) {
130 var demo = window.location.hash.split('|')[1];
131 $('#demo-config-menu a').each(function(){
132 if (this.href.indexOf(demo + '.html') !== -1) {
133 $(this).parents('ul').find('li').removeClass('demo-config-on');
134 $(this).parent().addClass('demo-config-on');
135 loadDemo(this.href);
136 }
137 });
138 }
139
140 updateDemoNotes();
141 })
142 .end()
143 .find('#demo-link a')
144 .bind('click', function(ev){
145 window.open(this.href);
146 ev.preventDefault();
147 })
148 .end()
149 .end()
150 ;
151
152 resetDemos();
153 }
154
155 function loadDemo(path) {
156 var directory = path.match(/([^\/]+)\/[^\/\.]+\.html$/)[1];
157 $.get(path, function(data) {
158 var source = data;
159 data = data.replace(/<script.*>.*<\/script>/ig,""); // Remove script tags
160 data = data.replace(/<\/?link.*>/ig,""); //Remove link tags
161 data = data.replace(/<\/?html.*>/ig,""); //Remove html tag
162 data = data.replace(/<\/?body.*>/ig,""); //Remove body tag
163 data = data.replace(/<\/?head.*>/ig,""); //Remove head tag
164 data = data.replace(/<\/?!doctype.*>/ig,""); //Remove doctype
165 data = data.replace(/<title.*>.*<\/title>/ig,""); // Remove title tags
166 data = data.replace(/((href|src)=["'])(?!(http|#))/ig, "$1" + directory + "/");
167
168 $('#demo-style').remove();
169 $('#demo-frame').empty().html(data);
170 $('#demo-frame style').clone().appendTo('head').attr('id','demo-style');
171 $('#demo-link a').attr('href', path);
172 updateDemoNotes();
173 updateDemoSource(source);
174
175 if (/default.html$/.test(path)) {
176 $.get("documentation/docs-" + path.match(/demos\/(.+)\//)[1] + ".html", function(html) {
177 $("#demo-source").after(html);
178 $("#widget-docs").tabs();
179 $(".param-header").click(function() {
180 $(this).parent().toggleClass("param-open").end().next().toggle();
181 });
182 $(".docs-list-header").each(function() {
183 var header = $(this);
184 var details = header.next().find(".param-details").hide();
185 $("a:first", header).click(function() {
186 details.show().parent().addClass("param-open");
187 return false;
188 });
189 $("a:last", header).click(function() {
190 details.hide().parent().removeClass("param-open");
191 return false;
192 });
193 });
194 });
195 }
196 });
197 }
198
199 function updateDemoNotes() {
200 var notes = $('#demo-frame .demo-description');
201 if ($('#demo-notes').length == 0) {
202 $('<div id="demo-notes"></div>').insertAfter('#demo-config');
203 }
204 $('#demo-notes').hide().empty().html(notes.html());
205 $('#demo-notes').show();
206 notes.hide();
207 }
208
209 function updateDemoSource(source) {
210 if ($('#demo-source').length == 0) {
211 $('<div id="demo-source"><a href="#" class="source-closed">View Source</a><div><pre><code></code></pre></div></div>').insertAfter('#demo-notes');
212 $('#demo-source').find(">a").click(function() {
213 $(this).toggleClass("source-closed").toggleClass("source-open").next().toggle();
214 return false;
215 }).end().find(">div").hide();
216 }
217 var cleanedSource = source
218 .replace('themes/base/ui.all.css', 'theme/ui.all.css')
219 .replace(/\s*\x3Clink.*demos\x2Ecss.*\x3E\s*/, '\r\n\t')
220 .replace(/\x2E\x2E\x2F\x2E\x2E\x2F/g, '');
221
222 $('#demo-source code').empty().text(cleanedSource);
223 }
224
225 function resetDemos() {
226 $.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional['']));
227 $(".ui-dialog-content").remove();
228 }
229
230 });
231 </script>
232</head>
233<body>
234
235<table class="layout-grid" cellspacing="0" cellpadding="0">
236 <tr>
237 <td class="left-nav">
238 <dl class="demos-nav">
239 <dt>Interactions</dt>
240 <dd><a href="draggable/index.html">Draggable</a></dd>
241 <dd><a href="droppable/index.html">Droppable</a></dd>
242 <dd><a href="resizable/index.html">Resizable</a></dd>
243 <dd><a href="selectable/index.html">Selectable</a></dd>
244 <dd><a href="sortable/index.html">Sortable</a></dd>
245 <dt>Widgets</dt>
246 <dd><a href="accordion/index.html">Accordion</a></dd>
247 <dd><a href="datepicker/index.html">Datepicker</a></dd>
248 <dd><a href="dialog/index.html">Dialog</a></dd>
249 <dd><a href="progressbar/index.html">Progressbar</a></dd>
250 <dd><a href="slider/index.html">Slider</a></dd>
251 <dd><a href="tabs/index.html">Tabs</a></dd>
252 <dt>Effects</dt>
253 <dd><a href="addClass/index.html">Add Class</a></dd>
254 <dd><a href="removeClass/index.html">Remove Class</a></dd>
255 <dd><a href="animate/index.html">Animate</a></dd>
256 <dd><a href="effect/index.html">Effect</a></dd>
257 <dd><a href="hide/index.html">Hide</a></dd>
258 <dd><a href="show/index.html">Show</a></dd>
259 <dd><a href="switchClass/index.html">Switch Class</a></dd>
260 <dd><a href="toggle/index.html">Toggle</a></dd>
261 <dd><a href="toggleClass/index.html">Toggle Class</a></dd>
262 <dt>About jQuery UI</dt>
263 <dd><a href="http://jqueryui.com/docs/Getting_Started">Getting Started</a></dd>
264 <dd><a href="http://jqueryui.com/docs/Upgrade_Guide">Upgrade Guide</a></dd>
265 <dd><a href="http://jqueryui.com/docs/Changelog">Changelog</a></dd>
266 <dd><a href="http://jqueryui.com/docs/Roadmap">Roadmap</a></dd>
267 <dd><a href="http://jqueryui.com/docs/Subversion">Subversion Access</a></dd>
268 <dd><a href="http://jqueryui.com/docs/Developer_Guide">UI Developer Guidelines</a></dd>
269 <dt>Theming</dt>
270 <dd><a href="http://jqueryui.com/docs/Theming">Theming jQuery UI</a></dd>
271 <dd><a href="http://jqueryui.com/docs/Theming/API">jQuery UI CSS Framework</a></dd>
272 <dd><a href="http://jqueryui.com/docs/Theming/Themeroller">ThemeRoller application</a></dd>
273 <dd><a href="http://jqueryui.com/docs/Theming/ThemeSwitcher">Theme Switcher Widget</a></dd>
274
275 </dl>
276 </td>
277 <td class="normal">
278
279 <div class="normal">
280
281 <h3>Instructions</h3>
282 <p>
283 These demos showcase some common uses of each jQuery UI plugin. Simply copy and paste code from the demos to get started. Have fun playing with them.
284 </p>
285
286 </div>
287
288 </td>
289 </tr>
290</table>
291</body>
292</html>
diff --git a/static/development-bundle/demos/progressbar/animated.html b/static/development-bundle/demos/progressbar/animated.html
new file mode 100644
index 0000000..db013d9
--- /dev/null
+++ b/static/development-bundle/demos/progressbar/animated.html
@@ -0,0 +1,42 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Progressbar - Animated</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.progressbar.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 .ui-progressbar-value { background-image: url(images/pbar-ani.gif); }
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#progressbar").progressbar({
16 value: 59
17 });
18 });
19 </script>
20</head>
21<body>
22
23<div class="demo">
24
25<div id="progressbar"></div>
26
27</div><!-- End demo -->
28
29<div class="demo-description">
30
31<p>
32This progressbar has an animated fill by setting the
33<code>background-image</code>
34on the
35<code>.ui-progressbar-value</code>
36element, using css.
37</p>
38
39</div><!-- End demo-description -->
40
41</body>
42</html>
diff --git a/static/development-bundle/demos/progressbar/default.html b/static/development-bundle/demos/progressbar/default.html
new file mode 100644
index 0000000..a06e6bf
--- /dev/null
+++ b/static/development-bundle/demos/progressbar/default.html
@@ -0,0 +1,37 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Progressbar - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.progressbar.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#progressbar").progressbar({
13 value: 37
14 });
15 });
16 </script>
17</head>
18<body>
19
20<div class="demo">
21
22 <div id="progressbar"></div>
23
24</div><!-- End demo -->
25
26
27
28<div class="demo-description">
29
30<p>Default determinate progress bar.</p>
31
32</div><!-- End demo-description -->
33
34
35
36</body>
37</html>
diff --git a/static/development-bundle/demos/progressbar/images/pbar-ani.gif b/static/development-bundle/demos/progressbar/images/pbar-ani.gif
new file mode 100644
index 0000000..0dfd45b
--- /dev/null
+++ b/static/development-bundle/demos/progressbar/images/pbar-ani.gif
Binary files differ
diff --git a/static/development-bundle/demos/progressbar/index.html b/static/development-bundle/demos/progressbar/index.html
new file mode 100644
index 0000000..542bf14
--- /dev/null
+++ b/static/development-bundle/demos/progressbar/index.html
@@ -0,0 +1,19 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Progressbar Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="animated.html">Animated</a></li>
14 <li><a href="resize.html">Resizable progressbar</a></li>
15 </ul>
16</div>
17
18</body>
19</html>
diff --git a/static/development-bundle/demos/progressbar/resize.html b/static/development-bundle/demos/progressbar/resize.html
new file mode 100644
index 0000000..d1c53af
--- /dev/null
+++ b/static/development-bundle/demos/progressbar/resize.html
@@ -0,0 +1,37 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Progressbar - Resizable</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.progressbar.js"></script>
9 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <script type="text/javascript">
12 $(function() {
13 $("#progressbar").progressbar({
14 value: 37
15 });
16 $("#progressbarWrapper").resizable();
17 });
18 </script>
19</head>
20<body>
21
22<div class="demo">
23
24 <div id="progressbarWrapper" style="height:30px; " class="ui-widget-default">
25 <div id="progressbar" style="height:100%;"></div>
26 </div>
27
28</div><!-- End demo -->
29
30<div class="demo-description">
31
32<p>The progress bar's widths are specified in percentages for flexible sizing so it will resize to fit its container. Try resizing the height and width of this bar to see how it maintains the correct proportions. (This is not necessarily a real-world example, but it's a good illustration of how flexibly all the plugins are coded.)</p>
33
34</div><!-- End demo-description -->
35
36</body>
37</html>
diff --git a/static/development-bundle/demos/removeClass/default.html b/static/development-bundle/demos/removeClass/default.html
new file mode 100644
index 0000000..83a8b89
--- /dev/null
+++ b/static/development-bundle/demos/removeClass/default.html
@@ -0,0 +1,51 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - removeClass Demo</title>
5 <link type="text/css" href="http://jquery-ui.googlecode.com/svn/trunk/themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/trunk/jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/trunk/ui/effects.core.js"></script>
8 <link type="text/css" href="http://jquery-ui.googlecode.com/svn/trunk/demos/demos.css" rel="stylesheet" />
9 <style type="text/css">
10 .toggler { width: 500px; height: 200px; position: relative;}
11 #button { padding: .5em 1em; text-decoration: none; }
12 #effect {position: relative; width: 240px; padding: 1em; letter-spacing: 0; font-size: 1.2em; border: 1px solid #000; background: #eee; color: #333; }
13 #effect.newClass { text-indent: 40px; letter-spacing: .4em; width: 410px; height: 100px; padding: 30px; margin: 10px; font-size: 1.6em; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#button").click(function() {
18 $('#effect').removeClass('newClass', 1000, callback);
19 return false;
20 });
21
22 function callback(){
23 setTimeout(function(){
24 $('#effect').addClass('newClass');
25 }, 1500);
26 }
27 });
28 </script>
29</head>
30<body>
31
32<div class="demo">
33
34<div class="toggler">
35 <div id="effect" class="newClass ui-corner-all">
36 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede.
37 </div>
38</div>
39
40<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
41
42</div><!-- End demo -->
43
44<div class="demo-description">
45
46<p>Click the button above to preview the effect.</p>
47
48</div><!-- End demo-description -->
49
50</body>
51</html>
diff --git a/static/development-bundle/demos/removeClass/index.html b/static/development-bundle/demos/removeClass/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/removeClass/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/resizable/animate.html b/static/development-bundle/demos/resizable/animate.html
new file mode 100644
index 0000000..9af1548
--- /dev/null
+++ b/static/development-bundle/demos/resizable/animate.html
@@ -0,0 +1,38 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Animate</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable { width: 150px; height: 150px; padding: 0.5em; }
12 #resizable h3 { text-align: center; margin: 0; }
13 .ui-resizable-helper { border: 1px dotted gray; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#resizable").resizable({
18 animate: true
19 });
20 });
21 </script>
22</head>
23<body>
24<div class="demo">
25
26<div id="resizable" class="ui-widget-content">
27 <h3 class="ui-widget-header">Animate</h3>
28</div>
29
30</div><!-- End demo -->
31
32<div class="demo-description">
33
34<p>Animate the resize action using the <code>animate</code> option (boolean). When this option is set to true, drag the outline to the desired location; the element animates to that size on drag stop.</p>
35
36</div><!-- End demo-description -->
37</body>
38</html>
diff --git a/static/development-bundle/demos/resizable/aspect-ratio.html b/static/development-bundle/demos/resizable/aspect-ratio.html
new file mode 100644
index 0000000..56edad4
--- /dev/null
+++ b/static/development-bundle/demos/resizable/aspect-ratio.html
@@ -0,0 +1,37 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Preserve aspect ratio</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable { width: 160px; height: 90px; padding: 0.5em; }
12 #resizable h3 { text-align: center; margin: 0; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#resizable").resizable({
17 aspectRatio: 16/9
18 });
19 });
20 </script>
21</head>
22<body>
23<div class="demo">
24
25<div id="resizable" class="ui-widget-content">
26 <h3 class="ui-widget-header">Preserve aspect ratio</h3>
27</div>
28
29</div><!-- End demo -->
30
31<div class="demo-description">
32
33<p>Maintain the existing aspect ratio or set a new one to constrain the proportions on resize. Set the <code>aspectRatio</code> option to true, and optionally pass in a new ratio (i.e., 4/3)</p>
34
35</div><!-- End demo-description -->
36</body>
37</html>
diff --git a/static/development-bundle/demos/resizable/constrain-area.html b/static/development-bundle/demos/resizable/constrain-area.html
new file mode 100644
index 0000000..e1a9122
--- /dev/null
+++ b/static/development-bundle/demos/resizable/constrain-area.html
@@ -0,0 +1,42 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Constrain resize area</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #container { width: 300px; height: 300px; }
12 #container h3 { text-align: center; margin: 0; margin-bottom: 10px; }
13 #resizable { background-position: top left; width: 150px; height: 150px; }
14 #resizable, #container { padding: 0.5em; }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18 $("#resizable").resizable({
19 containment: '#container'
20 });
21 });
22 </script>
23</head>
24<body>
25<div class="demo">
26
27<div id="container" class="ui-widget-content">
28 <h3 class="ui-widget-header">Containment</h3>
29 <div id="resizable" class="ui-state-active">
30 <h3 class="ui-widget-header">Resizable</h3>
31 </div>
32</div>
33
34</div><!-- End demo -->
35
36<div class="demo-description">
37
38<p>Define the boundaries of the resizable area. Use the <code>containment</code> option to specify a parent DOM element or a jQuery selector, like 'document.'</p>
39
40</div><!-- End demo-description -->
41</body>
42</html>
diff --git a/static/development-bundle/demos/resizable/default.html b/static/development-bundle/demos/resizable/default.html
new file mode 100644
index 0000000..0b77b34
--- /dev/null
+++ b/static/development-bundle/demos/resizable/default.html
@@ -0,0 +1,35 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable { width: 150px; height: 150px; padding: 0.5em; }
12 #resizable h3 { text-align: center; margin: 0; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#resizable").resizable();
17 });
18 </script>
19</head>
20<body>
21<div class="demo">
22
23<div id="resizable" class="ui-widget-content">
24 <h3 class="ui-widget-header">Resizable</h3>
25</div>
26
27</div><!-- End demo -->
28
29<div class="demo-description">
30
31<p>Enable any DOM element to be resizable. With the cursor grab the right or bottom border and drag to the desired width or height.</p>
32
33</div><!-- End demo-description -->
34</body>
35</html>
diff --git a/static/development-bundle/demos/resizable/delay-start.html b/static/development-bundle/demos/resizable/delay-start.html
new file mode 100644
index 0000000..df20f8e
--- /dev/null
+++ b/static/development-bundle/demos/resizable/delay-start.html
@@ -0,0 +1,49 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Delay start</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable, #resizable2 { width: 150px; height: 150px; padding: 0.5em; }
12 #resizable h3, #resizable2 h3 { text-align: center; margin: 0; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#resizable").resizable({
17 delay: 1000
18 });
19
20 $("#resizable2").resizable({
21 distance: 40
22 });
23 });
24 </script>
25</head>
26<body>
27<div class="demo">
28
29<h3 class="docs">Time delay (ms):</h3>
30<div id="resizable" class="ui-widget-content">
31 <h3 class="ui-widget-header">Time</h3>
32</div>
33
34<h3 class="docs">Distance delay (px):</h3>
35<div id="resizable2" class="ui-widget-content">
36 <h3 class="ui-widget-header">Distance</h3>
37</div>
38
39<!-- ADD DISTANCE DEMO -->
40
41</div><!-- End demo -->
42
43<div class="demo-description">
44
45<p>Delay the start of resizng for a number of milliseconds with the <code>delay</code> option; prevent resizing until the cursor is held down and dragged a specifed number of pixels with the <code>distance</code> option.</p>
46
47</div><!-- End demo-description -->
48</body>
49</html>
diff --git a/static/development-bundle/demos/resizable/index.html b/static/development-bundle/demos/resizable/index.html
new file mode 100644
index 0000000..561b5bf
--- /dev/null
+++ b/static/development-bundle/demos/resizable/index.html
@@ -0,0 +1,25 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="aspect-ratio.html">Preserve aspect ratio</a></li>
14 <li><a href="max-min.html">Maximum / minimum size</a></li>
15 <li><a href="constrain-area.html">Constrain resize area</a></li>
16 <li><a href="delay-start.html">Delay start</a></li>
17 <li><a href="snap-to-grid.html">Snap to grid</a></li>
18 <li><a href="visual-feedback.html">Visual feedback</a></li>
19 <li><a href="synchronous-resize.html">Synchronous resize</a></li>
20 <li><a href="animate.html">Animate</a></li>
21 </ul>
22</div>
23
24</body>
25</html>
diff --git a/static/development-bundle/demos/resizable/max-min.html b/static/development-bundle/demos/resizable/max-min.html
new file mode 100644
index 0000000..d29e4d7
--- /dev/null
+++ b/static/development-bundle/demos/resizable/max-min.html
@@ -0,0 +1,40 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Maximum / minimum size</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable { width: 200px; height: 150px; padding: 5px; }
12 #resizable h3 { text-align: center; margin: 0; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#resizable").resizable({
17 maxHeight: 250,
18 maxWidth: 350,
19 minHeight: 150,
20 minWidth: 200
21 });
22 });
23 </script>
24</head>
25<body>
26<div class="demo">
27
28<div id="resizable" class="ui-widget-content">
29 <h3 class="ui-widget-header">Resize larger / smaller</h3>
30</div>
31
32</div><!-- End demo -->
33
34<div class="demo-description">
35
36<p>Limit the resizable element to a maximum or minimum height or width using the <code>maxHeight</code>, <code>maxWidth</code>, <code>minHeight</code>, and <code>minWidth</code> options.</p>
37
38</div><!-- End demo-description -->
39</body>
40</html>
diff --git a/static/development-bundle/demos/resizable/snap-to-grid.html b/static/development-bundle/demos/resizable/snap-to-grid.html
new file mode 100644
index 0000000..f2adcc6
--- /dev/null
+++ b/static/development-bundle/demos/resizable/snap-to-grid.html
@@ -0,0 +1,37 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Snap to grid</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable { width: 150px; height: 150px; padding: 0.5em; }
12 #resizable h3 { text-align: center; margin: 0; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#resizable").resizable({
17 grid: 50
18 });
19 });
20 </script>
21</head>
22<body>
23<div class="demo">
24
25<div id="resizable" class="ui-widget-content">
26 <h3 class="ui-widget-header">Grid</h3>
27</div>
28
29</div><!-- End demo -->
30
31<div class="demo-description">
32
33<p>Snap the resizable element to a grid. Set the dimensions of grid cells (height and width in pixels) with the <code>grid</code> option.</p>
34
35</div><!-- End demo-description -->
36</body>
37</html>
diff --git a/static/development-bundle/demos/resizable/synchronous-resize.html b/static/development-bundle/demos/resizable/synchronous-resize.html
new file mode 100644
index 0000000..bd5de82
--- /dev/null
+++ b/static/development-bundle/demos/resizable/synchronous-resize.html
@@ -0,0 +1,44 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Synchronous resize</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable { background-position: top left; }
12 #resizable, #also { width: 150px; height: 120px; padding: 0.5em; }
13 #resizable h3, #also h3 { text-align: center; margin: 0; }
14 #also { margin-top: 1em; }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18 $("#resizable").resizable({
19 alsoResize: '#also'
20 });
21 $("#also").resizable();
22 });
23 </script>
24</head>
25<body>
26<div class="demo">
27
28<div id="resizable" class="ui-widget-header">
29 <h3 class="ui-state-active">Resize</h3>
30</div>
31
32<div id="also" class="ui-widget-content">
33 <h3 class="ui-widget-header">will also resize</h3>
34</div>
35
36</div><!-- End demo -->
37
38<div class="demo-description">
39
40<p>Resize multiple elements simultaneously by clicking and dragging the sides of one. Pass a shared selector into the <code>alsoResize</code> option.</p>
41
42</div><!-- End demo-description -->
43</body>
44</html>
diff --git a/static/development-bundle/demos/resizable/visual-feedback.html b/static/development-bundle/demos/resizable/visual-feedback.html
new file mode 100644
index 0000000..c3edf9a
--- /dev/null
+++ b/static/development-bundle/demos/resizable/visual-feedback.html
@@ -0,0 +1,38 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Resizable - Visual feedback</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.resizable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #resizable { width: 150px; height: 150px; padding: 0.5em; }
12 #resizable h3 { text-align: center; margin: 0; }
13 .ui-resizable-ghost { border: 1px dotted gray; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#resizable").resizable({
18 ghost: true
19 });
20 });
21 </script>
22</head>
23<body>
24<div class="demo">
25
26<div id="resizable" class="ui-widget-content">
27 <h3 class="ui-widget-header">Ghost</h3>
28</div>
29
30</div><!-- End demo -->
31
32<div class="demo-description">
33
34<p>Instead of showing the actual element during resize, set the <code>ghost</code> option to true to show a semi-transparent part of the element.</p>
35
36</div><!-- End demo-description -->
37</body>
38</html>
diff --git a/static/development-bundle/demos/selectable/default.html b/static/development-bundle/demos/selectable/default.html
new file mode 100644
index 0000000..6a81f2b
--- /dev/null
+++ b/static/development-bundle/demos/selectable/default.html
@@ -0,0 +1,45 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Selectable - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.selectable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10
11 <style type="text/css">
12 #feedback { font-size: 1.4em; }
13 #selectable .ui-selecting { background: #FECA40; }
14 #selectable .ui-selected { background: #F39814; color: white; }
15 #selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
16 #selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
17 </style>
18 <script type="text/javascript">
19 $(function() {
20 $("#selectable").selectable();
21 });
22 </script>
23</head>
24<body>
25<div class="demo">
26
27<ol id="selectable">
28 <li class="ui-widget-content">Item 1</li>
29 <li class="ui-widget-content">Item 2</li>
30 <li class="ui-widget-content">Item 3</li>
31 <li class="ui-widget-content">Item 4</li>
32 <li class="ui-widget-content">Item 5</li>
33 <li class="ui-widget-content">Item 6</li>
34 <li class="ui-widget-content">Item 7</li>
35</ol>
36
37</div><!-- End demo -->
38
39<div class="demo-description">
40
41<p>Enable a DOM element (or group of elements) to be selectable. Draw a box with your cursor to select items. Hold down the Ctrl key to make multiple non-adjacent selections. </p>
42
43</div><!-- End demo-description -->
44</body>
45</html>
diff --git a/static/development-bundle/demos/selectable/display-grid.html b/static/development-bundle/demos/selectable/display-grid.html
new file mode 100644
index 0000000..3843c77
--- /dev/null
+++ b/static/development-bundle/demos/selectable/display-grid.html
@@ -0,0 +1,50 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Selectable - Display as grid</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.selectable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10
11 <style type="text/css">
12 #feedback { font-size: 1.4em; }
13 #selectable .ui-selecting { background: #FECA40; }
14 #selectable .ui-selected { background: #F39814; color: white; }
15 #selectable { list-style-type: none; margin: 0; padding: 0; }
16 #selectable li { margin: 3px; padding: 1px; float: left; width: 100px; height: 80px; font-size: 4em; text-align: center; }
17 </style>
18 <script type="text/javascript">
19 $(function() {
20 $("#selectable").selectable();
21 });
22 </script>
23</head>
24<body>
25<div class="demo">
26
27<ol id="selectable">
28 <li class="ui-state-default">1</li>
29 <li class="ui-state-default">2</li>
30 <li class="ui-state-default">3</li>
31 <li class="ui-state-default">4</li>
32 <li class="ui-state-default">5</li>
33 <li class="ui-state-default">6</li>
34 <li class="ui-state-default">7</li>
35 <li class="ui-state-default">8</li>
36 <li class="ui-state-default">9</li>
37 <li class="ui-state-default">10</li>
38 <li class="ui-state-default">11</li>
39 <li class="ui-state-default">12</li>
40</ol>
41
42</div><!-- End demo -->
43
44<div class="demo-description">
45
46<p>To arrange selectable items as a grid, give them identical dimensions and float them using CSS.</p>
47
48</div><!-- End demo-description -->
49</body>
50</html>
diff --git a/static/development-bundle/demos/selectable/index.html b/static/development-bundle/demos/selectable/index.html
new file mode 100644
index 0000000..8429802
--- /dev/null
+++ b/static/development-bundle/demos/selectable/index.html
@@ -0,0 +1,19 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Selectable Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="serialize.html">Serialize</a></li>
14 <li><a href="display-grid.html">Display as grid</a></li>
15 </ul>
16</div>
17
18</body>
19</html>
diff --git a/static/development-bundle/demos/selectable/serialize.html b/static/development-bundle/demos/selectable/serialize.html
new file mode 100644
index 0000000..0e201fa
--- /dev/null
+++ b/static/development-bundle/demos/selectable/serialize.html
@@ -0,0 +1,56 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Selectable - Serialize</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.selectable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10
11 <style type="text/css">
12 #feedback { font-size: 1.4em; }
13 #selectable .ui-selecting { background: #FECA40; }
14 #selectable .ui-selected { background: #F39814; color: white; }
15 #selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
16 #selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
17 </style>
18 <script type="text/javascript">
19 $(function() {
20 $("#selectable").selectable({
21 stop: function(){
22 var result = $("#select-result").empty();
23 $(".ui-selected", this).each(function(){
24 var index = $("#selectable li").index(this);
25 result.append(" #" + (index + 1));
26 });
27 }
28 });
29 });
30 </script>
31</head>
32<body>
33<div class="demo">
34
35<p id="feedback">
36You've selected: <span id="select-result">none</span>.
37</p>
38
39<ol id="selectable">
40 <li class="ui-widget-content">Item 1</li>
41 <li class="ui-widget-content">Item 2</li>
42 <li class="ui-widget-content">Item 3</li>
43 <li class="ui-widget-content">Item 4</li>
44 <li class="ui-widget-content">Item 5</li>
45 <li class="ui-widget-content">Item 6</li>
46</ol>
47
48</div><!-- End demo -->
49
50<div class="demo-description">
51
52<p>Write a function that fires on the <code>stop</code> event to collect the index values of selected items. Present values as feedback, or pass as a data string.</p>
53
54</div><!-- End demo-description -->
55</body>
56</html>
diff --git a/static/development-bundle/demos/show/default.html b/static/development-bundle/demos/show/default.html
new file mode 100644
index 0000000..7c70526
--- /dev/null
+++ b/static/development-bundle/demos/show/default.html
@@ -0,0 +1,106 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - Show Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/effects.core.js"></script>
8 <script type="text/javascript" src="../../ui/effects.blind.js"></script>
9 <script type="text/javascript" src="../../ui/effects.bounce.js"></script>
10 <script type="text/javascript" src="../../ui/effects.clip.js"></script>
11 <script type="text/javascript" src="../../ui/effects.drop.js"></script>
12 <script type="text/javascript" src="../../ui/effects.explode.js"></script>
13 <script type="text/javascript" src="../../ui/effects.fold.js"></script>
14 <script type="text/javascript" src="../../ui/effects.highlight.js"></script>
15 <script type="text/javascript" src="../../ui/effects.pulsate.js"></script>
16 <script type="text/javascript" src="../../ui/effects.scale.js"></script>
17 <script type="text/javascript" src="../../ui/effects.shake.js"></script>
18 <script type="text/javascript" src="../../ui/effects.slide.js"></script>
19 <script type="text/javascript" src="../../ui/effects.transfer.js"></script>
20 <link type="text/css" href="../demos.css" rel="stylesheet" />
21 <style type="text/css">
22 .toggler { width: 500px; height: 200px; }
23 #button { padding: .5em 1em; text-decoration: none; }
24 #effect { width: 240px; height: 135px; padding: 0.4em; position: relative; }
25 #effect h3 { margin: 0; padding: 0.4em; text-align: center; }
26 .ui-effects-transfer { border: 2px dotted gray; }
27 </style>
28 <script type="text/javascript">
29 $(function() {
30
31 //run the currently selected effect
32 function runEffect(){
33 //get effect type from
34 var selectedEffect = $('#effectTypes').val();
35
36 //most effect types need no options passed by default
37 var options = {};
38 //check if it's scale, transfer, or size - they need options explicitly set
39 if(selectedEffect == 'scale'){ options = {percent: 100}; }
40 else if(selectedEffect == 'transfer'){ options = { to: "#button", className: 'ui-effects-transfer' }; }
41 else if(selectedEffect == 'size'){ options = { to: {width: 280,height: 185} }; }
42
43 //run the effect
44 $("#effect").show(selectedEffect,options,500,callback);
45 };
46
47 //callback function to bring a hidden box back
48 function callback(){
49 setTimeout(function(){
50 $("#effect:visible").removeAttr('style').hide().fadeOut();
51 }, 1000);
52 };
53
54 //set effect from select menu value
55 $("#button").click(function() {
56 runEffect();
57 return false;
58 });
59
60 $("#effect").hide();
61 });
62 </script>
63</head>
64<body>
65
66<div class="demo">
67
68<div class="toggler">
69 <div id="effect" class="ui-widget-content ui-corner-all">
70 <h3 class="ui-widget-header ui-corner-all">Show</h3>
71 <p>
72 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
73 </p>
74 </div>
75</div>
76
77<select name="effects" id="effectTypes">
78 <option value="blind">Blind</option>
79 <option value="bounce">Bounce</option>
80 <option value="clip">Clip</option>
81 <option value="drop">Drop</option>
82 <option value="explode">Explode</option>
83 <option value="fold">Fold</option>
84 <option value="highlight">Highlight</option>
85 <option value="puff">Puff</option>
86 <option value="pulsate">Pulsate</option>
87 <option value="scale">Scale</option>
88 <option value="shake">Shake</option>
89 <option value="size">Size</option>
90 <option value="slide">Slide</option>
91 <option value="transfer">Transfer</option>
92</select>
93
94<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
95
96
97</div><!-- End demo -->
98
99<div class="demo-description">
100
101<p>Click the button above to preview the effect.</p>
102
103</div><!-- End demo-description -->
104
105</body>
106</html>
diff --git a/static/development-bundle/demos/show/index.html b/static/development-bundle/demos/show/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/show/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/slider/colorpicker.html b/static/development-bundle/demos/slider/colorpicker.html
new file mode 100644
index 0000000..0f7c264
--- /dev/null
+++ b/static/development-bundle/demos/slider/colorpicker.html
@@ -0,0 +1,92 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Colorpicker</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #red, #green, #blue {
12 float: left;
13 clear: left;
14 width: 300px;
15 margin: 15px;
16 }
17 #swatch {
18 width: 120px;
19 height: 100px;
20 margin-top: 18px;
21 margin-left: 350px;
22 background-image: none;
23 }
24 #red .ui-slider-range { background: #ef2929; }
25 #red .ui-slider-handle { border-color: #ef2929; }
26 #green .ui-slider-range { background: #8ae234; }
27 #green .ui-slider-handle { border-color: #8ae234; }
28 #blue .ui-slider-range { background: #729fcf; }
29 #blue .ui-slider-handle { border-color: #729fcf; }
30 #demo-frame > div.demo { padding: 10px !important; };
31 </style>
32 <script type="text/javascript">
33 function hexFromRGB (r, g, b) {
34 var hex = [
35 r.toString(16),
36 g.toString(16),
37 b.toString(16)
38 ];
39 $.each(hex, function (nr, val) {
40 if (val.length == 1) {
41 hex[nr] = '0' + val;
42 }
43 });
44 return hex.join('').toUpperCase();
45 }
46 function refreshSwatch() {
47 var red = $("#red").slider("value")
48 ,green = $("#green").slider("value")
49 ,blue = $("#blue").slider("value")
50 ,hex = hexFromRGB(red, green, blue);
51 $("#swatch").css("background-color", "#" + hex);
52 }
53 $(function() {
54 $("#red, #green, #blue").slider({
55 orientation: 'horizontal',
56 range: "min",
57 max: 255,
58 value: 127,
59 slide: refreshSwatch,
60 change: refreshSwatch
61 });
62 $("#red").slider("value", 255);
63 $("#green").slider("value", 140);
64 $("#blue").slider("value", 60);
65 });
66 </script>
67</head>
68<body class="ui-widget-content" style="border:0;">
69
70<div class="demo">
71
72<p class="ui-state-default ui-corner-all ui-helper-clearfix" style="padding:4px;">
73<span class="ui-icon ui-icon-pencil" style="float:left; margin:-2px 5px 0 0;"></span>
74Simple Colorpicker
75</p>
76
77<div id="red"></div>
78<div id="green"></div>
79<div id="blue"></div>
80
81<div id="swatch" class="ui-widget-content ui-corner-all"></div>
82
83</div><!-- End demo -->
84
85<div class="demo-description" style="clear:left;">
86
87<p>Combine three sliders to create a simple RGB colorpicker.</p>
88
89</div><!-- End demo-description -->
90
91</body>
92</html>
diff --git a/static/development-bundle/demos/slider/default.html b/static/development-bundle/demos/slider/default.html
new file mode 100644
index 0000000..da92869
--- /dev/null
+++ b/static/development-bundle/demos/slider/default.html
@@ -0,0 +1,34 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; };
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#slider").slider();
16 });
17 </script>
18</head>
19<body>
20
21<div class="demo">
22
23<div id="slider"></div>
24
25</div><!-- End demo -->
26
27<div class="demo-description">
28
29<p>The basic slider is horizontal and has a single handle that can be moved with the mouse or by using the arrow keys.</p>
30
31</div><!-- End demo-description -->
32
33</body>
34</html>
diff --git a/static/development-bundle/demos/slider/index.html b/static/development-bundle/demos/slider/index.html
new file mode 100644
index 0000000..9a010a5
--- /dev/null
+++ b/static/development-bundle/demos/slider/index.html
@@ -0,0 +1,25 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="steps.html">Snap to increments</a></li>
14 <li><a href="range.html">Range slider</a></li>
15 <li><a href="rangemin.html">Range with fixed minimum</a></li>
16 <li><a href="rangemax.html">Range with fixed maximum</a></li>
17 <li><a href="slider-vertical.html">Vertical slider</a></li>
18 <li><a href="range-vertical.html">Vertical range slider</a></li>
19 <li><a href="multiple-vertical.html">Multiple sliders</a></li>
20 <li><a href="colorpicker.html">Simple colorpicker</a></li>
21 </ul>
22</div>
23
24</body>
25</html>
diff --git a/static/development-bundle/demos/slider/multiple-vertical.html b/static/development-bundle/demos/slider/multiple-vertical.html
new file mode 100644
index 0000000..48258cc
--- /dev/null
+++ b/static/development-bundle/demos/slider/multiple-vertical.html
@@ -0,0 +1,76 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Multiple sliders</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; }
12 #eq span {
13 height:120px; float:left; margin:15px
14 }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18 // change defaults for range, animate and orientation
19 $.extend($.ui.slider.defaults, {
20 range: "min",
21 animate: true,
22 orientation: "vertical"
23 });
24 // setup master volume
25 $("#master").slider({
26 value: 60,
27 orientation: "horizontal"
28 });
29 // setup graphic EQ
30 $("#eq > span").each(function() {
31 // read initial values from markup and remove that
32 var value = parseInt($(this).text());
33 $(this).empty();
34 $(this).slider({
35 value: value
36 })
37 });
38 });
39 </script>
40</head>
41<body class="ui-widget-content" style="border:0;">
42
43<div class="demo">
44
45<p class="ui-state-default ui-corner-all ui-helper-clearfix" style="padding:4px;">
46<span class="ui-icon ui-icon-volume-on" style="float:left; margin:-2px 5px 0 0;"></span>
47Master volume
48</p>
49
50<div id="master" style="width:260px; margin:15px;"></div>
51
52<p class="ui-state-default ui-corner-all" style="padding:4px;margin-top:4em;">
53<span class="ui-icon ui-icon-signal" style="float:left; margin:-2px 5px 0 0;"></span>
54Graphic EQ
55</p>
56
57<div id="eq">
58 <span>88</span>
59 <span>77</span>
60 <span>55</span>
61 <span>33</span>
62 <span>40</span>
63 <span>45</span>
64 <span>70</span>
65</div>
66
67</div><!-- End demo -->
68
69<div class="demo-description" style="clear:left;">
70
71<p>Combine horizontal and vertical sliders, each with their own options, to create the UI for a music player.</p>
72
73</div><!-- End demo-description -->
74
75</body>
76</html>
diff --git a/static/development-bundle/demos/slider/range-vertical.html b/static/development-bundle/demos/slider/range-vertical.html
new file mode 100644
index 0000000..ad59511
--- /dev/null
+++ b/static/development-bundle/demos/slider/range-vertical.html
@@ -0,0 +1,47 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Vertical range slider</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; };
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#slider-range").slider({
16 orientation: "vertical",
17 range: true,
18 values: [17, 67],
19 slide: function(event, ui) {
20 $("#amount").val('$' + ui.values[0] + ' - $' + ui.values[1]);
21 }
22 });
23 $("#amount").val('$' + $("#slider-range").slider("values", 0) + ' - $' + $("#slider-range").slider("values", 1));
24 });
25 </script>
26</head>
27<body>
28
29<div class="demo">
30
31<p>
32<label for="amount">Target sales goal (Millions):</label>
33<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
34</p>
35
36<div id="slider-range" style="height:250px;"></div>
37
38</div><!-- End demo -->
39
40<div class="demo-description">
41
42<p>Change the orientation of the range slider to vertical. Assign a height value via <code>.height()</code> or by setting the height through CSS, and set the <code>orientation</code> option to "vertical."</p>
43
44</div><!-- End demo-description -->
45
46</body>
47</html>
diff --git a/static/development-bundle/demos/slider/range.html b/static/development-bundle/demos/slider/range.html
new file mode 100644
index 0000000..7c595e0
--- /dev/null
+++ b/static/development-bundle/demos/slider/range.html
@@ -0,0 +1,48 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Range slider</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; };
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#slider-range").slider({
16 range: true,
17 min: 0,
18 max: 500,
19 values: [75, 300],
20 slide: function(event, ui) {
21 $("#amount").val('$' + ui.values[0] + ' - $' + ui.values[1]);
22 }
23 });
24 $("#amount").val('$' + $("#slider-range").slider("values", 0) + ' - $' + $("#slider-range").slider("values", 1));
25 });
26 </script>
27</head>
28<body>
29
30<div class="demo">
31
32<p>
33<label for="amount">Price range:</label>
34<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
35</p>
36
37<div id="slider-range"></div>
38
39</div><!-- End demo -->
40
41<div class="demo-description">
42
43<p>Set the <code>range</code> option to true to capture a range of values with two drag handles. The space between the handles is filled with a different background color to indicate those values are selected.</p>
44
45</div><!-- End demo-description -->
46
47</body>
48</html>
diff --git a/static/development-bundle/demos/slider/rangemax.html b/static/development-bundle/demos/slider/rangemax.html
new file mode 100644
index 0000000..db266db
--- /dev/null
+++ b/static/development-bundle/demos/slider/rangemax.html
@@ -0,0 +1,47 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Range with fixed maximum</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; };
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#slider-range-max").slider({
16 range: "max",
17 min: 1,
18 max: 10,
19 value: 2,
20 slide: function(event, ui) {
21 $("#amount").val(ui.value);
22 }
23 });
24 $("#amount").val($("#slider-range-max").slider("value"));
25 });
26 </script>
27</head>
28<body>
29
30<div class="demo">
31
32<p>
33<labe for="amount">Minimum number of bedrooms:</label>
34<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
35</p>
36<div id="slider-range-max"></div>
37
38</div><!-- End demo -->
39
40<div class="demo-description">
41
42<p>Fix the maximum value of the range slider so that the user can only select a minimum. Set the <code>range</code> option to "max."</p>
43
44</div><!-- End demo-description -->
45
46</body>
47</html>
diff --git a/static/development-bundle/demos/slider/rangemin.html b/static/development-bundle/demos/slider/rangemin.html
new file mode 100644
index 0000000..4eebade
--- /dev/null
+++ b/static/development-bundle/demos/slider/rangemin.html
@@ -0,0 +1,48 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Range with fixed minimum</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; };
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#slider-range-min").slider({
16 range: "min",
17 value: 37,
18 min: 1,
19 max: 700,
20 slide: function(event, ui) {
21 $("#amount").val('$' + ui.value);
22 }
23 });
24 $("#amount").val('$' + $("#slider-range-min").slider("value"));
25 });
26 </script>
27</head>
28<body>
29
30<div class="demo">
31
32<p>
33<label for="amount">Maximum price:</label>
34<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
35</p>
36
37<div id="slider-range-min"></div>
38
39</div><!-- End demo -->
40
41<div class="demo-description">
42
43<p>Fix the minimum value of the range slider so that the user can only select a maximum. Set the <code>range</code> option to "min."</p>
44
45</div><!-- End demo-description -->
46
47</body>
48</html>
diff --git a/static/development-bundle/demos/slider/slider-vertical.html b/static/development-bundle/demos/slider/slider-vertical.html
new file mode 100644
index 0000000..7731a4b
--- /dev/null
+++ b/static/development-bundle/demos/slider/slider-vertical.html
@@ -0,0 +1,49 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Vertical slider</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; };
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#slider-vertical").slider({
16 orientation: "vertical",
17 range: "min",
18 min: 0,
19 max: 100,
20 value: 60,
21 slide: function(event, ui) {
22 $("#amount").val(ui.value);
23 }
24 });
25 $("#amount").val($("#slider-vertical").slider("value"));
26 });
27 </script>
28</head>
29<body>
30
31<div class="demo">
32
33<p>
34<label for="amount">Volume:</label>
35<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
36</p>
37
38<div id="slider-vertical" style="height:200px;"></div>
39
40</div><!-- End demo -->
41
42<div class="demo-description">
43
44<p>Change the orientation of the slider to vertical. Assign a height value via <code>.height()</code> or by setting the height through CSS, and set the <code>orientation</code> option to "vertical."</p>
45
46</div><!-- End demo-description -->
47
48</body>
49</html>
diff --git a/static/development-bundle/demos/slider/steps.html b/static/development-bundle/demos/slider/steps.html
new file mode 100644
index 0000000..f29b734
--- /dev/null
+++ b/static/development-bundle/demos/slider/steps.html
@@ -0,0 +1,48 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Slider - Snap to increments</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.slider.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #demo-frame > div.demo { padding: 10px !important; };
12 </style>
13 <script type="text/javascript">
14 $(function() {
15 $("#slider").slider({
16 value:100,
17 min: 0,
18 max: 500,
19 step: 50,
20 slide: function(event, ui) {
21 $("#amount").val('$' + ui.value);
22 }
23 });
24 $("#amount").val('$' + $("#slider").slider("value"));
25 });
26 </script>
27</head>
28<body>
29
30<div class="demo">
31
32<p>
33<label for="amount">Donation amount ($50 increments):</label>
34<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
35</p>
36
37<div id="slider"></div>
38
39</div><!-- End demo -->
40
41<div class="demo-description">
42
43<p>Increment slider values with the <code>step</code> option set to an integer, commonly a dividend of the slider's maximum value. The default increment is 1.</p>
44
45</div><!-- End demo-description -->
46
47</body>
48</html>
diff --git a/static/development-bundle/demos/sortable/connect-lists-through-tabs.html b/static/development-bundle/demos/sortable/connect-lists-through-tabs.html
new file mode 100644
index 0000000..481c506
--- /dev/null
+++ b/static/development-bundle/demos/sortable/connect-lists-through-tabs.html
@@ -0,0 +1,76 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Connect lists with Tabs</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
10 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>
11 <link type="text/css" href="../demos.css" rel="stylesheet" />
12 <style type="text/css">
13 #sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#sortable1, #sortable2").sortable().disableSelection();
18
19 var $tabs = $("#tabs").tabs();
20
21 var $tab_items = $("ul:first li",$tabs).droppable({
22 accept: ".connectedSortable li",
23 hoverClass: "ui-state-hover",
24 drop: function(ev, ui) {
25 var $item = $(this);
26 var $list = $($item.find('a').attr('href')).find('.connectedSortable');
27
28 ui.draggable.hide('slow', function() {
29 $tabs.tabs('select', $tab_items.index($item));
30 $(this).appendTo($list).show('slow');
31 });
32 }
33 });
34 });
35 </script>
36</head>
37<body>
38<div class="demo">
39
40<div id="tabs">
41 <ul>
42 <li><a href="#tabs-1">Nunc tincidunt</a></li>
43 <li><a href="#tabs-2">Proin dolor</a></li>
44 </ul>
45 <div id="tabs-1">
46 <ul id="sortable1" class="connectedSortable ui-helper-reset">
47 <li class="ui-state-default">Item 1</li>
48 <li class="ui-state-default">Item 2</li>
49 <li class="ui-state-default">Item 3</li>
50 <li class="ui-state-default">Item 4</li>
51 <li class="ui-state-default">Item 5</li>
52 </ul>
53 </div>
54 <div id="tabs-2">
55 <ul id="sortable2" class="connectedSortable ui-helper-reset">
56 <li class="ui-state-highlight">Item 1</li>
57 <li class="ui-state-highlight">Item 2</li>
58 <li class="ui-state-highlight">Item 3</li>
59 <li class="ui-state-highlight">Item 4</li>
60 <li class="ui-state-highlight">Item 5</li>
61 </ul>
62 </div>
63</div>
64
65</div><!-- End demo -->
66
67<div class="demo-description">
68
69<p>
70 Sort items from one list into another and vice versa, by dropping the list item on the appropriate tab above.
71</p>
72
73</div><!-- End demo-description -->
74
75</body>
76</html>
diff --git a/static/development-bundle/demos/sortable/connect-lists.html b/static/development-bundle/demos/sortable/connect-lists.html
new file mode 100644
index 0000000..639f0e9
--- /dev/null
+++ b/static/development-bundle/demos/sortable/connect-lists.html
@@ -0,0 +1,55 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Connect lists</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; }
12 #sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#sortable1, #sortable2").sortable({
17 connectWith: '.connectedSortable'
18 }).disableSelection();
19 });
20 </script>
21</head>
22<body>
23<div class="demo">
24
25<ul id="sortable1" class="connectedSortable">
26 <li class="ui-state-default">Item 1</li>
27 <li class="ui-state-default">Item 2</li>
28 <li class="ui-state-default">Item 3</li>
29 <li class="ui-state-default">Item 4</li>
30 <li class="ui-state-default">Item 5</li>
31</ul>
32
33<ul id="sortable2" class="connectedSortable">
34 <li class="ui-state-highlight">Item 1</li>
35 <li class="ui-state-highlight">Item 2</li>
36 <li class="ui-state-highlight">Item 3</li>
37 <li class="ui-state-highlight">Item 4</li>
38 <li class="ui-state-highlight">Item 5</li>
39</ul>
40
41</div><!-- End demo -->
42
43<div class="demo-description">
44
45<p>
46 Sort items from one list into another and vice versa, by passing a selector into
47 the <code>connectWith</code> option. The simplest way to do this is to
48 group all related lists with a CSS class, and then pass that class into the
49 sortable function (i.e., <code>connectWith: '.myclass'</code>).
50</p>
51
52</div><!-- End demo-description -->
53
54</body>
55</html>
diff --git a/static/development-bundle/demos/sortable/default.html b/static/development-bundle/demos/sortable/default.html
new file mode 100644
index 0000000..6df9ec1
--- /dev/null
+++ b/static/development-bundle/demos/sortable/default.html
@@ -0,0 +1,48 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
12 #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
13 #sortable li span { position: absolute; margin-left: -1.3em; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#sortable").sortable();
18 $("#sortable").disableSelection();
19 });
20 </script>
21</head>
22<body>
23<div class="demo">
24
25<ul id="sortable">
26 <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
27 <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
28 <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
29 <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
30 <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
31 <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
32 <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
33</ul>
34
35</div><!-- End demo -->
36
37<div class="demo-description">
38
39<p>
40 Enable a group of DOM elements to be sortable. Click on and drag an
41 element to a new spot within the list, and the other items will adjust to
42 fit. By default, sortable items share <code>draggable</code> properties.
43</p>
44
45</div><!-- End demo-description -->
46
47</body>
48</html>
diff --git a/static/development-bundle/demos/sortable/delay-start.html b/static/development-bundle/demos/sortable/delay-start.html
new file mode 100644
index 0000000..636b743
--- /dev/null
+++ b/static/development-bundle/demos/sortable/delay-start.html
@@ -0,0 +1,64 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Delay start</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; margin-bottom: 15px;zoom: 1; }
12 #sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 95%; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#sortable1").sortable({
17 delay: 300
18 });
19
20 $("#sortable2").sortable({
21 distance: 15
22 });
23
24 $("li").disableSelection();
25 });
26 </script>
27</head>
28<body>
29<div class="demo">
30
31<h3 class="docs">Time delay of 300ms:</h3>
32
33<ul id="sortable1">
34 <li class="ui-state-default">Item 1</li>
35 <li class="ui-state-default">Item 2</li>
36 <li class="ui-state-default">Item 3</li>
37 <li class="ui-state-default">Item 4</li>
38</ul>
39
40<h3 class="docs">Distance delay of 15px:</h3>
41
42<ul id="sortable2">
43 <li class="ui-state-default">Item 1</li>
44 <li class="ui-state-default">Item 2</li>
45 <li class="ui-state-default">Item 3</li>
46 <li class="ui-state-default">Item 4</li>
47</ul>
48
49</div><!-- End demo -->
50
51<div class="demo-description">
52
53<p>
54 Prevent accidental sorting either by delay (time) or distance. Set a number of
55 milliseconds the element needs to be dragged before sorting starts
56 with the <code>delay</code> option. Set a distance in pixels the element
57 needs to be dragged before sorting starts with the <code>distance</code>
58 option.
59</p>
60
61</div><!-- End demo-description -->
62
63</body>
64</html>
diff --git a/static/development-bundle/demos/sortable/display-grid.html b/static/development-bundle/demos/sortable/display-grid.html
new file mode 100644
index 0000000..e10cd99
--- /dev/null
+++ b/static/development-bundle/demos/sortable/display-grid.html
@@ -0,0 +1,51 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Display as grid</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #sortable { list-style-type: none; margin: 0; padding: 0; }
12 #sortable li { margin: 3px 3px 3px 0; padding: 1px; float: left; width: 100px; height: 90px; font-size: 4em; text-align: center; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#sortable").sortable();
17 $("#sortable").disableSelection();
18 });
19 </script>
20</head>
21<body>
22<div class="demo">
23
24<ul id="sortable">
25 <li class="ui-state-default">1</li>
26 <li class="ui-state-default">2</li>
27 <li class="ui-state-default">3</li>
28 <li class="ui-state-default">4</li>
29 <li class="ui-state-default">5</li>
30 <li class="ui-state-default">6</li>
31 <li class="ui-state-default">7</li>
32 <li class="ui-state-default">8</li>
33 <li class="ui-state-default">9</li>
34 <li class="ui-state-default">10</li>
35 <li class="ui-state-default">11</li>
36 <li class="ui-state-default">12</li>
37</ul>
38
39</div><!-- End demo -->
40
41<div class="demo-description">
42
43<p>
44 To arrange sortable items as a grid, give them identical dimensions and
45 float them using CSS.
46</p>
47
48</div><!-- End demo-description -->
49
50</body>
51</html>
diff --git a/static/development-bundle/demos/sortable/empty-lists.html b/static/development-bundle/demos/sortable/empty-lists.html
new file mode 100644
index 0000000..1886b8e
--- /dev/null
+++ b/static/development-bundle/demos/sortable/empty-lists.html
@@ -0,0 +1,66 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Handle empty lists</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #sortable1, #sortable2, #sortable3 { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; background: #eee; padding: 5px; width: 143px;}
12 #sortable1 li, #sortable2 li, #sortable3 li { margin: 5px; padding: 5px; font-size: 1.2em; width: 120px; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("ul.droptrue").sortable({
17 connectWith: 'ul'
18 });
19
20 $("ul.dropfalse").sortable({
21 connectWith: 'ul',
22 dropOnEmpty: false
23 });
24
25 $("#sortable1, #sortable2, #sortable3").disableSelection();
26 });
27 </script>
28</head>
29<body>
30<div class="demo">
31
32<ul id="sortable1" class='droptrue'>
33 <li class="ui-state-default">Can be dropped..</li>
34 <li class="ui-state-default">..on an empty list</li>
35 <li class="ui-state-default">Item 3</li>
36 <li class="ui-state-default">Item 4</li>
37 <li class="ui-state-default">Item 5</li>
38</ul>
39
40<ul id="sortable2" class='dropfalse'>
41 <li class="ui-state-highlight">Cannot be dropped..</li>
42 <li class="ui-state-highlight">..on an empty list</li>
43 <li class="ui-state-highlight">Item 3</li>
44 <li class="ui-state-highlight">Item 4</li>
45 <li class="ui-state-highlight">Item 5</li>
46</ul>
47
48<ul id="sortable3" class='droptrue'>
49</ul>
50
51<br clear="both" />
52
53</div><!-- End demo -->
54
55<div class="demo-description">
56
57<p>
58 Prevent all items in a list from being dropped into a separate, empty list
59 using the <code>dropOnEmpty</code> option set to <code>false</code>. By default,
60 sortable items can be dropped on empty lists.
61</p>
62
63</div><!-- End demo-description -->
64
65</body>
66</html>
diff --git a/static/development-bundle/demos/sortable/index.html b/static/development-bundle/demos/sortable/index.html
new file mode 100644
index 0000000..b77f223
--- /dev/null
+++ b/static/development-bundle/demos/sortable/index.html
@@ -0,0 +1,25 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="placeholder.html">Drop placeholder</a></li>
14 <li><a href="connect-lists.html">Connect lists</a></li>
15 <li><a href="connect-lists-through-tabs.html">Connect lists through tabs</a></li>
16 <li><a href="empty-lists.html">Handle empty lists</a></li>
17 <li><a href="items.html">Include / exclude items</a></li>
18 <li><a href="delay-start.html">Delay start</a></li>
19 <li><a href="display-grid.html">Display as grid</a></li>
20 <li><a href="portlets.html">Portlets</a></li>
21 </ul>
22</div>
23
24</body>
25</html>
diff --git a/static/development-bundle/demos/sortable/items.html b/static/development-bundle/demos/sortable/items.html
new file mode 100644
index 0000000..093631f
--- /dev/null
+++ b/static/development-bundle/demos/sortable/items.html
@@ -0,0 +1,68 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Include / exclude items</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; zoom: 1; }
12 #sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 3px; width: 90%; }
13 </style>
14 <script type="text/javascript">
15 $(function() {
16 $("#sortable1").sortable({
17 items: 'li:not(.ui-state-disabled)'
18 });
19
20 $("#sortable2").sortable({
21 cancel: '.ui-state-disabled'
22 });
23
24 $("#sortable1 li, #sortable2 li").disableSelection();
25 });
26 </script>
27</head>
28<body>
29<div class="demo">
30
31<h3 class="docs">Specify which items are sortable:</h3>
32
33<ul id="sortable1">
34 <li class="ui-state-default">Item 1</li>
35 <li class="ui-state-default ui-state-disabled">(I'm not sortable or a drop target)</li>
36 <li class="ui-state-default ui-state-disabled">(I'm not sortable or a drop target)</li>
37 <li class="ui-state-default">Item 4</li>
38</ul>
39
40<h3 class="docs">Cancel sorting (but keep as drop targets):</h3>
41
42<ul id="sortable2">
43 <li class="ui-state-default">Item 1</li>
44 <li class="ui-state-default ui-state-disabled">(I'm not sortable)</li>
45 <li class="ui-state-default ui-state-disabled">(I'm not sortable)</li>
46 <li class="ui-state-default">Item 4</li>
47</ul>
48
49</div><!-- End demo -->
50
51<div class="demo-description">
52
53<p>
54 Specify which items are eligible to sort by passing a jQuery selector into
55 the <code>items</code> option. Items excluded from this option are not
56 sortable, nor are they valid targets for sortable items.
57</p>
58
59<p>
60 To only prevent sorting on certain items, pass a jQuery selector into the
61 <code>cancel</code> option. Cancelled items remain valid sort targets for
62 others.
63</p>
64
65</div><!-- End demo-description -->
66
67</body>
68</html>
diff --git a/static/development-bundle/demos/sortable/placeholder.html b/static/development-bundle/demos/sortable/placeholder.html
new file mode 100644
index 0000000..565eb0b
--- /dev/null
+++ b/static/development-bundle/demos/sortable/placeholder.html
@@ -0,0 +1,53 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Drop placeholder</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
12 #sortable li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; height: 1.5em; }
13 html>body #sortable li { height: 1.5em; line-height: 1.2em; }
14 .ui-state-highlight { height: 1.5em; line-height: 1.2em; }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18 $("#sortable").sortable({
19 placeholder: 'ui-state-highlight'
20 });
21 $("#sortable").disableSelection();
22 });
23 </script>
24</head>
25<body>
26<div class="demo">
27
28<ul id="sortable">
29 <li class="ui-state-default">Item 1</li>
30 <li class="ui-state-default">Item 2</li>
31 <li class="ui-state-default">Item 3</li>
32 <li class="ui-state-default">Item 4</li>
33 <li class="ui-state-default">Item 5</li>
34 <li class="ui-state-default">Item 6</li>
35 <li class="ui-state-default">Item 7</li>
36</ul>
37
38</div><!-- End demo -->
39
40<div class="demo-description">
41
42<p>
43 When dragging a sortable item to a new location, other items will make room
44 for the that item by shifting to allow white space between them. Pass a
45 class into the <code>placeholder</code> option to style that space to
46 be visible. Use the boolean <code>forcePlaceholderSize</code> option
47 to set dimensions on the placeholder.
48</p>
49
50</div><!-- End demo-description -->
51
52</body>
53</html>
diff --git a/static/development-bundle/demos/sortable/portlets.html b/static/development-bundle/demos/sortable/portlets.html
new file mode 100644
index 0000000..5430989
--- /dev/null
+++ b/static/development-bundle/demos/sortable/portlets.html
@@ -0,0 +1,93 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Sortable - Portlets</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <style type="text/css">
11 .column { width: 170px; float: left; padding-bottom: 100px; }
12 .portlet { margin: 0 1em 1em 0; }
13 .portlet-header { margin: 0.3em; padding-bottom: 4px; padding-left: 0.2em; }
14 .portlet-header .ui-icon { float: right; }
15 .portlet-content { padding: 0.4em; }
16 .ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; height: 50px !important; }
17 .ui-sortable-placeholder * { visibility: hidden; }
18 </style>
19 <script type="text/javascript">
20 $(function() {
21 $(".column").sortable({
22 connectWith: '.column'
23 });
24
25 $(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
26 .find(".portlet-header")
27 .addClass("ui-widget-header ui-corner-all")
28 .prepend('<span class="ui-icon ui-icon-plusthick"></span>')
29 .end()
30 .find(".portlet-content");
31
32 $(".portlet-header .ui-icon").click(function() {
33 $(this).toggleClass("ui-icon-minusthick");
34 $(this).parents(".portlet:first").find(".portlet-content").toggle();
35 });
36
37 $(".column").disableSelection();
38 });
39 </script>
40</head>
41<body>
42<div class="demo">
43
44<div class="column">
45
46 <div class="portlet">
47 <div class="portlet-header">Feeds</div>
48 <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
49 </div>
50
51 <div class="portlet">
52 <div class="portlet-header">News</div>
53 <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
54 </div>
55
56</div>
57
58<div class="column">
59
60 <div class="portlet">
61 <div class="portlet-header">Shopping</div>
62 <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
63 </div>
64
65</div>
66
67<div class="column">
68
69 <div class="portlet">
70 <div class="portlet-header">Links</div>
71 <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
72 </div>
73
74 <div class="portlet">
75 <div class="portlet-header">Images</div>
76 <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
77 </div>
78
79</div>
80
81</div><!-- End demo -->
82
83<div class="demo-description">
84
85<p>
86 Enable portlets (styled divs) as sortables and use the <code>connectWith</code>
87 option to allow sorting between columns.
88</p>
89
90</div><!-- End demo-description -->
91
92</body>
93</html>
diff --git a/static/development-bundle/demos/switchClass/default.html b/static/development-bundle/demos/switchClass/default.html
new file mode 100644
index 0000000..09b48c9
--- /dev/null
+++ b/static/development-bundle/demos/switchClass/default.html
@@ -0,0 +1,47 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - switchClass Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/effects.core.js"></script>
8 <link type="text/css" href="../demos.css" rel="stylesheet" />
9 <style type="text/css">
10 .toggler { width: 500px; height: 200px; position: relative;}
11 #button { padding: .5em 1em; text-decoration: none; }
12 #effect {position: relative; }
13 #effect.newClass { width: 240px; padding: 1em; letter-spacing: 0; font-size: 1.2em; }
14 #effect.anotherNewClass { text-indent: 40px; letter-spacing: .4em; width: 410px; height: 100px; padding: 30px; margin: 10px; font-size: 1.6em; }
15 </style>
16 <script type="text/javascript">
17 $(function() {
18 $("#button").click(function(){
19 $(".newClass").switchClass('newClass', 'anotherNewClass', 1000);
20 $(".anotherNewClass").switchClass('anotherNewClass', 'newClass', 1000);
21 return false;
22 });
23 });
24 </script>
25</head>
26<body>
27
28<div class="demo">
29
30
31<div class="toggler">
32 <div id="effect" class="newClass ui-corner-all">
33 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede.
34 </div>
35</div>
36<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
37
38</div><!-- End demo -->
39
40<div class="demo-description">
41
42<p>Click the button above to preview the effect.</p>
43
44</div><!-- End demo-description -->
45
46</body>
47</html>
diff --git a/static/development-bundle/demos/switchClass/index.html b/static/development-bundle/demos/switchClass/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/switchClass/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/tabs/ajax.html b/static/development-bundle/demos/tabs/ajax.html
new file mode 100644
index 0000000..ecbc2c5
--- /dev/null
+++ b/static/development-bundle/demos/tabs/ajax.html
@@ -0,0 +1,40 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Tabs - Content via Ajax</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#tabs").tabs();
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20<div id="tabs">
21 <ul>
22 <li><a href="#tabs-1">Nunc tincidunt</a></li>
23 <li><a href="ajax/content1.html">Ajax Tab 1</a></li>
24 <li><a href="ajax/content2.html">Ajax Tab 2</a></li>
25 </ul>
26 <div id="tabs-1">
27 <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
28 </div>
29</div>
30
31</div><!-- End demo -->
32
33<div class="demo-description">
34
35<p>Fetch external content via Ajax for the tabs by setting an href value in the tab links. While the Ajax request is waiting for a response, the tab label changes to say "Loading...", then returns to the normal label once loaded.</p>
36
37</div><!-- End demo-description -->
38
39</body>
40</html>
diff --git a/static/development-bundle/demos/tabs/ajax/content1.html b/static/development-bundle/demos/tabs/ajax/content1.html
new file mode 100644
index 0000000..759bf13
--- /dev/null
+++ b/static/development-bundle/demos/tabs/ajax/content1.html
@@ -0,0 +1,4 @@
1<p><strong>This content was loaded via ajax.</strong>
2<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
3<p>Mauris vitae ante. Curabitur augue. Nulla purus nibh, lobortis ut, feugiat at, aliquam id, purus. Sed venenatis, lorem venenatis volutpat commodo, purus quam lacinia justo, mattis interdum pede pede a odio. Fusce nibh. Morbi nisl mauris, dapibus in, tristique eget, accumsan et, pede. Donec mauris risus, pulvinar ut, faucibus eu, mollis in, nunc. In augue massa, commodo a, cursus vehicula, varius eu, dui. Suspendisse sodales suscipit lorem. Morbi malesuada, eros quis condimentum dignissim, lectus nibh tristique urna, non bibendum diam massa vel risus. Morbi suscipit. Proin egestas, eros at scelerisque scelerisque, dolor lacus fringilla lacus, ut ullamcorper mi magna at quam. Aliquam sed elit. Aliquam turpis purus, congue quis, iaculis id, ullamcorper sit amet, justo. Maecenas sed mauris. Proin magna justo, interdum in, tincidunt eu, viverra eu, turpis. Suspendisse mollis. In magna. Phasellus pellentesque, urna pellentesque convallis pellentesque, augue sem blandit pede, at rhoncus libero nisl a odio.</p>
4<p>Sed vitae nibh non magna semper tempor. Duis dolor. Nam congue laoreet arcu. Fusce lobortis enim quis ligula. Maecenas commodo odio id mi. Maecenas scelerisque tellus eu odio. Etiam dolor purus, lacinia a, imperdiet in, aliquam et, eros. In pellentesque. Nullam ac massa. Integer et turpis. Ut quam augue, congue non, imperdiet id, eleifend ac, nisi. Etiam ac arcu. Cras iaculis accumsan erat. Nullam vulputate sapien nec nisi pretium rhoncus. Aliquam a nibh. Vivamus est ante, fermentum a, tincidunt ut, imperdiet nec, velit. Aenean non tortor. Sed nec mauris eget tellus condimentum rutrum.</p> \ No newline at end of file
diff --git a/static/development-bundle/demos/tabs/ajax/content2.html b/static/development-bundle/demos/tabs/ajax/content2.html
new file mode 100644
index 0000000..759bf13
--- /dev/null
+++ b/static/development-bundle/demos/tabs/ajax/content2.html
@@ -0,0 +1,4 @@
1<p><strong>This content was loaded via ajax.</strong>
2<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
3<p>Mauris vitae ante. Curabitur augue. Nulla purus nibh, lobortis ut, feugiat at, aliquam id, purus. Sed venenatis, lorem venenatis volutpat commodo, purus quam lacinia justo, mattis interdum pede pede a odio. Fusce nibh. Morbi nisl mauris, dapibus in, tristique eget, accumsan et, pede. Donec mauris risus, pulvinar ut, faucibus eu, mollis in, nunc. In augue massa, commodo a, cursus vehicula, varius eu, dui. Suspendisse sodales suscipit lorem. Morbi malesuada, eros quis condimentum dignissim, lectus nibh tristique urna, non bibendum diam massa vel risus. Morbi suscipit. Proin egestas, eros at scelerisque scelerisque, dolor lacus fringilla lacus, ut ullamcorper mi magna at quam. Aliquam sed elit. Aliquam turpis purus, congue quis, iaculis id, ullamcorper sit amet, justo. Maecenas sed mauris. Proin magna justo, interdum in, tincidunt eu, viverra eu, turpis. Suspendisse mollis. In magna. Phasellus pellentesque, urna pellentesque convallis pellentesque, augue sem blandit pede, at rhoncus libero nisl a odio.</p>
4<p>Sed vitae nibh non magna semper tempor. Duis dolor. Nam congue laoreet arcu. Fusce lobortis enim quis ligula. Maecenas commodo odio id mi. Maecenas scelerisque tellus eu odio. Etiam dolor purus, lacinia a, imperdiet in, aliquam et, eros. In pellentesque. Nullam ac massa. Integer et turpis. Ut quam augue, congue non, imperdiet id, eleifend ac, nisi. Etiam ac arcu. Cras iaculis accumsan erat. Nullam vulputate sapien nec nisi pretium rhoncus. Aliquam a nibh. Vivamus est ante, fermentum a, tincidunt ut, imperdiet nec, velit. Aenean non tortor. Sed nec mauris eget tellus condimentum rutrum.</p> \ No newline at end of file
diff --git a/static/development-bundle/demos/tabs/collapsible.html b/static/development-bundle/demos/tabs/collapsible.html
new file mode 100644
index 0000000..eab85af
--- /dev/null
+++ b/static/development-bundle/demos/tabs/collapsible.html
@@ -0,0 +1,54 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Tabs - Collapse content</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#tabs").tabs({
13 collapsible: true
14 });
15 });
16 </script>
17</head>
18<body>
19
20<div class="demo">
21
22<div id="tabs">
23 <ul>
24 <li><a href="#tabs-1">Nunc tincidunt</a></li>
25 <li><a href="#tabs-2">Proin dolor</a></li>
26 <li><a href="#tabs-3">Aenean lacinia</a></li>
27 </ul>
28 <div id="tabs-1">
29 <p><strong>Click this tab again to close the content pane.</strong></p>
30 <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
31 </div>
32 <div id="tabs-2">
33 <p><strong>Click this tab again to close the content pane.</strong></p>
34 <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
35 </div>
36 <div id="tabs-3">
37 <p><strong>Click this tab again to close the content pane.</strong></p>
38 <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
39 </div>
40</div>
41
42</div><!-- End demo -->
43
44<div class="demo-description">
45
46<p>Click the selected tab to toggle its content closed/open. To enable this functionality, set the <code>collapsible</code> option to true.</p>
47
48<pre><code>collapsible: true
49</code></pre>
50
51</div><!-- End demo-description -->
52
53</body>
54</html>
diff --git a/static/development-bundle/demos/tabs/default.html b/static/development-bundle/demos/tabs/default.html
new file mode 100644
index 0000000..6048bc9
--- /dev/null
+++ b/static/development-bundle/demos/tabs/default.html
@@ -0,0 +1,47 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Tabs - Default functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#tabs").tabs();
13 });
14 </script>
15</head>
16<body>
17
18<div class="demo">
19
20<div id="tabs">
21 <ul>
22 <li><a href="#tabs-1">Nunc tincidunt</a></li>
23 <li><a href="#tabs-2">Proin dolor</a></li>
24 <li><a href="#tabs-3">Aenean lacinia</a></li>
25 </ul>
26 <div id="tabs-1">
27 <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
28 </div>
29 <div id="tabs-2">
30 <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
31 </div>
32 <div id="tabs-3">
33 <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
34 <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
35 </div>
36</div>
37
38</div><!-- End demo -->
39
40<div class="demo-description">
41
42<p>Click tabs to swap between content that is broken into logical sections.</p>
43
44</div><!-- End demo-description -->
45
46</body>
47</html>
diff --git a/static/development-bundle/demos/tabs/index.html b/static/development-bundle/demos/tabs/index.html
new file mode 100644
index 0000000..903e9f3
--- /dev/null
+++ b/static/development-bundle/demos/tabs/index.html
@@ -0,0 +1,21 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Tabs Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 <li><a href="ajax.html">Content via Ajax</a></li>
14 <li><a href="mouseover.html">Open on mouseover</a></li>
15 <li><a href="collapsible.html">Collapse content</a></li>
16 <li><a href="sortable.html">Sortable</a></li>
17 </ul>
18</div>
19
20</body>
21</html>
diff --git a/static/development-bundle/demos/tabs/mouseover.html b/static/development-bundle/demos/tabs/mouseover.html
new file mode 100644
index 0000000..3232e1f
--- /dev/null
+++ b/static/development-bundle/demos/tabs/mouseover.html
@@ -0,0 +1,52 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Tabs - Open on mouseover</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#tabs").tabs({
13 event: 'mouseover'
14 });
15 });
16 </script>
17</head>
18<body>
19
20<div class="demo">
21
22<div id="tabs">
23 <ul>
24 <li><a href="#tabs-1">Nunc tincidunt</a></li>
25 <li><a href="#tabs-2">Proin dolor</a></li>
26 <li><a href="#tabs-3">Aenean lacinia</a></li>
27 </ul>
28 <div id="tabs-1">
29 <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
30 </div>
31 <div id="tabs-2">
32 <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
33 </div>
34 <div id="tabs-3">
35 <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
36 <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
37 </div>
38</div>
39
40</div><!-- End demo -->
41
42<div class="demo-description">
43
44<p>Toggle sections open/closed on mouseover with the <code>event</code> option. The default value for event is "click."</p>
45
46<pre><code>event: 'mouseover'
47</code></pre>
48
49</div><!-- End demo-description -->
50
51</body>
52</html>
diff --git a/static/development-bundle/demos/tabs/sortable.html b/static/development-bundle/demos/tabs/sortable.html
new file mode 100644
index 0000000..1b0d458
--- /dev/null
+++ b/static/development-bundle/demos/tabs/sortable.html
@@ -0,0 +1,62 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Tabs - Sortable</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.sortable.js"></script>
9 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>
10 <link type="text/css" href="../demos.css" rel="stylesheet" />
11 <script type="text/javascript">
12 $(function() {
13 $("#tabs").tabs().find(".ui-tabs-nav").sortable({axis:'x'});
14 });
15 </script>
16</head>
17<body>
18
19<div class="demo">
20
21<div id="tabs">
22 <ul>
23 <li><a href="#tabs-1">Nunc tincidunt</a></li>
24 <li><a href="#tabs-2">Proin dolor</a></li>
25 <li><a href="#tabs-3">Aenean lacinia</a></li>
26 </ul>
27 <div id="tabs-1">
28 <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
29 </div>
30 <div id="tabs-2">
31 <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
32 </div>
33 <div id="tabs-3">
34 <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
35 <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
36 </div>
37</div>
38
39</div><!-- End demo -->
40
41<div class="demo-description">
42
43<p>
44Drag the tabs above to re-order them.
45<p>
46
47<p>
48Making tabs sortable is as simple as calling
49
50<code>.sortable()</code>
51
52on the
53
54<code>.ui-tabs-nav</code>
55
56element.
57</p>
58
59</div><!-- End demo-description -->
60
61</body>
62</html>
diff --git a/static/development-bundle/demos/tabs/vertical.html b/static/development-bundle/demos/tabs/vertical.html
new file mode 100644
index 0000000..56001c3
--- /dev/null
+++ b/static/development-bundle/demos/tabs/vertical.html
@@ -0,0 +1,62 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Tabs - Vertical Tabs functionality</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/ui.core.js"></script>
8 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>
9 <link type="text/css" href="../demos.css" rel="stylesheet" />
10 <script type="text/javascript">
11 $(function() {
12 $("#tabs").tabs().addClass('ui-tabs-vertical ui-helper-clearfix');
13 $("#tabs li").removeClass('ui-corner-top').addClass('ui-corner-left');
14 });
15 </script>
16 <style type="text/css">
17
18/* Vertical Tabs
19----------------------------------*/
20.ui-tabs-vertical { width: 55em; }
21.ui-tabs-vertical .ui-tabs-nav { padding: .2em .1em .2em .2em; float: left; width: 12em; }
22.ui-tabs-vertical .ui-tabs-nav li { clear: left; width: 100%; border-bottom-width: 1px !important; border-right-width: 0 !important; margin: 0 -1px .2em 0; }
23.ui-tabs-vertical .ui-tabs-nav li a { display:block; }
24.ui-tabs-vertical .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 0; padding-right: .1em; border-right-width: 1px; border-right-width: 1px; }
25.ui-tabs-vertical .ui-tabs-panel { padding: 1em; float: right; width: 40em;}
26 </style>
27</head>
28<body>
29
30<div class="demo">
31
32<div id="tabs">
33 <ul>
34 <li><a href="#tabs-1">Nunc tincidunt</a></li>
35 <li><a href="#tabs-2">Proin dolor</a></li>
36 <li><a href="#tabs-3">Aenean lacinia</a></li>
37 </ul>
38 <div id="tabs-1">
39 <h2>Content heading 1</h2>
40 <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
41 </div>
42 <div id="tabs-2">
43 <h2>Content heading 2</h2>
44 <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
45 </div>
46 <div id="tabs-3">
47 <h2>Content heading 3</h2>
48 <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
49 <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
50 </div>
51</div>
52
53</div><!-- End demo -->
54
55<div class="demo-description">
56
57<p>Click tabs to swap between content that is broken into logical sections.</p>
58
59</div><!-- End demo-description -->
60
61</body>
62</html>
diff --git a/static/development-bundle/demos/toggle/default.html b/static/development-bundle/demos/toggle/default.html
new file mode 100644
index 0000000..ffb464b
--- /dev/null
+++ b/static/development-bundle/demos/toggle/default.html
@@ -0,0 +1,94 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - Toggle Demo</title>
5 <link type="text/css" href="../../themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="../../ui/effects.core.js"></script>
8 <script type="text/javascript" src="../../ui/effects.blind.js"></script>
9 <script type="text/javascript" src="../../ui/effects.bounce.js"></script>
10 <script type="text/javascript" src="../../ui/effects.clip.js"></script>
11 <script type="text/javascript" src="../../ui/effects.drop.js"></script>
12 <script type="text/javascript" src="../../ui/effects.explode.js"></script>
13 <script type="text/javascript" src="../../ui/effects.fold.js"></script>
14 <script type="text/javascript" src="../../ui/effects.highlight.js"></script>
15 <script type="text/javascript" src="../../ui/effects.pulsate.js"></script>
16 <script type="text/javascript" src="../../ui/effects.scale.js"></script>
17 <script type="text/javascript" src="../../ui/effects.shake.js"></script>
18 <script type="text/javascript" src="../../ui/effects.slide.js"></script>
19 <script type="text/javascript" src="../../ui/effects.transfer.js"></script>
20 <link type="text/css" href="../demos.css" rel="stylesheet" />
21 <style type="text/css">
22 .toggler { width: 500px; height: 200px; }
23 #button { padding: .5em 1em; text-decoration: none; }
24 #effect { width: 240px; height: 135px; padding: 0.4em; position: relative; }
25 #effect h3 { margin: 0; padding: 0.4em; text-align: center; }
26 .ui-effects-transfer { border: 2px dotted gray; }
27 </style>
28 <script type="text/javascript">
29 $(function() {
30 //run the currently selected effect
31 function runEffect(){
32 //get effect type from
33 var selectedEffect = $('#effectTypes').val();
34
35 //most effect types need no options passed by default
36 var options = {};
37 //check if it's scale, transfer, or size - they need options explicitly set
38 if(selectedEffect == 'scale'){ options = {percent: 0}; }
39 else if(selectedEffect == 'size'){ options = { to: {width: 200,height: 60} }; }
40
41 //run the effect
42 $("#effect").toggle(selectedEffect,options,500);
43 };
44
45 //set effect from select menu value
46 $("#button").click(function() {
47 runEffect();
48 return false;
49 });
50
51 });
52 </script>
53</head>
54<body>
55
56<div class="demo">
57
58<div class="toggler">
59 <div id="effect" class="ui-widget-content ui-corner-all">
60 <h3 class="ui-widget-header ui-corner-all">Toggle</h3>
61 <p>
62 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
63 </p>
64 </div>
65</div>
66
67<select name="effects" id="effectTypes">
68 <option value="blind">Blind</option>
69 <option value="bounce">Bounce</option>
70 <option value="clip">Clip</option>
71 <option value="drop">Drop</option>
72 <option value="explode">Explode</option>
73 <option value="fold">Fold</option>
74 <option value="highlight">Highlight</option>
75 <option value="puff">Puff</option>
76 <option value="pulsate">Pulsate</option>
77 <option value="scale">Scale</option>
78 <option value="shake">Shake</option>
79 <option value="size">Size</option>
80 <option value="slide">Slide</option>
81 <option value="transfer">Transfer</option>
82</select>
83
84<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
85</div><!-- End demo -->
86
87<div class="demo-description">
88
89<p>Click the button above to preview the effect.</p>
90
91</div><!-- End demo-description -->
92
93</body>
94</html>
diff --git a/static/development-bundle/demos/toggle/index.html b/static/development-bundle/demos/toggle/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/toggle/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/demos/toggleClass/default.html b/static/development-bundle/demos/toggleClass/default.html
new file mode 100644
index 0000000..8faa159
--- /dev/null
+++ b/static/development-bundle/demos/toggleClass/default.html
@@ -0,0 +1,45 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects - toggleClass Demo</title>
5 <link type="text/css" href="http://jquery-ui.googlecode.com/svn/trunk/themes/base/ui.all.css" rel="stylesheet" />
6 <script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/trunk/jquery-1.3.2.js"></script>
7 <script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/trunk/ui/effects.core.js"></script>
8 <link type="text/css" href="http://jquery-ui.googlecode.com/svn/trunk/demos/demos.css" rel="stylesheet" />
9 <style type="text/css">
10 .toggler { width: 500px; height: 200px; position: relative;}
11 #button { padding: .5em 1em; text-decoration: none; }
12 #effect {position: relative; width: 240px; padding: 1em; letter-spacing: 0; font-size: 1.2em; border: 1px solid #000; background: #eee; color: #333; }
13 #effect.newClass { text-indent: 40px; letter-spacing: .4em; width: 410px; height: 100px; padding: 30px; margin: 10px; font-size: 1.6em; }
14 </style>
15 <script type="text/javascript">
16 $(function() {
17 $("#button").click(function() {
18 $('#effect').toggleClass('newClass', 1000);
19 return false;
20 });
21 });
22 </script>
23</head>
24<body>
25
26<div class="demo">
27
28<div class="toggler">
29 <div id="effect" class="newClass ui-corner-all">
30 Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede.
31 </div>
32</div>
33
34<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
35
36</div><!-- End demo -->
37
38<div class="demo-description">
39
40<p>Click the button above to preview the effect.</p>
41
42</div><!-- End demo-description -->
43
44</body>
45</html>
diff --git a/static/development-bundle/demos/toggleClass/index.html b/static/development-bundle/demos/toggleClass/index.html
new file mode 100644
index 0000000..4b9471d
--- /dev/null
+++ b/static/development-bundle/demos/toggleClass/index.html
@@ -0,0 +1,17 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <title>jQuery UI Effects Demos</title>
5 <link type="text/css" href="../demos.css" rel="stylesheet" />
6</head>
7<body>
8
9<div class="demos-nav">
10 <h4>Examples</h4>
11 <ul>
12 <li class="demo-config-on"><a href="default.html">Default functionality</a></li>
13 </ul>
14</div>
15
16</body>
17</html>
diff --git a/static/development-bundle/docs/accordion.html b/static/development-bundle/docs/accordion.html
new file mode 100644
index 0000000..bf89bc3
--- /dev/null
+++ b/static/development-bundle/docs/accordion.html
@@ -0,0 +1,869 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Accordion</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>Make the selected elements Accordion widgets. Semantic requirements:</p>
15<p>The markup of your accordion container needs pairs of headers and content panels. By default, the header elements are anchors, assuming the following structure:</p>
16<pre>&lt;div id=&quot;accordion&quot;&gt;
17 &lt;a href=&quot;#&quot;&gt;First header&lt;/a&gt;
18 &lt;div&gt;First content&lt;/div&gt;
19 &lt;a href=&quot;#&quot;&gt;Second header&lt;/a&gt;
20 &lt;div&gt;Second content&lt;/div&gt;
21&lt;/div&gt;</pre>
22<p>If you use a different element for the header, specify the header-option with an appropriate selector, eg. header: 'h3'. The content element must be always next to its header.</p>
23<p>If you have links inside the accordion content and use a-elements as headers, add a class to them and use that as the header, eg. header: 'a.header'.</p>
24<p>Use activate(Number) to change the active content programmatically.</p>
25<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/API/1.7.2/Accordion?section=1" title="Edit section: NOTE: If you want multiple sections open at once, don't use an accordion">edit</a>]</div><a name="NOTE:_If_you_want_multiple_sections_open_at_once.2C_don.27t_use_an_accordion"></a><h4>NOTE: If you want multiple sections open at once, don't use an accordion</h4>
26<p>An accordion doesn't allow more than one content panel to be open at the same time, and it takes a lot of effort to do that. If you are looking for a widget that allows more than one content panel to be open, don't use this. Usually it can be written with a few lines of jQuery instead, something like this:</p>
27<pre>jQuery(document).ready(function(){
28 $('.accordion .head').click(function() {
29 $(this).next().toggle();
30 return false;
31 }).next().hide();
32});</pre>
33<p>Or animated:</p>
34<pre>jQuery(document).ready(function(){
35 $('.accordion .head').click(function() {
36 $(this).next().toggle('slow');
37 return false;
38 }).next().hide();
39});</pre>
40 </div>
41 <div id="overview-dependencies">
42 <h3>Dependencies</h3>
43 <ul>
44<li>UI Core</li>
45<li>UI Effects Core (Optional - only for non-default animations)</li>
46</ul>
47 </div>
48 <div id="overview-example">
49 <h3>Example</h3>
50 <div id="overview-example" class="example">
51<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
52<p><div id="demo" class="tabs-container" rel="310">
53A simple jQuery UI Accordion.<br />
54</p>
55<pre>$(&quot;#accordion&quot;).accordion();
56</pre>
57<p></div><div id="source" class="tabs-container">
58</p>
59<pre>&lt;!DOCTYPE html&gt;
60&lt;html&gt;
61&lt;head&gt;
62 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
63 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
64 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
65 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.accordion.js&quot;&gt;&lt;/script&gt;
66 &lt;script type="text/javascript"&gt;
67 $(document).ready(function(){
68 $(&quot;#accordion&quot;).accordion();
69 });
70 &lt;/script&gt;
71&lt;/head&gt;
72&lt;body style="font-size:62.5%;"&gt;
73
74&lt;div id=&quot;accordion&quot;&gt;
75 &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Section 1&lt;/a&gt;&lt;/h3&gt;
76 &lt;div&gt;
77 &lt;p&gt;
78 Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
79 ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
80 amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
81 odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
82 &lt;/p&gt;
83 &lt;/div&gt;
84 &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Section 2&lt;/a&gt;&lt;/h3&gt;
85 &lt;div&gt;
86 &lt;p&gt;
87 Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
88 purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
89 velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
90 suscipit faucibus urna.
91 &lt;/p&gt;
92 &lt;/div&gt;
93 &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Section 3&lt;/a&gt;&lt;/h3&gt;
94 &lt;div&gt;
95 &lt;p&gt;
96 Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
97 Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
98 ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
99 lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
100 &lt;/p&gt;
101 &lt;ul&gt;
102 &lt;li&gt;List item one&lt;/li&gt;
103 &lt;li&gt;List item two&lt;/li&gt;
104 &lt;li&gt;List item three&lt;/li&gt;
105 &lt;/ul&gt;
106 &lt;/div&gt;
107 &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Section 4&lt;/a&gt;&lt;/h3&gt;
108 &lt;div&gt;
109 &lt;p&gt;
110 Cras dictum. Pellentesque habitant morbi tristique senectus et netus
111 et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
112 faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
113 mauris vel est.
114 &lt;/p&gt;
115 &lt;p&gt;
116 Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
117 Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
118 inceptos himenaeos.
119 &lt;/p&gt;
120 &lt;/div&gt;
121&lt;/div&gt;
122
123&lt;/body&gt;
124&lt;/html&gt;
125</pre>
126<p></div>
127</p><p></div>
128 </div>
129 </div>
130 <div id="options">
131 <h2 class="top-header">Options</h2>
132 <ul class="options-list">
133
134<li class="option" id="option-active">
135 <div class="option-header">
136 <h3 class="option-name"><a href="#option-active">active</a></h3>
137 <dl>
138 <dt class="option-type-label">Type:</dt>
139 <dd class="option-type">Selector, Element, jQuery, Boolean, Number</dd>
140
141 <dt class="option-default-label">Default:</dt>
142 <dd class="option-default">first child</dd>
143
144 </dl>
145 </div>
146 <div class="option-description">
147 <p>Selector for the active element. Set to false to display none at start. Needs <code>collapsible: true</code>.</p>
148 </div>
149 <div class="option-examples">
150 <h4>Code examples</h4>
151 <dl class="option-examples-list">
152
153<dt>
154 Initialize a accordion with the <code>active</code> option specified.
155</dt>
156<dd>
157<pre><code>$('.selector').accordion({ active: 2 });</code></pre>
158</dd>
159
160
161<dt>
162 Get or set the <code>active</code> option, after init.
163</dt>
164<dd>
165<pre><code>//getter
166var active = $('.selector').accordion('option', 'active');
167//setter
168$('.selector').accordion('option', 'active', 2);</code></pre>
169</dd>
170
171 </dl>
172 </div>
173</li>
174
175
176<li class="option" id="option-animated">
177 <div class="option-header">
178 <h3 class="option-name"><a href="#option-animated">animated</a></h3>
179 <dl>
180 <dt class="option-type-label">Type:</dt>
181 <dd class="option-type">Boolean, String</dd>
182
183 <dt class="option-default-label">Default:</dt>
184 <dd class="option-default">'slide'</dd>
185
186 </dl>
187 </div>
188 <div class="option-description">
189 <p>Choose your favorite animation, or disable them (set to false). In addition to the default, 'bounceslide' and all defined easing methods are supported ('bounceslide' requires UI Effects Core).</p>
190 </div>
191 <div class="option-examples">
192 <h4>Code examples</h4>
193 <dl class="option-examples-list">
194
195<dt>
196 Initialize a accordion with the <code>animated</code> option specified.
197</dt>
198<dd>
199<pre><code>$('.selector').accordion({ animated: 'bounceslide' });</code></pre>
200</dd>
201
202
203<dt>
204 Get or set the <code>animated</code> option, after init.
205</dt>
206<dd>
207<pre><code>//getter
208var animated = $('.selector').accordion('option', 'animated');
209//setter
210$('.selector').accordion('option', 'animated', 'bounceslide');</code></pre>
211</dd>
212
213 </dl>
214 </div>
215</li>
216
217
218<li class="option" id="option-autoHeight">
219 <div class="option-header">
220 <h3 class="option-name"><a href="#option-autoHeight">autoHeight</a></h3>
221 <dl>
222 <dt class="option-type-label">Type:</dt>
223 <dd class="option-type">Boolean</dd>
224
225 <dt class="option-default-label">Default:</dt>
226 <dd class="option-default">true</dd>
227
228 </dl>
229 </div>
230 <div class="option-description">
231 <p>If set, the highest content part is used as height reference for all other parts. Provides more consistent animations.</p>
232 </div>
233 <div class="option-examples">
234 <h4>Code examples</h4>
235 <dl class="option-examples-list">
236
237<dt>
238 Initialize a accordion with the <code>autoHeight</code> option specified.
239</dt>
240<dd>
241<pre><code>$('.selector').accordion({ autoHeight: false });</code></pre>
242</dd>
243
244
245<dt>
246 Get or set the <code>autoHeight</code> option, after init.
247</dt>
248<dd>
249<pre><code>//getter
250var autoHeight = $('.selector').accordion('option', 'autoHeight');
251//setter
252$('.selector').accordion('option', 'autoHeight', false);</code></pre>
253</dd>
254
255 </dl>
256 </div>
257</li>
258
259
260<li class="option" id="option-clearStyle">
261 <div class="option-header">
262 <h3 class="option-name"><a href="#option-clearStyle">clearStyle</a></h3>
263 <dl>
264 <dt class="option-type-label">Type:</dt>
265 <dd class="option-type">Boolean</dd>
266
267 <dt class="option-default-label">Default:</dt>
268 <dd class="option-default">false</dd>
269
270 </dl>
271 </div>
272 <div class="option-description">
273 <p>If set, clears height and overflow styles after finishing animations. This enables accordions to work with dynamic content. Won't work together with autoHeight.</p>
274 </div>
275 <div class="option-examples">
276 <h4>Code examples</h4>
277 <dl class="option-examples-list">
278
279<dt>
280 Initialize a accordion with the <code>clearStyle</code> option specified.
281</dt>
282<dd>
283<pre><code>$('.selector').accordion({ clearStyle: true });</code></pre>
284</dd>
285
286
287<dt>
288 Get or set the <code>clearStyle</code> option, after init.
289</dt>
290<dd>
291<pre><code>//getter
292var clearStyle = $('.selector').accordion('option', 'clearStyle');
293//setter
294$('.selector').accordion('option', 'clearStyle', true);</code></pre>
295</dd>
296
297 </dl>
298 </div>
299</li>
300
301
302<li class="option" id="option-collapsible">
303 <div class="option-header">
304 <h3 class="option-name"><a href="#option-collapsible">collapsible</a></h3>
305 <dl>
306 <dt class="option-type-label">Type:</dt>
307 <dd class="option-type">Boolean</dd>
308
309 <dt class="option-default-label">Default:</dt>
310 <dd class="option-default">false</dd>
311
312 </dl>
313 </div>
314 <div class="option-description">
315 <p>Whether all the sections can be closed at once. Allows collapsing the active section by the triggering event (click is the default).</p>
316 </div>
317 <div class="option-examples">
318 <h4>Code examples</h4>
319 <dl class="option-examples-list">
320
321<dt>
322 Initialize a accordion with the <code>collapsible</code> option specified.
323</dt>
324<dd>
325<pre><code>$('.selector').accordion({ collapsible: true });</code></pre>
326</dd>
327
328
329<dt>
330 Get or set the <code>collapsible</code> option, after init.
331</dt>
332<dd>
333<pre><code>//getter
334var collapsible = $('.selector').accordion('option', 'collapsible');
335//setter
336$('.selector').accordion('option', 'collapsible', true);</code></pre>
337</dd>
338
339 </dl>
340 </div>
341</li>
342
343
344<li class="option" id="option-event">
345 <div class="option-header">
346 <h3 class="option-name"><a href="#option-event">event</a></h3>
347 <dl>
348 <dt class="option-type-label">Type:</dt>
349 <dd class="option-type">String</dd>
350
351 <dt class="option-default-label">Default:</dt>
352 <dd class="option-default">'click'</dd>
353
354 </dl>
355 </div>
356 <div class="option-description">
357 <p>The event on which to trigger the accordion.</p>
358 </div>
359 <div class="option-examples">
360 <h4>Code examples</h4>
361 <dl class="option-examples-list">
362
363<dt>
364 Initialize a accordion with the <code>event</code> option specified.
365</dt>
366<dd>
367<pre><code>$('.selector').accordion({ event: 'mouseover' });</code></pre>
368</dd>
369
370
371<dt>
372 Get or set the <code>event</code> option, after init.
373</dt>
374<dd>
375<pre><code>//getter
376var event = $('.selector').accordion('option', 'event');
377//setter
378$('.selector').accordion('option', 'event', 'mouseover');</code></pre>
379</dd>
380
381 </dl>
382 </div>
383</li>
384
385
386<li class="option" id="option-fillSpace">
387 <div class="option-header">
388 <h3 class="option-name"><a href="#option-fillSpace">fillSpace</a></h3>
389 <dl>
390 <dt class="option-type-label">Type:</dt>
391 <dd class="option-type">Boolean</dd>
392
393 <dt class="option-default-label">Default:</dt>
394 <dd class="option-default">false</dd>
395
396 </dl>
397 </div>
398 <div class="option-description">
399 <p>If set, the accordion completely fills the height of the parent element. Overrides autoheight.</p>
400 </div>
401 <div class="option-examples">
402 <h4>Code examples</h4>
403 <dl class="option-examples-list">
404
405<dt>
406 Initialize a accordion with the <code>fillSpace</code> option specified.
407</dt>
408<dd>
409<pre><code>$('.selector').accordion({ fillSpace: true });</code></pre>
410</dd>
411
412
413<dt>
414 Get or set the <code>fillSpace</code> option, after init.
415</dt>
416<dd>
417<pre><code>//getter
418var fillSpace = $('.selector').accordion('option', 'fillSpace');
419//setter
420$('.selector').accordion('option', 'fillSpace', true);</code></pre>
421</dd>
422
423 </dl>
424 </div>
425</li>
426
427
428<li class="option" id="option-header">
429 <div class="option-header">
430 <h3 class="option-name"><a href="#option-header">header</a></h3>
431 <dl>
432 <dt class="option-type-label">Type:</dt>
433 <dd class="option-type">Selector, jQuery</dd>
434
435 <dt class="option-default-label">Default:</dt>
436 <dd class="option-default">'&gt; li &gt;&nbsp;:first-child,&gt;&nbsp;:not(li):even'</dd>
437
438 </dl>
439 </div>
440 <div class="option-description">
441 <p>Selector for the header element.</p>
442 </div>
443 <div class="option-examples">
444 <h4>Code examples</h4>
445 <dl class="option-examples-list">
446
447<dt>
448 Initialize a accordion with the <code>header</code> option specified.
449</dt>
450<dd>
451<pre><code>$('.selector').accordion({ header: 'h3' });</code></pre>
452</dd>
453
454
455<dt>
456 Get or set the <code>header</code> option, after init.
457</dt>
458<dd>
459<pre><code>//getter
460var header = $('.selector').accordion('option', 'header');
461//setter
462$('.selector').accordion('option', 'header', 'h3');</code></pre>
463</dd>
464
465 </dl>
466 </div>
467</li>
468
469
470<li class="option" id="option-icons">
471 <div class="option-header">
472 <h3 class="option-name"><a href="#option-icons">icons</a></h3>
473 <dl>
474 <dt class="option-type-label">Type:</dt>
475 <dd class="option-type">Object</dd>
476
477 <dt class="option-default-label">Default:</dt>
478 <dd class="option-default">{ 'header': 'ui-icon-triangle-1-e', 'headerSelected': 'ui-icon-triangle-1-s' }</dd>
479
480 </dl>
481 </div>
482 <div class="option-description">
483 <p>Icons to use for headers. Icons may be specified for 'header' and 'headerSelected', and we recommend using the icons native to the jQuery UI CSS Framework manipulated by <a href="http://www.themeroller.com" class="external text" title="http://www.themeroller.com">jQuery UI ThemeRoller</a></p>
484 </div>
485 <div class="option-examples">
486 <h4>Code examples</h4>
487 <dl class="option-examples-list">
488
489<dt>
490 Initialize a accordion with the <code>icons</code> option specified.
491</dt>
492<dd>
493<pre><code>$('.selector').accordion({ icons: { 'header': 'ui-icon-plus', 'headerSelected': 'ui-icon-minus' } });</code></pre>
494</dd>
495
496
497<dt>
498 Get or set the <code>icons</code> option, after init.
499</dt>
500<dd>
501<pre><code>//getter
502var icons = $('.selector').accordion('option', 'icons');
503//setter
504$('.selector').accordion('option', 'icons', { 'header': 'ui-icon-plus', 'headerSelected': 'ui-icon-minus' });</code></pre>
505</dd>
506
507 </dl>
508 </div>
509</li>
510
511
512<li class="option" id="option-navigation">
513 <div class="option-header">
514 <h3 class="option-name"><a href="#option-navigation">navigation</a></h3>
515 <dl>
516 <dt class="option-type-label">Type:</dt>
517 <dd class="option-type">Boolean</dd>
518
519 <dt class="option-default-label">Default:</dt>
520 <dd class="option-default">false</dd>
521
522 </dl>
523 </div>
524 <div class="option-description">
525 <p>If set, looks for the anchor that matches location.href and activates it. Great for href-based state-saving. Use navigationFilter to implement your own matcher.</p>
526 </div>
527 <div class="option-examples">
528 <h4>Code examples</h4>
529 <dl class="option-examples-list">
530
531<dt>
532 Initialize a accordion with the <code>navigation</code> option specified.
533</dt>
534<dd>
535<pre><code>$('.selector').accordion({ navigation: true });</code></pre>
536</dd>
537
538
539<dt>
540 Get or set the <code>navigation</code> option, after init.
541</dt>
542<dd>
543<pre><code>//getter
544var navigation = $('.selector').accordion('option', 'navigation');
545//setter
546$('.selector').accordion('option', 'navigation', true);</code></pre>
547</dd>
548
549 </dl>
550 </div>
551</li>
552
553
554<li class="option" id="option-navigationFilter">
555 <div class="option-header">
556 <h3 class="option-name"><a href="#option-navigationFilter">navigationFilter</a></h3>
557 <dl>
558 <dt class="option-type-label">Type:</dt>
559 <dd class="option-type">Function</dd>
560
561 <dt class="option-default-label">Default:</dt>
562 <dd class="option-default"> </dd>
563
564 </dl>
565 </div>
566 <div class="option-description">
567 <p>Overwrite the default location.href-matching with your own matcher.</p>
568 </div>
569 <div class="option-examples">
570 <h4>Code examples</h4>
571 <dl class="option-examples-list">
572
573<dt>
574 Initialize a accordion with the <code>navigationFilter</code> option specified.
575</dt>
576<dd>
577<pre><code>$('.selector').accordion({ navigationFilter: function(){ ... } });</code></pre>
578</dd>
579
580
581<dt>
582 Get or set the <code>navigationFilter</code> option, after init.
583</dt>
584<dd>
585<pre><code>//getter
586var navigationFilter = $('.selector').accordion('option', 'navigationFilter');
587//setter
588$('.selector').accordion('option', 'navigationFilter', function(){ ... });</code></pre>
589</dd>
590
591 </dl>
592 </div>
593</li>
594
595 </ul>
596 </div>
597 <div id="events">
598 <h2 class="top-header">Events</h2>
599 <ul class="events-list">
600
601<li class="event" id="event-change">
602 <div class="event-header">
603 <h3 class="event-name"><a href="#event-change">change</a></h3>
604 <dl>
605 <dt class="event-type-label">Type:</dt>
606 <dd class="event-type">accordionchange</dd>
607 </dl>
608 </div>
609 <div class="event-description">
610 <p>This event is triggered every time the accordion changes. If the accordion is animated, the event will be triggered upon completion of the animation; otherwise, it is triggered immediately.
611</p>
612<pre>$('.ui-accordion').bind('accordionchange', function(event, ui) {
613 ui.newHeader // jQuery object, activated header
614 ui.oldHeader // jQuery object, previous header
615 ui.newContent // jQuery object, activated content
616 ui.oldContent // jQuery object, previous content
617});</pre></p>
618 </div>
619 <div class="event-examples">
620 <h4>Code examples</h4>
621 <dl class="event-examples-list">
622
623<dt>
624 Supply a callback function to handle the <code>change</code> event as an init option.
625</dt>
626<dd>
627<pre><code>$('.selector').accordion({
628 change: function(event, ui) { ... }
629});</code></pre>
630</dd>
631
632
633<dt>
634 Bind to the <code>change</code> event by type: <code>accordionchange</code>.
635</dt>
636<dd>
637<pre><code>$('.selector').bind('accordionchange', function(event, ui) {
638 ...
639});</code></pre>
640</dd>
641
642 </dl>
643 </div>
644</li>
645
646<p>
647<li class="event" id="event-changestart">
648 <div class="event-header">
649 <h3 class="event-name"><a href="#event-changestart">changestart</a></h3>
650 <dl>
651 <dt class="event-type-label">Type:</dt>
652 <dd class="event-type">accordionchangestart</dd>
653 </dl>
654 </div>
655 <div class="event-description">
656 <p>This event is triggered every time the accordion starts to change.
657</p>
658<pre>$('.ui-accordion').bind('accordionchangestart', function(event, ui) {
659 ui.newHeader // jQuery object, activated header
660 ui.oldHeader // jQuery object, previous header
661 ui.newContent // jQuery object, activated content
662 ui.oldContent // jQuery object, previous content
663});</pre></p>
664 </div>
665 <div class="event-examples">
666 <h4>Code examples</h4>
667 <dl class="event-examples-list">
668
669<dt>
670 Supply a callback function to handle the <code>changestart</code> event as an init option.
671</dt>
672<dd>
673<pre><code>$('.selector').accordion({
674 changestart: function(event, ui) { ... }
675});</code></pre>
676</dd>
677
678
679<dt>
680 Bind to the <code>changestart</code> event by type: <code>accordionchangestart</code>.
681</dt>
682<dd>
683<pre><code>$('.selector').bind('accordionchangestart', function(event, ui) {
684 ...
685});</code></pre>
686</dd>
687
688 </dl>
689 </div>
690</li>
691
692 </ul>
693 </div>
694 <div id="methods">
695 <h2 class="top-header">Methods</h2>
696 <ul class="methods-list">
697
698<li class="method" id="method-destroy">
699 <div class="method-header">
700 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
701 <dl>
702 <dt class="method-signature-label">Signature:</dt>
703 <dd class="method-signature">.accordion( 'destroy'
704
705
706
707
708
709
710
711)</dd>
712 </dl>
713 </div>
714 <div class="method-description">
715 <p>Remove the accordion functionality completely. This will return the element back to its pre-init state.</p>
716 </div>
717</li>
718
719<p>
720<li class="method" id="method-disable">
721 <div class="method-header">
722 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
723 <dl>
724 <dt class="method-signature-label">Signature:</dt>
725 <dd class="method-signature">.accordion( 'disable'
726
727
728
729
730
731
732
733)</dd>
734 </dl>
735 </div>
736 <div class="method-description">
737 <p>Disable the accordion.</p>
738 </div>
739</li>
740
741
742<li class="method" id="method-enable">
743 <div class="method-header">
744 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
745 <dl>
746 <dt class="method-signature-label">Signature:</dt>
747 <dd class="method-signature">.accordion( 'enable'
748
749
750
751
752
753
754
755)</dd>
756 </dl>
757 </div>
758 <div class="method-description">
759 <p>Enable the accordion.</p>
760 </div>
761</li>
762
763
764<li class="method" id="method-option">
765 <div class="method-header">
766 <h3 class="method-name"><a href="#method-option">option</a></h3>
767 <dl>
768 <dt class="method-signature-label">Signature:</dt>
769 <dd class="method-signature">.accordion( 'option'
770
771, optionName
772
773, <span class="optional">[</span>value<span class="optional">] </span>
774
775
776
777)</dd>
778 </dl>
779 </div>
780 <div class="method-description">
781 <p>Get or set any accordion option. If no value is specified, will act as a getter.</p>
782 </div>
783</li>
784
785
786<li class="method" id="method-activate">
787 <div class="method-header">
788 <h3 class="method-name"><a href="#method-activate">activate</a></h3>
789 <dl>
790 <dt class="method-signature-label">Signature:</dt>
791 <dd class="method-signature">.accordion( 'activate'
792
793, index
794
795
796
797
798
799)</dd>
800 </dl>
801 </div>
802 <div class="method-description">
803 <p>Activate a content part of the Accordion programmatically. The index can be a zero-indexed number to match the position of the header to close or a Selector matching an element. Pass <code>false</code> to close all (only possible with <code>collapsible:true</code>).</p>
804 </div>
805</li>
806
807 </ul>
808 </div>
809 <div id="theming">
810 <h2 class="top-header">Theming</h2>
811 <p>The jQuery UI Accordion plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
812</p>
813 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.accordion.css stylesheet that can be modified. These classes are highlighed in bold below.
814</p>
815
816 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
817 &lt;div class="<strong>ui-accordion</strong> ui-widget ui-helper-reset"&gt;<br />
818&nbsp;&nbsp;&lt;h3 class="<strong>ui-accordion-header</strong> ui-helper-reset ui-state-active ui-corner-top"&gt;<br />
819&nbsp;&nbsp;&nbsp;&nbsp;&lt;span class="ui-icon ui-icon-triangle-1-s"/&gt;<br />
820&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href="#"&gt;Section 1&lt;/a&gt;<br />
821&nbsp;&nbsp;&lt;/h3&gt;<br />
822&nbsp;&nbsp;&lt;div class="<strong>ui-accordion-content</strong> ui-helper-reset ui-widget-content ui-corner-bottom <strong>ui-accordion-content-active</strong>"&gt;<br />
823&nbsp;&nbsp;&nbsp;&nbsp;Section 1 content<br />
824&nbsp;&nbsp;&lt;/div&gt;<br />
825&nbsp;&nbsp;&lt;h3 class="<strong>ui-accordion-header</strong> ui-helper-reset ui-state-default ui-corner-all"&gt;<br />
826&nbsp;&nbsp;&nbsp;&nbsp;&lt;span class="ui-icon ui-icon-triangle-1-e"/&gt;<br />
827&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href="#"&gt;Section 2&lt;/a&gt;<br />
828&nbsp;&nbsp;&lt;/h3&gt;<br />
829&nbsp;&nbsp;&lt;div class="<strong>ui-accordion-content</strong> ui-helper-reset ui-widget-content ui-corner-bottom"&gt;<br />
830&nbsp;&nbsp;&nbsp;&nbsp;Section 2 content<br />
831&nbsp;&nbsp;&lt;/div&gt;<br />
832&nbsp;&nbsp;&lt;h3 class="<strong>ui-accordion-header</strong> ui-helper-reset ui-state-default ui-corner-all"&gt;<br />
833&nbsp;&nbsp;&nbsp;&nbsp;&lt;span class="ui-icon ui-icon-triangle-1-e"/&gt;<br />
834&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href="#"&gt;Section 3&lt;/a&gt;<br />
835&nbsp;&nbsp;&lt;/h3&gt;<br />
836&nbsp;&nbsp;&lt;div class="<strong>ui-accordion-content</strong> ui-helper-reset ui-widget-content ui-corner-bottom"&gt;<br />
837&nbsp;&nbsp;&nbsp;&nbsp;Section 3 content<br />
838&nbsp;&nbsp;&lt;/div&gt;<br />
839&lt;/div&gt;<br />
840 <p class="theme-note">
841 <strong>
842 Note: This is a sample of markup generated by the accordion plugin, not markup you should use to create a accordion. The only markup needed for that is <br />&lt;div&gt;<br />
843&#160;&#160;&#160;&lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Section 1&lt;/a&gt;&lt;/h3&gt;<br />
844&#160;&#160;&#160;&lt;div&gt;<br />
845&#160;&#160;&#160;&#160;&#160;&#160;Section 1 content<br />
846&#160;&#160;&#160;&lt;/div&gt;<br />
847&#160;&#160;&#160;&lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Section 2&lt;/a&gt;&lt;/h3&gt;<br />
848&#160;&#160;&#160;&lt;div&gt;<br />
849&#160;&#160;&#160;&#160;&#160;&#160;Section 2 content<br />
850&#160;&#160;&#160;&lt;/div&gt;<br />
851&#160;&#160;&#160;&lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Section 3&lt;/a&gt;&lt;/h3&gt;<br />
852&#160;&#160;&#160;&lt;div&gt;<br />
853&#160;&#160;&#160;&#160;&#160;&#160;Section 3 content<br />
854&#160;&#160;&#160;&lt;/div&gt;<br />
855&lt;/div&gt;.
856 </strong>
857 </p>
858
859 </div>
860</div>
861
862</p><!--
863Pre-expand include size: 30823 bytes
864Post-expand include size: 55450 bytes
865Template argument size: 33373 bytes
866Maximum: 2097152 bytes
867-->
868
869<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3345-1!1!0!!en!2 and timestamp 20090604112216 -->
diff --git a/static/development-bundle/docs/addClass.html b/static/development-bundle/docs/addClass.html
new file mode 100644
index 0000000..e0e2a1d
--- /dev/null
+++ b/static/development-bundle/docs/addClass.html
@@ -0,0 +1,108 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI addClass</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/addClass?section=1" title="Edit section: addClass( class, [duration] )">edit</a>]</div><a name="addClass.28_class.2C_.5Bduration.5D_.29"></a><h3>addClass( class, <span class="optional">[</span>duration<span class="optional">]</span> )</h3>
12<p>Adds the specified class to each of the set of matched elements with an optional transition between the states.</p>
13 </div>
14 <div id="overview-dependencies">
15 <h3>Dependencies</h3>
16 <ul>
17<li>Effects Core</li>
18</ul>
19 </div>
20 <div id="overview-example">
21 <h3>Example</h3>
22 <div id="overview-example" class="example">
23<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
24<p><div id="demo" class="tabs-container" rel="100">
25Adds the class 'selected' to the matched elements with a one second transition.<br />
26</p>
27<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
28 $(this).<strong class="selflink">addClass</strong>(&quot;selected&quot;, 1000);
29 });
30</pre>
31<p></div><div id="source" class="tabs-container">
32</p>
33<pre>&lt;!DOCTYPE html&gt;
34&lt;html&gt;
35&lt;head&gt;
36 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
37 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
38 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
39&lt;style type=&quot;text/css&quot;&gt;
40 p { cursor: pointer; font-size: 1.2em; }
41 .selected { color:red; }
42&lt;/style&gt;
43 &lt;script type="text/javascript"&gt;
44 $(document).ready(function(){
45 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
46 $(this).<strong class="selflink">addClass</strong>(&quot;selected&quot;, 1000);
47 });
48 });
49 &lt;/script&gt;
50&lt;/head&gt;
51&lt;body style="font-size:62.5%;"&gt;
52 &lt;p&gt;Click me to add a 'selected' class.&lt;/p&gt;
53&lt;p&gt;Click me to add a 'selected' class.&lt;/p&gt;
54&lt;p&gt;Click me to add a 'selected' class.&lt;/p&gt;
55&lt;/body&gt;
56&lt;/html&gt;
57</pre>
58<p></div>
59</p><p></div>
60 </div>
61 </div>
62 <div id="options">
63 <h2 class="top-header">Arguments</h2>
64 <ul class="options-list">
65
66<li class="option" id="option-class">
67 <div class="option-header">
68 <h3 class="option-name"><a href="#option-class">class</a></h3>
69 <dl>
70 <dt class="option-type-label">Type:</dt>
71 <dd class="option-type">String</dd>
72
73 </dl>
74 </div>
75 <div class="option-description">
76 <p>One CSS class to add to the elements.</p>
77 </div>
78</li>
79
80
81<li class="option" id="option-duration">
82 <div class="option-header">
83 <h3 class="option-name"><a href="#option-duration">duration</a></h3>
84 <dl>
85 <dt class="option-type-label">Type:</dt>
86 <dd class="option-type">String, Number</dd>
87
88 <dt class="option-optional-label">Optional</dt>
89
90 </dl>
91 </div>
92 <div class="option-description">
93 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
94 </div>
95</li>
96
97 </ul>
98 </div>
99</div>
100
101</p><!--
102Pre-expand include size: 5085 bytes
103Post-expand include size: 6833 bytes
104Template argument size: 4275 bytes
105Maximum: 2097152 bytes
106-->
107
108<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2606-1!1!0!!en!2 and timestamp 20090604034359 -->
diff --git a/static/development-bundle/docs/animate.html b/static/development-bundle/docs/animate.html
new file mode 100644
index 0000000..9c365a4
--- /dev/null
+++ b/static/development-bundle/docs/animate.html
@@ -0,0 +1,78 @@
1<p><a href="http://docs.jquery.com/UI" title="UI">&laquo; Back to the jQuery UI Docs</a>
2</p><p>The jQuery UI effects core extends the animate function to be able to animate colors as well. It's heavily used by the class transition feature and it's able to color animate the following properties:
3</p>
4<ul><li> <b>backgroundColor</b>
5</li><li> <b>borderBottomColor</b>
6</li><li> <b>borderLeftColor</b>
7</li><li> <b>borderRightColor</b>
8</li><li> <b>borderTopColor</b>
9</li><li> <b>color</b>
10</li><li> <b>outlineColor</b>
11</li></ul>
12<p>with one of the following combinations:
13</p>
14<ul><li> <b>hex (#FF0000)</b>
15</li><li> <b>rgb (rgb(255,255,255))</b>
16</li><li> <b>names ("black")</b>
17</li></ul>
18<p><br />
19</p><p><div class="options list"><table class="options examples" cellspacing="0"><thead><tr><th>Name</th><th>Type</th></tr></thead><tbody>
20</table><b class="options">Example:</b><table class="options examples" cellspacing="0"><thead><tr><th>Name</th><th>Type</th></tr></thead><tbody>
21<div class="example">
22<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
23<div id="demo" class="tabs-container" rel="125">
24A simple color animation.<br />
25</p>
26<pre>$(&quot;.block&quot;).<a href="http://docs.jquery.com/Events/toggle" title="Events/toggle">toggle</a>(function() {
27 $(this).<a href="http://docs.jquery.com/Effects/animate" title="Effects/animate">animate</a>({ backgroundColor: &quot;black&quot; }, 1000);
28},function() {
29 $(this).<a href="http://docs.jquery.com/Effects/animate" title="Effects/animate">animate</a>({ backgroundColor: &quot;#68BFEF&quot; }, 500);
30});
31
32</pre>
33<p></div><div id="source" class="tabs-container">
34</p>
35<pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
36 "<a href="http://www.w3.org/TR/html4/loose.dtd" class="external free" title="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;
37&lt;html&gt;
38&lt;head&gt;
39 &lt;script src="<a href="http://code.jquery.com/jquery-latest.js" class="external free" title="http://code.jquery.com/jquery-latest.js">http://code.jquery.com/jquery-latest.js</a>"&gt;&lt;/script&gt;
40
41 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
42
43 &lt;script&gt;
44 $(document).ready(function(){
45 $(&quot;.block&quot;).<a href="http://docs.jquery.com/Events/toggle" title="Events/toggle">toggle</a>(function() {
46 $(this).<a href="http://docs.jquery.com/Effects/animate" title="Effects/animate">animate</a>({ backgroundColor: &quot;black&quot; }, 1000);
47},function() {
48 $(this).<a href="http://docs.jquery.com/Effects/animate" title="Effects/animate">animate</a>({ backgroundColor: &quot;#68BFEF&quot; }, 500);
49});
50
51 });
52 &lt;/script&gt;
53 &lt;style&gt;
54 .block {
55 color: white;
56 background-color: #68BFEF;
57 width: 150px;
58 height: 70px;
59 margin: 10px;
60 }
61 &lt;/style&gt;
62&lt;/head&gt;
63&lt;body&gt;
64 &lt;div class=&quot;block&quot;&gt; Click me&lt;/div&gt;
65&lt;/body&gt;
66&lt;/html&gt;
67</pre>
68<p></div>
69</p><p></div>
70</p><p></tbody></table></div>
71</p><!--
72Pre-expand include size: 3730 bytes
73Post-expand include size: 5382 bytes
74Template argument size: 3450 bytes
75Maximum: 2097152 bytes
76-->
77
78<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3094-1!1!0!!en!2 and timestamp 20090603192313 -->
diff --git a/static/development-bundle/docs/datepicker.html b/static/development-bundle/docs/datepicker.html
new file mode 100644
index 0000000..f0772b2
--- /dev/null
+++ b/static/development-bundle/docs/datepicker.html
@@ -0,0 +1,2150 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Datepicker</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>The jQuery UI Datepicker is a highly configurable plugin that adds datepicker functionality to your pages. You can customize the date format and language, restrict the selectable date ranges and add in buttons and other navigation options easily.</p>
15<p>By default, the datepicker calendar opens in a small overlay onFocus and closes automatically onBlur or when a date if selected. For an inline calendar, simply attach the datepicker to a div or span.
16</p><p>You can use keyboard shortcuts to drive the datepicker:
17</p>
18<ul>
19 <li>page up/down - previous/next month</li>
20 <li>ctrl+page up/down - previous/next year</li>
21 <li>ctrl+home - current month or open when closed</li>
22 <li>ctrl+left/right - previous/next day</li>
23 <li>ctrl+up/down - previous/next week</li>
24 <li>enter - accept the selected date</li>
25 <li>ctrl+end - close and erase the date</li>
26 <li>escape - close the datepicker without selection</li>
27</ul>
28<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/API/1.7.2/Datepicker?section=1" title="Edit section: Utility functions">edit</a>]</div><a name="Utility_functions"></a><h3 id="utility-functions">Utility functions</h3>
29<ul>
30 <li><a href="http://docs.jquery.com/UI/Datepicker/setDefaults" title="UI/Datepicker/setDefaults">$.datepicker.setDefaults( settings )</a> - Set settings for all datepicker instances.</li>
31 <li><a href="http://docs.jquery.com/UI/Datepicker/formatDate" title="UI/Datepicker/formatDate">$.datepicker.formatDate( format, date, settings )</a> - Format a date into a string value with a specified format.</li>
32 <li><a href="http://docs.jquery.com/UI/Datepicker/iso8601Week" title="UI/Datepicker/iso8601Week">$.datepicker.iso8601Week( date )</a> - Determine the week of the year for a given date: 1 to 53.</li>
33 <li><a href="http://docs.jquery.com/UI/Datepicker/parseDate" title="UI/Datepicker/parseDate">$.datepicker.parseDate( format, value, settings ) </a> - Extract a date from a string value with a specified format.</li>
34</ul>
35 </div>
36 <div id="overview-dependencies">
37 <h3>Dependencies</h3>
38 <ul>
39<li>UI Core</li>
40</ul>
41 </div>
42 <div id="overview-example">
43 <h3>Example</h3>
44 <div id="overview-example" class="example">
45<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
46<p><div id="demo" class="tabs-container" rel="220">
47A simple jQuery UI Datepicker.<br />
48</p>
49<pre>$(&quot;#datepicker&quot;).datepicker();
50</pre>
51<p></div><div id="source" class="tabs-container">
52</p>
53<pre>&lt;!DOCTYPE html&gt;
54&lt;html&gt;
55&lt;head&gt;
56 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
57 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
58 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
59 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.datepicker.js&quot;&gt;&lt;/script&gt;
60 &lt;script type="text/javascript"&gt;
61 $(document).ready(function(){
62 $(&quot;#datepicker&quot;).datepicker();
63 });
64 &lt;/script&gt;
65&lt;/head&gt;
66&lt;body style="font-size:62.5%;"&gt;
67
68&lt;div type=&quot;text&quot; id=&quot;datepicker&quot;&gt;&lt;/div&gt;
69
70&lt;/body&gt;
71&lt;/html&gt;
72</pre>
73<p></div>
74</p><p></div>
75 </div>
76 </div>
77 <div id="options">
78 <h2 class="top-header">Options</h2>
79 <ul class="options-list">
80
81<li class="option" id="option-altField">
82 <div class="option-header">
83 <h3 class="option-name"><a href="#option-altField">altField</a></h3>
84 <dl>
85 <dt class="option-type-label">Type:</dt>
86 <dd class="option-type">String</dd>
87
88 <dt class="option-default-label">Default:</dt>
89 <dd class="option-default">''</dd>
90
91 </dl>
92 </div>
93 <div class="option-description">
94 <p>The jQuery selector for another field that is to be updated with the selected date from the datepicker. Use the <code>altFormat</code> setting below to change the format of the date within this field. Leave as blank for no alternate field.</p>
95 </div>
96 <div class="option-examples">
97 <h4>Code examples</h4>
98 <dl class="option-examples-list">
99
100<dt>
101 Initialize a datepicker with the <code>altField</code> option specified.
102</dt>
103<dd>
104<pre><code>$('.selector').datepicker({ altField: '#actualDate' });</code></pre>
105</dd>
106
107
108<dt>
109 Get or set the <code>altField</code> option, after init.
110</dt>
111<dd>
112<pre><code>//getter
113var altField = $('.selector').datepicker('option', 'altField');
114//setter
115$('.selector').datepicker('option', 'altField', '#actualDate');</code></pre>
116</dd>
117
118 </dl>
119 </div>
120</li>
121
122
123<li class="option" id="option-altFormat">
124 <div class="option-header">
125 <h3 class="option-name"><a href="#option-altFormat">altFormat</a></h3>
126 <dl>
127 <dt class="option-type-label">Type:</dt>
128 <dd class="option-type">String</dd>
129
130 <dt class="option-default-label">Default:</dt>
131 <dd class="option-default">''</dd>
132
133 </dl>
134 </div>
135 <div class="option-description">
136 <p>The <code>dateFormat</code> to be used for the <code>altField</code> option. This allows one date format to be shown to the user for selection purposes, while a different format is actually sent behind the scenes. For a full list of the possible formats see the <a href="http://docs.jquery.com/UI/Datepicker/formatDate" title="UI/Datepicker/formatDate">formatDate</a> function</p>
137 </div>
138 <div class="option-examples">
139 <h4>Code examples</h4>
140 <dl class="option-examples-list">
141
142<dt>
143 Initialize a datepicker with the <code>altFormat</code> option specified.
144</dt>
145<dd>
146<pre><code>$('.selector').datepicker({ altFormat: 'yy-mm-dd' });</code></pre>
147</dd>
148
149
150<dt>
151 Get or set the <code>altFormat</code> option, after init.
152</dt>
153<dd>
154<pre><code>//getter
155var altFormat = $('.selector').datepicker('option', 'altFormat');
156//setter
157$('.selector').datepicker('option', 'altFormat', 'yy-mm-dd');</code></pre>
158</dd>
159
160 </dl>
161 </div>
162</li>
163
164
165<li class="option" id="option-appendText">
166 <div class="option-header">
167 <h3 class="option-name"><a href="#option-appendText">appendText</a></h3>
168 <dl>
169 <dt class="option-type-label">Type:</dt>
170 <dd class="option-type">String</dd>
171
172 <dt class="option-default-label">Default:</dt>
173 <dd class="option-default">''</dd>
174
175 </dl>
176 </div>
177 <div class="option-description">
178 <p>The text to display after each date field, e.g. to show the required format.</p>
179 </div>
180 <div class="option-examples">
181 <h4>Code examples</h4>
182 <dl class="option-examples-list">
183
184<dt>
185 Initialize a datepicker with the <code>appendText</code> option specified.
186</dt>
187<dd>
188<pre><code>$('.selector').datepicker({ appendText: '(yyyy-mm-dd)' });</code></pre>
189</dd>
190
191
192<dt>
193 Get or set the <code>appendText</code> option, after init.
194</dt>
195<dd>
196<pre><code>//getter
197var appendText = $('.selector').datepicker('option', 'appendText');
198//setter
199$('.selector').datepicker('option', 'appendText', '(yyyy-mm-dd)');</code></pre>
200</dd>
201
202 </dl>
203 </div>
204</li>
205
206
207<li class="option" id="option-buttonImage">
208 <div class="option-header">
209 <h3 class="option-name"><a href="#option-buttonImage">buttonImage</a></h3>
210 <dl>
211 <dt class="option-type-label">Type:</dt>
212 <dd class="option-type">String</dd>
213
214 <dt class="option-default-label">Default:</dt>
215 <dd class="option-default">''</dd>
216
217 </dl>
218 </div>
219 <div class="option-description">
220 <p>The URL for the popup button image. If set, button text becomes the <i>alt</i> value and is not directly displayed.</p>
221 </div>
222 <div class="option-examples">
223 <h4>Code examples</h4>
224 <dl class="option-examples-list">
225
226<dt>
227 Initialize a datepicker with the <code>buttonImage</code> option specified.
228</dt>
229<dd>
230<pre><code>$('.selector').datepicker({ buttonImage: '/images/datepicker.gif' });</code></pre>
231</dd>
232
233
234<dt>
235 Get or set the <code>buttonImage</code> option, after init.
236</dt>
237<dd>
238<pre><code>//getter
239var buttonImage = $('.selector').datepicker('option', 'buttonImage');
240//setter
241$('.selector').datepicker('option', 'buttonImage', '/images/datepicker.gif');</code></pre>
242</dd>
243
244 </dl>
245 </div>
246</li>
247
248
249<li class="option" id="option-buttonImageOnly">
250 <div class="option-header">
251 <h3 class="option-name"><a href="#option-buttonImageOnly">buttonImageOnly</a></h3>
252 <dl>
253 <dt class="option-type-label">Type:</dt>
254 <dd class="option-type">Boolean</dd>
255
256 <dt class="option-default-label">Default:</dt>
257 <dd class="option-default">false</dd>
258
259 </dl>
260 </div>
261 <div class="option-description">
262 <p>Set to true to place an image after the field to use as the trigger without it appearing on a button.</p>
263 </div>
264 <div class="option-examples">
265 <h4>Code examples</h4>
266 <dl class="option-examples-list">
267
268<dt>
269 Initialize a datepicker with the <code>buttonImageOnly</code> option specified.
270</dt>
271<dd>
272<pre><code>$('.selector').datepicker({ buttonImageOnly: true });</code></pre>
273</dd>
274
275
276<dt>
277 Get or set the <code>buttonImageOnly</code> option, after init.
278</dt>
279<dd>
280<pre><code>//getter
281var buttonImageOnly = $('.selector').datepicker('option', 'buttonImageOnly');
282//setter
283$('.selector').datepicker('option', 'buttonImageOnly', true);</code></pre>
284</dd>
285
286 </dl>
287 </div>
288</li>
289
290
291<li class="option" id="option-buttonText">
292 <div class="option-header">
293 <h3 class="option-name"><a href="#option-buttonText">buttonText</a></h3>
294 <dl>
295 <dt class="option-type-label">Type:</dt>
296 <dd class="option-type">String</dd>
297
298 <dt class="option-default-label">Default:</dt>
299 <dd class="option-default">'...'</dd>
300
301 </dl>
302 </div>
303 <div class="option-description">
304 <p>The text to display on the trigger button. Use in conjunction with <i>showOn</i> equal to 'button' or 'both'.</p>
305 </div>
306 <div class="option-examples">
307 <h4>Code examples</h4>
308 <dl class="option-examples-list">
309
310<dt>
311 Initialize a datepicker with the <code>buttonText</code> option specified.
312</dt>
313<dd>
314<pre><code>$('.selector').datepicker({ buttonText: 'Choose' });</code></pre>
315</dd>
316
317
318<dt>
319 Get or set the <code>buttonText</code> option, after init.
320</dt>
321<dd>
322<pre><code>//getter
323var buttonText = $('.selector').datepicker('option', 'buttonText');
324//setter
325$('.selector').datepicker('option', 'buttonText', 'Choose');</code></pre>
326</dd>
327
328 </dl>
329 </div>
330</li>
331
332
333<li class="option" id="option-changeMonth">
334 <div class="option-header">
335 <h3 class="option-name"><a href="#option-changeMonth">changeMonth</a></h3>
336 <dl>
337 <dt class="option-type-label">Type:</dt>
338 <dd class="option-type">Boolean</dd>
339
340 <dt class="option-default-label">Default:</dt>
341 <dd class="option-default">false</dd>
342
343 </dl>
344 </div>
345 <div class="option-description">
346 <p>Allows you to change the month by selecting from a drop-down list. You can enable this feature by setting the attribute to true.</p>
347 </div>
348 <div class="option-examples">
349 <h4>Code examples</h4>
350 <dl class="option-examples-list">
351
352<dt>
353 Initialize a datepicker with the <code>changeMonth</code> option specified.
354</dt>
355<dd>
356<pre><code>$('.selector').datepicker({ changeMonth: true });</code></pre>
357</dd>
358
359
360<dt>
361 Get or set the <code>changeMonth</code> option, after init.
362</dt>
363<dd>
364<pre><code>//getter
365var changeMonth = $('.selector').datepicker('option', 'changeMonth');
366//setter
367$('.selector').datepicker('option', 'changeMonth', true);</code></pre>
368</dd>
369
370 </dl>
371 </div>
372</li>
373
374
375<li class="option" id="option-changeYear">
376 <div class="option-header">
377 <h3 class="option-name"><a href="#option-changeYear">changeYear</a></h3>
378 <dl>
379 <dt class="option-type-label">Type:</dt>
380 <dd class="option-type">Boolean</dd>
381
382 <dt class="option-default-label">Default:</dt>
383 <dd class="option-default">false</dd>
384
385 </dl>
386 </div>
387 <div class="option-description">
388 <p>Allows you to change the year by selecting from a drop-down list. You can enable this feature by setting the attribute to true.</p>
389 </div>
390 <div class="option-examples">
391 <h4>Code examples</h4>
392 <dl class="option-examples-list">
393
394<dt>
395 Initialize a datepicker with the <code>changeYear</code> option specified.
396</dt>
397<dd>
398<pre><code>$('.selector').datepicker({ changeYear: true });</code></pre>
399</dd>
400
401
402<dt>
403 Get or set the <code>changeYear</code> option, after init.
404</dt>
405<dd>
406<pre><code>//getter
407var changeYear = $('.selector').datepicker('option', 'changeYear');
408//setter
409$('.selector').datepicker('option', 'changeYear', true);</code></pre>
410</dd>
411
412 </dl>
413 </div>
414</li>
415
416
417<li class="option" id="option-closeText">
418 <div class="option-header">
419 <h3 class="option-name"><a href="#option-closeText">closeText</a></h3>
420 <dl>
421 <dt class="option-type-label">Type:</dt>
422 <dd class="option-type">String</dd>
423
424 <dt class="option-default-label">Default:</dt>
425 <dd class="option-default">'Done'</dd>
426
427 </dl>
428 </div>
429 <div class="option-description">
430 <p>The text to display for the close link. This attribute is one of the regionalisation attributes. Use the <code>showButtonPanel</code> to display this button.</p>
431 </div>
432 <div class="option-examples">
433 <h4>Code examples</h4>
434 <dl class="option-examples-list">
435
436<dt>
437 Initialize a datepicker with the <code>closeText</code> option specified.
438</dt>
439<dd>
440<pre><code>$('.selector').datepicker({ closeText: 'X' });</code></pre>
441</dd>
442
443
444<dt>
445 Get or set the <code>closeText</code> option, after init.
446</dt>
447<dd>
448<pre><code>//getter
449var closeText = $('.selector').datepicker('option', 'closeText');
450//setter
451$('.selector').datepicker('option', 'closeText', 'X');</code></pre>
452</dd>
453
454 </dl>
455 </div>
456</li>
457
458
459<li class="option" id="option-constrainInput">
460 <div class="option-header">
461 <h3 class="option-name"><a href="#option-constrainInput">constrainInput</a></h3>
462 <dl>
463 <dt class="option-type-label">Type:</dt>
464 <dd class="option-type">Boolean</dd>
465
466 <dt class="option-default-label">Default:</dt>
467 <dd class="option-default">true</dd>
468
469 </dl>
470 </div>
471 <div class="option-description">
472 <p>True if the input field is constrained to the current date format.</p>
473 </div>
474 <div class="option-examples">
475 <h4>Code examples</h4>
476 <dl class="option-examples-list">
477
478<dt>
479 Initialize a datepicker with the <code>constrainInput</code> option specified.
480</dt>
481<dd>
482<pre><code>$('.selector').datepicker({ constrainInput: false });</code></pre>
483</dd>
484
485
486<dt>
487 Get or set the <code>constrainInput</code> option, after init.
488</dt>
489<dd>
490<pre><code>//getter
491var constrainInput = $('.selector').datepicker('option', 'constrainInput');
492//setter
493$('.selector').datepicker('option', 'constrainInput', false);</code></pre>
494</dd>
495
496 </dl>
497 </div>
498</li>
499
500
501<li class="option" id="option-currentText">
502 <div class="option-header">
503 <h3 class="option-name"><a href="#option-currentText">currentText</a></h3>
504 <dl>
505 <dt class="option-type-label">Type:</dt>
506 <dd class="option-type">String</dd>
507
508 <dt class="option-default-label">Default:</dt>
509 <dd class="option-default">'Today'</dd>
510
511 </dl>
512 </div>
513 <div class="option-description">
514 <p>The text to display for the current day link. This attribute is one of the regionalisation attributes. Use the <code>showButtonPanel</code> to display this button.</p>
515 </div>
516 <div class="option-examples">
517 <h4>Code examples</h4>
518 <dl class="option-examples-list">
519
520<dt>
521 Initialize a datepicker with the <code>currentText</code> option specified.
522</dt>
523<dd>
524<pre><code>$('.selector').datepicker({ currentText: 'Now' });</code></pre>
525</dd>
526
527
528<dt>
529 Get or set the <code>currentText</code> option, after init.
530</dt>
531<dd>
532<pre><code>//getter
533var currentText = $('.selector').datepicker('option', 'currentText');
534//setter
535$('.selector').datepicker('option', 'currentText', 'Now');</code></pre>
536</dd>
537
538 </dl>
539 </div>
540</li>
541
542
543<li class="option" id="option-dateFormat">
544 <div class="option-header">
545 <h3 class="option-name"><a href="#option-dateFormat">dateFormat</a></h3>
546 <dl>
547 <dt class="option-type-label">Type:</dt>
548 <dd class="option-type">String</dd>
549
550 <dt class="option-default-label">Default:</dt>
551 <dd class="option-default">'mm/dd/yy'</dd>
552
553 </dl>
554 </div>
555 <div class="option-description">
556 <p>The format for parsed and displayed dates. This attribute is one of the regionalisation attributes. For a full list of the possible formats see the <a href="http://docs.jquery.com/UI/Datepicker/formatDate" title="UI/Datepicker/formatDate">formatDate</a> function.</p>
557 </div>
558 <div class="option-examples">
559 <h4>Code examples</h4>
560 <dl class="option-examples-list">
561
562<dt>
563 Initialize a datepicker with the <code>dateFormat</code> option specified.
564</dt>
565<dd>
566<pre><code>$('.selector').datepicker({ dateFormat: 'yy-mm-dd' });</code></pre>
567</dd>
568
569
570<dt>
571 Get or set the <code>dateFormat</code> option, after init.
572</dt>
573<dd>
574<pre><code>//getter
575var dateFormat = $('.selector').datepicker('option', 'dateFormat');
576//setter
577$('.selector').datepicker('option', 'dateFormat', 'yy-mm-dd');</code></pre>
578</dd>
579
580 </dl>
581 </div>
582</li>
583
584
585<li class="option" id="option-dayNames">
586 <div class="option-header">
587 <h3 class="option-name"><a href="#option-dayNames">dayNames</a></h3>
588 <dl>
589 <dt class="option-type-label">Type:</dt>
590 <dd class="option-type">Array</dd>
591
592 <dt class="option-default-label">Default:</dt>
593 <dd class="option-default">['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']</dd>
594
595 </dl>
596 </div>
597 <div class="option-description">
598 <p>The list of long day names, starting from Sunday, for use as requested via the <code>dateFormat</code> setting. They also appear as popup hints when hovering over the corresponding column headings. This attribute is one of the regionalisation attributes.</p>
599 </div>
600 <div class="option-examples">
601 <h4>Code examples</h4>
602 <dl class="option-examples-list">
603
604<dt>
605 Initialize a datepicker with the <code>dayNames</code> option specified.
606</dt>
607<dd>
608<pre><code>$('.selector').datepicker({ dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'] });</code></pre>
609</dd>
610
611
612<dt>
613 Get or set the <code>dayNames</code> option, after init.
614</dt>
615<dd>
616<pre><code>//getter
617var dayNames = $('.selector').datepicker('option', 'dayNames');
618//setter
619$('.selector').datepicker('option', 'dayNames', ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi']);</code></pre>
620</dd>
621
622 </dl>
623 </div>
624</li>
625
626
627<li class="option" id="option-dayNamesMin">
628 <div class="option-header">
629 <h3 class="option-name"><a href="#option-dayNamesMin">dayNamesMin</a></h3>
630 <dl>
631 <dt class="option-type-label">Type:</dt>
632 <dd class="option-type">Array</dd>
633
634 <dt class="option-default-label">Default:</dt>
635 <dd class="option-default">['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']</dd>
636
637 </dl>
638 </div>
639 <div class="option-description">
640 <p>The list of minimised day names, starting from Sunday, for use as column headers within the datepicker. This attribute is one of the regionalisation attributes.</p>
641 </div>
642 <div class="option-examples">
643 <h4>Code examples</h4>
644 <dl class="option-examples-list">
645
646<dt>
647 Initialize a datepicker with the <code>dayNamesMin</code> option specified.
648</dt>
649<dd>
650<pre><code>$('.selector').datepicker({ dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'] });</code></pre>
651</dd>
652
653
654<dt>
655 Get or set the <code>dayNamesMin</code> option, after init.
656</dt>
657<dd>
658<pre><code>//getter
659var dayNamesMin = $('.selector').datepicker('option', 'dayNamesMin');
660//setter
661$('.selector').datepicker('option', 'dayNamesMin', ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa']);</code></pre>
662</dd>
663
664 </dl>
665 </div>
666</li>
667
668
669<li class="option" id="option-dayNamesShort">
670 <div class="option-header">
671 <h3 class="option-name"><a href="#option-dayNamesShort">dayNamesShort</a></h3>
672 <dl>
673 <dt class="option-type-label">Type:</dt>
674 <dd class="option-type">Array</dd>
675
676 <dt class="option-default-label">Default:</dt>
677 <dd class="option-default">['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']</dd>
678
679 </dl>
680 </div>
681 <div class="option-description">
682 <p>The list of abbreviated day names, starting from Sunday, for use as requested via the <code>dateFormat</code> setting. This attribute is one of the regionalisation attributes.</p>
683 </div>
684 <div class="option-examples">
685 <h4>Code examples</h4>
686 <dl class="option-examples-list">
687
688<dt>
689 Initialize a datepicker with the <code>dayNamesShort</code> option specified.
690</dt>
691<dd>
692<pre><code>$('.selector').datepicker({ dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'] });</code></pre>
693</dd>
694
695
696<dt>
697 Get or set the <code>dayNamesShort</code> option, after init.
698</dt>
699<dd>
700<pre><code>//getter
701var dayNamesShort = $('.selector').datepicker('option', 'dayNamesShort');
702//setter
703$('.selector').datepicker('option', 'dayNamesShort', ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam']);</code></pre>
704</dd>
705
706 </dl>
707 </div>
708</li>
709
710
711<li class="option" id="option-defaultDate">
712 <div class="option-header">
713 <h3 class="option-name"><a href="#option-defaultDate">defaultDate</a></h3>
714 <dl>
715 <dt class="option-type-label">Type:</dt>
716 <dd class="option-type">Date, Number, String</dd>
717
718 <dt class="option-default-label">Default:</dt>
719 <dd class="option-default">null</dd>
720
721 </dl>
722 </div>
723 <div class="option-description">
724 <p>Set the date to highlight on first opening if the field is blank. Specify either an actual date via a Date object, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null for today.</p>
725 </div>
726 <div class="option-examples">
727 <h4>Code examples</h4>
728 <dl class="option-examples-list">
729
730<dt>
731 Initialize a datepicker with the <code>defaultDate</code> option specified.
732</dt>
733<dd>
734<pre><code>$('.selector').datepicker({ defaultDate: +7 });</code></pre>
735</dd>
736
737
738<dt>
739 Get or set the <code>defaultDate</code> option, after init.
740</dt>
741<dd>
742<pre><code>//getter
743var defaultDate = $('.selector').datepicker('option', 'defaultDate');
744//setter
745$('.selector').datepicker('option', 'defaultDate', +7);</code></pre>
746</dd>
747
748 </dl>
749 </div>
750</li>
751
752
753<li class="option" id="option-duration">
754 <div class="option-header">
755 <h3 class="option-name"><a href="#option-duration">duration</a></h3>
756 <dl>
757 <dt class="option-type-label">Type:</dt>
758 <dd class="option-type">String, Number</dd>
759
760 <dt class="option-default-label">Default:</dt>
761 <dd class="option-default">'normal'</dd>
762
763 </dl>
764 </div>
765 <div class="option-description">
766 <p>Control the speed at which the datepicker appears, it may be a time in milliseconds, a string representing one of the three predefined speeds ("slow", "normal", "fast"), or '' for immediately.</p>
767 </div>
768 <div class="option-examples">
769 <h4>Code examples</h4>
770 <dl class="option-examples-list">
771
772<dt>
773 Initialize a datepicker with the <code>duration</code> option specified.
774</dt>
775<dd>
776<pre><code>$('.selector').datepicker({ duration: 'slow' });</code></pre>
777</dd>
778
779
780<dt>
781 Get or set the <code>duration</code> option, after init.
782</dt>
783<dd>
784<pre><code>//getter
785var duration = $('.selector').datepicker('option', 'duration');
786//setter
787$('.selector').datepicker('option', 'duration', 'slow');</code></pre>
788</dd>
789
790 </dl>
791 </div>
792</li>
793
794
795<li class="option" id="option-firstDay">
796 <div class="option-header">
797 <h3 class="option-name"><a href="#option-firstDay">firstDay</a></h3>
798 <dl>
799 <dt class="option-type-label">Type:</dt>
800 <dd class="option-type">Number</dd>
801
802 <dt class="option-default-label">Default:</dt>
803 <dd class="option-default">0</dd>
804
805 </dl>
806 </div>
807 <div class="option-description">
808 <p>Set the first day of the week: Sunday is 0, Monday is 1, ... This attribute is one of the regionalisation attributes.</p>
809 </div>
810 <div class="option-examples">
811 <h4>Code examples</h4>
812 <dl class="option-examples-list">
813
814<dt>
815 Initialize a datepicker with the <code>firstDay</code> option specified.
816</dt>
817<dd>
818<pre><code>$('.selector').datepicker({ firstDay: 1 });</code></pre>
819</dd>
820
821
822<dt>
823 Get or set the <code>firstDay</code> option, after init.
824</dt>
825<dd>
826<pre><code>//getter
827var firstDay = $('.selector').datepicker('option', 'firstDay');
828//setter
829$('.selector').datepicker('option', 'firstDay', 1);</code></pre>
830</dd>
831
832 </dl>
833 </div>
834</li>
835
836
837<li class="option" id="option-gotoCurrent">
838 <div class="option-header">
839 <h3 class="option-name"><a href="#option-gotoCurrent">gotoCurrent</a></h3>
840 <dl>
841 <dt class="option-type-label">Type:</dt>
842 <dd class="option-type">Boolean</dd>
843
844 <dt class="option-default-label">Default:</dt>
845 <dd class="option-default">false</dd>
846
847 </dl>
848 </div>
849 <div class="option-description">
850 <p>If true, the current day link moves to the currently selected date instead of today.</p>
851 </div>
852 <div class="option-examples">
853 <h4>Code examples</h4>
854 <dl class="option-examples-list">
855
856<dt>
857 Initialize a datepicker with the <code>gotoCurrent</code> option specified.
858</dt>
859<dd>
860<pre><code>$('.selector').datepicker({ gotoCurrent: true });</code></pre>
861</dd>
862
863
864<dt>
865 Get or set the <code>gotoCurrent</code> option, after init.
866</dt>
867<dd>
868<pre><code>//getter
869var gotoCurrent = $('.selector').datepicker('option', 'gotoCurrent');
870//setter
871$('.selector').datepicker('option', 'gotoCurrent', true);</code></pre>
872</dd>
873
874 </dl>
875 </div>
876</li>
877
878
879<li class="option" id="option-hideIfNoPrevNext">
880 <div class="option-header">
881 <h3 class="option-name"><a href="#option-hideIfNoPrevNext">hideIfNoPrevNext</a></h3>
882 <dl>
883 <dt class="option-type-label">Type:</dt>
884 <dd class="option-type">Boolean</dd>
885
886 <dt class="option-default-label">Default:</dt>
887 <dd class="option-default">false</dd>
888
889 </dl>
890 </div>
891 <div class="option-description">
892 <p>Normally the previous and next links are disabled when not applicable (see <code>minDate</code>/<code>maxDate</code>). You can hide them altogether by setting this attribute to true.</p>
893 </div>
894 <div class="option-examples">
895 <h4>Code examples</h4>
896 <dl class="option-examples-list">
897
898<dt>
899 Initialize a datepicker with the <code>hideIfNoPrevNext</code> option specified.
900</dt>
901<dd>
902<pre><code>$('.selector').datepicker({ hideIfNoPrevNext: true });</code></pre>
903</dd>
904
905
906<dt>
907 Get or set the <code>hideIfNoPrevNext</code> option, after init.
908</dt>
909<dd>
910<pre><code>//getter
911var hideIfNoPrevNext = $('.selector').datepicker('option', 'hideIfNoPrevNext');
912//setter
913$('.selector').datepicker('option', 'hideIfNoPrevNext', true);</code></pre>
914</dd>
915
916 </dl>
917 </div>
918</li>
919
920
921<li class="option" id="option-isRTL">
922 <div class="option-header">
923 <h3 class="option-name"><a href="#option-isRTL">isRTL</a></h3>
924 <dl>
925 <dt class="option-type-label">Type:</dt>
926 <dd class="option-type">Boolean</dd>
927
928 <dt class="option-default-label">Default:</dt>
929 <dd class="option-default">false</dd>
930
931 </dl>
932 </div>
933 <div class="option-description">
934 <p>True if the current language is drawn from right to left. This attribute is one of the regionalisation attributes.</p>
935 </div>
936 <div class="option-examples">
937 <h4>Code examples</h4>
938 <dl class="option-examples-list">
939
940<dt>
941 Initialize a datepicker with the <code>isRTL</code> option specified.
942</dt>
943<dd>
944<pre><code>$('.selector').datepicker({ isRTL: true });</code></pre>
945</dd>
946
947
948<dt>
949 Get or set the <code>isRTL</code> option, after init.
950</dt>
951<dd>
952<pre><code>//getter
953var isRTL = $('.selector').datepicker('option', 'isRTL');
954//setter
955$('.selector').datepicker('option', 'isRTL', true);</code></pre>
956</dd>
957
958 </dl>
959 </div>
960</li>
961
962
963<li class="option" id="option-maxDate">
964 <div class="option-header">
965 <h3 class="option-name"><a href="#option-maxDate">maxDate</a></h3>
966 <dl>
967 <dt class="option-type-label">Type:</dt>
968 <dd class="option-type">Date, Number, String</dd>
969
970 <dt class="option-default-label">Default:</dt>
971 <dd class="option-default">null</dd>
972
973 </dl>
974 </div>
975 <div class="option-description">
976 <p>Set a maximum selectable date via a Date object, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +1w'), or null for no limit.</p>
977 </div>
978 <div class="option-examples">
979 <h4>Code examples</h4>
980 <dl class="option-examples-list">
981
982<dt>
983 Initialize a datepicker with the <code>maxDate</code> option specified.
984</dt>
985<dd>
986<pre><code>$('.selector').datepicker({ maxDate: '+1m +1w' });</code></pre>
987</dd>
988
989
990<dt>
991 Get or set the <code>maxDate</code> option, after init.
992</dt>
993<dd>
994<pre><code>//getter
995var maxDate = $('.selector').datepicker('option', 'maxDate');
996//setter
997$('.selector').datepicker('option', 'maxDate', '+1m +1w');</code></pre>
998</dd>
999
1000 </dl>
1001 </div>
1002</li>
1003
1004
1005<li class="option" id="option-minDate">
1006 <div class="option-header">
1007 <h3 class="option-name"><a href="#option-minDate">minDate</a></h3>
1008 <dl>
1009 <dt class="option-type-label">Type:</dt>
1010 <dd class="option-type">Date, Number, String</dd>
1011
1012 <dt class="option-default-label">Default:</dt>
1013 <dd class="option-default">null</dd>
1014
1015 </dl>
1016 </div>
1017 <div class="option-description">
1018 <p>Set a minimum selectable date via a Date object, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '-1y -1m'), or null for no limit.</p>
1019 </div>
1020 <div class="option-examples">
1021 <h4>Code examples</h4>
1022 <dl class="option-examples-list">
1023
1024<dt>
1025 Initialize a datepicker with the <code>minDate</code> option specified.
1026</dt>
1027<dd>
1028<pre><code>$('.selector').datepicker({ minDate: new Date(2007, 1 - 1, 1) });</code></pre>
1029</dd>
1030
1031
1032<dt>
1033 Get or set the <code>minDate</code> option, after init.
1034</dt>
1035<dd>
1036<pre><code>//getter
1037var minDate = $('.selector').datepicker('option', 'minDate');
1038//setter
1039$('.selector').datepicker('option', 'minDate', new Date(2007, 1 - 1, 1));</code></pre>
1040</dd>
1041
1042 </dl>
1043 </div>
1044</li>
1045
1046
1047<li class="option" id="option-monthNames">
1048 <div class="option-header">
1049 <h3 class="option-name"><a href="#option-monthNames">monthNames</a></h3>
1050 <dl>
1051 <dt class="option-type-label">Type:</dt>
1052 <dd class="option-type">Array</dd>
1053
1054 <dt class="option-default-label">Default:</dt>
1055 <dd class="option-default">['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']</dd>
1056
1057 </dl>
1058 </div>
1059 <div class="option-description">
1060 <p>The list of full month names, as used in the month header on each datepicker and as requested via the <code>dateFormat</code> setting. This attribute is one of the regionalisation attributes.</p>
1061 </div>
1062 <div class="option-examples">
1063 <h4>Code examples</h4>
1064 <dl class="option-examples-list">
1065
1066<dt>
1067 Initialize a datepicker with the <code>monthNames</code> option specified.
1068</dt>
1069<dd>
1070<pre><code>$('.selector').datepicker({ monthNames: ['Januar','Februar','Marts','April','Maj','Juni','Juli','August','September','Oktober','November','December'] });</code></pre>
1071</dd>
1072
1073
1074<dt>
1075 Get or set the <code>monthNames</code> option, after init.
1076</dt>
1077<dd>
1078<pre><code>//getter
1079var monthNames = $('.selector').datepicker('option', 'monthNames');
1080//setter
1081$('.selector').datepicker('option', 'monthNames', ['Januar','Februar','Marts','April','Maj','Juni','Juli','August','September','Oktober','November','December']);</code></pre>
1082</dd>
1083
1084 </dl>
1085 </div>
1086</li>
1087
1088
1089<li class="option" id="option-monthNamesShort">
1090 <div class="option-header">
1091 <h3 class="option-name"><a href="#option-monthNamesShort">monthNamesShort</a></h3>
1092 <dl>
1093 <dt class="option-type-label">Type:</dt>
1094 <dd class="option-type">Array</dd>
1095
1096 <dt class="option-default-label">Default:</dt>
1097 <dd class="option-default">['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']</dd>
1098
1099 </dl>
1100 </div>
1101 <div class="option-description">
1102 <p>The list of abbreviated month names, for use as requested via the <code>dateFormat</code> setting. This attribute is one of the regionalisation attributes.</p>
1103 </div>
1104 <div class="option-examples">
1105 <h4>Code examples</h4>
1106 <dl class="option-examples-list">
1107
1108<dt>
1109 Initialize a datepicker with the <code>monthNamesShort</code> option specified.
1110</dt>
1111<dd>
1112<pre><code>$('.selector').datepicker({ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec'] });</code></pre>
1113</dd>
1114
1115
1116<dt>
1117 Get or set the <code>monthNamesShort</code> option, after init.
1118</dt>
1119<dd>
1120<pre><code>//getter
1121var monthNamesShort = $('.selector').datepicker('option', 'monthNamesShort');
1122//setter
1123$('.selector').datepicker('option', 'monthNamesShort', ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec']);</code></pre>
1124</dd>
1125
1126 </dl>
1127 </div>
1128</li>
1129
1130
1131<li class="option" id="option-navigationAsDateFormat">
1132 <div class="option-header">
1133 <h3 class="option-name"><a href="#option-navigationAsDateFormat">navigationAsDateFormat</a></h3>
1134 <dl>
1135 <dt class="option-type-label">Type:</dt>
1136 <dd class="option-type">Boolean</dd>
1137
1138 <dt class="option-default-label">Default:</dt>
1139 <dd class="option-default">false</dd>
1140
1141 </dl>
1142 </div>
1143 <div class="option-description">
1144 <p>When true the <code>formatDate</code> function is applied to the <code>prevText</code>, <code>nextText</code>, and <code>currentText</code> values before display, allowing them to display the target month names for example.</p>
1145 </div>
1146 <div class="option-examples">
1147 <h4>Code examples</h4>
1148 <dl class="option-examples-list">
1149
1150<dt>
1151 Initialize a datepicker with the <code>navigationAsDateFormat</code> option specified.
1152</dt>
1153<dd>
1154<pre><code>$('.selector').datepicker({ navigationAsDateFormat: true });</code></pre>
1155</dd>
1156
1157
1158<dt>
1159 Get or set the <code>navigationAsDateFormat</code> option, after init.
1160</dt>
1161<dd>
1162<pre><code>//getter
1163var navigationAsDateFormat = $('.selector').datepicker('option', 'navigationAsDateFormat');
1164//setter
1165$('.selector').datepicker('option', 'navigationAsDateFormat', true);</code></pre>
1166</dd>
1167
1168 </dl>
1169 </div>
1170</li>
1171
1172
1173<li class="option" id="option-nextText">
1174 <div class="option-header">
1175 <h3 class="option-name"><a href="#option-nextText">nextText</a></h3>
1176 <dl>
1177 <dt class="option-type-label">Type:</dt>
1178 <dd class="option-type">String</dd>
1179
1180 <dt class="option-default-label">Default:</dt>
1181 <dd class="option-default">'Next'</dd>
1182
1183 </dl>
1184 </div>
1185 <div class="option-description">
1186 <p>The text to display for the next month link. This attribute is one of the regionalisation attributes. With the standard ThemeRoller styling, this value is replaced by an icon.</p>
1187 </div>
1188 <div class="option-examples">
1189 <h4>Code examples</h4>
1190 <dl class="option-examples-list">
1191
1192<dt>
1193 Initialize a datepicker with the <code>nextText</code> option specified.
1194</dt>
1195<dd>
1196<pre><code>$('.selector').datepicker({ nextText: 'Later' });</code></pre>
1197</dd>
1198
1199
1200<dt>
1201 Get or set the <code>nextText</code> option, after init.
1202</dt>
1203<dd>
1204<pre><code>//getter
1205var nextText = $('.selector').datepicker('option', 'nextText');
1206//setter
1207$('.selector').datepicker('option', 'nextText', 'Later');</code></pre>
1208</dd>
1209
1210 </dl>
1211 </div>
1212</li>
1213
1214
1215<li class="option" id="option-numberOfMonths">
1216 <div class="option-header">
1217 <h3 class="option-name"><a href="#option-numberOfMonths">numberOfMonths</a></h3>
1218 <dl>
1219 <dt class="option-type-label">Type:</dt>
1220 <dd class="option-type">Number, Array</dd>
1221
1222 <dt class="option-default-label">Default:</dt>
1223 <dd class="option-default">1</dd>
1224
1225 </dl>
1226 </div>
1227 <div class="option-description">
1228 <p>Set how many months to show at once. The value can be a straight integer, or can be a two-element array to define the number of rows and columns to display.</p>
1229 </div>
1230 <div class="option-examples">
1231 <h4>Code examples</h4>
1232 <dl class="option-examples-list">
1233
1234<dt>
1235 Initialize a datepicker with the <code>numberOfMonths</code> option specified.
1236</dt>
1237<dd>
1238<pre><code>$('.selector').datepicker({ numberOfMonths: [2, 3] });</code></pre>
1239</dd>
1240
1241
1242<dt>
1243 Get or set the <code>numberOfMonths</code> option, after init.
1244</dt>
1245<dd>
1246<pre><code>//getter
1247var numberOfMonths = $('.selector').datepicker('option', 'numberOfMonths');
1248//setter
1249$('.selector').datepicker('option', 'numberOfMonths', [2, 3]);</code></pre>
1250</dd>
1251
1252 </dl>
1253 </div>
1254</li>
1255
1256
1257<li class="option" id="option-prevText">
1258 <div class="option-header">
1259 <h3 class="option-name"><a href="#option-prevText">prevText</a></h3>
1260 <dl>
1261 <dt class="option-type-label">Type:</dt>
1262 <dd class="option-type">String</dd>
1263
1264 <dt class="option-default-label">Default:</dt>
1265 <dd class="option-default">'Prev'</dd>
1266
1267 </dl>
1268 </div>
1269 <div class="option-description">
1270 <p>The text to display for the previous month link. This attribute is one of the regionalisation attributes. With the standard ThemeRoller styling, this value is replaced by an icon.</p>
1271 </div>
1272 <div class="option-examples">
1273 <h4>Code examples</h4>
1274 <dl class="option-examples-list">
1275
1276<dt>
1277 Initialize a datepicker with the <code>prevText</code> option specified.
1278</dt>
1279<dd>
1280<pre><code>$('.selector').datepicker({ prevText: 'Earlier' });</code></pre>
1281</dd>
1282
1283
1284<dt>
1285 Get or set the <code>prevText</code> option, after init.
1286</dt>
1287<dd>
1288<pre><code>//getter
1289var prevText = $('.selector').datepicker('option', 'prevText');
1290//setter
1291$('.selector').datepicker('option', 'prevText', 'Earlier');</code></pre>
1292</dd>
1293
1294 </dl>
1295 </div>
1296</li>
1297
1298
1299<li class="option" id="option-shortYearCutoff">
1300 <div class="option-header">
1301 <h3 class="option-name"><a href="#option-shortYearCutoff">shortYearCutoff</a></h3>
1302 <dl>
1303 <dt class="option-type-label">Type:</dt>
1304 <dd class="option-type">String, Number</dd>
1305
1306 <dt class="option-default-label">Default:</dt>
1307 <dd class="option-default">'+10'</dd>
1308
1309 </dl>
1310 </div>
1311 <div class="option-description">
1312 <p>Set the cutoff year for determining the century for a date (used in conjunction with <code>dateFormat</code> 'y'). If a numeric value (0-99) is provided then this value is used directly. If a string value is provided then it is converted to a number and added to the current year. Once the cutoff year is calculated, any dates entered with a year value less than or equal to it are considered to be in the current century, while those greater than it are deemed to be in the previous century.</p>
1313 </div>
1314 <div class="option-examples">
1315 <h4>Code examples</h4>
1316 <dl class="option-examples-list">
1317
1318<dt>
1319 Initialize a datepicker with the <code>shortYearCutoff</code> option specified.
1320</dt>
1321<dd>
1322<pre><code>$('.selector').datepicker({ shortYearCutoff: 50 });</code></pre>
1323</dd>
1324
1325
1326<dt>
1327 Get or set the <code>shortYearCutoff</code> option, after init.
1328</dt>
1329<dd>
1330<pre><code>//getter
1331var shortYearCutoff = $('.selector').datepicker('option', 'shortYearCutoff');
1332//setter
1333$('.selector').datepicker('option', 'shortYearCutoff', 50);</code></pre>
1334</dd>
1335
1336 </dl>
1337 </div>
1338</li>
1339
1340
1341<li class="option" id="option-showAnim">
1342 <div class="option-header">
1343 <h3 class="option-name"><a href="#option-showAnim">showAnim</a></h3>
1344 <dl>
1345 <dt class="option-type-label">Type:</dt>
1346 <dd class="option-type">String</dd>
1347
1348 <dt class="option-default-label">Default:</dt>
1349 <dd class="option-default">'show'</dd>
1350
1351 </dl>
1352 </div>
1353 <div class="option-description">
1354 <p>Set the name of the animation used to show/hide the datepicker. Use 'show' (the default), 'slideDown', 'fadeIn', or any of the show/hide <a href="http://docs.jquery.com/UI/Effects" class="external text" title="http://docs.jquery.com/UI/Effects">jQuery UI effects</a>.</p>
1355 </div>
1356 <div class="option-examples">
1357 <h4>Code examples</h4>
1358 <dl class="option-examples-list">
1359
1360<dt>
1361 Initialize a datepicker with the <code>showAnim</code> option specified.
1362</dt>
1363<dd>
1364<pre><code>$('.selector').datepicker({ showAnim: 'fold' });</code></pre>
1365</dd>
1366
1367
1368<dt>
1369 Get or set the <code>showAnim</code> option, after init.
1370</dt>
1371<dd>
1372<pre><code>//getter
1373var showAnim = $('.selector').datepicker('option', 'showAnim');
1374//setter
1375$('.selector').datepicker('option', 'showAnim', 'fold');</code></pre>
1376</dd>
1377
1378 </dl>
1379 </div>
1380</li>
1381
1382
1383<li class="option" id="option-showButtonPanel">
1384 <div class="option-header">
1385 <h3 class="option-name"><a href="#option-showButtonPanel">showButtonPanel</a></h3>
1386 <dl>
1387 <dt class="option-type-label">Type:</dt>
1388 <dd class="option-type">Boolean</dd>
1389
1390 <dt class="option-default-label">Default:</dt>
1391 <dd class="option-default">false</dd>
1392
1393 </dl>
1394 </div>
1395 <div class="option-description">
1396 <p>Whether to show the button panel.</p>
1397 </div>
1398 <div class="option-examples">
1399 <h4>Code examples</h4>
1400 <dl class="option-examples-list">
1401
1402<dt>
1403 Initialize a datepicker with the <code>showButtonPanel</code> option specified.
1404</dt>
1405<dd>
1406<pre><code>$('.selector').datepicker({ showButtonPanel: true });</code></pre>
1407</dd>
1408
1409
1410<dt>
1411 Get or set the <code>showButtonPanel</code> option, after init.
1412</dt>
1413<dd>
1414<pre><code>//getter
1415var showButtonPanel = $('.selector').datepicker('option', 'showButtonPanel');
1416//setter
1417$('.selector').datepicker('option', 'showButtonPanel', true);</code></pre>
1418</dd>
1419
1420 </dl>
1421 </div>
1422</li>
1423
1424
1425<li class="option" id="option-showCurrentAtPos">
1426 <div class="option-header">
1427 <h3 class="option-name"><a href="#option-showCurrentAtPos">showCurrentAtPos</a></h3>
1428 <dl>
1429 <dt class="option-type-label">Type:</dt>
1430 <dd class="option-type">Number</dd>
1431
1432 <dt class="option-default-label">Default:</dt>
1433 <dd class="option-default">0</dd>
1434
1435 </dl>
1436 </div>
1437 <div class="option-description">
1438 <p>Specify where in a multi-month display the current month shows, starting from 0 at the top/left.</p>
1439 </div>
1440 <div class="option-examples">
1441 <h4>Code examples</h4>
1442 <dl class="option-examples-list">
1443
1444<dt>
1445 Initialize a datepicker with the <code>showCurrentAtPos</code> option specified.
1446</dt>
1447<dd>
1448<pre><code>$('.selector').datepicker({ showCurrentAtPos: 3 });</code></pre>
1449</dd>
1450
1451
1452<dt>
1453 Get or set the <code>showCurrentAtPos</code> option, after init.
1454</dt>
1455<dd>
1456<pre><code>//getter
1457var showCurrentAtPos = $('.selector').datepicker('option', 'showCurrentAtPos');
1458//setter
1459$('.selector').datepicker('option', 'showCurrentAtPos', 3);</code></pre>
1460</dd>
1461
1462 </dl>
1463 </div>
1464</li>
1465
1466
1467<li class="option" id="option-showMonthAfterYear">
1468 <div class="option-header">
1469 <h3 class="option-name"><a href="#option-showMonthAfterYear">showMonthAfterYear</a></h3>
1470 <dl>
1471 <dt class="option-type-label">Type:</dt>
1472 <dd class="option-type">Boolean</dd>
1473
1474 <dt class="option-default-label">Default:</dt>
1475 <dd class="option-default">false</dd>
1476
1477 </dl>
1478 </div>
1479 <div class="option-description">
1480 <p>Whether to show the month after the year in the header.</p>
1481 </div>
1482 <div class="option-examples">
1483 <h4>Code examples</h4>
1484 <dl class="option-examples-list">
1485
1486<dt>
1487 Initialize a datepicker with the <code>showMonthAfterYear</code> option specified.
1488</dt>
1489<dd>
1490<pre><code>$('.selector').datepicker({ showMonthAfterYear: true });</code></pre>
1491</dd>
1492
1493
1494<dt>
1495 Get or set the <code>showMonthAfterYear</code> option, after init.
1496</dt>
1497<dd>
1498<pre><code>//getter
1499var showMonthAfterYear = $('.selector').datepicker('option', 'showMonthAfterYear');
1500//setter
1501$('.selector').datepicker('option', 'showMonthAfterYear', true);</code></pre>
1502</dd>
1503
1504 </dl>
1505 </div>
1506</li>
1507
1508
1509<li class="option" id="option-showOn">
1510 <div class="option-header">
1511 <h3 class="option-name"><a href="#option-showOn">showOn</a></h3>
1512 <dl>
1513 <dt class="option-type-label">Type:</dt>
1514 <dd class="option-type">String</dd>
1515
1516 <dt class="option-default-label">Default:</dt>
1517 <dd class="option-default">'focus'</dd>
1518
1519 </dl>
1520 </div>
1521 <div class="option-description">
1522 <p>Have the datepicker appear automatically when the field receives focus ('focus'), appear only when a button is clicked ('button'), or appear when either event takes place ('both').</p>
1523 </div>
1524 <div class="option-examples">
1525 <h4>Code examples</h4>
1526 <dl class="option-examples-list">
1527
1528<dt>
1529 Initialize a datepicker with the <code>showOn</code> option specified.
1530</dt>
1531<dd>
1532<pre><code>$('.selector').datepicker({ showOn: 'both' });</code></pre>
1533</dd>
1534
1535
1536<dt>
1537 Get or set the <code>showOn</code> option, after init.
1538</dt>
1539<dd>
1540<pre><code>//getter
1541var showOn = $('.selector').datepicker('option', 'showOn');
1542//setter
1543$('.selector').datepicker('option', 'showOn', 'both');</code></pre>
1544</dd>
1545
1546 </dl>
1547 </div>
1548</li>
1549
1550
1551<li class="option" id="option-showOptions">
1552 <div class="option-header">
1553 <h3 class="option-name"><a href="#option-showOptions">showOptions</a></h3>
1554 <dl>
1555 <dt class="option-type-label">Type:</dt>
1556 <dd class="option-type">Options</dd>
1557
1558 <dt class="option-default-label">Default:</dt>
1559 <dd class="option-default">{}</dd>
1560
1561 </dl>
1562 </div>
1563 <div class="option-description">
1564 <p>If using one of the jQuery UI effects for <code>showAnim</code>, you can provide additional settings for that animation via this option.</p>
1565 </div>
1566 <div class="option-examples">
1567 <h4>Code examples</h4>
1568 <dl class="option-examples-list">
1569
1570<dt>
1571 Initialize a datepicker with the <code>showOptions</code> option specified.
1572</dt>
1573<dd>
1574<pre><code>$('.selector').datepicker({ showOptions: {direction: 'up' });</code></pre>
1575</dd>
1576
1577
1578<dt>
1579 Get or set the <code>showOptions</code> option, after init.
1580</dt>
1581<dd>
1582<pre><code>//getter
1583var showOptions = $('.selector').datepicker('option', 'showOptions');
1584//setter
1585$('.selector').datepicker('option', 'showOptions', {direction: 'up');</code></pre>
1586</dd>
1587
1588 </dl>
1589 </div>
1590</li>
1591
1592
1593<li class="option" id="option-showOtherMonths">
1594 <div class="option-header">
1595 <h3 class="option-name"><a href="#option-showOtherMonths">showOtherMonths</a></h3>
1596 <dl>
1597 <dt class="option-type-label">Type:</dt>
1598 <dd class="option-type">Boolean</dd>
1599
1600 <dt class="option-default-label">Default:</dt>
1601 <dd class="option-default">false</dd>
1602
1603 </dl>
1604 </div>
1605 <div class="option-description">
1606 <p>Display dates in other months (non-selectable) at the start or end of the current month.</p>
1607 </div>
1608 <div class="option-examples">
1609 <h4>Code examples</h4>
1610 <dl class="option-examples-list">
1611
1612<dt>
1613 Initialize a datepicker with the <code>showOtherMonths</code> option specified.
1614</dt>
1615<dd>
1616<pre><code>$('.selector').datepicker({ showOtherMonths: true });</code></pre>
1617</dd>
1618
1619
1620<dt>
1621 Get or set the <code>showOtherMonths</code> option, after init.
1622</dt>
1623<dd>
1624<pre><code>//getter
1625var showOtherMonths = $('.selector').datepicker('option', 'showOtherMonths');
1626//setter
1627$('.selector').datepicker('option', 'showOtherMonths', true);</code></pre>
1628</dd>
1629
1630 </dl>
1631 </div>
1632</li>
1633
1634
1635<li class="option" id="option-stepMonths">
1636 <div class="option-header">
1637 <h3 class="option-name"><a href="#option-stepMonths">stepMonths</a></h3>
1638 <dl>
1639 <dt class="option-type-label">Type:</dt>
1640 <dd class="option-type">Number</dd>
1641
1642 <dt class="option-default-label">Default:</dt>
1643 <dd class="option-default">1</dd>
1644
1645 </dl>
1646 </div>
1647 <div class="option-description">
1648 <p>Set how many months to move when clicking the Previous/Next links.</p>
1649 </div>
1650 <div class="option-examples">
1651 <h4>Code examples</h4>
1652 <dl class="option-examples-list">
1653
1654<dt>
1655 Initialize a datepicker with the <code>stepMonths</code> option specified.
1656</dt>
1657<dd>
1658<pre><code>$('.selector').datepicker({ stepMonths: 3 });</code></pre>
1659</dd>
1660
1661
1662<dt>
1663 Get or set the <code>stepMonths</code> option, after init.
1664</dt>
1665<dd>
1666<pre><code>//getter
1667var stepMonths = $('.selector').datepicker('option', 'stepMonths');
1668//setter
1669$('.selector').datepicker('option', 'stepMonths', 3);</code></pre>
1670</dd>
1671
1672 </dl>
1673 </div>
1674</li>
1675
1676
1677<li class="option" id="option-yearRange">
1678 <div class="option-header">
1679 <h3 class="option-name"><a href="#option-yearRange">yearRange</a></h3>
1680 <dl>
1681 <dt class="option-type-label">Type:</dt>
1682 <dd class="option-type">String</dd>
1683
1684 <dt class="option-default-label">Default:</dt>
1685 <dd class="option-default">'-10:+10'</dd>
1686
1687 </dl>
1688 </div>
1689 <div class="option-description">
1690 <p>Control the range of years displayed in the year drop-down: either relative to current year (-nn:+nn) or absolute (nnnn:nnnn).</p>
1691 </div>
1692 <div class="option-examples">
1693 <h4>Code examples</h4>
1694 <dl class="option-examples-list">
1695
1696<dt>
1697 Initialize a datepicker with the <code>yearRange</code> option specified.
1698</dt>
1699<dd>
1700<pre><code>$('.selector').datepicker({ yearRange: '2000:2010' });</code></pre>
1701</dd>
1702
1703
1704<dt>
1705 Get or set the <code>yearRange</code> option, after init.
1706</dt>
1707<dd>
1708<pre><code>//getter
1709var yearRange = $('.selector').datepicker('option', 'yearRange');
1710//setter
1711$('.selector').datepicker('option', 'yearRange', '2000:2010');</code></pre>
1712</dd>
1713
1714 </dl>
1715 </div>
1716</li>
1717
1718 </ul>
1719 </div>
1720 <div id="events">
1721 <h2 class="top-header">Events</h2>
1722 <ul class="events-list">
1723
1724<li class="event" id="event-beforeShow">
1725 <div class="event-header">
1726 <h3 class="event-name"><a href="#event-beforeShow">beforeShow</a></h3>
1727 <dl>
1728 <dt class="event-type-label"></dt>
1729 <dd class="event-type">function(input)</dd>
1730 </dl>
1731 </div>
1732 <div class="event-description">
1733 <p>Can be a function that takes an input field and current datepicker instance and returns an options object to update the datepicker with. It is called just before the datepicker is displayed.</p>
1734 </div>
1735 <div class="event-examples">
1736 <h4>Code examples</h4>
1737 <dl class="event-examples-list">
1738
1739<dt>
1740 Supply a callback function to handle the <code>beforeShow</code> event as an init option.
1741</dt>
1742<dd>
1743<pre><code>$('.selector').datepicker({
1744 beforeShow: function(input) { ... }
1745});</code></pre>
1746</dd>
1747
1748 </dl>
1749 </div>
1750</li>
1751
1752
1753<li class="event" id="event-beforeShowDay">
1754 <div class="event-header">
1755 <h3 class="event-name"><a href="#event-beforeShowDay">beforeShowDay</a></h3>
1756 <dl>
1757 <dt class="event-type-label"></dt>
1758 <dd class="event-type">function(date)</dd>
1759 </dl>
1760 </div>
1761 <div class="event-description">
1762 <p>The function takes a date as a parameter and must return an array with [0] equal to true/false indicating whether or not this date is selectable, [1] equal to a CSS class name(s) or '' for the default presentation and [2] an optional popup tooltip for this date. It is called for each day in the datepicker before is it displayed.</p>
1763 </div>
1764 <div class="event-examples">
1765 <h4>Code examples</h4>
1766 <dl class="event-examples-list">
1767
1768<dt>
1769 Supply a callback function to handle the <code>beforeShowDay</code> event as an init option.
1770</dt>
1771<dd>
1772<pre><code>$('.selector').datepicker({
1773 beforeShowDay: function(date) { ... }
1774});</code></pre>
1775</dd>
1776
1777 </dl>
1778 </div>
1779</li>
1780
1781
1782<li class="event" id="event-onChangeMonthYear">
1783 <div class="event-header">
1784 <h3 class="event-name"><a href="#event-onChangeMonthYear">onChangeMonthYear</a></h3>
1785 <dl>
1786 <dt class="event-type-label"></dt>
1787 <dd class="event-type">function(year, month, inst)</dd>
1788 </dl>
1789 </div>
1790 <div class="event-description">
1791 <p>Allows you to define your own event when the datepicker moves to a new month and/or year. The function receives the selected year, month (1-12), and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</p>
1792 </div>
1793 <div class="event-examples">
1794 <h4>Code examples</h4>
1795 <dl class="event-examples-list">
1796
1797<dt>
1798 Supply a callback function to handle the <code>onChangeMonthYear</code> event as an init option.
1799</dt>
1800<dd>
1801<pre><code>$('.selector').datepicker({
1802 onChangeMonthYear: function(year, month, inst) { ... }
1803});</code></pre>
1804</dd>
1805
1806 </dl>
1807 </div>
1808</li>
1809
1810
1811<li class="event" id="event-onClose">
1812 <div class="event-header">
1813 <h3 class="event-name"><a href="#event-onClose">onClose</a></h3>
1814 <dl>
1815 <dt class="event-type-label"></dt>
1816 <dd class="event-type">function(dateText, inst)</dd>
1817 </dl>
1818 </div>
1819 <div class="event-description">
1820 <p>Allows you to define your own event when the datepicker is closed, whether or not a date is selected. The function receives the selected date as text and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</p>
1821 </div>
1822 <div class="event-examples">
1823 <h4>Code examples</h4>
1824 <dl class="event-examples-list">
1825
1826<dt>
1827 Supply a callback function to handle the <code>onClose</code> event as an init option.
1828</dt>
1829<dd>
1830<pre><code>$('.selector').datepicker({
1831 onClose: function(dateText, inst) { ... }
1832});</code></pre>
1833</dd>
1834
1835 </dl>
1836 </div>
1837</li>
1838
1839
1840<li class="event" id="event-onSelect">
1841 <div class="event-header">
1842 <h3 class="event-name"><a href="#event-onSelect">onSelect</a></h3>
1843 <dl>
1844 <dt class="event-type-label"></dt>
1845 <dd class="event-type">function(dateText, inst)</dd>
1846 </dl>
1847 </div>
1848 <div class="event-description">
1849 <p>Allows you to define your own event when the datepicker is selected. The function receives the selected date as text and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</p>
1850 </div>
1851 <div class="event-examples">
1852 <h4>Code examples</h4>
1853 <dl class="event-examples-list">
1854
1855<dt>
1856 Supply a callback function to handle the <code>onSelect</code> event as an init option.
1857</dt>
1858<dd>
1859<pre><code>$('.selector').datepicker({
1860 onSelect: function(dateText, inst) { ... }
1861});</code></pre>
1862</dd>
1863
1864 </dl>
1865 </div>
1866</li>
1867
1868 </ul>
1869 </div>
1870 <div id="methods">
1871 <h2 class="top-header">Methods</h2>
1872 <ul class="methods-list">
1873
1874<li class="method" id="method-destroy">
1875 <div class="method-header">
1876 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
1877 <dl>
1878 <dt class="method-signature-label">Signature:</dt>
1879 <dd class="method-signature">.datepicker( 'destroy'
1880
1881
1882
1883
1884
1885
1886
1887)</dd>
1888 </dl>
1889 </div>
1890 <div class="method-description">
1891 <p>Remove the datepicker functionality completely. This will return the element back to its pre-init state.</p>
1892 </div>
1893</li>
1894
1895
1896<li class="method" id="method-disable">
1897 <div class="method-header">
1898 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
1899 <dl>
1900 <dt class="method-signature-label">Signature:</dt>
1901 <dd class="method-signature">.datepicker( 'disable'
1902
1903
1904
1905
1906
1907
1908
1909)</dd>
1910 </dl>
1911 </div>
1912 <div class="method-description">
1913 <p>Disable the datepicker.</p>
1914 </div>
1915</li>
1916
1917
1918<li class="method" id="method-enable">
1919 <div class="method-header">
1920 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
1921 <dl>
1922 <dt class="method-signature-label">Signature:</dt>
1923 <dd class="method-signature">.datepicker( 'enable'
1924
1925
1926
1927
1928
1929
1930
1931)</dd>
1932 </dl>
1933 </div>
1934 <div class="method-description">
1935 <p>Enable the datepicker.</p>
1936 </div>
1937</li>
1938
1939
1940<li class="method" id="method-option">
1941 <div class="method-header">
1942 <h3 class="method-name"><a href="#method-option">option</a></h3>
1943 <dl>
1944 <dt class="method-signature-label">Signature:</dt>
1945 <dd class="method-signature">.datepicker( 'option'
1946
1947, optionName
1948
1949, <span class="optional">[</span>value<span class="optional">] </span>
1950
1951
1952
1953)</dd>
1954 </dl>
1955 </div>
1956 <div class="method-description">
1957 <p>Get or set any datepicker option. If no value is specified, will act as a getter.</p>
1958 </div>
1959</li>
1960
1961
1962<li class="method" id="method-dialog">
1963 <div class="method-header">
1964 <h3 class="method-name"><a href="#method-dialog">dialog</a></h3>
1965 <dl>
1966 <dt class="method-signature-label">Signature:</dt>
1967 <dd class="method-signature">.datepicker( 'dialog'
1968
1969, dateText
1970
1971, <span class="optional">[</span>onSelect<span class="optional">] </span>
1972
1973, <span class="optional">[</span>settings<span class="optional">] </span>
1974
1975, <span class="optional">[</span>pos<span class="optional">] </span>)</dd>
1976 </dl>
1977 </div>
1978 <div class="method-description">
1979 <p>Open a datepicker in a "dialog" box.
1980</p><p>dateText: the initial date for the date picker.
1981</p><p>onSelect: A callback function when a date is selected. The function receives the date text and date picker instance as parameters.
1982</p><p>settings: The new settings for the date picker.
1983</p><p>pos: The position of the top/left of the dialog as [x, y] or a MouseEvent that contains the coordinates. If not specified the dialog is centered on the screen.</p>
1984 </div>
1985</li>
1986
1987
1988<li class="method" id="method-isDisabled">
1989 <div class="method-header">
1990 <h3 class="method-name"><a href="#method-isDisabled">isDisabled</a></h3>
1991 <dl>
1992 <dt class="method-signature-label">Signature:</dt>
1993 <dd class="method-signature">.datepicker( 'isDisabled'
1994
1995
1996
1997
1998
1999
2000
2001)</dd>
2002 </dl>
2003 </div>
2004 <div class="method-description">
2005 <p>Determine whether a date picker has been disabled.</p>
2006 </div>
2007</li>
2008
2009
2010<li class="method" id="method-hide">
2011 <div class="method-header">
2012 <h3 class="method-name"><a href="#method-hide">hide</a></h3>
2013 <dl>
2014 <dt class="method-signature-label">Signature:</dt>
2015 <dd class="method-signature">.datepicker( 'hide'
2016
2017, <span class="optional">[</span>speed<span class="optional">] </span>
2018
2019
2020
2021
2022
2023)</dd>
2024 </dl>
2025 </div>
2026 <div class="method-description">
2027 <p>Close a previously opened date picker.
2028</p><p>speed: The speed at which to close the date picker.</p>
2029 </div>
2030</li>
2031
2032
2033<li class="method" id="method-show">
2034 <div class="method-header">
2035 <h3 class="method-name"><a href="#method-show">show</a></h3>
2036 <dl>
2037 <dt class="method-signature-label">Signature:</dt>
2038 <dd class="method-signature">.datepicker( 'show'
2039
2040
2041
2042
2043
2044
2045
2046)</dd>
2047 </dl>
2048 </div>
2049 <div class="method-description">
2050 <p>Call up a previously attached date picker.</p>
2051 </div>
2052</li>
2053
2054
2055<li class="method" id="method-getDate">
2056 <div class="method-header">
2057 <h3 class="method-name"><a href="#method-getDate">getDate</a></h3>
2058 <dl>
2059 <dt class="method-signature-label">Signature:</dt>
2060 <dd class="method-signature">.datepicker( 'getDate'
2061
2062
2063
2064
2065
2066
2067
2068)</dd>
2069 </dl>
2070 </div>
2071 <div class="method-description">
2072 <p>Returns the current date for the datepicker.</p>
2073 </div>
2074</li>
2075
2076
2077<li class="method" id="method-setDate">
2078 <div class="method-header">
2079 <h3 class="method-name"><a href="#method-setDate">setDate</a></h3>
2080 <dl>
2081 <dt class="method-signature-label">Signature:</dt>
2082 <dd class="method-signature">.datepicker( 'setDate'
2083
2084, date
2085
2086
2087
2088
2089
2090)</dd>
2091 </dl>
2092 </div>
2093 <div class="method-description">
2094 <p>Sets the current date for the datepicker. The new date may also be a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null for today.</p>
2095 </div>
2096</li>
2097
2098 </ul>
2099 </div>
2100 <div id="theming">
2101 <h2 class="top-header">Theming</h2>
2102 <p>The jQuery UI Datepicker plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
2103</p>
2104 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.datepicker.css stylesheet that can be modified. These classes are highlighed in bold below.
2105</p>
2106
2107 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
2108 &lt;div id=&quot;ui-datepicker-div&quot; class=&quot;<strong>ui-datepicker</strong> ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible&quot;&gt;<br />
2109&nbsp;&nbsp;&nbsp;&lt;div class=&quot;<strong>ui-datepicker-header</strong> ui-widget-header ui-helper-clearfix ui-corner-all&quot;&gt;<br />
2110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a class=&quot;<strong>ui-datepicker-prev</strong> ui-corner-all&quot;&gt;title=&quot;Prev&quot;&gt;&lt;span class=&quot;ui-icon ui-icon-circle-triangle-w&quot;&gt;Prev&lt;/span&gt;&lt;/a&gt;<br />
2111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a class=&quot;<strong>ui-datepicker-next</strong> ui-corner-all&quot; title=&quot;Next&quot;&gt;&lt;span class=&quot;ui-icon ui-icon-circle-triangle-e&quot;&gt;Next&lt;/span&gt;&lt;/a&gt;<br />
2112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;<strong>ui-datepicker-title</strong>&quot;&gt;<br />
2113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span class=&quot;<strong>ui-datepicker-month</strong>&quot;&gt;January&lt;/span&gt;&lt;span class=&quot;<strong>ui-datepicker-year</strong>&quot;&gt;2009&lt;/span&gt;<br />
2114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
2115&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
2116&nbsp;&nbsp;&nbsp;&lt;table class=&quot;<strong>ui-datepicker-calendar</strong>&quot;&gt;<br />
2117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;thead&gt;<br />
2118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
2119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th class=&quot;<strong>ui-datepicker-week-end</strong>&quot;&gt;&lt;span title=&quot;Sunday&quot;&gt;Su&lt;/span&gt;&lt;/th&gt;<br />
2120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br />
2121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
2122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/thead&gt;<br />
2123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tbody&gt;&lt;tr&gt;<br />
2124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td class=&quot;<strong>ui-datepicker-week-end ui-datepicker-other-month</strong> &quot;&gt;&nbsp;1&nbsp;&lt;/td&gt;<br />
2125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br />
2126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
2127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tbody&gt;<br />
2128&nbsp;&nbsp;&nbsp;&lt;/table&gt;<br />
2129&nbsp;&nbsp;&nbsp;&lt;div class=&quot;<strong>ui-datepicker-buttonpane</strong> ui-widget-content&quot;&gt;<br />
2130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button type=&quot;button&quot; class=&quot;<strong>ui-datepicker-current</strong> ui-state-default ui-priority-secondary ui-corner-all&quot;&gt;Today&lt;/button&gt;<br />
2131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button type=&quot;button&quot; class=&quot;<strong>ui-datepicker-close</strong> ui-state-default ui-priority-primary ui-corner-all&quot;&gt;Done&lt;/button&gt;<br />
2132&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
2133&lt;/div&gt;<br />
2134 <p class="theme-note">
2135 <strong>
2136 Note: This is a sample of markup generated by the datepicker plugin, not markup you should use to create a datepicker. The only markup needed for that is &lt;input type="text" /&gt; or &lt;div&gt;&lt;/div&gt;.
2137 </strong>
2138 </p>
2139
2140 </div>
2141</div>
2142
2143</p><!--
2144Pre-expand include size: 82188 bytes
2145Post-expand include size: 161480 bytes
2146Template argument size: 101067 bytes
2147Maximum: 2097152 bytes
2148-->
2149
2150<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3346-1!1!0!!en!2 and timestamp 20090604112218 -->
diff --git a/static/development-bundle/docs/dialog.html b/static/development-bundle/docs/dialog.html
new file mode 100644
index 0000000..b763298
--- /dev/null
+++ b/static/development-bundle/docs/dialog.html
@@ -0,0 +1,1520 @@
1<p>
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Dialog</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 A dialog is a floating window that contains a title bar and a content area. The dialog window can be moved, resized and closed with the 'x' icon by default.
15</p><p>If the content length exceeds the maximum height, a scrollbar will automatically appear.
16</p><p>A bottom button bar and semi-transparent modal overlay layer are common options that can be added.
17</p>
18A call to <code>$(foo).dialog()</code> initializes a dialog. If you want a click to open a dialog, use <code>$(foo).dialog('open')</code>, but if the dialog hasn't been destroyed, the <code>$(foo).dialog()</code> init call is only required once, not on each click.
19 </div>
20 <div id="overview-dependencies">
21 <h3>Dependencies</h3>
22 <ul>
23<li>UI Core</li>
24<li>UI Draggable (Optional)</li>
25<li>UI Resizable (Optional)</li>
26</ul>
27 </div>
28 <div id="overview-example">
29 <h3>Example</h3>
30 <div id="overview-example" class="example">
31<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
32<p><div id="demo" class="tabs-container" rel="300">
33A simple jQuery UI Dialog.<br />
34</p>
35<pre>$(&quot;#dialog&quot;).dialog();
36</pre>
37<p></div><div id="source" class="tabs-container">
38</p>
39<pre>&lt;!DOCTYPE html&gt;
40&lt;html&gt;
41&lt;head&gt;
42 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
43 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
44 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
45 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.draggable.js&quot;&gt;&lt;/script&gt;
46 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.resizable.js&quot;&gt;&lt;/script&gt;
47 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.dialog.js&quot;&gt;&lt;/script&gt;
48 &lt;script type="text/javascript"&gt;
49 $(document).ready(function(){
50 $(&quot;#dialog&quot;).dialog();
51 });
52 &lt;/script&gt;
53&lt;/head&gt;
54&lt;body style="font-size:62.5%;"&gt;
55
56&lt;div id=&quot;dialog&quot; title=&quot;Dialog Title&quot;&gt;I'm in a dialog&lt;/div&gt;
57
58&lt;/body&gt;
59&lt;/html&gt;
60</pre>
61<p></div>
62</p><p></div>
63 </div>
64 </div>
65 <div id="options">
66 <h2 class="top-header">Options</h2>
67 <ul class="options-list">
68
69<li class="option" id="option-autoOpen">
70 <div class="option-header">
71 <h3 class="option-name"><a href="#option-autoOpen">autoOpen</a></h3>
72 <dl>
73 <dt class="option-type-label">Type:</dt>
74 <dd class="option-type">Boolean</dd>
75
76 <dt class="option-default-label">Default:</dt>
77 <dd class="option-default">true</dd>
78
79 </dl>
80 </div>
81 <div class="option-description">
82 <p>When <i>autoOpen</i> is <i>true</i> the dialog will open automatically when <i>dialog</i> is called. If <i>false</i> it will stay hidden until <i>.dialog("open")</i> is called on it.</p>
83 </div>
84 <div class="option-examples">
85 <h4>Code examples</h4>
86 <dl class="option-examples-list">
87
88<dt>
89 Initialize a dialog with the <code>autoOpen</code> option specified.
90</dt>
91<dd>
92<pre><code>$('.selector').dialog({ autoOpen: false });</code></pre>
93</dd>
94
95
96<dt>
97 Get or set the <code>autoOpen</code> option, after init.
98</dt>
99<dd>
100<pre><code>//getter
101var autoOpen = $('.selector').dialog('option', 'autoOpen');
102//setter
103$('.selector').dialog('option', 'autoOpen', false);</code></pre>
104</dd>
105
106 </dl>
107 </div>
108</li>
109
110
111<li class="option" id="option-bgiframe">
112 <div class="option-header">
113 <h3 class="option-name"><a href="#option-bgiframe">bgiframe</a></h3>
114 <dl>
115 <dt class="option-type-label">Type:</dt>
116 <dd class="option-type">Boolean</dd>
117
118 <dt class="option-default-label">Default:</dt>
119 <dd class="option-default">false</dd>
120
121 </dl>
122 </div>
123 <div class="option-description">
124 <p>When true, the bgiframe plugin will be used, to fix the issue in IE6 where select boxes show on top of other elements, regardless of zIndex. Requires including the bgiframe plugin. Future versions may not require a separate plugin.</p>
125 </div>
126 <div class="option-examples">
127 <h4>Code examples</h4>
128 <dl class="option-examples-list">
129
130<dt>
131 Initialize a dialog with the <code>bgiframe</code> option specified.
132</dt>
133<dd>
134<pre><code>$('.selector').dialog({ bgiframe: true });</code></pre>
135</dd>
136
137
138<dt>
139 Get or set the <code>bgiframe</code> option, after init.
140</dt>
141<dd>
142<pre><code>//getter
143var bgiframe = $('.selector').dialog('option', 'bgiframe');
144//setter
145$('.selector').dialog('option', 'bgiframe', true);</code></pre>
146</dd>
147
148 </dl>
149 </div>
150</li>
151
152
153<li class="option" id="option-buttons">
154 <div class="option-header">
155 <h3 class="option-name"><a href="#option-buttons">buttons</a></h3>
156 <dl>
157 <dt class="option-type-label">Type:</dt>
158 <dd class="option-type">Object</dd>
159
160 <dt class="option-default-label">Default:</dt>
161 <dd class="option-default">{ }</dd>
162
163 </dl>
164 </div>
165 <div class="option-description">
166 <p>Specifies which buttons should be displayed on the dialog. The property key is the text of the button. The value is the callback function for when the button is clicked. The context of the callback is the dialog element; if you need access to the button, it is available as the target of the event object.
167</p>
168 </div>
169 <div class="option-examples">
170 <h4>Code examples</h4>
171 <dl class="option-examples-list">
172
173<dt>
174 Initialize a dialog with the <code>buttons</code> option specified.
175</dt>
176<dd>
177<pre><code>$('.selector').dialog({ buttons: { &quot;Ok&quot;: function() { $(this).dialog(&quot;close&quot;); } } });</code></pre>
178</dd>
179
180
181<dt>
182 Get or set the <code>buttons</code> option, after init.
183</dt>
184<dd>
185<pre><code>//getter
186var buttons = $('.selector').dialog('option', 'buttons');
187//setter
188$('.selector').dialog('option', 'buttons', { &quot;Ok&quot;: function() { $(this).dialog(&quot;close&quot;); } });</code></pre>
189</dd>
190
191 </dl>
192 </div>
193</li>
194
195
196<li class="option" id="option-closeOnEscape">
197 <div class="option-header">
198 <h3 class="option-name"><a href="#option-closeOnEscape">closeOnEscape</a></h3>
199 <dl>
200 <dt class="option-type-label">Type:</dt>
201 <dd class="option-type">Boolean</dd>
202
203 <dt class="option-default-label">Default:</dt>
204 <dd class="option-default">true</dd>
205
206 </dl>
207 </div>
208 <div class="option-description">
209 <p>Specifies whether the dialog should close when it has focus and the user presses the esacpe (ESC) key.</p>
210 </div>
211 <div class="option-examples">
212 <h4>Code examples</h4>
213 <dl class="option-examples-list">
214
215<dt>
216 Initialize a dialog with the <code>closeOnEscape</code> option specified.
217</dt>
218<dd>
219<pre><code>$('.selector').dialog({ closeOnEscape: false });</code></pre>
220</dd>
221
222
223<dt>
224 Get or set the <code>closeOnEscape</code> option, after init.
225</dt>
226<dd>
227<pre><code>//getter
228var closeOnEscape = $('.selector').dialog('option', 'closeOnEscape');
229//setter
230$('.selector').dialog('option', 'closeOnEscape', false);</code></pre>
231</dd>
232
233 </dl>
234 </div>
235</li>
236
237
238<li class="option" id="option-dialogClass">
239 <div class="option-header">
240 <h3 class="option-name"><a href="#option-dialogClass">dialogClass</a></h3>
241 <dl>
242 <dt class="option-type-label">Type:</dt>
243 <dd class="option-type">String</dd>
244
245 <dt class="option-default-label">Default:</dt>
246 <dd class="option-default">''</dd>
247
248 </dl>
249 </div>
250 <div class="option-description">
251 <p>The specified class name(s) will be added to the dialog, for additional theming.</p>
252 </div>
253 <div class="option-examples">
254 <h4>Code examples</h4>
255 <dl class="option-examples-list">
256
257<dt>
258 Initialize a dialog with the <code>dialogClass</code> option specified.
259</dt>
260<dd>
261<pre><code>$('.selector').dialog({ dialogClass: 'alert' });</code></pre>
262</dd>
263
264
265<dt>
266 Get or set the <code>dialogClass</code> option, after init.
267</dt>
268<dd>
269<pre><code>//getter
270var dialogClass = $('.selector').dialog('option', 'dialogClass');
271//setter
272$('.selector').dialog('option', 'dialogClass', 'alert');</code></pre>
273</dd>
274
275 </dl>
276 </div>
277</li>
278
279
280<li class="option" id="option-draggable">
281 <div class="option-header">
282 <h3 class="option-name"><a href="#option-draggable">draggable</a></h3>
283 <dl>
284 <dt class="option-type-label">Type:</dt>
285 <dd class="option-type">Boolean</dd>
286
287 <dt class="option-default-label">Default:</dt>
288 <dd class="option-default">true</dd>
289
290 </dl>
291 </div>
292 <div class="option-description">
293 <p>If set to true, the dialog will be draggable will be draggable by the titlebar.</p>
294 </div>
295 <div class="option-examples">
296 <h4>Code examples</h4>
297 <dl class="option-examples-list">
298
299<dt>
300 Initialize a dialog with the <code>draggable</code> option specified.
301</dt>
302<dd>
303<pre><code>$('.selector').dialog({ draggable: false });</code></pre>
304</dd>
305
306
307<dt>
308 Get or set the <code>draggable</code> option, after init.
309</dt>
310<dd>
311<pre><code>//getter
312var draggable = $('.selector').dialog('option', 'draggable');
313//setter
314$('.selector').dialog('option', 'draggable', false);</code></pre>
315</dd>
316
317 </dl>
318 </div>
319</li>
320
321
322<li class="option" id="option-height">
323 <div class="option-header">
324 <h3 class="option-name"><a href="#option-height">height</a></h3>
325 <dl>
326 <dt class="option-type-label">Type:</dt>
327 <dd class="option-type">Number</dd>
328
329 <dt class="option-default-label">Default:</dt>
330 <dd class="option-default">'auto'</dd>
331
332 </dl>
333 </div>
334 <div class="option-description">
335 <p>The height of the dialog, in pixels.</p>
336 </div>
337 <div class="option-examples">
338 <h4>Code examples</h4>
339 <dl class="option-examples-list">
340
341<dt>
342 Initialize a dialog with the <code>height</code> option specified.
343</dt>
344<dd>
345<pre><code>$('.selector').dialog({ height: 530 });</code></pre>
346</dd>
347
348
349<dt>
350 Get or set the <code>height</code> option, after init.
351</dt>
352<dd>
353<pre><code>//getter
354var height = $('.selector').dialog('option', 'height');
355//setter
356$('.selector').dialog('option', 'height', 530);</code></pre>
357</dd>
358
359 </dl>
360 </div>
361</li>
362
363
364<li class="option" id="option-hide">
365 <div class="option-header">
366 <h3 class="option-name"><a href="#option-hide">hide</a></h3>
367 <dl>
368 <dt class="option-type-label">Type:</dt>
369 <dd class="option-type">String</dd>
370
371 <dt class="option-default-label">Default:</dt>
372 <dd class="option-default">null</dd>
373
374 </dl>
375 </div>
376 <div class="option-description">
377 <p>The effect to be used when the dialog is closed.</p>
378 </div>
379 <div class="option-examples">
380 <h4>Code examples</h4>
381 <dl class="option-examples-list">
382
383<dt>
384 Initialize a dialog with the <code>hide</code> option specified.
385</dt>
386<dd>
387<pre><code>$('.selector').dialog({ hide: 'slide' });</code></pre>
388</dd>
389
390
391<dt>
392 Get or set the <code>hide</code> option, after init.
393</dt>
394<dd>
395<pre><code>//getter
396var hide = $('.selector').dialog('option', 'hide');
397//setter
398$('.selector').dialog('option', 'hide', 'slide');</code></pre>
399</dd>
400
401 </dl>
402 </div>
403</li>
404
405
406<li class="option" id="option-maxHeight">
407 <div class="option-header">
408 <h3 class="option-name"><a href="#option-maxHeight">maxHeight</a></h3>
409 <dl>
410 <dt class="option-type-label">Type:</dt>
411 <dd class="option-type">Number</dd>
412
413 <dt class="option-default-label">Default:</dt>
414 <dd class="option-default">false</dd>
415
416 </dl>
417 </div>
418 <div class="option-description">
419 <p>The maximum height to which the dialog can be resized, in pixels.</p>
420 </div>
421 <div class="option-examples">
422 <h4>Code examples</h4>
423 <dl class="option-examples-list">
424
425<dt>
426 Initialize a dialog with the <code>maxHeight</code> option specified.
427</dt>
428<dd>
429<pre><code>$('.selector').dialog({ maxHeight: 400 });</code></pre>
430</dd>
431
432
433<dt>
434 Get or set the <code>maxHeight</code> option, after init.
435</dt>
436<dd>
437<pre><code>//getter
438var maxHeight = $('.selector').dialog('option', 'maxHeight');
439//setter
440$('.selector').dialog('option', 'maxHeight', 400);</code></pre>
441</dd>
442
443 </dl>
444 </div>
445</li>
446
447
448<li class="option" id="option-maxWidth">
449 <div class="option-header">
450 <h3 class="option-name"><a href="#option-maxWidth">maxWidth</a></h3>
451 <dl>
452 <dt class="option-type-label">Type:</dt>
453 <dd class="option-type">Number</dd>
454
455 <dt class="option-default-label">Default:</dt>
456 <dd class="option-default">false</dd>
457
458 </dl>
459 </div>
460 <div class="option-description">
461 <p>The maximum width to which the dialog can be resized, in pixels.</p>
462 </div>
463 <div class="option-examples">
464 <h4>Code examples</h4>
465 <dl class="option-examples-list">
466
467<dt>
468 Initialize a dialog with the <code>maxWidth</code> option specified.
469</dt>
470<dd>
471<pre><code>$('.selector').dialog({ maxWidth: 600 });</code></pre>
472</dd>
473
474
475<dt>
476 Get or set the <code>maxWidth</code> option, after init.
477</dt>
478<dd>
479<pre><code>//getter
480var maxWidth = $('.selector').dialog('option', 'maxWidth');
481//setter
482$('.selector').dialog('option', 'maxWidth', 600);</code></pre>
483</dd>
484
485 </dl>
486 </div>
487</li>
488
489
490<li class="option" id="option-minHeight">
491 <div class="option-header">
492 <h3 class="option-name"><a href="#option-minHeight">minHeight</a></h3>
493 <dl>
494 <dt class="option-type-label">Type:</dt>
495 <dd class="option-type">Number</dd>
496
497 <dt class="option-default-label">Default:</dt>
498 <dd class="option-default">150</dd>
499
500 </dl>
501 </div>
502 <div class="option-description">
503 <p>The minimum height to which the dialog can be resized, in pixels.</p>
504 </div>
505 <div class="option-examples">
506 <h4>Code examples</h4>
507 <dl class="option-examples-list">
508
509<dt>
510 Initialize a dialog with the <code>minHeight</code> option specified.
511</dt>
512<dd>
513<pre><code>$('.selector').dialog({ minHeight: 300 });</code></pre>
514</dd>
515
516
517<dt>
518 Get or set the <code>minHeight</code> option, after init.
519</dt>
520<dd>
521<pre><code>//getter
522var minHeight = $('.selector').dialog('option', 'minHeight');
523//setter
524$('.selector').dialog('option', 'minHeight', 300);</code></pre>
525</dd>
526
527 </dl>
528 </div>
529</li>
530
531
532<li class="option" id="option-minWidth">
533 <div class="option-header">
534 <h3 class="option-name"><a href="#option-minWidth">minWidth</a></h3>
535 <dl>
536 <dt class="option-type-label">Type:</dt>
537 <dd class="option-type">Number</dd>
538
539 <dt class="option-default-label">Default:</dt>
540 <dd class="option-default">150</dd>
541
542 </dl>
543 </div>
544 <div class="option-description">
545 <p>The minimum width to which the dialog can be resized, in pixels.</p>
546 </div>
547 <div class="option-examples">
548 <h4>Code examples</h4>
549 <dl class="option-examples-list">
550
551<dt>
552 Initialize a dialog with the <code>minWidth</code> option specified.
553</dt>
554<dd>
555<pre><code>$('.selector').dialog({ minWidth: 400 });</code></pre>
556</dd>
557
558
559<dt>
560 Get or set the <code>minWidth</code> option, after init.
561</dt>
562<dd>
563<pre><code>//getter
564var minWidth = $('.selector').dialog('option', 'minWidth');
565//setter
566$('.selector').dialog('option', 'minWidth', 400);</code></pre>
567</dd>
568
569 </dl>
570 </div>
571</li>
572
573
574<li class="option" id="option-modal">
575 <div class="option-header">
576 <h3 class="option-name"><a href="#option-modal">modal</a></h3>
577 <dl>
578 <dt class="option-type-label">Type:</dt>
579 <dd class="option-type">Boolean</dd>
580
581 <dt class="option-default-label">Default:</dt>
582 <dd class="option-default">false</dd>
583
584 </dl>
585 </div>
586 <div class="option-description">
587 <p>If set to true, the dialog will have modal behavior; other items on the page will be disabled (i.e. cannot be interacted with). Modal dialogs create an overlay below the dialog but above other page elements.</p>
588 </div>
589 <div class="option-examples">
590 <h4>Code examples</h4>
591 <dl class="option-examples-list">
592
593<dt>
594 Initialize a dialog with the <code>modal</code> option specified.
595</dt>
596<dd>
597<pre><code>$('.selector').dialog({ modal: true });</code></pre>
598</dd>
599
600
601<dt>
602 Get or set the <code>modal</code> option, after init.
603</dt>
604<dd>
605<pre><code>//getter
606var modal = $('.selector').dialog('option', 'modal');
607//setter
608$('.selector').dialog('option', 'modal', true);</code></pre>
609</dd>
610
611 </dl>
612 </div>
613</li>
614
615
616<li class="option" id="option-position">
617 <div class="option-header">
618 <h3 class="option-name"><a href="#option-position">position</a></h3>
619 <dl>
620 <dt class="option-type-label">Type:</dt>
621 <dd class="option-type">String, Array</dd>
622
623 <dt class="option-default-label">Default:</dt>
624 <dd class="option-default">'center'</dd>
625
626 </dl>
627 </div>
628 <div class="option-description">
629 <p>Specifies where the dialog should be displayed. Possible values: 'center', 'left', 'right', 'top', 'bottom', or an array containing a coordinate pair (in pixel offset from top left of viewport) or the possible string values (e.g. ['right','top'] for top right corner).</p>
630 </div>
631 <div class="option-examples">
632 <h4>Code examples</h4>
633 <dl class="option-examples-list">
634
635<dt>
636 Initialize a dialog with the <code>position</code> option specified.
637</dt>
638<dd>
639<pre><code>$('.selector').dialog({ position: 'top' });</code></pre>
640</dd>
641
642
643<dt>
644 Get or set the <code>position</code> option, after init.
645</dt>
646<dd>
647<pre><code>//getter
648var position = $('.selector').dialog('option', 'position');
649//setter
650$('.selector').dialog('option', 'position', 'top');</code></pre>
651</dd>
652
653 </dl>
654 </div>
655</li>
656
657
658<li class="option" id="option-resizable">
659 <div class="option-header">
660 <h3 class="option-name"><a href="#option-resizable">resizable</a></h3>
661 <dl>
662 <dt class="option-type-label">Type:</dt>
663 <dd class="option-type">Boolean</dd>
664
665 <dt class="option-default-label">Default:</dt>
666 <dd class="option-default">true</dd>
667
668 </dl>
669 </div>
670 <div class="option-description">
671 <p>If set to true, the dialog will be resizeable.</p>
672 </div>
673 <div class="option-examples">
674 <h4>Code examples</h4>
675 <dl class="option-examples-list">
676
677<dt>
678 Initialize a dialog with the <code>resizable</code> option specified.
679</dt>
680<dd>
681<pre><code>$('.selector').dialog({ resizable: false });</code></pre>
682</dd>
683
684
685<dt>
686 Get or set the <code>resizable</code> option, after init.
687</dt>
688<dd>
689<pre><code>//getter
690var resizable = $('.selector').dialog('option', 'resizable');
691//setter
692$('.selector').dialog('option', 'resizable', false);</code></pre>
693</dd>
694
695 </dl>
696 </div>
697</li>
698
699
700<li class="option" id="option-show">
701 <div class="option-header">
702 <h3 class="option-name"><a href="#option-show">show</a></h3>
703 <dl>
704 <dt class="option-type-label">Type:</dt>
705 <dd class="option-type">String</dd>
706
707 <dt class="option-default-label">Default:</dt>
708 <dd class="option-default">null</dd>
709
710 </dl>
711 </div>
712 <div class="option-description">
713 <p>The effect to be used when the dialog is opened.</p>
714 </div>
715 <div class="option-examples">
716 <h4>Code examples</h4>
717 <dl class="option-examples-list">
718
719<dt>
720 Initialize a dialog with the <code>show</code> option specified.
721</dt>
722<dd>
723<pre><code>$('.selector').dialog({ show: 'slide' });</code></pre>
724</dd>
725
726
727<dt>
728 Get or set the <code>show</code> option, after init.
729</dt>
730<dd>
731<pre><code>//getter
732var show = $('.selector').dialog('option', 'show');
733//setter
734$('.selector').dialog('option', 'show', 'slide');</code></pre>
735</dd>
736
737 </dl>
738 </div>
739</li>
740
741
742<li class="option" id="option-stack">
743 <div class="option-header">
744 <h3 class="option-name"><a href="#option-stack">stack</a></h3>
745 <dl>
746 <dt class="option-type-label">Type:</dt>
747 <dd class="option-type">Boolean</dd>
748
749 <dt class="option-default-label">Default:</dt>
750 <dd class="option-default">true</dd>
751
752 </dl>
753 </div>
754 <div class="option-description">
755 <p>Specifies whether the dialog will stack on top of other dialogs. This will cause the dialog to move to the front of other dialogs when it gains focus.</p>
756 </div>
757 <div class="option-examples">
758 <h4>Code examples</h4>
759 <dl class="option-examples-list">
760
761<dt>
762 Initialize a dialog with the <code>stack</code> option specified.
763</dt>
764<dd>
765<pre><code>$('.selector').dialog({ stack: false });</code></pre>
766</dd>
767
768
769<dt>
770 Get or set the <code>stack</code> option, after init.
771</dt>
772<dd>
773<pre><code>//getter
774var stack = $('.selector').dialog('option', 'stack');
775//setter
776$('.selector').dialog('option', 'stack', false);</code></pre>
777</dd>
778
779 </dl>
780 </div>
781</li>
782
783
784<li class="option" id="option-title">
785 <div class="option-header">
786 <h3 class="option-name"><a href="#option-title">title</a></h3>
787 <dl>
788 <dt class="option-type-label">Type:</dt>
789 <dd class="option-type">String</dd>
790
791 <dt class="option-default-label">Default:</dt>
792 <dd class="option-default">''</dd>
793
794 </dl>
795 </div>
796 <div class="option-description">
797 <p>Specifies the title of the dialog. The title can also be specified by the title attribute on the dialog source element.</p>
798 </div>
799 <div class="option-examples">
800 <h4>Code examples</h4>
801 <dl class="option-examples-list">
802
803<dt>
804 Initialize a dialog with the <code>title</code> option specified.
805</dt>
806<dd>
807<pre><code>$('.selector').dialog({ title: 'Dialog Title' });</code></pre>
808</dd>
809
810
811<dt>
812 Get or set the <code>title</code> option, after init.
813</dt>
814<dd>
815<pre><code>//getter
816var title = $('.selector').dialog('option', 'title');
817//setter
818$('.selector').dialog('option', 'title', 'Dialog Title');</code></pre>
819</dd>
820
821 </dl>
822 </div>
823</li>
824
825
826<li class="option" id="option-width">
827 <div class="option-header">
828 <h3 class="option-name"><a href="#option-width">width</a></h3>
829 <dl>
830 <dt class="option-type-label">Type:</dt>
831 <dd class="option-type">Number</dd>
832
833 <dt class="option-default-label">Default:</dt>
834 <dd class="option-default">300</dd>
835
836 </dl>
837 </div>
838 <div class="option-description">
839 <p>The width of the dialog, in pixels.</p>
840 </div>
841 <div class="option-examples">
842 <h4>Code examples</h4>
843 <dl class="option-examples-list">
844
845<dt>
846 Initialize a dialog with the <code>width</code> option specified.
847</dt>
848<dd>
849<pre><code>$('.selector').dialog({ width: 460 });</code></pre>
850</dd>
851
852
853<dt>
854 Get or set the <code>width</code> option, after init.
855</dt>
856<dd>
857<pre><code>//getter
858var width = $('.selector').dialog('option', 'width');
859//setter
860$('.selector').dialog('option', 'width', 460);</code></pre>
861</dd>
862
863 </dl>
864 </div>
865</li>
866
867
868<li class="option" id="option-zIndex">
869 <div class="option-header">
870 <h3 class="option-name"><a href="#option-zIndex">zIndex</a></h3>
871 <dl>
872 <dt class="option-type-label">Type:</dt>
873 <dd class="option-type">Integer</dd>
874
875 <dt class="option-default-label">Default:</dt>
876 <dd class="option-default">1000</dd>
877
878 </dl>
879 </div>
880 <div class="option-description">
881 <p>The starting z-index for the dialog.</p>
882 </div>
883 <div class="option-examples">
884 <h4>Code examples</h4>
885 <dl class="option-examples-list">
886
887<dt>
888 Initialize a dialog with the <code>zIndex</code> option specified.
889</dt>
890<dd>
891<pre><code>$('.selector').dialog({ zIndex: 3999 });</code></pre>
892</dd>
893
894
895<dt>
896 Get or set the <code>zIndex</code> option, after init.
897</dt>
898<dd>
899<pre><code>//getter
900var zIndex = $('.selector').dialog('option', 'zIndex');
901//setter
902$('.selector').dialog('option', 'zIndex', 3999);</code></pre>
903</dd>
904
905 </dl>
906 </div>
907</li>
908
909 </ul>
910 </div>
911 <div id="events">
912 <h2 class="top-header">Events</h2>
913 <ul class="events-list">
914
915<li class="event" id="event-beforeclose">
916 <div class="event-header">
917 <h3 class="event-name"><a href="#event-beforeclose">beforeclose</a></h3>
918 <dl>
919 <dt class="event-type-label">Type:</dt>
920 <dd class="event-type">dialogbeforeclose</dd>
921 </dl>
922 </div>
923 <div class="event-description">
924 <p>This event is triggered when a dialog attempts to close. If the beforeclose event handler (callback function) returns false, the close will be prevented.</p>
925 </div>
926 <div class="event-examples">
927 <h4>Code examples</h4>
928 <dl class="event-examples-list">
929
930<dt>
931 Supply a callback function to handle the <code>beforeclose</code> event as an init option.
932</dt>
933<dd>
934<pre><code>$('.selector').dialog({
935 beforeclose: function(event, ui) { ... }
936});</code></pre>
937</dd>
938
939
940<dt>
941 Bind to the <code>beforeclose</code> event by type: <code>dialogbeforeclose</code>.
942</dt>
943<dd>
944<pre><code>$('.selector').bind('dialogbeforeclose', function(event, ui) {
945 ...
946});</code></pre>
947</dd>
948
949 </dl>
950 </div>
951</li>
952
953
954<li class="event" id="event-open">
955 <div class="event-header">
956 <h3 class="event-name"><a href="#event-open">open</a></h3>
957 <dl>
958 <dt class="event-type-label">Type:</dt>
959 <dd class="event-type">dialogopen</dd>
960 </dl>
961 </div>
962 <div class="event-description">
963 <p>This event is triggered when dialog is opened.</p>
964 </div>
965 <div class="event-examples">
966 <h4>Code examples</h4>
967 <dl class="event-examples-list">
968
969<dt>
970 Supply a callback function to handle the <code>open</code> event as an init option.
971</dt>
972<dd>
973<pre><code>$('.selector').dialog({
974 open: function(event, ui) { ... }
975});</code></pre>
976</dd>
977
978
979<dt>
980 Bind to the <code>open</code> event by type: <code>dialogopen</code>.
981</dt>
982<dd>
983<pre><code>$('.selector').bind('dialogopen', function(event, ui) {
984 ...
985});</code></pre>
986</dd>
987
988 </dl>
989 </div>
990</li>
991
992
993<li class="event" id="event-focus">
994 <div class="event-header">
995 <h3 class="event-name"><a href="#event-focus">focus</a></h3>
996 <dl>
997 <dt class="event-type-label">Type:</dt>
998 <dd class="event-type">dialogfocus</dd>
999 </dl>
1000 </div>
1001 <div class="event-description">
1002 <p>This event is triggered when the dialog gains focus.</p>
1003 </div>
1004 <div class="event-examples">
1005 <h4>Code examples</h4>
1006 <dl class="event-examples-list">
1007
1008<dt>
1009 Supply a callback function to handle the <code>focus</code> event as an init option.
1010</dt>
1011<dd>
1012<pre><code>$('.selector').dialog({
1013 focus: function(event, ui) { ... }
1014});</code></pre>
1015</dd>
1016
1017
1018<dt>
1019 Bind to the <code>focus</code> event by type: <code>dialogfocus</code>.
1020</dt>
1021<dd>
1022<pre><code>$('.selector').bind('dialogfocus', function(event, ui) {
1023 ...
1024});</code></pre>
1025</dd>
1026
1027 </dl>
1028 </div>
1029</li>
1030
1031
1032<li class="event" id="event-dragStart">
1033 <div class="event-header">
1034 <h3 class="event-name"><a href="#event-dragStart">dragStart</a></h3>
1035 <dl>
1036 <dt class="event-type-label">Type:</dt>
1037 <dd class="event-type">dragStart</dd>
1038 </dl>
1039 </div>
1040 <div class="event-description">
1041 <p>This event is triggered at the beginning of the dialog being dragged.</p>
1042 </div>
1043 <div class="event-examples">
1044 <h4>Code examples</h4>
1045 <dl class="event-examples-list">
1046
1047<dt>
1048 Supply a callback function to handle the <code>dragStart</code> event as an init option.
1049</dt>
1050<dd>
1051<pre><code>$('.selector').dialog({
1052 dragStart: function(event, ui) { ... }
1053});</code></pre>
1054</dd>
1055
1056
1057<dt>
1058 Bind to the <code>dragStart</code> event by type: <code>dragStart</code>.
1059</dt>
1060<dd>
1061<pre><code>$('.selector').bind('dragStart', function(event, ui) {
1062 ...
1063});</code></pre>
1064</dd>
1065
1066 </dl>
1067 </div>
1068</li>
1069
1070
1071<li class="event" id="event-drag">
1072 <div class="event-header">
1073 <h3 class="event-name"><a href="#event-drag">drag</a></h3>
1074 <dl>
1075 <dt class="event-type-label">Type:</dt>
1076 <dd class="event-type">drag</dd>
1077 </dl>
1078 </div>
1079 <div class="event-description">
1080 <p>This event is triggered when the dialog is dragged.</p>
1081 </div>
1082 <div class="event-examples">
1083 <h4>Code examples</h4>
1084 <dl class="event-examples-list">
1085
1086<dt>
1087 Supply a callback function to handle the <code>drag</code> event as an init option.
1088</dt>
1089<dd>
1090<pre><code>$('.selector').dialog({
1091 drag: function(event, ui) { ... }
1092});</code></pre>
1093</dd>
1094
1095
1096<dt>
1097 Bind to the <code>drag</code> event by type: <code>drag</code>.
1098</dt>
1099<dd>
1100<pre><code>$('.selector').bind('drag', function(event, ui) {
1101 ...
1102});</code></pre>
1103</dd>
1104
1105 </dl>
1106 </div>
1107</li>
1108
1109
1110<li class="event" id="event-dragStop">
1111 <div class="event-header">
1112 <h3 class="event-name"><a href="#event-dragStop">dragStop</a></h3>
1113 <dl>
1114 <dt class="event-type-label">Type:</dt>
1115 <dd class="event-type">dragStop</dd>
1116 </dl>
1117 </div>
1118 <div class="event-description">
1119 <p>This event is triggered after the dialog has been dragged.</p>
1120 </div>
1121 <div class="event-examples">
1122 <h4>Code examples</h4>
1123 <dl class="event-examples-list">
1124
1125<dt>
1126 Supply a callback function to handle the <code>dragStop</code> event as an init option.
1127</dt>
1128<dd>
1129<pre><code>$('.selector').dialog({
1130 dragStop: function(event, ui) { ... }
1131});</code></pre>
1132</dd>
1133
1134
1135<dt>
1136 Bind to the <code>dragStop</code> event by type: <code>dragStop</code>.
1137</dt>
1138<dd>
1139<pre><code>$('.selector').bind('dragStop', function(event, ui) {
1140 ...
1141});</code></pre>
1142</dd>
1143
1144 </dl>
1145 </div>
1146</li>
1147
1148
1149<li class="event" id="event-resizeStart">
1150 <div class="event-header">
1151 <h3 class="event-name"><a href="#event-resizeStart">resizeStart</a></h3>
1152 <dl>
1153 <dt class="event-type-label">Type:</dt>
1154 <dd class="event-type">resizeStart</dd>
1155 </dl>
1156 </div>
1157 <div class="event-description">
1158 <p>This event is triggered at the beginning of the dialog being resized.</p>
1159 </div>
1160 <div class="event-examples">
1161 <h4>Code examples</h4>
1162 <dl class="event-examples-list">
1163
1164<dt>
1165 Supply a callback function to handle the <code>resizeStart</code> event as an init option.
1166</dt>
1167<dd>
1168<pre><code>$('.selector').dialog({
1169 resizeStart: function(event, ui) { ... }
1170});</code></pre>
1171</dd>
1172
1173
1174<dt>
1175 Bind to the <code>resizeStart</code> event by type: <code>resizeStart</code>.
1176</dt>
1177<dd>
1178<pre><code>$('.selector').bind('resizeStart', function(event, ui) {
1179 ...
1180});</code></pre>
1181</dd>
1182
1183 </dl>
1184 </div>
1185</li>
1186
1187
1188<li class="event" id="event-resize">
1189 <div class="event-header">
1190 <h3 class="event-name"><a href="#event-resize">resize</a></h3>
1191 <dl>
1192 <dt class="event-type-label">Type:</dt>
1193 <dd class="event-type">resize</dd>
1194 </dl>
1195 </div>
1196 <div class="event-description">
1197 <p>This event is triggered when the dialog is resized.</p>
1198 </div>
1199 <div class="event-examples">
1200 <h4>Code examples</h4>
1201 <dl class="event-examples-list">
1202
1203<dt>
1204 Supply a callback function to handle the <code>resize</code> event as an init option.
1205</dt>
1206<dd>
1207<pre><code>$('.selector').dialog({
1208 resize: function(event, ui) { ... }
1209});</code></pre>
1210</dd>
1211
1212
1213<dt>
1214 Bind to the <code>resize</code> event by type: <code>resize</code>.
1215</dt>
1216<dd>
1217<pre><code>$('.selector').bind('resize', function(event, ui) {
1218 ...
1219});</code></pre>
1220</dd>
1221
1222 </dl>
1223 </div>
1224</li>
1225
1226
1227<li class="event" id="event-resizeStop">
1228 <div class="event-header">
1229 <h3 class="event-name"><a href="#event-resizeStop">resizeStop</a></h3>
1230 <dl>
1231 <dt class="event-type-label">Type:</dt>
1232 <dd class="event-type">resizeStop</dd>
1233 </dl>
1234 </div>
1235 <div class="event-description">
1236 <p>This event is triggered after the dialog has been resized.</p>
1237 </div>
1238 <div class="event-examples">
1239 <h4>Code examples</h4>
1240 <dl class="event-examples-list">
1241
1242<dt>
1243 Supply a callback function to handle the <code>resizeStop</code> event as an init option.
1244</dt>
1245<dd>
1246<pre><code>$('.selector').dialog({
1247 resizeStop: function(event, ui) { ... }
1248});</code></pre>
1249</dd>
1250
1251
1252<dt>
1253 Bind to the <code>resizeStop</code> event by type: <code>resizeStop</code>.
1254</dt>
1255<dd>
1256<pre><code>$('.selector').bind('resizeStop', function(event, ui) {
1257 ...
1258});</code></pre>
1259</dd>
1260
1261 </dl>
1262 </div>
1263</li>
1264
1265
1266<li class="event" id="event-close">
1267 <div class="event-header">
1268 <h3 class="event-name"><a href="#event-close">close</a></h3>
1269 <dl>
1270 <dt class="event-type-label">Type:</dt>
1271 <dd class="event-type">dialogclose</dd>
1272 </dl>
1273 </div>
1274 <div class="event-description">
1275 <p>This event is triggered when the dialog is closed.</p>
1276 </div>
1277 <div class="event-examples">
1278 <h4>Code examples</h4>
1279 <dl class="event-examples-list">
1280
1281<dt>
1282 Supply a callback function to handle the <code>close</code> event as an init option.
1283</dt>
1284<dd>
1285<pre><code>$('.selector').dialog({
1286 close: function(event, ui) { ... }
1287});</code></pre>
1288</dd>
1289
1290
1291<dt>
1292 Bind to the <code>close</code> event by type: <code>dialogclose</code>.
1293</dt>
1294<dd>
1295<pre><code>$('.selector').bind('dialogclose', function(event, ui) {
1296 ...
1297});</code></pre>
1298</dd>
1299
1300 </dl>
1301 </div>
1302</li>
1303
1304 </ul>
1305 </div>
1306 <div id="methods">
1307 <h2 class="top-header">Methods</h2>
1308 <ul class="methods-list">
1309
1310<li class="method" id="method-destroy">
1311 <div class="method-header">
1312 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
1313 <dl>
1314 <dt class="method-signature-label">Signature:</dt>
1315 <dd class="method-signature">.dialog( 'destroy'
1316
1317
1318
1319
1320
1321
1322
1323)</dd>
1324 </dl>
1325 </div>
1326 <div class="method-description">
1327 <p>Remove the dialog functionality completely. This will return the element back to its pre-init state.</p>
1328 </div>
1329</li>
1330
1331
1332<li class="method" id="method-disable">
1333 <div class="method-header">
1334 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
1335 <dl>
1336 <dt class="method-signature-label">Signature:</dt>
1337 <dd class="method-signature">.dialog( 'disable'
1338
1339
1340
1341
1342
1343
1344
1345)</dd>
1346 </dl>
1347 </div>
1348 <div class="method-description">
1349 <p>Disable the dialog.</p>
1350 </div>
1351</li>
1352
1353
1354<li class="method" id="method-enable">
1355 <div class="method-header">
1356 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
1357 <dl>
1358 <dt class="method-signature-label">Signature:</dt>
1359 <dd class="method-signature">.dialog( 'enable'
1360
1361
1362
1363
1364
1365
1366
1367)</dd>
1368 </dl>
1369 </div>
1370 <div class="method-description">
1371 <p>Enable the dialog.</p>
1372 </div>
1373</li>
1374
1375
1376<li class="method" id="method-option">
1377 <div class="method-header">
1378 <h3 class="method-name"><a href="#method-option">option</a></h3>
1379 <dl>
1380 <dt class="method-signature-label">Signature:</dt>
1381 <dd class="method-signature">.dialog( 'option'
1382
1383, optionName
1384
1385, <span class="optional">[</span>value<span class="optional">] </span>
1386
1387
1388
1389)</dd>
1390 </dl>
1391 </div>
1392 <div class="method-description">
1393 <p>Get or set any dialog option. If no value is specified, will act as a getter.</p>
1394 </div>
1395</li>
1396
1397
1398<li class="method" id="method-close">
1399 <div class="method-header">
1400 <h3 class="method-name"><a href="#method-close">close</a></h3>
1401 <dl>
1402 <dt class="method-signature-label">Signature:</dt>
1403 <dd class="method-signature">.dialog( 'close'
1404
1405
1406
1407
1408
1409
1410
1411)</dd>
1412 </dl>
1413 </div>
1414 <div class="method-description">
1415 <p>Close the dialog.</p>
1416 </div>
1417</li>
1418
1419
1420<li class="method" id="method-isOpen">
1421 <div class="method-header">
1422 <h3 class="method-name"><a href="#method-isOpen">isOpen</a></h3>
1423 <dl>
1424 <dt class="method-signature-label">Signature:</dt>
1425 <dd class="method-signature">.dialog( 'isOpen'
1426
1427
1428
1429
1430
1431
1432
1433)</dd>
1434 </dl>
1435 </div>
1436 <div class="method-description">
1437 <p>Returns true if the dialog is currently open.</p>
1438 </div>
1439</li>
1440
1441
1442<li class="method" id="method-moveToTop">
1443 <div class="method-header">
1444 <h3 class="method-name"><a href="#method-moveToTop">moveToTop</a></h3>
1445 <dl>
1446 <dt class="method-signature-label">Signature:</dt>
1447 <dd class="method-signature">.dialog( 'moveToTop'
1448
1449
1450
1451
1452
1453
1454
1455)</dd>
1456 </dl>
1457 </div>
1458 <div class="method-description">
1459 <p>Move the dialog to the top of the dialogs stack.</p>
1460 </div>
1461</li>
1462
1463
1464<li class="method" id="method-open">
1465 <div class="method-header">
1466 <h3 class="method-name"><a href="#method-open">open</a></h3>
1467 <dl>
1468 <dt class="method-signature-label">Signature:</dt>
1469 <dd class="method-signature">.dialog( 'open'
1470
1471
1472
1473
1474
1475
1476
1477)</dd>
1478 </dl>
1479 </div>
1480 <div class="method-description">
1481 <p>Open the dialog.</p>
1482 </div>
1483</li>
1484
1485 </ul>
1486 </div>
1487 <div id="theming">
1488 <h2 class="top-header">Theming</h2>
1489 <p>The jQuery UI Dialog plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
1490</p>
1491 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.dialog.css stylesheet that can be modified. These classes are highlighed in bold below.
1492</p>
1493
1494 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
1495 &lt;div class=&quot;<strong>ui-dialog</strong> ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable&quot;&gt;<br />
1496&nbsp;&nbsp;&nbsp;&lt;div class=&quot;<strong>ui-dialog-titlebar</strong> ui-widget-header ui-corner-all ui-helper-clearfix&quot;&gt;<br />
1497&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span id=&quot;<strong>ui-dialog-title-dialog</strong>&quot; class=&quot;ui-dialog-title&quot;&gt;Dialog title&lt;/span&gt;<br />
1498&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a class=&quot;<strong>ui-dialog-titlebar-close</strong> ui-corner-all&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;ui-icon ui-icon-closethick&quot;&gt;close&lt;/span&gt;&lt;/a&gt;<br />
1499&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
1500&nbsp;&nbsp;&nbsp;&lt;div style=&quot;height: 200px; min-height: 109px; width: auto;&quot; class=&quot;<strong>ui-dialog-content</strong> ui-widget-content&quot; id=&quot;dialog&quot;&gt;<br />
1501&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Dialog content goes here.&lt;/p&gt;<br />
1502&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
1503&lt;/div&gt;<br />
1504 <p class="theme-note">
1505 <strong>
1506 Note: This is a sample of markup generated by the dialog plugin, not markup you should use to create a dialog. The only markup needed for that is &lt;div&gt;&lt;/div&gt;.
1507 </strong>
1508 </p>
1509
1510 </div>
1511</div>
1512
1513</p><!--
1514Pre-expand include size: 58797 bytes
1515Post-expand include size: 100188 bytes
1516Template argument size: 56839 bytes
1517Maximum: 2097152 bytes
1518-->
1519
1520<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3347-1!1!0!!en!2 and timestamp 20090604112219 -->
diff --git a/static/development-bundle/docs/draggable.html b/static/development-bundle/docs/draggable.html
new file mode 100644
index 0000000..8e45fc2
--- /dev/null
+++ b/static/development-bundle/docs/draggable.html
@@ -0,0 +1,1448 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Draggable</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>The jQuery UI Draggable plugin makes selected elements draggable by mouse.</p>
15<p>Draggable elements gets a class of <code>ui-draggable</code>. During drag the element also gets a class of <code>ui-draggable-dragging</code>. If you want not just drag, but drag-and-drop, see the jQuery UI Droppable plugin, which provides a drop target for draggables.</p>
16<p>All callbacks (start, stop, drag) receive two arguments: The original browser event and a prepared ui object, view below for a documentation of this object (if you name your second argument 'ui'):</p>
17<ul>
18<li><b>ui.helper</b> - the jQuery object representing the helper that's being dragged</li>
19<li><b>ui.position</b> - current position of the helper as { top, left } object, relative to the offset element</li>
20<li><b>ui.offset</b> - current absolute position of the helper as { top, left } object, relative to page</li>
21</ul>
22 </div>
23 <div id="overview-dependencies">
24 <h3>Dependencies</h3>
25 <ul>
26<li>UI Core</li>
27</ul>
28 </div>
29 <div id="overview-example">
30 <h3>Example</h3>
31 <div id="overview-example" class="example">
32<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
33<p><div id="demo" class="tabs-container" rel="170">
34Initialize a draggable with default options.<br />
35</p>
36<pre>$(&quot;#draggable&quot;).draggable();
37</pre>
38<p></div><div id="source" class="tabs-container">
39</p>
40<pre>&lt;!DOCTYPE html&gt;
41&lt;html&gt;
42&lt;head&gt;
43 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
44 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
45 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
46 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.draggable.js&quot;&gt;&lt;/script&gt;
47 &lt;style type=&quot;text/css&quot;&gt;
48 #draggable { width: 100px; height: 70px; background: silver; }
49 &lt;/style&gt;
50 &lt;script type="text/javascript"&gt;
51 $(document).ready(function(){
52 $(&quot;#draggable&quot;).draggable();
53 });
54 &lt;/script&gt;
55&lt;/head&gt;
56&lt;body style="font-size:62.5%;"&gt;
57
58&lt;div id=&quot;draggable&quot;&gt;Drag me&lt;/div&gt;
59
60&lt;/body&gt;
61&lt;/html&gt;
62</pre>
63<p></div>
64</p><p></div>
65 </div>
66 </div>
67 <div id="options">
68 <h2 class="top-header">Options</h2>
69 <ul class="options-list">
70
71<li class="option" id="option-addClasses">
72 <div class="option-header">
73 <h3 class="option-name"><a href="#option-addClasses">addClasses</a></h3>
74 <dl>
75 <dt class="option-type-label">Type:</dt>
76 <dd class="option-type">Boolean</dd>
77
78 <dt class="option-default-label">Default:</dt>
79 <dd class="option-default">true</dd>
80
81 </dl>
82 </div>
83 <div class="option-description">
84 <p>If set to false, will prevent the <code>ui-draggable</code> class from being added. This may be desired as a performance optimization when calling <code>.draggable()</code> init on many hundreds of elements.</p>
85 </div>
86 <div class="option-examples">
87 <h4>Code examples</h4>
88 <dl class="option-examples-list">
89
90<dt>
91 Initialize a draggable with the <code>addClasses</code> option specified.
92</dt>
93<dd>
94<pre><code>$('.selector').draggable({ addClasses: false });</code></pre>
95</dd>
96
97
98<dt>
99 Get or set the <code>addClasses</code> option, after init.
100</dt>
101<dd>
102<pre><code>//getter
103var addClasses = $('.selector').draggable('option', 'addClasses');
104//setter
105$('.selector').draggable('option', 'addClasses', false);</code></pre>
106</dd>
107
108 </dl>
109 </div>
110</li>
111
112
113<li class="option" id="option-appendTo">
114 <div class="option-header">
115 <h3 class="option-name"><a href="#option-appendTo">appendTo</a></h3>
116 <dl>
117 <dt class="option-type-label">Type:</dt>
118 <dd class="option-type">Element, Selector</dd>
119
120 <dt class="option-default-label">Default:</dt>
121 <dd class="option-default">'parent'</dd>
122
123 </dl>
124 </div>
125 <div class="option-description">
126 <p>The element passed to or selected by the <code>appendTo</code> option will be used as the draggable helper's container during dragging. By default, the helper is appended to the same container as the draggable.</p>
127 </div>
128 <div class="option-examples">
129 <h4>Code examples</h4>
130 <dl class="option-examples-list">
131
132<dt>
133 Initialize a draggable with the <code>appendTo</code> option specified.
134</dt>
135<dd>
136<pre><code>$('.selector').draggable({ appendTo: 'body' });</code></pre>
137</dd>
138
139
140<dt>
141 Get or set the <code>appendTo</code> option, after init.
142</dt>
143<dd>
144<pre><code>//getter
145var appendTo = $('.selector').draggable('option', 'appendTo');
146//setter
147$('.selector').draggable('option', 'appendTo', 'body');</code></pre>
148</dd>
149
150 </dl>
151 </div>
152</li>
153
154
155<li class="option" id="option-axis">
156 <div class="option-header">
157 <h3 class="option-name"><a href="#option-axis">axis</a></h3>
158 <dl>
159 <dt class="option-type-label">Type:</dt>
160 <dd class="option-type">String</dd>
161
162 <dt class="option-default-label">Default:</dt>
163 <dd class="option-default">false</dd>
164
165 </dl>
166 </div>
167 <div class="option-description">
168 <p>Constrains dragging to either the horizontal (x) or vertical (y) axis. Possible values: 'x', 'y'.</p>
169 </div>
170 <div class="option-examples">
171 <h4>Code examples</h4>
172 <dl class="option-examples-list">
173
174<dt>
175 Initialize a draggable with the <code>axis</code> option specified.
176</dt>
177<dd>
178<pre><code>$('.selector').draggable({ axis: 'x' });</code></pre>
179</dd>
180
181
182<dt>
183 Get or set the <code>axis</code> option, after init.
184</dt>
185<dd>
186<pre><code>//getter
187var axis = $('.selector').draggable('option', 'axis');
188//setter
189$('.selector').draggable('option', 'axis', 'x');</code></pre>
190</dd>
191
192 </dl>
193 </div>
194</li>
195
196
197<li class="option" id="option-cancel">
198 <div class="option-header">
199 <h3 class="option-name"><a href="#option-cancel">cancel</a></h3>
200 <dl>
201 <dt class="option-type-label">Type:</dt>
202 <dd class="option-type">Selector</dd>
203
204 <dt class="option-default-label">Default:</dt>
205 <dd class="option-default">':input,option'</dd>
206
207 </dl>
208 </div>
209 <div class="option-description">
210 <p>Prevents dragging from starting on specified elements.</p>
211 </div>
212 <div class="option-examples">
213 <h4>Code examples</h4>
214 <dl class="option-examples-list">
215
216<dt>
217 Initialize a draggable with the <code>cancel</code> option specified.
218</dt>
219<dd>
220<pre><code>$('.selector').draggable({ cancel: 'button' });</code></pre>
221</dd>
222
223
224<dt>
225 Get or set the <code>cancel</code> option, after init.
226</dt>
227<dd>
228<pre><code>//getter
229var cancel = $('.selector').draggable('option', 'cancel');
230//setter
231$('.selector').draggable('option', 'cancel', 'button');</code></pre>
232</dd>
233
234 </dl>
235 </div>
236</li>
237
238
239<li class="option" id="option-connectToSortable">
240 <div class="option-header">
241 <h3 class="option-name"><a href="#option-connectToSortable">connectToSortable</a></h3>
242 <dl>
243 <dt class="option-type-label">Type:</dt>
244 <dd class="option-type">Selector</dd>
245
246 <dt class="option-default-label">Default:</dt>
247 <dd class="option-default">false</dd>
248
249 </dl>
250 </div>
251 <div class="option-description">
252 <p>Allows the draggable to be dropped onto the specified sortables. If this option is used (<code>helper</code> must be set to 'clone' in order to work flawlessly), a draggable can be dropped onto a sortable list and then becomes part of it.
253</p><p>Note: Specifying this option as an array of selectors has been removed.</p>
254 </div>
255 <div class="option-examples">
256 <h4>Code examples</h4>
257 <dl class="option-examples-list">
258
259<dt>
260 Initialize a draggable with the <code>connectToSortable</code> option specified.
261</dt>
262<dd>
263<pre><code>$('.selector').draggable({ connectToSortable: 'ul#myList' });</code></pre>
264</dd>
265
266
267<dt>
268 Get or set the <code>connectToSortable</code> option, after init.
269</dt>
270<dd>
271<pre><code>//getter
272var connectToSortable = $('.selector').draggable('option', 'connectToSortable');
273//setter
274$('.selector').draggable('option', 'connectToSortable', 'ul#myList');</code></pre>
275</dd>
276
277 </dl>
278 </div>
279</li>
280
281
282<li class="option" id="option-containment">
283 <div class="option-header">
284 <h3 class="option-name"><a href="#option-containment">containment</a></h3>
285 <dl>
286 <dt class="option-type-label">Type:</dt>
287 <dd class="option-type">Selector, Element, String, Array</dd>
288
289 <dt class="option-default-label">Default:</dt>
290 <dd class="option-default">false</dd>
291
292 </dl>
293 </div>
294 <div class="option-description">
295 <p>Constrains dragging to within the bounds of the specified element or region. Possible string values: 'parent', 'document', 'window', [x1, y1, x2, y2].</p>
296 </div>
297 <div class="option-examples">
298 <h4>Code examples</h4>
299 <dl class="option-examples-list">
300
301<dt>
302 Initialize a draggable with the <code>containment</code> option specified.
303</dt>
304<dd>
305<pre><code>$('.selector').draggable({ containment: 'parent' });</code></pre>
306</dd>
307
308
309<dt>
310 Get or set the <code>containment</code> option, after init.
311</dt>
312<dd>
313<pre><code>//getter
314var containment = $('.selector').draggable('option', 'containment');
315//setter
316$('.selector').draggable('option', 'containment', 'parent');</code></pre>
317</dd>
318
319 </dl>
320 </div>
321</li>
322
323
324<li class="option" id="option-cursor">
325 <div class="option-header">
326 <h3 class="option-name"><a href="#option-cursor">cursor</a></h3>
327 <dl>
328 <dt class="option-type-label">Type:</dt>
329 <dd class="option-type">String</dd>
330
331 <dt class="option-default-label">Default:</dt>
332 <dd class="option-default">'auto'</dd>
333
334 </dl>
335 </div>
336 <div class="option-description">
337 <p>The css cursor during the drag operation.</p>
338 </div>
339 <div class="option-examples">
340 <h4>Code examples</h4>
341 <dl class="option-examples-list">
342
343<dt>
344 Initialize a draggable with the <code>cursor</code> option specified.
345</dt>
346<dd>
347<pre><code>$('.selector').draggable({ cursor: 'crosshair' });</code></pre>
348</dd>
349
350
351<dt>
352 Get or set the <code>cursor</code> option, after init.
353</dt>
354<dd>
355<pre><code>//getter
356var cursor = $('.selector').draggable('option', 'cursor');
357//setter
358$('.selector').draggable('option', 'cursor', 'crosshair');</code></pre>
359</dd>
360
361 </dl>
362 </div>
363</li>
364
365
366<li class="option" id="option-cursorAt">
367 <div class="option-header">
368 <h3 class="option-name"><a href="#option-cursorAt">cursorAt</a></h3>
369 <dl>
370 <dt class="option-type-label">Type:</dt>
371 <dd class="option-type">Object</dd>
372
373 <dt class="option-default-label">Default:</dt>
374 <dd class="option-default">false</dd>
375
376 </dl>
377 </div>
378 <div class="option-description">
379 <p>Moves the dragging helper so the cursor always appears to drag from the same position. Coordinates can be given as a hash using a combination of one or two keys: <code>{ top, left, right, bottom }</code>.</p>
380 </div>
381 <div class="option-examples">
382 <h4>Code examples</h4>
383 <dl class="option-examples-list">
384
385<dt>
386 Initialize a draggable with the <code>cursorAt</code> option specified.
387</dt>
388<dd>
389<pre><code>$('.selector').draggable({ cursorAt: { left: 5 } });</code></pre>
390</dd>
391
392
393<dt>
394 Get or set the <code>cursorAt</code> option, after init.
395</dt>
396<dd>
397<pre><code>//getter
398var cursorAt = $('.selector').draggable('option', 'cursorAt');
399//setter
400$('.selector').draggable('option', 'cursorAt', { left: 5 });</code></pre>
401</dd>
402
403 </dl>
404 </div>
405</li>
406
407
408<li class="option" id="option-delay">
409 <div class="option-header">
410 <h3 class="option-name"><a href="#option-delay">delay</a></h3>
411 <dl>
412 <dt class="option-type-label">Type:</dt>
413 <dd class="option-type">Integer</dd>
414
415 <dt class="option-default-label">Default:</dt>
416 <dd class="option-default">0</dd>
417
418 </dl>
419 </div>
420 <div class="option-description">
421 <p>Time in milliseconds after mousedown until dragging should start. This option can be used to prevent unwanted drags when clicking on an element.</p>
422 </div>
423 <div class="option-examples">
424 <h4>Code examples</h4>
425 <dl class="option-examples-list">
426
427<dt>
428 Initialize a draggable with the <code>delay</code> option specified.
429</dt>
430<dd>
431<pre><code>$('.selector').draggable({ delay: 500 });</code></pre>
432</dd>
433
434
435<dt>
436 Get or set the <code>delay</code> option, after init.
437</dt>
438<dd>
439<pre><code>//getter
440var delay = $('.selector').draggable('option', 'delay');
441//setter
442$('.selector').draggable('option', 'delay', 500);</code></pre>
443</dd>
444
445 </dl>
446 </div>
447</li>
448
449
450<li class="option" id="option-distance">
451 <div class="option-header">
452 <h3 class="option-name"><a href="#option-distance">distance</a></h3>
453 <dl>
454 <dt class="option-type-label">Type:</dt>
455 <dd class="option-type">Integer</dd>
456
457 <dt class="option-default-label">Default:</dt>
458 <dd class="option-default">1</dd>
459
460 </dl>
461 </div>
462 <div class="option-description">
463 <p>Distance in pixels after mousedown the mouse must move before dragging should start. This option can be used to prevent unwanted drags when clicking on an element.</p>
464 </div>
465 <div class="option-examples">
466 <h4>Code examples</h4>
467 <dl class="option-examples-list">
468
469<dt>
470 Initialize a draggable with the <code>distance</code> option specified.
471</dt>
472<dd>
473<pre><code>$('.selector').draggable({ distance: 30 });</code></pre>
474</dd>
475
476
477<dt>
478 Get or set the <code>distance</code> option, after init.
479</dt>
480<dd>
481<pre><code>//getter
482var distance = $('.selector').draggable('option', 'distance');
483//setter
484$('.selector').draggable('option', 'distance', 30);</code></pre>
485</dd>
486
487 </dl>
488 </div>
489</li>
490
491
492<li class="option" id="option-grid">
493 <div class="option-header">
494 <h3 class="option-name"><a href="#option-grid">grid</a></h3>
495 <dl>
496 <dt class="option-type-label">Type:</dt>
497 <dd class="option-type">Array</dd>
498
499 <dt class="option-default-label">Default:</dt>
500 <dd class="option-default">false</dd>
501
502 </dl>
503 </div>
504 <div class="option-description">
505 <p>Snaps the dragging helper to a grid, every x and y pixels. Array values: [x, y]</p>
506 </div>
507 <div class="option-examples">
508 <h4>Code examples</h4>
509 <dl class="option-examples-list">
510
511<dt>
512 Initialize a draggable with the <code>grid</code> option specified.
513</dt>
514<dd>
515<pre><code>$('.selector').draggable({ grid: [50, 20] });</code></pre>
516</dd>
517
518
519<dt>
520 Get or set the <code>grid</code> option, after init.
521</dt>
522<dd>
523<pre><code>//getter
524var grid = $('.selector').draggable('option', 'grid');
525//setter
526$('.selector').draggable('option', 'grid', [50, 20]);</code></pre>
527</dd>
528
529 </dl>
530 </div>
531</li>
532
533
534<li class="option" id="option-handle">
535 <div class="option-header">
536 <h3 class="option-name"><a href="#option-handle">handle</a></h3>
537 <dl>
538 <dt class="option-type-label">Type:</dt>
539 <dd class="option-type">Element, Selector</dd>
540
541 <dt class="option-default-label">Default:</dt>
542 <dd class="option-default">false</dd>
543
544 </dl>
545 </div>
546 <div class="option-description">
547 <p>If specified, restricts drag start click to the specified element(s).</p>
548 </div>
549 <div class="option-examples">
550 <h4>Code examples</h4>
551 <dl class="option-examples-list">
552
553<dt>
554 Initialize a draggable with the <code>handle</code> option specified.
555</dt>
556<dd>
557<pre><code>$('.selector').draggable({ handle: 'h2' });</code></pre>
558</dd>
559
560
561<dt>
562 Get or set the <code>handle</code> option, after init.
563</dt>
564<dd>
565<pre><code>//getter
566var handle = $('.selector').draggable('option', 'handle');
567//setter
568$('.selector').draggable('option', 'handle', 'h2');</code></pre>
569</dd>
570
571 </dl>
572 </div>
573</li>
574
575
576<li class="option" id="option-helper">
577 <div class="option-header">
578 <h3 class="option-name"><a href="#option-helper">helper</a></h3>
579 <dl>
580 <dt class="option-type-label">Type:</dt>
581 <dd class="option-type">String, Function</dd>
582
583 <dt class="option-default-label">Default:</dt>
584 <dd class="option-default">'original'</dd>
585
586 </dl>
587 </div>
588 <div class="option-description">
589 <p>Allows for a helper element to be used for dragging display. Possible values: 'original', 'clone', Function. If a function is specified, it must return a DOMElement.</p>
590 </div>
591 <div class="option-examples">
592 <h4>Code examples</h4>
593 <dl class="option-examples-list">
594
595<dt>
596 Initialize a draggable with the <code>helper</code> option specified.
597</dt>
598<dd>
599<pre><code>$('.selector').draggable({ helper: 'clone' });</code></pre>
600</dd>
601
602
603<dt>
604 Get or set the <code>helper</code> option, after init.
605</dt>
606<dd>
607<pre><code>//getter
608var helper = $('.selector').draggable('option', 'helper');
609//setter
610$('.selector').draggable('option', 'helper', 'clone');</code></pre>
611</dd>
612
613 </dl>
614 </div>
615</li>
616
617
618<li class="option" id="option-iframeFix">
619 <div class="option-header">
620 <h3 class="option-name"><a href="#option-iframeFix">iframeFix</a></h3>
621 <dl>
622 <dt class="option-type-label">Type:</dt>
623 <dd class="option-type">Boolean, Selector</dd>
624
625 <dt class="option-default-label">Default:</dt>
626 <dd class="option-default">false</dd>
627
628 </dl>
629 </div>
630 <div class="option-description">
631 <p>Prevent iframes from capturing the mousemove events during a drag. Useful in combination with cursorAt, or in any case, if the mouse cursor is not over the helper. If set to true, transparent overlays will be placed over all iframes on the page. If a selector is supplied, the matched iframes will have an overlay placed over them.</p>
632 </div>
633 <div class="option-examples">
634 <h4>Code examples</h4>
635 <dl class="option-examples-list">
636
637<dt>
638 Initialize a draggable with the <code>iframeFix</code> option specified.
639</dt>
640<dd>
641<pre><code>$('.selector').draggable({ iframeFix: true });</code></pre>
642</dd>
643
644
645<dt>
646 Get or set the <code>iframeFix</code> option, after init.
647</dt>
648<dd>
649<pre><code>//getter
650var iframeFix = $('.selector').draggable('option', 'iframeFix');
651//setter
652$('.selector').draggable('option', 'iframeFix', true);</code></pre>
653</dd>
654
655 </dl>
656 </div>
657</li>
658
659
660<li class="option" id="option-opacity">
661 <div class="option-header">
662 <h3 class="option-name"><a href="#option-opacity">opacity</a></h3>
663 <dl>
664 <dt class="option-type-label">Type:</dt>
665 <dd class="option-type">Float</dd>
666
667 <dt class="option-default-label">Default:</dt>
668 <dd class="option-default">false</dd>
669
670 </dl>
671 </div>
672 <div class="option-description">
673 <p>Opacity for the helper while being dragged.</p>
674 </div>
675 <div class="option-examples">
676 <h4>Code examples</h4>
677 <dl class="option-examples-list">
678
679<dt>
680 Initialize a draggable with the <code>opacity</code> option specified.
681</dt>
682<dd>
683<pre><code>$('.selector').draggable({ opacity: 0.35 });</code></pre>
684</dd>
685
686
687<dt>
688 Get or set the <code>opacity</code> option, after init.
689</dt>
690<dd>
691<pre><code>//getter
692var opacity = $('.selector').draggable('option', 'opacity');
693//setter
694$('.selector').draggable('option', 'opacity', 0.35);</code></pre>
695</dd>
696
697 </dl>
698 </div>
699</li>
700
701
702<li class="option" id="option-refreshPositions">
703 <div class="option-header">
704 <h3 class="option-name"><a href="#option-refreshPositions">refreshPositions</a></h3>
705 <dl>
706 <dt class="option-type-label">Type:</dt>
707 <dd class="option-type">Boolean</dd>
708
709 <dt class="option-default-label">Default:</dt>
710 <dd class="option-default">false</dd>
711
712 </dl>
713 </div>
714 <div class="option-description">
715 <p>If set to true, all droppable positions are calculated on every mousemove. Caution: This solves issues on highly dynamic pages, but dramatically decreases performance.</p>
716 </div>
717 <div class="option-examples">
718 <h4>Code examples</h4>
719 <dl class="option-examples-list">
720
721<dt>
722 Initialize a draggable with the <code>refreshPositions</code> option specified.
723</dt>
724<dd>
725<pre><code>$('.selector').draggable({ refreshPositions: true });</code></pre>
726</dd>
727
728
729<dt>
730 Get or set the <code>refreshPositions</code> option, after init.
731</dt>
732<dd>
733<pre><code>//getter
734var refreshPositions = $('.selector').draggable('option', 'refreshPositions');
735//setter
736$('.selector').draggable('option', 'refreshPositions', true);</code></pre>
737</dd>
738
739 </dl>
740 </div>
741</li>
742
743
744<li class="option" id="option-revert">
745 <div class="option-header">
746 <h3 class="option-name"><a href="#option-revert">revert</a></h3>
747 <dl>
748 <dt class="option-type-label">Type:</dt>
749 <dd class="option-type">Boolean, String</dd>
750
751 <dt class="option-default-label">Default:</dt>
752 <dd class="option-default">false</dd>
753
754 </dl>
755 </div>
756 <div class="option-description">
757 <p>If set to true, the element will return to its start position when dragging stops. Possible string values: 'valid', 'invalid'. If set to invalid, revert will only occur if the draggable has not been dropped on a droppable. For valid, it's the other way around.</p>
758 </div>
759 <div class="option-examples">
760 <h4>Code examples</h4>
761 <dl class="option-examples-list">
762
763<dt>
764 Initialize a draggable with the <code>revert</code> option specified.
765</dt>
766<dd>
767<pre><code>$('.selector').draggable({ revert: true });</code></pre>
768</dd>
769
770
771<dt>
772 Get or set the <code>revert</code> option, after init.
773</dt>
774<dd>
775<pre><code>//getter
776var revert = $('.selector').draggable('option', 'revert');
777//setter
778$('.selector').draggable('option', 'revert', true);</code></pre>
779</dd>
780
781 </dl>
782 </div>
783</li>
784
785
786<li class="option" id="option-revertDuration">
787 <div class="option-header">
788 <h3 class="option-name"><a href="#option-revertDuration">revertDuration</a></h3>
789 <dl>
790 <dt class="option-type-label">Type:</dt>
791 <dd class="option-type">Integer</dd>
792
793 <dt class="option-default-label">Default:</dt>
794 <dd class="option-default">500</dd>
795
796 </dl>
797 </div>
798 <div class="option-description">
799 <p>The duration of the revert animation, in milliseconds. Ignored if revert is false.</p>
800 </div>
801 <div class="option-examples">
802 <h4>Code examples</h4>
803 <dl class="option-examples-list">
804
805<dt>
806 Initialize a draggable with the <code>revertDuration</code> option specified.
807</dt>
808<dd>
809<pre><code>$('.selector').draggable({ revertDuration: 1000 });</code></pre>
810</dd>
811
812
813<dt>
814 Get or set the <code>revertDuration</code> option, after init.
815</dt>
816<dd>
817<pre><code>//getter
818var revertDuration = $('.selector').draggable('option', 'revertDuration');
819//setter
820$('.selector').draggable('option', 'revertDuration', 1000);</code></pre>
821</dd>
822
823 </dl>
824 </div>
825</li>
826
827
828<li class="option" id="option-scope">
829 <div class="option-header">
830 <h3 class="option-name"><a href="#option-scope">scope</a></h3>
831 <dl>
832 <dt class="option-type-label">Type:</dt>
833 <dd class="option-type">String</dd>
834
835 <dt class="option-default-label">Default:</dt>
836 <dd class="option-default">'default'</dd>
837
838 </dl>
839 </div>
840 <div class="option-description">
841 <p>Used to group sets of draggable and droppable items, in addition to droppable's accept option. A draggable with the same scope value as a droppable will be accepted by the droppable.</p>
842 </div>
843 <div class="option-examples">
844 <h4>Code examples</h4>
845 <dl class="option-examples-list">
846
847<dt>
848 Initialize a draggable with the <code>scope</code> option specified.
849</dt>
850<dd>
851<pre><code>$('.selector').draggable({ scope: 'tasks' });</code></pre>
852</dd>
853
854
855<dt>
856 Get or set the <code>scope</code> option, after init.
857</dt>
858<dd>
859<pre><code>//getter
860var scope = $('.selector').draggable('option', 'scope');
861//setter
862$('.selector').draggable('option', 'scope', 'tasks');</code></pre>
863</dd>
864
865 </dl>
866 </div>
867</li>
868
869
870<li class="option" id="option-scroll">
871 <div class="option-header">
872 <h3 class="option-name"><a href="#option-scroll">scroll</a></h3>
873 <dl>
874 <dt class="option-type-label">Type:</dt>
875 <dd class="option-type">Boolean</dd>
876
877 <dt class="option-default-label">Default:</dt>
878 <dd class="option-default">true</dd>
879
880 </dl>
881 </div>
882 <div class="option-description">
883 <p>If set to true, container auto-scrolls while dragging.</p>
884 </div>
885 <div class="option-examples">
886 <h4>Code examples</h4>
887 <dl class="option-examples-list">
888
889<dt>
890 Initialize a draggable with the <code>scroll</code> option specified.
891</dt>
892<dd>
893<pre><code>$('.selector').draggable({ scroll: false });</code></pre>
894</dd>
895
896
897<dt>
898 Get or set the <code>scroll</code> option, after init.
899</dt>
900<dd>
901<pre><code>//getter
902var scroll = $('.selector').draggable('option', 'scroll');
903//setter
904$('.selector').draggable('option', 'scroll', false);</code></pre>
905</dd>
906
907 </dl>
908 </div>
909</li>
910
911
912<li class="option" id="option-scrollSensitivity">
913 <div class="option-header">
914 <h3 class="option-name"><a href="#option-scrollSensitivity">scrollSensitivity</a></h3>
915 <dl>
916 <dt class="option-type-label">Type:</dt>
917 <dd class="option-type">Integer</dd>
918
919 <dt class="option-default-label">Default:</dt>
920 <dd class="option-default">20</dd>
921
922 </dl>
923 </div>
924 <div class="option-description">
925 <p>Distance in pixels from the edge of the viewport after which the viewport should scroll. Distance is relative to pointer, not the draggable.</p>
926 </div>
927 <div class="option-examples">
928 <h4>Code examples</h4>
929 <dl class="option-examples-list">
930
931<dt>
932 Initialize a draggable with the <code>scrollSensitivity</code> option specified.
933</dt>
934<dd>
935<pre><code>$('.selector').draggable({ scrollSensitivity: 40 });</code></pre>
936</dd>
937
938
939<dt>
940 Get or set the <code>scrollSensitivity</code> option, after init.
941</dt>
942<dd>
943<pre><code>//getter
944var scrollSensitivity = $('.selector').draggable('option', 'scrollSensitivity');
945//setter
946$('.selector').draggable('option', 'scrollSensitivity', 40);</code></pre>
947</dd>
948
949 </dl>
950 </div>
951</li>
952
953
954<li class="option" id="option-scrollSpeed">
955 <div class="option-header">
956 <h3 class="option-name"><a href="#option-scrollSpeed">scrollSpeed</a></h3>
957 <dl>
958 <dt class="option-type-label">Type:</dt>
959 <dd class="option-type">Integer</dd>
960
961 <dt class="option-default-label">Default:</dt>
962 <dd class="option-default">20</dd>
963
964 </dl>
965 </div>
966 <div class="option-description">
967 <p>The speed at which the window should scroll once the mouse pointer gets within the <code>scrollSensitivity</code> distance.</p>
968 </div>
969 <div class="option-examples">
970 <h4>Code examples</h4>
971 <dl class="option-examples-list">
972
973<dt>
974 Initialize a draggable with the <code>scrollSpeed</code> option specified.
975</dt>
976<dd>
977<pre><code>$('.selector').draggable({ scrollSpeed: 40 });</code></pre>
978</dd>
979
980
981<dt>
982 Get or set the <code>scrollSpeed</code> option, after init.
983</dt>
984<dd>
985<pre><code>//getter
986var scrollSpeed = $('.selector').draggable('option', 'scrollSpeed');
987//setter
988$('.selector').draggable('option', 'scrollSpeed', 40);</code></pre>
989</dd>
990
991 </dl>
992 </div>
993</li>
994
995
996<li class="option" id="option-snap">
997 <div class="option-header">
998 <h3 class="option-name"><a href="#option-snap">snap</a></h3>
999 <dl>
1000 <dt class="option-type-label">Type:</dt>
1001 <dd class="option-type">Boolean, Selector</dd>
1002
1003 <dt class="option-default-label">Default:</dt>
1004 <dd class="option-default">false</dd>
1005
1006 </dl>
1007 </div>
1008 <div class="option-description">
1009 <p>If set to a selector or to true (equivalent to '.ui-draggable'), the draggable will snap to the edges of the selected elements when near an edge of the element.</p>
1010 </div>
1011 <div class="option-examples">
1012 <h4>Code examples</h4>
1013 <dl class="option-examples-list">
1014
1015<dt>
1016 Initialize a draggable with the <code>snap</code> option specified.
1017</dt>
1018<dd>
1019<pre><code>$('.selector').draggable({ snap: true });</code></pre>
1020</dd>
1021
1022
1023<dt>
1024 Get or set the <code>snap</code> option, after init.
1025</dt>
1026<dd>
1027<pre><code>//getter
1028var snap = $('.selector').draggable('option', 'snap');
1029//setter
1030$('.selector').draggable('option', 'snap', true);</code></pre>
1031</dd>
1032
1033 </dl>
1034 </div>
1035</li>
1036
1037
1038<li class="option" id="option-snapMode">
1039 <div class="option-header">
1040 <h3 class="option-name"><a href="#option-snapMode">snapMode</a></h3>
1041 <dl>
1042 <dt class="option-type-label">Type:</dt>
1043 <dd class="option-type">String</dd>
1044
1045 <dt class="option-default-label">Default:</dt>
1046 <dd class="option-default">'both'</dd>
1047
1048 </dl>
1049 </div>
1050 <div class="option-description">
1051 <p>Determines which edges of snap elements the draggable will snap to. Ignored if snap is false. Possible values: 'inner', 'outer', 'both'</p>
1052 </div>
1053 <div class="option-examples">
1054 <h4>Code examples</h4>
1055 <dl class="option-examples-list">
1056
1057<dt>
1058 Initialize a draggable with the <code>snapMode</code> option specified.
1059</dt>
1060<dd>
1061<pre><code>$('.selector').draggable({ snapMode: 'outer' });</code></pre>
1062</dd>
1063
1064
1065<dt>
1066 Get or set the <code>snapMode</code> option, after init.
1067</dt>
1068<dd>
1069<pre><code>//getter
1070var snapMode = $('.selector').draggable('option', 'snapMode');
1071//setter
1072$('.selector').draggable('option', 'snapMode', 'outer');</code></pre>
1073</dd>
1074
1075 </dl>
1076 </div>
1077</li>
1078
1079
1080<li class="option" id="option-snapTolerance">
1081 <div class="option-header">
1082 <h3 class="option-name"><a href="#option-snapTolerance">snapTolerance</a></h3>
1083 <dl>
1084 <dt class="option-type-label">Type:</dt>
1085 <dd class="option-type">Integer</dd>
1086
1087 <dt class="option-default-label">Default:</dt>
1088 <dd class="option-default">20</dd>
1089
1090 </dl>
1091 </div>
1092 <div class="option-description">
1093 <p>The distance in pixels from the snap element edges at which snapping should occur. Ignored if snap is false.</p>
1094 </div>
1095 <div class="option-examples">
1096 <h4>Code examples</h4>
1097 <dl class="option-examples-list">
1098
1099<dt>
1100 Initialize a draggable with the <code>snapTolerance</code> option specified.
1101</dt>
1102<dd>
1103<pre><code>$('.selector').draggable({ snapTolerance: 40 });</code></pre>
1104</dd>
1105
1106
1107<dt>
1108 Get or set the <code>snapTolerance</code> option, after init.
1109</dt>
1110<dd>
1111<pre><code>//getter
1112var snapTolerance = $('.selector').draggable('option', 'snapTolerance');
1113//setter
1114$('.selector').draggable('option', 'snapTolerance', 40);</code></pre>
1115</dd>
1116
1117 </dl>
1118 </div>
1119</li>
1120
1121
1122<li class="option" id="option-stack">
1123 <div class="option-header">
1124 <h3 class="option-name"><a href="#option-stack">stack</a></h3>
1125 <dl>
1126 <dt class="option-type-label">Type:</dt>
1127 <dd class="option-type">Object</dd>
1128
1129 <dt class="option-default-label">Default:</dt>
1130 <dd class="option-default">false</dd>
1131
1132 </dl>
1133 </div>
1134 <div class="option-description">
1135 <p>Controls the z-Index of the defined group (key 'group' in the hash, accepts jQuery selector) automatically, always brings to front the dragged item. Very useful in things like window managers. Optionally, a 'min' key can be set, so the zIndex cannot go below that value.</p>
1136 </div>
1137 <div class="option-examples">
1138 <h4>Code examples</h4>
1139 <dl class="option-examples-list">
1140
1141<dt>
1142 Initialize a draggable with the <code>stack</code> option specified.
1143</dt>
1144<dd>
1145<pre><code>$('.selector').draggable({ stack: { group: 'products', min: 50 } });</code></pre>
1146</dd>
1147
1148
1149<dt>
1150 Get or set the <code>stack</code> option, after init.
1151</dt>
1152<dd>
1153<pre><code>//getter
1154var stack = $('.selector').draggable('option', 'stack');
1155//setter
1156$('.selector').draggable('option', 'stack', { group: 'products', min: 50 });</code></pre>
1157</dd>
1158
1159 </dl>
1160 </div>
1161</li>
1162
1163
1164<li class="option" id="option-zIndex">
1165 <div class="option-header">
1166 <h3 class="option-name"><a href="#option-zIndex">zIndex</a></h3>
1167 <dl>
1168 <dt class="option-type-label">Type:</dt>
1169 <dd class="option-type">Integer</dd>
1170
1171 <dt class="option-default-label">Default:</dt>
1172 <dd class="option-default">false</dd>
1173
1174 </dl>
1175 </div>
1176 <div class="option-description">
1177 <p>z-index for the helper while being dragged.</p>
1178 </div>
1179 <div class="option-examples">
1180 <h4>Code examples</h4>
1181 <dl class="option-examples-list">
1182
1183<dt>
1184 Initialize a draggable with the <code>zIndex</code> option specified.
1185</dt>
1186<dd>
1187<pre><code>$('.selector').draggable({ zIndex: 2700 });</code></pre>
1188</dd>
1189
1190
1191<dt>
1192 Get or set the <code>zIndex</code> option, after init.
1193</dt>
1194<dd>
1195<pre><code>//getter
1196var zIndex = $('.selector').draggable('option', 'zIndex');
1197//setter
1198$('.selector').draggable('option', 'zIndex', 2700);</code></pre>
1199</dd>
1200
1201 </dl>
1202 </div>
1203</li>
1204
1205 </ul>
1206 </div>
1207 <div id="events">
1208 <h2 class="top-header">Events</h2>
1209 <ul class="events-list">
1210
1211<li class="event" id="event-start">
1212 <div class="event-header">
1213 <h3 class="event-name"><a href="#event-start">start</a></h3>
1214 <dl>
1215 <dt class="event-type-label">Type:</dt>
1216 <dd class="event-type">dragstart</dd>
1217 </dl>
1218 </div>
1219 <div class="event-description">
1220 <p>This event is triggered when dragging starts.</p>
1221 </div>
1222 <div class="event-examples">
1223 <h4>Code examples</h4>
1224 <dl class="event-examples-list">
1225
1226<dt>
1227 Supply a callback function to handle the <code>start</code> event as an init option.
1228</dt>
1229<dd>
1230<pre><code>$('.selector').draggable({
1231 start: function(event, ui) { ... }
1232});</code></pre>
1233</dd>
1234
1235
1236<dt>
1237 Bind to the <code>start</code> event by type: <code>dragstart</code>.
1238</dt>
1239<dd>
1240<pre><code>$('.selector').bind('dragstart', function(event, ui) {
1241 ...
1242});</code></pre>
1243</dd>
1244
1245 </dl>
1246 </div>
1247</li>
1248
1249
1250<li class="event" id="event-drag">
1251 <div class="event-header">
1252 <h3 class="event-name"><a href="#event-drag">drag</a></h3>
1253 <dl>
1254 <dt class="event-type-label">Type:</dt>
1255 <dd class="event-type">drag</dd>
1256 </dl>
1257 </div>
1258 <div class="event-description">
1259 <p>This event is triggered when the mouse is moved during the dragging.</p>
1260 </div>
1261 <div class="event-examples">
1262 <h4>Code examples</h4>
1263 <dl class="event-examples-list">
1264
1265<dt>
1266 Supply a callback function to handle the <code>drag</code> event as an init option.
1267</dt>
1268<dd>
1269<pre><code>$('.selector').draggable({
1270 drag: function(event, ui) { ... }
1271});</code></pre>
1272</dd>
1273
1274
1275<dt>
1276 Bind to the <code>drag</code> event by type: <code>drag</code>.
1277</dt>
1278<dd>
1279<pre><code>$('.selector').bind('drag', function(event, ui) {
1280 ...
1281});</code></pre>
1282</dd>
1283
1284 </dl>
1285 </div>
1286</li>
1287
1288
1289<li class="event" id="event-stop">
1290 <div class="event-header">
1291 <h3 class="event-name"><a href="#event-stop">stop</a></h3>
1292 <dl>
1293 <dt class="event-type-label">Type:</dt>
1294 <dd class="event-type">dragstop</dd>
1295 </dl>
1296 </div>
1297 <div class="event-description">
1298 <p>This event is triggered when dragging stops.</p>
1299 </div>
1300 <div class="event-examples">
1301 <h4>Code examples</h4>
1302 <dl class="event-examples-list">
1303
1304<dt>
1305 Supply a callback function to handle the <code>stop</code> event as an init option.
1306</dt>
1307<dd>
1308<pre><code>$('.selector').draggable({
1309 stop: function(event, ui) { ... }
1310});</code></pre>
1311</dd>
1312
1313
1314<dt>
1315 Bind to the <code>stop</code> event by type: <code>dragstop</code>.
1316</dt>
1317<dd>
1318<pre><code>$('.selector').bind('dragstop', function(event, ui) {
1319 ...
1320});</code></pre>
1321</dd>
1322
1323 </dl>
1324 </div>
1325</li>
1326
1327 </ul>
1328 </div>
1329 <div id="methods">
1330 <h2 class="top-header">Methods</h2>
1331 <ul class="methods-list">
1332
1333<li class="method" id="method-destroy">
1334 <div class="method-header">
1335 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
1336 <dl>
1337 <dt class="method-signature-label">Signature:</dt>
1338 <dd class="method-signature">.draggable( 'destroy'
1339
1340
1341
1342
1343
1344
1345
1346)</dd>
1347 </dl>
1348 </div>
1349 <div class="method-description">
1350 <p>Remove the draggable functionality completely. This will return the element back to its pre-init state.</p>
1351 </div>
1352</li>
1353
1354
1355<li class="method" id="method-disable">
1356 <div class="method-header">
1357 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
1358 <dl>
1359 <dt class="method-signature-label">Signature:</dt>
1360 <dd class="method-signature">.draggable( 'disable'
1361
1362
1363
1364
1365
1366
1367
1368)</dd>
1369 </dl>
1370 </div>
1371 <div class="method-description">
1372 <p>Disable the draggable.</p>
1373 </div>
1374</li>
1375
1376
1377<li class="method" id="method-enable">
1378 <div class="method-header">
1379 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
1380 <dl>
1381 <dt class="method-signature-label">Signature:</dt>
1382 <dd class="method-signature">.draggable( 'enable'
1383
1384
1385
1386
1387
1388
1389
1390)</dd>
1391 </dl>
1392 </div>
1393 <div class="method-description">
1394 <p>Enable the draggable.</p>
1395 </div>
1396</li>
1397
1398
1399<li class="method" id="method-option">
1400 <div class="method-header">
1401 <h3 class="method-name"><a href="#method-option">option</a></h3>
1402 <dl>
1403 <dt class="method-signature-label">Signature:</dt>
1404 <dd class="method-signature">.draggable( 'option'
1405
1406, optionName
1407
1408, <span class="optional">[</span>value<span class="optional">] </span>
1409
1410
1411
1412)</dd>
1413 </dl>
1414 </div>
1415 <div class="method-description">
1416 <p>Get or set any draggable option. If no value is specified, will act as a getter.</p>
1417 </div>
1418</li>
1419
1420
1421 </ul>
1422 </div>
1423 <div id="theming">
1424 <h2 class="top-header">Theming</h2>
1425 <p>The jQuery UI Draggable plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
1426</p>
1427 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.draggable.css stylesheet that can be modified. These classes are highlighed in bold below.
1428</p>
1429
1430 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
1431 &lt;div class=&quot;<strong>ui-draggable</strong>&quot;&gt;&lt;/div&gt;
1432 <p class="theme-note">
1433 <strong>
1434 Note: This is a sample of markup generated by the draggable plugin, not markup you should use to create a draggable. The only markup needed for that is &lt;div&gt;&lt;/div&gt;.
1435 </strong>
1436 </p>
1437
1438 </div>
1439</div>
1440
1441</p><!--
1442Pre-expand include size: 55070 bytes
1443Post-expand include size: 98892 bytes
1444Template argument size: 56660 bytes
1445Maximum: 2097152 bytes
1446-->
1447
1448<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3340-1!1!0!!en!2 and timestamp 20090604112209 -->
diff --git a/static/development-bundle/docs/droppable.html b/static/development-bundle/docs/droppable.html
new file mode 100644
index 0000000..7adf946
--- /dev/null
+++ b/static/development-bundle/docs/droppable.html
@@ -0,0 +1,704 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Droppable</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>The jQuery UI Droppable plugin makes selected elements droppable (meaning they accept being dropped on by draggables). You can specify which (individually) or which kind of draggables each will accept.</p>
15<p>All callbacks receive two arguments: The original browser event and a prepared ui object, view below for a documentation of this object (if you name your second argument 'ui'):</p>
16<ul>
17 <li> <b>ui.draggable</b> - current draggable element, a jQuery object.</li>
18 <li> <b>ui.helper</b> - current draggable helper, a jQuery object</li>
19 <li> <b>ui.position</b> - current position of the draggable helper { top: , left: }</li>
20 <li> <b>ui.offset</b> - current absolute position of the draggable helper { top: , left: }</li>
21</ul>
22 </div>
23 <div id="overview-dependencies">
24 <h3>Dependencies</h3>
25 <ul>
26<li>UI Core</li>
27<li><a href="http://docs.jquery.com/UI/Draggable" title="UI/Draggable">UI Draggable</a></li>
28</ul>
29 </div>
30 <div id="overview-example">
31 <h3>Example</h3>
32 <div id="overview-example" class="example">
33<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
34<p><div id="demo" class="tabs-container" rel="100">
35Makes the div droppable (a drop target for a draggable).<br />
36</p>
37<pre>$(&quot;#draggable&quot;).draggable();
38 $(&quot;#droppable&quot;).droppable({
39 drop: function() { alert('dropped'); }
40 });
41</pre>
42<p></div><div id="source" class="tabs-container">
43</p>
44<pre>&lt;!DOCTYPE html&gt;
45&lt;html&gt;
46&lt;head&gt;
47 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
48 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
49 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
50 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.draggable.js&quot;&gt;&lt;/script&gt;
51 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.droppable.js&quot;&gt;&lt;/script&gt;
52 &lt;style type=&quot;text/css&quot;&gt;
53 #draggable { width: 75px; height: 25px; background: silver; padding: 10px; }
54 #droppable { position: absolute; left: 250px; top: 0; width: 125px; height: 75px; background: gray; color: white; padding: 10px; }
55 &lt;/style&gt;
56 &lt;script type="text/javascript"&gt;
57 $(document).ready(function(){
58 $(&quot;#draggable&quot;).draggable();
59 $(&quot;#droppable&quot;).droppable({
60 drop: function() { alert('dropped'); }
61 });
62 });
63 &lt;/script&gt;
64&lt;/head&gt;
65&lt;body style="font-size:62.5%;"&gt;
66
67&lt;div id=&quot;droppable&quot;&gt;Drop here&lt;/div&gt;
68&lt;div id=&quot;draggable&quot;&gt;Drag me&lt;/div&gt;
69
70&lt;/body&gt;
71&lt;/html&gt;
72</pre>
73<p></div>
74</p><p></div>
75 </div>
76 </div>
77 <div id="options">
78 <h2 class="top-header">Options</h2>
79 <ul class="options-list">
80
81<li class="option" id="option-accept">
82 <div class="option-header">
83 <h3 class="option-name"><a href="#option-accept">accept</a></h3>
84 <dl>
85 <dt class="option-type-label">Type:</dt>
86 <dd class="option-type">Selector, Function</dd>
87
88 <dt class="option-default-label">Default:</dt>
89 <dd class="option-default">'*'</dd>
90
91 </dl>
92 </div>
93 <div class="option-description">
94 <p>All draggables that match the selector will be accepted. If a function is specified, the function will be called for each draggable on the page (passed as the first argument to the function), to provide a custom filter. The function should return true if the draggable should be accepted.</p>
95 </div>
96 <div class="option-examples">
97 <h4>Code examples</h4>
98 <dl class="option-examples-list">
99
100<dt>
101 Initialize a droppable with the <code>accept</code> option specified.
102</dt>
103<dd>
104<pre><code>$('.selector').droppable({ accept: '.special' });</code></pre>
105</dd>
106
107
108<dt>
109 Get or set the <code>accept</code> option, after init.
110</dt>
111<dd>
112<pre><code>//getter
113var accept = $('.selector').droppable('option', 'accept');
114//setter
115$('.selector').droppable('option', 'accept', '.special');</code></pre>
116</dd>
117
118 </dl>
119 </div>
120</li>
121
122
123<li class="option" id="option-activeClass">
124 <div class="option-header">
125 <h3 class="option-name"><a href="#option-activeClass">activeClass</a></h3>
126 <dl>
127 <dt class="option-type-label">Type:</dt>
128 <dd class="option-type">String</dd>
129
130 <dt class="option-default-label">Default:</dt>
131 <dd class="option-default">false</dd>
132
133 </dl>
134 </div>
135 <div class="option-description">
136 <p>If specified, the class will be added to the droppable while an acceptable draggable is being dragged.</p>
137 </div>
138 <div class="option-examples">
139 <h4>Code examples</h4>
140 <dl class="option-examples-list">
141
142<dt>
143 Initialize a droppable with the <code>activeClass</code> option specified.
144</dt>
145<dd>
146<pre><code>$('.selector').droppable({ activeClass: '.ui-state-highlight' });</code></pre>
147</dd>
148
149
150<dt>
151 Get or set the <code>activeClass</code> option, after init.
152</dt>
153<dd>
154<pre><code>//getter
155var activeClass = $('.selector').droppable('option', 'activeClass');
156//setter
157$('.selector').droppable('option', 'activeClass', '.ui-state-highlight');</code></pre>
158</dd>
159
160 </dl>
161 </div>
162</li>
163
164
165<li class="option" id="option-addClasses">
166 <div class="option-header">
167 <h3 class="option-name"><a href="#option-addClasses">addClasses</a></h3>
168 <dl>
169 <dt class="option-type-label">Type:</dt>
170 <dd class="option-type">Boolean</dd>
171
172 <dt class="option-default-label">Default:</dt>
173 <dd class="option-default">true</dd>
174
175 </dl>
176 </div>
177 <div class="option-description">
178 <p>If set to false, will prevent the ui-droppable class from being added. This may be desired as a performance optimization when calling .droppable() init on many hundreds of elements.</p>
179 </div>
180 <div class="option-examples">
181 <h4>Code examples</h4>
182 <dl class="option-examples-list">
183
184<dt>
185 Initialize a droppable with the <code>addClasses</code> option specified.
186</dt>
187<dd>
188<pre><code>$('.selector').droppable({ addClasses: false });</code></pre>
189</dd>
190
191
192<dt>
193 Get or set the <code>addClasses</code> option, after init.
194</dt>
195<dd>
196<pre><code>//getter
197var addClasses = $('.selector').droppable('option', 'addClasses');
198//setter
199$('.selector').droppable('option', 'addClasses', false);</code></pre>
200</dd>
201
202 </dl>
203 </div>
204</li>
205
206
207<li class="option" id="option-greedy">
208 <div class="option-header">
209 <h3 class="option-name"><a href="#option-greedy">greedy</a></h3>
210 <dl>
211 <dt class="option-type-label">Type:</dt>
212 <dd class="option-type">Boolean</dd>
213
214 <dt class="option-default-label">Default:</dt>
215 <dd class="option-default">false</dd>
216
217 </dl>
218 </div>
219 <div class="option-description">
220 <p>If true, will prevent event propagation on nested droppables.</p>
221 </div>
222 <div class="option-examples">
223 <h4>Code examples</h4>
224 <dl class="option-examples-list">
225
226<dt>
227 Initialize a droppable with the <code>greedy</code> option specified.
228</dt>
229<dd>
230<pre><code>$('.selector').droppable({ greedy: true });</code></pre>
231</dd>
232
233
234<dt>
235 Get or set the <code>greedy</code> option, after init.
236</dt>
237<dd>
238<pre><code>//getter
239var greedy = $('.selector').droppable('option', 'greedy');
240//setter
241$('.selector').droppable('option', 'greedy', true);</code></pre>
242</dd>
243
244 </dl>
245 </div>
246</li>
247
248
249<li class="option" id="option-hoverClass">
250 <div class="option-header">
251 <h3 class="option-name"><a href="#option-hoverClass">hoverClass</a></h3>
252 <dl>
253 <dt class="option-type-label">Type:</dt>
254 <dd class="option-type">String</dd>
255
256 <dt class="option-default-label">Default:</dt>
257 <dd class="option-default">false</dd>
258
259 </dl>
260 </div>
261 <div class="option-description">
262 <p>If specified, the class will be added to the droppable while an acceptable draggable is being hovered.</p>
263 </div>
264 <div class="option-examples">
265 <h4>Code examples</h4>
266 <dl class="option-examples-list">
267
268<dt>
269 Initialize a droppable with the <code>hoverClass</code> option specified.
270</dt>
271<dd>
272<pre><code>$('.selector').droppable({ hoverClass: 'drophover' });</code></pre>
273</dd>
274
275
276<dt>
277 Get or set the <code>hoverClass</code> option, after init.
278</dt>
279<dd>
280<pre><code>//getter
281var hoverClass = $('.selector').droppable('option', 'hoverClass');
282//setter
283$('.selector').droppable('option', 'hoverClass', 'drophover');</code></pre>
284</dd>
285
286 </dl>
287 </div>
288</li>
289
290
291<li class="option" id="option-scope">
292 <div class="option-header">
293 <h3 class="option-name"><a href="#option-scope">scope</a></h3>
294 <dl>
295 <dt class="option-type-label">Type:</dt>
296 <dd class="option-type">String</dd>
297
298 <dt class="option-default-label">Default:</dt>
299 <dd class="option-default">'default'</dd>
300
301 </dl>
302 </div>
303 <div class="option-description">
304 <p>Used to group sets of draggable and droppable items, in addition to droppable's accept option. A draggable with the same scope value as a droppable will be accepted.</p>
305 </div>
306 <div class="option-examples">
307 <h4>Code examples</h4>
308 <dl class="option-examples-list">
309
310<dt>
311 Initialize a droppable with the <code>scope</code> option specified.
312</dt>
313<dd>
314<pre><code>$('.selector').droppable({ scope: 'tasks' });</code></pre>
315</dd>
316
317
318<dt>
319 Get or set the <code>scope</code> option, after init.
320</dt>
321<dd>
322<pre><code>//getter
323var scope = $('.selector').droppable('option', 'scope');
324//setter
325$('.selector').droppable('option', 'scope', 'tasks');</code></pre>
326</dd>
327
328 </dl>
329 </div>
330</li>
331
332
333<li class="option" id="option-tolerance">
334 <div class="option-header">
335 <h3 class="option-name"><a href="#option-tolerance">tolerance</a></h3>
336 <dl>
337 <dt class="option-type-label">Type:</dt>
338 <dd class="option-type">String</dd>
339
340 <dt class="option-default-label">Default:</dt>
341 <dd class="option-default">'intersect'</dd>
342
343 </dl>
344 </div>
345 <div class="option-description">
346 <p>Specifies which mode to use for testing whether a draggable is 'over' a droppable. Possible values: 'fit', 'intersect', 'pointer', 'touch'.
347</p>
348<ul>
349<li><b>fit</b>: draggable overlaps the droppable entirely</li>
350<li><b>intersect</b>: draggable overlaps the droppable at least 50%</li>
351<li><b>pointer</b>: mouse pointer overlaps the droppable</li>
352<li><b>touch</b>: draggable overlaps the droppable any amount</li>
353</ul>
354<p></p>
355 </div>
356 <div class="option-examples">
357 <h4>Code examples</h4>
358 <dl class="option-examples-list">
359
360<dt>
361 Initialize a droppable with the <code>tolerance</code> option specified.
362</dt>
363<dd>
364<pre><code>$('.selector').droppable({ tolerance: 'fit' });</code></pre>
365</dd>
366
367
368<dt>
369 Get or set the <code>tolerance</code> option, after init.
370</dt>
371<dd>
372<pre><code>//getter
373var tolerance = $('.selector').droppable('option', 'tolerance');
374//setter
375$('.selector').droppable('option', 'tolerance', 'fit');</code></pre>
376</dd>
377
378 </dl>
379 </div>
380</li>
381
382 </ul>
383 </div>
384 <div id="events">
385 <h2 class="top-header">Events</h2>
386 <ul class="events-list">
387
388<li class="event" id="event-activate">
389 <div class="event-header">
390 <h3 class="event-name"><a href="#event-activate">activate</a></h3>
391 <dl>
392 <dt class="event-type-label">Type:</dt>
393 <dd class="event-type">dropactivate</dd>
394 </dl>
395 </div>
396 <div class="event-description">
397 <p>This event is triggered any time an accepted draggable starts dragging. This can be useful if you want to make the droppable 'light up' when it can be dropped on.</p>
398 </div>
399 <div class="event-examples">
400 <h4>Code examples</h4>
401 <dl class="event-examples-list">
402
403<dt>
404 Supply a callback function to handle the <code>activate</code> event as an init option.
405</dt>
406<dd>
407<pre><code>$('.selector').droppable({
408 activate: function(event, ui) { ... }
409});</code></pre>
410</dd>
411
412
413<dt>
414 Bind to the <code>activate</code> event by type: <code>dropactivate</code>.
415</dt>
416<dd>
417<pre><code>$('.selector').bind('dropactivate', function(event, ui) {
418 ...
419});</code></pre>
420</dd>
421
422 </dl>
423 </div>
424</li>
425
426
427<li class="event" id="event-deactivate">
428 <div class="event-header">
429 <h3 class="event-name"><a href="#event-deactivate">deactivate</a></h3>
430 <dl>
431 <dt class="event-type-label">Type:</dt>
432 <dd class="event-type">dropdeactivate</dd>
433 </dl>
434 </div>
435 <div class="event-description">
436 <p>This event is triggered any time an accepted draggable stops dragging.</p>
437 </div>
438 <div class="event-examples">
439 <h4>Code examples</h4>
440 <dl class="event-examples-list">
441
442<dt>
443 Supply a callback function to handle the <code>deactivate</code> event as an init option.
444</dt>
445<dd>
446<pre><code>$('.selector').droppable({
447 deactivate: function(event, ui) { ... }
448});</code></pre>
449</dd>
450
451
452<dt>
453 Bind to the <code>deactivate</code> event by type: <code>dropdeactivate</code>.
454</dt>
455<dd>
456<pre><code>$('.selector').bind('dropdeactivate', function(event, ui) {
457 ...
458});</code></pre>
459</dd>
460
461 </dl>
462 </div>
463</li>
464
465
466<li class="event" id="event-over">
467 <div class="event-header">
468 <h3 class="event-name"><a href="#event-over">over</a></h3>
469 <dl>
470 <dt class="event-type-label">Type:</dt>
471 <dd class="event-type">dropover</dd>
472 </dl>
473 </div>
474 <div class="event-description">
475 <p>This event is triggered as an accepted draggable is dragged 'over' (within the tolerance of) this droppable.</p>
476 </div>
477 <div class="event-examples">
478 <h4>Code examples</h4>
479 <dl class="event-examples-list">
480
481<dt>
482 Supply a callback function to handle the <code>over</code> event as an init option.
483</dt>
484<dd>
485<pre><code>$('.selector').droppable({
486 over: function(event, ui) { ... }
487});</code></pre>
488</dd>
489
490
491<dt>
492 Bind to the <code>over</code> event by type: <code>dropover</code>.
493</dt>
494<dd>
495<pre><code>$('.selector').bind('dropover', function(event, ui) {
496 ...
497});</code></pre>
498</dd>
499
500 </dl>
501 </div>
502</li>
503
504
505<li class="event" id="event-out">
506 <div class="event-header">
507 <h3 class="event-name"><a href="#event-out">out</a></h3>
508 <dl>
509 <dt class="event-type-label">Type:</dt>
510 <dd class="event-type">dropout</dd>
511 </dl>
512 </div>
513 <div class="event-description">
514 <p>This event is triggered when an accepted draggable is dragged out (within the tolerance of) this droppable.</p>
515 </div>
516 <div class="event-examples">
517 <h4>Code examples</h4>
518 <dl class="event-examples-list">
519
520<dt>
521 Supply a callback function to handle the <code>out</code> event as an init option.
522</dt>
523<dd>
524<pre><code>$('.selector').droppable({
525 out: function(event, ui) { ... }
526});</code></pre>
527</dd>
528
529
530<dt>
531 Bind to the <code>out</code> event by type: <code>dropout</code>.
532</dt>
533<dd>
534<pre><code>$('.selector').bind('dropout', function(event, ui) {
535 ...
536});</code></pre>
537</dd>
538
539 </dl>
540 </div>
541</li>
542
543
544<li class="event" id="event-drop">
545 <div class="event-header">
546 <h3 class="event-name"><a href="#event-drop">drop</a></h3>
547 <dl>
548 <dt class="event-type-label">Type:</dt>
549 <dd class="event-type">drop</dd>
550 </dl>
551 </div>
552 <div class="event-description">
553 <p>This event is triggered when an accepted draggable is dropped 'over' (within the tolerance of) this droppable. In the callback, $(this) represents the droppable the draggable is dropped on.
554ui.draggable represents the draggable.</p>
555 </div>
556 <div class="event-examples">
557 <h4>Code examples</h4>
558 <dl class="event-examples-list">
559
560<dt>
561 Supply a callback function to handle the <code>drop</code> event as an init option.
562</dt>
563<dd>
564<pre><code>$('.selector').droppable({
565 drop: function(event, ui) { ... }
566});</code></pre>
567</dd>
568
569
570<dt>
571 Bind to the <code>drop</code> event by type: <code>drop</code>.
572</dt>
573<dd>
574<pre><code>$('.selector').bind('drop', function(event, ui) {
575 ...
576});</code></pre>
577</dd>
578
579 </dl>
580 </div>
581</li>
582
583 </ul>
584 </div>
585 <div id="methods">
586 <h2 class="top-header">Methods</h2>
587 <ul class="methods-list">
588
589<li class="method" id="method-destroy">
590 <div class="method-header">
591 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
592 <dl>
593 <dt class="method-signature-label">Signature:</dt>
594 <dd class="method-signature">.droppable( 'destroy'
595
596
597
598
599
600
601
602)</dd>
603 </dl>
604 </div>
605 <div class="method-description">
606 <p>Remove the droppable functionality completely. This will return the element back to its pre-init state.</p>
607 </div>
608</li>
609
610
611<li class="method" id="method-disable">
612 <div class="method-header">
613 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
614 <dl>
615 <dt class="method-signature-label">Signature:</dt>
616 <dd class="method-signature">.droppable( 'disable'
617
618
619
620
621
622
623
624)</dd>
625 </dl>
626 </div>
627 <div class="method-description">
628 <p>Disable the droppable.</p>
629 </div>
630</li>
631
632
633<li class="method" id="method-enable">
634 <div class="method-header">
635 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
636 <dl>
637 <dt class="method-signature-label">Signature:</dt>
638 <dd class="method-signature">.droppable( 'enable'
639
640
641
642
643
644
645
646)</dd>
647 </dl>
648 </div>
649 <div class="method-description">
650 <p>Enable the droppable.</p>
651 </div>
652</li>
653
654
655<li class="method" id="method-option">
656 <div class="method-header">
657 <h3 class="method-name"><a href="#method-option">option</a></h3>
658 <dl>
659 <dt class="method-signature-label">Signature:</dt>
660 <dd class="method-signature">.droppable( 'option'
661
662, optionName
663
664, <span class="optional">[</span>value<span class="optional">] </span>
665
666
667
668)</dd>
669 </dl>
670 </div>
671 <div class="method-description">
672 <p>Get or set any droppable option. If no value is specified, will act as a getter.</p>
673 </div>
674</li>
675
676
677 </ul>
678 </div>
679 <div id="theming">
680 <h2 class="top-header">Theming</h2>
681 <p>The jQuery UI Droppable plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
682</p>
683 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.droppable.css stylesheet that can be modified. These classes are highlighed in bold below.
684</p>
685
686 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
687 &lt;div class=&quot;<strong>ui-droppable</strong>&quot;&gt;&lt;/div&gt;
688 <p class="theme-note">
689 <strong>
690 Note: This is a sample of markup generated by the droppable plugin, not markup you should use to create a droppable. The only markup needed for that is &lt;div&gt;&lt;/div&gt;.
691 </strong>
692 </p>
693
694 </div>
695</div>
696
697</p><!--
698Pre-expand include size: 27586 bytes
699Post-expand include size: 45489 bytes
700Template argument size: 25247 bytes
701Maximum: 2097152 bytes
702-->
703
704<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3341-1!1!0!!en!2 and timestamp 20090604112211 -->
diff --git a/static/development-bundle/docs/effect.html b/static/development-bundle/docs/effect.html
new file mode 100644
index 0000000..439e6cd
--- /dev/null
+++ b/static/development-bundle/docs/effect.html
@@ -0,0 +1,142 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI effect</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/effect?section=1" title="Edit section: effect( effect, [options], [speed], [callback] )">edit</a>]</div><a name="effect.28_effect.2C_.5Boptions.5D.2C_.5Bspeed.5D.2C_.5Bcallback.5D_.29"></a><h3>effect( effect, <span class="optional">[</span>options<span class="optional">]</span>, <span class="optional">[</span>speed<span class="optional">]</span>, <span class="optional">[</span>callback<span class="optional">]</span> )</h3>
12<p>Uses a specific effect on an element (without the show/hide logic).</p>
13 </div>
14 <div id="overview-dependencies">
15 <h3>Dependencies</h3>
16 <ul>
17<li>Effects Core</li>
18</ul>
19 </div>
20 <div id="overview-example">
21 <h3>Example</h3>
22 <div id="overview-example" class="example">
23<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
24<p><div id="demo" class="tabs-container" rel="170">
25Apply the effect explode if you click on the element.<br />
26</p>
27<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
28 $(&quot;div&quot;).<strong class="selflink">effect</strong>(&quot;explode&quot;);
29 });
30</pre>
31<p></div><div id="source" class="tabs-container">
32</p>
33<pre>&lt;!DOCTYPE html&gt;
34&lt;html&gt;
35&lt;head&gt;
36 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
37 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
38 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
39&lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.explode.js&quot;&gt;&lt;/script&gt;
40&lt;style type=&quot;text/css&quot;&gt;
41 div { margin: 0 auto; width: 100px; height: 80px; background: blue; position: relative; }
42&lt;/style&gt;
43 &lt;script type="text/javascript"&gt;
44 $(document).ready(function(){
45 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
46 $(&quot;div&quot;).<strong class="selflink">effect</strong>(&quot;explode&quot;);
47 });
48 });
49 &lt;/script&gt;
50&lt;/head&gt;
51&lt;body style="font-size:62.5%;"&gt;
52
53&lt;p&gt;Click me&lt;/p&gt;&lt;div&gt;&lt;/div&gt;
54
55&lt;/body&gt;
56&lt;/html&gt;
57</pre>
58<p></div>
59</p><p></div>
60 </div>
61 </div>
62 <div id="options">
63 <h2 class="top-header">Arguments</h2>
64 <ul class="options-list">
65
66<li class="option" id="option-effect">
67 <div class="option-header">
68 <h3 class="option-name"><a href="#option-effect">effect</a></h3>
69 <dl>
70 <dt class="option-type-label">Type:</dt>
71 <dd class="option-type">String</dd>
72
73 </dl>
74 </div>
75 <div class="option-description">
76 <p>The effect to be used. Possible values: 'blind', 'bounce', 'clip', 'drop', 'explode', 'fold', 'highlight', 'puff', 'pulsate', 'scale', 'shake', 'size', 'slide', 'transfer'.</p>
77 </div>
78</li>
79
80
81<li class="option" id="option-options">
82 <div class="option-header">
83 <h3 class="option-name"><a href="#option-options">options</a></h3>
84 <dl>
85 <dt class="option-type-label">Type:</dt>
86 <dd class="option-type">Hash</dd>
87
88 <dt class="option-optional-label">Optional</dt>
89
90 </dl>
91 </div>
92 <div class="option-description">
93 <p>A object/hash including specific options for the effect.</p>
94 </div>
95</li>
96
97
98<li class="option" id="option-speed">
99 <div class="option-header">
100 <h3 class="option-name"><a href="#option-speed">speed</a></h3>
101 <dl>
102 <dt class="option-type-label">Type:</dt>
103 <dd class="option-type">String, Number</dd>
104
105 <dt class="option-optional-label">Optional</dt>
106
107 </dl>
108 </div>
109 <div class="option-description">
110 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
111 </div>
112</li>
113
114
115<li class="option" id="option-callback">
116 <div class="option-header">
117 <h3 class="option-name"><a href="#option-callback">callback</a></h3>
118 <dl>
119 <dt class="option-type-label">Type:</dt>
120 <dd class="option-type">Function</dd>
121
122 <dt class="option-optional-label">Optional</dt>
123
124 </dl>
125 </div>
126 <div class="option-description">
127 <p>A function that is called after the effect is completed.</p>
128 </div>
129</li>
130
131 </ul>
132 </div>
133</div>
134
135</p><!--
136Pre-expand include size: 6199 bytes
137Post-expand include size: 8618 bytes
138Template argument size: 5418 bytes
139Maximum: 2097152 bytes
140-->
141
142<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2612-1!1!0!!en!2 and timestamp 20090603114134 -->
diff --git a/static/development-bundle/docs/hide.html b/static/development-bundle/docs/hide.html
new file mode 100644
index 0000000..8ea9d59
--- /dev/null
+++ b/static/development-bundle/docs/hide.html
@@ -0,0 +1,143 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI hide</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/hide?section=1" title="Edit section: hide( effect, [options], [speed], [callback] )">edit</a>]</div><a name="hide.28_effect.2C_.5Boptions.5D.2C_.5Bspeed.5D.2C_.5Bcallback.5D_.29"></a><h3>hide( effect, <span class="optional">[</span>options<span class="optional">]</span>, <span class="optional">[</span>speed<span class="optional">]</span>, <span class="optional">[</span>callback<span class="optional">]</span> )</h3>
12<p>The enhanced hide method optionally accepts jQuery UI advanced effects.</p>
13<p>Uses a specific effect on an element to hide the element if the first argument is an effect string.</p>
14 </div>
15 <div id="overview-dependencies">
16 <h3>Dependencies</h3>
17 <ul>
18<li>Effects Core</li>
19</ul>
20 </div>
21 <div id="overview-example">
22 <h3>Example</h3>
23 <div id="overview-example" class="example">
24<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
25<p><div id="demo" class="tabs-container" rel="170">
26Apply the effect slide if you click on the p to hide a div.<br />
27</p>
28<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
29 $(&quot;div&quot;).<strong class="selflink">hide</strong>(&quot;slide&quot;, {}, 1000);
30 });
31</pre>
32<p></div><div id="source" class="tabs-container">
33</p>
34<pre>&lt;!DOCTYPE html&gt;
35&lt;html&gt;
36&lt;head&gt;
37 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
38 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
39 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
40&lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.slide.js&quot;&gt;&lt;/script&gt;
41&lt;style type=&quot;text/css&quot;&gt;
42 div { margin: 0px; width: 100px; height: 80px; background: blue; position: relative; }
43&lt;/style&gt;
44 &lt;script type="text/javascript"&gt;
45 $(document).ready(function(){
46 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
47 $(&quot;div&quot;).<strong class="selflink">hide</strong>(&quot;slide&quot;, {}, 1000);
48 });
49 });
50 &lt;/script&gt;
51&lt;/head&gt;
52&lt;body style="font-size:62.5%;"&gt;
53
54&lt;p&gt;Click me&lt;/p&gt;&lt;div&gt;&lt;/div&gt;
55
56&lt;/body&gt;
57&lt;/html&gt;
58</pre>
59<p></div>
60</p><p></div>
61 </div>
62 </div>
63 <div id="options">
64 <h2 class="top-header">Arguments</h2>
65 <ul class="options-list">
66
67<li class="option" id="option-effect">
68 <div class="option-header">
69 <h3 class="option-name"><a href="#option-effect">effect</a></h3>
70 <dl>
71 <dt class="option-type-label">Type:</dt>
72 <dd class="option-type">String</dd>
73
74 </dl>
75 </div>
76 <div class="option-description">
77 <p>The effect to be used. Possible values: 'blind', 'clip', 'drop', 'explode', 'fold', 'puff', 'slide', 'scale', 'size', 'pulsate'.</p>
78 </div>
79</li>
80
81
82<li class="option" id="option-options">
83 <div class="option-header">
84 <h3 class="option-name"><a href="#option-options">options</a></h3>
85 <dl>
86 <dt class="option-type-label">Type:</dt>
87 <dd class="option-type">Hash</dd>
88
89 <dt class="option-optional-label">Optional</dt>
90
91 </dl>
92 </div>
93 <div class="option-description">
94 <p>A object/hash including specific options for the effect.</p>
95 </div>
96</li>
97
98
99<li class="option" id="option-speed">
100 <div class="option-header">
101 <h3 class="option-name"><a href="#option-speed">speed</a></h3>
102 <dl>
103 <dt class="option-type-label">Type:</dt>
104 <dd class="option-type">String, Number</dd>
105
106 <dt class="option-optional-label">Optional</dt>
107
108 </dl>
109 </div>
110 <div class="option-description">
111 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
112 </div>
113</li>
114
115
116<li class="option" id="option-callback">
117 <div class="option-header">
118 <h3 class="option-name"><a href="#option-callback">callback</a></h3>
119 <dl>
120 <dt class="option-type-label">Type:</dt>
121 <dd class="option-type">Function</dd>
122
123 <dt class="option-optional-label">Optional</dt>
124
125 </dl>
126 </div>
127 <div class="option-description">
128 <p>A function that is called after the effect is completed.</p>
129 </div>
130</li>
131
132 </ul>
133 </div>
134</div>
135
136</p><!--
137Pre-expand include size: 6211 bytes
138Post-expand include size: 8731 bytes
139Template argument size: 5477 bytes
140Maximum: 2097152 bytes
141-->
142
143<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2614-1!1!0!!en!2 and timestamp 20090603114700 -->
diff --git a/static/development-bundle/docs/progressbar.html b/static/development-bundle/docs/progressbar.html
new file mode 100644
index 0000000..0e42d5a
--- /dev/null
+++ b/static/development-bundle/docs/progressbar.html
@@ -0,0 +1,295 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Progressbar</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>
15The progress bar is designed to simply display the current % complete for a process. The bar is coded to be flexibly sized through CSS and will scale to fit inside it's parent container by default.
16</p>
17<p>
18This is a determinate progress bar, meaning that it should only be used in situations where the system can accurately update the current status complete. A determinate progress bar should never fill from left to right, then loop back to empty for a single process -- if the actual percent complete status cannot be calculated, an indeterminate progress bar (coming soon) or spinner animation is a better way to provide user feedback.
19</p>
20 </div>
21 <div id="overview-dependencies">
22 <h3>Dependencies</h3>
23 <ul>
24<li>UI Core</li>
25</ul>
26 </div>
27 <div id="overview-example">
28 <h3>Example</h3>
29 <div id="overview-example" class="example">
30<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
31<p><div id="demo" class="tabs-container" rel="100">
32A simple jQuery UI Progressbar.<br />
33</p>
34<pre>$(&quot;#progressbar&quot;).progressbar({ value: 37 });
35</pre>
36<p></div><div id="source" class="tabs-container">
37</p>
38<pre>&lt;!DOCTYPE html&gt;
39&lt;html&gt;
40&lt;head&gt;
41 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
42 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
43 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
44 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.progressbar.js&quot;&gt;&lt;/script&gt;
45 &lt;script type="text/javascript"&gt;
46 $(document).ready(function(){
47 $(&quot;#progressbar&quot;).progressbar({ value: 37 });
48 });
49 &lt;/script&gt;
50&lt;/head&gt;
51&lt;body style="font-size:62.5%;"&gt;
52
53&lt;div id=&quot;progressbar&quot;&gt;&lt;/div&gt;
54
55&lt;/body&gt;
56&lt;/html&gt;
57</pre>
58<p></div>
59</p><p></div>
60 </div>
61 </div>
62 <div id="options">
63 <h2 class="top-header">Options</h2>
64 <ul class="options-list">
65
66<li class="option" id="option-value">
67 <div class="option-header">
68 <h3 class="option-name"><a href="#option-value">value</a></h3>
69 <dl>
70 <dt class="option-type-label">Type:</dt>
71 <dd class="option-type">Number</dd>
72
73 <dt class="option-default-label">Default:</dt>
74 <dd class="option-default">0</dd>
75
76 </dl>
77 </div>
78 <div class="option-description">
79 <p>The value of the progressbar.</p>
80 </div>
81 <div class="option-examples">
82 <h4>Code examples</h4>
83 <dl class="option-examples-list">
84
85<dt>
86 Initialize a progressbar with the <code>value</code> option specified.
87</dt>
88<dd>
89<pre><code>$('.selector').progressbar({ value: 37 });</code></pre>
90</dd>
91
92
93<dt>
94 Get or set the <code>value</code> option, after init.
95</dt>
96<dd>
97<pre><code>//getter
98var value = $('.selector').progressbar('option', 'value');
99//setter
100$('.selector').progressbar('option', 'value', 37);</code></pre>
101</dd>
102
103 </dl>
104 </div>
105</li>
106
107 </ul>
108 </div>
109 <div id="events">
110 <h2 class="top-header">Events</h2>
111 <ul class="events-list">
112
113<li class="event" id="event-change">
114 <div class="event-header">
115 <h3 class="event-name"><a href="#event-change">change</a></h3>
116 <dl>
117 <dt class="event-type-label">Type:</dt>
118 <dd class="event-type">progressbarchange</dd>
119 </dl>
120 </div>
121 <div class="event-description">
122 <p>This event is triggered when the value of the progressbar changes.</p>
123 </div>
124 <div class="event-examples">
125 <h4>Code examples</h4>
126 <dl class="event-examples-list">
127
128<dt>
129 Supply a callback function to handle the <code>change</code> event as an init option.
130</dt>
131<dd>
132<pre><code>$('.selector').progressbar({
133 change: function(event, ui) { ... }
134});</code></pre>
135</dd>
136
137
138<dt>
139 Bind to the <code>change</code> event by type: <code>progressbarchange</code>.
140</dt>
141<dd>
142<pre><code>$('.selector').bind('progressbarchange', function(event, ui) {
143 ...
144});</code></pre>
145</dd>
146
147 </dl>
148 </div>
149</li>
150
151 </ul>
152 </div>
153 <div id="methods">
154 <h2 class="top-header">Methods</h2>
155 <ul class="methods-list">
156
157<li class="method" id="method-destroy">
158 <div class="method-header">
159 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
160 <dl>
161 <dt class="method-signature-label">Signature:</dt>
162 <dd class="method-signature">.progressbar( 'destroy'
163
164
165
166
167
168
169
170)</dd>
171 </dl>
172 </div>
173 <div class="method-description">
174 <p>Remove the progressbar functionality completely. This will return the element back to its pre-init state.</p>
175 </div>
176</li>
177
178
179<li class="method" id="method-disable">
180 <div class="method-header">
181 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
182 <dl>
183 <dt class="method-signature-label">Signature:</dt>
184 <dd class="method-signature">.progressbar( 'disable'
185
186
187
188
189
190
191
192)</dd>
193 </dl>
194 </div>
195 <div class="method-description">
196 <p>Disable the progressbar.</p>
197 </div>
198</li>
199
200
201<li class="method" id="method-enable">
202 <div class="method-header">
203 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
204 <dl>
205 <dt class="method-signature-label">Signature:</dt>
206 <dd class="method-signature">.progressbar( 'enable'
207
208
209
210
211
212
213
214)</dd>
215 </dl>
216 </div>
217 <div class="method-description">
218 <p>Enable the progressbar.</p>
219 </div>
220</li>
221
222
223<li class="method" id="method-option">
224 <div class="method-header">
225 <h3 class="method-name"><a href="#method-option">option</a></h3>
226 <dl>
227 <dt class="method-signature-label">Signature:</dt>
228 <dd class="method-signature">.progressbar( 'option'
229
230, optionName
231
232, <span class="optional">[</span>value<span class="optional">] </span>
233
234
235
236)</dd>
237 </dl>
238 </div>
239 <div class="method-description">
240 <p>Get or set any progressbar option. If no value is specified, will act as a getter.</p>
241 </div>
242</li>
243
244
245<li class="method" id="method-value">
246 <div class="method-header">
247 <h3 class="method-name"><a href="#method-value">value</a></h3>
248 <dl>
249 <dt class="method-signature-label">Signature:</dt>
250 <dd class="method-signature">.progressbar( 'value'
251
252, <span class="optional">[</span>value<span class="optional">] </span>
253
254
255
256
257
258)</dd>
259 </dl>
260 </div>
261 <div class="method-description">
262 <p>This method gets or sets the current value of the progressbar.</p>
263 </div>
264</li>
265
266 </ul>
267 </div>
268 <div id="theming">
269 <h2 class="top-header">Theming</h2>
270 <p>The jQuery UI Progressbar plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
271</p>
272 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.progressbar.css stylesheet that can be modified. These classes are highlighed in bold below.
273</p>
274
275 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
276 &lt;div class=&quot;<strong>ui-progressbar </strong>ui-widget ui-widget-content ui-corner-all&quot;&gt;<br />
277 &nbsp;&nbsp;&nbsp;&lt;div style=&quot;width: 37%;&quot; class=&quot;<strong>ui-progressbar-value</strong> ui-widget-header ui-corner-left&quot;&gt;&lt;/div&gt;<br />
278 &lt;/div&gt;
279 <p class="theme-note">
280 <strong>
281 Note: This is a sample of markup generated by the progressbar plugin, not markup you should use to create a progressbar. The only markup needed for that is &lt;div&gt;&lt;/div&gt;.
282 </strong>
283 </p>
284
285 </div>
286</div>
287
288</p><!--
289Pre-expand include size: 14353 bytes
290Post-expand include size: 16672 bytes
291Template argument size: 7699 bytes
292Maximum: 2097152 bytes
293-->
294
295<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3348-1!1!0!!en!2 and timestamp 20090604112221 -->
diff --git a/static/development-bundle/docs/removeClass.html b/static/development-bundle/docs/removeClass.html
new file mode 100644
index 0000000..b2b19e8
--- /dev/null
+++ b/static/development-bundle/docs/removeClass.html
@@ -0,0 +1,112 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI removeClass</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/removeClass?section=1" title="Edit section: removeClass( [class], [duration] )">edit</a>]</div><a name="removeClass.28_.5Bclass.5D.2C_.5Bduration.5D_.29"></a><h3>removeClass( <span class="optional">[</span>class<span class="optional">]</span>, <span class="optional">[</span>duration<span class="optional">]</span> )</h3>
12<p>Removes all or specified class from each of the set of matched elements with an optional transition between the states.</p>
13 </div>
14 <div id="overview-dependencies">
15 <h3>Dependencies</h3>
16 <ul>
17<li>Effects Core</li>
18</ul>
19 </div>
20 <div id="overview-example">
21 <h3>Example</h3>
22 <div id="overview-example" class="example">
23<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
24<p><div id="demo" class="tabs-container" rel="100">
25Removes the class 'selected' from the matched elements with a one second transition.<br />
26</p>
27<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
28 $(this).<strong class="selflink">removeClass</strong>(&quot;selected&quot;, 1000);
29 });
30</pre>
31<p></div><div id="source" class="tabs-container">
32</p>
33<pre>&lt;!DOCTYPE html&gt;
34&lt;html&gt;
35&lt;head&gt;
36 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
37 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
38 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
39&lt;style type=&quot;text/css&quot;&gt;
40 p { cursor: pointer; font-size: 1.2em; }
41 .selected { color:red; }
42&lt;/style&gt;
43 &lt;script type="text/javascript"&gt;
44 $(document).ready(function(){
45 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
46 $(this).<strong class="selflink">removeClass</strong>(&quot;selected&quot;, 1000);
47 });
48 });
49 &lt;/script&gt;
50&lt;/head&gt;
51&lt;body style="font-size:62.5%;"&gt;
52
53&lt;p class=&quot;selected&quot;&gt;Click me to remove 'selected' class.&lt;/p&gt;
54&lt;p class=&quot;selected&quot;&gt;Click me to remove 'selected' class.&lt;/p&gt;
55&lt;p class=&quot;selected&quot;&gt;Click me to remove 'selected' class.&lt;/p&gt;
56
57&lt;/body&gt;
58&lt;/html&gt;
59</pre>
60<p></div>
61</p><p></div>
62 </div>
63 </div>
64 <div id="options">
65 <h2 class="top-header">Arguments</h2>
66 <ul class="options-list">
67
68<li class="option" id="option-class">
69 <div class="option-header">
70 <h3 class="option-name"><a href="#option-class">class</a></h3>
71 <dl>
72 <dt class="option-type-label">Type:</dt>
73 <dd class="option-type">String</dd>
74
75 <dt class="option-optional-label">Optional</dt>
76
77 </dl>
78 </div>
79 <div class="option-description">
80 <p>CSS classes to remove from the elements.</p>
81 </div>
82</li>
83
84
85<li class="option" id="option-duration">
86 <div class="option-header">
87 <h3 class="option-name"><a href="#option-duration">duration</a></h3>
88 <dl>
89 <dt class="option-type-label">Type:</dt>
90 <dd class="option-type">String, Number</dd>
91
92 <dt class="option-optional-label">Optional</dt>
93
94 </dl>
95 </div>
96 <div class="option-description">
97 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
98 </div>
99</li>
100
101 </ul>
102 </div>
103</div>
104
105</p><!--
106Pre-expand include size: 5154 bytes
107Post-expand include size: 7134 bytes
108Template argument size: 4488 bytes
109Maximum: 2097152 bytes
110-->
111
112<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2607-1!1!0!!en!2 and timestamp 20090604035742 -->
diff --git a/static/development-bundle/docs/resizable.html b/static/development-bundle/docs/resizable.html
new file mode 100644
index 0000000..3e75ffe
--- /dev/null
+++ b/static/development-bundle/docs/resizable.html
@@ -0,0 +1,1075 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Resizable</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>The jQuery UI Resizable plugin makes selected elements resizable (meaning they have draggable resize handles). You can specify one or more handles as well as min and max width and height.</p>
15<p>All callbacks (start,stop,resize) receive two arguments: The original browser event and a prepared ui object. The ui object has the following fields:</p>
16<ul>
17<li><b>ui.helper</b> - a jQuery object containing the helper element</li>
18<li><b>ui.originalPosition</b> - {top, left} before resizing started</li>
19<li><b>ui.originalSize</b> - {width, height} before resizing started</li>
20<li><b>ui.position</b> - {top, left} current position</li>
21<li><b>ui.size</b> - {width, height} current size</li>
22</ul>
23 </div>
24 <div id="overview-dependencies">
25 <h3>Dependencies</h3>
26 <ul>
27<li>UI Core</li>
28</ul>
29 </div>
30 <div id="overview-example">
31 <h3>Example</h3>
32 <div id="overview-example" class="example">
33<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
34<p><div id="demo" class="tabs-container" rel="250">
35A simple jQuery UI Resizable.<br />
36</p>
37<pre>$(&quot;#resizable&quot;).resizable();
38</pre>
39<p></div><div id="source" class="tabs-container">
40</p>
41<pre>&lt;!DOCTYPE html&gt;
42&lt;html&gt;
43&lt;head&gt;
44 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
45 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
46 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
47 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.resizable.js&quot;&gt;&lt;/script&gt;
48 &lt;style type=&quot;text/css&quot;&gt;
49 #resizable { width: 100px; height: 100px; background: silver; }
50 &lt;/style&gt;
51 &lt;script type="text/javascript"&gt;
52 $(document).ready(function(){
53 $(&quot;#resizable&quot;).resizable();
54 });
55 &lt;/script&gt;
56&lt;/head&gt;
57&lt;body style="font-size:62.5%;"&gt;
58
59&lt;div id=&quot;resizable&quot;&gt;&lt;/div&gt;
60
61&lt;/body&gt;
62&lt;/html&gt;
63</pre>
64<p></div>
65</p><p></div>
66 </div>
67 </div>
68 <div id="options">
69 <h2 class="top-header">Options</h2>
70 <ul class="options-list">
71
72<li class="option" id="option-alsoResize">
73 <div class="option-header">
74 <h3 class="option-name"><a href="#option-alsoResize">alsoResize</a></h3>
75 <dl>
76 <dt class="option-type-label">Type:</dt>
77 <dd class="option-type">Selector, jQuery, Element</dd>
78
79 <dt class="option-default-label">Default:</dt>
80 <dd class="option-default">false</dd>
81
82 </dl>
83 </div>
84 <div class="option-description">
85 <p>Resize these elements synchronous when resizing.</p>
86 </div>
87 <div class="option-examples">
88 <h4>Code examples</h4>
89 <dl class="option-examples-list">
90
91<dt>
92 Initialize a resizable with the <code>alsoResize</code> option specified.
93</dt>
94<dd>
95<pre><code>$('.selector').resizable({ alsoResize: '.other' });</code></pre>
96</dd>
97
98
99<dt>
100 Get or set the <code>alsoResize</code> option, after init.
101</dt>
102<dd>
103<pre><code>//getter
104var alsoResize = $('.selector').resizable('option', 'alsoResize');
105//setter
106$('.selector').resizable('option', 'alsoResize', '.other');</code></pre>
107</dd>
108
109 </dl>
110 </div>
111</li>
112
113
114<li class="option" id="option-animate">
115 <div class="option-header">
116 <h3 class="option-name"><a href="#option-animate">animate</a></h3>
117 <dl>
118 <dt class="option-type-label">Type:</dt>
119 <dd class="option-type">Boolean</dd>
120
121 <dt class="option-default-label">Default:</dt>
122 <dd class="option-default">false</dd>
123
124 </dl>
125 </div>
126 <div class="option-description">
127 <p>Animates to the final size after resizing.</p>
128 </div>
129 <div class="option-examples">
130 <h4>Code examples</h4>
131 <dl class="option-examples-list">
132
133<dt>
134 Initialize a resizable with the <code>animate</code> option specified.
135</dt>
136<dd>
137<pre><code>$('.selector').resizable({ animate: true });</code></pre>
138</dd>
139
140
141<dt>
142 Get or set the <code>animate</code> option, after init.
143</dt>
144<dd>
145<pre><code>//getter
146var animate = $('.selector').resizable('option', 'animate');
147//setter
148$('.selector').resizable('option', 'animate', true);</code></pre>
149</dd>
150
151 </dl>
152 </div>
153</li>
154
155
156<li class="option" id="option-animateDuration">
157 <div class="option-header">
158 <h3 class="option-name"><a href="#option-animateDuration">animateDuration</a></h3>
159 <dl>
160 <dt class="option-type-label">Type:</dt>
161 <dd class="option-type">Integer, String</dd>
162
163 <dt class="option-default-label">Default:</dt>
164 <dd class="option-default">'slow'</dd>
165
166 </dl>
167 </div>
168 <div class="option-description">
169 <p>Duration time for animating, in milliseconds. Other possible values: 'slow', 'normal', 'fast'.</p>
170 </div>
171 <div class="option-examples">
172 <h4>Code examples</h4>
173 <dl class="option-examples-list">
174
175<dt>
176 Initialize a resizable with the <code>animateDuration</code> option specified.
177</dt>
178<dd>
179<pre><code>$('.selector').resizable({ animateDuration: 500 });</code></pre>
180</dd>
181
182
183<dt>
184 Get or set the <code>animateDuration</code> option, after init.
185</dt>
186<dd>
187<pre><code>//getter
188var animateDuration = $('.selector').resizable('option', 'animateDuration');
189//setter
190$('.selector').resizable('option', 'animateDuration', 500);</code></pre>
191</dd>
192
193 </dl>
194 </div>
195</li>
196
197
198<li class="option" id="option-animateEasing">
199 <div class="option-header">
200 <h3 class="option-name"><a href="#option-animateEasing">animateEasing</a></h3>
201 <dl>
202 <dt class="option-type-label">Type:</dt>
203 <dd class="option-type">String</dd>
204
205 <dt class="option-default-label">Default:</dt>
206 <dd class="option-default">'swing'</dd>
207
208 </dl>
209 </div>
210 <div class="option-description">
211 <p>Easing effect for animating.</p>
212 </div>
213 <div class="option-examples">
214 <h4>Code examples</h4>
215 <dl class="option-examples-list">
216
217<dt>
218 Initialize a resizable with the <code>animateEasing</code> option specified.
219</dt>
220<dd>
221<pre><code>$('.selector').resizable({ animateEasing: 'swing' });</code></pre>
222</dd>
223
224
225<dt>
226 Get or set the <code>animateEasing</code> option, after init.
227</dt>
228<dd>
229<pre><code>//getter
230var animateEasing = $('.selector').resizable('option', 'animateEasing');
231//setter
232$('.selector').resizable('option', 'animateEasing', 'swing');</code></pre>
233</dd>
234
235 </dl>
236 </div>
237</li>
238
239
240<li class="option" id="option-aspectRatio">
241 <div class="option-header">
242 <h3 class="option-name"><a href="#option-aspectRatio">aspectRatio</a></h3>
243 <dl>
244 <dt class="option-type-label">Type:</dt>
245 <dd class="option-type">Boolean, Float</dd>
246
247 <dt class="option-default-label">Default:</dt>
248 <dd class="option-default">false</dd>
249
250 </dl>
251 </div>
252 <div class="option-description">
253 <p>If set to true, resizing is constrained by the original aspect ratio. Otherwise a custom aspect ratio can be specified, such as 9 / 16, or 0.5.</p>
254 </div>
255 <div class="option-examples">
256 <h4>Code examples</h4>
257 <dl class="option-examples-list">
258
259<dt>
260 Initialize a resizable with the <code>aspectRatio</code> option specified.
261</dt>
262<dd>
263<pre><code>$('.selector').resizable({ aspectRatio: .75 });</code></pre>
264</dd>
265
266
267<dt>
268 Get or set the <code>aspectRatio</code> option, after init.
269</dt>
270<dd>
271<pre><code>//getter
272var aspectRatio = $('.selector').resizable('option', 'aspectRatio');
273//setter
274$('.selector').resizable('option', 'aspectRatio', .75);</code></pre>
275</dd>
276
277 </dl>
278 </div>
279</li>
280
281
282<li class="option" id="option-autoHide">
283 <div class="option-header">
284 <h3 class="option-name"><a href="#option-autoHide">autoHide</a></h3>
285 <dl>
286 <dt class="option-type-label">Type:</dt>
287 <dd class="option-type">Boolean</dd>
288
289 <dt class="option-default-label">Default:</dt>
290 <dd class="option-default">false</dd>
291
292 </dl>
293 </div>
294 <div class="option-description">
295 <p>If set to true, automatically hides the handles except when the mouse hovers over the element.</p>
296 </div>
297 <div class="option-examples">
298 <h4>Code examples</h4>
299 <dl class="option-examples-list">
300
301<dt>
302 Initialize a resizable with the <code>autoHide</code> option specified.
303</dt>
304<dd>
305<pre><code>$('.selector').resizable({ autoHide: true });</code></pre>
306</dd>
307
308
309<dt>
310 Get or set the <code>autoHide</code> option, after init.
311</dt>
312<dd>
313<pre><code>//getter
314var autoHide = $('.selector').resizable('option', 'autoHide');
315//setter
316$('.selector').resizable('option', 'autoHide', true);</code></pre>
317</dd>
318
319 </dl>
320 </div>
321</li>
322
323
324<li class="option" id="option-cancel">
325 <div class="option-header">
326 <h3 class="option-name"><a href="#option-cancel">cancel</a></h3>
327 <dl>
328 <dt class="option-type-label">Type:</dt>
329 <dd class="option-type">Selector</dd>
330
331 <dt class="option-default-label">Default:</dt>
332 <dd class="option-default">':input,option'</dd>
333
334 </dl>
335 </div>
336 <div class="option-description">
337 <p>Prevents resizing if you start on elements matching the selector.</p>
338 </div>
339 <div class="option-examples">
340 <h4>Code examples</h4>
341 <dl class="option-examples-list">
342
343<dt>
344 Initialize a resizable with the <code>cancel</code> option specified.
345</dt>
346<dd>
347<pre><code>$('.selector').resizable({ cancel: ':input,option' });</code></pre>
348</dd>
349
350
351<dt>
352 Get or set the <code>cancel</code> option, after init.
353</dt>
354<dd>
355<pre><code>//getter
356var cancel = $('.selector').resizable('option', 'cancel');
357//setter
358$('.selector').resizable('option', 'cancel', ':input,option');</code></pre>
359</dd>
360
361 </dl>
362 </div>
363</li>
364
365
366<li class="option" id="option-containment">
367 <div class="option-header">
368 <h3 class="option-name"><a href="#option-containment">containment</a></h3>
369 <dl>
370 <dt class="option-type-label">Type:</dt>
371 <dd class="option-type">String, Element, Selector</dd>
372
373 <dt class="option-default-label">Default:</dt>
374 <dd class="option-default">false</dd>
375
376 </dl>
377 </div>
378 <div class="option-description">
379 <p>Constrains resizing to within the bounds of the specified element. Possible values: 'parent', 'document', a DOMElement, or a Selector.</p>
380 </div>
381 <div class="option-examples">
382 <h4>Code examples</h4>
383 <dl class="option-examples-list">
384
385<dt>
386 Initialize a resizable with the <code>containment</code> option specified.
387</dt>
388<dd>
389<pre><code>$('.selector').resizable({ containment: 'parent' });</code></pre>
390</dd>
391
392
393<dt>
394 Get or set the <code>containment</code> option, after init.
395</dt>
396<dd>
397<pre><code>//getter
398var containment = $('.selector').resizable('option', 'containment');
399//setter
400$('.selector').resizable('option', 'containment', 'parent');</code></pre>
401</dd>
402
403 </dl>
404 </div>
405</li>
406
407
408<li class="option" id="option-delay">
409 <div class="option-header">
410 <h3 class="option-name"><a href="#option-delay">delay</a></h3>
411 <dl>
412 <dt class="option-type-label">Type:</dt>
413 <dd class="option-type">Integer</dd>
414
415 <dt class="option-default-label">Default:</dt>
416 <dd class="option-default">0</dd>
417
418 </dl>
419 </div>
420 <div class="option-description">
421 <p>Tolerance, in milliseconds, for when resizing should start. If specified, resizing will not start until after mouse is moved beyond duration. This can help prevent unintended resizing when clicking on an element.</p>
422 </div>
423 <div class="option-examples">
424 <h4>Code examples</h4>
425 <dl class="option-examples-list">
426
427<dt>
428 Initialize a resizable with the <code>delay</code> option specified.
429</dt>
430<dd>
431<pre><code>$('.selector').resizable({ delay: 20 });</code></pre>
432</dd>
433
434
435<dt>
436 Get or set the <code>delay</code> option, after init.
437</dt>
438<dd>
439<pre><code>//getter
440var delay = $('.selector').resizable('option', 'delay');
441//setter
442$('.selector').resizable('option', 'delay', 20);</code></pre>
443</dd>
444
445 </dl>
446 </div>
447</li>
448
449
450<li class="option" id="option-distance">
451 <div class="option-header">
452 <h3 class="option-name"><a href="#option-distance">distance</a></h3>
453 <dl>
454 <dt class="option-type-label">Type:</dt>
455 <dd class="option-type">Integer</dd>
456
457 <dt class="option-default-label">Default:</dt>
458 <dd class="option-default">1</dd>
459
460 </dl>
461 </div>
462 <div class="option-description">
463 <p>Tolerance, in pixels, for when resizing should start. If specified, resizing will not start until after mouse is moved beyond distance. This can help prevent unintended resizing when clicking on an element.</p>
464 </div>
465 <div class="option-examples">
466 <h4>Code examples</h4>
467 <dl class="option-examples-list">
468
469<dt>
470 Initialize a resizable with the <code>distance</code> option specified.
471</dt>
472<dd>
473<pre><code>$('.selector').resizable({ distance: 20 });</code></pre>
474</dd>
475
476
477<dt>
478 Get or set the <code>distance</code> option, after init.
479</dt>
480<dd>
481<pre><code>//getter
482var distance = $('.selector').resizable('option', 'distance');
483//setter
484$('.selector').resizable('option', 'distance', 20);</code></pre>
485</dd>
486
487 </dl>
488 </div>
489</li>
490
491
492<li class="option" id="option-ghost">
493 <div class="option-header">
494 <h3 class="option-name"><a href="#option-ghost">ghost</a></h3>
495 <dl>
496 <dt class="option-type-label">Type:</dt>
497 <dd class="option-type">Boolean</dd>
498
499 <dt class="option-default-label">Default:</dt>
500 <dd class="option-default">false</dd>
501
502 </dl>
503 </div>
504 <div class="option-description">
505 <p>If set to true, a semi-transparent helper element is shown for resizing.</p>
506 </div>
507 <div class="option-examples">
508 <h4>Code examples</h4>
509 <dl class="option-examples-list">
510
511<dt>
512 Initialize a resizable with the <code>ghost</code> option specified.
513</dt>
514<dd>
515<pre><code>$('.selector').resizable({ ghost: true });</code></pre>
516</dd>
517
518
519<dt>
520 Get or set the <code>ghost</code> option, after init.
521</dt>
522<dd>
523<pre><code>//getter
524var ghost = $('.selector').resizable('option', 'ghost');
525//setter
526$('.selector').resizable('option', 'ghost', true);</code></pre>
527</dd>
528
529 </dl>
530 </div>
531</li>
532
533
534<li class="option" id="option-grid">
535 <div class="option-header">
536 <h3 class="option-name"><a href="#option-grid">grid</a></h3>
537 <dl>
538 <dt class="option-type-label">Type:</dt>
539 <dd class="option-type">Array</dd>
540
541 <dt class="option-default-label">Default:</dt>
542 <dd class="option-default">false</dd>
543
544 </dl>
545 </div>
546 <div class="option-description">
547 <p>Snaps the resizing element to a grid, every x and y pixels. Array values: [x, y]</p>
548 </div>
549 <div class="option-examples">
550 <h4>Code examples</h4>
551 <dl class="option-examples-list">
552
553<dt>
554 Initialize a resizable with the <code>grid</code> option specified.
555</dt>
556<dd>
557<pre><code>$('.selector').resizable({ grid: [50, 50] });</code></pre>
558</dd>
559
560
561<dt>
562 Get or set the <code>grid</code> option, after init.
563</dt>
564<dd>
565<pre><code>//getter
566var grid = $('.selector').resizable('option', 'grid');
567//setter
568$('.selector').resizable('option', 'grid', [50, 50]);</code></pre>
569</dd>
570
571 </dl>
572 </div>
573</li>
574
575
576<li class="option" id="option-handles">
577 <div class="option-header">
578 <h3 class="option-name"><a href="#option-handles">handles</a></h3>
579 <dl>
580 <dt class="option-type-label">Type:</dt>
581 <dd class="option-type">String, Object</dd>
582
583 <dt class="option-default-label">Default:</dt>
584 <dd class="option-default">'e, s, se'</dd>
585
586 </dl>
587 </div>
588 <div class="option-description">
589 <p>If specified as a string, should be a comma-split list of any of the following: 'n, e, s, w, ne, se, sw, nw, all'. The necessary handles will be auto-generated by the plugin.
590</p><p>If specified as an object, the following keys are supported: { n, e, s, w, ne, se, sw, nw }. The value of any specified should be a jQuery selector matching the child element of the resizable to use as that handle. If the handle is not a child of the resizable, you can pass in the DOMElement or a valid jQuery object directly.</p>
591 </div>
592 <div class="option-examples">
593 <h4>Code examples</h4>
594 <dl class="option-examples-list">
595
596<dt>
597 Initialize a resizable with the <code>handles</code> option specified.
598</dt>
599<dd>
600<pre><code>$('.selector').resizable({ handles: 'n, e, s, w' });</code></pre>
601</dd>
602
603
604<dt>
605 Get or set the <code>handles</code> option, after init.
606</dt>
607<dd>
608<pre><code>//getter
609var handles = $('.selector').resizable('option', 'handles');
610//setter
611$('.selector').resizable('option', 'handles', 'n, e, s, w');</code></pre>
612</dd>
613
614 </dl>
615 </div>
616</li>
617
618
619<li class="option" id="option-helper">
620 <div class="option-header">
621 <h3 class="option-name"><a href="#option-helper">helper</a></h3>
622 <dl>
623 <dt class="option-type-label">Type:</dt>
624 <dd class="option-type">String</dd>
625
626 <dt class="option-default-label">Default:</dt>
627 <dd class="option-default">false</dd>
628
629 </dl>
630 </div>
631 <div class="option-description">
632 <p>This is the css class that will be added to a proxy element to outline the resize during the drag of the resize handle. Once the resize is complete, the original element is sized.</p>
633 </div>
634 <div class="option-examples">
635 <h4>Code examples</h4>
636 <dl class="option-examples-list">
637
638<dt>
639 Initialize a resizable with the <code>helper</code> option specified.
640</dt>
641<dd>
642<pre><code>$('.selector').resizable({ helper: 'ui-state-highlight' });</code></pre>
643</dd>
644
645
646<dt>
647 Get or set the <code>helper</code> option, after init.
648</dt>
649<dd>
650<pre><code>//getter
651var helper = $('.selector').resizable('option', 'helper');
652//setter
653$('.selector').resizable('option', 'helper', 'ui-state-highlight');</code></pre>
654</dd>
655
656 </dl>
657 </div>
658</li>
659
660
661<li class="option" id="option-maxHeight">
662 <div class="option-header">
663 <h3 class="option-name"><a href="#option-maxHeight">maxHeight</a></h3>
664 <dl>
665 <dt class="option-type-label">Type:</dt>
666 <dd class="option-type">Integer</dd>
667
668 <dt class="option-default-label">Default:</dt>
669 <dd class="option-default">null</dd>
670
671 </dl>
672 </div>
673 <div class="option-description">
674 <p>This is the maximum height the resizable should be allowed to resize to.</p>
675 </div>
676 <div class="option-examples">
677 <h4>Code examples</h4>
678 <dl class="option-examples-list">
679
680<dt>
681 Initialize a resizable with the <code>maxHeight</code> option specified.
682</dt>
683<dd>
684<pre><code>$('.selector').resizable({ maxHeight: 300 });</code></pre>
685</dd>
686
687
688<dt>
689 Get or set the <code>maxHeight</code> option, after init.
690</dt>
691<dd>
692<pre><code>//getter
693var maxHeight = $('.selector').resizable('option', 'maxHeight');
694//setter
695$('.selector').resizable('option', 'maxHeight', 300);</code></pre>
696</dd>
697
698 </dl>
699 </div>
700</li>
701
702
703<li class="option" id="option-maxWidth">
704 <div class="option-header">
705 <h3 class="option-name"><a href="#option-maxWidth">maxWidth</a></h3>
706 <dl>
707 <dt class="option-type-label">Type:</dt>
708 <dd class="option-type">Integer</dd>
709
710 <dt class="option-default-label">Default:</dt>
711 <dd class="option-default">null</dd>
712
713 </dl>
714 </div>
715 <div class="option-description">
716 <p>This is the maximum width the resizable should be allowed to resize to.</p>
717 </div>
718 <div class="option-examples">
719 <h4>Code examples</h4>
720 <dl class="option-examples-list">
721
722<dt>
723 Initialize a resizable with the <code>maxWidth</code> option specified.
724</dt>
725<dd>
726<pre><code>$('.selector').resizable({ maxWidth: 250 });</code></pre>
727</dd>
728
729
730<dt>
731 Get or set the <code>maxWidth</code> option, after init.
732</dt>
733<dd>
734<pre><code>//getter
735var maxWidth = $('.selector').resizable('option', 'maxWidth');
736//setter
737$('.selector').resizable('option', 'maxWidth', 250);</code></pre>
738</dd>
739
740 </dl>
741 </div>
742</li>
743
744
745<li class="option" id="option-minHeight">
746 <div class="option-header">
747 <h3 class="option-name"><a href="#option-minHeight">minHeight</a></h3>
748 <dl>
749 <dt class="option-type-label">Type:</dt>
750 <dd class="option-type">Integer</dd>
751
752 <dt class="option-default-label">Default:</dt>
753 <dd class="option-default">10</dd>
754
755 </dl>
756 </div>
757 <div class="option-description">
758 <p>This is the minimum height the resizable should be allowed to resize to.</p>
759 </div>
760 <div class="option-examples">
761 <h4>Code examples</h4>
762 <dl class="option-examples-list">
763
764<dt>
765 Initialize a resizable with the <code>minHeight</code> option specified.
766</dt>
767<dd>
768<pre><code>$('.selector').resizable({ minHeight: 150 });</code></pre>
769</dd>
770
771
772<dt>
773 Get or set the <code>minHeight</code> option, after init.
774</dt>
775<dd>
776<pre><code>//getter
777var minHeight = $('.selector').resizable('option', 'minHeight');
778//setter
779$('.selector').resizable('option', 'minHeight', 150);</code></pre>
780</dd>
781
782 </dl>
783 </div>
784</li>
785
786
787<li class="option" id="option-minWidth">
788 <div class="option-header">
789 <h3 class="option-name"><a href="#option-minWidth">minWidth</a></h3>
790 <dl>
791 <dt class="option-type-label">Type:</dt>
792 <dd class="option-type">Integer</dd>
793
794 <dt class="option-default-label">Default:</dt>
795 <dd class="option-default">10</dd>
796
797 </dl>
798 </div>
799 <div class="option-description">
800 <p>This is the minimum width the resizable should be allowed to resize to.</p>
801 </div>
802 <div class="option-examples">
803 <h4>Code examples</h4>
804 <dl class="option-examples-list">
805
806<dt>
807 Initialize a resizable with the <code>minWidth</code> option specified.
808</dt>
809<dd>
810<pre><code>$('.selector').resizable({ minWidth: 75 });</code></pre>
811</dd>
812
813
814<dt>
815 Get or set the <code>minWidth</code> option, after init.
816</dt>
817<dd>
818<pre><code>//getter
819var minWidth = $('.selector').resizable('option', 'minWidth');
820//setter
821$('.selector').resizable('option', 'minWidth', 75);</code></pre>
822</dd>
823
824 </dl>
825 </div>
826</li>
827
828 </ul>
829 </div>
830 <div id="events">
831 <h2 class="top-header">Events</h2>
832 <ul class="events-list">
833
834<li class="event" id="event-start">
835 <div class="event-header">
836 <h3 class="event-name"><a href="#event-start">start</a></h3>
837 <dl>
838 <dt class="event-type-label">Type:</dt>
839 <dd class="event-type">resizestart</dd>
840 </dl>
841 </div>
842 <div class="event-description">
843 <p>This event is triggered at the start of a resize operation.</p>
844 </div>
845 <div class="event-examples">
846 <h4>Code examples</h4>
847 <dl class="event-examples-list">
848
849<dt>
850 Supply a callback function to handle the <code>start</code> event as an init option.
851</dt>
852<dd>
853<pre><code>$('.selector').resizable({
854 start: function(event, ui) { ... }
855});</code></pre>
856</dd>
857
858
859<dt>
860 Bind to the <code>start</code> event by type: <code>resizestart</code>.
861</dt>
862<dd>
863<pre><code>$('.selector').bind('resizestart', function(event, ui) {
864 ...
865});</code></pre>
866</dd>
867
868 </dl>
869 </div>
870</li>
871
872
873<li class="event" id="event-resize">
874 <div class="event-header">
875 <h3 class="event-name"><a href="#event-resize">resize</a></h3>
876 <dl>
877 <dt class="event-type-label">Type:</dt>
878 <dd class="event-type">resize</dd>
879 </dl>
880 </div>
881 <div class="event-description">
882 <p>This event is triggered during the resize, on the drag of the resize handler.</p>
883 </div>
884 <div class="event-examples">
885 <h4>Code examples</h4>
886 <dl class="event-examples-list">
887
888<dt>
889 Supply a callback function to handle the <code>resize</code> event as an init option.
890</dt>
891<dd>
892<pre><code>$('.selector').resizable({
893 resize: function(event, ui) { ... }
894});</code></pre>
895</dd>
896
897
898<dt>
899 Bind to the <code>resize</code> event by type: <code>resize</code>.
900</dt>
901<dd>
902<pre><code>$('.selector').bind('resize', function(event, ui) {
903 ...
904});</code></pre>
905</dd>
906
907 </dl>
908 </div>
909</li>
910
911
912<li class="event" id="event-stop">
913 <div class="event-header">
914 <h3 class="event-name"><a href="#event-stop">stop</a></h3>
915 <dl>
916 <dt class="event-type-label">Type:</dt>
917 <dd class="event-type">resizestop</dd>
918 </dl>
919 </div>
920 <div class="event-description">
921 <p>This event is triggered at the end of a resize operation.</p>
922 </div>
923 <div class="event-examples">
924 <h4>Code examples</h4>
925 <dl class="event-examples-list">
926
927<dt>
928 Supply a callback function to handle the <code>stop</code> event as an init option.
929</dt>
930<dd>
931<pre><code>$('.selector').resizable({
932 stop: function(event, ui) { ... }
933});</code></pre>
934</dd>
935
936
937<dt>
938 Bind to the <code>stop</code> event by type: <code>resizestop</code>.
939</dt>
940<dd>
941<pre><code>$('.selector').bind('resizestop', function(event, ui) {
942 ...
943});</code></pre>
944</dd>
945
946 </dl>
947 </div>
948</li>
949
950 </ul>
951 </div>
952 <div id="methods">
953 <h2 class="top-header">Methods</h2>
954 <ul class="methods-list">
955
956<li class="method" id="method-destroy">
957 <div class="method-header">
958 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
959 <dl>
960 <dt class="method-signature-label">Signature:</dt>
961 <dd class="method-signature">.resizable( 'destroy'
962
963
964
965
966
967
968
969)</dd>
970 </dl>
971 </div>
972 <div class="method-description">
973 <p>Remove the resizable functionality completely. This will return the element back to its pre-init state.</p>
974 </div>
975</li>
976
977
978<li class="method" id="method-disable">
979 <div class="method-header">
980 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
981 <dl>
982 <dt class="method-signature-label">Signature:</dt>
983 <dd class="method-signature">.resizable( 'disable'
984
985
986
987
988
989
990
991)</dd>
992 </dl>
993 </div>
994 <div class="method-description">
995 <p>Disable the resizable.</p>
996 </div>
997</li>
998
999
1000<li class="method" id="method-enable">
1001 <div class="method-header">
1002 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
1003 <dl>
1004 <dt class="method-signature-label">Signature:</dt>
1005 <dd class="method-signature">.resizable( 'enable'
1006
1007
1008
1009
1010
1011
1012
1013)</dd>
1014 </dl>
1015 </div>
1016 <div class="method-description">
1017 <p>Enable the resizable.</p>
1018 </div>
1019</li>
1020
1021
1022<li class="method" id="method-option">
1023 <div class="method-header">
1024 <h3 class="method-name"><a href="#method-option">option</a></h3>
1025 <dl>
1026 <dt class="method-signature-label">Signature:</dt>
1027 <dd class="method-signature">.resizable( 'option'
1028
1029, optionName
1030
1031, <span class="optional">[</span>value<span class="optional">] </span>
1032
1033
1034
1035)</dd>
1036 </dl>
1037 </div>
1038 <div class="method-description">
1039 <p>Get or set any resizable option. If no value is specified, will act as a getter.</p>
1040 </div>
1041</li>
1042
1043
1044 </ul>
1045 </div>
1046 <div id="theming">
1047 <h2 class="top-header">Theming</h2>
1048 <p>The jQuery UI Resizable plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
1049</p>
1050 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.resizable.css stylesheet that can be modified. These classes are highlighed in bold below.
1051</p>
1052
1053 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
1054 &lt;div class=&quot;<strong>ui-resizable</strong>&quot;&gt;<br />
1055&#160;&#160;&#160;&lt;div style=&quot;-moz-user-select: none;&quot; unselectable=&quot;on&quot; class=&quot;<strong>ui-resizable-handle ui-resizable-e</strong>&quot;&gt;&lt;/div&gt;<br />
1056&#160;&#160;&#160;&lt;div style=&quot;-moz-user-select: none;&quot; unselectable=&quot;on&quot; class=&quot;<strong>ui-resizable-handle ui-resizable-s</strong>&quot;&gt;&lt;/div&gt;<br />
1057&#160;&#160;&#160;&lt;div unselectable=&quot;on&quot; style=&quot;z-index: 1001; -moz-user-select: none;&quot; class=&quot;<strong>ui-resizable-handle ui-resizable-se</strong> ui-icon ui-icon-gripsmall-diagonal-se&quot;&gt;&lt;/div&gt;<br />
1058&lt;/div&gt;
1059 <p class="theme-note">
1060 <strong>
1061 Note: This is a sample of markup generated by the resizable plugin, not markup you should use to create a resizable. The only markup needed for that is &lt;div&gt;&lt;/div&gt;.
1062 </strong>
1063 </p>
1064
1065 </div>
1066</div>
1067
1068</p><!--
1069Pre-expand include size: 41455 bytes
1070Post-expand include size: 71826 bytes
1071Template argument size: 40520 bytes
1072Maximum: 2097152 bytes
1073-->
1074
1075<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3342-1!1!0!!en!2 and timestamp 20090604112213 -->
diff --git a/static/development-bundle/docs/selectable.html b/static/development-bundle/docs/selectable.html
new file mode 100644
index 0000000..4841ebc
--- /dev/null
+++ b/static/development-bundle/docs/selectable.html
@@ -0,0 +1,707 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Selectable</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>The jQuery UI Selectable plugin allows for elements to be selected by dragging a box (sometimes called a lasso) with the mouse over the elements. Also, elements can be selected by click or drag while holding the Ctrl/Meta key, allowing for multiple (non-contiguous) selections.</p>
15 </div>
16 <div id="overview-dependencies">
17 <h3>Dependencies</h3>
18 <ul>
19<li>UI Core</li>
20</ul>
21 </div>
22 <div id="overview-example">
23 <h3>Example</h3>
24 <div id="overview-example" class="example">
25<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
26<p><div id="demo" class="tabs-container" rel="">
27A simple jQuery UI Selectable.<br />
28</p>
29<pre>$(&quot;#selectable&quot;).selectable();
30</pre>
31<p></div><div id="source" class="tabs-container">
32</p>
33<pre>&lt;!DOCTYPE html&gt;
34&lt;html&gt;
35&lt;head&gt;
36 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
37 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
38 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
39 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.selectable.js&quot;&gt;&lt;/script&gt;
40 &lt;script type="text/javascript"&gt;
41 $(document).ready(function(){
42 $(&quot;#selectable&quot;).selectable();
43 });
44 &lt;/script&gt;
45&lt;/head&gt;
46&lt;body style="font-size:62.5%;"&gt;
47
48&lt;div id=&quot;selectable&quot;&gt;&lt;/div&gt;
49
50&lt;/body&gt;
51&lt;/html&gt;
52</pre>
53<p></div>
54</p><p></div>
55 </div>
56 </div>
57 <div id="options">
58 <h2 class="top-header">Options</h2>
59 <ul class="options-list">
60
61<li class="option" id="option-autoRefresh">
62 <div class="option-header">
63 <h3 class="option-name"><a href="#option-autoRefresh">autoRefresh</a></h3>
64 <dl>
65 <dt class="option-type-label">Type:</dt>
66 <dd class="option-type">Boolean</dd>
67
68 <dt class="option-default-label">Default:</dt>
69 <dd class="option-default">true</dd>
70
71 </dl>
72 </div>
73 <div class="option-description">
74 <p>This determines whether to refresh (recalculate) the position and size of each selectee at the beginning of each select operation. If you have many many items, you may want to set this to false and call the refresh method manually.</p>
75 </div>
76 <div class="option-examples">
77 <h4>Code examples</h4>
78 <dl class="option-examples-list">
79
80<dt>
81 Initialize a selectable with the <code>autoRefresh</code> option specified.
82</dt>
83<dd>
84<pre><code>$('.selector').selectable({ autoRefresh: false });</code></pre>
85</dd>
86
87
88<dt>
89 Get or set the <code>autoRefresh</code> option, after init.
90</dt>
91<dd>
92<pre><code>//getter
93var autoRefresh = $('.selector').selectable('option', 'autoRefresh');
94//setter
95$('.selector').selectable('option', 'autoRefresh', false);</code></pre>
96</dd>
97
98 </dl>
99 </div>
100</li>
101
102
103<li class="option" id="option-cancel">
104 <div class="option-header">
105 <h3 class="option-name"><a href="#option-cancel">cancel</a></h3>
106 <dl>
107 <dt class="option-type-label">Type:</dt>
108 <dd class="option-type">Selector</dd>
109
110 <dt class="option-default-label">Default:</dt>
111 <dd class="option-default">':input,option'</dd>
112
113 </dl>
114 </div>
115 <div class="option-description">
116 <p>Prevents selecting if you start on elements matching the selector.</p>
117 </div>
118 <div class="option-examples">
119 <h4>Code examples</h4>
120 <dl class="option-examples-list">
121
122<dt>
123 Initialize a selectable with the <code>cancel</code> option specified.
124</dt>
125<dd>
126<pre><code>$('.selector').selectable({ cancel: ':input,option' });</code></pre>
127</dd>
128
129
130<dt>
131 Get or set the <code>cancel</code> option, after init.
132</dt>
133<dd>
134<pre><code>//getter
135var cancel = $('.selector').selectable('option', 'cancel');
136//setter
137$('.selector').selectable('option', 'cancel', ':input,option');</code></pre>
138</dd>
139
140 </dl>
141 </div>
142</li>
143
144
145<li class="option" id="option-delay">
146 <div class="option-header">
147 <h3 class="option-name"><a href="#option-delay">delay</a></h3>
148 <dl>
149 <dt class="option-type-label">Type:</dt>
150 <dd class="option-type">Integer</dd>
151
152 <dt class="option-default-label">Default:</dt>
153 <dd class="option-default">0</dd>
154
155 </dl>
156 </div>
157 <div class="option-description">
158 <p>Time in milliseconds to define when the selecting should start. It helps preventing unwanted selections when clicking on an element.</p>
159 </div>
160 <div class="option-examples">
161 <h4>Code examples</h4>
162 <dl class="option-examples-list">
163
164<dt>
165 Initialize a selectable with the <code>delay</code> option specified.
166</dt>
167<dd>
168<pre><code>$('.selector').selectable({ delay: 20 });</code></pre>
169</dd>
170
171
172<dt>
173 Get or set the <code>delay</code> option, after init.
174</dt>
175<dd>
176<pre><code>//getter
177var delay = $('.selector').selectable('option', 'delay');
178//setter
179$('.selector').selectable('option', 'delay', 20);</code></pre>
180</dd>
181
182 </dl>
183 </div>
184</li>
185
186
187<li class="option" id="option-distance">
188 <div class="option-header">
189 <h3 class="option-name"><a href="#option-distance">distance</a></h3>
190 <dl>
191 <dt class="option-type-label">Type:</dt>
192 <dd class="option-type">Integer</dd>
193
194 <dt class="option-default-label">Default:</dt>
195 <dd class="option-default">0</dd>
196
197 </dl>
198 </div>
199 <div class="option-description">
200 <p>Tolerance, in pixels, for when selecting should start. If specified, selecting will not start until after mouse is dragged beyond distance.</p>
201 </div>
202 <div class="option-examples">
203 <h4>Code examples</h4>
204 <dl class="option-examples-list">
205
206<dt>
207 Initialize a selectable with the <code>distance</code> option specified.
208</dt>
209<dd>
210<pre><code>$('.selector').selectable({ distance: 20 });</code></pre>
211</dd>
212
213
214<dt>
215 Get or set the <code>distance</code> option, after init.
216</dt>
217<dd>
218<pre><code>//getter
219var distance = $('.selector').selectable('option', 'distance');
220//setter
221$('.selector').selectable('option', 'distance', 20);</code></pre>
222</dd>
223
224 </dl>
225 </div>
226</li>
227
228
229<li class="option" id="option-filter">
230 <div class="option-header">
231 <h3 class="option-name"><a href="#option-filter">filter</a></h3>
232 <dl>
233 <dt class="option-type-label">Type:</dt>
234 <dd class="option-type">Selector</dd>
235
236 <dt class="option-default-label">Default:</dt>
237 <dd class="option-default">'*'</dd>
238
239 </dl>
240 </div>
241 <div class="option-description">
242 <p>The matching child elements will be made selectees (able to be selected).</p>
243 </div>
244 <div class="option-examples">
245 <h4>Code examples</h4>
246 <dl class="option-examples-list">
247
248<dt>
249 Initialize a selectable with the <code>filter</code> option specified.
250</dt>
251<dd>
252<pre><code>$('.selector').selectable({ filter: 'li' });</code></pre>
253</dd>
254
255
256<dt>
257 Get or set the <code>filter</code> option, after init.
258</dt>
259<dd>
260<pre><code>//getter
261var filter = $('.selector').selectable('option', 'filter');
262//setter
263$('.selector').selectable('option', 'filter', 'li');</code></pre>
264</dd>
265
266 </dl>
267 </div>
268</li>
269
270
271<li class="option" id="option-tolerance">
272 <div class="option-header">
273 <h3 class="option-name"><a href="#option-tolerance">tolerance</a></h3>
274 <dl>
275 <dt class="option-type-label">Type:</dt>
276 <dd class="option-type">String</dd>
277
278 <dt class="option-default-label">Default:</dt>
279 <dd class="option-default">'touch'</dd>
280
281 </dl>
282 </div>
283 <div class="option-description">
284 <p>Possible values: 'touch', 'fit'.
285</p>
286<ul>
287<li><b>fit</b>: draggable overlaps the droppable entirely</li>
288<li><b>touch</b>: draggable overlaps the droppable any amount</li>
289</ul>
290<p></p>
291 </div>
292 <div class="option-examples">
293 <h4>Code examples</h4>
294 <dl class="option-examples-list">
295
296<dt>
297 Initialize a selectable with the <code>tolerance</code> option specified.
298</dt>
299<dd>
300<pre><code>$('.selector').selectable({ tolerance: 'fit' });</code></pre>
301</dd>
302
303
304<dt>
305 Get or set the <code>tolerance</code> option, after init.
306</dt>
307<dd>
308<pre><code>//getter
309var tolerance = $('.selector').selectable('option', 'tolerance');
310//setter
311$('.selector').selectable('option', 'tolerance', 'fit');</code></pre>
312</dd>
313
314 </dl>
315 </div>
316</li>
317
318 </ul>
319 </div>
320 <div id="events">
321 <h2 class="top-header">Events</h2>
322 <ul class="events-list">
323
324<li class="event" id="event-selected">
325 <div class="event-header">
326 <h3 class="event-name"><a href="#event-selected">selected</a></h3>
327 <dl>
328 <dt class="event-type-label">Type:</dt>
329 <dd class="event-type">selected</dd>
330 </dl>
331 </div>
332 <div class="event-description">
333 <p>This event is triggered at the end of the select operation, on each element added to the selection.</p>
334 </div>
335 <div class="event-examples">
336 <h4>Code examples</h4>
337 <dl class="event-examples-list">
338
339<dt>
340 Supply a callback function to handle the <code>selected</code> event as an init option.
341</dt>
342<dd>
343<pre><code>$('.selector').selectable({
344 selected: function(event, ui) { ... }
345});</code></pre>
346</dd>
347
348
349<dt>
350 Bind to the <code>selected</code> event by type: <code>selected</code>.
351</dt>
352<dd>
353<pre><code>$('.selector').bind('selected', function(event, ui) {
354 ...
355});</code></pre>
356</dd>
357
358 </dl>
359 </div>
360</li>
361
362
363<li class="event" id="event-selecting">
364 <div class="event-header">
365 <h3 class="event-name"><a href="#event-selecting">selecting</a></h3>
366 <dl>
367 <dt class="event-type-label">Type:</dt>
368 <dd class="event-type">selecting</dd>
369 </dl>
370 </div>
371 <div class="event-description">
372 <p>This event is triggered during the select operation, on each element added to the selection.</p>
373 </div>
374 <div class="event-examples">
375 <h4>Code examples</h4>
376 <dl class="event-examples-list">
377
378<dt>
379 Supply a callback function to handle the <code>selecting</code> event as an init option.
380</dt>
381<dd>
382<pre><code>$('.selector').selectable({
383 selecting: function(event, ui) { ... }
384});</code></pre>
385</dd>
386
387
388<dt>
389 Bind to the <code>selecting</code> event by type: <code>selecting</code>.
390</dt>
391<dd>
392<pre><code>$('.selector').bind('selecting', function(event, ui) {
393 ...
394});</code></pre>
395</dd>
396
397 </dl>
398 </div>
399</li>
400
401
402<li class="event" id="event-start">
403 <div class="event-header">
404 <h3 class="event-name"><a href="#event-start">start</a></h3>
405 <dl>
406 <dt class="event-type-label">Type:</dt>
407 <dd class="event-type">selectablestart</dd>
408 </dl>
409 </div>
410 <div class="event-description">
411 <p>This event is triggered at the beginning of the select operation.</p>
412 </div>
413 <div class="event-examples">
414 <h4>Code examples</h4>
415 <dl class="event-examples-list">
416
417<dt>
418 Supply a callback function to handle the <code>start</code> event as an init option.
419</dt>
420<dd>
421<pre><code>$('.selector').selectable({
422 start: function(event, ui) { ... }
423});</code></pre>
424</dd>
425
426
427<dt>
428 Bind to the <code>start</code> event by type: <code>selectablestart</code>.
429</dt>
430<dd>
431<pre><code>$('.selector').bind('selectablestart', function(event, ui) {
432 ...
433});</code></pre>
434</dd>
435
436 </dl>
437 </div>
438</li>
439
440
441<li class="event" id="event-stop">
442 <div class="event-header">
443 <h3 class="event-name"><a href="#event-stop">stop</a></h3>
444 <dl>
445 <dt class="event-type-label">Type:</dt>
446 <dd class="event-type">selectablestop</dd>
447 </dl>
448 </div>
449 <div class="event-description">
450 <p>This event is triggered at the end of the select operation.</p>
451 </div>
452 <div class="event-examples">
453 <h4>Code examples</h4>
454 <dl class="event-examples-list">
455
456<dt>
457 Supply a callback function to handle the <code>stop</code> event as an init option.
458</dt>
459<dd>
460<pre><code>$('.selector').selectable({
461 stop: function(event, ui) { ... }
462});</code></pre>
463</dd>
464
465
466<dt>
467 Bind to the <code>stop</code> event by type: <code>selectablestop</code>.
468</dt>
469<dd>
470<pre><code>$('.selector').bind('selectablestop', function(event, ui) {
471 ...
472});</code></pre>
473</dd>
474
475 </dl>
476 </div>
477</li>
478
479
480<li class="event" id="event-unselected">
481 <div class="event-header">
482 <h3 class="event-name"><a href="#event-unselected">unselected</a></h3>
483 <dl>
484 <dt class="event-type-label">Type:</dt>
485 <dd class="event-type">unselected</dd>
486 </dl>
487 </div>
488 <div class="event-description">
489 <p>This event is triggered at the end of the select operation, on each element removed from the selection.</p>
490 </div>
491 <div class="event-examples">
492 <h4>Code examples</h4>
493 <dl class="event-examples-list">
494
495<dt>
496 Supply a callback function to handle the <code>unselected</code> event as an init option.
497</dt>
498<dd>
499<pre><code>$('.selector').selectable({
500 unselected: function(event, ui) { ... }
501});</code></pre>
502</dd>
503
504
505<dt>
506 Bind to the <code>unselected</code> event by type: <code>unselected</code>.
507</dt>
508<dd>
509<pre><code>$('.selector').bind('unselected', function(event, ui) {
510 ...
511});</code></pre>
512</dd>
513
514 </dl>
515 </div>
516</li>
517
518
519<li class="event" id="event-unselecting">
520 <div class="event-header">
521 <h3 class="event-name"><a href="#event-unselecting">unselecting</a></h3>
522 <dl>
523 <dt class="event-type-label">Type:</dt>
524 <dd class="event-type">unselecting</dd>
525 </dl>
526 </div>
527 <div class="event-description">
528 <p>This event is triggered during the select operation, on each element removed from the selection.</p>
529 </div>
530 <div class="event-examples">
531 <h4>Code examples</h4>
532 <dl class="event-examples-list">
533
534<dt>
535 Supply a callback function to handle the <code>unselecting</code> event as an init option.
536</dt>
537<dd>
538<pre><code>$('.selector').selectable({
539 unselecting: function(event, ui) { ... }
540});</code></pre>
541</dd>
542
543
544<dt>
545 Bind to the <code>unselecting</code> event by type: <code>unselecting</code>.
546</dt>
547<dd>
548<pre><code>$('.selector').bind('unselecting', function(event, ui) {
549 ...
550});</code></pre>
551</dd>
552
553 </dl>
554 </div>
555</li>
556
557 </ul>
558 </div>
559 <div id="methods">
560 <h2 class="top-header">Methods</h2>
561 <ul class="methods-list">
562
563<li class="method" id="method-destroy">
564 <div class="method-header">
565 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
566 <dl>
567 <dt class="method-signature-label">Signature:</dt>
568 <dd class="method-signature">.selectable( 'destroy'
569
570
571
572
573
574
575
576)</dd>
577 </dl>
578 </div>
579 <div class="method-description">
580 <p>Remove the selectable functionality completely. This will return the element back to its pre-init state.</p>
581 </div>
582</li>
583
584
585<li class="method" id="method-disable">
586 <div class="method-header">
587 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
588 <dl>
589 <dt class="method-signature-label">Signature:</dt>
590 <dd class="method-signature">.selectable( 'disable'
591
592
593
594
595
596
597
598)</dd>
599 </dl>
600 </div>
601 <div class="method-description">
602 <p>Disable the selectable.</p>
603 </div>
604</li>
605
606
607<li class="method" id="method-enable">
608 <div class="method-header">
609 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
610 <dl>
611 <dt class="method-signature-label">Signature:</dt>
612 <dd class="method-signature">.selectable( 'enable'
613
614
615
616
617
618
619
620)</dd>
621 </dl>
622 </div>
623 <div class="method-description">
624 <p>Enable the selectable.</p>
625 </div>
626</li>
627
628
629<li class="method" id="method-option">
630 <div class="method-header">
631 <h3 class="method-name"><a href="#method-option">option</a></h3>
632 <dl>
633 <dt class="method-signature-label">Signature:</dt>
634 <dd class="method-signature">.selectable( 'option'
635
636, optionName
637
638, <span class="optional">[</span>value<span class="optional">] </span>
639
640
641
642)</dd>
643 </dl>
644 </div>
645 <div class="method-description">
646 <p>Get or set any selectable option. If no value is specified, will act as a getter.</p>
647 </div>
648</li>
649
650
651<li class="method" id="method-refresh">
652 <div class="method-header">
653 <h3 class="method-name"><a href="#method-refresh">refresh</a></h3>
654 <dl>
655 <dt class="method-signature-label">Signature:</dt>
656 <dd class="method-signature">.selectable( 'refresh'
657
658
659
660
661
662
663
664)</dd>
665 </dl>
666 </div>
667 <div class="method-description">
668 <p>Refresh the position and size of each selectee element. This method can be used to manually recalculate the position and size of each selectee element. Very useful if autoRefresh is set to false.</p>
669 </div>
670</li>
671
672 </ul>
673 </div>
674 <div id="theming">
675 <h2 class="top-header">Theming</h2>
676 <p>The jQuery UI Selectable plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
677</p>
678 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.selectable.css stylesheet that can be modified. These classes are highlighed in bold below.
679</p>
680
681 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
682 &lt;ul class=&quot;<strong>ui-selectable</strong>&quot;&gt;<br />
683&#160;&#160;&#160;&lt;li class=&quot;<strong>ui-selectee</strong>&quot;&gt;&lt;/li&gt;<br />
684&#160;&#160;&#160;&lt;li class=&quot;<strong>ui-selectee</strong>&quot;&gt;&lt;/li&gt;<br />
685&#160;&#160;&#160;&lt;li class=&quot;<strong>ui-selectee</strong>&quot;&gt;&lt;/li&gt;<br />
686&lt;/ul&gt;
687 <p class="theme-note">
688 <strong>
689 Note: This is a sample of markup generated by the selectable plugin, not markup you should use to create a selectable. The only markup needed for that is <br />&lt;ul&gt;<br />
690&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
691&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
692&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
693&lt;/ul&gt;.
694 </strong>
695 </p>
696
697 </div>
698</div>
699
700</p><!--
701Pre-expand include size: 28549 bytes
702Post-expand include size: 45102 bytes
703Template argument size: 24967 bytes
704Maximum: 2097152 bytes
705-->
706
707<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3343-1!1!0!!en!2 and timestamp 20090604112214 -->
diff --git a/static/development-bundle/docs/show.html b/static/development-bundle/docs/show.html
new file mode 100644
index 0000000..c8e6681
--- /dev/null
+++ b/static/development-bundle/docs/show.html
@@ -0,0 +1,143 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI show</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/show?section=1" title="Edit section: show( effect, [options], [speed], [callback] )">edit</a>]</div><a name="show.28_effect.2C_.5Boptions.5D.2C_.5Bspeed.5D.2C_.5Bcallback.5D_.29"></a><h3>show( effect, <span class="optional">[</span>options<span class="optional">]</span>, <span class="optional">[</span>speed<span class="optional">]</span>, <span class="optional">[</span>callback<span class="optional">]</span> )</h3>
12<p>The enhanced show method optionally accepts jQuery UI advanced effects.</p>
13<p>Uses a specific effect on an element to show the element if the first argument is a effect string.</p>
14 </div>
15 <div id="overview-dependencies">
16 <h3>Dependencies</h3>
17 <ul>
18<li>Effects Core</li>
19</ul>
20 </div>
21 <div id="overview-example">
22 <h3>Example</h3>
23 <div id="overview-example" class="example">
24<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
25<p><div id="demo" class="tabs-container" rel="170">
26Apply the effect slide if you click on the p to show a div.<br />
27</p>
28<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
29 $(&quot;div&quot;).<strong class="selflink">show</strong>(&quot;slide&quot;, {}, 1000);
30 });
31</pre>
32<p></div><div id="source" class="tabs-container">
33</p>
34<pre>&lt;!DOCTYPE html&gt;
35&lt;html&gt;
36&lt;head&gt;
37 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
38 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
39 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
40&lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.slide.js&quot;&gt;&lt;/script&gt;
41&lt;style type=&quot;text/css&quot;&gt;
42 div { display: none; margin: 0px; width: 100px; height: 80px; background: blue; position: relative; }
43&lt;/style&gt;
44 &lt;script type="text/javascript"&gt;
45 $(document).ready(function(){
46 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
47 $(&quot;div&quot;).<strong class="selflink">show</strong>(&quot;slide&quot;, {}, 1000);
48 });
49 });
50 &lt;/script&gt;
51&lt;/head&gt;
52&lt;body style="font-size:62.5%;"&gt;
53
54&lt;p&gt;Click me&lt;/p&gt;&lt;div&gt;&lt;/div&gt;
55
56&lt;/body&gt;
57&lt;/html&gt;
58</pre>
59<p></div>
60</p><p></div>
61 </div>
62 </div>
63 <div id="options">
64 <h2 class="top-header">Arguments</h2>
65 <ul class="options-list">
66
67<li class="option" id="option-effect">
68 <div class="option-header">
69 <h3 class="option-name"><a href="#option-effect">effect</a></h3>
70 <dl>
71 <dt class="option-type-label">Type:</dt>
72 <dd class="option-type">String</dd>
73
74 </dl>
75 </div>
76 <div class="option-description">
77 <p>The effect to be used. Possible values: 'blind', 'clip', 'drop', 'explode', 'fold', 'puff', 'slide', 'scale', 'size', 'pulsate'.</p>
78 </div>
79</li>
80
81
82<li class="option" id="option-options">
83 <div class="option-header">
84 <h3 class="option-name"><a href="#option-options">options</a></h3>
85 <dl>
86 <dt class="option-type-label">Type:</dt>
87 <dd class="option-type">Hash</dd>
88
89 <dt class="option-optional-label">Optional</dt>
90
91 </dl>
92 </div>
93 <div class="option-description">
94 <p>A object/hash including specific options for the effect.</p>
95 </div>
96</li>
97
98
99<li class="option" id="option-speed">
100 <div class="option-header">
101 <h3 class="option-name"><a href="#option-speed">speed</a></h3>
102 <dl>
103 <dt class="option-type-label">Type:</dt>
104 <dd class="option-type">String, Number</dd>
105
106 <dt class="option-optional-label">Optional</dt>
107
108 </dl>
109 </div>
110 <div class="option-description">
111 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
112 </div>
113</li>
114
115
116<li class="option" id="option-callback">
117 <div class="option-header">
118 <h3 class="option-name"><a href="#option-callback">callback</a></h3>
119 <dl>
120 <dt class="option-type-label">Type:</dt>
121 <dd class="option-type">Function</dd>
122
123 <dt class="option-optional-label">Optional</dt>
124
125 </dl>
126 </div>
127 <div class="option-description">
128 <p>A function that is called after the effect is completed.</p>
129 </div>
130</li>
131
132 </ul>
133 </div>
134</div>
135
136</p><!--
137Pre-expand include size: 6211 bytes
138Post-expand include size: 8730 bytes
139Template argument size: 5476 bytes
140Maximum: 2097152 bytes
141-->
142
143<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2613-1!1!0!!en!2 and timestamp 20090604112225 -->
diff --git a/static/development-bundle/docs/slider.html b/static/development-bundle/docs/slider.html
new file mode 100644
index 0000000..338681e
--- /dev/null
+++ b/static/development-bundle/docs/slider.html
@@ -0,0 +1,733 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Slider</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>The jQuery UI Slider plugin makes selected elements into sliders. There are various options such as multiple handles, and ranges. The handle can be moved with the mouse or the arrow keys.</p>
15<p>All callbacks receive two arguments: The original browser event and a prepared ui object, view below for a documentation of this object (if you name your second argument 'ui'):
16</p>
17<ul>
18 <li><b>ui.handle</b>: DOMElement - the current focused handle
19 <li><b>ui.value</b>: Integer - the current handle's value
20</ul>
21 </div>
22 <div id="overview-dependencies">
23 <h3>Dependencies</h3>
24 <ul>
25<li>UI Core</li>
26</ul>
27 </div>
28 <div id="overview-example">
29 <h3>Example</h3>
30 <div id="overview-example" class="example">
31<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
32<p><div id="demo" class="tabs-container" rel="">
33A simple jQuery UI Slider.<br />
34</p>
35<pre>$(&quot;#slider&quot;).slider();
36</pre>
37<p></div><div id="source" class="tabs-container">
38</p>
39<pre>&lt;!DOCTYPE html&gt;
40&lt;html&gt;
41&lt;head&gt;
42 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
43 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
44 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
45 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.slider.js&quot;&gt;&lt;/script&gt;
46 &lt;style type=&quot;text/css&quot;&gt;
47 #slider { margin: 10px; }
48 &lt;/style&gt;
49 &lt;script type="text/javascript"&gt;
50 $(document).ready(function(){
51 $(&quot;#slider&quot;).slider();
52 });
53 &lt;/script&gt;
54&lt;/head&gt;
55&lt;body style="font-size:62.5%;"&gt;
56
57&lt;div id=&quot;slider&quot;&gt;&lt;/div&gt;
58
59&lt;/body&gt;
60&lt;/html&gt;
61</pre>
62<p></div>
63</p><p></div>
64 </div>
65 </div>
66 <div id="options">
67 <h2 class="top-header">Options</h2>
68 <ul class="options-list">
69
70<li class="option" id="option-animate">
71 <div class="option-header">
72 <h3 class="option-name"><a href="#option-animate">animate</a></h3>
73 <dl>
74 <dt class="option-type-label">Type:</dt>
75 <dd class="option-type">Boolean</dd>
76
77 <dt class="option-default-label">Default:</dt>
78 <dd class="option-default">false</dd>
79
80 </dl>
81 </div>
82 <div class="option-description">
83 <p>Whether to slide handle smoothly when user click outside handle on the bar.</p>
84 </div>
85 <div class="option-examples">
86 <h4>Code examples</h4>
87 <dl class="option-examples-list">
88
89<dt>
90 Initialize a slider with the <code>animate</code> option specified.
91</dt>
92<dd>
93<pre><code>$('.selector').slider({ animate: true });</code></pre>
94</dd>
95
96
97<dt>
98 Get or set the <code>animate</code> option, after init.
99</dt>
100<dd>
101<pre><code>//getter
102var animate = $('.selector').slider('option', 'animate');
103//setter
104$('.selector').slider('option', 'animate', true);</code></pre>
105</dd>
106
107 </dl>
108 </div>
109</li>
110
111
112<li class="option" id="option-max">
113 <div class="option-header">
114 <h3 class="option-name"><a href="#option-max">max</a></h3>
115 <dl>
116 <dt class="option-type-label">Type:</dt>
117 <dd class="option-type">Number</dd>
118
119 <dt class="option-default-label">Default:</dt>
120 <dd class="option-default">100</dd>
121
122 </dl>
123 </div>
124 <div class="option-description">
125 <p>The maximum value of the slider.</p>
126 </div>
127 <div class="option-examples">
128 <h4>Code examples</h4>
129 <dl class="option-examples-list">
130
131<dt>
132 Initialize a slider with the <code>max</code> option specified.
133</dt>
134<dd>
135<pre><code>$('.selector').slider({ max: 7 });</code></pre>
136</dd>
137
138
139<dt>
140 Get or set the <code>max</code> option, after init.
141</dt>
142<dd>
143<pre><code>//getter
144var max = $('.selector').slider('option', 'max');
145//setter
146$('.selector').slider('option', 'max', 7);</code></pre>
147</dd>
148
149 </dl>
150 </div>
151</li>
152
153
154<li class="option" id="option-min">
155 <div class="option-header">
156 <h3 class="option-name"><a href="#option-min">min</a></h3>
157 <dl>
158 <dt class="option-type-label">Type:</dt>
159 <dd class="option-type">Number</dd>
160
161 <dt class="option-default-label">Default:</dt>
162 <dd class="option-default">0</dd>
163
164 </dl>
165 </div>
166 <div class="option-description">
167 <p>The minimum value of the slider.</p>
168 </div>
169 <div class="option-examples">
170 <h4>Code examples</h4>
171 <dl class="option-examples-list">
172
173<dt>
174 Initialize a slider with the <code>min</code> option specified.
175</dt>
176<dd>
177<pre><code>$('.selector').slider({ min: -7 });</code></pre>
178</dd>
179
180
181<dt>
182 Get or set the <code>min</code> option, after init.
183</dt>
184<dd>
185<pre><code>//getter
186var min = $('.selector').slider('option', 'min');
187//setter
188$('.selector').slider('option', 'min', -7);</code></pre>
189</dd>
190
191 </dl>
192 </div>
193</li>
194
195
196<li class="option" id="option-orientation">
197 <div class="option-header">
198 <h3 class="option-name"><a href="#option-orientation">orientation</a></h3>
199 <dl>
200 <dt class="option-type-label">Type:</dt>
201 <dd class="option-type">String</dd>
202
203 <dt class="option-default-label">Default:</dt>
204 <dd class="option-default">'auto'</dd>
205
206 </dl>
207 </div>
208 <div class="option-description">
209 <p>Normally you don't need to set this option because the plugin detects the slider orientation automatically. If the orientation is not correctly detected you can set this option to 'horizontal' or 'vertical'.</p>
210 </div>
211 <div class="option-examples">
212 <h4>Code examples</h4>
213 <dl class="option-examples-list">
214
215<dt>
216 Initialize a slider with the <code>orientation</code> option specified.
217</dt>
218<dd>
219<pre><code>$('.selector').slider({ orientation: 'vertical' });</code></pre>
220</dd>
221
222
223<dt>
224 Get or set the <code>orientation</code> option, after init.
225</dt>
226<dd>
227<pre><code>//getter
228var orientation = $('.selector').slider('option', 'orientation');
229//setter
230$('.selector').slider('option', 'orientation', 'vertical');</code></pre>
231</dd>
232
233 </dl>
234 </div>
235</li>
236
237
238<li class="option" id="option-range">
239 <div class="option-header">
240 <h3 class="option-name"><a href="#option-range">range</a></h3>
241 <dl>
242 <dt class="option-type-label">Type:</dt>
243 <dd class="option-type">Boolean, String</dd>
244
245 <dt class="option-default-label">Default:</dt>
246 <dd class="option-default">false</dd>
247
248 </dl>
249 </div>
250 <div class="option-description">
251 <p>If set to true, the slider will detect if you have two handles and create a stylable range element between these two. Two other possible values are 'min' and 'max'. A min range goes from the slider min to one handle. A max range goes from one handle to the slider max.</p>
252 </div>
253 <div class="option-examples">
254 <h4>Code examples</h4>
255 <dl class="option-examples-list">
256
257<dt>
258 Initialize a slider with the <code>range</code> option specified.
259</dt>
260<dd>
261<pre><code>$('.selector').slider({ range: 'min' });</code></pre>
262</dd>
263
264
265<dt>
266 Get or set the <code>range</code> option, after init.
267</dt>
268<dd>
269<pre><code>//getter
270var range = $('.selector').slider('option', 'range');
271//setter
272$('.selector').slider('option', 'range', 'min');</code></pre>
273</dd>
274
275 </dl>
276 </div>
277</li>
278
279
280<li class="option" id="option-step">
281 <div class="option-header">
282 <h3 class="option-name"><a href="#option-step">step</a></h3>
283 <dl>
284 <dt class="option-type-label">Type:</dt>
285 <dd class="option-type">Number</dd>
286
287 <dt class="option-default-label">Default:</dt>
288 <dd class="option-default">1</dd>
289
290 </dl>
291 </div>
292 <div class="option-description">
293 <p>Determines the size or amount of each interval or step the slider takes between min and max. The full specified value range of the slider (max - min) needs to be evenly divisible by the step.</p>
294 </div>
295 <div class="option-examples">
296 <h4>Code examples</h4>
297 <dl class="option-examples-list">
298
299<dt>
300 Initialize a slider with the <code>step</code> option specified.
301</dt>
302<dd>
303<pre><code>$('.selector').slider({ step: 5 });</code></pre>
304</dd>
305
306
307<dt>
308 Get or set the <code>step</code> option, after init.
309</dt>
310<dd>
311<pre><code>//getter
312var step = $('.selector').slider('option', 'step');
313//setter
314$('.selector').slider('option', 'step', 5);</code></pre>
315</dd>
316
317 </dl>
318 </div>
319</li>
320
321
322<li class="option" id="option-value">
323 <div class="option-header">
324 <h3 class="option-name"><a href="#option-value">value</a></h3>
325 <dl>
326 <dt class="option-type-label">Type:</dt>
327 <dd class="option-type">Number</dd>
328
329 <dt class="option-default-label">Default:</dt>
330 <dd class="option-default">0</dd>
331
332 </dl>
333 </div>
334 <div class="option-description">
335 <p>Determines the value of the slider, if there's only one handle. If there is more than one handle, determines the value of the first handle.</p>
336 </div>
337 <div class="option-examples">
338 <h4>Code examples</h4>
339 <dl class="option-examples-list">
340
341<dt>
342 Initialize a slider with the <code>value</code> option specified.
343</dt>
344<dd>
345<pre><code>$('.selector').slider({ value: 37 });</code></pre>
346</dd>
347
348
349<dt>
350 Get or set the <code>value</code> option, after init.
351</dt>
352<dd>
353<pre><code>//getter
354var value = $('.selector').slider('option', 'value');
355//setter
356$('.selector').slider('option', 'value', 37);</code></pre>
357</dd>
358
359 </dl>
360 </div>
361</li>
362
363
364<li class="option" id="option-values">
365 <div class="option-header">
366 <h3 class="option-name"><a href="#option-values">values</a></h3>
367 <dl>
368 <dt class="option-type-label">Type:</dt>
369 <dd class="option-type">Array</dd>
370
371 <dt class="option-default-label">Default:</dt>
372 <dd class="option-default">null</dd>
373
374 </dl>
375 </div>
376 <div class="option-description">
377 <p>This option can be used to specify multiple handles. If range is set to true, the length of 'values' should be 2.</p>
378 </div>
379 <div class="option-examples">
380 <h4>Code examples</h4>
381 <dl class="option-examples-list">
382
383<dt>
384 Initialize a slider with the <code>values</code> option specified.
385</dt>
386<dd>
387<pre><code>$('.selector').slider({ values: [1,5,9] });</code></pre>
388</dd>
389
390
391<dt>
392 Get or set the <code>values</code> option, after init.
393</dt>
394<dd>
395<pre><code>//getter
396var values = $('.selector').slider('option', 'values');
397//setter
398$('.selector').slider('option', 'values', [1,5,9]);</code></pre>
399</dd>
400
401 </dl>
402 </div>
403</li>
404
405 </ul>
406 </div>
407 <div id="events">
408 <h2 class="top-header">Events</h2>
409 <ul class="events-list">
410
411<li class="event" id="event-start">
412 <div class="event-header">
413 <h3 class="event-name"><a href="#event-start">start</a></h3>
414 <dl>
415 <dt class="event-type-label">Type:</dt>
416 <dd class="event-type">slidestart</dd>
417 </dl>
418 </div>
419 <div class="event-description">
420 <p>This event is triggered when the user starts sliding.</p>
421 </div>
422 <div class="event-examples">
423 <h4>Code examples</h4>
424 <dl class="event-examples-list">
425
426<dt>
427 Supply a callback function to handle the <code>start</code> event as an init option.
428</dt>
429<dd>
430<pre><code>$('.selector').slider({
431 start: function(event, ui) { ... }
432});</code></pre>
433</dd>
434
435
436<dt>
437 Bind to the <code>start</code> event by type: <code>slidestart</code>.
438</dt>
439<dd>
440<pre><code>$('.selector').bind('slidestart', function(event, ui) {
441 ...
442});</code></pre>
443</dd>
444
445 </dl>
446 </div>
447</li>
448
449
450<li class="event" id="event-slide">
451 <div class="event-header">
452 <h3 class="event-name"><a href="#event-slide">slide</a></h3>
453 <dl>
454 <dt class="event-type-label">Type:</dt>
455 <dd class="event-type">slide</dd>
456 </dl>
457 </div>
458 <div class="event-description">
459 <p>This event is triggered on every mouse move during slide. Use ui.value (single-handled sliders) to obtain the value of the current handle, $(..).slider('value', index) to get another handles' value.
460</p><p>Return false in order to prevent a slide, based on ui.value.</p>
461 </div>
462 <div class="event-examples">
463 <h4>Code examples</h4>
464 <dl class="event-examples-list">
465
466<dt>
467 Supply a callback function to handle the <code>slide</code> event as an init option.
468</dt>
469<dd>
470<pre><code>$('.selector').slider({
471 slide: function(event, ui) { ... }
472});</code></pre>
473</dd>
474
475
476<dt>
477 Bind to the <code>slide</code> event by type: <code>slide</code>.
478</dt>
479<dd>
480<pre><code>$('.selector').bind('slide', function(event, ui) {
481 ...
482});</code></pre>
483</dd>
484
485 </dl>
486 </div>
487</li>
488
489
490<li class="event" id="event-change">
491 <div class="event-header">
492 <h3 class="event-name"><a href="#event-change">change</a></h3>
493 <dl>
494 <dt class="event-type-label">Type:</dt>
495 <dd class="event-type">slidechange</dd>
496 </dl>
497 </div>
498 <div class="event-description">
499 <p>This event is triggered on slide stop, or if the value is changed programmatically (by the <code>value</code> method). Takes arguments event and ui. Use event.orginalEvent to detect whether the value changed by mouse, keyboard, or programmatically. Use ui.value (single-handled sliders) to obtain the value of the current handle, $(this).slider('values', index) to get another handle's value.</p>
500 </div>
501 <div class="event-examples">
502 <h4>Code examples</h4>
503 <dl class="event-examples-list">
504
505<dt>
506 Supply a callback function to handle the <code>change</code> event as an init option.
507</dt>
508<dd>
509<pre><code>$('.selector').slider({
510 change: function(event, ui) { ... }
511});</code></pre>
512</dd>
513
514
515<dt>
516 Bind to the <code>change</code> event by type: <code>slidechange</code>.
517</dt>
518<dd>
519<pre><code>$('.selector').bind('slidechange', function(event, ui) {
520 ...
521});</code></pre>
522</dd>
523
524 </dl>
525 </div>
526</li>
527
528
529<li class="event" id="event-stop">
530 <div class="event-header">
531 <h3 class="event-name"><a href="#event-stop">stop</a></h3>
532 <dl>
533 <dt class="event-type-label">Type:</dt>
534 <dd class="event-type">slidestop</dd>
535 </dl>
536 </div>
537 <div class="event-description">
538 <p>This event is triggered when the user stops sliding.</p>
539 </div>
540 <div class="event-examples">
541 <h4>Code examples</h4>
542 <dl class="event-examples-list">
543
544<dt>
545 Supply a callback function to handle the <code>stop</code> event as an init option.
546</dt>
547<dd>
548<pre><code>$('.selector').slider({
549 stop: function(event, ui) { ... }
550});</code></pre>
551</dd>
552
553
554<dt>
555 Bind to the <code>stop</code> event by type: <code>slidestop</code>.
556</dt>
557<dd>
558<pre><code>$('.selector').bind('slidestop', function(event, ui) {
559 ...
560});</code></pre>
561</dd>
562
563 </dl>
564 </div>
565</li>
566
567 </ul>
568 </div>
569 <div id="methods">
570 <h2 class="top-header">Methods</h2>
571 <ul class="methods-list">
572
573<li class="method" id="method-destroy">
574 <div class="method-header">
575 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
576 <dl>
577 <dt class="method-signature-label">Signature:</dt>
578 <dd class="method-signature">.slider( 'destroy'
579
580
581
582
583
584
585
586)</dd>
587 </dl>
588 </div>
589 <div class="method-description">
590 <p>Remove the slider functionality completely. This will return the element back to its pre-init state.</p>
591 </div>
592</li>
593
594
595<li class="method" id="method-disable">
596 <div class="method-header">
597 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
598 <dl>
599 <dt class="method-signature-label">Signature:</dt>
600 <dd class="method-signature">.slider( 'disable'
601
602
603
604
605
606
607
608)</dd>
609 </dl>
610 </div>
611 <div class="method-description">
612 <p>Disable the slider.</p>
613 </div>
614</li>
615
616
617<li class="method" id="method-enable">
618 <div class="method-header">
619 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
620 <dl>
621 <dt class="method-signature-label">Signature:</dt>
622 <dd class="method-signature">.slider( 'enable'
623
624
625
626
627
628
629
630)</dd>
631 </dl>
632 </div>
633 <div class="method-description">
634 <p>Enable the slider.</p>
635 </div>
636</li>
637
638
639<li class="method" id="method-option">
640 <div class="method-header">
641 <h3 class="method-name"><a href="#method-option">option</a></h3>
642 <dl>
643 <dt class="method-signature-label">Signature:</dt>
644 <dd class="method-signature">.slider( 'option'
645
646, optionName
647
648, <span class="optional">[</span>value<span class="optional">] </span>
649
650
651
652)</dd>
653 </dl>
654 </div>
655 <div class="method-description">
656 <p>Get or set any slider option. If no value is specified, will act as a getter.</p>
657 </div>
658</li>
659
660
661<li class="method" id="method-value">
662 <div class="method-header">
663 <h3 class="method-name"><a href="#method-value">value</a></h3>
664 <dl>
665 <dt class="method-signature-label">Signature:</dt>
666 <dd class="method-signature">.slider( 'value'
667
668, <span class="optional">[</span>value<span class="optional">] </span>
669
670
671
672
673
674)</dd>
675 </dl>
676 </div>
677 <div class="method-description">
678 <p>Gets or sets the value of the slider. For single handle sliders.</p>
679 </div>
680</li>
681
682
683<li class="method" id="method-values">
684 <div class="method-header">
685 <h3 class="method-name"><a href="#method-values">values</a></h3>
686 <dl>
687 <dt class="method-signature-label">Signature:</dt>
688 <dd class="method-signature">.slider( 'values'
689
690, index
691
692, <span class="optional">[</span>value<span class="optional">] </span>
693
694
695
696)</dd>
697 </dl>
698 </div>
699 <div class="method-description">
700 <p>Gets or sets the values of the slider. For multiple handle or range sliders.</p>
701 </div>
702</li>
703
704 </ul>
705 </div>
706 <div id="theming">
707 <h2 class="top-header">Theming</h2>
708 <p>The jQuery UI Slider plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
709</p>
710 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.slider.css stylesheet that can be modified. These classes are highlighed in bold below.
711</p>
712
713 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
714 &lt;div class=&quot;ui-slider<strong> ui-slider-horizontal</strong> ui-widget ui-widget-content ui-corner-all&quot;&gt;<br />
715&nbsp;&nbsp;&nbsp;&lt;a style=&quot;left: 0%;&quot; class=&quot;<strong>ui-slider-handle</strong> ui-state-default ui-corner-all&quot; href=&quot;#&quot;&gt;&lt;/a&gt;<br />
716&lt;/div&gt;<br />
717 <p class="theme-note">
718 <strong>
719 Note: This is a sample of markup generated by the slider plugin, not markup you should use to create a slider. The only markup needed for that is &lt;div&gt;&lt;div&gt;.
720 </strong>
721 </p>
722
723 </div>
724</div>
725
726</p><!--
727Pre-expand include size: 30277 bytes
728Post-expand include size: 46114 bytes
729Template argument size: 25048 bytes
730Maximum: 2097152 bytes
731-->
732
733<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3349-1!1!0!!en!2 and timestamp 20090604112222 -->
diff --git a/static/development-bundle/docs/sortable.html b/static/development-bundle/docs/sortable.html
new file mode 100644
index 0000000..6ed114b
--- /dev/null
+++ b/static/development-bundle/docs/sortable.html
@@ -0,0 +1,1818 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Sortable</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>The jQuery UI Sortable plugin makes selected elements sortable by dragging with the mouse.</p>
15<p>All callbacks receive two arguments: The original browser event and a prepared ui object, view below for a documentation of this object (if you name your second argument 'ui'):</p>
16<ul>
17<li><b>ui.helper</b> - the current helper element (most often a clone of the item)</li>
18<li><b>ui.position</b> - current position of the helper</li>
19<li><b>ui.offset</b> - current absolute position of the helper</li>
20<li><b>ui.item</b> - the current dragged element</li>
21<li><b>ui.placeholder</b> - the placeholder (if you defined one)</li>
22<li><b>ui.sender</b> - the sortable where the item comes from (only exists if you move from one connected list to another)</li>
23</ul>
24 </div>
25 <div id="overview-dependencies">
26 <h3>Dependencies</h3>
27 <ul>
28<li>UI Core</li>
29</ul>
30 </div>
31 <div id="overview-example">
32 <h3>Example</h3>
33 <div id="overview-example" class="example">
34<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
35<p><div id="demo" class="tabs-container" rel="100">
36A simple jQuery UI Sortable.<br />
37</p>
38<pre>$(&quot;#sortable&quot;).sortable();
39</pre>
40<p></div><div id="source" class="tabs-container">
41</p>
42<pre>&lt;!DOCTYPE html&gt;
43&lt;html&gt;
44&lt;head&gt;
45 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
46 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
47 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
48 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.sortable.js&quot;&gt;&lt;/script&gt;
49 &lt;script type="text/javascript"&gt;
50 $(document).ready(function(){
51 $(&quot;#sortable&quot;).sortable();
52 });
53 &lt;/script&gt;
54&lt;/head&gt;
55&lt;body style="font-size:62.5%;"&gt;
56
57&lt;div id=&quot;sortable&quot;&gt;&lt;/div&gt;
58
59&lt;/body&gt;
60&lt;/html&gt;
61</pre>
62<p></div>
63</p><p></div>
64 </div>
65 </div>
66 <div id="options">
67 <h2 class="top-header">Options</h2>
68 <ul class="options-list">
69
70<li class="option" id="option-appendTo">
71 <div class="option-header">
72 <h3 class="option-name"><a href="#option-appendTo">appendTo</a></h3>
73 <dl>
74 <dt class="option-type-label">Type:</dt>
75 <dd class="option-type">String</dd>
76
77 <dt class="option-default-label">Default:</dt>
78 <dd class="option-default">'parent'</dd>
79
80 </dl>
81 </div>
82 <div class="option-description">
83 <p>Defines where the helper that moves with the mouse is being appended to during the drag (for example, to resolve overlap/zIndex issues).</p>
84 </div>
85 <div class="option-examples">
86 <h4>Code examples</h4>
87 <dl class="option-examples-list">
88
89<dt>
90 Initialize a sortable with the <code>appendTo</code> option specified.
91</dt>
92<dd>
93<pre><code>$('.selector').sortable({ appendTo: 'body' });</code></pre>
94</dd>
95
96
97<dt>
98 Get or set the <code>appendTo</code> option, after init.
99</dt>
100<dd>
101<pre><code>//getter
102var appendTo = $('.selector').sortable('option', 'appendTo');
103//setter
104$('.selector').sortable('option', 'appendTo', 'body');</code></pre>
105</dd>
106
107 </dl>
108 </div>
109</li>
110
111
112<li class="option" id="option-axis">
113 <div class="option-header">
114 <h3 class="option-name"><a href="#option-axis">axis</a></h3>
115 <dl>
116 <dt class="option-type-label">Type:</dt>
117 <dd class="option-type">String</dd>
118
119 <dt class="option-default-label">Default:</dt>
120 <dd class="option-default">false</dd>
121
122 </dl>
123 </div>
124 <div class="option-description">
125 <p>If defined, the items can be dragged only horizontally or vertically. Possible values:'x', 'y'.</p>
126 </div>
127 <div class="option-examples">
128 <h4>Code examples</h4>
129 <dl class="option-examples-list">
130
131<dt>
132 Initialize a sortable with the <code>axis</code> option specified.
133</dt>
134<dd>
135<pre><code>$('.selector').sortable({ axis: 'x' });</code></pre>
136</dd>
137
138
139<dt>
140 Get or set the <code>axis</code> option, after init.
141</dt>
142<dd>
143<pre><code>//getter
144var axis = $('.selector').sortable('option', 'axis');
145//setter
146$('.selector').sortable('option', 'axis', 'x');</code></pre>
147</dd>
148
149 </dl>
150 </div>
151</li>
152
153
154<li class="option" id="option-cancel">
155 <div class="option-header">
156 <h3 class="option-name"><a href="#option-cancel">cancel</a></h3>
157 <dl>
158 <dt class="option-type-label">Type:</dt>
159 <dd class="option-type">Selector</dd>
160
161 <dt class="option-default-label">Default:</dt>
162 <dd class="option-default">':input,button'</dd>
163
164 </dl>
165 </div>
166 <div class="option-description">
167 <p>Prevents sorting if you start on elements matching the selector.</p>
168 </div>
169 <div class="option-examples">
170 <h4>Code examples</h4>
171 <dl class="option-examples-list">
172
173<dt>
174 Initialize a sortable with the <code>cancel</code> option specified.
175</dt>
176<dd>
177<pre><code>$('.selector').sortable({ cancel: 'button' });</code></pre>
178</dd>
179
180
181<dt>
182 Get or set the <code>cancel</code> option, after init.
183</dt>
184<dd>
185<pre><code>//getter
186var cancel = $('.selector').sortable('option', 'cancel');
187//setter
188$('.selector').sortable('option', 'cancel', 'button');</code></pre>
189</dd>
190
191 </dl>
192 </div>
193</li>
194
195
196<li class="option" id="option-connectWith">
197 <div class="option-header">
198 <h3 class="option-name"><a href="#option-connectWith">connectWith</a></h3>
199 <dl>
200 <dt class="option-type-label">Type:</dt>
201 <dd class="option-type">Selector</dd>
202
203 <dt class="option-default-label">Default:</dt>
204 <dd class="option-default">false</dd>
205
206 </dl>
207 </div>
208 <div class="option-description">
209 <p>Takes a jQuery selector with items that also have sortables applied. If used, the sortable is now connected to the other one-way, so you can drag from this sortable to the other.</p>
210 </div>
211 <div class="option-examples">
212 <h4>Code examples</h4>
213 <dl class="option-examples-list">
214
215<dt>
216 Initialize a sortable with the <code>connectWith</code> option specified.
217</dt>
218<dd>
219<pre><code>$('.selector').sortable({ connectWith: '.otherlist' });</code></pre>
220</dd>
221
222
223<dt>
224 Get or set the <code>connectWith</code> option, after init.
225</dt>
226<dd>
227<pre><code>//getter
228var connectWith = $('.selector').sortable('option', 'connectWith');
229//setter
230$('.selector').sortable('option', 'connectWith', '.otherlist');</code></pre>
231</dd>
232
233 </dl>
234 </div>
235</li>
236
237
238<li class="option" id="option-containment">
239 <div class="option-header">
240 <h3 class="option-name"><a href="#option-containment">containment</a></h3>
241 <dl>
242 <dt class="option-type-label">Type:</dt>
243 <dd class="option-type">Element, String, Selector</dd>
244
245 <dt class="option-default-label">Default:</dt>
246 <dd class="option-default">false</dd>
247
248 </dl>
249 </div>
250 <div class="option-description">
251 <p>Constrains dragging to within the bounds of the specified element - can be a DOM element, 'parent', 'document', 'window', or a jQuery selector.</p>
252 </div>
253 <div class="option-examples">
254 <h4>Code examples</h4>
255 <dl class="option-examples-list">
256
257<dt>
258 Initialize a sortable with the <code>containment</code> option specified.
259</dt>
260<dd>
261<pre><code>$('.selector').sortable({ containment: 'parent' });</code></pre>
262</dd>
263
264
265<dt>
266 Get or set the <code>containment</code> option, after init.
267</dt>
268<dd>
269<pre><code>//getter
270var containment = $('.selector').sortable('option', 'containment');
271//setter
272$('.selector').sortable('option', 'containment', 'parent');</code></pre>
273</dd>
274
275 </dl>
276 </div>
277</li>
278
279
280<li class="option" id="option-cursor">
281 <div class="option-header">
282 <h3 class="option-name"><a href="#option-cursor">cursor</a></h3>
283 <dl>
284 <dt class="option-type-label">Type:</dt>
285 <dd class="option-type">String</dd>
286
287 <dt class="option-default-label">Default:</dt>
288 <dd class="option-default">'auto'</dd>
289
290 </dl>
291 </div>
292 <div class="option-description">
293 <p>Defines the cursor that is being shown while sorting.</p>
294 </div>
295 <div class="option-examples">
296 <h4>Code examples</h4>
297 <dl class="option-examples-list">
298
299<dt>
300 Initialize a sortable with the <code>cursor</code> option specified.
301</dt>
302<dd>
303<pre><code>$('.selector').sortable({ cursor: 'crosshair' });</code></pre>
304</dd>
305
306
307<dt>
308 Get or set the <code>cursor</code> option, after init.
309</dt>
310<dd>
311<pre><code>//getter
312var cursor = $('.selector').sortable('option', 'cursor');
313//setter
314$('.selector').sortable('option', 'cursor', 'crosshair');</code></pre>
315</dd>
316
317 </dl>
318 </div>
319</li>
320
321
322<li class="option" id="option-cursorAt">
323 <div class="option-header">
324 <h3 class="option-name"><a href="#option-cursorAt">cursorAt</a></h3>
325 <dl>
326 <dt class="option-type-label">Type:</dt>
327 <dd class="option-type">Object</dd>
328
329 <dt class="option-default-label">Default:</dt>
330 <dd class="option-default">false</dd>
331
332 </dl>
333 </div>
334 <div class="option-description">
335 <p>Moves the sorting element or helper so the cursor always appears to drag from the same position. Coordinates can be given as a hash using a combination of one or two keys: <code>{ top, left, right, bottom }</code>.</p>
336 </div>
337 <div class="option-examples">
338 <h4>Code examples</h4>
339 <dl class="option-examples-list">
340
341<dt>
342 Initialize a sortable with the <code>cursorAt</code> option specified.
343</dt>
344<dd>
345<pre><code>$('.selector').sortable({ cursorAt: 'top' });</code></pre>
346</dd>
347
348
349<dt>
350 Get or set the <code>cursorAt</code> option, after init.
351</dt>
352<dd>
353<pre><code>//getter
354var cursorAt = $('.selector').sortable('option', 'cursorAt');
355//setter
356$('.selector').sortable('option', 'cursorAt', 'top');</code></pre>
357</dd>
358
359 </dl>
360 </div>
361</li>
362
363
364<li class="option" id="option-delay">
365 <div class="option-header">
366 <h3 class="option-name"><a href="#option-delay">delay</a></h3>
367 <dl>
368 <dt class="option-type-label">Type:</dt>
369 <dd class="option-type">Integer</dd>
370
371 <dt class="option-default-label">Default:</dt>
372 <dd class="option-default">0</dd>
373
374 </dl>
375 </div>
376 <div class="option-description">
377 <p>Time in milliseconds to define when the sorting should start. It helps preventing unwanted drags when clicking on an element.</p>
378 </div>
379 <div class="option-examples">
380 <h4>Code examples</h4>
381 <dl class="option-examples-list">
382
383<dt>
384 Initialize a sortable with the <code>delay</code> option specified.
385</dt>
386<dd>
387<pre><code>$('.selector').sortable({ delay: 500 });</code></pre>
388</dd>
389
390
391<dt>
392 Get or set the <code>delay</code> option, after init.
393</dt>
394<dd>
395<pre><code>//getter
396var delay = $('.selector').sortable('option', 'delay');
397//setter
398$('.selector').sortable('option', 'delay', 500);</code></pre>
399</dd>
400
401 </dl>
402 </div>
403</li>
404
405
406<li class="option" id="option-distance">
407 <div class="option-header">
408 <h3 class="option-name"><a href="#option-distance">distance</a></h3>
409 <dl>
410 <dt class="option-type-label">Type:</dt>
411 <dd class="option-type">Integer</dd>
412
413 <dt class="option-default-label">Default:</dt>
414 <dd class="option-default">1</dd>
415
416 </dl>
417 </div>
418 <div class="option-description">
419 <p>Tolerance, in pixels, for when sorting should start. If specified, sorting will not start until after mouse is dragged beyond distance. Can be used to allow for clicks on elements within a handle.</p>
420 </div>
421 <div class="option-examples">
422 <h4>Code examples</h4>
423 <dl class="option-examples-list">
424
425<dt>
426 Initialize a sortable with the <code>distance</code> option specified.
427</dt>
428<dd>
429<pre><code>$('.selector').sortable({ distance: 30 });</code></pre>
430</dd>
431
432
433<dt>
434 Get or set the <code>distance</code> option, after init.
435</dt>
436<dd>
437<pre><code>//getter
438var distance = $('.selector').sortable('option', 'distance');
439//setter
440$('.selector').sortable('option', 'distance', 30);</code></pre>
441</dd>
442
443 </dl>
444 </div>
445</li>
446
447
448<li class="option" id="option-dropOnEmpty">
449 <div class="option-header">
450 <h3 class="option-name"><a href="#option-dropOnEmpty">dropOnEmpty</a></h3>
451 <dl>
452 <dt class="option-type-label">Type:</dt>
453 <dd class="option-type">Boolean</dd>
454
455 <dt class="option-default-label">Default:</dt>
456 <dd class="option-default">true</dd>
457
458 </dl>
459 </div>
460 <div class="option-description">
461 <p>If empty allows for an item to be dropped from a linked selectable.</p>
462 </div>
463 <div class="option-examples">
464 <h4>Code examples</h4>
465 <dl class="option-examples-list">
466
467<dt>
468 Initialize a sortable with the <code>dropOnEmpty</code> option specified.
469</dt>
470<dd>
471<pre><code>$('.selector').sortable({ dropOnEmpty: false });</code></pre>
472</dd>
473
474
475<dt>
476 Get or set the <code>dropOnEmpty</code> option, after init.
477</dt>
478<dd>
479<pre><code>//getter
480var dropOnEmpty = $('.selector').sortable('option', 'dropOnEmpty');
481//setter
482$('.selector').sortable('option', 'dropOnEmpty', false);</code></pre>
483</dd>
484
485 </dl>
486 </div>
487</li>
488
489
490<li class="option" id="option-forceHelperSize">
491 <div class="option-header">
492 <h3 class="option-name"><a href="#option-forceHelperSize">forceHelperSize</a></h3>
493 <dl>
494 <dt class="option-type-label">Type:</dt>
495 <dd class="option-type">Boolean</dd>
496
497 <dt class="option-default-label">Default:</dt>
498 <dd class="option-default">false</dd>
499
500 </dl>
501 </div>
502 <div class="option-description">
503 <p>If true, forces the helper to have a size.</p>
504 </div>
505 <div class="option-examples">
506 <h4>Code examples</h4>
507 <dl class="option-examples-list">
508
509<dt>
510 Initialize a sortable with the <code>forceHelperSize</code> option specified.
511</dt>
512<dd>
513<pre><code>$('.selector').sortable({ forceHelperSize: true });</code></pre>
514</dd>
515
516
517<dt>
518 Get or set the <code>forceHelperSize</code> option, after init.
519</dt>
520<dd>
521<pre><code>//getter
522var forceHelperSize = $('.selector').sortable('option', 'forceHelperSize');
523//setter
524$('.selector').sortable('option', 'forceHelperSize', true);</code></pre>
525</dd>
526
527 </dl>
528 </div>
529</li>
530
531
532<li class="option" id="option-forcePlaceholderSize">
533 <div class="option-header">
534 <h3 class="option-name"><a href="#option-forcePlaceholderSize">forcePlaceholderSize</a></h3>
535 <dl>
536 <dt class="option-type-label">Type:</dt>
537 <dd class="option-type">Boolean</dd>
538
539 <dt class="option-default-label">Default:</dt>
540 <dd class="option-default">false</dd>
541
542 </dl>
543 </div>
544 <div class="option-description">
545 <p>If true, forces the placeholder to have a size.</p>
546 </div>
547 <div class="option-examples">
548 <h4>Code examples</h4>
549 <dl class="option-examples-list">
550
551<dt>
552 Initialize a sortable with the <code>forcePlaceholderSize</code> option specified.
553</dt>
554<dd>
555<pre><code>$('.selector').sortable({ forcePlaceholderSize: true });</code></pre>
556</dd>
557
558
559<dt>
560 Get or set the <code>forcePlaceholderSize</code> option, after init.
561</dt>
562<dd>
563<pre><code>//getter
564var forcePlaceholderSize = $('.selector').sortable('option', 'forcePlaceholderSize');
565//setter
566$('.selector').sortable('option', 'forcePlaceholderSize', true);</code></pre>
567</dd>
568
569 </dl>
570 </div>
571</li>
572
573
574<li class="option" id="option-grid">
575 <div class="option-header">
576 <h3 class="option-name"><a href="#option-grid">grid</a></h3>
577 <dl>
578 <dt class="option-type-label">Type:</dt>
579 <dd class="option-type">Array</dd>
580
581 <dt class="option-default-label">Default:</dt>
582 <dd class="option-default">false</dd>
583
584 </dl>
585 </div>
586 <div class="option-description">
587 <p>Snaps the sorting element or helper to a grid, every x and y pixels. Array values: [x, y]</p>
588 </div>
589 <div class="option-examples">
590 <h4>Code examples</h4>
591 <dl class="option-examples-list">
592
593<dt>
594 Initialize a sortable with the <code>grid</code> option specified.
595</dt>
596<dd>
597<pre><code>$('.selector').sortable({ grid: [50, 20] });</code></pre>
598</dd>
599
600
601<dt>
602 Get or set the <code>grid</code> option, after init.
603</dt>
604<dd>
605<pre><code>//getter
606var grid = $('.selector').sortable('option', 'grid');
607//setter
608$('.selector').sortable('option', 'grid', [50, 20]);</code></pre>
609</dd>
610
611 </dl>
612 </div>
613</li>
614
615
616<li class="option" id="option-handle">
617 <div class="option-header">
618 <h3 class="option-name"><a href="#option-handle">handle</a></h3>
619 <dl>
620 <dt class="option-type-label">Type:</dt>
621 <dd class="option-type">Selector, Element</dd>
622
623 <dt class="option-default-label">Default:</dt>
624 <dd class="option-default">false</dd>
625
626 </dl>
627 </div>
628 <div class="option-description">
629 <p>Restricts sort start click to the specified element.</p>
630 </div>
631 <div class="option-examples">
632 <h4>Code examples</h4>
633 <dl class="option-examples-list">
634
635<dt>
636 Initialize a sortable with the <code>handle</code> option specified.
637</dt>
638<dd>
639<pre><code>$('.selector').sortable({ handle: 'h2' });</code></pre>
640</dd>
641
642
643<dt>
644 Get or set the <code>handle</code> option, after init.
645</dt>
646<dd>
647<pre><code>//getter
648var handle = $('.selector').sortable('option', 'handle');
649//setter
650$('.selector').sortable('option', 'handle', 'h2');</code></pre>
651</dd>
652
653 </dl>
654 </div>
655</li>
656
657
658<li class="option" id="option-helper">
659 <div class="option-header">
660 <h3 class="option-name"><a href="#option-helper">helper</a></h3>
661 <dl>
662 <dt class="option-type-label">Type:</dt>
663 <dd class="option-type">String, Function</dd>
664
665 <dt class="option-default-label">Default:</dt>
666 <dd class="option-default">'original'</dd>
667
668 </dl>
669 </div>
670 <div class="option-description">
671 <p>Allows for a helper element to be used for dragging display. The supplied function receives the event and the element being sorted, and should return a DOMElement to be used as a custom proxy helper. Possible values: 'original', 'clone'</p>
672 </div>
673 <div class="option-examples">
674 <h4>Code examples</h4>
675 <dl class="option-examples-list">
676
677<dt>
678 Initialize a sortable with the <code>helper</code> option specified.
679</dt>
680<dd>
681<pre><code>$('.selector').sortable({ helper: 'clone' });</code></pre>
682</dd>
683
684
685<dt>
686 Get or set the <code>helper</code> option, after init.
687</dt>
688<dd>
689<pre><code>//getter
690var helper = $('.selector').sortable('option', 'helper');
691//setter
692$('.selector').sortable('option', 'helper', 'clone');</code></pre>
693</dd>
694
695 </dl>
696 </div>
697</li>
698
699
700<li class="option" id="option-items">
701 <div class="option-header">
702 <h3 class="option-name"><a href="#option-items">items</a></h3>
703 <dl>
704 <dt class="option-type-label">Type:</dt>
705 <dd class="option-type">Selector</dd>
706
707 <dt class="option-default-label">Default:</dt>
708 <dd class="option-default">'&gt; *'</dd>
709
710 </dl>
711 </div>
712 <div class="option-description">
713 <p>Specifies which items inside the element should be sortable.</p>
714 </div>
715 <div class="option-examples">
716 <h4>Code examples</h4>
717 <dl class="option-examples-list">
718
719<dt>
720 Initialize a sortable with the <code>items</code> option specified.
721</dt>
722<dd>
723<pre><code>$('.selector').sortable({ items: 'li' });</code></pre>
724</dd>
725
726
727<dt>
728 Get or set the <code>items</code> option, after init.
729</dt>
730<dd>
731<pre><code>//getter
732var items = $('.selector').sortable('option', 'items');
733//setter
734$('.selector').sortable('option', 'items', 'li');</code></pre>
735</dd>
736
737 </dl>
738 </div>
739</li>
740
741
742<li class="option" id="option-opacity">
743 <div class="option-header">
744 <h3 class="option-name"><a href="#option-opacity">opacity</a></h3>
745 <dl>
746 <dt class="option-type-label">Type:</dt>
747 <dd class="option-type">Float</dd>
748
749 <dt class="option-default-label">Default:</dt>
750 <dd class="option-default">false</dd>
751
752 </dl>
753 </div>
754 <div class="option-description">
755 <p>Defines the opacity of the helper while sorting. From 0.01 to 1</p>
756 </div>
757 <div class="option-examples">
758 <h4>Code examples</h4>
759 <dl class="option-examples-list">
760
761<dt>
762 Initialize a sortable with the <code>opacity</code> option specified.
763</dt>
764<dd>
765<pre><code>$('.selector').sortable({ opacity: 0.6 });</code></pre>
766</dd>
767
768
769<dt>
770 Get or set the <code>opacity</code> option, after init.
771</dt>
772<dd>
773<pre><code>//getter
774var opacity = $('.selector').sortable('option', 'opacity');
775//setter
776$('.selector').sortable('option', 'opacity', 0.6);</code></pre>
777</dd>
778
779 </dl>
780 </div>
781</li>
782
783
784<li class="option" id="option-placeholder">
785 <div class="option-header">
786 <h3 class="option-name"><a href="#option-placeholder">placeholder</a></h3>
787 <dl>
788 <dt class="option-type-label">Type:</dt>
789 <dd class="option-type">String</dd>
790
791 <dt class="option-default-label">Default:</dt>
792 <dd class="option-default">false</dd>
793
794 </dl>
795 </div>
796 <div class="option-description">
797 <p>Class that gets applied to the otherwise white space.</p>
798 </div>
799 <div class="option-examples">
800 <h4>Code examples</h4>
801 <dl class="option-examples-list">
802
803<dt>
804 Initialize a sortable with the <code>placeholder</code> option specified.
805</dt>
806<dd>
807<pre><code>$('.selector').sortable({ placeholder: 'ui-state-highlight' });</code></pre>
808</dd>
809
810
811<dt>
812 Get or set the <code>placeholder</code> option, after init.
813</dt>
814<dd>
815<pre><code>//getter
816var placeholder = $('.selector').sortable('option', 'placeholder');
817//setter
818$('.selector').sortable('option', 'placeholder', 'ui-state-highlight');</code></pre>
819</dd>
820
821 </dl>
822 </div>
823</li>
824
825
826<li class="option" id="option-revert">
827 <div class="option-header">
828 <h3 class="option-name"><a href="#option-revert">revert</a></h3>
829 <dl>
830 <dt class="option-type-label">Type:</dt>
831 <dd class="option-type">Boolean</dd>
832
833 <dt class="option-default-label">Default:</dt>
834 <dd class="option-default">false</dd>
835
836 </dl>
837 </div>
838 <div class="option-description">
839 <p>If set to true, the item will be reverted to its new DOM position with a smooth animation.</p>
840 </div>
841 <div class="option-examples">
842 <h4>Code examples</h4>
843 <dl class="option-examples-list">
844
845<dt>
846 Initialize a sortable with the <code>revert</code> option specified.
847</dt>
848<dd>
849<pre><code>$('.selector').sortable({ revert: true });</code></pre>
850</dd>
851
852
853<dt>
854 Get or set the <code>revert</code> option, after init.
855</dt>
856<dd>
857<pre><code>//getter
858var revert = $('.selector').sortable('option', 'revert');
859//setter
860$('.selector').sortable('option', 'revert', true);</code></pre>
861</dd>
862
863 </dl>
864 </div>
865</li>
866
867
868<li class="option" id="option-scroll">
869 <div class="option-header">
870 <h3 class="option-name"><a href="#option-scroll">scroll</a></h3>
871 <dl>
872 <dt class="option-type-label">Type:</dt>
873 <dd class="option-type">Boolean</dd>
874
875 <dt class="option-default-label">Default:</dt>
876 <dd class="option-default">true</dd>
877
878 </dl>
879 </div>
880 <div class="option-description">
881 <p>If set to true, the page scrolls when coming to an edge.</p>
882 </div>
883 <div class="option-examples">
884 <h4>Code examples</h4>
885 <dl class="option-examples-list">
886
887<dt>
888 Initialize a sortable with the <code>scroll</code> option specified.
889</dt>
890<dd>
891<pre><code>$('.selector').sortable({ scroll: false });</code></pre>
892</dd>
893
894
895<dt>
896 Get or set the <code>scroll</code> option, after init.
897</dt>
898<dd>
899<pre><code>//getter
900var scroll = $('.selector').sortable('option', 'scroll');
901//setter
902$('.selector').sortable('option', 'scroll', false);</code></pre>
903</dd>
904
905 </dl>
906 </div>
907</li>
908
909
910<li class="option" id="option-scrollSensitivity">
911 <div class="option-header">
912 <h3 class="option-name"><a href="#option-scrollSensitivity">scrollSensitivity</a></h3>
913 <dl>
914 <dt class="option-type-label">Type:</dt>
915 <dd class="option-type">Integer</dd>
916
917 <dt class="option-default-label">Default:</dt>
918 <dd class="option-default">20</dd>
919
920 </dl>
921 </div>
922 <div class="option-description">
923 <p>Defines how near the mouse must be to an edge to start scrolling.</p>
924 </div>
925 <div class="option-examples">
926 <h4>Code examples</h4>
927 <dl class="option-examples-list">
928
929<dt>
930 Initialize a sortable with the <code>scrollSensitivity</code> option specified.
931</dt>
932<dd>
933<pre><code>$('.selector').sortable({ scrollSensitivity: 40 });</code></pre>
934</dd>
935
936
937<dt>
938 Get or set the <code>scrollSensitivity</code> option, after init.
939</dt>
940<dd>
941<pre><code>//getter
942var scrollSensitivity = $('.selector').sortable('option', 'scrollSensitivity');
943//setter
944$('.selector').sortable('option', 'scrollSensitivity', 40);</code></pre>
945</dd>
946
947 </dl>
948 </div>
949</li>
950
951
952<li class="option" id="option-scrollSpeed">
953 <div class="option-header">
954 <h3 class="option-name"><a href="#option-scrollSpeed">scrollSpeed</a></h3>
955 <dl>
956 <dt class="option-type-label">Type:</dt>
957 <dd class="option-type">Integer</dd>
958
959 <dt class="option-default-label">Default:</dt>
960 <dd class="option-default">20</dd>
961
962 </dl>
963 </div>
964 <div class="option-description">
965 <p>The speed at which the window should scroll once the mouse pointer gets within the scrollSensitivity distance.</p>
966 </div>
967 <div class="option-examples">
968 <h4>Code examples</h4>
969 <dl class="option-examples-list">
970
971<dt>
972 Initialize a sortable with the <code>scrollSpeed</code> option specified.
973</dt>
974<dd>
975<pre><code>$('.selector').sortable({ scrollSpeed: 40 });</code></pre>
976</dd>
977
978
979<dt>
980 Get or set the <code>scrollSpeed</code> option, after init.
981</dt>
982<dd>
983<pre><code>//getter
984var scrollSpeed = $('.selector').sortable('option', 'scrollSpeed');
985//setter
986$('.selector').sortable('option', 'scrollSpeed', 40);</code></pre>
987</dd>
988
989 </dl>
990 </div>
991</li>
992
993
994<li class="option" id="option-tolerance">
995 <div class="option-header">
996 <h3 class="option-name"><a href="#option-tolerance">tolerance</a></h3>
997 <dl>
998 <dt class="option-type-label">Type:</dt>
999 <dd class="option-type">String</dd>
1000
1001 <dt class="option-default-label">Default:</dt>
1002 <dd class="option-default">'intersect'</dd>
1003
1004 </dl>
1005 </div>
1006 <div class="option-description">
1007 <p>This is the way the reordering behaves during drag. Possible values: 'intersect', 'pointer'. In some setups, 'pointer' is more natural.
1008</p>
1009<ul>
1010<li><b>intersect</b>: draggable overlaps the droppable at least 50%</li>
1011<li><b>pointer</b>: mouse pointer overlaps the droppable</li>
1012</ul>
1013<p></p>
1014 </div>
1015 <div class="option-examples">
1016 <h4>Code examples</h4>
1017 <dl class="option-examples-list">
1018
1019<dt>
1020 Initialize a sortable with the <code>tolerance</code> option specified.
1021</dt>
1022<dd>
1023<pre><code>$('.selector').sortable({ tolerance: 'pointer' });</code></pre>
1024</dd>
1025
1026
1027<dt>
1028 Get or set the <code>tolerance</code> option, after init.
1029</dt>
1030<dd>
1031<pre><code>//getter
1032var tolerance = $('.selector').sortable('option', 'tolerance');
1033//setter
1034$('.selector').sortable('option', 'tolerance', 'pointer');</code></pre>
1035</dd>
1036
1037 </dl>
1038 </div>
1039</li>
1040
1041
1042<li class="option" id="option-zIndex">
1043 <div class="option-header">
1044 <h3 class="option-name"><a href="#option-zIndex">zIndex</a></h3>
1045 <dl>
1046 <dt class="option-type-label">Type:</dt>
1047 <dd class="option-type">Integer</dd>
1048
1049 <dt class="option-default-label">Default:</dt>
1050 <dd class="option-default">1000</dd>
1051
1052 </dl>
1053 </div>
1054 <div class="option-description">
1055 <p>Z-index for element/helper while being sorted.</p>
1056 </div>
1057 <div class="option-examples">
1058 <h4>Code examples</h4>
1059 <dl class="option-examples-list">
1060
1061<dt>
1062 Initialize a sortable with the <code>zIndex</code> option specified.
1063</dt>
1064<dd>
1065<pre><code>$('.selector').sortable({ zIndex: 5 });</code></pre>
1066</dd>
1067
1068
1069<dt>
1070 Get or set the <code>zIndex</code> option, after init.
1071</dt>
1072<dd>
1073<pre><code>//getter
1074var zIndex = $('.selector').sortable('option', 'zIndex');
1075//setter
1076$('.selector').sortable('option', 'zIndex', 5);</code></pre>
1077</dd>
1078
1079 </dl>
1080 </div>
1081</li>
1082
1083 </ul>
1084 </div>
1085 <div id="events">
1086 <h2 class="top-header">Events</h2>
1087 <ul class="events-list">
1088
1089<li class="event" id="event-start">
1090 <div class="event-header">
1091 <h3 class="event-name"><a href="#event-start">start</a></h3>
1092 <dl>
1093 <dt class="event-type-label">Type:</dt>
1094 <dd class="event-type">sortstart</dd>
1095 </dl>
1096 </div>
1097 <div class="event-description">
1098 <p>This event is triggered when sorting starts.</p>
1099 </div>
1100 <div class="event-examples">
1101 <h4>Code examples</h4>
1102 <dl class="event-examples-list">
1103
1104<dt>
1105 Supply a callback function to handle the <code>start</code> event as an init option.
1106</dt>
1107<dd>
1108<pre><code>$('.selector').sortable({
1109 start: function(event, ui) { ... }
1110});</code></pre>
1111</dd>
1112
1113
1114<dt>
1115 Bind to the <code>start</code> event by type: <code>sortstart</code>.
1116</dt>
1117<dd>
1118<pre><code>$('.selector').bind('sortstart', function(event, ui) {
1119 ...
1120});</code></pre>
1121</dd>
1122
1123 </dl>
1124 </div>
1125</li>
1126
1127
1128<li class="event" id="event-sort">
1129 <div class="event-header">
1130 <h3 class="event-name"><a href="#event-sort">sort</a></h3>
1131 <dl>
1132 <dt class="event-type-label">Type:</dt>
1133 <dd class="event-type">sort</dd>
1134 </dl>
1135 </div>
1136 <div class="event-description">
1137 <p>This event is triggered during sorting.</p>
1138 </div>
1139 <div class="event-examples">
1140 <h4>Code examples</h4>
1141 <dl class="event-examples-list">
1142
1143<dt>
1144 Supply a callback function to handle the <code>sort</code> event as an init option.
1145</dt>
1146<dd>
1147<pre><code>$('.selector').sortable({
1148 sort: function(event, ui) { ... }
1149});</code></pre>
1150</dd>
1151
1152
1153<dt>
1154 Bind to the <code>sort</code> event by type: <code>sort</code>.
1155</dt>
1156<dd>
1157<pre><code>$('.selector').bind('sort', function(event, ui) {
1158 ...
1159});</code></pre>
1160</dd>
1161
1162 </dl>
1163 </div>
1164</li>
1165
1166
1167<li class="event" id="event-change">
1168 <div class="event-header">
1169 <h3 class="event-name"><a href="#event-change">change</a></h3>
1170 <dl>
1171 <dt class="event-type-label">Type:</dt>
1172 <dd class="event-type">sortchange</dd>
1173 </dl>
1174 </div>
1175 <div class="event-description">
1176 <p>This event is triggered during sorting, but only when the DOM position has changed.</p>
1177 </div>
1178 <div class="event-examples">
1179 <h4>Code examples</h4>
1180 <dl class="event-examples-list">
1181
1182<dt>
1183 Supply a callback function to handle the <code>change</code> event as an init option.
1184</dt>
1185<dd>
1186<pre><code>$('.selector').sortable({
1187 change: function(event, ui) { ... }
1188});</code></pre>
1189</dd>
1190
1191
1192<dt>
1193 Bind to the <code>change</code> event by type: <code>sortchange</code>.
1194</dt>
1195<dd>
1196<pre><code>$('.selector').bind('sortchange', function(event, ui) {
1197 ...
1198});</code></pre>
1199</dd>
1200
1201 </dl>
1202 </div>
1203</li>
1204
1205
1206<li class="event" id="event-beforeStop">
1207 <div class="event-header">
1208 <h3 class="event-name"><a href="#event-beforeStop">beforeStop</a></h3>
1209 <dl>
1210 <dt class="event-type-label">Type:</dt>
1211 <dd class="event-type">sortbeforeStop</dd>
1212 </dl>
1213 </div>
1214 <div class="event-description">
1215 <p>This event is triggered when sorting stops, but when the placeholder/helper is still available.</p>
1216 </div>
1217 <div class="event-examples">
1218 <h4>Code examples</h4>
1219 <dl class="event-examples-list">
1220
1221<dt>
1222 Supply a callback function to handle the <code>beforeStop</code> event as an init option.
1223</dt>
1224<dd>
1225<pre><code>$('.selector').sortable({
1226 beforeStop: function(event, ui) { ... }
1227});</code></pre>
1228</dd>
1229
1230
1231<dt>
1232 Bind to the <code>beforeStop</code> event by type: <code>sortbeforeStop</code>.
1233</dt>
1234<dd>
1235<pre><code>$('.selector').bind('sortbeforeStop', function(event, ui) {
1236 ...
1237});</code></pre>
1238</dd>
1239
1240 </dl>
1241 </div>
1242</li>
1243
1244
1245<li class="event" id="event-stop">
1246 <div class="event-header">
1247 <h3 class="event-name"><a href="#event-stop">stop</a></h3>
1248 <dl>
1249 <dt class="event-type-label">Type:</dt>
1250 <dd class="event-type">sortstop</dd>
1251 </dl>
1252 </div>
1253 <div class="event-description">
1254 <p>This event is triggered when sorting has stopped.</p>
1255 </div>
1256 <div class="event-examples">
1257 <h4>Code examples</h4>
1258 <dl class="event-examples-list">
1259
1260<dt>
1261 Supply a callback function to handle the <code>stop</code> event as an init option.
1262</dt>
1263<dd>
1264<pre><code>$('.selector').sortable({
1265 stop: function(event, ui) { ... }
1266});</code></pre>
1267</dd>
1268
1269
1270<dt>
1271 Bind to the <code>stop</code> event by type: <code>sortstop</code>.
1272</dt>
1273<dd>
1274<pre><code>$('.selector').bind('sortstop', function(event, ui) {
1275 ...
1276});</code></pre>
1277</dd>
1278
1279 </dl>
1280 </div>
1281</li>
1282
1283
1284<li class="event" id="event-update">
1285 <div class="event-header">
1286 <h3 class="event-name"><a href="#event-update">update</a></h3>
1287 <dl>
1288 <dt class="event-type-label">Type:</dt>
1289 <dd class="event-type">sortupdate</dd>
1290 </dl>
1291 </div>
1292 <div class="event-description">
1293 <p>This event is triggered when the user stopped sorting and the DOM position has changed.</p>
1294 </div>
1295 <div class="event-examples">
1296 <h4>Code examples</h4>
1297 <dl class="event-examples-list">
1298
1299<dt>
1300 Supply a callback function to handle the <code>update</code> event as an init option.
1301</dt>
1302<dd>
1303<pre><code>$('.selector').sortable({
1304 update: function(event, ui) { ... }
1305});</code></pre>
1306</dd>
1307
1308
1309<dt>
1310 Bind to the <code>update</code> event by type: <code>sortupdate</code>.
1311</dt>
1312<dd>
1313<pre><code>$('.selector').bind('sortupdate', function(event, ui) {
1314 ...
1315});</code></pre>
1316</dd>
1317
1318 </dl>
1319 </div>
1320</li>
1321
1322
1323<li class="event" id="event-receive">
1324 <div class="event-header">
1325 <h3 class="event-name"><a href="#event-receive">receive</a></h3>
1326 <dl>
1327 <dt class="event-type-label">Type:</dt>
1328 <dd class="event-type">sortreceive</dd>
1329 </dl>
1330 </div>
1331 <div class="event-description">
1332 <p>This event is triggered when a connected sortable list has received an item from another list.</p>
1333 </div>
1334 <div class="event-examples">
1335 <h4>Code examples</h4>
1336 <dl class="event-examples-list">
1337
1338<dt>
1339 Supply a callback function to handle the <code>receive</code> event as an init option.
1340</dt>
1341<dd>
1342<pre><code>$('.selector').sortable({
1343 receive: function(event, ui) { ... }
1344});</code></pre>
1345</dd>
1346
1347
1348<dt>
1349 Bind to the <code>receive</code> event by type: <code>sortreceive</code>.
1350</dt>
1351<dd>
1352<pre><code>$('.selector').bind('sortreceive', function(event, ui) {
1353 ...
1354});</code></pre>
1355</dd>
1356
1357 </dl>
1358 </div>
1359</li>
1360
1361
1362<li class="event" id="event-remove">
1363 <div class="event-header">
1364 <h3 class="event-name"><a href="#event-remove">remove</a></h3>
1365 <dl>
1366 <dt class="event-type-label">Type:</dt>
1367 <dd class="event-type">sortremove</dd>
1368 </dl>
1369 </div>
1370 <div class="event-description">
1371 <p>This event is triggered when a sortable item has been dragged out from the list and into another.</p>
1372 </div>
1373 <div class="event-examples">
1374 <h4>Code examples</h4>
1375 <dl class="event-examples-list">
1376
1377<dt>
1378 Supply a callback function to handle the <code>remove</code> event as an init option.
1379</dt>
1380<dd>
1381<pre><code>$('.selector').sortable({
1382 remove: function(event, ui) { ... }
1383});</code></pre>
1384</dd>
1385
1386
1387<dt>
1388 Bind to the <code>remove</code> event by type: <code>sortremove</code>.
1389</dt>
1390<dd>
1391<pre><code>$('.selector').bind('sortremove', function(event, ui) {
1392 ...
1393});</code></pre>
1394</dd>
1395
1396 </dl>
1397 </div>
1398</li>
1399
1400
1401<li class="event" id="event-over">
1402 <div class="event-header">
1403 <h3 class="event-name"><a href="#event-over">over</a></h3>
1404 <dl>
1405 <dt class="event-type-label">Type:</dt>
1406 <dd class="event-type">sortover</dd>
1407 </dl>
1408 </div>
1409 <div class="event-description">
1410 <p>This event is triggered when a sortable item is moved into a connected list.</p>
1411 </div>
1412 <div class="event-examples">
1413 <h4>Code examples</h4>
1414 <dl class="event-examples-list">
1415
1416<dt>
1417 Supply a callback function to handle the <code>over</code> event as an init option.
1418</dt>
1419<dd>
1420<pre><code>$('.selector').sortable({
1421 over: function(event, ui) { ... }
1422});</code></pre>
1423</dd>
1424
1425
1426<dt>
1427 Bind to the <code>over</code> event by type: <code>sortover</code>.
1428</dt>
1429<dd>
1430<pre><code>$('.selector').bind('sortover', function(event, ui) {
1431 ...
1432});</code></pre>
1433</dd>
1434
1435 </dl>
1436 </div>
1437</li>
1438
1439
1440<li class="event" id="event-out">
1441 <div class="event-header">
1442 <h3 class="event-name"><a href="#event-out">out</a></h3>
1443 <dl>
1444 <dt class="event-type-label">Type:</dt>
1445 <dd class="event-type">sortout</dd>
1446 </dl>
1447 </div>
1448 <div class="event-description">
1449 <p>This event is triggered when a sortable item is moved away from a connected list.</p>
1450 </div>
1451 <div class="event-examples">
1452 <h4>Code examples</h4>
1453 <dl class="event-examples-list">
1454
1455<dt>
1456 Supply a callback function to handle the <code>out</code> event as an init option.
1457</dt>
1458<dd>
1459<pre><code>$('.selector').sortable({
1460 out: function(event, ui) { ... }
1461});</code></pre>
1462</dd>
1463
1464
1465<dt>
1466 Bind to the <code>out</code> event by type: <code>sortout</code>.
1467</dt>
1468<dd>
1469<pre><code>$('.selector').bind('sortout', function(event, ui) {
1470 ...
1471});</code></pre>
1472</dd>
1473
1474 </dl>
1475 </div>
1476</li>
1477
1478
1479<li class="event" id="event-activate">
1480 <div class="event-header">
1481 <h3 class="event-name"><a href="#event-activate">activate</a></h3>
1482 <dl>
1483 <dt class="event-type-label">Type:</dt>
1484 <dd class="event-type">sortactivate</dd>
1485 </dl>
1486 </div>
1487 <div class="event-description">
1488 <p>This event is triggered when using connected lists, every connected list on drag start receives it.</p>
1489 </div>
1490 <div class="event-examples">
1491 <h4>Code examples</h4>
1492 <dl class="event-examples-list">
1493
1494<dt>
1495 Supply a callback function to handle the <code>activate</code> event as an init option.
1496</dt>
1497<dd>
1498<pre><code>$('.selector').sortable({
1499 activate: function(event, ui) { ... }
1500});</code></pre>
1501</dd>
1502
1503
1504<dt>
1505 Bind to the <code>activate</code> event by type: <code>sortactivate</code>.
1506</dt>
1507<dd>
1508<pre><code>$('.selector').bind('sortactivate', function(event, ui) {
1509 ...
1510});</code></pre>
1511</dd>
1512
1513 </dl>
1514 </div>
1515</li>
1516
1517
1518<li class="event" id="event-deactivate">
1519 <div class="event-header">
1520 <h3 class="event-name"><a href="#event-deactivate">deactivate</a></h3>
1521 <dl>
1522 <dt class="event-type-label">Type:</dt>
1523 <dd class="event-type">sortdeactivate</dd>
1524 </dl>
1525 </div>
1526 <div class="event-description">
1527 <p>This event is triggered when sorting was stopped, is propagated to all possible connected lists.</p>
1528 </div>
1529 <div class="event-examples">
1530 <h4>Code examples</h4>
1531 <dl class="event-examples-list">
1532
1533<dt>
1534 Supply a callback function to handle the <code>deactivate</code> event as an init option.
1535</dt>
1536<dd>
1537<pre><code>$('.selector').sortable({
1538 deactivate: function(event, ui) { ... }
1539});</code></pre>
1540</dd>
1541
1542
1543<dt>
1544 Bind to the <code>deactivate</code> event by type: <code>sortdeactivate</code>.
1545</dt>
1546<dd>
1547<pre><code>$('.selector').bind('sortdeactivate', function(event, ui) {
1548 ...
1549});</code></pre>
1550</dd>
1551
1552 </dl>
1553 </div>
1554</li>
1555
1556 </ul>
1557 </div>
1558 <div id="methods">
1559 <h2 class="top-header">Methods</h2>
1560 <ul class="methods-list">
1561
1562<li class="method" id="method-destroy">
1563 <div class="method-header">
1564 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
1565 <dl>
1566 <dt class="method-signature-label">Signature:</dt>
1567 <dd class="method-signature">.sortable( 'destroy'
1568
1569
1570
1571
1572
1573
1574
1575)</dd>
1576 </dl>
1577 </div>
1578 <div class="method-description">
1579 <p>Remove the sortable functionality completely. This will return the element back to its pre-init state.</p>
1580 </div>
1581</li>
1582
1583
1584<li class="method" id="method-disable">
1585 <div class="method-header">
1586 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
1587 <dl>
1588 <dt class="method-signature-label">Signature:</dt>
1589 <dd class="method-signature">.sortable( 'disable'
1590
1591
1592
1593
1594
1595
1596
1597)</dd>
1598 </dl>
1599 </div>
1600 <div class="method-description">
1601 <p>Disable the sortable.</p>
1602 </div>
1603</li>
1604
1605
1606<li class="method" id="method-enable">
1607 <div class="method-header">
1608 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
1609 <dl>
1610 <dt class="method-signature-label">Signature:</dt>
1611 <dd class="method-signature">.sortable( 'enable'
1612
1613
1614
1615
1616
1617
1618
1619)</dd>
1620 </dl>
1621 </div>
1622 <div class="method-description">
1623 <p>Enable the sortable.</p>
1624 </div>
1625</li>
1626
1627
1628<li class="method" id="method-option">
1629 <div class="method-header">
1630 <h3 class="method-name"><a href="#method-option">option</a></h3>
1631 <dl>
1632 <dt class="method-signature-label">Signature:</dt>
1633 <dd class="method-signature">.sortable( 'option'
1634
1635, optionName
1636
1637, <span class="optional">[</span>value<span class="optional">] </span>
1638
1639
1640
1641)</dd>
1642 </dl>
1643 </div>
1644 <div class="method-description">
1645 <p>Get or set any sortable option. If no value is specified, will act as a getter.</p>
1646 </div>
1647</li>
1648
1649
1650<li class="method" id="method-serialize">
1651 <div class="method-header">
1652 <h3 class="method-name"><a href="#method-serialize">serialize</a></h3>
1653 <dl>
1654 <dt class="method-signature-label">Signature:</dt>
1655 <dd class="method-signature">.sortable( 'serialize'
1656
1657, <span class="optional">[</span>options<span class="optional">] </span>
1658
1659
1660
1661
1662
1663)</dd>
1664 </dl>
1665 </div>
1666 <div class="method-description">
1667 <p>Serializes the sortable's item id's into a form/ajax submittable string. Calling this method produces a hash that can be appended to any url to easily submit a new item order back to the server.
1668</p><p>It works by default by looking at the id of each item in the format 'setname_number', and it spits out a hash like "setname[]=number&amp;setname[]=number".
1669</p><p>You can also give in a option hash as second argument to custom define how the function works. The possible options are: 'key' (replaces part1[] with whatever you want), 'attribute' (test another attribute than 'id') and 'expression' (use your own regexp).
1670</p><p>If serialize returns an empty string, make sure the id attributes include an underscore. They must be in the form: "set_number" For example, a 3 element list with id attributes foo_1, foo_5, foo_2 will serialize to foo[]=1&amp;foo[]=5&amp;foo[]=2. You can use an underscore, equal sign or hyphen to separate the set and number. For example foo=1 or foo-1 or foo_1 all serialize to foo[]=1.</p>
1671 </div>
1672</li>
1673
1674
1675<li class="method" id="method-toArray">
1676 <div class="method-header">
1677 <h3 class="method-name"><a href="#method-toArray">toArray</a></h3>
1678 <dl>
1679 <dt class="method-signature-label">Signature:</dt>
1680 <dd class="method-signature">.sortable( 'toArray'
1681
1682
1683
1684
1685
1686
1687
1688)</dd>
1689 </dl>
1690 </div>
1691 <div class="method-description">
1692 <p>Serializes the sortable's item id's into an array of string. If you have
1693</p>
1694<pre>
1695&lt;ul id=&quot;a_sortable&quot;&gt;&lt;br&gt;
1696&lt;li id=&quot;hello&quot;&gt;Hello&lt;/li&gt;&lt;br&gt;
1697&lt;li id=&quot;goodbye&quot;&gt;Good bye&lt;/li&gt;&lt;br&gt;
1698&lt;/ul&gt;
1699</pre>
1700<p>and do
1701</p>
1702<pre>var result = $('#a_sortable').sortable('toArray');</pre>
1703<p>then
1704</p>
1705<pre>result[0] will contain &quot;hello&quot; and result[1] will contain &quot;goodbye&quot;.</pre></p>
1706 </div>
1707</li>
1708
1709<p>
1710<li class="method" id="method-refresh">
1711 <div class="method-header">
1712 <h3 class="method-name"><a href="#method-refresh">refresh</a></h3>
1713 <dl>
1714 <dt class="method-signature-label">Signature:</dt>
1715 <dd class="method-signature">.sortable( 'refresh'
1716
1717
1718
1719
1720
1721
1722
1723)</dd>
1724 </dl>
1725 </div>
1726 <div class="method-description">
1727 <p>Refresh the sortable items. Custom trigger the reloading of all sortable items, causing new items to be recognized.</p>
1728 </div>
1729</li>
1730
1731
1732<li class="method" id="method-refreshPositions">
1733 <div class="method-header">
1734 <h3 class="method-name"><a href="#method-refreshPositions">refreshPositions</a></h3>
1735 <dl>
1736 <dt class="method-signature-label">Signature:</dt>
1737 <dd class="method-signature">.sortable( 'refreshPositions'
1738
1739
1740
1741
1742
1743
1744
1745)</dd>
1746 </dl>
1747 </div>
1748 <div class="method-description">
1749 <p>Refresh the cached positions of the sortables' items. Calling this method refreshes the cached item positions of all sortables. This is usually done automatically by the script and slows down performance. Use wisely.</p>
1750 </div>
1751</li>
1752
1753
1754<li class="method" id="method-cancel">
1755 <div class="method-header">
1756 <h3 class="method-name"><a href="#method-cancel">cancel</a></h3>
1757 <dl>
1758 <dt class="method-signature-label">Signature:</dt>
1759 <dd class="method-signature">.sortable( 'cancel'
1760
1761
1762
1763
1764
1765
1766
1767)</dd>
1768 </dl>
1769 </div>
1770 <div class="method-description">
1771 <p>Cancels a change in the current sortable and reverts it back to how it was before the current sort started. Useful in the stop and receive callback functions.
1772</p><p>If the sortable item is not being moved from one connected sortable to another:
1773</p>
1774<pre>$(this).sortable('cancel');</pre>
1775<p>will cancel the change.
1776</p><p>If the sortable item is being moved from one connected sortable to another:
1777</p>
1778<pre>$(ui.sender).sortable('cancel');</pre>
1779<p>will cancel the change. Useful in the 'receive' callback.</p>
1780 </div>
1781</li>
1782
1783 </ul>
1784 </div>
1785 <div id="theming">
1786 <h2 class="top-header">Theming</h2>
1787 <p>The jQuery UI Sortable plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
1788</p>
1789 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.sortable.css stylesheet that can be modified. These classes are highlighed in bold below.
1790</p>
1791
1792 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
1793 &lt;ul class=&quot;<strong>ui-sortable</strong>&quot;&gt;<br />
1794&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
1795&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
1796&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
1797&lt;/ul&gt;
1798 <p class="theme-note">
1799 <strong>
1800 Note: This is a sample of markup generated by the sortable plugin, not markup you should use to create a sortable. The only markup needed for that is <br />&lt;ul&gt;<br />
1801&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
1802&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
1803&#160;&#160;&#160;&lt;li&gt;&lt;/li&gt;<br />
1804&lt;/ul&gt;.
1805 </strong>
1806 </p>
1807
1808 </div>
1809</div>
1810
1811</p><!--
1812Pre-expand include size: 68721 bytes
1813Post-expand include size: 120119 bytes
1814Template argument size: 70108 bytes
1815Maximum: 2097152 bytes
1816-->
1817
1818<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3344-1!1!0!!en!2 and timestamp 20090604112215 -->
diff --git a/static/development-bundle/docs/switchClass.html b/static/development-bundle/docs/switchClass.html
new file mode 100644
index 0000000..b2e1b83
--- /dev/null
+++ b/static/development-bundle/docs/switchClass.html
@@ -0,0 +1,128 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI switchClass</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/switchClass?section=1" title="Edit section: switchClass( remove, add, [duration] )">edit</a>]</div><a name="switchClass.28_remove.2C_add.2C_.5Bduration.5D_.29"></a><h3>switchClass( remove, add, <span class="optional">[</span>duration<span class="optional">]</span> )</h3>
12<p>Switches from the class defined in the first argument to the class defined as second argument, using an optional transition.</p>
13 </div>
14 <div id="overview-dependencies">
15 <h3>Dependencies</h3>
16 <ul>
17<li>Effects Core</li>
18</ul>
19 </div>
20 <div id="overview-example">
21 <h3>Example</h3>
22 <div id="overview-example" class="example">
23<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
24<p><div id="demo" class="tabs-container" rel="170">
25Switch the class 'highlight' to 'blue' when a paragraph is clicked with a one second transition.<br />
26</p>
27<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
28 $(this).<strong class="selflink">switchClass</strong>(&quot;highlight&quot;, &quot;blue&quot;, 1000);
29 });
30</pre>
31<p></div><div id="source" class="tabs-container">
32</p>
33<pre>&lt;!DOCTYPE html&gt;
34&lt;html&gt;
35&lt;head&gt;
36 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
37 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
38 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
39&lt;style type=&quot;text/css&quot;&gt;
40 p { margin: 4px; font-size:16px; font-weight:bolder;
41 cursor:pointer; }
42 .blue { background: blue; }
43 .highlight { background:yellow; }
44&lt;/style&gt;
45 &lt;script type="text/javascript"&gt;
46 $(document).ready(function(){
47 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
48 $(this).<strong class="selflink">switchClass</strong>(&quot;highlight&quot;, &quot;blue&quot;, 1000);
49 });
50 });
51 &lt;/script&gt;
52&lt;/head&gt;
53&lt;body style="font-size:62.5%;"&gt;
54
55&lt;p class=&quot;highlight&quot;&gt;Click to switch&lt;/p&gt;
56&lt;p class=&quot;highlight&quot;&gt;to blue&lt;/p&gt;
57&lt;p class=&quot;highlight&quot;&gt;on these&lt;/p&gt;
58&lt;p class=&quot;highlight&quot;&gt;paragraphs&lt;/p&gt;
59
60&lt;/body&gt;
61&lt;/html&gt;
62</pre>
63<p></div>
64</p><p></div>
65 </div>
66 </div>
67 <div id="options">
68 <h2 class="top-header">Arguments</h2>
69 <ul class="options-list">
70
71<li class="option" id="option-remove">
72 <div class="option-header">
73 <h3 class="option-name"><a href="#option-remove">remove</a></h3>
74 <dl>
75 <dt class="option-type-label">Type:</dt>
76 <dd class="option-type">String</dd>
77
78 </dl>
79 </div>
80 <div class="option-description">
81 <p>The CSS class that will be removed.</p>
82 </div>
83</li>
84
85
86<li class="option" id="option-add">
87 <div class="option-header">
88 <h3 class="option-name"><a href="#option-add">add</a></h3>
89 <dl>
90 <dt class="option-type-label">Type:</dt>
91 <dd class="option-type">String</dd>
92
93 </dl>
94 </div>
95 <div class="option-description">
96 <p>The CSS class that will be added.</p>
97 </div>
98</li>
99
100
101<li class="option" id="option-duration">
102 <div class="option-header">
103 <h3 class="option-name"><a href="#option-duration">duration</a></h3>
104 <dl>
105 <dt class="option-type-label">Type:</dt>
106 <dd class="option-type">String, Number</dd>
107
108 <dt class="option-optional-label">Optional</dt>
109
110 </dl>
111 </div>
112 <div class="option-description">
113 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
114 </div>
115</li>
116
117 </ul>
118 </div>
119</div>
120
121</p><!--
122Pre-expand include size: 5655 bytes
123Post-expand include size: 7540 bytes
124Template argument size: 4741 bytes
125Maximum: 2097152 bytes
126-->
127
128<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2609-1!1!0!!en!2 and timestamp 20090604041109 -->
diff --git a/static/development-bundle/docs/tabs.html b/static/development-bundle/docs/tabs.html
new file mode 100644
index 0000000..b500cf5
--- /dev/null
+++ b/static/development-bundle/docs/tabs.html
@@ -0,0 +1,1426 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Options</a></li>
5<li><a href="#events">Events</a></li>
6<li><a href="#methods">Methods</a></li>
7<li><a href="#theming">Theming</a></li>
8</ul>
9<div class="UIAPIPlugin">
10 <h1>jQuery UI Tabs</h1>
11 <div id="overview">
12 <h2 class="top-header">Overview</h2>
13 <div id="overview-main">
14 <p>Tabs are generally used to break content into multiple sections that can be swapped to save space, much like an accordion.</p>
15<p>By default a tab widget will swap between tabbed sections onClick, but the events can be changed to onHover through an option. Tab content can be loaded via Ajax by setting an href on a tab.</p>
16<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
17<ul>
18<li class="toclevel-1"><a href="#Events"><span class="tocnumber">1</span> <span class="toctext">Events</span></a></li>
19<li class="toclevel-1"><a href="#Ajax_mode"><span class="tocnumber">2</span> <span class="toctext">Ajax mode</span></a>
20<ul>
21<li class="toclevel-2"><a href="#Back_button_and_bookmarking"><span class="tocnumber">2.1</span> <span class="toctext">Back button and bookmarking</span></a></li>
22</ul>
23</li>
24<li class="toclevel-1"><a href="#How_to..."><span class="tocnumber">3</span> <span class="toctext">How to...</span></a>
25<ul>
26<li class="toclevel-2"><a href="#...retrieve_the_index_of_the_currently_selected_tab"><span class="tocnumber">3.1</span> <span class="toctext">...retrieve the index of the currently selected tab</span></a></li>
27<li class="toclevel-2"><a href="#...open_links_in_the_current_tab_instead_of_leaving_the_page"><span class="tocnumber">3.2</span> <span class="toctext">...open links in the current tab instead of leaving the page</span></a></li>
28<li class="toclevel-2"><a href="#...select_a_tab_from_a_text_link_instead_of_clicking_a_tab_itself"><span class="tocnumber">3.3</span> <span class="toctext">...select a tab from a text link instead of clicking a tab itself</span></a></li>
29<li class="toclevel-2"><a href="#...prevent_switching_to_the_tab_on_click_depending_on_form_validation"><span class="tocnumber">3.4</span> <span class="toctext">...prevent switching to the tab on click depending on form validation</span></a></li>
30<li class="toclevel-2"><a href="#...immediately_select_a_just_added_tab"><span class="tocnumber">3.5</span> <span class="toctext">...immediately select a just added tab</span></a></li>
31<li class="toclevel-2"><a href="#...follow_a_tab.27s_URL_instead_of_loading_its_content_via_ajax"><span class="tocnumber">3.6</span> <span class="toctext">...follow a tab's URL instead of loading its content via ajax</span></a></li>
32<li class="toclevel-2"><a href="#...prevent_a_FOUC_.28Flash_of_Unstyled_Content.29_before_tabs_are_initialized"><span class="tocnumber">3.7</span> <span class="toctext">...prevent a FOUC (Flash of Unstyled Content) before tabs are initialized</span></a></li>
33</ul>
34</li>
35<li class="toclevel-1"><a href="#Why_does..."><span class="tocnumber">4</span> <span class="toctext">Why does...</span></a>
36<ul>
37<li class="toclevel-2"><a href="#...my_slider.2C_Google_Map.2C_sIFR_etc._not_work_when_placed_in_a_hidden_.28inactive.29_tab.3F"><span class="tocnumber">4.1</span> <span class="toctext">...my slider, Google Map, sIFR etc. not work when placed in a hidden (inactive) tab?</span></a></li>
38</ul>
39</li>
40</ul>
41</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
42<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=1" title="Template:UIAPIPlugin">edit</a>]</div><a name="Events"></a><h2>Events</h2>
43<p>A series of events fire when interacting with a tabs interface:
44</p>
45<ul><li> tabsselect, tabsload, tabsshow (in that order)
46</li><li> tabsadd, tabsremove
47</li><li> tabsenable, tabsdisable
48</li></ul>
49<p>Event binding example:
50</p>
51<pre>$('#example').bind('tabsselect', function(event, ui) {
52
53 // Objects available in the function context:
54 ui.tab // anchor element of the selected (clicked) tab
55 ui.panel // element, that contains the selected/clicked tab contents
56 ui.index // zero-based index of the selected (clicked) tab
57
58});</pre>
59<p>Note that if a handler for the tabsselect event returns false, the clicked tab will not become selected (useful for example if switching to the next tab requires a form validation).
60</p>
61<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=2" title="Template:UIAPIPlugin">edit</a>]</div><a name="Ajax_mode"></a><h2> Ajax mode </h2>
62<p>Tabs supports loading tab content via Ajax in an unobtrusive manner.
63</p><p>The HTML you need is slightly different from the one that is used for static tabs: A list of links pointing to existing resources (from where the content gets loaded) and no additional containers at all (unobtrusive!). The containers' markup is going to be created on the fly:
64</p>
65<pre>
66&lt;div id=&quot;example&quot;&gt;
67 &lt;ul&gt;
68 &lt;li&gt;&lt;a href=&quot;ahah_1.html&quot;&gt;&lt;span&gt;Content 1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
69 &lt;li&gt;&lt;a href=&quot;ahah_2.html&quot;&gt;&lt;span&gt;Content 2&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
70 &lt;li&gt;&lt;a href=&quot;ahah_3.html&quot;&gt;&lt;span&gt;Content 3&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
71 &lt;/ul&gt;
72&lt;/div&gt;
73</pre>
74<p>Obviously this degrades gracefully - the links, e.g. the content, will still be accessible with JavaScript disabled.
75</p><p>Note that if you wish to reuse an existing container, you
76could do so by matching a title attribute and the container's id:
77</p>
78<pre>
79&lt;li&gt;&lt;a href=&quot;hello/world.html&quot; title=&quot;Todo Overview&quot;&gt; ... &lt;/a&gt;&lt;/li&gt;
80</pre>
81<p>and a container like:
82</p>
83<pre>
84&lt;div id=&quot;Todo_Overview&quot;&gt; ... &lt;/div&gt;
85</pre>
86<p>(Note how white space is replaced with an underscore)
87</p><p>This is useful if you want a human readable hash in the URL instead of
88a cryptic generated one.
89</p>
90<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=3" title="Template:UIAPIPlugin">edit</a>]</div><a name="Back_button_and_bookmarking"></a><h3>Back button and bookmarking</h3>
91<p>Tabs 2 already supported this functionality, although the history plugin needs a rewrite first (it doesn't support Safari 3 and is in general a little inflexible) before it can be build back into the tabs. It is planned and Klaus is working on it whenever he finds the time. Actual bugs in the UI Tabs plugin itself always have higher priority though.
92</p>
93<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=4" title="Template:UIAPIPlugin">edit</a>]</div><a name="How_to..."></a><h2>How to...</h2>
94<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=5" title="Template:UIAPIPlugin">edit</a>]</div><a name="...retrieve_the_index_of_the_currently_selected_tab"></a><h3>...retrieve the index of the currently selected tab</h3>
95<pre>var $tabs = $('#example').tabs();
96var selected = $tabs.tabs('option', 'selected'); // =&gt; 0</pre>
97<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=6" title="Template:UIAPIPlugin">edit</a>]</div><a name="...open_links_in_the_current_tab_instead_of_leaving_the_page"></a><h3>...open links in the current tab instead of leaving the page</h3>
98<p>"Hijax" links after tab content has been loaded:
99</p>
100<pre>$('#example').tabs({
101 load: function(event, ui) {
102 $('a', ui.panel).click(function() {
103 $(ui.panel).load(this.href);
104 return false;
105 });
106 }
107});</pre>
108<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=7" title="Template:UIAPIPlugin">edit</a>]</div><a name="...select_a_tab_from_a_text_link_instead_of_clicking_a_tab_itself"></a><h3>...select a tab from a text link instead of clicking a tab itself</h3>
109<pre>var $tabs = $('#example').tabs(); // first tab selected
110
111$('#my-text-link').click(function() { // bind click event to link
112 $tabs.tabs('select', 2); // switch to third tab
113 return false;
114});</pre>
115<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=8" title="Template:UIAPIPlugin">edit</a>]</div><a name="...prevent_switching_to_the_tab_on_click_depending_on_form_validation"></a><h3>...prevent switching to the tab on click depending on form validation</h3>
116<p>Returning false in the tabs select handler prevents the clicked tab from becoming selected.
117</p>
118<pre>$('#example').tabs({
119 select: function(event, ui) {
120 var isValid = ... // form validation returning true or false
121 return isValid;
122 }
123});</pre>
124<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=9" title="Template:UIAPIPlugin">edit</a>]</div><a name="...immediately_select_a_just_added_tab"></a><h3>...immediately select a just added tab</h3>
125<pre>var $tabs = $('#example').tabs({
126 add: function(event, ui) {
127 $tabs.tabs('select', '#' + ui.panel.id);
128 }
129});</pre>
130<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=10" title="Template:UIAPIPlugin">edit</a>]</div><a name="...follow_a_tab.27s_URL_instead_of_loading_its_content_via_ajax"></a><h3>...follow a tab's URL instead of loading its content via ajax</h3>
131<p>Note that opening a tab in a new window is unexpected, e.g.
132inconsistent behaviour exposing a usablity problem (<a href="http://www.useit.com/alertbox/tabs.html" class="external free" title="http://www.useit.com/alertbox/tabs.html">http://www.useit.com/alertbox/tabs.html</a>).
133</p>
134<pre>$('#example').tabs({
135 select: function(event, ui) {
136 var url = $.data(ui.tab, 'load.tabs');
137 if( url ) {
138 location.href = url;
139 return false;
140 }
141 return true;
142 }
143});</pre>
144<p><br />
145</p>
146<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=11" title="Template:UIAPIPlugin">edit</a>]</div><a name="...prevent_a_FOUC_.28Flash_of_Unstyled_Content.29_before_tabs_are_initialized"></a><h3>...prevent a FOUC (Flash of Unstyled Content) before tabs are initialized</h3>
147<p>Add the necessary classes to hide an inactive tab panel to the HTML right away - note that this will <b>not</b> degrade gracefully with JavaScript being disabled:
148</p>
149<pre>&lt;div id=&quot;example&quot; class=&quot;ui-tabs&quot;&gt;
150 ...
151 &lt;div id=&quot;a-tab-panel&quot; class=&quot;ui-tabs-hide&quot;&gt; &lt;/div&gt;
152 ...
153&lt;/div&gt;</pre>
154<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=12" title="Template:UIAPIPlugin">edit</a>]</div><a name="Why_does..."></a><h2>Why does...</h2>
155<div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/Template:UIAPIPlugin?section=13" title="Template:UIAPIPlugin">edit</a>]</div><a name="...my_slider.2C_Google_Map.2C_sIFR_etc._not_work_when_placed_in_a_hidden_.28inactive.29_tab.3F"></a><h3>...my slider, Google Map, sIFR etc. not work when placed in a hidden (inactive) tab?</h3>
156<p>Any component that requires some dimensional computation for its initialization won't work in a hidden tab, because the tab panel itself is hidden via <code>display: none</code> so that any elements inside won't report their actual width and height (0 in most browsers).
157</p><p>There's an easy workaround. Use the <em>off-left technique</em> for hiding inactive tab panels. E.g. in your style sheet replace the rule for the class selector ".ui-tabs .ui-tabs-hide" with
158</p>
159<pre>.ui-tabs .ui-tabs-hide {
160 position: absolute;
161 left: -10000px;
162}</pre>
163<p>For Google maps you can also resize the map once the tab is displayed like this:
164</p>
165<pre>$('#example').bind('tabsshow', function(event, ui) {
166 if (ui.panel.id == &quot;map-tab&quot;) {
167 resizeMap();
168 }
169});</pre>
170resizeMap() will call Google Maps' checkResize() on the particular map.
171 </div>
172 <div id="overview-dependencies">
173 <h3>Dependencies</h3>
174 <ul>
175<li>UI Core</li>
176<li>To use the cookie option: <a href="http://plugins.jquery.com/project/cookie" class="external text" title="http://plugins.jquery.com/project/cookie">jquery.cookie.js</a></li>
177<li>Required CSS:
178<pre>.ui-tabs .ui-tabs-hide {
179 display: none;
180}</pre></li>
181</ul>
182 </div>
183 <div id="overview-example">
184 <h3>Example</h3>
185 <div id="overview-example" class="example">
186<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
187<p><div id="demo" class="tabs-container" rel="295">
188A simple jQuery UI Tabs.<br />
189</p>
190<pre>$(&quot;#tabs&quot;).tabs();
191</pre>
192<p></div><div id="source" class="tabs-container">
193</p>
194<pre>&lt;!DOCTYPE html&gt;
195&lt;html&gt;
196&lt;head&gt;
197 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
198 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
199 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;&gt;&lt;/script&gt;
200 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/ui/ui.tabs.js&quot;&gt;&lt;/script&gt;
201 &lt;script type="text/javascript"&gt;
202 $(document).ready(function(){
203 $(&quot;#tabs&quot;).tabs();
204 });
205 &lt;/script&gt;
206&lt;/head&gt;
207&lt;body style="font-size:62.5%;"&gt;
208
209&lt;div id=&quot;tabs&quot;&gt;
210 &lt;ul&gt;
211 &lt;li&gt;&lt;a href=&quot;#fragment-1&quot;&gt;&lt;span&gt;One&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
212 &lt;li&gt;&lt;a href=&quot;#fragment-2&quot;&gt;&lt;span&gt;Two&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
213 &lt;li&gt;&lt;a href=&quot;#fragment-3&quot;&gt;&lt;span&gt;Three&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
214 &lt;/ul&gt;
215 &lt;div id=&quot;fragment-1&quot;&gt;
216 &lt;p&gt;First tab is active by default:&lt;/p&gt;
217 &lt;pre&gt;&lt;code&gt;$('#example').tabs();&lt;/code&gt;&lt;/pre&gt;
218 &lt;/div&gt;
219 &lt;div id=&quot;fragment-2&quot;&gt;
220 Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
221 Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
222 &lt;/div&gt;
223 &lt;div id=&quot;fragment-3&quot;&gt;
224 Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
225 Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
226 Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
227 &lt;/div&gt;
228&lt;/div&gt;
229&lt;/body&gt;
230&lt;/html&gt;
231</pre>
232<p></div>
233</p><p></div>
234 </div>
235 </div>
236 <div id="options">
237 <h2 class="top-header">Options</h2>
238 <ul class="options-list">
239
240<li class="option" id="option-ajaxOptions">
241 <div class="option-header">
242 <h3 class="option-name"><a href="#option-ajaxOptions">ajaxOptions</a></h3>
243 <dl>
244 <dt class="option-type-label">Type:</dt>
245 <dd class="option-type">Options</dd>
246
247 <dt class="option-default-label">Default:</dt>
248 <dd class="option-default">null</dd>
249
250 </dl>
251 </div>
252 <div class="option-description">
253 <p>Additional Ajax options to consider when loading tab content (see $.ajax).</p>
254 </div>
255 <div class="option-examples">
256 <h4>Code examples</h4>
257 <dl class="option-examples-list">
258
259<dt>
260 Initialize a tabs with the <code>ajaxOptions</code> option specified.
261</dt>
262<dd>
263<pre><code>$('.selector').tabs({ ajaxOptions: { async: false } });</code></pre>
264</dd>
265
266
267<dt>
268 Get or set the <code>ajaxOptions</code> option, after init.
269</dt>
270<dd>
271<pre><code>//getter
272var ajaxOptions = $('.selector').tabs('option', 'ajaxOptions');
273//setter
274$('.selector').tabs('option', 'ajaxOptions', { async: false });</code></pre>
275</dd>
276
277 </dl>
278 </div>
279</li>
280
281
282<li class="option" id="option-cache">
283 <div class="option-header">
284 <h3 class="option-name"><a href="#option-cache">cache</a></h3>
285 <dl>
286 <dt class="option-type-label">Type:</dt>
287 <dd class="option-type">Boolean</dd>
288
289 <dt class="option-default-label">Default:</dt>
290 <dd class="option-default">false</dd>
291
292 </dl>
293 </div>
294 <div class="option-description">
295 <p>Whether or not to cache remote tabs content, e.g. load only once or with every click. Cached content is being lazy loaded, e.g once and only once for the first click. Note that to prevent the actual Ajax requests from being cached by the browser you need to provide an extra cache: false flag to ajaxOptions.</p>
296 </div>
297 <div class="option-examples">
298 <h4>Code examples</h4>
299 <dl class="option-examples-list">
300
301<dt>
302 Initialize a tabs with the <code>cache</code> option specified.
303</dt>
304<dd>
305<pre><code>$('.selector').tabs({ cache: true });</code></pre>
306</dd>
307
308
309<dt>
310 Get or set the <code>cache</code> option, after init.
311</dt>
312<dd>
313<pre><code>//getter
314var cache = $('.selector').tabs('option', 'cache');
315//setter
316$('.selector').tabs('option', 'cache', true);</code></pre>
317</dd>
318
319 </dl>
320 </div>
321</li>
322
323
324<li class="option" id="option-collapsible">
325 <div class="option-header">
326 <h3 class="option-name"><a href="#option-collapsible">collapsible</a></h3>
327 <dl>
328 <dt class="option-type-label">Type:</dt>
329 <dd class="option-type">Boolean</dd>
330
331 <dt class="option-default-label">Default:</dt>
332 <dd class="option-default">false</dd>
333
334 </dl>
335 </div>
336 <div class="option-description">
337 <p>Set to true to allow an already selected tab to become unselected again upon reselection.</p>
338 </div>
339 <div class="option-examples">
340 <h4>Code examples</h4>
341 <dl class="option-examples-list">
342
343<dt>
344 Initialize a tabs with the <code>collapsible</code> option specified.
345</dt>
346<dd>
347<pre><code>$('.selector').tabs({ collapsible: true });</code></pre>
348</dd>
349
350
351<dt>
352 Get or set the <code>collapsible</code> option, after init.
353</dt>
354<dd>
355<pre><code>//getter
356var collapsible = $('.selector').tabs('option', 'collapsible');
357//setter
358$('.selector').tabs('option', 'collapsible', true);</code></pre>
359</dd>
360
361 </dl>
362 </div>
363</li>
364
365
366<li class="option" id="option-cookie">
367 <div class="option-header">
368 <h3 class="option-name"><a href="#option-cookie">cookie</a></h3>
369 <dl>
370 <dt class="option-type-label">Type:</dt>
371 <dd class="option-type">Object</dd>
372
373 <dt class="option-default-label">Default:</dt>
374 <dd class="option-default">null</dd>
375
376 </dl>
377 </div>
378 <div class="option-description">
379 <p>Store the latest selected tab in a cookie. The cookie is then used to determine the initially selected tab if the <i>selected</i> option is not defined. Requires cookie plugin. The object needs to have key/value pairs of the form the cookie plugin expects as options. Available options (example): &#123; expires: 7, path: '/', domain: 'jquery.com', secure: true &#125;. Since jQuery UI 1.7 it is also possible to define the cookie name being used via <i>name</i> property.</p>
380 </div>
381 <div class="option-examples">
382 <h4>Code examples</h4>
383 <dl class="option-examples-list">
384
385<dt>
386 Initialize a tabs with the <code>cookie</code> option specified.
387</dt>
388<dd>
389<pre><code>$('.selector').tabs({ cookie: { expires: 30 } });</code></pre>
390</dd>
391
392
393<dt>
394 Get or set the <code>cookie</code> option, after init.
395</dt>
396<dd>
397<pre><code>//getter
398var cookie = $('.selector').tabs('option', 'cookie');
399//setter
400$('.selector').tabs('option', 'cookie', { expires: 30 });</code></pre>
401</dd>
402
403 </dl>
404 </div>
405</li>
406
407
408<li class="option" id="option-deselectable">
409 <div class="option-header">
410 <h3 class="option-name"><a href="#option-deselectable">deselectable</a></h3>
411 <dl>
412 <dt class="option-type-label">Type:</dt>
413 <dd class="option-type">Boolean</dd>
414
415 <dt class="option-default-label">Default:</dt>
416 <dd class="option-default">false</dd>
417
418 </dl>
419 </div>
420 <div class="option-description">
421 <p>deprecated in jQuery UI 1.7, use collapsible.</p>
422 </div>
423 <div class="option-examples">
424 <h4>Code examples</h4>
425 <dl class="option-examples-list">
426
427<dt>
428 Initialize a tabs with the <code>deselectable</code> option specified.
429</dt>
430<dd>
431<pre><code>$('.selector').tabs({ deselectable: true });</code></pre>
432</dd>
433
434
435<dt>
436 Get or set the <code>deselectable</code> option, after init.
437</dt>
438<dd>
439<pre><code>//getter
440var deselectable = $('.selector').tabs('option', 'deselectable');
441//setter
442$('.selector').tabs('option', 'deselectable', true);</code></pre>
443</dd>
444
445 </dl>
446 </div>
447</li>
448
449
450<li class="option" id="option-disabled">
451 <div class="option-header">
452 <h3 class="option-name"><a href="#option-disabled">disabled</a></h3>
453 <dl>
454 <dt class="option-type-label">Type:</dt>
455 <dd class="option-type">Array&lt;Number&gt;</dd>
456
457 <dt class="option-default-label">Default:</dt>
458 <dd class="option-default">[]</dd>
459
460 </dl>
461 </div>
462 <div class="option-description">
463 <p>An array containing the position of the tabs (zero-based index) that should be disabled on initialization.</p>
464 </div>
465 <div class="option-examples">
466 <h4>Code examples</h4>
467 <dl class="option-examples-list">
468
469<dt>
470 Initialize a tabs with the <code>disabled</code> option specified.
471</dt>
472<dd>
473<pre><code>$('.selector').tabs({ disabled: [1, 2] });</code></pre>
474</dd>
475
476
477<dt>
478 Get or set the <code>disabled</code> option, after init.
479</dt>
480<dd>
481<pre><code>//getter
482var disabled = $('.selector').tabs('option', 'disabled');
483//setter
484$('.selector').tabs('option', 'disabled', [1, 2]);</code></pre>
485</dd>
486
487 </dl>
488 </div>
489</li>
490
491
492<li class="option" id="option-event">
493 <div class="option-header">
494 <h3 class="option-name"><a href="#option-event">event</a></h3>
495 <dl>
496 <dt class="option-type-label">Type:</dt>
497 <dd class="option-type">String</dd>
498
499 <dt class="option-default-label">Default:</dt>
500 <dd class="option-default">'click'</dd>
501
502 </dl>
503 </div>
504 <div class="option-description">
505 <p>The type of event to be used for selecting a tab.</p>
506 </div>
507 <div class="option-examples">
508 <h4>Code examples</h4>
509 <dl class="option-examples-list">
510
511<dt>
512 Initialize a tabs with the <code>event</code> option specified.
513</dt>
514<dd>
515<pre><code>$('.selector').tabs({ event: 'mouseover' });</code></pre>
516</dd>
517
518
519<dt>
520 Get or set the <code>event</code> option, after init.
521</dt>
522<dd>
523<pre><code>//getter
524var event = $('.selector').tabs('option', 'event');
525//setter
526$('.selector').tabs('option', 'event', 'mouseover');</code></pre>
527</dd>
528
529 </dl>
530 </div>
531</li>
532
533
534<li class="option" id="option-fx">
535 <div class="option-header">
536 <h3 class="option-name"><a href="#option-fx">fx</a></h3>
537 <dl>
538 <dt class="option-type-label">Type:</dt>
539 <dd class="option-type">Options, Array&lt;Options&gt;</dd>
540
541 <dt class="option-default-label">Default:</dt>
542 <dd class="option-default">null</dd>
543
544 </dl>
545 </div>
546 <div class="option-description">
547 <p>Enable animations for hiding and showing tab panels. The duration option can be a string representing one of the three predefined speeds ("slow", "normal", "fast") or the duration in milliseconds to run an animation (default is "normal").</p>
548 </div>
549 <div class="option-examples">
550 <h4>Code examples</h4>
551 <dl class="option-examples-list">
552
553<dt>
554 Initialize a tabs with the <code>fx</code> option specified.
555</dt>
556<dd>
557<pre><code>$('.selector').tabs({ fx: { opacity: 'toggle' } });</code></pre>
558</dd>
559
560
561<dt>
562 Get or set the <code>fx</code> option, after init.
563</dt>
564<dd>
565<pre><code>//getter
566var fx = $('.selector').tabs('option', 'fx');
567//setter
568$('.selector').tabs('option', 'fx', { opacity: 'toggle' });</code></pre>
569</dd>
570
571 </dl>
572 </div>
573</li>
574
575
576<li class="option" id="option-idPrefix">
577 <div class="option-header">
578 <h3 class="option-name"><a href="#option-idPrefix">idPrefix</a></h3>
579 <dl>
580 <dt class="option-type-label">Type:</dt>
581 <dd class="option-type">String</dd>
582
583 <dt class="option-default-label">Default:</dt>
584 <dd class="option-default">'ui-tabs-'</dd>
585
586 </dl>
587 </div>
588 <div class="option-description">
589 <p>If the remote tab, its anchor element that is, has no title attribute to generate an id from, an id/fragment identifier is created from this prefix and a unique id returned by $.data(el), for example "ui-tabs-54".</p>
590 </div>
591 <div class="option-examples">
592 <h4>Code examples</h4>
593 <dl class="option-examples-list">
594
595<dt>
596 Initialize a tabs with the <code>idPrefix</code> option specified.
597</dt>
598<dd>
599<pre><code>$('.selector').tabs({ idPrefix: 'ui-tabs-primary' });</code></pre>
600</dd>
601
602
603<dt>
604 Get or set the <code>idPrefix</code> option, after init.
605</dt>
606<dd>
607<pre><code>//getter
608var idPrefix = $('.selector').tabs('option', 'idPrefix');
609//setter
610$('.selector').tabs('option', 'idPrefix', 'ui-tabs-primary');</code></pre>
611</dd>
612
613 </dl>
614 </div>
615</li>
616
617
618<li class="option" id="option-panelTemplate">
619 <div class="option-header">
620 <h3 class="option-name"><a href="#option-panelTemplate">panelTemplate</a></h3>
621 <dl>
622 <dt class="option-type-label">Type:</dt>
623 <dd class="option-type">String</dd>
624
625 <dt class="option-default-label">Default:</dt>
626 <dd class="option-default">'&lt;div&gt;&lt;/div&gt;'</dd>
627
628 </dl>
629 </div>
630 <div class="option-description">
631 <p>HTML template from which a new tab panel is created in case of adding a tab with the add method or when creating a panel for a remote tab on the fly.</p>
632 </div>
633 <div class="option-examples">
634 <h4>Code examples</h4>
635 <dl class="option-examples-list">
636
637<dt>
638 Initialize a tabs with the <code>panelTemplate</code> option specified.
639</dt>
640<dd>
641<pre><code>$('.selector').tabs({ panelTemplate: '&lt;li&gt;&lt;/li&gt;' });</code></pre>
642</dd>
643
644
645<dt>
646 Get or set the <code>panelTemplate</code> option, after init.
647</dt>
648<dd>
649<pre><code>//getter
650var panelTemplate = $('.selector').tabs('option', 'panelTemplate');
651//setter
652$('.selector').tabs('option', 'panelTemplate', '&lt;li&gt;&lt;/li&gt;');</code></pre>
653</dd>
654
655 </dl>
656 </div>
657</li>
658
659
660<li class="option" id="option-selected">
661 <div class="option-header">
662 <h3 class="option-name"><a href="#option-selected">selected</a></h3>
663 <dl>
664 <dt class="option-type-label">Type:</dt>
665 <dd class="option-type">Number</dd>
666
667 <dt class="option-default-label">Default:</dt>
668 <dd class="option-default">0</dd>
669
670 </dl>
671 </div>
672 <div class="option-description">
673 <p>Zero-based index of the tab to be selected on initialization. To set all tabs to unselected pass -1 as value.</p>
674 </div>
675 <div class="option-examples">
676 <h4>Code examples</h4>
677 <dl class="option-examples-list">
678
679<dt>
680 Initialize a tabs with the <code>selected</code> option specified.
681</dt>
682<dd>
683<pre><code>$('.selector').tabs({ selected: 3 });</code></pre>
684</dd>
685
686
687<dt>
688 Get or set the <code>selected</code> option, after init.
689</dt>
690<dd>
691<pre><code>//getter
692var selected = $('.selector').tabs('option', 'selected');
693//setter
694$('.selector').tabs('option', 'selected', 3);</code></pre>
695</dd>
696
697 </dl>
698 </div>
699</li>
700
701
702<li class="option" id="option-spinner">
703 <div class="option-header">
704 <h3 class="option-name"><a href="#option-spinner">spinner</a></h3>
705 <dl>
706 <dt class="option-type-label">Type:</dt>
707 <dd class="option-type">String</dd>
708
709 <dt class="option-default-label">Default:</dt>
710 <dd class="option-default">'&lt;em&gt;Loading&amp;#8230;&lt;/em&gt;'</dd>
711
712 </dl>
713 </div>
714 <div class="option-description">
715 <p>The HTML content of this string is shown in a tab title while remote content is loading. Pass in empty string to deactivate that behavior.</p>
716 </div>
717 <div class="option-examples">
718 <h4>Code examples</h4>
719 <dl class="option-examples-list">
720
721<dt>
722 Initialize a tabs with the <code>spinner</code> option specified.
723</dt>
724<dd>
725<pre><code>$('.selector').tabs({ spinner: 'Retrieving data...' });</code></pre>
726</dd>
727
728
729<dt>
730 Get or set the <code>spinner</code> option, after init.
731</dt>
732<dd>
733<pre><code>//getter
734var spinner = $('.selector').tabs('option', 'spinner');
735//setter
736$('.selector').tabs('option', 'spinner', 'Retrieving data...');</code></pre>
737</dd>
738
739 </dl>
740 </div>
741</li>
742
743
744<li class="option" id="option-tabTemplate">
745 <div class="option-header">
746 <h3 class="option-name"><a href="#option-tabTemplate">tabTemplate</a></h3>
747 <dl>
748 <dt class="option-type-label">Type:</dt>
749 <dd class="option-type">String</dd>
750
751 <dt class="option-default-label">Default:</dt>
752 <dd class="option-default">'&lt;li&gt;&lt;a href&#61;"#&#123;href&#125;"&gt;&lt;span&gt;#&#123;label&#125;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;'</dd>
753
754 </dl>
755 </div>
756 <div class="option-description">
757 <p>HTML template from which a new tab is created and added. The placeholders #&#123;href&#125; and #&#123;label&#125; are replaced with the url and tab label that are passed as arguments to the add method.</p>
758 </div>
759 <div class="option-examples">
760 <h4>Code examples</h4>
761 <dl class="option-examples-list">
762
763<dt>
764 Initialize a tabs with the <code>tabTemplate</code> option specified.
765</dt>
766<dd>
767<pre><code>$('.selector').tabs({ tabTemplate: '&lt;div&gt;&lt;a href&#61;"#&#123;href&#125;"&gt;&lt;span&gt;#&#123;label&#125;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;' });</code></pre>
768</dd>
769
770
771<dt>
772 Get or set the <code>tabTemplate</code> option, after init.
773</dt>
774<dd>
775<pre><code>//getter
776var tabTemplate = $('.selector').tabs('option', 'tabTemplate');
777//setter
778$('.selector').tabs('option', 'tabTemplate', '&lt;div&gt;&lt;a href&#61;"#&#123;href&#125;"&gt;&lt;span&gt;#&#123;label&#125;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;');</code></pre>
779</dd>
780
781 </dl>
782 </div>
783</li>
784
785 </ul>
786 </div>
787 <div id="events">
788 <h2 class="top-header">Events</h2>
789 <ul class="events-list">
790
791<li class="event" id="event-select">
792 <div class="event-header">
793 <h3 class="event-name"><a href="#event-select">select</a></h3>
794 <dl>
795 <dt class="event-type-label">Type:</dt>
796 <dd class="event-type">tabsselect</dd>
797 </dl>
798 </div>
799 <div class="event-description">
800 <p>This event is triggered when clicking a tab.</p>
801 </div>
802 <div class="event-examples">
803 <h4>Code examples</h4>
804 <dl class="event-examples-list">
805
806<dt>
807 Supply a callback function to handle the <code>select</code> event as an init option.
808</dt>
809<dd>
810<pre><code>$('.selector').tabs({
811 select: function(event, ui) { ... }
812});</code></pre>
813</dd>
814
815
816<dt>
817 Bind to the <code>select</code> event by type: <code>tabsselect</code>.
818</dt>
819<dd>
820<pre><code>$('.selector').bind('tabsselect', function(event, ui) {
821 ...
822});</code></pre>
823</dd>
824
825 </dl>
826 </div>
827</li>
828
829
830<li class="event" id="event-load">
831 <div class="event-header">
832 <h3 class="event-name"><a href="#event-load">load</a></h3>
833 <dl>
834 <dt class="event-type-label">Type:</dt>
835 <dd class="event-type">tabsload</dd>
836 </dl>
837 </div>
838 <div class="event-description">
839 <p>This event is triggered after the content of a remote tab has been loaded.</p>
840 </div>
841 <div class="event-examples">
842 <h4>Code examples</h4>
843 <dl class="event-examples-list">
844
845<dt>
846 Supply a callback function to handle the <code>load</code> event as an init option.
847</dt>
848<dd>
849<pre><code>$('.selector').tabs({
850 load: function(event, ui) { ... }
851});</code></pre>
852</dd>
853
854
855<dt>
856 Bind to the <code>load</code> event by type: <code>tabsload</code>.
857</dt>
858<dd>
859<pre><code>$('.selector').bind('tabsload', function(event, ui) {
860 ...
861});</code></pre>
862</dd>
863
864 </dl>
865 </div>
866</li>
867
868
869<li class="event" id="event-show">
870 <div class="event-header">
871 <h3 class="event-name"><a href="#event-show">show</a></h3>
872 <dl>
873 <dt class="event-type-label">Type:</dt>
874 <dd class="event-type">tabsshow</dd>
875 </dl>
876 </div>
877 <div class="event-description">
878 <p>This event is triggered when a tab is shown.</p>
879 </div>
880 <div class="event-examples">
881 <h4>Code examples</h4>
882 <dl class="event-examples-list">
883
884<dt>
885 Supply a callback function to handle the <code>show</code> event as an init option.
886</dt>
887<dd>
888<pre><code>$('.selector').tabs({
889 show: function(event, ui) { ... }
890});</code></pre>
891</dd>
892
893
894<dt>
895 Bind to the <code>show</code> event by type: <code>tabsshow</code>.
896</dt>
897<dd>
898<pre><code>$('.selector').bind('tabsshow', function(event, ui) {
899 ...
900});</code></pre>
901</dd>
902
903 </dl>
904 </div>
905</li>
906
907
908<li class="event" id="event-add">
909 <div class="event-header">
910 <h3 class="event-name"><a href="#event-add">add</a></h3>
911 <dl>
912 <dt class="event-type-label">Type:</dt>
913 <dd class="event-type">tabsadd</dd>
914 </dl>
915 </div>
916 <div class="event-description">
917 <p>This event is triggered when a tab is added.</p>
918 </div>
919 <div class="event-examples">
920 <h4>Code examples</h4>
921 <dl class="event-examples-list">
922
923<dt>
924 Supply a callback function to handle the <code>add</code> event as an init option.
925</dt>
926<dd>
927<pre><code>$('.selector').tabs({
928 add: function(event, ui) { ... }
929});</code></pre>
930</dd>
931
932
933<dt>
934 Bind to the <code>add</code> event by type: <code>tabsadd</code>.
935</dt>
936<dd>
937<pre><code>$('.selector').bind('tabsadd', function(event, ui) {
938 ...
939});</code></pre>
940</dd>
941
942 </dl>
943 </div>
944</li>
945
946
947<li class="event" id="event-remove">
948 <div class="event-header">
949 <h3 class="event-name"><a href="#event-remove">remove</a></h3>
950 <dl>
951 <dt class="event-type-label">Type:</dt>
952 <dd class="event-type">tabsremove</dd>
953 </dl>
954 </div>
955 <div class="event-description">
956 <p>This event is triggered when a tab is removed.</p>
957 </div>
958 <div class="event-examples">
959 <h4>Code examples</h4>
960 <dl class="event-examples-list">
961
962<dt>
963 Supply a callback function to handle the <code>remove</code> event as an init option.
964</dt>
965<dd>
966<pre><code>$('.selector').tabs({
967 remove: function(event, ui) { ... }
968});</code></pre>
969</dd>
970
971
972<dt>
973 Bind to the <code>remove</code> event by type: <code>tabsremove</code>.
974</dt>
975<dd>
976<pre><code>$('.selector').bind('tabsremove', function(event, ui) {
977 ...
978});</code></pre>
979</dd>
980
981 </dl>
982 </div>
983</li>
984
985
986<li class="event" id="event-enable">
987 <div class="event-header">
988 <h3 class="event-name"><a href="#event-enable">enable</a></h3>
989 <dl>
990 <dt class="event-type-label">Type:</dt>
991 <dd class="event-type">tabsenable</dd>
992 </dl>
993 </div>
994 <div class="event-description">
995 <p>This event is triggered when a tab is enabled.</p>
996 </div>
997 <div class="event-examples">
998 <h4>Code examples</h4>
999 <dl class="event-examples-list">
1000
1001<dt>
1002 Supply a callback function to handle the <code>enable</code> event as an init option.
1003</dt>
1004<dd>
1005<pre><code>$('.selector').tabs({
1006 enable: function(event, ui) { ... }
1007});</code></pre>
1008</dd>
1009
1010
1011<dt>
1012 Bind to the <code>enable</code> event by type: <code>tabsenable</code>.
1013</dt>
1014<dd>
1015<pre><code>$('.selector').bind('tabsenable', function(event, ui) {
1016 ...
1017});</code></pre>
1018</dd>
1019
1020 </dl>
1021 </div>
1022</li>
1023
1024
1025<li class="event" id="event-disable">
1026 <div class="event-header">
1027 <h3 class="event-name"><a href="#event-disable">disable</a></h3>
1028 <dl>
1029 <dt class="event-type-label">Type:</dt>
1030 <dd class="event-type">tabsdisable</dd>
1031 </dl>
1032 </div>
1033 <div class="event-description">
1034 <p>This event is triggered when a tab is disabled.</p>
1035 </div>
1036 <div class="event-examples">
1037 <h4>Code examples</h4>
1038 <dl class="event-examples-list">
1039
1040<dt>
1041 Supply a callback function to handle the <code>disable</code> event as an init option.
1042</dt>
1043<dd>
1044<pre><code>$('.selector').tabs({
1045 disable: function(event, ui) { ... }
1046});</code></pre>
1047</dd>
1048
1049
1050<dt>
1051 Bind to the <code>disable</code> event by type: <code>tabsdisable</code>.
1052</dt>
1053<dd>
1054<pre><code>$('.selector').bind('tabsdisable', function(event, ui) {
1055 ...
1056});</code></pre>
1057</dd>
1058
1059 </dl>
1060 </div>
1061</li>
1062
1063 </ul>
1064 </div>
1065 <div id="methods">
1066 <h2 class="top-header">Methods</h2>
1067 <ul class="methods-list">
1068
1069<li class="method" id="method-destroy">
1070 <div class="method-header">
1071 <h3 class="method-name"><a href="#method-destroy">destroy</a></h3>
1072 <dl>
1073 <dt class="method-signature-label">Signature:</dt>
1074 <dd class="method-signature">.tabs( 'destroy'
1075
1076
1077
1078
1079
1080
1081
1082)</dd>
1083 </dl>
1084 </div>
1085 <div class="method-description">
1086 <p>Remove the tabs functionality completely. This will return the element back to its pre-init state.</p>
1087 </div>
1088</li>
1089
1090
1091<li class="method" id="method-disable">
1092 <div class="method-header">
1093 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
1094 <dl>
1095 <dt class="method-signature-label">Signature:</dt>
1096 <dd class="method-signature">.tabs( 'disable'
1097
1098
1099
1100
1101
1102
1103
1104)</dd>
1105 </dl>
1106 </div>
1107 <div class="method-description">
1108 <p>Disable the tabs.</p>
1109 </div>
1110</li>
1111
1112
1113<li class="method" id="method-enable">
1114 <div class="method-header">
1115 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
1116 <dl>
1117 <dt class="method-signature-label">Signature:</dt>
1118 <dd class="method-signature">.tabs( 'enable'
1119
1120
1121
1122
1123
1124
1125
1126)</dd>
1127 </dl>
1128 </div>
1129 <div class="method-description">
1130 <p>Enable the tabs.</p>
1131 </div>
1132</li>
1133
1134
1135<li class="method" id="method-option">
1136 <div class="method-header">
1137 <h3 class="method-name"><a href="#method-option">option</a></h3>
1138 <dl>
1139 <dt class="method-signature-label">Signature:</dt>
1140 <dd class="method-signature">.tabs( 'option'
1141
1142, optionName
1143
1144, <span class="optional">[</span>value<span class="optional">] </span>
1145
1146
1147
1148)</dd>
1149 </dl>
1150 </div>
1151 <div class="method-description">
1152 <p>Get or set any tabs option. If no value is specified, will act as a getter.</p>
1153 </div>
1154</li>
1155
1156
1157<li class="method" id="method-add">
1158 <div class="method-header">
1159 <h3 class="method-name"><a href="#method-add">add</a></h3>
1160 <dl>
1161 <dt class="method-signature-label">Signature:</dt>
1162 <dd class="method-signature">.tabs( 'add'
1163
1164, url
1165
1166, label
1167
1168, <span class="optional">[</span>index<span class="optional">] </span>
1169
1170)</dd>
1171 </dl>
1172 </div>
1173 <div class="method-description">
1174 <p>Add a new tab. The second argument is either a URL consisting of a fragment identifier only to create an in-page tab or a full url (relative or absolute, no cross-domain support) to turn the new tab into an Ajax (remote) tab. The third is the zero-based position where to insert the new tab. Optional, by default a new tab is appended at the end.</p>
1175 </div>
1176</li>
1177
1178
1179<li class="method" id="method-remove">
1180 <div class="method-header">
1181 <h3 class="method-name"><a href="#method-remove">remove</a></h3>
1182 <dl>
1183 <dt class="method-signature-label">Signature:</dt>
1184 <dd class="method-signature">.tabs( 'remove'
1185
1186, index
1187
1188
1189
1190
1191
1192)</dd>
1193 </dl>
1194 </div>
1195 <div class="method-description">
1196 <p>Remove a tab. The second argument is the zero-based index of the tab to be removed.</p>
1197 </div>
1198</li>
1199
1200
1201<li class="method" id="method-enable">
1202 <div class="method-header">
1203 <h3 class="method-name"><a href="#method-enable">enable</a></h3>
1204 <dl>
1205 <dt class="method-signature-label">Signature:</dt>
1206 <dd class="method-signature">.tabs( 'enable'
1207
1208, index
1209
1210
1211
1212
1213
1214)</dd>
1215 </dl>
1216 </div>
1217 <div class="method-description">
1218 <p>Enable a disabled tab. To enable more than one tab at once reset the disabled property like: <code>$('#example').data('disabled.tabs', []);</code>. The second argument is the zero-based index of the tab to be enabled.</p>
1219 </div>
1220</li>
1221
1222
1223<li class="method" id="method-disable">
1224 <div class="method-header">
1225 <h3 class="method-name"><a href="#method-disable">disable</a></h3>
1226 <dl>
1227 <dt class="method-signature-label">Signature:</dt>
1228 <dd class="method-signature">.tabs( 'disable'
1229
1230, index
1231
1232
1233
1234
1235
1236)</dd>
1237 </dl>
1238 </div>
1239 <div class="method-description">
1240 <p>Disable a tab. The selected tab cannot be disabled. To disable more than one tab at once use: <code>$('#example').data('disabled.tabs', [1, 2, 3]);</code> The second argument is the zero-based index of the tab to be disabled.</p>
1241 </div>
1242</li>
1243
1244
1245<li class="method" id="method-select">
1246 <div class="method-header">
1247 <h3 class="method-name"><a href="#method-select">select</a></h3>
1248 <dl>
1249 <dt class="method-signature-label">Signature:</dt>
1250 <dd class="method-signature">.tabs( 'select'
1251
1252, index
1253
1254
1255
1256
1257
1258)</dd>
1259 </dl>
1260 </div>
1261 <div class="method-description">
1262 <p>Select a tab, as if it were clicked. The second argument is the zero-based index of the tab to be selected or the id selector of the panel the tab is associated with (the tab's href fragment identifier, e.g. hash, points to the panel's id).</p>
1263 </div>
1264</li>
1265
1266
1267<li class="method" id="method-load">
1268 <div class="method-header">
1269 <h3 class="method-name"><a href="#method-load">load</a></h3>
1270 <dl>
1271 <dt class="method-signature-label">Signature:</dt>
1272 <dd class="method-signature">.tabs( 'load'
1273
1274, index
1275
1276
1277
1278
1279
1280)</dd>
1281 </dl>
1282 </div>
1283 <div class="method-description">
1284 <p>Reload the content of an Ajax tab programmatically. This method always loads the tab content from the remote location, even if cache is set to true. The second argument is the zero-based index of the tab to be reloaded.</p>
1285 </div>
1286</li>
1287
1288
1289<li class="method" id="method-url">
1290 <div class="method-header">
1291 <h3 class="method-name"><a href="#method-url">url</a></h3>
1292 <dl>
1293 <dt class="method-signature-label">Signature:</dt>
1294 <dd class="method-signature">.tabs( 'url'
1295
1296, index
1297
1298, url
1299
1300
1301
1302)</dd>
1303 </dl>
1304 </div>
1305 <div class="method-description">
1306 <p>Change the url from which an Ajax (remote) tab will be loaded. The specified URL will be used for subsequent loads. Note that you can not only change the URL for an existing remote tab with this method, but also turn an in-page tab into a remote tab. The second argument is the zero-based index of the tab of which its URL is to be updated. The third is a URL the content of the tab is loaded from.</p>
1307 </div>
1308</li>
1309
1310
1311<li class="method" id="method-length">
1312 <div class="method-header">
1313 <h3 class="method-name"><a href="#method-length">length</a></h3>
1314 <dl>
1315 <dt class="method-signature-label">Signature:</dt>
1316 <dd class="method-signature">.tabs( 'length'
1317
1318
1319
1320
1321
1322
1323
1324)</dd>
1325 </dl>
1326 </div>
1327 <div class="method-description">
1328 <p>Retrieve the number of tabs of the first matched tab pane.</p>
1329 </div>
1330</li>
1331
1332
1333<li class="method" id="method-abort">
1334 <div class="method-header">
1335 <h3 class="method-name"><a href="#method-abort">abort</a></h3>
1336 <dl>
1337 <dt class="method-signature-label">Signature:</dt>
1338 <dd class="method-signature">.tabs( 'abort'
1339
1340
1341
1342
1343
1344
1345
1346)</dd>
1347 </dl>
1348 </div>
1349 <div class="method-description">
1350 <p>Terminate all running tab ajax requests and animations.</p>
1351 </div>
1352</li>
1353
1354
1355<li class="method" id="method-rotate">
1356 <div class="method-header">
1357 <h3 class="method-name"><a href="#method-rotate">rotate</a></h3>
1358 <dl>
1359 <dt class="method-signature-label">Signature:</dt>
1360 <dd class="method-signature">.tabs( 'rotate'
1361
1362, ms
1363
1364, <span class="optional">[</span>continuing<span class="optional">] </span>
1365
1366
1367
1368)</dd>
1369 </dl>
1370 </div>
1371 <div class="method-description">
1372 <p>Set up an automatic rotation through tabs of a tab pane. The second argument is an amount of time in milliseconds until the next tab in the cycle gets activated. Use 0 or null to stop the rotation. The third controls whether or not to continue the rotation after a tab has been selected by a user. Default: false.</p>
1373 </div>
1374</li>
1375
1376 </ul>
1377 </div>
1378 <div id="theming">
1379 <h2 class="top-header">Theming</h2>
1380 <p>The jQuery UI Tabs plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
1381</p>
1382 <p>If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.tabs.css stylesheet that can be modified. These classes are highlighed in bold below.
1383</p>
1384
1385 <h3>Sample markup with jQuery UI CSS Framework classes</h3>
1386 &lt;div class=&quot;<strong>ui-tabs</strong> ui-widget ui-widget-content ui-corner-all&quot; id=&quot;tabs&quot;&gt;<br />
1387&nbsp;&nbsp;&nbsp;&lt;ul class=&quot;<strong>ui-tabs-nav</strong> ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all&quot;&gt;<br />
1388&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li class=&quot;ui-state-default ui-corner-top ui-tabs-selected ui-state-active&quot;&gt;&lt;a href=&quot;#tabs-1&quot;&gt;Nunc tincidunt&lt;/a&gt;&lt;/li&gt;<br />
1389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li class=&quot;ui-state-default ui-corner-top&quot;&gt;&lt;a href=&quot;#tabs-2&quot;&gt;Proin dolor&lt;/a&gt;&lt;/li&gt;<br />
1390&nbsp;&nbsp;&nbsp;&lt;div class=&quot;<strong>ui-tabs-panel</strong> ui-widget-content ui-corner-bottom&quot; id=&quot;tabs-1&quot;&gt;<br />
1391&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Tab one content goes here.&lt;/p&gt;<br />
1392&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
1393&nbsp;&nbsp;&nbsp; ...<br />
1394&lt;/div&gt;<br />
1395 <p class="theme-note">
1396 <strong>
1397 Note: This is a sample of markup generated by the tabs plugin, not markup you should use to create a tabs. The only markup needed for that is <br />&lt;div id=&quot;tabs&quot;&gt;<br />
1398&#160;&#160;&#160;&lt;ul&gt;<br />
1399&#160;&#160;&#160;&#160;&#160;&#160;&lt;li&gt;&lt;a href=&quot;#tabs-1&quot;&gt;Nunc tincidunt&lt;/a&gt;&lt;/li&gt;<br />
1400&#160;&#160;&#160;&#160;&#160;&#160;&lt;li&gt;&lt;a href=&quot;#tabs-2&quot;&gt;Proin dolor&lt;/a&gt;&lt;/li&gt;<br />
1401&#160;&#160;&#160;&#160;&#160;&#160;&lt;li&gt;&lt;a href=&quot;#tabs-3&quot;&gt;Aenean lacinia&lt;/a&gt;&lt;/li&gt;<br />
1402&#160;&#160;&#160;&lt;/ul&gt;<br />
1403&#160;&#160;&#160;&lt;div id=&quot;tabs-1&quot;&gt;<br />
1404&#160;&#160;&#160;&#160;&#160;&#160;&lt;p&gt;Tab 1 content&lt;/p&gt;<br />
1405&#160;&#160;&#160;&lt;/div&gt;<br />
1406&#160;&#160;&#160;&lt;div id=&quot;tabs-2&quot;&gt;<br />
1407&#160;&#160;&#160;&#160;&#160;&#160;&lt;p&gt;Tab 2 content&lt;/p&gt;<br />
1408&#160;&#160;&#160;&lt;/div&gt;<br />
1409&#160;&#160;&#160;&lt;div id=&quot;tabs-3&quot;&gt;<br />
1410&#160;&#160;&#160;&#160;&#160;&#160;&lt;p&gt;Tab 3 content&lt;/p&gt;<br />
1411&#160;&#160;&#160;&lt;/div&gt;<br />
1412&lt;/div&gt;.
1413 </strong>
1414 </p>
1415
1416 </div>
1417</div>
1418
1419</p><!--
1420Pre-expand include size: 51548 bytes
1421Post-expand include size: 88927 bytes
1422Template argument size: 55315 bytes
1423Maximum: 2097152 bytes
1424-->
1425
1426<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:3350-1!1!0!!en!2 and timestamp 20090604112223 -->
diff --git a/static/development-bundle/docs/toggle.html b/static/development-bundle/docs/toggle.html
new file mode 100644
index 0000000..f569345
--- /dev/null
+++ b/static/development-bundle/docs/toggle.html
@@ -0,0 +1,143 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI toggle</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/toggle?section=1" title="Edit section: toggle( effect, [options], [speed], [callback] )">edit</a>]</div><a name="toggle.28_effect.2C_.5Boptions.5D.2C_.5Bspeed.5D.2C_.5Bcallback.5D_.29"></a><h3>toggle( effect, <span class="optional">[</span>options<span class="optional">]</span>, <span class="optional">[</span>speed<span class="optional">]</span>, <span class="optional">[</span>callback<span class="optional">]</span> )</h3>
12<p>The enhanced toggle method optionally accepts jQuery UI advanced effects.</p>
13<p>Uses a specific effect on an element to toggle the element if the first argument is an effect string.</p>
14 </div>
15 <div id="overview-dependencies">
16 <h3>Dependencies</h3>
17 <ul>
18<li>Effects Core</li>
19</ul>
20 </div>
21 <div id="overview-example">
22 <h3>Example</h3>
23 <div id="overview-example" class="example">
24<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
25<p><div id="demo" class="tabs-container" rel="170">
26Apply the effect slide if you click on the p to toggle a div.<br />
27</p>
28<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
29 $(&quot;div&quot;).<strong class="selflink">toggle</strong>(&quot;slide&quot;, {}, 1000);
30 });
31</pre>
32<p></div><div id="source" class="tabs-container">
33</p>
34<pre>&lt;!DOCTYPE html&gt;
35&lt;html&gt;
36&lt;head&gt;
37 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
38 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
39 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
40&lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.slide.js&quot;&gt;&lt;/script&gt;
41&lt;style type=&quot;text/css&quot;&gt;
42 div { display: none; margin: 0px; width: 100px; height: 80px; background: blue; position: relative; }
43&lt;/style&gt;
44 &lt;script type="text/javascript"&gt;
45 $(document).ready(function(){
46 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
47 $(&quot;div&quot;).<strong class="selflink">toggle</strong>(&quot;slide&quot;, {}, 1000);
48 });
49 });
50 &lt;/script&gt;
51&lt;/head&gt;
52&lt;body style="font-size:62.5%;"&gt;
53
54&lt;p&gt;Click me&lt;/p&gt;&lt;div&gt;&lt;/div&gt;
55
56&lt;/body&gt;
57&lt;/html&gt;
58</pre>
59<p></div>
60</p><p></div>
61 </div>
62 </div>
63 <div id="options">
64 <h2 class="top-header">Arguments</h2>
65 <ul class="options-list">
66
67<li class="option" id="option-effect">
68 <div class="option-header">
69 <h3 class="option-name"><a href="#option-effect">effect</a></h3>
70 <dl>
71 <dt class="option-type-label">Type:</dt>
72 <dd class="option-type">String</dd>
73
74 </dl>
75 </div>
76 <div class="option-description">
77 <p>The effect to be used. Possible values: 'blind', 'clip', 'drop', 'explode', 'fold', 'puff', 'slide', 'scale', 'size', 'pulsate'.</p>
78 </div>
79</li>
80
81
82<li class="option" id="option-options">
83 <div class="option-header">
84 <h3 class="option-name"><a href="#option-options">options</a></h3>
85 <dl>
86 <dt class="option-type-label">Type:</dt>
87 <dd class="option-type">Hash</dd>
88
89 <dt class="option-optional-label">Optional</dt>
90
91 </dl>
92 </div>
93 <div class="option-description">
94 <p>A object/hash including specific options for the effect.</p>
95 </div>
96</li>
97
98
99<li class="option" id="option-speed">
100 <div class="option-header">
101 <h3 class="option-name"><a href="#option-speed">speed</a></h3>
102 <dl>
103 <dt class="option-type-label">Type:</dt>
104 <dd class="option-type">String, Number</dd>
105
106 <dt class="option-optional-label">Optional</dt>
107
108 </dl>
109 </div>
110 <div class="option-description">
111 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
112 </div>
113</li>
114
115
116<li class="option" id="option-callback">
117 <div class="option-header">
118 <h3 class="option-name"><a href="#option-callback">callback</a></h3>
119 <dl>
120 <dt class="option-type-label">Type:</dt>
121 <dd class="option-type">Function</dd>
122
123 <dt class="option-optional-label">Optional</dt>
124
125 </dl>
126 </div>
127 <div class="option-description">
128 <p>A function that is called after the effect is completed.</p>
129 </div>
130</li>
131
132 </ul>
133 </div>
134</div>
135
136</p><!--
137Pre-expand include size: 6229 bytes
138Post-expand include size: 8801 bytes
139Template argument size: 5539 bytes
140Maximum: 2097152 bytes
141-->
142
143<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2615-1!1!0!!en!2 and timestamp 20090604035835 -->
diff --git a/static/development-bundle/docs/toggleClass.html b/static/development-bundle/docs/toggleClass.html
new file mode 100644
index 0000000..6740cc3
--- /dev/null
+++ b/static/development-bundle/docs/toggleClass.html
@@ -0,0 +1,110 @@
1
2<ul class="UIAPIPlugin-toc">
3<li><a href="#overview">Overview</a></li>
4<li><a href="#options">Arguments</a></li>
5</ul>
6<div class="UIAPIPlugin">
7 <h1>jQuery UI toggleClass</h1>
8 <div id="overview">
9 <h2 class="top-header">Overview</h2>
10 <div id="overview-main">
11 <div class="editsection" style="float:right;margin-left:5px;">[<a href="http://docs.jquery.com/action/edit/UI/Effects/toggleClass?section=1" title="Edit section: toggleClass( class, [duration] )">edit</a>]</div><a name="toggleClass.28_class.2C_.5Bduration.5D_.29"></a><h3>toggleClass( class, <span class="optional">[</span>duration<span class="optional">]</span> )</h3>
12<p>Adds the specified class if it is not present, and removes the specified class if it is present, using an optional transition.</p>
13 </div>
14 <div id="overview-dependencies">
15 <h3>Dependencies</h3>
16 <ul>
17<li>Effects Core</li>
18</ul>
19 </div>
20 <div id="overview-example">
21 <h3>Example</h3>
22 <div id="overview-example" class="example">
23<ul><li><a href="#demo"><span>Demo</span></a></li><li><a href="#source"><span>View Source</span></a></li></ul>
24<p><div id="demo" class="tabs-container" rel="100">
25Adds the 'selected' class if it is not present, and removes the 'selected' class if it is present.<br />
26</p>
27<pre>$(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
28 $(this).<strong class="selflink">toggleClass</strong>(&quot;selected&quot;, 1000);
29 });
30</pre>
31<p></div><div id="source" class="tabs-container">
32</p>
33<pre>&lt;!DOCTYPE html&gt;
34&lt;html&gt;
35&lt;head&gt;
36 &lt;link type=&quot;text/css&quot; href=&quot;http://jqueryui.com/latest/themes/base/ui.all.css&quot; rel=&quot;stylesheet&quot; /&gt;
37 &lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryui.com/latest/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
38 &lt;script src=&quot;http://ui.jquery.com/latest/ui/effects.core.js&quot;&gt;&lt;/script&gt;
39&lt;style type=&quot;text/css&quot;&gt;
40 p { cursor: pointer; font-size: 1.2em; }
41 .selected { color:red; }
42&lt;/style&gt;
43 &lt;script type="text/javascript"&gt;
44 $(document).ready(function(){
45 $(&quot;p&quot;).<a href="http://docs.jquery.com/Events/click" title="Events/click">click</a>(function () {
46 $(this).<strong class="selflink">toggleClass</strong>(&quot;selected&quot;, 1000);
47 });
48 });
49 &lt;/script&gt;
50&lt;/head&gt;
51&lt;body style="font-size:62.5%;"&gt;
52
53&lt;p&gt;Click me to toggle 'selected' class.&lt;/p&gt;
54&lt;p class=&quot;selected&quot;&gt;Click me to toggle 'selected' class.&lt;/p&gt;
55&lt;p&gt;Click me to toggle 'selected' class.&lt;/p&gt;
56
57&lt;/body&gt;
58&lt;/html&gt;
59</pre>
60<p></div>
61</p><p></div>
62 </div>
63 </div>
64 <div id="options">
65 <h2 class="top-header">Arguments</h2>
66 <ul class="options-list">
67
68<li class="option" id="option-class">
69 <div class="option-header">
70 <h3 class="option-name"><a href="#option-class">class</a></h3>
71 <dl>
72 <dt class="option-type-label">Type:</dt>
73 <dd class="option-type">String</dd>
74
75 </dl>
76 </div>
77 <div class="option-description">
78 <p>A CSS class to toggle on the elements.</p>
79 </div>
80</li>
81
82
83<li class="option" id="option-duration">
84 <div class="option-header">
85 <h3 class="option-name"><a href="#option-duration">duration</a></h3>
86 <dl>
87 <dt class="option-type-label">Type:</dt>
88 <dd class="option-type">String, Number</dd>
89
90 <dt class="option-optional-label">Optional</dt>
91
92 </dl>
93 </div>
94 <div class="option-description">
95 <p>A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000).</p>
96 </div>
97</li>
98
99 </ul>
100 </div>
101</div>
102
103</p><!--
104Pre-expand include size: 5128 bytes
105Post-expand include size: 6997 bytes
106Template argument size: 4427 bytes
107Maximum: 2097152 bytes
108-->
109
110<!-- Saved in parser cache with key jqdocs_docs:pcache:idhash:2608-1!1!0!!en!2 and timestamp 20090604041528 -->
diff --git a/static/development-bundle/external/bgiframe/ChangeLog.txt b/static/development-bundle/external/bgiframe/ChangeLog.txt
new file mode 100644
index 0000000..ccebcbf
--- /dev/null
+++ b/static/development-bundle/external/bgiframe/ChangeLog.txt
@@ -0,0 +1,20 @@
1== New and Noteworthy ==
2
3== 2.1.1 ==
4
5* Removed $.browser.version for jQuery < 1.1.3
6
7== 2.1 ==
8
9* Updated to work with jQuery 1.1.3
10* Added $.browser.version for jQuery < 1.1.3
11* Optimized duplication check by using child selector and using .length test
12
13== 2.0 ==
14
15* Added ability change settings like width, height, src and more.
16
17== 1.0 ==
18
19* Only adds iframe once per an element
20* Works with SSL enabled pages \ No newline at end of file
diff --git a/static/development-bundle/external/bgiframe/META.json b/static/development-bundle/external/bgiframe/META.json
new file mode 100644
index 0000000..5be79cc
--- /dev/null
+++ b/static/development-bundle/external/bgiframe/META.json
@@ -0,0 +1,32 @@
1{
2 "name": "jQuery-bgiframe",
3 "version": 2.1,
4 "author": [
5 "Brandon Aaron <brandon.aaron@gmail.com>"
6 ],
7 "abstract": "jQuery plugin for fixing z-index issues in IE6",
8 "license": "mit, gpl",
9 "distribution_type": "plugin",
10 "requires": {
11 "jQuery": ">=1.0.3"
12 },
13 "provides": {
14 "jQuery.bgiframe": {
15 "version": 2.1,
16 "file": "jquery.bgiframe.js"
17 }
18 },
19 "keywords": [
20 "iframe",
21 "hack",
22 "zIndex",
23 "z-index",
24 "ie6"
25 ],
26 "stability": "Official",
27 "meta-spec": {
28 "version": 1.3,
29 "url": "http://module-build.sourceforge.net/META-spec-v1.3.html"
30 },
31 "generated_by": "Brandon Aaron"
32}
diff --git a/static/development-bundle/external/bgiframe/docs/index.html b/static/development-bundle/external/bgiframe/docs/index.html
new file mode 100644
index 0000000..1776b4d
--- /dev/null
+++ b/static/development-bundle/external/bgiframe/docs/index.html
@@ -0,0 +1,113 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html>
4 <head>
5 <meta http-equiv="Content-type" content="text/html; charset=utf-8">
6 <title>bgiframe 2.1.1 docs</title>
7 <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/reset/reset-min.css">
8 <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/fonts/fonts-min.css">
9 <style type="text/css" media="screen">
10 body { margin: 25px; }
11 h1 { margin: 1.0em 0; font-size: 167%; font-weight: bold; }
12 #toc { margin: 0 0 3.0em; }
13 #toc li { margin: 0.4em 0; font-size: 100%; }
14 #qa { margin: 0 0 3.0em; }
15 #qa dt.question { margin: 2.0em 0 1.0em; font-size: 122%; font-weight: bold; }
16 #qa dd.answer { margin: 0 2.0em; }
17 #qa dd.answer p { margin: 0 0 1.5em; }
18 #qa dd.answer code { font-size: 92%; }
19
20 #qa dd.answer #options dt { margin: 2.0em 0 1.0em; }
21 #qa dd.answer #options dd { margin: 0 2.0em; }
22
23 </style>
24 </head>
25 <body>
26 <div id="wrapper">
27 <div id="container">
28 <h1>bgiframe 2.1.1</h1>
29 <ul id="toc">
30 <li><a href="#what_does_it_do">What does it do</a></li>
31 <li><a href="#when_should_i_use_it">When should I use it</a></li>
32 <li><a href="#how_do_i_use_it">How do I use it</a></li>
33 <li><a href="#how_does_it_work">How does it work</a></li>
34 <li><a href="#where_can_i_get_it">Where can I get it</a></li>
35 <li><a href="#what_has_changed">What has changed</a></li>
36 <li><a href="#suggestions_bugs_patches">Suggestions? Bugs? Patches?</a></li>
37 </ul>
38 <dl id="qa">
39 <dt id="what_does_it_do" class="question">What does it do?</dt>
40 <dd class="answer">
41 <p>Have you ever experienced the select form element z-index issue in Internet Explorer 6? Most likely you have if you've implemented some sort of drop down menu navigation that shows up over a select form element.</p>
42 <p>The background iframe (bgiframe) plugin provides a very small, quick and easy way to fix that problem so you don't have to worry about it. No matter the size, borders or position the bgiframe plugin can fix it.</p>
43 </dd>
44
45 <dt id="when_should_i_use_it" class="question">When should I use it?</dt>
46 <dd class="answer">
47 <p>The bgiframe plugin should be used when you are trying to show elements above a select form control in Internet Explorer 6.</p>
48 </dd>
49
50 <dt id="how_do_i_use_it" class="question">How do I use it?</dt>
51 <dd class="answer">
52 <p>The usage is simple. Just call <code>bgiframe</code> on a jQuery collection of elements.</p>
53 <p><code>$('.fix-z-index').bgiframe();</code></p>
54 <p>The plugin tries its best to handle most situations but sometimes some configuration is necessary. For example if your borders are defined in a unit other than pixels, you will need to manually set the <code>top</code> and <code>left</code> properties to the negative width of the border. Here are the options/settings available to configure the output.</p>
55 <dl id="options">
56 <dt><code>top</code></dt>
57 <dd>
58 <p>The iframe must be offset to the top by the width of the top border. This should be a negative number representing the border-top-width. If a number is is used here, pixels will be assumed. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the border-top-width if it is in pixels.</p>
59 <p><code>$('.fix-z-index').bgiframe({ top: '-1em' });</code></p>
60 </dd>
61 <dt><code>left</code></dt>
62 <dd>
63 <p>The iframe must be offset to the left by the width of the left border. This should be a negative number representing the border-left-width. If a number is used here, pixels will be assumed. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the border-left-width if it is in pixels.</p>
64 <p><code>$('.fix-z-index').bgiframe({ left: '-1em' });</code></p>
65 </dd>
66 <dt><code>width</code></dt>
67 <dd>
68 <p>This is the width of the iframe. If a number is used here, pixels will be assume. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the offsetWidth.</p>
69 <p><code>$('.fix-z-index').bgiframe({ width: 100 });</code></p>
70 </dd>
71 <dt><code>height</code></dt>
72 <dd>
73 <p>This is the height of the iframe. If a number is used here, pixels will be assume. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the offsetHeight.</p>
74 <p><code>$('.fix-z-index').bgiframe({ height: 100 });</code></p>
75 </dd>
76 <dt><code>opacity</code></dt>
77 <dd>
78 <p>This is a boolean representing whether or not to use opacity. If set to true, the opacity of 0 is applied. If set to false, the opacity filter is not applied. Default: true.</p>
79 <p><code>$('.fix-z-index').bgiframe({ opacity: false });</code></p>
80 </dd>
81 <dt><code>src</code></dt>
82 <dd>
83 <p>This setting is provided so that one could change the src of the iframe to whatever they need. Default: "javascript:false;"</p>
84 <p><code>$('.fix-z-index').bgiframe({ src: '#' });</code></p>
85 </dd>
86 </dl>
87 </dd>
88
89 <dt id="how_does_it_work" class="question">How does it work?</dt>
90 <dd class="answer">
91 <p>The bgiframe plugin works by prepending an iframe to the element. The iframe is given a class of bgiframe and positioned below all the other children of the element. In the default configuration it automatically adjusts to the width and height of the element (including the borders) and the opacity is set to 0. The element needs to have position (relative or absolute) and should have a background (color or image).</p>
92 <p>Check out the <a href="http://brandonaaron.net/jquery/plugins/bgiframe/test/">test page</a> to see the plugin in action.</p>
93 </dd>
94
95 <dt id="where_can_i_get_it" class="question">Where can I get it?</dt>
96 <dd class="answer">
97 <ul>
98 <li><a href="http://jquery.com/plugins/files/bgiframe-2.1.zip">2.1 zip</a> from the bgiframe <a href="http://jquery.com/plugins/project/bgiframe">project page</a>.</li>
99 <li>Latest SVN: http://jqueryjs.googlecode.com/svn/trunk/plugins/bgiframe/</li>
100 <li>Tagged Versions in SVN: Latest SVN: http://jqueryjs.googlecode.com/svn/tags/plugins/bgiframe/</li>
101 </ul>
102 </dd>
103
104 <dt id="suggestions_bugs_patches" class="question">Suggestions? Bugs? Patches?</dt>
105 <dd class="answer">
106 <p>Feel free to make any suggestions, bug reports or add any patches via the <a href="http://jquery.com/plugins/project/bgiframe">project page</a>.</p>
107 </dd>
108 </dl>
109 <p>The bgiframe plugin is authored by <a href="http://blog.brandonaaron.net/">Brandon Aaron (http://brandonaaron.net/)</a></p>
110 </div>
111 </div>
112 </body>
113</html> \ No newline at end of file
diff --git a/static/development-bundle/external/bgiframe/jquery.bgiframe.js b/static/development-bundle/external/bgiframe/jquery.bgiframe.js
new file mode 100644
index 0000000..3a01f6e
--- /dev/null
+++ b/static/development-bundle/external/bgiframe/jquery.bgiframe.js
@@ -0,0 +1,100 @@
1/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
2 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4 *
5 * $LastChangedDate: 2007-07-21 18:44:59 -0500 (Sat, 21 Jul 2007) $
6 * $Rev: 2446 $
7 *
8 * Version 2.1.1
9 */
10
11(function($){
12
13/**
14 * The bgiframe is chainable and applies the iframe hack to get
15 * around zIndex issues in IE6. It will only apply itself in IE6
16 * and adds a class to the iframe called 'bgiframe'. The iframe
17 * is appeneded as the first child of the matched element(s)
18 * with a tabIndex and zIndex of -1.
19 *
20 * By default the plugin will take borders, sized with pixel units,
21 * into account. If a different unit is used for the border's width,
22 * then you will need to use the top and left settings as explained below.
23 *
24 * NOTICE: This plugin has been reported to cause perfromance problems
25 * when used on elements that change properties (like width, height and
26 * opacity) a lot in IE6. Most of these problems have been caused by
27 * the expressions used to calculate the elements width, height and
28 * borders. Some have reported it is due to the opacity filter. All
29 * these settings can be changed if needed as explained below.
30 *
31 * @example $('div').bgiframe();
32 * @before <div><p>Paragraph</p></div>
33 * @result <div><iframe class="bgiframe".../><p>Paragraph</p></div>
34 *
35 * @param Map settings Optional settings to configure the iframe.
36 * @option String|Number top The iframe must be offset to the top
37 * by the width of the top border. This should be a negative
38 * number representing the border-top-width. If a number is
39 * is used here, pixels will be assumed. Otherwise, be sure
40 * to specify a unit. An expression could also be used.
41 * By default the value is "auto" which will use an expression
42 * to get the border-top-width if it is in pixels.
43 * @option String|Number left The iframe must be offset to the left
44 * by the width of the left border. This should be a negative
45 * number representing the border-left-width. If a number is
46 * is used here, pixels will be assumed. Otherwise, be sure
47 * to specify a unit. An expression could also be used.
48 * By default the value is "auto" which will use an expression
49 * to get the border-left-width if it is in pixels.
50 * @option String|Number width This is the width of the iframe. If
51 * a number is used here, pixels will be assume. Otherwise, be sure
52 * to specify a unit. An experssion could also be used.
53 * By default the value is "auto" which will use an experssion
54 * to get the offsetWidth.
55 * @option String|Number height This is the height of the iframe. If
56 * a number is used here, pixels will be assume. Otherwise, be sure
57 * to specify a unit. An experssion could also be used.
58 * By default the value is "auto" which will use an experssion
59 * to get the offsetHeight.
60 * @option Boolean opacity This is a boolean representing whether or not
61 * to use opacity. If set to true, the opacity of 0 is applied. If
62 * set to false, the opacity filter is not applied. Default: true.
63 * @option String src This setting is provided so that one could change
64 * the src of the iframe to whatever they need.
65 * Default: "javascript:false;"
66 *
67 * @name bgiframe
68 * @type jQuery
69 * @cat Plugins/bgiframe
70 * @author Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
71 */
72$.fn.bgIframe = $.fn.bgiframe = function(s) {
73 // This is only for IE6
74 if ( $.browser.msie && /6.0/.test(navigator.userAgent) ) {
75 s = $.extend({
76 top : 'auto', // auto == .currentStyle.borderTopWidth
77 left : 'auto', // auto == .currentStyle.borderLeftWidth
78 width : 'auto', // auto == offsetWidth
79 height : 'auto', // auto == offsetHeight
80 opacity : true,
81 src : 'javascript:false;'
82 }, s || {});
83 var prop = function(n){return n&&n.constructor==Number?n+'px':n;},
84 html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
85 'style="display:block;position:absolute;z-index:-1;'+
86 (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
87 'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
88 'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
89 'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
90 'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
91 '"/>';
92 return this.each(function() {
93 if ( $('> iframe.bgiframe', this).length == 0 )
94 this.insertBefore( document.createElement(html), this.firstChild );
95 });
96 }
97 return this;
98};
99
100})(jQuery); \ No newline at end of file
diff --git a/static/development-bundle/external/bgiframe/jquery.bgiframe.min.js b/static/development-bundle/external/bgiframe/jquery.bgiframe.min.js
new file mode 100644
index 0000000..ef8679d
--- /dev/null
+++ b/static/development-bundle/external/bgiframe/jquery.bgiframe.min.js
@@ -0,0 +1,10 @@
1/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
2 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4 *
5 * $LastChangedDate: 2007-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
6 * $Rev: 2447 $
7 *
8 * Version 2.1.1
9 */
10(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery); \ No newline at end of file
diff --git a/static/development-bundle/external/bgiframe/jquery.bgiframe.pack.js b/static/development-bundle/external/bgiframe/jquery.bgiframe.pack.js
new file mode 100644
index 0000000..90dee9a
--- /dev/null
+++ b/static/development-bundle/external/bgiframe/jquery.bgiframe.pack.js
@@ -0,0 +1,10 @@
1/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
2 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4 *
5 * $LastChangedDate: 2007-07-21 18:44:59 -0500 (Sat, 21 Jul 2007) $
6 * $Rev: 2446 $
7 *
8 * Version 2.1.1
9 */
10eval(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}('(b($){$.m.E=$.m.g=b(s){h($.x.10&&/6.0/.I(D.B)){s=$.w({c:\'3\',5:\'3\',8:\'3\',d:\'3\',k:M,e:\'F:i;\'},s||{});C a=b(n){f n&&n.t==r?n+\'4\':n},p=\'<o Y="g"W="0"R="-1"e="\'+s.e+\'"\'+\'Q="P:O;N:L;z-H:-1;\'+(s.k!==i?\'G:J(K=\\\'0\\\');\':\'\')+\'c:\'+(s.c==\'3\'?\'7(((l(2.9.j.A)||0)*-1)+\\\'4\\\')\':a(s.c))+\';\'+\'5:\'+(s.5==\'3\'?\'7(((l(2.9.j.y)||0)*-1)+\\\'4\\\')\':a(s.5))+\';\'+\'8:\'+(s.8==\'3\'?\'7(2.9.S+\\\'4\\\')\':a(s.8))+\';\'+\'d:\'+(s.d==\'3\'?\'7(2.9.v+\\\'4\\\')\':a(s.d))+\';\'+\'"/>\';f 2.T(b(){h($(\'> o.g\',2).U==0)2.V(q.X(p),2.u)})}f 2}})(Z);',62,63,'||this|auto|px|left||expression|width|parentNode||function|top|height|src|return|bgiframe|if|false|currentStyle|opacity|parseInt|fn||iframe|html|document|Number||constructor|firstChild|offsetHeight|extend|browser|borderLeftWidth||borderTopWidth|userAgent|var|navigator|bgIframe|javascript|filter|index|test|Alpha|Opacity|absolute|true|position|block|display|style|tabindex|offsetWidth|each|length|insertBefore|frameborder|createElement|class|jQuery|msie'.split('|'),0,{})) \ No newline at end of file
diff --git a/static/development-bundle/external/bgiframe/test/index.html b/static/development-bundle/external/bgiframe/test/index.html
new file mode 100644
index 0000000..82be8e8
--- /dev/null
+++ b/static/development-bundle/external/bgiframe/test/index.html
@@ -0,0 +1,197 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html debug="true">
4 <head>
5 <meta http-equiv="Content-type" content="text/html; charset=utf-8">
6 <title>jQuery bgiframe Visual Test</title>
7
8 <!-- load latest build of jquery.js -->
9 <script type="text/javascript" src="../../../jquery/dist/jquery.js"></script>
10
11 <!-- load dimensions.js (this is what we're testing! -->
12 <script type="text/javascript" src="../jquery.bgiframe.js"></script>
13
14 <!-- load firebug lite
15 <script type="text/javascript" src="http://brandon.jquery.com/firebuglite/firebug.js"></script>-->
16
17 <link rel="Stylesheet" media="screen" href="../../../jquery/test/data/testsuite.css" />
18
19 <script type="text/javascript" charset="utf-8">
20 $(function() {
21 $('#userAgent').html(navigator.userAgent);
22 $('#box2').bgiframe();
23 $('#box3').bgiframe({top: -5, left: -5});
24 $('#box4').bgiframe({top: -5, left: -5, width: 270, height: 120});
25 $('#box5').bgiframe({top: 0, left: 0, width: 260, height: 110});
26 $('#box6').bgiframe({top: '-5px', left: '-5px', width: '270px', height: '120px'});
27 $('#box7').bgiframe({top: '-.5em', left: '-.5em', width: '17em', height: '12em'});
28 $('#box8').bgiframe({top: '-.5em', left: '-.5em'});
29 $('#box9').bgiframe({opacity:false});
30 });
31 </script>
32
33 <style type="text/css" media="screen">
34 #wrapper { position: relative; width: 100%; font: 12px Arial; }
35 form { position: absolute; top: 0; left: 0; width: 100%; }
36 select { position: relative; width: 100%; margin: 0 0 2px; z-index: 1; }
37
38 .box { position: relative; z-index: 2; float: left; margin: 5px; border: 5px solid #666; padding: 5px; width: 250px; height: 100px; color: #000; background-color: #999; }
39 dl { margin: 0; padding: 0; }
40 dt { float: left; margin: 0; padding: 0; width: 50px; }
41 dd { margin: 0; padding: 0; }
42 #box7, #box8 { border-width: .5em; padding: .5em; width: 15em; height: 10em; }
43 </style>
44 </head>
45 <body>
46 <h1 id="banner">jQuery bgiframe - Visual Test</h1>
47 <h2 id="userAgent"></h2>
48 <div id="wrapper">
49 <form action="#" method="get" accept-charset="utf-8">
50 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
51 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
52 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
53 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
54 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
55 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
56 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
57 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
58 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
59 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
60 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
61 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
62 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
63 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
64 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
65 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
66 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
67 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
68 <select name="test"><option>Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing</option></select>
69 </form>
70
71 <div id="box1" class="box">nothing</div>
72 <div id="box2" class="box">
73 <dl>
74 <dt>top:</dt>
75 <dd>'auto'</dd>
76
77 <dt>left:</dt>
78 <dd>'auto'</dd>
79
80 <dt>width:</dt>
81 <dd>'auto'</dd>
82
83 <dt>height:</dt>
84 <dd>'auto'</dd>
85 </dl>
86 </div>
87 <div id="box3" class="box">
88 <dl>
89 <dt>top:</dt>
90 <dd>0</dd>
91
92 <dt>left:</dt>
93 <dd>0</dd>
94
95 <dt>width:</dt>
96 <dd>'auto'</dd>
97
98 <dt>height:</dt>
99 <dd>'auto'</dd>
100 </dl>
101 </div>
102 <div id="box4" class="box">
103 <dl>
104 <dt>top:</dt>
105 <dd>-5</dd>
106
107 <dt>left:</dt>
108 <dd>-5</dd>
109
110 <dt>width:</dt>
111 <dd>270</dd>
112
113 <dt>height:</dt>
114 <dd>120</dd>
115 </dl>
116 </div>
117 <div id="box5" class="box">
118 <dl>
119 <dt>top:</dt>
120 <dd>0</dd>
121
122 <dt>left:</dt>
123 <dd>0</dd>
124
125 <dt>width:</dt>
126 <dd>260</dd>
127
128 <dt>height:</dt>
129 <dd>110</dd>
130 </dl>
131 </div>
132 <div id="box6" class="box">
133 <dl>
134 <dt>top:</dt>
135 <dd>'-5px'</dd>
136
137 <dt>left:</dt>
138 <dd>'-5px'</dd>
139
140 <dt>width:</dt>
141 <dd>'270px'</dd>
142
143 <dt>height:</dt>
144 <dd>'120px'</dd>
145 </dl>
146 </div>
147 <div id="box7" class="box">
148 <dl>
149 <dt>top:</dt>
150 <dd>'-.5em'</dd>
151
152 <dt>left:</dt>
153 <dd>'-.5em'</dd>
154
155 <dt>width:</dt>
156 <dd>'17em'</dd>
157
158 <dt>height:</dt>
159 <dd>'12em'</dd>
160 </dl>
161 </div>
162 <div id="box8" class="box">
163 <dl>
164 <dt>top:</dt>
165 <dd>'-.5em'</dd>
166
167 <dt>left:</dt>
168 <dd>'-.5em'</dd>
169
170 <dt>width:</dt>
171 <dd>'auto'</dd>
172
173 <dt>height:</dt>
174 <dd>'auto'</dd>
175 </dl>
176 </div>
177 <div id="box9" class="box">
178 <dl>
179 <dt>top:</dt>
180 <dd>'auto'</dd>
181
182 <dt>left:</dt>
183 <dd>'auto'</dd>
184
185 <dt>width:</dt>
186 <dd>'auto'</dd>
187
188 <dt>height:</dt>
189 <dd>'auto'</dd>
190
191 <dt>opacity:</dt>
192 <dd>false</dd>
193 </dl>
194 </div>
195 </div>
196 </body>
197</html> \ No newline at end of file
diff --git a/static/development-bundle/external/cookie/jquery.cookie.js b/static/development-bundle/external/cookie/jquery.cookie.js
new file mode 100644
index 0000000..a80bfa2
--- /dev/null
+++ b/static/development-bundle/external/cookie/jquery.cookie.js
@@ -0,0 +1,97 @@
1/**
2 * Cookie plugin
3 *
4 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
5 * Dual licensed under the MIT and GPL licenses:
6 * http://www.opensource.org/licenses/mit-license.php
7 * http://www.gnu.org/licenses/gpl.html
8 *
9 */
10
11/**
12 * Create a cookie with the given name and value and other optional parameters.
13 *
14 * @example $.cookie('the_cookie', 'the_value');
15 * @desc Set the value of a cookie.
16 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
17 * @desc Create a cookie with all available options.
18 * @example $.cookie('the_cookie', 'the_value');
19 * @desc Create a session cookie.
20 * @example $.cookie('the_cookie', null);
21 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
22 * used when the cookie was set.
23 *
24 * @param String name The name of the cookie.
25 * @param String value The value of the cookie.
26 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
27 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
28 * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
29 * If set to null or omitted, the cookie will be a session cookie and will not be retained
30 * when the the browser exits.
31 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
32 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
33 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
34 * require a secure protocol (like HTTPS).
35 * @type undefined
36 *
37 * @name $.cookie
38 * @cat Plugins/Cookie
39 * @author Klaus Hartl/klaus.hartl@stilbuero.de
40 */
41
42/**
43 * Get the value of a cookie with the given name.
44 *
45 * @example $.cookie('the_cookie');
46 * @desc Get the value of a cookie.
47 *
48 * @param String name The name of the cookie.
49 * @return The value of the cookie.
50 * @type String
51 *
52 * @name $.cookie
53 * @cat Plugins/Cookie
54 * @author Klaus Hartl/klaus.hartl@stilbuero.de
55 */
56jQuery.cookie = function(name, value, options) {
57 if (typeof value != 'undefined') { // name and value given, set cookie
58 options = options || {};
59 if (value === null) {
60 value = '';
61 options = $.extend({}, options); // clone object since it's unexpected behavior if the expired property were changed
62 options.expires = -1;
63 }
64 var expires = '';
65 if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
66 var date;
67 if (typeof options.expires == 'number') {
68 date = new Date();
69 date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
70 } else {
71 date = options.expires;
72 }
73 expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
74 }
75 // NOTE Needed to parenthesize options.path and options.domain
76 // in the following expressions, otherwise they evaluate to undefined
77 // in the packed version for some reason...
78 var path = options.path ? '; path=' + (options.path) : '';
79 var domain = options.domain ? '; domain=' + (options.domain) : '';
80 var secure = options.secure ? '; secure' : '';
81 document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
82 } else { // only name given, get cookie
83 var cookieValue = null;
84 if (document.cookie && document.cookie != '') {
85 var cookies = document.cookie.split(';');
86 for (var i = 0; i < cookies.length; i++) {
87 var cookie = jQuery.trim(cookies[i]);
88 // Does this cookie string begin with the name we want?
89 if (cookie.substring(0, name.length + 1) == (name + '=')) {
90 cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
91 break;
92 }
93 }
94 }
95 return cookieValue;
96 }
97}; \ No newline at end of file
diff --git a/static/development-bundle/external/cookie/jquery.cookie.min.js b/static/development-bundle/external/cookie/jquery.cookie.min.js
new file mode 100644
index 0000000..cb09af9
--- /dev/null
+++ b/static/development-bundle/external/cookie/jquery.cookie.min.js
@@ -0,0 +1,10 @@
1/**
2 * Cookie plugin
3 *
4 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
5 * Dual licensed under the MIT and GPL licenses:
6 * http://www.opensource.org/licenses/mit-license.php
7 * http://www.gnu.org/licenses/gpl.html
8 *
9 */
10jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}}; \ No newline at end of file
diff --git a/static/development-bundle/external/cookie/jquery.cookie.pack.js b/static/development-bundle/external/cookie/jquery.cookie.pack.js
new file mode 100644
index 0000000..adf66b7
--- /dev/null
+++ b/static/development-bundle/external/cookie/jquery.cookie.pack.js
@@ -0,0 +1,10 @@
1/**
2 * Cookie plugin
3 *
4 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
5 * Dual licensed under the MIT and GPL licenses:
6 * http://www.opensource.org/licenses/mit-license.php
7 * http://www.gnu.org/licenses/gpl.html
8 *
9 */
10eval(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}('q.5=x(k,d,a){4(m d!=\'H\'){a=a||{};4(d===p){d=\'\';a=$.A({},a);a.3=-1}2 g=\'\';4(a.3&&(m a.3==\'u\'||a.3.s)){2 f;4(m a.3==\'u\'){f=F C();f.B(f.z()+(a.3*y*o*o*v))}n{f=a.3}g=\'; 3=\'+f.s()}2 b=a.7?\'; 7=\'+(a.7):\'\';2 e=a.9?\'; 9=\'+(a.9):\'\';2 l=a.t?\'; t\':\'\';6.5=[k,\'=\',L(d),g,b,e,l].K(\'\')}n{2 h=p;4(6.5&&6.5!=\'\'){2 c=6.5.E(\';\');D(2 i=0;i<c.8;i++){2 j=q.G(c[i]);4(j.r(0,k.8+1)==(k+\'=\')){h=I(j.r(k.8+1));J}}}w h}};',48,48,'||var|expires|if|cookie|document|path|length|domain|||||||||||||typeof|else|60|null|jQuery|substring|toUTCString|secure|number|1000|return|function|24|getTime|extend|setTime|Date|for|split|new|trim|undefined|decodeURIComponent|break|join|encodeURIComponent'.split('|'),0,{})) \ No newline at end of file
diff --git a/static/development-bundle/external/cookie/jquery.cookie.zip b/static/development-bundle/external/cookie/jquery.cookie.zip
new file mode 100644
index 0000000..90f540b
--- /dev/null
+++ b/static/development-bundle/external/cookie/jquery.cookie.zip
Binary files differ
diff --git a/static/development-bundle/external/jsdiff/jsdiff.js b/static/development-bundle/external/jsdiff/jsdiff.js
new file mode 100644
index 0000000..31c3a27
--- /dev/null
+++ b/static/development-bundle/external/jsdiff/jsdiff.js
@@ -0,0 +1,159 @@
1/*
2 * Javascript Diff Algorithm
3 * By John Resig (http://ejohn.org/)
4 * Modified by Chu Alan "sprite"
5 *
6 * More Info:
7 * http://ejohn.org/projects/javascript-diff-algorithm/
8 */
9
10function escape(s) {
11 var n = s;
12 n = n.replace(/&/g, "&amp;");
13 n = n.replace(/</g, "&lt;");
14 n = n.replace(/>/g, "&gt;");
15 n = n.replace(/"/g, "&quot;");
16
17 return n;
18}
19
20function diffString( o, n ) {
21 o = o.replace(/\s+$/, '');
22 n = n.replace(/\s+$/, '');
23
24 var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/) );
25 var str = "";
26
27 var oSpace = o.match(/\s+/g);
28 if (oSpace == null) {
29 oSpace = ["\n"];
30 } else {
31 oSpace.push("\n");
32 }
33 var nSpace = n.match(/\s+/g);
34 if (nSpace == null) {
35 nSpace = ["\n"];
36 } else {
37 nSpace.push("\n");
38 }
39
40 if (out.n.length == 0) {
41 for (var i = 0; i < out.o.length; i++) {
42 str += '<del>' + escape(out.o[i]) + oSpace[i] + "</del>";
43 }
44 } else {
45 if (out.n[0].text == null) {
46 for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
47 str += '<del>' + escape(out.o[n]) + oSpace[n] + "</del>";
48 }
49 }
50
51 for ( var i = 0; i < out.n.length; i++ ) {
52 if (out.n[i].text == null) {
53 str += '<ins>' + escape(out.n[i]) + nSpace[i] + "</ins>";
54 } else {
55 var pre = "";
56
57 for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
58 pre += '<del>' + escape(out.o[n]) + oSpace[n] + "</del>";
59 }
60 str += " " + out.n[i].text + nSpace[i] + pre;
61 }
62 }
63 }
64
65 return str;
66}
67
68function randomColor() {
69 return "rgb(" + (Math.random() * 100) + "%, " +
70 (Math.random() * 100) + "%, " +
71 (Math.random() * 100) + "%)";
72}
73function diffString2( o, n ) {
74 o = o.replace(/\s+$/, '');
75 n = n.replace(/\s+$/, '');
76
77 var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/) );
78
79 var oSpace = o.match(/\s+/g);
80 if (oSpace == null) {
81 oSpace = ["\n"];
82 } else {
83 oSpace.push("\n");
84 }
85 var nSpace = n.match(/\s+/g);
86 if (nSpace == null) {
87 nSpace = ["\n"];
88 } else {
89 nSpace.push("\n");
90 }
91
92 var os = "";
93 var colors = new Array();
94 for (var i = 0; i < out.o.length; i++) {
95 colors[i] = randomColor();
96
97 if (out.o[i].text != null) {
98 os += '<span style="background-color: ' +colors[i]+ '">' +
99 escape(out.o[i].text) + oSpace[i] + "</span>";
100 } else {
101 os += "<del>" + escape(out.o[i]) + oSpace[i] + "</del>";
102 }
103 }
104
105 var ns = "";
106 for (var i = 0; i < out.n.length; i++) {
107 if (out.n[i].text != null) {
108 ns += '<span style="background-color: ' +colors[out.n[i].row]+ '">' +
109 escape(out.n[i].text) + nSpace[i] + "</span>";
110 } else {
111 ns += "<ins>" + escape(out.n[i]) + nSpace[i] + "</ins>";
112 }
113 }
114
115 return { o : os , n : ns };
116}
117
118function diff( o, n ) {
119 var ns = new Object();
120 var os = new Object();
121
122 for ( var i = 0; i < n.length; i++ ) {
123 if ( ns[ n[i] ] == null )
124 ns[ n[i] ] = { rows: new Array(), o: null };
125 ns[ n[i] ].rows.push( i );
126 }
127
128 for ( var i = 0; i < o.length; i++ ) {
129 if ( os[ o[i] ] == null )
130 os[ o[i] ] = { rows: new Array(), n: null };
131 os[ o[i] ].rows.push( i );
132 }
133
134 for ( var i in ns ) {
135 if ( ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1 ) {
136 n[ ns[i].rows[0] ] = { text: n[ ns[i].rows[0] ], row: os[i].rows[0] };
137 o[ os[i].rows[0] ] = { text: o[ os[i].rows[0] ], row: ns[i].rows[0] };
138 }
139 }
140
141 for ( var i = 0; i < n.length - 1; i++ ) {
142 if ( n[i].text != null && n[i+1].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
143 n[i+1] == o[ n[i].row + 1 ] ) {
144 n[i+1] = { text: n[i+1], row: n[i].row + 1 };
145 o[n[i].row+1] = { text: o[n[i].row+1], row: i + 1 };
146 }
147 }
148
149 for ( var i = n.length - 1; i > 0; i-- ) {
150 if ( n[i].text != null && n[i-1].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
151 n[i-1] == o[ n[i].row - 1 ] ) {
152 n[i-1] = { text: n[i-1], row: n[i].row - 1 };
153 o[n[i].row-1] = { text: o[n[i].row-1], row: i - 1 };
154 }
155 }
156
157 return { o: o, n: n };
158}
159
diff --git a/static/development-bundle/external/qunit/testrunner.js b/static/development-bundle/external/qunit/testrunner.js
new file mode 100644
index 0000000..50fc359
--- /dev/null
+++ b/static/development-bundle/external/qunit/testrunner.js
@@ -0,0 +1,780 @@
1/*
2 * QUnit - jQuery unit testrunner
3 *
4 * http://docs.jquery.com/QUnit
5 *
6 * Copyright (c) 2008 John Resig, Jörn Zaefferer
7 * Dual licensed under the MIT (MIT-LICENSE.txt)
8 * and GPL (GPL-LICENSE.txt) licenses.
9 *
10 * $Id: testrunner.js 6173 2009-02-02 20:09:32Z jeresig $
11 */
12
13(function($) {
14
15// Tests for equality any JavaScript type and structure without unexpected results.
16// Discussions and reference: http://philrathe.com/articles/equiv
17// Test suites: http://philrathe.com/tests/equiv
18// Author: Philippe Rathé <prathe@gmail.com>
19var equiv = function () {
20
21 var innerEquiv; // the real equiv function
22 var callers = []; // stack to decide between skip/abort functions
23
24 // Determine what is o.
25 function hoozit(o) {
26 if (typeof o === "string") {
27 return "string";
28
29 } else if (typeof o === "boolean") {
30 return "boolean";
31
32 } else if (typeof o === "number") {
33
34 if (isNaN(o)) {
35 return "nan";
36 } else {
37 return "number";
38 }
39
40 } else if (typeof o === "undefined") {
41 return "undefined";
42
43 // consider: typeof null === object
44 } else if (o === null) {
45 return "null";
46
47 // consider: typeof [] === object
48 } else if (o instanceof Array) {
49 return "array";
50
51 // consider: typeof new Date() === object
52 } else if (o instanceof Date) {
53 return "date";
54
55 // consider: /./ instanceof Object;
56 // /./ instanceof RegExp;
57 // typeof /./ === "function"; // => false in IE and Opera,
58 // true in FF and Safari
59 } else if (o instanceof RegExp) {
60 return "regexp";
61
62 } else if (typeof o === "object") {
63 return "object";
64
65 } else if (o instanceof Function) {
66 return "function";
67 }
68 }
69
70 // Call the o related callback with the given arguments.
71 function bindCallbacks(o, callbacks, args) {
72 var prop = hoozit(o);
73 if (prop) {
74 if (hoozit(callbacks[prop]) === "function") {
75 return callbacks[prop].apply(callbacks, args);
76 } else {
77 return callbacks[prop]; // or undefined
78 }
79 }
80 }
81
82 var callbacks = function () {
83
84 // for string, boolean, number and null
85 function useStrictEquality(b, a) {
86 return a === b;
87 }
88
89 return {
90 "string": useStrictEquality,
91 "boolean": useStrictEquality,
92 "number": useStrictEquality,
93 "null": useStrictEquality,
94 "undefined": useStrictEquality,
95
96 "nan": function (b) {
97 return isNaN(b);
98 },
99
100 "date": function (b, a) {
101 return hoozit(b) === "date" && a.valueOf() === b.valueOf();
102 },
103
104 "regexp": function (b, a) {
105 return hoozit(b) === "regexp" &&
106 a.source === b.source && // the regex itself
107 a.global === b.global && // and its modifers (gmi) ...
108 a.ignoreCase === b.ignoreCase &&
109 a.multiline === b.multiline;
110 },
111
112 // - skip when the property is a method of an instance (OOP)
113 // - abort otherwise,
114 // initial === would have catch identical references anyway
115 "function": function () {
116 var caller = callers[callers.length - 1];
117 return caller !== Object &&
118 typeof caller !== "undefined";
119 },
120
121 "array": function (b, a) {
122 var i;
123 var len;
124
125 // b could be an object literal here
126 if ( ! (hoozit(b) === "array")) {
127 return false;
128 }
129
130 len = a.length;
131 if (len !== b.length) { // safe and faster
132 return false;
133 }
134 for (i = 0; i < len; i++) {
135 if( ! innerEquiv(a[i], b[i])) {
136 return false;
137 }
138 }
139 return true;
140 },
141
142 "object": function (b, a) {
143 var i;
144 var eq = true; // unless we can proove it
145 var aProperties = [], bProperties = []; // collection of strings
146
147 // comparing constructors is more strict than using instanceof
148 if ( a.constructor !== b.constructor) {
149 return false;
150 }
151
152 // stack constructor before traversing properties
153 callers.push(a.constructor);
154
155 for (i in a) { // be strict: don't ensures hasOwnProperty and go deep
156
157 aProperties.push(i); // collect a's properties
158
159 if ( ! innerEquiv(a[i], b[i])) {
160 eq = false;
161 }
162 }
163
164 callers.pop(); // unstack, we are done
165
166 for (i in b) {
167 bProperties.push(i); // collect b's properties
168 }
169
170 // Ensures identical properties name
171 return eq && innerEquiv(aProperties.sort(), bProperties.sort());
172 }
173 };
174 }();
175
176 innerEquiv = function () { // can take multiple arguments
177 var args = Array.prototype.slice.apply(arguments);
178 if (args.length < 2) {
179 return true; // end transition
180 }
181
182 return (function (a, b) {
183 if (a === b) {
184 return true; // catch the most you can
185
186 } else if (typeof a !== typeof b || a === null || b === null || typeof a === "undefined" || typeof b === "undefined") {
187 return false; // don't lose time with error prone cases
188
189 } else {
190 return bindCallbacks(a, callbacks, [b, a]);
191 }
192
193 // apply transition with (1..n) arguments
194 })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));
195 };
196
197 return innerEquiv;
198}(); // equiv
199
200var GETParams = $.map( location.search.slice(1).split('&'), decodeURIComponent ),
201 ngindex = $.inArray("noglobals", GETParams),
202 noglobals = ngindex !== -1;
203
204if( noglobals )
205 GETParams.splice( ngindex, 1 );
206
207var config = {
208 stats: {
209 all: 0,
210 bad: 0
211 },
212 queue: [],
213 // block until document ready
214 blocking: true,
215 //restrict modules/tests by get parameters
216 filters: GETParams,
217 isLocal: !!(window.location.protocol == 'file:')
218};
219
220// public API as global methods
221$.extend(window, {
222 test: test,
223 module: module,
224 expect: expect,
225 ok: ok,
226 equals: equals,
227 start: start,
228 stop: stop,
229 reset: reset,
230 isLocal: config.isLocal,
231 same: function(a, b, message) {
232 push(equiv(a, b), a, b, message);
233 },
234 QUnit: {
235 equiv: equiv,
236 ok: ok,
237 done: function(failures, total){},
238 log: function(result, message){}
239 },
240 // legacy methods below
241 isSet: isSet,
242 isObj: isObj,
243 compare: function() {
244 throw "compare is deprecated - use same() instead";
245 },
246 compare2: function() {
247 throw "compare2 is deprecated - use same() instead";
248 },
249 serialArray: function() {
250 throw "serialArray is deprecated - use jsDump.parse() instead";
251 },
252 q: q,
253 t: t,
254 url: url,
255 triggerEvent: triggerEvent
256});
257
258$(window).load(function() {
259 $('#userAgent').html(navigator.userAgent);
260 var head = $('<div class="testrunner-toolbar"><label for="filter-pass">Hide passed tests</label></div>').insertAfter("#userAgent");
261 $('<input type="checkbox" id="filter-pass" />').attr("disabled", true).prependTo(head).click(function() {
262 $('li.pass')[this.checked ? 'hide' : 'show']();
263 });
264 $('<input type="checkbox" id="filter-missing">').attr("disabled", true).appendTo(head).click(function() {
265 $("li.fail:contains('missing test - untested code is broken code')").parent('ol').parent('li.fail')[this.checked ? 'hide' : 'show']();
266 });
267 $("#filter-missing").after('<label for="filter-missing">Hide missing tests (untested code is broken code)</label>');
268 runTest();
269});
270
271function synchronize(callback) {
272 config.queue.push(callback);
273 if(!config.blocking) {
274 process();
275 }
276}
277
278function process() {
279 while(config.queue.length && !config.blocking) {
280 config.queue.shift()();
281 }
282}
283
284function stop(timeout) {
285 config.blocking = true;
286 if (timeout)
287 config.timeout = setTimeout(function() {
288 QUnit.ok( false, "Test timed out" );
289 start();
290 }, timeout);
291}
292function start() {
293 // A slight delay, to avoid any current callbacks
294 setTimeout(function() {
295 if(config.timeout)
296 clearTimeout(config.timeout);
297 config.blocking = false;
298 process();
299 }, 13);
300}
301
302function validTest( name ) {
303 var i = config.filters.length,
304 run = false;
305
306 if( !i )
307 return true;
308
309 while( i-- ){
310 var filter = config.filters[i],
311 not = filter.charAt(0) == '!';
312 if( not )
313 filter = filter.slice(1);
314 if( name.indexOf(filter) != -1 )
315 return !not;
316 if( not )
317 run = true;
318 }
319 return run;
320}
321
322function runTest() {
323 config.blocking = false;
324 var started = +new Date;
325 config.fixture = document.getElementById('main').innerHTML;
326 config.ajaxSettings = $.ajaxSettings;
327 synchronize(function() {
328 $('<p id="testresult" class="result"/>').html(['Tests completed in ',
329 +new Date - started, ' milliseconds.<br/>',
330 '<span class="bad">', config.stats.bad, '</span> tests of <span class="all">', config.stats.all, '</span> failed.']
331 .join(''))
332 .appendTo("body");
333 $("#banner").addClass(config.stats.bad ? "fail" : "pass");
334 QUnit.done( config.stats.bad, config.stats.all );
335 });
336}
337
338var pollution;
339
340function saveGlobal(){
341 pollution = [ ];
342
343 if( noglobals )
344 for( var key in window )
345 pollution.push(key);
346}
347function checkPollution( name ){
348 var old = pollution;
349 saveGlobal();
350
351 if( pollution.length > old.length ){
352 ok( false, "Introduced global variable(s): " + diff(old, pollution).join(", ") );
353 config.expected++;
354 }
355}
356
357function diff( clean, dirty ){
358 return $.grep( dirty, function(name){
359 return $.inArray( name, clean ) == -1;
360 });
361}
362
363function test(name, callback) {
364 if(config.currentModule)
365 name = config.currentModule + " module: " + name;
366 var lifecycle = $.extend({
367 setup: function() {},
368 teardown: function() {}
369 }, config.moduleLifecycle);
370
371 if ( !validTest(name) )
372 return;
373
374 synchronize(function() {
375 config.assertions = [];
376 config.expected = null;
377 try {
378 if( !pollution )
379 saveGlobal();
380 lifecycle.setup();
381 } catch(e) {
382 QUnit.ok( false, "Setup failed on " + name + ": " + e.message );
383 }
384 })
385 synchronize(function() {
386 try {
387 callback();
388 } catch(e) {
389 if( typeof console != "undefined" && console.error && console.warn ) {
390 console.error("Test " + name + " died, exception and test follows");
391 console.error(e);
392 console.warn(callback.toString());
393 }
394 QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message );
395 // else next test will carry the responsibility
396 saveGlobal();
397 }
398 });
399 synchronize(function() {
400 try {
401 checkPollution();
402 lifecycle.teardown();
403 } catch(e) {
404 QUnit.ok( false, "Teardown failed on " + name + ": " + e.message );
405 }
406 })
407 synchronize(function() {
408 try {
409 reset();
410 } catch(e) {
411 if( typeof console != "undefined" && console.error && console.warn ) {
412 console.error("reset() failed, following Test " + name + ", exception and reset fn follows");
413 console.error(e);
414 console.warn(reset.toString());
415 }
416 }
417
418 if(config.expected && config.expected != config.assertions.length) {
419 QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" );
420 }
421
422 var good = 0, bad = 0;
423 var ol = $("<ol/>").hide();
424 config.stats.all += config.assertions.length;
425 for ( var i = 0; i < config.assertions.length; i++ ) {
426 var assertion = config.assertions[i];
427 $("<li/>").addClass(assertion.result ? "pass" : "fail").text(assertion.message || "(no message)").appendTo(ol);
428 assertion.result ? good++ : bad++;
429 }
430 config.stats.bad += bad;
431
432 var b = $("<strong/>").html(name + " <b style='color:black;'>(<b class='fail'>" + bad + "</b>, <b class='pass'>" + good + "</b>, " + config.assertions.length + ")</b>")
433 .click(function(){
434 $(this).next().toggle();
435 })
436 .dblclick(function(event) {
437 var target = $(event.target).filter("strong").clone();
438 if ( target.length ) {
439 target.children().remove();
440 location.href = location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent($.trim(target.text()));
441 }
442 });
443
444 $("<li/>").addClass(bad ? "fail" : "pass").append(b).append(ol).appendTo("#tests");
445
446 if(bad) {
447 $("#filter-pass").attr("disabled", null);
448 $("#filter-missing").attr("disabled", null);
449 }
450 });
451}
452
453// call on start of module test to prepend name to all tests
454function module(name, lifecycle) {
455 config.currentModule = name;
456 config.moduleLifecycle = lifecycle;
457}
458
459/**
460 * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
461 */
462function expect(asserts) {
463 config.expected = asserts;
464}
465
466/**
467 * Resets the test setup. Useful for tests that modify the DOM.
468 */
469function reset() {
470 $("#main").html( config.fixture );
471 $.event.global = {};
472 $.ajaxSettings = $.extend({}, config.ajaxSettings);
473}
474
475/**
476 * Asserts true.
477 * @example ok( $("a").size() > 5, "There must be at least 5 anchors" );
478 */
479function ok(a, msg) {
480 QUnit.log(a, msg);
481
482 config.assertions.push({
483 result: !!a,
484 message: msg
485 });
486}
487
488/**
489 * Asserts that two arrays are the same
490 */
491function isSet(a, b, msg) {
492 function serialArray( a ) {
493 var r = [];
494
495 if ( a && a.length )
496 for ( var i = 0; i < a.length; i++ ) {
497 var str = a[i].nodeName;
498 if ( str ) {
499 str = str.toLowerCase();
500 if ( a[i].id )
501 str += "#" + a[i].id;
502 } else
503 str = a[i];
504 r.push( str );
505 }
506
507 return "[ " + r.join(", ") + " ]";
508 }
509 var ret = true;
510 if ( a && b && a.length != undefined && a.length == b.length ) {
511 for ( var i = 0; i < a.length; i++ )
512 if ( a[i] != b[i] )
513 ret = false;
514 } else
515 ret = false;
516 QUnit.ok( ret, !ret ? (msg + " expected: " + serialArray(b) + " result: " + serialArray(a)) : msg );
517}
518
519/**
520 * Asserts that two objects are equivalent
521 */
522function isObj(a, b, msg) {
523 var ret = true;
524
525 if ( a && b ) {
526 for ( var i in a )
527 if ( a[i] != b[i] )
528 ret = false;
529
530 for ( i in b )
531 if ( a[i] != b[i] )
532 ret = false;
533 } else
534 ret = false;
535
536 QUnit.ok( ret, msg );
537}
538
539/**
540 * Returns an array of elements with the given IDs, eg.
541 * @example q("main", "foo", "bar")
542 * @result [<div id="main">, <span id="foo">, <input id="bar">]
543 */
544function q() {
545 var r = [];
546 for ( var i = 0; i < arguments.length; i++ )
547 r.push( document.getElementById( arguments[i] ) );
548 return r;
549}
550
551/**
552 * Asserts that a select matches the given IDs
553 * @example t("Check for something", "//[a]", ["foo", "baar"]);
554 * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar'
555 */
556function t(a,b,c) {
557 var f = $(b);
558 var s = "";
559 for ( var i = 0; i < f.length; i++ )
560 s += (s && ",") + '"' + f[i].id + '"';
561 isSet(f, q.apply(q,c), a + " (" + b + ")");
562}
563
564/**
565 * Add random number to url to stop IE from caching
566 *
567 * @example url("data/test.html")
568 * @result "data/test.html?10538358428943"
569 *
570 * @example url("data/test.php?foo=bar")
571 * @result "data/test.php?foo=bar&10538358345554"
572 */
573function url(value) {
574 return value + (/\?/.test(value) ? "&" : "?") + new Date().getTime() + "" + parseInt(Math.random()*100000);
575}
576
577/**
578 * Checks that the first two arguments are equal, with an optional message.
579 * Prints out both actual and expected values.
580 *
581 * Prefered to ok( actual == expected, message )
582 *
583 * @example equals( $.format("Received {0} bytes.", 2), "Received 2 bytes." );
584 *
585 * @param Object actual
586 * @param Object expected
587 * @param String message (optional)
588 */
589function equals(actual, expected, message) {
590 push(expected == actual, actual, expected, message);
591}
592
593function push(result, actual, expected, message) {
594 message = message || (result ? "okay" : "failed");
595 QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + jsDump.parse(expected) + " result: " + jsDump.parse(actual) );
596}
597
598/**
599 * Trigger an event on an element.
600 *
601 * @example triggerEvent( document.body, "click" );
602 *
603 * @param DOMElement elem
604 * @param String type
605 */
606function triggerEvent( elem, type, event ) {
607 if ( $.browser.mozilla || $.browser.opera ) {
608 event = document.createEvent("MouseEvents");
609 event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
610 0, 0, 0, 0, 0, false, false, false, false, 0, null);
611 elem.dispatchEvent( event );
612 } else if ( $.browser.msie ) {
613 elem.fireEvent("on"+type);
614 }
615}
616
617})(jQuery);
618
619/**
620 * jsDump
621 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
622 * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)
623 * Date: 5/15/2008
624 * @projectDescription Advanced and extensible data dumping for Javascript.
625 * @version 1.0.0
626 * @author Ariel Flesler
627 * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
628 */
629(function(){
630 function quote( str ){
631 return '"' + str.toString().replace(/"/g, '\\"') + '"';
632 };
633 function literal( o ){
634 return o + '';
635 };
636 function join( pre, arr, post ){
637 var s = jsDump.separator(),
638 base = jsDump.indent();
639 inner = jsDump.indent(1);
640 if( arr.join )
641 arr = arr.join( ',' + s + inner );
642 if( !arr )
643 return pre + post;
644 return [ pre, inner + arr, base + post ].join(s);
645 };
646 function array( arr ){
647 var i = arr.length, ret = Array(i);
648 this.up();
649 while( i-- )
650 ret[i] = this.parse( arr[i] );
651 this.down();
652 return join( '[', ret, ']' );
653 };
654
655 var reName = /^function (\w+)/;
656
657 var jsDump = window.jsDump = {
658 parse:function( obj, type ){//type is used mostly internally, you can fix a (custom)type in advance
659 var parser = this.parsers[ type || this.typeOf(obj) ];
660 type = typeof parser;
661
662 return type == 'function' ? parser.call( this, obj ) :
663 type == 'string' ? parser :
664 this.parsers.error;
665 },
666 typeOf:function( obj ){
667 var type = typeof obj,
668 f = 'function';//we'll use it 3 times, save it
669 return type != 'object' && type != f ? type :
670 !obj ? 'null' :
671 obj.exec ? 'regexp' :// some browsers (FF) consider regexps functions
672 obj.getHours ? 'date' :
673 obj.scrollBy ? 'window' :
674 obj.nodeName == '#document' ? 'document' :
675 obj.nodeName ? 'node' :
676 obj.item ? 'nodelist' : // Safari reports nodelists as functions
677 obj.callee ? 'arguments' :
678 obj.call || obj.constructor != Array && //an array would also fall on this hack
679 (obj+'').indexOf(f) != -1 ? f : //IE reports functions like alert, as objects
680 'length' in obj ? 'array' :
681 type;
682 },
683 separator:function(){
684 return this.multiline ? this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
685 },
686 indent:function( extra ){// extra can be a number, shortcut for increasing-calling-decreasing
687 if( !this.multiline )
688 return '';
689 var chr = this.indentChar;
690 if( this.HTML )
691 chr = chr.replace(/\t/g,' ').replace(/ /g,'&nbsp;');
692 return Array( this._depth_ + (extra||0) ).join(chr);
693 },
694 up:function( a ){
695 this._depth_ += a || 1;
696 },
697 down:function( a ){
698 this._depth_ -= a || 1;
699 },
700 setParser:function( name, parser ){
701 this.parsers[name] = parser;
702 },
703 // The next 3 are exposed so you can use them
704 quote:quote,
705 literal:literal,
706 join:join,
707 //
708 _depth_: 1,
709 // This is the list of parsers, to modify them, use jsDump.setParser
710 parsers:{
711 window: '[Window]',
712 document: '[Document]',
713 error:'[ERROR]', //when no parser is found, shouldn't happen
714 unknown: '[Unknown]',
715 'null':'null',
716 undefined:'undefined',
717 'function':function( fn ){
718 var ret = 'function',
719 name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
720 if( name )
721 ret += ' ' + name;
722 ret += '(';
723
724 ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join('');
725 return join( ret, this.parse(fn,'functionCode'), '}' );
726 },
727 array: array,
728 nodelist: array,
729 arguments: array,
730 object:function( map ){
731 var ret = [ ];
732 this.up();
733 for( var key in map )
734 ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) );
735 this.down();
736 return join( '{', ret, '}' );
737 },
738 node:function( node ){
739 var open = this.HTML ? '&lt;' : '<',
740 close = this.HTML ? '&gt;' : '>';
741
742 var tag = node.nodeName.toLowerCase(),
743 ret = open + tag;
744
745 for( var a in this.DOMAttrs ){
746 var val = node[this.DOMAttrs[a]];
747 if( val )
748 ret += ' ' + a + '=' + this.parse( val, 'attribute' );
749 }
750 return ret + close + open + '/' + tag + close;
751 },
752 functionArgs:function( fn ){//function calls it internally, it's the arguments part of the function
753 var l = fn.length;
754 if( !l ) return '';
755
756 var args = Array(l);
757 while( l-- )
758 args[l] = String.fromCharCode(97+l);//97 is 'a'
759 return ' ' + args.join(', ') + ' ';
760 },
761 key:quote, //object calls it internally, the key part of an item in a map
762 functionCode:'[code]', //function calls it internally, it's the content of the function
763 attribute:quote, //node calls it internally, it's an html attribute value
764 string:quote,
765 date:quote,
766 regexp:literal, //regex
767 number:literal,
768 'boolean':literal
769 },
770 DOMAttrs:{//attributes to dump from nodes, name=>realName
771 id:'id',
772 name:'name',
773 'class':'className'
774 },
775 HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
776 indentChar:' ',//indentation unit
777 multiline:true //if true, items in a collection, are separated by a \n, else just a space.
778 };
779
780})();
diff --git a/static/development-bundle/external/qunit/testsuite.css b/static/development-bundle/external/qunit/testsuite.css
new file mode 100644
index 0000000..dbfc43a
--- /dev/null
+++ b/static/development-bundle/external/qunit/testsuite.css
@@ -0,0 +1,120 @@
1body, div, h1 { font-family: 'trebuchet ms', verdana, arial; margin: 0; padding: 0 }
2body {font-size: 10pt; }
3h1 { padding: 15px; font-size: large; background-color: #06b; color: white; }
4h1 a { color: white; }
5h2 { padding: 10px; background-color: #eee; color: black; margin: 0; font-size: small; font-weight: normal }
6
7.pass { color: green; }
8.fail { color: red; }
9p.result { margin-left: 1em; }
10
11#banner { height: 2em; border-bottom: 1px solid white; }
12h2.pass { background-color: green; }
13h2.fail { background-color: red; }
14
15div.testrunner-toolbar { background: #eee; border-top: 1px solid black; padding: 10px; }
16
17ol#tests > li > strong { cursor:pointer; }
18
19div#fx-tests h4 {
20 background: red;
21}
22
23div#fx-tests h4.pass {
24 background: green;
25}
26
27div#fx-tests div.box {
28 background: red url(data/cow.jpg) no-repeat;
29 overflow: hidden;
30 border: 2px solid #000;
31}
32
33div#fx-tests div.overflow {
34 overflow: visible;
35}
36
37div.inline {
38 display: inline;
39}
40
41div.autoheight {
42 height: auto;
43}
44
45div.autowidth {
46 width: auto;
47}
48
49div.autoopacity {
50 opacity: auto;
51}
52
53div.largewidth {
54 width: 100px;
55}
56
57div.largeheight {
58 height: 100px;
59}
60
61div.largeopacity {
62 filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
63}
64
65div.medwidth {
66 width: 50px;
67}
68
69div.medheight {
70 height: 50px;
71}
72
73div.medopacity {
74 opacity: 0.5;
75 filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);
76}
77
78div.nowidth {
79 width: 0px;
80}
81
82div.noheight {
83 height: 0px;
84}
85
86div.noopacity {
87 opacity: 0;
88 filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
89}
90
91div.hidden {
92 display: none;
93}
94
95div#fx-tests div.widewidth {
96 background-repeat: repeat-x;
97}
98
99div#fx-tests div.wideheight {
100 background-repeat: repeat-y;
101}
102
103div#fx-tests div.widewidth.wideheight {
104 background-repeat: repeat;
105}
106
107div#fx-tests div.noback {
108 background-image: none;
109}
110
111div.chain, div.chain div { width: 100px; height: 20px; position: relative; float: left; }
112div.chain div { position: absolute; top: 0px; left: 0px; }
113
114div.chain.test { background: red; }
115div.chain.test div { background: green; }
116
117div.chain.out { background: green; }
118div.chain.out div { background: red; display: none; }
119
120div#show-tests * { display: none; }
diff --git a/static/development-bundle/external/simulate/jquery.simulate.js b/static/development-bundle/external/simulate/jquery.simulate.js
new file mode 100644
index 0000000..d52140b
--- /dev/null
+++ b/static/development-bundle/external/simulate/jquery.simulate.js
@@ -0,0 +1,152 @@
1/*
2 * jquery.simulate - simulate browser mouse and keyboard events
3 *
4 * Copyright (c) 2009 Eduardo Lundgren (eduardolundgren@gmail.com)
5 * and Richard D. Worth (rdworth@gmail.com)
6 *
7 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
8 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
9 *
10 */
11
12;(function($) {
13
14$.fn.extend({
15 simulate: function(type, options) {
16 return this.each(function() {
17 var opt = $.extend({}, $.simulate.defaults, options || {});
18 new $.simulate(this, type, opt);
19 });
20 }
21});
22
23$.simulate = function(el, type, options) {
24 this.target = el;
25 this.options = options;
26
27 if (/^drag$/.test(type)) {
28 this[type].apply(this, [this.target, options]);
29 } else {
30 this.simulateEvent(el, type, options);
31 }
32}
33
34$.extend($.simulate.prototype, {
35 simulateEvent: function(el, type, options) {
36 var evt = this.createEvent(type, options);
37 this.dispatchEvent(el, type, evt, options);
38 return evt;
39 },
40 createEvent: function(type, options) {
41 if (/^mouse(over|out|down|up|move)|(dbl)?click$/.test(type)) {
42 return this.mouseEvent(type, options);
43 } else if (/^key(up|down|press)$/.test(type)) {
44 return this.keyboardEvent(type, options);
45 }
46 },
47 mouseEvent: function(type, options) {
48 var evt;
49 var e = $.extend({
50 bubbles: true, cancelable: (type != "mousemove"), view: window, detail: 0,
51 screenX: 0, screenY: 0, clientX: 0, clientY: 0,
52 ctrlKey: false, altKey: false, shiftKey: false, metaKey: false,
53 button: 0, relatedTarget: undefined
54 }, options);
55
56 var relatedTarget = $(e.relatedTarget)[0];
57
58 if ($.isFunction(document.createEvent)) {
59 evt = document.createEvent("MouseEvents");
60 evt.initMouseEvent(type, e.bubbles, e.cancelable, e.view, e.detail,
61 e.screenX, e.screenY, e.clientX, e.clientY,
62 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
63 e.button, e.relatedTarget || document.body.parentNode);
64 } else if (document.createEventObject) {
65 evt = document.createEventObject();
66 $.extend(evt, e);
67 evt.button = { 0:1, 1:4, 2:2 }[evt.button] || evt.button;
68 }
69 return evt;
70 },
71 keyboardEvent: function(type, options) {
72 var evt;
73
74 var e = $.extend({ bubbles: true, cancelable: true, view: window,
75 ctrlKey: false, altKey: false, shiftKey: false, metaKey: false,
76 keyCode: 0, charCode: 0
77 }, options);
78
79 if ($.isFunction(document.createEvent)) {
80 try {
81 evt = document.createEvent("KeyEvents");
82 evt.initKeyEvent(type, e.bubbles, e.cancelable, e.view,
83 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
84 e.keyCode, e.charCode);
85 } catch(err) {
86 evt = document.createEvent("Events");
87 evt.initEvent(type, e.bubbles, e.cancelable);
88 $.extend(evt, { view: e.view,
89 ctrlKey: e.ctrlKey, altKey: e.altKey, shiftKey: e.shiftKey, metaKey: e.metaKey,
90 keyCode: e.keyCode, charCode: e.charCode
91 });
92 }
93 } else if (document.createEventObject) {
94 evt = document.createEventObject();
95 $.extend(evt, e);
96 }
97 if ($.browser.msie || $.browser.opera) {
98 evt.keyCode = (e.charCode > 0) ? e.charCode : e.keyCode;
99 evt.charCode = undefined;
100 }
101 return evt;
102 },
103
104 dispatchEvent: function(el, type, evt) {
105 if (el.dispatchEvent) {
106 el.dispatchEvent(evt);
107 } else if (el.fireEvent) {
108 el.fireEvent('on' + type, evt);
109 }
110 return evt;
111 },
112
113 drag: function(el) {
114 var self = this, center = this.findCenter(this.target),
115 options = this.options, x = Math.floor(center.x), y = Math.floor(center.y),
116 dx = options.dx || 0, dy = options.dy || 0, target = this.target;
117 var coord = { clientX: x, clientY: y };
118 this.simulateEvent(target, "mousedown", coord);
119 coord = { clientX: x + 1, clientY: y + 1 };
120 this.simulateEvent(document, "mousemove", coord);
121 coord = { clientX: x + dx, clientY: y + dy };
122 this.simulateEvent(document, "mousemove", coord);
123 this.simulateEvent(document, "mousemove", coord);
124 this.simulateEvent(target, "mouseup", coord);
125 },
126 findCenter: function(el) {
127 var el = $(this.target), o = el.offset();
128 return {
129 x: o.left + el.outerWidth() / 2,
130 y: o.top + el.outerHeight() / 2
131 };
132 }
133});
134
135$.extend($.simulate, {
136 defaults: {
137 speed: 'sync'
138 },
139 VK_TAB: 9,
140 VK_ENTER: 13,
141 VK_ESC: 27,
142 VK_PGUP: 33,
143 VK_PGDN: 34,
144 VK_END: 35,
145 VK_HOME: 36,
146 VK_LEFT: 37,
147 VK_UP: 38,
148 VK_RIGHT: 39,
149 VK_DOWN: 40
150});
151
152})(jQuery);
diff --git a/static/development-bundle/jquery-1.3.2.js b/static/development-bundle/jquery-1.3.2.js
new file mode 100644
index 0000000..462cde5
--- /dev/null
+++ b/static/development-bundle/jquery-1.3.2.js
@@ -0,0 +1,4376 @@
1/*!
2 * jQuery JavaScript Library v1.3.2
3 * http://jquery.com/
4 *
5 * Copyright (c) 2009 John Resig
6 * Dual licensed under the MIT and GPL licenses.
7 * http://docs.jquery.com/License
8 *
9 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
10 * Revision: 6246
11 */
12(function(){
13
14var
15 // Will speed up references to window, and allows munging its name.
16 window = this,
17 // Will speed up references to undefined, and allows munging its name.
18 undefined,
19 // Map over jQuery in case of overwrite
20 _jQuery = window.jQuery,
21 // Map over the $ in case of overwrite
22 _$ = window.$,
23
24 jQuery = window.jQuery = window.$ = function( selector, context ) {
25 // The jQuery object is actually just the init constructor 'enhanced'
26 return new jQuery.fn.init( selector, context );
27 },
28
29 // A simple way to check for HTML strings or ID strings
30 // (both of which we optimize for)
31 quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
32 // Is it a simple selector
33 isSimple = /^.[^:#\[\.,]*$/;
34
35jQuery.fn = jQuery.prototype = {
36 init: function( selector, context ) {
37 // Make sure that a selection was provided
38 selector = selector || document;
39
40 // Handle $(DOMElement)
41 if ( selector.nodeType ) {
42 this[0] = selector;
43 this.length = 1;
44 this.context = selector;
45 return this;
46 }
47 // Handle HTML strings
48 if ( typeof selector === "string" ) {
49 // Are we dealing with HTML string or an ID?
50 var match = quickExpr.exec( selector );
51
52 // Verify a match, and that no context was specified for #id
53 if ( match && (match[1] || !context) ) {
54
55 // HANDLE: $(html) -> $(array)
56 if ( match[1] )
57 selector = jQuery.clean( [ match[1] ], context );
58
59 // HANDLE: $("#id")
60 else {
61 var elem = document.getElementById( match[3] );
62
63 // Handle the case where IE and Opera return items
64 // by name instead of ID
65 if ( elem && elem.id != match[3] )
66 return jQuery().find( selector );
67
68 // Otherwise, we inject the element directly into the jQuery object
69 var ret = jQuery( elem || [] );
70 ret.context = document;
71 ret.selector = selector;
72 return ret;
73 }
74
75 // HANDLE: $(expr, [context])
76 // (which is just equivalent to: $(content).find(expr)
77 } else
78 return jQuery( context ).find( selector );
79
80 // HANDLE: $(function)
81 // Shortcut for document ready
82 } else if ( jQuery.isFunction( selector ) )
83 return jQuery( document ).ready( selector );
84
85 // Make sure that old selector state is passed along
86 if ( selector.selector && selector.context ) {
87 this.selector = selector.selector;
88 this.context = selector.context;
89 }
90
91 return this.setArray(jQuery.isArray( selector ) ?
92 selector :
93 jQuery.makeArray(selector));
94 },
95
96 // Start with an empty selector
97 selector: "",
98
99 // The current version of jQuery being used
100 jquery: "1.3.2",
101
102 // The number of elements contained in the matched element set
103 size: function() {
104 return this.length;
105 },
106
107 // Get the Nth element in the matched element set OR
108 // Get the whole matched element set as a clean array
109 get: function( num ) {
110 return num === undefined ?
111
112 // Return a 'clean' array
113 Array.prototype.slice.call( this ) :
114
115 // Return just the object
116 this[ num ];
117 },
118
119 // Take an array of elements and push it onto the stack
120 // (returning the new matched element set)
121 pushStack: function( elems, name, selector ) {
122 // Build a new jQuery matched element set
123 var ret = jQuery( elems );
124
125 // Add the old object onto the stack (as a reference)
126 ret.prevObject = this;
127
128 ret.context = this.context;
129
130 if ( name === "find" )
131 ret.selector = this.selector + (this.selector ? " " : "") + selector;
132 else if ( name )
133 ret.selector = this.selector + "." + name + "(" + selector + ")";
134
135 // Return the newly-formed element set
136 return ret;
137 },
138
139 // Force the current matched set of elements to become
140 // the specified array of elements (destroying the stack in the process)
141 // You should use pushStack() in order to do this, but maintain the stack
142 setArray: function( elems ) {
143 // Resetting the length to 0, then using the native Array push
144 // is a super-fast way to populate an object with array-like properties
145 this.length = 0;
146 Array.prototype.push.apply( this, elems );
147
148 return this;
149 },
150
151 // Execute a callback for every element in the matched set.
152 // (You can seed the arguments with an array of args, but this is
153 // only used internally.)
154 each: function( callback, args ) {
155 return jQuery.each( this, callback, args );
156 },
157
158 // Determine the position of an element within
159 // the matched set of elements
160 index: function( elem ) {
161 // Locate the position of the desired element
162 return jQuery.inArray(
163 // If it receives a jQuery object, the first element is used
164 elem && elem.jquery ? elem[0] : elem
165 , this );
166 },
167
168 attr: function( name, value, type ) {
169 var options = name;
170
171 // Look for the case where we're accessing a style value
172 if ( typeof name === "string" )
173 if ( value === undefined )
174 return this[0] && jQuery[ type || "attr" ]( this[0], name );
175
176 else {
177 options = {};
178 options[ name ] = value;
179 }
180
181 // Check to see if we're setting style values
182 return this.each(function(i){
183 // Set all the styles
184 for ( name in options )
185 jQuery.attr(
186 type ?
187 this.style :
188 this,
189 name, jQuery.prop( this, options[ name ], type, i, name )
190 );
191 });
192 },
193
194 css: function( key, value ) {
195 // ignore negative width and height values
196 if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
197 value = undefined;
198 return this.attr( key, value, "curCSS" );
199 },
200
201 text: function( text ) {
202 if ( typeof text !== "object" && text != null )
203 return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
204
205 var ret = "";
206
207 jQuery.each( text || this, function(){
208 jQuery.each( this.childNodes, function(){
209 if ( this.nodeType != 8 )
210 ret += this.nodeType != 1 ?
211 this.nodeValue :
212 jQuery.fn.text( [ this ] );
213 });
214 });
215
216 return ret;
217 },
218
219 wrapAll: function( html ) {
220 if ( this[0] ) {
221 // The elements to wrap the target around
222 var wrap = jQuery( html, this[0].ownerDocument ).clone();
223
224 if ( this[0].parentNode )
225 wrap.insertBefore( this[0] );
226
227 wrap.map(function(){
228 var elem = this;
229
230 while ( elem.firstChild )
231 elem = elem.firstChild;
232
233 return elem;
234 }).append(this);
235 }
236
237 return this;
238 },
239
240 wrapInner: function( html ) {
241 return this.each(function(){
242 jQuery( this ).contents().wrapAll( html );
243 });
244 },
245
246 wrap: function( html ) {
247 return this.each(function(){
248 jQuery( this ).wrapAll( html );
249 });
250 },
251
252 append: function() {
253 return this.domManip(arguments, true, function(elem){
254 if (this.nodeType == 1)
255 this.appendChild( elem );
256 });
257 },
258
259 prepend: function() {
260 return this.domManip(arguments, true, function(elem){
261 if (this.nodeType == 1)
262 this.insertBefore( elem, this.firstChild );
263 });
264 },
265
266 before: function() {
267 return this.domManip(arguments, false, function(elem){
268 this.parentNode.insertBefore( elem, this );
269 });
270 },
271
272 after: function() {
273 return this.domManip(arguments, false, function(elem){
274 this.parentNode.insertBefore( elem, this.nextSibling );
275 });
276 },
277
278 end: function() {
279 return this.prevObject || jQuery( [] );
280 },
281
282 // For internal use only.
283 // Behaves like an Array's method, not like a jQuery method.
284 push: [].push,
285 sort: [].sort,
286 splice: [].splice,
287
288 find: function( selector ) {
289 if ( this.length === 1 ) {
290 var ret = this.pushStack( [], "find", selector );
291 ret.length = 0;
292 jQuery.find( selector, this[0], ret );
293 return ret;
294 } else {
295 return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
296 return jQuery.find( selector, elem );
297 })), "find", selector );
298 }
299 },
300
301 clone: function( events ) {
302 // Do the clone
303 var ret = this.map(function(){
304 if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
305 // IE copies events bound via attachEvent when
306 // using cloneNode. Calling detachEvent on the
307 // clone will also remove the events from the orignal
308 // In order to get around this, we use innerHTML.
309 // Unfortunately, this means some modifications to
310 // attributes in IE that are actually only stored
311 // as properties will not be copied (such as the
312 // the name attribute on an input).
313 var html = this.outerHTML;
314 if ( !html ) {
315 var div = this.ownerDocument.createElement("div");
316 div.appendChild( this.cloneNode(true) );
317 html = div.innerHTML;
318 }
319
320 return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
321 } else
322 return this.cloneNode(true);
323 });
324
325 // Copy the events from the original to the clone
326 if ( events === true ) {
327 var orig = this.find("*").andSelf(), i = 0;
328
329 ret.find("*").andSelf().each(function(){
330 if ( this.nodeName !== orig[i].nodeName )
331 return;
332
333 var events = jQuery.data( orig[i], "events" );
334
335 for ( var type in events ) {
336 for ( var handler in events[ type ] ) {
337 jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
338 }
339 }
340
341 i++;
342 });
343 }
344
345 // Return the cloned set
346 return ret;
347 },
348
349 filter: function( selector ) {
350 return this.pushStack(
351 jQuery.isFunction( selector ) &&
352 jQuery.grep(this, function(elem, i){
353 return selector.call( elem, i );
354 }) ||
355
356 jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
357 return elem.nodeType === 1;
358 }) ), "filter", selector );
359 },
360
361 closest: function( selector ) {
362 var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
363 closer = 0;
364
365 return this.map(function(){
366 var cur = this;
367 while ( cur && cur.ownerDocument ) {
368 if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
369 jQuery.data(cur, "closest", closer);
370 return cur;
371 }
372 cur = cur.parentNode;
373 closer++;
374 }
375 });
376 },
377
378 not: function( selector ) {
379 if ( typeof selector === "string" )
380 // test special case where just one selector is passed in
381 if ( isSimple.test( selector ) )
382 return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
383 else
384 selector = jQuery.multiFilter( selector, this );
385
386 var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
387 return this.filter(function() {
388 return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
389 });
390 },
391
392 add: function( selector ) {
393 return this.pushStack( jQuery.unique( jQuery.merge(
394 this.get(),
395 typeof selector === "string" ?
396 jQuery( selector ) :
397 jQuery.makeArray( selector )
398 )));
399 },
400
401 is: function( selector ) {
402 return !!selector && jQuery.multiFilter( selector, this ).length > 0;
403 },
404
405 hasClass: function( selector ) {
406 return !!selector && this.is( "." + selector );
407 },
408
409 val: function( value ) {
410 if ( value === undefined ) {
411 var elem = this[0];
412
413 if ( elem ) {
414 if( jQuery.nodeName( elem, 'option' ) )
415 return (elem.attributes.value || {}).specified ? elem.value : elem.text;
416
417 // We need to handle select boxes special
418 if ( jQuery.nodeName( elem, "select" ) ) {
419 var index = elem.selectedIndex,
420 values = [],
421 options = elem.options,
422 one = elem.type == "select-one";
423
424 // Nothing was selected
425 if ( index < 0 )
426 return null;
427
428 // Loop through all the selected options
429 for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
430 var option = options[ i ];
431
432 if ( option.selected ) {
433 // Get the specifc value for the option
434 value = jQuery(option).val();
435
436 // We don't need an array for one selects
437 if ( one )
438 return value;
439
440 // Multi-Selects return an array
441 values.push( value );
442 }
443 }
444
445 return values;
446 }
447
448 // Everything else, we just grab the value
449 return (elem.value || "").replace(/\r/g, "");
450
451 }
452
453 return undefined;
454 }
455
456 if ( typeof value === "number" )
457 value += '';
458
459 return this.each(function(){
460 if ( this.nodeType != 1 )
461 return;
462
463 if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
464 this.checked = (jQuery.inArray(this.value, value) >= 0 ||
465 jQuery.inArray(this.name, value) >= 0);
466
467 else if ( jQuery.nodeName( this, "select" ) ) {
468 var values = jQuery.makeArray(value);
469
470 jQuery( "option", this ).each(function(){
471 this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
472 jQuery.inArray( this.text, values ) >= 0);
473 });
474
475 if ( !values.length )
476 this.selectedIndex = -1;
477
478 } else
479 this.value = value;
480 });
481 },
482
483 html: function( value ) {
484 return value === undefined ?
485 (this[0] ?
486 this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
487 null) :
488 this.empty().append( value );
489 },
490
491 replaceWith: function( value ) {
492 return this.after( value ).remove();
493 },
494
495 eq: function( i ) {
496 return this.slice( i, +i + 1 );
497 },
498
499 slice: function() {
500 return this.pushStack( Array.prototype.slice.apply( this, arguments ),
501 "slice", Array.prototype.slice.call(arguments).join(",") );
502 },
503
504 map: function( callback ) {
505 return this.pushStack( jQuery.map(this, function(elem, i){
506 return callback.call( elem, i, elem );
507 }));
508 },
509
510 andSelf: function() {
511 return this.add( this.prevObject );
512 },
513
514 domManip: function( args, table, callback ) {
515 if ( this[0] ) {
516 var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
517 scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
518 first = fragment.firstChild;
519
520 if ( first )
521 for ( var i = 0, l = this.length; i < l; i++ )
522 callback.call( root(this[i], first), this.length > 1 || i > 0 ?
523 fragment.cloneNode(true) : fragment );
524
525 if ( scripts )
526 jQuery.each( scripts, evalScript );
527 }
528
529 return this;
530
531 function root( elem, cur ) {
532 return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
533 (elem.getElementsByTagName("tbody")[0] ||
534 elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
535 elem;
536 }
537 }
538};
539
540// Give the init function the jQuery prototype for later instantiation
541jQuery.fn.init.prototype = jQuery.fn;
542
543function evalScript( i, elem ) {
544 if ( elem.src )
545 jQuery.ajax({
546 url: elem.src,
547 async: false,
548 dataType: "script"
549 });
550
551 else
552 jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
553
554 if ( elem.parentNode )
555 elem.parentNode.removeChild( elem );
556}
557
558function now(){
559 return +new Date;
560}
561
562jQuery.extend = jQuery.fn.extend = function() {
563 // copy reference to target object
564 var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
565
566 // Handle a deep copy situation
567 if ( typeof target === "boolean" ) {
568 deep = target;
569 target = arguments[1] || {};
570 // skip the boolean and the target
571 i = 2;
572 }
573
574 // Handle case when target is a string or something (possible in deep copy)
575 if ( typeof target !== "object" && !jQuery.isFunction(target) )
576 target = {};
577
578 // extend jQuery itself if only one argument is passed
579 if ( length == i ) {
580 target = this;
581 --i;
582 }
583
584 for ( ; i < length; i++ )
585 // Only deal with non-null/undefined values
586 if ( (options = arguments[ i ]) != null )
587 // Extend the base object
588 for ( var name in options ) {
589 var src = target[ name ], copy = options[ name ];
590
591 // Prevent never-ending loop
592 if ( target === copy )
593 continue;
594
595 // Recurse if we're merging object values
596 if ( deep && copy && typeof copy === "object" && !copy.nodeType )
597 target[ name ] = jQuery.extend( deep,
598 // Never move original objects, clone them
599 src || ( copy.length != null ? [ ] : { } )
600 , copy );
601
602 // Don't bring in undefined values
603 else if ( copy !== undefined )
604 target[ name ] = copy;
605
606 }
607
608 // Return the modified object
609 return target;
610};
611
612// exclude the following css properties to add px
613var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
614 // cache defaultView
615 defaultView = document.defaultView || {},
616 toString = Object.prototype.toString;
617
618jQuery.extend({
619 noConflict: function( deep ) {
620 window.$ = _$;
621
622 if ( deep )
623 window.jQuery = _jQuery;
624
625 return jQuery;
626 },
627
628 // See test/unit/core.js for details concerning isFunction.
629 // Since version 1.3, DOM methods and functions like alert
630 // aren't supported. They return false on IE (#2968).
631 isFunction: function( obj ) {
632 return toString.call(obj) === "[object Function]";
633 },
634
635 isArray: function( obj ) {
636 return toString.call(obj) === "[object Array]";
637 },
638
639 // check if an element is in a (or is an) XML document
640 isXMLDoc: function( elem ) {
641 return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
642 !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
643 },
644
645 // Evalulates a script in a global context
646 globalEval: function( data ) {
647 if ( data && /\S/.test(data) ) {
648 // Inspired by code by Andrea Giammarchi
649 // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
650 var head = document.getElementsByTagName("head")[0] || document.documentElement,
651 script = document.createElement("script");
652
653 script.type = "text/javascript";
654 if ( jQuery.support.scriptEval )
655 script.appendChild( document.createTextNode( data ) );
656 else
657 script.text = data;
658
659 // Use insertBefore instead of appendChild to circumvent an IE6 bug.
660 // This arises when a base node is used (#2709).
661 head.insertBefore( script, head.firstChild );
662 head.removeChild( script );
663 }
664 },
665
666 nodeName: function( elem, name ) {
667 return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
668 },
669
670 // args is for internal usage only
671 each: function( object, callback, args ) {
672 var name, i = 0, length = object.length;
673
674 if ( args ) {
675 if ( length === undefined ) {
676 for ( name in object )
677 if ( callback.apply( object[ name ], args ) === false )
678 break;
679 } else
680 for ( ; i < length; )
681 if ( callback.apply( object[ i++ ], args ) === false )
682 break;
683
684 // A special, fast, case for the most common use of each
685 } else {
686 if ( length === undefined ) {
687 for ( name in object )
688 if ( callback.call( object[ name ], name, object[ name ] ) === false )
689 break;
690 } else
691 for ( var value = object[0];
692 i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
693 }
694
695 return object;
696 },
697
698 prop: function( elem, value, type, i, name ) {
699 // Handle executable functions
700 if ( jQuery.isFunction( value ) )
701 value = value.call( elem, i );
702
703 // Handle passing in a number to a CSS property
704 return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
705 value + "px" :
706 value;
707 },
708
709 className: {
710 // internal only, use addClass("class")
711 add: function( elem, classNames ) {
712 jQuery.each((classNames || "").split(/\s+/), function(i, className){
713 if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
714 elem.className += (elem.className ? " " : "") + className;
715 });
716 },
717
718 // internal only, use removeClass("class")
719 remove: function( elem, classNames ) {
720 if (elem.nodeType == 1)
721 elem.className = classNames !== undefined ?
722 jQuery.grep(elem.className.split(/\s+/), function(className){
723 return !jQuery.className.has( classNames, className );
724 }).join(" ") :
725 "";
726 },
727
728 // internal only, use hasClass("class")
729 has: function( elem, className ) {
730 return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
731 }
732 },
733
734 // A method for quickly swapping in/out CSS properties to get correct calculations
735 swap: function( elem, options, callback ) {
736 var old = {};
737 // Remember the old values, and insert the new ones
738 for ( var name in options ) {
739 old[ name ] = elem.style[ name ];
740 elem.style[ name ] = options[ name ];
741 }
742
743 callback.call( elem );
744
745 // Revert the old values
746 for ( var name in options )
747 elem.style[ name ] = old[ name ];
748 },
749
750 css: function( elem, name, force, extra ) {
751 if ( name == "width" || name == "height" ) {
752 var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
753
754 function getWH() {
755 val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
756
757 if ( extra === "border" )
758 return;
759
760 jQuery.each( which, function() {
761 if ( !extra )
762 val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
763 if ( extra === "margin" )
764 val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
765 else
766 val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
767 });
768 }
769
770 if ( elem.offsetWidth !== 0 )
771 getWH();
772 else
773 jQuery.swap( elem, props, getWH );
774
775 return Math.max(0, Math.round(val));
776 }
777
778 return jQuery.curCSS( elem, name, force );
779 },
780
781 curCSS: function( elem, name, force ) {
782 var ret, style = elem.style;
783
784 // We need to handle opacity special in IE
785 if ( name == "opacity" && !jQuery.support.opacity ) {
786 ret = jQuery.attr( style, "opacity" );
787
788 return ret == "" ?
789 "1" :
790 ret;
791 }
792
793 // Make sure we're using the right name for getting the float value
794 if ( name.match( /float/i ) )
795 name = styleFloat;
796
797 if ( !force && style && style[ name ] )
798 ret = style[ name ];
799
800 else if ( defaultView.getComputedStyle ) {
801
802 // Only "float" is needed here
803 if ( name.match( /float/i ) )
804 name = "float";
805
806 name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
807
808 var computedStyle = defaultView.getComputedStyle( elem, null );
809
810 if ( computedStyle )
811 ret = computedStyle.getPropertyValue( name );
812
813 // We should always get a number back from opacity
814 if ( name == "opacity" && ret == "" )
815 ret = "1";
816
817 } else if ( elem.currentStyle ) {
818 var camelCase = name.replace(/\-(\w)/g, function(all, letter){
819 return letter.toUpperCase();
820 });
821
822 ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
823
824 // From the awesome hack by Dean Edwards
825 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
826
827 // If we're not dealing with a regular pixel number
828 // but a number that has a weird ending, we need to convert it to pixels
829 if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
830 // Remember the original values
831 var left = style.left, rsLeft = elem.runtimeStyle.left;
832
833 // Put in the new values to get a computed value out
834 elem.runtimeStyle.left = elem.currentStyle.left;
835 style.left = ret || 0;
836 ret = style.pixelLeft + "px";
837
838 // Revert the changed values
839 style.left = left;
840 elem.runtimeStyle.left = rsLeft;
841 }
842 }
843
844 return ret;
845 },
846
847 clean: function( elems, context, fragment ) {
848 context = context || document;
849
850 // !context.createElement fails in IE with an error but returns typeof 'object'
851 if ( typeof context.createElement === "undefined" )
852 context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
853
854 // If a single string is passed in and it's a single tag
855 // just do a createElement and skip the rest
856 if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
857 var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
858 if ( match )
859 return [ context.createElement( match[1] ) ];
860 }
861
862 var ret = [], scripts = [], div = context.createElement("div");
863
864 jQuery.each(elems, function(i, elem){
865 if ( typeof elem === "number" )
866 elem += '';
867
868 if ( !elem )
869 return;
870
871 // Convert html string into DOM nodes
872 if ( typeof elem === "string" ) {
873 // Fix "XHTML"-style tags in all browsers
874 elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
875 return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
876 all :
877 front + "></" + tag + ">";
878 });
879
880 // Trim whitespace, otherwise indexOf won't work as expected
881 var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
882
883 var wrap =
884 // option or optgroup
885 !tags.indexOf("<opt") &&
886 [ 1, "<select multiple='multiple'>", "</select>" ] ||
887
888 !tags.indexOf("<leg") &&
889 [ 1, "<fieldset>", "</fieldset>" ] ||
890
891 tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
892 [ 1, "<table>", "</table>" ] ||
893
894 !tags.indexOf("<tr") &&
895 [ 2, "<table><tbody>", "</tbody></table>" ] ||
896
897 // <thead> matched above
898 (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
899 [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
900
901 !tags.indexOf("<col") &&
902 [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
903
904 // IE can't serialize <link> and <script> tags normally
905 !jQuery.support.htmlSerialize &&
906 [ 1, "div<div>", "</div>" ] ||
907
908 [ 0, "", "" ];
909
910 // Go to html and back, then peel off extra wrappers
911 div.innerHTML = wrap[1] + elem + wrap[2];
912
913 // Move to the right depth
914 while ( wrap[0]-- )
915 div = div.lastChild;
916
917 // Remove IE's autoinserted <tbody> from table fragments
918 if ( !jQuery.support.tbody ) {
919
920 // String was a <table>, *may* have spurious <tbody>
921 var hasBody = /<tbody/i.test(elem),
922 tbody = !tags.indexOf("<table") && !hasBody ?
923 div.firstChild && div.firstChild.childNodes :
924
925 // String was a bare <thead> or <tfoot>
926 wrap[1] == "<table>" && !hasBody ?
927 div.childNodes :
928 [];
929
930 for ( var j = tbody.length - 1; j >= 0 ; --j )
931 if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
932 tbody[ j ].parentNode.removeChild( tbody[ j ] );
933
934 }
935
936 // IE completely kills leading whitespace when innerHTML is used
937 if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
938 div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
939
940 elem = jQuery.makeArray( div.childNodes );
941 }
942
943 if ( elem.nodeType )
944 ret.push( elem );
945 else
946 ret = jQuery.merge( ret, elem );
947
948 });
949
950 if ( fragment ) {
951 for ( var i = 0; ret[i]; i++ ) {
952 if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
953 scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
954 } else {
955 if ( ret[i].nodeType === 1 )
956 ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
957 fragment.appendChild( ret[i] );
958 }
959 }
960
961 return scripts;
962 }
963
964 return ret;
965 },
966
967 attr: function( elem, name, value ) {
968 // don't set attributes on text and comment nodes
969 if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
970 return undefined;
971
972 var notxml = !jQuery.isXMLDoc( elem ),
973 // Whether we are setting (or getting)
974 set = value !== undefined;
975
976 // Try to normalize/fix the name
977 name = notxml && jQuery.props[ name ] || name;
978
979 // Only do all the following if this is a node (faster for style)
980 // IE elem.getAttribute passes even for style
981 if ( elem.tagName ) {
982
983 // These attributes require special treatment
984 var special = /href|src|style/.test( name );
985
986 // Safari mis-reports the default selected property of a hidden option
987 // Accessing the parent's selectedIndex property fixes it
988 if ( name == "selected" && elem.parentNode )
989 elem.parentNode.selectedIndex;
990
991 // If applicable, access the attribute via the DOM 0 way
992 if ( name in elem && notxml && !special ) {
993 if ( set ){
994 // We can't allow the type property to be changed (since it causes problems in IE)
995 if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
996 throw "type property can't be changed";
997
998 elem[ name ] = value;
999 }
1000
1001 // browsers index elements by id/name on forms, give priority to attributes.
1002 if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
1003 return elem.getAttributeNode( name ).nodeValue;
1004
1005 // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
1006 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
1007 if ( name == "tabIndex" ) {
1008 var attributeNode = elem.getAttributeNode( "tabIndex" );
1009 return attributeNode && attributeNode.specified
1010 ? attributeNode.value
1011 : elem.nodeName.match(/(button|input|object|select|textarea)/i)
1012 ? 0
1013 : elem.nodeName.match(/^(a|area)$/i) && elem.href
1014 ? 0
1015 : undefined;
1016 }
1017
1018 return elem[ name ];
1019 }
1020
1021 if ( !jQuery.support.style && notxml && name == "style" )
1022 return jQuery.attr( elem.style, "cssText", value );
1023
1024 if ( set )
1025 // convert the value to a string (all browsers do this but IE) see #1070
1026 elem.setAttribute( name, "" + value );
1027
1028 var attr = !jQuery.support.hrefNormalized && notxml && special
1029 // Some attributes require a special call on IE
1030 ? elem.getAttribute( name, 2 )
1031 : elem.getAttribute( name );
1032
1033 // Non-existent attributes return null, we normalize to undefined
1034 return attr === null ? undefined : attr;
1035 }
1036
1037 // elem is actually elem.style ... set the style
1038
1039 // IE uses filters for opacity
1040 if ( !jQuery.support.opacity && name == "opacity" ) {
1041 if ( set ) {
1042 // IE has trouble with opacity if it does not have layout
1043 // Force it by setting the zoom level
1044 elem.zoom = 1;
1045
1046 // Set the alpha filter to set the opacity
1047 elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
1048 (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
1049 }
1050
1051 return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
1052 (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
1053 "";
1054 }
1055
1056 name = name.replace(/-([a-z])/ig, function(all, letter){
1057 return letter.toUpperCase();
1058 });
1059
1060 if ( set )
1061 elem[ name ] = value;
1062
1063 return elem[ name ];
1064 },
1065
1066 trim: function( text ) {
1067 return (text || "").replace( /^\s+|\s+$/g, "" );
1068 },
1069
1070 makeArray: function( array ) {
1071 var ret = [];
1072
1073 if( array != null ){
1074 var i = array.length;
1075 // The window, strings (and functions) also have 'length'
1076 if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
1077 ret[0] = array;
1078 else
1079 while( i )
1080 ret[--i] = array[i];
1081 }
1082
1083 return ret;
1084 },
1085
1086 inArray: function( elem, array ) {
1087 for ( var i = 0, length = array.length; i < length; i++ )
1088 // Use === because on IE, window == document
1089 if ( array[ i ] === elem )
1090 return i;
1091
1092 return -1;
1093 },
1094
1095 merge: function( first, second ) {
1096 // We have to loop this way because IE & Opera overwrite the length
1097 // expando of getElementsByTagName
1098 var i = 0, elem, pos = first.length;
1099 // Also, we need to make sure that the correct elements are being returned
1100 // (IE returns comment nodes in a '*' query)
1101 if ( !jQuery.support.getAll ) {
1102 while ( (elem = second[ i++ ]) != null )
1103 if ( elem.nodeType != 8 )
1104 first[ pos++ ] = elem;
1105
1106 } else
1107 while ( (elem = second[ i++ ]) != null )
1108 first[ pos++ ] = elem;
1109
1110 return first;
1111 },
1112
1113 unique: function( array ) {
1114 var ret = [], done = {};
1115
1116 try {
1117
1118 for ( var i = 0, length = array.length; i < length; i++ ) {
1119 var id = jQuery.data( array[ i ] );
1120
1121 if ( !done[ id ] ) {
1122 done[ id ] = true;
1123 ret.push( array[ i ] );
1124 }
1125 }
1126
1127 } catch( e ) {
1128 ret = array;
1129 }
1130
1131 return ret;
1132 },
1133
1134 grep: function( elems, callback, inv ) {
1135 var ret = [];
1136
1137 // Go through the array, only saving the items
1138 // that pass the validator function
1139 for ( var i = 0, length = elems.length; i < length; i++ )
1140 if ( !inv != !callback( elems[ i ], i ) )
1141 ret.push( elems[ i ] );
1142
1143 return ret;
1144 },
1145
1146 map: function( elems, callback ) {
1147 var ret = [];
1148
1149 // Go through the array, translating each of the items to their
1150 // new value (or values).
1151 for ( var i = 0, length = elems.length; i < length; i++ ) {
1152 var value = callback( elems[ i ], i );
1153
1154 if ( value != null )
1155 ret[ ret.length ] = value;
1156 }
1157
1158 return ret.concat.apply( [], ret );
1159 }
1160});
1161
1162// Use of jQuery.browser is deprecated.
1163// It's included for backwards compatibility and plugins,
1164// although they should work to migrate away.
1165
1166var userAgent = navigator.userAgent.toLowerCase();
1167
1168// Figure out what browser is being used
1169jQuery.browser = {
1170 version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
1171 safari: /webkit/.test( userAgent ),
1172 opera: /opera/.test( userAgent ),
1173 msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
1174 mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
1175};
1176
1177jQuery.each({
1178 parent: function(elem){return elem.parentNode;},
1179 parents: function(elem){return jQuery.dir(elem,"parentNode");},
1180 next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
1181 prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
1182 nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
1183 prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
1184 siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
1185 children: function(elem){return jQuery.sibling(elem.firstChild);},
1186 contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
1187}, function(name, fn){
1188 jQuery.fn[ name ] = function( selector ) {
1189 var ret = jQuery.map( this, fn );
1190
1191 if ( selector && typeof selector == "string" )
1192 ret = jQuery.multiFilter( selector, ret );
1193
1194 return this.pushStack( jQuery.unique( ret ), name, selector );
1195 };
1196});
1197
1198jQuery.each({
1199 appendTo: "append",
1200 prependTo: "prepend",
1201 insertBefore: "before",
1202 insertAfter: "after",
1203 replaceAll: "replaceWith"
1204}, function(name, original){
1205 jQuery.fn[ name ] = function( selector ) {
1206 var ret = [], insert = jQuery( selector );
1207
1208 for ( var i = 0, l = insert.length; i < l; i++ ) {
1209 var elems = (i > 0 ? this.clone(true) : this).get();
1210 jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
1211 ret = ret.concat( elems );
1212 }
1213
1214 return this.pushStack( ret, name, selector );
1215 };
1216});
1217
1218jQuery.each({
1219 removeAttr: function( name ) {
1220 jQuery.attr( this, name, "" );
1221 if (this.nodeType == 1)
1222 this.removeAttribute( name );
1223 },
1224
1225 addClass: function( classNames ) {
1226 jQuery.className.add( this, classNames );
1227 },
1228
1229 removeClass: function( classNames ) {
1230 jQuery.className.remove( this, classNames );
1231 },
1232
1233 toggleClass: function( classNames, state ) {
1234 if( typeof state !== "boolean" )
1235 state = !jQuery.className.has( this, classNames );
1236 jQuery.className[ state ? "add" : "remove" ]( this, classNames );
1237 },
1238
1239 remove: function( selector ) {
1240 if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
1241 // Prevent memory leaks
1242 jQuery( "*", this ).add([this]).each(function(){
1243 jQuery.event.remove(this);
1244 jQuery.removeData(this);
1245 });
1246 if (this.parentNode)
1247 this.parentNode.removeChild( this );
1248 }
1249 },
1250
1251 empty: function() {
1252 // Remove element nodes and prevent memory leaks
1253 jQuery(this).children().remove();
1254
1255 // Remove any remaining nodes
1256 while ( this.firstChild )
1257 this.removeChild( this.firstChild );
1258 }
1259}, function(name, fn){
1260 jQuery.fn[ name ] = function(){
1261 return this.each( fn, arguments );
1262 };
1263});
1264
1265// Helper function used by the dimensions and offset modules
1266function num(elem, prop) {
1267 return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
1268}
1269var expando = "jQuery" + now(), uuid = 0, windowData = {};
1270
1271jQuery.extend({
1272 cache: {},
1273
1274 data: function( elem, name, data ) {
1275 elem = elem == window ?
1276 windowData :
1277 elem;
1278
1279 var id = elem[ expando ];
1280
1281 // Compute a unique ID for the element
1282 if ( !id )
1283 id = elem[ expando ] = ++uuid;
1284
1285 // Only generate the data cache if we're
1286 // trying to access or manipulate it
1287 if ( name && !jQuery.cache[ id ] )
1288 jQuery.cache[ id ] = {};
1289
1290 // Prevent overriding the named cache with undefined values
1291 if ( data !== undefined )
1292 jQuery.cache[ id ][ name ] = data;
1293
1294 // Return the named cache data, or the ID for the element
1295 return name ?
1296 jQuery.cache[ id ][ name ] :
1297 id;
1298 },
1299
1300 removeData: function( elem, name ) {
1301 elem = elem == window ?
1302 windowData :
1303 elem;
1304
1305 var id = elem[ expando ];
1306
1307 // If we want to remove a specific section of the element's data
1308 if ( name ) {
1309 if ( jQuery.cache[ id ] ) {
1310 // Remove the section of cache data
1311 delete jQuery.cache[ id ][ name ];
1312
1313 // If we've removed all the data, remove the element's cache
1314 name = "";
1315
1316 for ( name in jQuery.cache[ id ] )
1317 break;
1318
1319 if ( !name )
1320 jQuery.removeData( elem );
1321 }
1322
1323 // Otherwise, we want to remove all of the element's data
1324 } else {
1325 // Clean up the element expando
1326 try {
1327 delete elem[ expando ];
1328 } catch(e){
1329 // IE has trouble directly removing the expando
1330 // but it's ok with using removeAttribute
1331 if ( elem.removeAttribute )
1332 elem.removeAttribute( expando );
1333 }
1334
1335 // Completely remove the data cache
1336 delete jQuery.cache[ id ];
1337 }
1338 },
1339 queue: function( elem, type, data ) {
1340 if ( elem ){
1341
1342 type = (type || "fx") + "queue";
1343
1344 var q = jQuery.data( elem, type );
1345
1346 if ( !q || jQuery.isArray(data) )
1347 q = jQuery.data( elem, type, jQuery.makeArray(data) );
1348 else if( data )
1349 q.push( data );
1350
1351 }
1352 return q;
1353 },
1354
1355 dequeue: function( elem, type ){
1356 var queue = jQuery.queue( elem, type ),
1357 fn = queue.shift();
1358
1359 if( !type || type === "fx" )
1360 fn = queue[0];
1361
1362 if( fn !== undefined )
1363 fn.call(elem);
1364 }
1365});
1366
1367jQuery.fn.extend({
1368 data: function( key, value ){
1369 var parts = key.split(".");
1370 parts[1] = parts[1] ? "." + parts[1] : "";
1371
1372 if ( value === undefined ) {
1373 var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
1374
1375 if ( data === undefined && this.length )
1376 data = jQuery.data( this[0], key );
1377
1378 return data === undefined && parts[1] ?
1379 this.data( parts[0] ) :
1380 data;
1381 } else
1382 return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
1383 jQuery.data( this, key, value );
1384 });
1385 },
1386
1387 removeData: function( key ){
1388 return this.each(function(){
1389 jQuery.removeData( this, key );
1390 });
1391 },
1392 queue: function(type, data){
1393 if ( typeof type !== "string" ) {
1394 data = type;
1395 type = "fx";
1396 }
1397
1398 if ( data === undefined )
1399 return jQuery.queue( this[0], type );
1400
1401 return this.each(function(){
1402 var queue = jQuery.queue( this, type, data );
1403
1404 if( type == "fx" && queue.length == 1 )
1405 queue[0].call(this);
1406 });
1407 },
1408 dequeue: function(type){
1409 return this.each(function(){
1410 jQuery.dequeue( this, type );
1411 });
1412 }
1413});/*!
1414 * Sizzle CSS Selector Engine - v0.9.3
1415 * Copyright 2009, The Dojo Foundation
1416 * Released under the MIT, BSD, and GPL Licenses.
1417 * More information: http://sizzlejs.com/
1418 */
1419(function(){
1420
1421var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
1422 done = 0,
1423 toString = Object.prototype.toString;
1424
1425var Sizzle = function(selector, context, results, seed) {
1426 results = results || [];
1427 context = context || document;
1428
1429 if ( context.nodeType !== 1 && context.nodeType !== 9 )
1430 return [];
1431
1432 if ( !selector || typeof selector !== "string" ) {
1433 return results;
1434 }
1435
1436 var parts = [], m, set, checkSet, check, mode, extra, prune = true;
1437
1438 // Reset the position of the chunker regexp (start from head)
1439 chunker.lastIndex = 0;
1440
1441 while ( (m = chunker.exec(selector)) !== null ) {
1442 parts.push( m[1] );
1443
1444 if ( m[2] ) {
1445 extra = RegExp.rightContext;
1446 break;
1447 }
1448 }
1449
1450 if ( parts.length > 1 && origPOS.exec( selector ) ) {
1451 if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
1452 set = posProcess( parts[0] + parts[1], context );
1453 } else {
1454 set = Expr.relative[ parts[0] ] ?
1455 [ context ] :
1456 Sizzle( parts.shift(), context );
1457
1458 while ( parts.length ) {
1459 selector = parts.shift();
1460
1461 if ( Expr.relative[ selector ] )
1462 selector += parts.shift();
1463
1464 set = posProcess( selector, set );
1465 }
1466 }
1467 } else {
1468 var ret = seed ?
1469 { expr: parts.pop(), set: makeArray(seed) } :
1470 Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );
1471 set = Sizzle.filter( ret.expr, ret.set );
1472
1473 if ( parts.length > 0 ) {
1474 checkSet = makeArray(set);
1475 } else {
1476 prune = false;
1477 }
1478
1479 while ( parts.length ) {
1480 var cur = parts.pop(), pop = cur;
1481
1482 if ( !Expr.relative[ cur ] ) {
1483 cur = "";
1484 } else {
1485 pop = parts.pop();
1486 }
1487
1488 if ( pop == null ) {
1489 pop = context;
1490 }
1491
1492 Expr.relative[ cur ]( checkSet, pop, isXML(context) );
1493 }
1494 }
1495
1496 if ( !checkSet ) {
1497 checkSet = set;
1498 }
1499
1500 if ( !checkSet ) {
1501 throw "Syntax error, unrecognized expression: " + (cur || selector);
1502 }
1503
1504 if ( toString.call(checkSet) === "[object Array]" ) {
1505 if ( !prune ) {
1506 results.push.apply( results, checkSet );
1507 } else if ( context.nodeType === 1 ) {
1508 for ( var i = 0; checkSet[i] != null; i++ ) {
1509 if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
1510 results.push( set[i] );
1511 }
1512 }
1513 } else {
1514 for ( var i = 0; checkSet[i] != null; i++ ) {
1515 if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
1516 results.push( set[i] );
1517 }
1518 }
1519 }
1520 } else {
1521 makeArray( checkSet, results );
1522 }
1523
1524 if ( extra ) {
1525 Sizzle( extra, context, results, seed );
1526
1527 if ( sortOrder ) {
1528 hasDuplicate = false;
1529 results.sort(sortOrder);
1530
1531 if ( hasDuplicate ) {
1532 for ( var i = 1; i < results.length; i++ ) {
1533 if ( results[i] === results[i-1] ) {
1534 results.splice(i--, 1);
1535 }
1536 }
1537 }
1538 }
1539 }
1540
1541 return results;
1542};
1543
1544Sizzle.matches = function(expr, set){
1545 return Sizzle(expr, null, null, set);
1546};
1547
1548Sizzle.find = function(expr, context, isXML){
1549 var set, match;
1550
1551 if ( !expr ) {
1552 return [];
1553 }
1554
1555 for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
1556 var type = Expr.order[i], match;
1557
1558 if ( (match = Expr.match[ type ].exec( expr )) ) {
1559 var left = RegExp.leftContext;
1560
1561 if ( left.substr( left.length - 1 ) !== "\\" ) {
1562 match[1] = (match[1] || "").replace(/\\/g, "");
1563 set = Expr.find[ type ]( match, context, isXML );
1564 if ( set != null ) {
1565 expr = expr.replace( Expr.match[ type ], "" );
1566 break;
1567 }
1568 }
1569 }
1570 }
1571
1572 if ( !set ) {
1573 set = context.getElementsByTagName("*");
1574 }
1575
1576 return {set: set, expr: expr};
1577};
1578
1579Sizzle.filter = function(expr, set, inplace, not){
1580 var old = expr, result = [], curLoop = set, match, anyFound,
1581 isXMLFilter = set && set[0] && isXML(set[0]);
1582
1583 while ( expr && set.length ) {
1584 for ( var type in Expr.filter ) {
1585 if ( (match = Expr.match[ type ].exec( expr )) != null ) {
1586 var filter = Expr.filter[ type ], found, item;
1587 anyFound = false;
1588
1589 if ( curLoop == result ) {
1590 result = [];
1591 }
1592
1593 if ( Expr.preFilter[ type ] ) {
1594 match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
1595
1596 if ( !match ) {
1597 anyFound = found = true;
1598 } else if ( match === true ) {
1599 continue;
1600 }
1601 }
1602
1603 if ( match ) {
1604 for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
1605 if ( item ) {
1606 found = filter( item, match, i, curLoop );
1607 var pass = not ^ !!found;
1608
1609 if ( inplace && found != null ) {
1610 if ( pass ) {
1611 anyFound = true;
1612 } else {
1613 curLoop[i] = false;
1614 }
1615 } else if ( pass ) {
1616 result.push( item );
1617 anyFound = true;
1618 }
1619 }
1620 }
1621 }
1622
1623 if ( found !== undefined ) {
1624 if ( !inplace ) {
1625 curLoop = result;
1626 }
1627
1628 expr = expr.replace( Expr.match[ type ], "" );
1629
1630 if ( !anyFound ) {
1631 return [];
1632 }
1633
1634 break;
1635 }
1636 }
1637 }
1638
1639 // Improper expression
1640 if ( expr == old ) {
1641 if ( anyFound == null ) {
1642 throw "Syntax error, unrecognized expression: " + expr;
1643 } else {
1644 break;
1645 }
1646 }
1647
1648 old = expr;
1649 }
1650
1651 return curLoop;
1652};
1653
1654var Expr = Sizzle.selectors = {
1655 order: [ "ID", "NAME", "TAG" ],
1656 match: {
1657 ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
1658 CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
1659 NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
1660 ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
1661 TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
1662 CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
1663 POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
1664 PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
1665 },
1666 attrMap: {
1667 "class": "className",
1668 "for": "htmlFor"
1669 },
1670 attrHandle: {
1671 href: function(elem){
1672 return elem.getAttribute("href");
1673 }
1674 },
1675 relative: {
1676 "+": function(checkSet, part, isXML){
1677 var isPartStr = typeof part === "string",
1678 isTag = isPartStr && !/\W/.test(part),
1679 isPartStrNotTag = isPartStr && !isTag;
1680
1681 if ( isTag && !isXML ) {
1682 part = part.toUpperCase();
1683 }
1684
1685 for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
1686 if ( (elem = checkSet[i]) ) {
1687 while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
1688
1689 checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
1690 elem || false :
1691 elem === part;
1692 }
1693 }
1694
1695 if ( isPartStrNotTag ) {
1696 Sizzle.filter( part, checkSet, true );
1697 }
1698 },
1699 ">": function(checkSet, part, isXML){
1700 var isPartStr = typeof part === "string";
1701
1702 if ( isPartStr && !/\W/.test(part) ) {
1703 part = isXML ? part : part.toUpperCase();
1704
1705 for ( var i = 0, l = checkSet.length; i < l; i++ ) {
1706 var elem = checkSet[i];
1707 if ( elem ) {
1708 var parent = elem.parentNode;
1709 checkSet[i] = parent.nodeName === part ? parent : false;
1710 }
1711 }
1712 } else {
1713 for ( var i = 0, l = checkSet.length; i < l; i++ ) {
1714 var elem = checkSet[i];
1715 if ( elem ) {
1716 checkSet[i] = isPartStr ?
1717 elem.parentNode :
1718 elem.parentNode === part;
1719 }
1720 }
1721
1722 if ( isPartStr ) {
1723 Sizzle.filter( part, checkSet, true );
1724 }
1725 }
1726 },
1727 "": function(checkSet, part, isXML){
1728 var doneName = done++, checkFn = dirCheck;
1729
1730 if ( !part.match(/\W/) ) {
1731 var nodeCheck = part = isXML ? part : part.toUpperCase();
1732 checkFn = dirNodeCheck;
1733 }
1734
1735 checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
1736 },
1737 "~": function(checkSet, part, isXML){
1738 var doneName = done++, checkFn = dirCheck;
1739
1740 if ( typeof part === "string" && !part.match(/\W/) ) {
1741 var nodeCheck = part = isXML ? part : part.toUpperCase();
1742 checkFn = dirNodeCheck;
1743 }
1744
1745 checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
1746 }
1747 },
1748 find: {
1749 ID: function(match, context, isXML){
1750 if ( typeof context.getElementById !== "undefined" && !isXML ) {
1751 var m = context.getElementById(match[1]);
1752 return m ? [m] : [];
1753 }
1754 },
1755 NAME: function(match, context, isXML){
1756 if ( typeof context.getElementsByName !== "undefined" ) {
1757 var ret = [], results = context.getElementsByName(match[1]);
1758
1759 for ( var i = 0, l = results.length; i < l; i++ ) {
1760 if ( results[i].getAttribute("name") === match[1] ) {
1761 ret.push( results[i] );
1762 }
1763 }
1764
1765 return ret.length === 0 ? null : ret;
1766 }
1767 },
1768 TAG: function(match, context){
1769 return context.getElementsByTagName(match[1]);
1770 }
1771 },
1772 preFilter: {
1773 CLASS: function(match, curLoop, inplace, result, not, isXML){
1774 match = " " + match[1].replace(/\\/g, "") + " ";
1775
1776 if ( isXML ) {
1777 return match;
1778 }
1779
1780 for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
1781 if ( elem ) {
1782 if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
1783 if ( !inplace )
1784 result.push( elem );
1785 } else if ( inplace ) {
1786 curLoop[i] = false;
1787 }
1788 }
1789 }
1790
1791 return false;
1792 },
1793 ID: function(match){
1794 return match[1].replace(/\\/g, "");
1795 },
1796 TAG: function(match, curLoop){
1797 for ( var i = 0; curLoop[i] === false; i++ ){}
1798 return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
1799 },
1800 CHILD: function(match){
1801 if ( match[1] == "nth" ) {
1802 // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
1803 var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
1804 match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
1805 !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
1806
1807 // calculate the numbers (first)n+(last) including if they are negative
1808 match[2] = (test[1] + (test[2] || 1)) - 0;
1809 match[3] = test[3] - 0;
1810 }
1811
1812 // TODO: Move to normal caching system
1813 match[0] = done++;
1814
1815 return match;
1816 },
1817 ATTR: function(match, curLoop, inplace, result, not, isXML){
1818 var name = match[1].replace(/\\/g, "");
1819
1820 if ( !isXML && Expr.attrMap[name] ) {
1821 match[1] = Expr.attrMap[name];
1822 }
1823
1824 if ( match[2] === "~=" ) {
1825 match[4] = " " + match[4] + " ";
1826 }
1827
1828 return match;
1829 },
1830 PSEUDO: function(match, curLoop, inplace, result, not){
1831 if ( match[1] === "not" ) {
1832 // If we're dealing with a complex expression, or a simple one
1833 if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {
1834 match[3] = Sizzle(match[3], null, null, curLoop);
1835 } else {
1836 var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
1837 if ( !inplace ) {
1838 result.push.apply( result, ret );
1839 }
1840 return false;
1841 }
1842 } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
1843 return true;
1844 }
1845
1846 return match;
1847 },
1848 POS: function(match){
1849 match.unshift( true );
1850 return match;
1851 }
1852 },
1853 filters: {
1854 enabled: function(elem){
1855 return elem.disabled === false && elem.type !== "hidden";
1856 },
1857 disabled: function(elem){
1858 return elem.disabled === true;
1859 },
1860 checked: function(elem){
1861 return elem.checked === true;
1862 },
1863 selected: function(elem){
1864 // Accessing this property makes selected-by-default
1865 // options in Safari work properly
1866 elem.parentNode.selectedIndex;
1867 return elem.selected === true;
1868 },
1869 parent: function(elem){
1870 return !!elem.firstChild;
1871 },
1872 empty: function(elem){
1873 return !elem.firstChild;
1874 },
1875 has: function(elem, i, match){
1876 return !!Sizzle( match[3], elem ).length;
1877 },
1878 header: function(elem){
1879 return /h\d/i.test( elem.nodeName );
1880 },
1881 text: function(elem){
1882 return "text" === elem.type;
1883 },
1884 radio: function(elem){
1885 return "radio" === elem.type;
1886 },
1887 checkbox: function(elem){
1888 return "checkbox" === elem.type;
1889 },
1890 file: function(elem){
1891 return "file" === elem.type;
1892 },
1893 password: function(elem){
1894 return "password" === elem.type;
1895 },
1896 submit: function(elem){
1897 return "submit" === elem.type;
1898 },
1899 image: function(elem){
1900 return "image" === elem.type;
1901 },
1902 reset: function(elem){
1903 return "reset" === elem.type;
1904 },
1905 button: function(elem){
1906 return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
1907 },
1908 input: function(elem){
1909 return /input|select|textarea|button/i.test(elem.nodeName);
1910 }
1911 },
1912 setFilters: {
1913 first: function(elem, i){
1914 return i === 0;
1915 },
1916 last: function(elem, i, match, array){
1917 return i === array.length - 1;
1918 },
1919 even: function(elem, i){
1920 return i % 2 === 0;
1921 },
1922 odd: function(elem, i){
1923 return i % 2 === 1;
1924 },
1925 lt: function(elem, i, match){
1926 return i < match[3] - 0;
1927 },
1928 gt: function(elem, i, match){
1929 return i > match[3] - 0;
1930 },
1931 nth: function(elem, i, match){
1932 return match[3] - 0 == i;
1933 },
1934 eq: function(elem, i, match){
1935 return match[3] - 0 == i;
1936 }
1937 },
1938 filter: {
1939 PSEUDO: function(elem, match, i, array){
1940 var name = match[1], filter = Expr.filters[ name ];
1941
1942 if ( filter ) {
1943 return filter( elem, i, match, array );
1944 } else if ( name === "contains" ) {
1945 return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
1946 } else if ( name === "not" ) {
1947 var not = match[3];
1948
1949 for ( var i = 0, l = not.length; i < l; i++ ) {
1950 if ( not[i] === elem ) {
1951 return false;
1952 }
1953 }
1954
1955 return true;
1956 }
1957 },
1958 CHILD: function(elem, match){
1959 var type = match[1], node = elem;
1960 switch (type) {
1961 case 'only':
1962 case 'first':
1963 while (node = node.previousSibling) {
1964 if ( node.nodeType === 1 ) return false;
1965 }
1966 if ( type == 'first') return true;
1967 node = elem;
1968 case 'last':
1969 while (node = node.nextSibling) {
1970 if ( node.nodeType === 1 ) return false;
1971 }
1972 return true;
1973 case 'nth':
1974 var first = match[2], last = match[3];
1975
1976 if ( first == 1 && last == 0 ) {
1977 return true;
1978 }
1979
1980 var doneName = match[0],
1981 parent = elem.parentNode;
1982
1983 if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
1984 var count = 0;
1985 for ( node = parent.firstChild; node; node = node.nextSibling ) {
1986 if ( node.nodeType === 1 ) {
1987 node.nodeIndex = ++count;
1988 }
1989 }
1990 parent.sizcache = doneName;
1991 }
1992
1993 var diff = elem.nodeIndex - last;
1994 if ( first == 0 ) {
1995 return diff == 0;
1996 } else {
1997 return ( diff % first == 0 && diff / first >= 0 );
1998 }
1999 }
2000 },
2001 ID: function(elem, match){
2002 return elem.nodeType === 1 && elem.getAttribute("id") === match;
2003 },
2004 TAG: function(elem, match){
2005 return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
2006 },
2007 CLASS: function(elem, match){
2008 return (" " + (elem.className || elem.getAttribute("class")) + " ")
2009 .indexOf( match ) > -1;
2010 },
2011 ATTR: function(elem, match){
2012 var name = match[1],
2013 result = Expr.attrHandle[ name ] ?
2014 Expr.attrHandle[ name ]( elem ) :
2015 elem[ name ] != null ?
2016 elem[ name ] :
2017 elem.getAttribute( name ),
2018 value = result + "",
2019 type = match[2],
2020 check = match[4];
2021
2022 return result == null ?
2023 type === "!=" :
2024 type === "=" ?
2025 value === check :
2026 type === "*=" ?
2027 value.indexOf(check) >= 0 :
2028 type === "~=" ?
2029 (" " + value + " ").indexOf(check) >= 0 :
2030 !check ?
2031 value && result !== false :
2032 type === "!=" ?
2033 value != check :
2034 type === "^=" ?
2035 value.indexOf(check) === 0 :
2036 type === "$=" ?
2037 value.substr(value.length - check.length) === check :
2038 type === "|=" ?
2039 value === check || value.substr(0, check.length + 1) === check + "-" :
2040 false;
2041 },
2042 POS: function(elem, match, i, array){
2043 var name = match[2], filter = Expr.setFilters[ name ];
2044
2045 if ( filter ) {
2046 return filter( elem, i, match, array );
2047 }
2048 }
2049 }
2050};
2051
2052var origPOS = Expr.match.POS;
2053
2054for ( var type in Expr.match ) {
2055 Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
2056}
2057
2058var makeArray = function(array, results) {
2059 array = Array.prototype.slice.call( array );
2060
2061 if ( results ) {
2062 results.push.apply( results, array );
2063 return results;
2064 }
2065
2066 return array;
2067};
2068
2069// Perform a simple check to determine if the browser is capable of
2070// converting a NodeList to an array using builtin methods.
2071try {
2072 Array.prototype.slice.call( document.documentElement.childNodes );
2073
2074// Provide a fallback method if it does not work
2075} catch(e){
2076 makeArray = function(array, results) {
2077 var ret = results || [];
2078
2079 if ( toString.call(array) === "[object Array]" ) {
2080 Array.prototype.push.apply( ret, array );
2081 } else {
2082 if ( typeof array.length === "number" ) {
2083 for ( var i = 0, l = array.length; i < l; i++ ) {
2084 ret.push( array[i] );
2085 }
2086 } else {
2087 for ( var i = 0; array[i]; i++ ) {
2088 ret.push( array[i] );
2089 }
2090 }
2091 }
2092
2093 return ret;
2094 };
2095}
2096
2097var sortOrder;
2098
2099if ( document.documentElement.compareDocumentPosition ) {
2100 sortOrder = function( a, b ) {
2101 var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
2102 if ( ret === 0 ) {
2103 hasDuplicate = true;
2104 }
2105 return ret;
2106 };
2107} else if ( "sourceIndex" in document.documentElement ) {
2108 sortOrder = function( a, b ) {
2109 var ret = a.sourceIndex - b.sourceIndex;
2110 if ( ret === 0 ) {
2111 hasDuplicate = true;
2112 }
2113 return ret;
2114 };
2115} else if ( document.createRange ) {
2116 sortOrder = function( a, b ) {
2117 var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
2118 aRange.selectNode(a);
2119 aRange.collapse(true);
2120 bRange.selectNode(b);
2121 bRange.collapse(true);
2122 var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
2123 if ( ret === 0 ) {
2124 hasDuplicate = true;
2125 }
2126 return ret;
2127 };
2128}
2129
2130// Check to see if the browser returns elements by name when
2131// querying by getElementById (and provide a workaround)
2132(function(){
2133 // We're going to inject a fake input element with a specified name
2134 var form = document.createElement("form"),
2135 id = "script" + (new Date).getTime();
2136 form.innerHTML = "<input name='" + id + "'/>";
2137
2138 // Inject it into the root element, check its status, and remove it quickly
2139 var root = document.documentElement;
2140 root.insertBefore( form, root.firstChild );
2141
2142 // The workaround has to do additional checks after a getElementById
2143 // Which slows things down for other browsers (hence the branching)
2144 if ( !!document.getElementById( id ) ) {
2145 Expr.find.ID = function(match, context, isXML){
2146 if ( typeof context.getElementById !== "undefined" && !isXML ) {
2147 var m = context.getElementById(match[1]);
2148 return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
2149 }
2150 };
2151
2152 Expr.filter.ID = function(elem, match){
2153 var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
2154 return elem.nodeType === 1 && node && node.nodeValue === match;
2155 };
2156 }
2157
2158 root.removeChild( form );
2159})();
2160
2161(function(){
2162 // Check to see if the browser returns only elements
2163 // when doing getElementsByTagName("*")
2164
2165 // Create a fake element
2166 var div = document.createElement("div");
2167 div.appendChild( document.createComment("") );
2168
2169 // Make sure no comments are found
2170 if ( div.getElementsByTagName("*").length > 0 ) {
2171 Expr.find.TAG = function(match, context){
2172 var results = context.getElementsByTagName(match[1]);
2173
2174 // Filter out possible comments
2175 if ( match[1] === "*" ) {
2176 var tmp = [];
2177
2178 for ( var i = 0; results[i]; i++ ) {
2179 if ( results[i].nodeType === 1 ) {
2180 tmp.push( results[i] );
2181 }
2182 }
2183
2184 results = tmp;
2185 }
2186
2187 return results;
2188 };
2189 }
2190
2191 // Check to see if an attribute returns normalized href attributes
2192 div.innerHTML = "<a href='#'></a>";
2193 if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
2194 div.firstChild.getAttribute("href") !== "#" ) {
2195 Expr.attrHandle.href = function(elem){
2196 return elem.getAttribute("href", 2);
2197 };
2198 }
2199})();
2200
2201if ( document.querySelectorAll ) (function(){
2202 var oldSizzle = Sizzle, div = document.createElement("div");
2203 div.innerHTML = "<p class='TEST'></p>";
2204
2205 // Safari can't handle uppercase or unicode characters when
2206 // in quirks mode.
2207 if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
2208 return;
2209 }
2210
2211 Sizzle = function(query, context, extra, seed){
2212 context = context || document;
2213
2214 // Only use querySelectorAll on non-XML documents
2215 // (ID selectors don't work in non-HTML documents)
2216 if ( !seed && context.nodeType === 9 && !isXML(context) ) {
2217 try {
2218 return makeArray( context.querySelectorAll(query), extra );
2219 } catch(e){}
2220 }
2221
2222 return oldSizzle(query, context, extra, seed);
2223 };
2224
2225 Sizzle.find = oldSizzle.find;
2226 Sizzle.filter = oldSizzle.filter;
2227 Sizzle.selectors = oldSizzle.selectors;
2228 Sizzle.matches = oldSizzle.matches;
2229})();
2230
2231if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
2232 var div = document.createElement("div");
2233 div.innerHTML = "<div class='test e'></div><div class='test'></div>";
2234
2235 // Opera can't find a second classname (in 9.6)
2236 if ( div.getElementsByClassName("e").length === 0 )
2237 return;
2238
2239 // Safari caches class attributes, doesn't catch changes (in 3.2)
2240 div.lastChild.className = "e";
2241
2242 if ( div.getElementsByClassName("e").length === 1 )
2243 return;
2244
2245 Expr.order.splice(1, 0, "CLASS");
2246 Expr.find.CLASS = function(match, context, isXML) {
2247 if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
2248 return context.getElementsByClassName(match[1]);
2249 }
2250 };
2251})();
2252
2253function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
2254 var sibDir = dir == "previousSibling" && !isXML;
2255 for ( var i = 0, l = checkSet.length; i < l; i++ ) {
2256 var elem = checkSet[i];
2257 if ( elem ) {
2258 if ( sibDir && elem.nodeType === 1 ){
2259 elem.sizcache = doneName;
2260 elem.sizset = i;
2261 }
2262 elem = elem[dir];
2263 var match = false;
2264
2265 while ( elem ) {
2266 if ( elem.sizcache === doneName ) {
2267 match = checkSet[elem.sizset];
2268 break;
2269 }
2270
2271 if ( elem.nodeType === 1 && !isXML ){
2272 elem.sizcache = doneName;
2273 elem.sizset = i;
2274 }
2275
2276 if ( elem.nodeName === cur ) {
2277 match = elem;
2278 break;
2279 }
2280
2281 elem = elem[dir];
2282 }
2283
2284 checkSet[i] = match;
2285 }
2286 }
2287}
2288
2289function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
2290 var sibDir = dir == "previousSibling" && !isXML;
2291 for ( var i = 0, l = checkSet.length; i < l; i++ ) {
2292 var elem = checkSet[i];
2293 if ( elem ) {
2294 if ( sibDir && elem.nodeType === 1 ) {
2295 elem.sizcache = doneName;
2296 elem.sizset = i;
2297 }
2298 elem = elem[dir];
2299 var match = false;
2300
2301 while ( elem ) {
2302 if ( elem.sizcache === doneName ) {
2303 match = checkSet[elem.sizset];
2304 break;
2305 }
2306
2307 if ( elem.nodeType === 1 ) {
2308 if ( !isXML ) {
2309 elem.sizcache = doneName;
2310 elem.sizset = i;
2311 }
2312 if ( typeof cur !== "string" ) {
2313 if ( elem === cur ) {
2314 match = true;
2315 break;
2316 }
2317
2318 } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
2319 match = elem;
2320 break;
2321 }
2322 }
2323
2324 elem = elem[dir];
2325 }
2326
2327 checkSet[i] = match;
2328 }
2329 }
2330}
2331
2332var contains = document.compareDocumentPosition ? function(a, b){
2333 return a.compareDocumentPosition(b) & 16;
2334} : function(a, b){
2335 return a !== b && (a.contains ? a.contains(b) : true);
2336};
2337
2338var isXML = function(elem){
2339 return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
2340 !!elem.ownerDocument && isXML( elem.ownerDocument );
2341};
2342
2343var posProcess = function(selector, context){
2344 var tmpSet = [], later = "", match,
2345 root = context.nodeType ? [context] : context;
2346
2347 // Position selectors must be done after the filter
2348 // And so must :not(positional) so we move all PSEUDOs to the end
2349 while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
2350 later += match[0];
2351 selector = selector.replace( Expr.match.PSEUDO, "" );
2352 }
2353
2354 selector = Expr.relative[selector] ? selector + "*" : selector;
2355
2356 for ( var i = 0, l = root.length; i < l; i++ ) {
2357 Sizzle( selector, root[i], tmpSet );
2358 }
2359
2360 return Sizzle.filter( later, tmpSet );
2361};
2362
2363// EXPOSE
2364jQuery.find = Sizzle;
2365jQuery.filter = Sizzle.filter;
2366jQuery.expr = Sizzle.selectors;
2367jQuery.expr[":"] = jQuery.expr.filters;
2368
2369Sizzle.selectors.filters.hidden = function(elem){
2370 return elem.offsetWidth === 0 || elem.offsetHeight === 0;
2371};
2372
2373Sizzle.selectors.filters.visible = function(elem){
2374 return elem.offsetWidth > 0 || elem.offsetHeight > 0;
2375};
2376
2377Sizzle.selectors.filters.animated = function(elem){
2378 return jQuery.grep(jQuery.timers, function(fn){
2379 return elem === fn.elem;
2380 }).length;
2381};
2382
2383jQuery.multiFilter = function( expr, elems, not ) {
2384 if ( not ) {
2385 expr = ":not(" + expr + ")";
2386 }
2387
2388 return Sizzle.matches(expr, elems);
2389};
2390
2391jQuery.dir = function( elem, dir ){
2392 var matched = [], cur = elem[dir];
2393 while ( cur && cur != document ) {
2394 if ( cur.nodeType == 1 )
2395 matched.push( cur );
2396 cur = cur[dir];
2397 }
2398 return matched;
2399};
2400
2401jQuery.nth = function(cur, result, dir, elem){
2402 result = result || 1;
2403 var num = 0;
2404
2405 for ( ; cur; cur = cur[dir] )
2406 if ( cur.nodeType == 1 && ++num == result )
2407 break;
2408
2409 return cur;
2410};
2411
2412jQuery.sibling = function(n, elem){
2413 var r = [];
2414
2415 for ( ; n; n = n.nextSibling ) {
2416 if ( n.nodeType == 1 && n != elem )
2417 r.push( n );
2418 }
2419
2420 return r;
2421};
2422
2423return;
2424
2425window.Sizzle = Sizzle;
2426
2427})();
2428/*
2429 * A number of helper functions used for managing events.
2430 * Many of the ideas behind this code originated from
2431 * Dean Edwards' addEvent library.
2432 */
2433jQuery.event = {
2434
2435 // Bind an event to an element
2436 // Original by Dean Edwards
2437 add: function(elem, types, handler, data) {
2438 if ( elem.nodeType == 3 || elem.nodeType == 8 )
2439 return;
2440
2441 // For whatever reason, IE has trouble passing the window object
2442 // around, causing it to be cloned in the process
2443 if ( elem.setInterval && elem != window )
2444 elem = window;
2445
2446 // Make sure that the function being executed has a unique ID
2447 if ( !handler.guid )
2448 handler.guid = this.guid++;
2449
2450 // if data is passed, bind to handler
2451 if ( data !== undefined ) {
2452 // Create temporary function pointer to original handler
2453 var fn = handler;
2454
2455 // Create unique handler function, wrapped around original handler
2456 handler = this.proxy( fn );
2457
2458 // Store data in unique handler
2459 handler.data = data;
2460 }
2461
2462 // Init the element's event structure
2463 var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
2464 handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
2465 // Handle the second event of a trigger and when
2466 // an event is called after a page has unloaded
2467 return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
2468 jQuery.event.handle.apply(arguments.callee.elem, arguments) :
2469 undefined;
2470 });
2471 // Add elem as a property of the handle function
2472 // This is to prevent a memory leak with non-native
2473 // event in IE.
2474 handle.elem = elem;
2475
2476 // Handle multiple events separated by a space
2477 // jQuery(...).bind("mouseover mouseout", fn);
2478 jQuery.each(types.split(/\s+/), function(index, type) {
2479 // Namespaced event handlers
2480 var namespaces = type.split(".");
2481 type = namespaces.shift();
2482 handler.type = namespaces.slice().sort().join(".");
2483
2484 // Get the current list of functions bound to this event
2485 var handlers = events[type];
2486
2487 if ( jQuery.event.specialAll[type] )
2488 jQuery.event.specialAll[type].setup.call(elem, data, namespaces);
2489
2490 // Init the event handler queue
2491 if (!handlers) {
2492 handlers = events[type] = {};
2493
2494 // Check for a special event handler
2495 // Only use addEventListener/attachEvent if the special
2496 // events handler returns false
2497 if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {
2498 // Bind the global event handler to the element
2499 if (elem.addEventListener)
2500 elem.addEventListener(type, handle, false);
2501 else if (elem.attachEvent)
2502 elem.attachEvent("on" + type, handle);
2503 }
2504 }
2505
2506 // Add the function to the element's handler list
2507 handlers[handler.guid] = handler;
2508
2509 // Keep track of which events have been used, for global triggering
2510 jQuery.event.global[type] = true;
2511 });
2512
2513 // Nullify elem to prevent memory leaks in IE
2514 elem = null;
2515 },
2516
2517 guid: 1,
2518 global: {},
2519
2520 // Detach an event or set of events from an element
2521 remove: function(elem, types, handler) {
2522 // don't do events on text and comment nodes
2523 if ( elem.nodeType == 3 || elem.nodeType == 8 )
2524 return;
2525
2526 var events = jQuery.data(elem, "events"), ret, index;
2527
2528 if ( events ) {
2529 // Unbind all events for the element
2530 if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )
2531 for ( var type in events )
2532 this.remove( elem, type + (types || "") );
2533 else {
2534 // types is actually an event object here
2535 if ( types.type ) {
2536 handler = types.handler;
2537 types = types.type;
2538 }
2539
2540 // Handle multiple events seperated by a space
2541 // jQuery(...).unbind("mouseover mouseout", fn);
2542 jQuery.each(types.split(/\s+/), function(index, type){
2543 // Namespaced event handlers
2544 var namespaces = type.split(".");
2545 type = namespaces.shift();
2546 var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
2547
2548 if ( events[type] ) {
2549 // remove the given handler for the given type
2550 if ( handler )
2551 delete events[type][handler.guid];
2552
2553 // remove all handlers for the given type
2554 else
2555 for ( var handle in events[type] )
2556 // Handle the removal of namespaced events
2557 if ( namespace.test(events[type][handle].type) )
2558 delete events[type][handle];
2559
2560 if ( jQuery.event.specialAll[type] )
2561 jQuery.event.specialAll[type].teardown.call(elem, namespaces);
2562
2563 // remove generic event handler if no more handlers exist
2564 for ( ret in events[type] ) break;
2565 if ( !ret ) {
2566 if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {
2567 if (elem.removeEventListener)
2568 elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
2569 else if (elem.detachEvent)
2570 elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
2571 }
2572 ret = null;
2573 delete events[type];
2574 }
2575 }
2576 });
2577 }
2578
2579 // Remove the expando if it's no longer used
2580 for ( ret in events ) break;
2581 if ( !ret ) {
2582 var handle = jQuery.data( elem, "handle" );
2583 if ( handle ) handle.elem = null;
2584 jQuery.removeData( elem, "events" );
2585 jQuery.removeData( elem, "handle" );
2586 }
2587 }
2588 },
2589
2590 // bubbling is internal
2591 trigger: function( event, data, elem, bubbling ) {
2592 // Event object or event type
2593 var type = event.type || event;
2594
2595 if( !bubbling ){
2596 event = typeof event === "object" ?
2597 // jQuery.Event object
2598 event[expando] ? event :
2599 // Object literal
2600 jQuery.extend( jQuery.Event(type), event ) :
2601 // Just the event type (string)
2602 jQuery.Event(type);
2603
2604 if ( type.indexOf("!") >= 0 ) {
2605 event.type = type = type.slice(0, -1);
2606 event.exclusive = true;
2607 }
2608
2609 // Handle a global trigger
2610 if ( !elem ) {
2611 // Don't bubble custom events when global (to avoid too much overhead)
2612 event.stopPropagation();
2613 // Only trigger if we've ever bound an event for it
2614 if ( this.global[type] )
2615 jQuery.each( jQuery.cache, function(){
2616 if ( this.events && this.events[type] )
2617 jQuery.event.trigger( event, data, this.handle.elem );
2618 });
2619 }
2620
2621 // Handle triggering a single element
2622
2623 // don't do events on text and comment nodes
2624 if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )
2625 return undefined;
2626
2627 // Clean up in case it is reused
2628 event.result = undefined;
2629 event.target = elem;
2630
2631 // Clone the incoming data, if any
2632 data = jQuery.makeArray(data);
2633 data.unshift( event );
2634 }
2635
2636 event.currentTarget = elem;
2637
2638 // Trigger the event, it is assumed that "handle" is a function
2639 var handle = jQuery.data(elem, "handle");
2640 if ( handle )
2641 handle.apply( elem, data );
2642
2643 // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
2644 if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
2645 event.result = false;
2646
2647 // Trigger the native events (except for clicks on links)
2648 if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
2649 this.triggered = true;
2650 try {
2651 elem[ type ]();
2652 // prevent IE from throwing an error for some hidden elements
2653 } catch (e) {}
2654 }
2655
2656 this.triggered = false;
2657
2658 if ( !event.isPropagationStopped() ) {
2659 var parent = elem.parentNode || elem.ownerDocument;
2660 if ( parent )
2661 jQuery.event.trigger(event, data, parent, true);
2662 }
2663 },
2664
2665 handle: function(event) {
2666 // returned undefined or false
2667 var all, handlers;
2668
2669 event = arguments[0] = jQuery.event.fix( event || window.event );
2670 event.currentTarget = this;
2671
2672 // Namespaced event handlers
2673 var namespaces = event.type.split(".");
2674 event.type = namespaces.shift();
2675
2676 // Cache this now, all = true means, any handler
2677 all = !namespaces.length && !event.exclusive;
2678
2679 var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
2680
2681 handlers = ( jQuery.data(this, "events") || {} )[event.type];
2682
2683 for ( var j in handlers ) {
2684 var handler = handlers[j];
2685
2686 // Filter the functions by class
2687 if ( all || namespace.test(handler.type) ) {
2688 // Pass in a reference to the handler function itself
2689 // So that we can later remove it
2690 event.handler = handler;
2691 event.data = handler.data;
2692
2693 var ret = handler.apply(this, arguments);
2694
2695 if( ret !== undefined ){
2696 event.result = ret;
2697 if ( ret === false ) {
2698 event.preventDefault();
2699 event.stopPropagation();
2700 }
2701 }
2702
2703 if( event.isImmediatePropagationStopped() )
2704 break;
2705
2706 }
2707 }
2708 },
2709
2710 props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
2711
2712 fix: function(event) {
2713 if ( event[expando] )
2714 return event;
2715
2716 // store a copy of the original event object
2717 // and "clone" to set read-only properties
2718 var originalEvent = event;
2719 event = jQuery.Event( originalEvent );
2720
2721 for ( var i = this.props.length, prop; i; ){
2722 prop = this.props[ --i ];
2723 event[ prop ] = originalEvent[ prop ];
2724 }
2725
2726 // Fix target property, if necessary
2727 if ( !event.target )
2728 event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
2729
2730 // check if target is a textnode (safari)
2731 if ( event.target.nodeType == 3 )
2732 event.target = event.target.parentNode;
2733
2734 // Add relatedTarget, if necessary
2735 if ( !event.relatedTarget && event.fromElement )
2736 event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
2737
2738 // Calculate pageX/Y if missing and clientX/Y available
2739 if ( event.pageX == null && event.clientX != null ) {
2740 var doc = document.documentElement, body = document.body;
2741 event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
2742 event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
2743 }
2744
2745 // Add which for key events
2746 if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
2747 event.which = event.charCode || event.keyCode;
2748
2749 // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
2750 if ( !event.metaKey && event.ctrlKey )
2751 event.metaKey = event.ctrlKey;
2752
2753 // Add which for click: 1 == left; 2 == middle; 3 == right
2754 // Note: button is not normalized, so don't use it
2755 if ( !event.which && event.button )
2756 event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
2757
2758 return event;
2759 },
2760
2761 proxy: function( fn, proxy ){
2762 proxy = proxy || function(){ return fn.apply(this, arguments); };
2763 // Set the guid of unique handler to the same of original handler, so it can be removed
2764 proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
2765 // So proxy can be declared as an argument
2766 return proxy;
2767 },
2768
2769 special: {
2770 ready: {
2771 // Make sure the ready event is setup
2772 setup: bindReady,
2773 teardown: function() {}
2774 }
2775 },
2776
2777 specialAll: {
2778 live: {
2779 setup: function( selector, namespaces ){
2780 jQuery.event.add( this, namespaces[0], liveHandler );
2781 },
2782 teardown: function( namespaces ){
2783 if ( namespaces.length ) {
2784 var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");
2785
2786 jQuery.each( (jQuery.data(this, "events").live || {}), function(){
2787 if ( name.test(this.type) )
2788 remove++;
2789 });
2790
2791 if ( remove < 1 )
2792 jQuery.event.remove( this, namespaces[0], liveHandler );
2793 }
2794 }
2795 }
2796 }
2797};
2798
2799jQuery.Event = function( src ){
2800 // Allow instantiation without the 'new' keyword
2801 if( !this.preventDefault )
2802 return new jQuery.Event(src);
2803
2804 // Event object
2805 if( src && src.type ){
2806 this.originalEvent = src;
2807 this.type = src.type;
2808 // Event type
2809 }else
2810 this.type = src;
2811
2812 // timeStamp is buggy for some events on Firefox(#3843)
2813 // So we won't rely on the native value
2814 this.timeStamp = now();
2815
2816 // Mark it as fixed
2817 this[expando] = true;
2818};
2819
2820function returnFalse(){
2821 return false;
2822}
2823function returnTrue(){
2824 return true;
2825}
2826
2827// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
2828// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
2829jQuery.Event.prototype = {
2830 preventDefault: function() {
2831 this.isDefaultPrevented = returnTrue;
2832
2833 var e = this.originalEvent;
2834 if( !e )
2835 return;
2836 // if preventDefault exists run it on the original event
2837 if (e.preventDefault)
2838 e.preventDefault();
2839 // otherwise set the returnValue property of the original event to false (IE)
2840 e.returnValue = false;
2841 },
2842 stopPropagation: function() {
2843 this.isPropagationStopped = returnTrue;
2844
2845 var e = this.originalEvent;
2846 if( !e )
2847 return;
2848 // if stopPropagation exists run it on the original event
2849 if (e.stopPropagation)
2850 e.stopPropagation();
2851 // otherwise set the cancelBubble property of the original event to true (IE)
2852 e.cancelBubble = true;
2853 },
2854 stopImmediatePropagation:function(){
2855 this.isImmediatePropagationStopped = returnTrue;
2856 this.stopPropagation();
2857 },
2858 isDefaultPrevented: returnFalse,
2859 isPropagationStopped: returnFalse,
2860 isImmediatePropagationStopped: returnFalse
2861};
2862// Checks if an event happened on an element within another element
2863// Used in jQuery.event.special.mouseenter and mouseleave handlers
2864var withinElement = function(event) {
2865 // Check if mouse(over|out) are still within the same parent element
2866 var parent = event.relatedTarget;
2867 // Traverse up the tree
2868 while ( parent && parent != this )
2869 try { parent = parent.parentNode; }
2870 catch(e) { parent = this; }
2871
2872 if( parent != this ){
2873 // set the correct event type
2874 event.type = event.data;
2875 // handle event if we actually just moused on to a non sub-element
2876 jQuery.event.handle.apply( this, arguments );
2877 }
2878};
2879
2880jQuery.each({
2881 mouseover: 'mouseenter',
2882 mouseout: 'mouseleave'
2883}, function( orig, fix ){
2884 jQuery.event.special[ fix ] = {
2885 setup: function(){
2886 jQuery.event.add( this, orig, withinElement, fix );
2887 },
2888 teardown: function(){
2889 jQuery.event.remove( this, orig, withinElement );
2890 }
2891 };
2892});
2893
2894jQuery.fn.extend({
2895 bind: function( type, data, fn ) {
2896 return type == "unload" ? this.one(type, data, fn) : this.each(function(){
2897 jQuery.event.add( this, type, fn || data, fn && data );
2898 });
2899 },
2900
2901 one: function( type, data, fn ) {
2902 var one = jQuery.event.proxy( fn || data, function(event) {
2903 jQuery(this).unbind(event, one);
2904 return (fn || data).apply( this, arguments );
2905 });
2906 return this.each(function(){
2907 jQuery.event.add( this, type, one, fn && data);
2908 });
2909 },
2910
2911 unbind: function( type, fn ) {
2912 return this.each(function(){
2913 jQuery.event.remove( this, type, fn );
2914 });
2915 },
2916
2917 trigger: function( type, data ) {
2918 return this.each(function(){
2919 jQuery.event.trigger( type, data, this );
2920 });
2921 },
2922
2923 triggerHandler: function( type, data ) {
2924 if( this[0] ){
2925 var event = jQuery.Event(type);
2926 event.preventDefault();
2927 event.stopPropagation();
2928 jQuery.event.trigger( event, data, this[0] );
2929 return event.result;
2930 }
2931 },
2932
2933 toggle: function( fn ) {
2934 // Save reference to arguments for access in closure
2935 var args = arguments, i = 1;
2936
2937 // link all the functions, so any of them can unbind this click handler
2938 while( i < args.length )
2939 jQuery.event.proxy( fn, args[i++] );
2940
2941 return this.click( jQuery.event.proxy( fn, function(event) {
2942 // Figure out which function to execute
2943 this.lastToggle = ( this.lastToggle || 0 ) % i;
2944
2945 // Make sure that clicks stop
2946 event.preventDefault();
2947
2948 // and execute the function
2949 return args[ this.lastToggle++ ].apply( this, arguments ) || false;
2950 }));
2951 },
2952
2953 hover: function(fnOver, fnOut) {
2954 return this.mouseenter(fnOver).mouseleave(fnOut);
2955 },
2956
2957 ready: function(fn) {
2958 // Attach the listeners
2959 bindReady();
2960
2961 // If the DOM is already ready
2962 if ( jQuery.isReady )
2963 // Execute the function immediately
2964 fn.call( document, jQuery );
2965
2966 // Otherwise, remember the function for later
2967 else
2968 // Add the function to the wait list
2969 jQuery.readyList.push( fn );
2970
2971 return this;
2972 },
2973
2974 live: function( type, fn ){
2975 var proxy = jQuery.event.proxy( fn );
2976 proxy.guid += this.selector + type;
2977
2978 jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );
2979
2980 return this;
2981 },
2982
2983 die: function( type, fn ){
2984 jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
2985 return this;
2986 }
2987});
2988
2989function liveHandler( event ){
2990 var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
2991 stop = true,
2992 elems = [];
2993
2994 jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
2995 if ( check.test(fn.type) ) {
2996 var elem = jQuery(event.target).closest(fn.data)[0];
2997 if ( elem )
2998 elems.push({ elem: elem, fn: fn });
2999 }
3000 });
3001
3002 elems.sort(function(a,b) {
3003 return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");
3004 });
3005
3006 jQuery.each(elems, function(){
3007 if ( this.fn.call(this.elem, event, this.fn.data) === false )
3008 return (stop = false);
3009 });
3010
3011 return stop;
3012}
3013
3014function liveConvert(type, selector){
3015 return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
3016}
3017
3018jQuery.extend({
3019 isReady: false,
3020 readyList: [],
3021 // Handle when the DOM is ready
3022 ready: function() {
3023 // Make sure that the DOM is not already loaded
3024 if ( !jQuery.isReady ) {
3025 // Remember that the DOM is ready
3026 jQuery.isReady = true;
3027
3028 // If there are functions bound, to execute
3029 if ( jQuery.readyList ) {
3030 // Execute all of them
3031 jQuery.each( jQuery.readyList, function(){
3032 this.call( document, jQuery );
3033 });
3034
3035 // Reset the list of functions
3036 jQuery.readyList = null;
3037 }
3038
3039 // Trigger any bound ready events
3040 jQuery(document).triggerHandler("ready");
3041 }
3042 }
3043});
3044
3045var readyBound = false;
3046
3047function bindReady(){
3048 if ( readyBound ) return;
3049 readyBound = true;
3050
3051 // Mozilla, Opera and webkit nightlies currently support this event
3052 if ( document.addEventListener ) {
3053 // Use the handy event callback
3054 document.addEventListener( "DOMContentLoaded", function(){
3055 document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
3056 jQuery.ready();
3057 }, false );
3058
3059 // If IE event model is used
3060 } else if ( document.attachEvent ) {
3061 // ensure firing before onload,
3062 // maybe late but safe also for iframes
3063 document.attachEvent("onreadystatechange", function(){
3064 if ( document.readyState === "complete" ) {
3065 document.detachEvent( "onreadystatechange", arguments.callee );
3066 jQuery.ready();
3067 }
3068 });
3069
3070 // If IE and not an iframe
3071 // continually check to see if the document is ready
3072 if ( document.documentElement.doScroll && window == window.top ) (function(){
3073 if ( jQuery.isReady ) return;
3074
3075 try {
3076 // If IE is used, use the trick by Diego Perini
3077 // http://javascript.nwbox.com/IEContentLoaded/
3078 document.documentElement.doScroll("left");
3079 } catch( error ) {
3080 setTimeout( arguments.callee, 0 );
3081 return;
3082 }
3083
3084 // and execute any waiting functions
3085 jQuery.ready();
3086 })();
3087 }
3088
3089 // A fallback to window.onload, that will always work
3090 jQuery.event.add( window, "load", jQuery.ready );
3091}
3092
3093jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
3094 "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
3095 "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){
3096
3097 // Handle event binding
3098 jQuery.fn[name] = function(fn){
3099 return fn ? this.bind(name, fn) : this.trigger(name);
3100 };
3101});
3102
3103// Prevent memory leaks in IE
3104// And prevent errors on refresh with events like mouseover in other browsers
3105// Window isn't included so as not to unbind existing unload events
3106jQuery( window ).bind( 'unload', function(){
3107 for ( var id in jQuery.cache )
3108 // Skip the window
3109 if ( id != 1 && jQuery.cache[ id ].handle )
3110 jQuery.event.remove( jQuery.cache[ id ].handle.elem );
3111});
3112(function(){
3113
3114 jQuery.support = {};
3115
3116 var root = document.documentElement,
3117 script = document.createElement("script"),
3118 div = document.createElement("div"),
3119 id = "script" + (new Date).getTime();
3120
3121 div.style.display = "none";
3122 div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';
3123
3124 var all = div.getElementsByTagName("*"),
3125 a = div.getElementsByTagName("a")[0];
3126
3127 // Can't get basic test support
3128 if ( !all || !all.length || !a ) {
3129 return;
3130 }
3131
3132 jQuery.support = {
3133 // IE strips leading whitespace when .innerHTML is used
3134 leadingWhitespace: div.firstChild.nodeType == 3,
3135
3136 // Make sure that tbody elements aren't automatically inserted
3137 // IE will insert them into empty tables
3138 tbody: !div.getElementsByTagName("tbody").length,
3139
3140 // Make sure that you can get all elements in an <object> element
3141 // IE 7 always returns no results
3142 objectAll: !!div.getElementsByTagName("object")[0]
3143 .getElementsByTagName("*").length,
3144
3145 // Make sure that link elements get serialized correctly by innerHTML
3146 // This requires a wrapper element in IE
3147 htmlSerialize: !!div.getElementsByTagName("link").length,
3148
3149 // Get the style information from getAttribute
3150 // (IE uses .cssText insted)
3151 style: /red/.test( a.getAttribute("style") ),
3152
3153 // Make sure that URLs aren't manipulated
3154 // (IE normalizes it by default)
3155 hrefNormalized: a.getAttribute("href") === "/a",
3156
3157 // Make sure that element opacity exists
3158 // (IE uses filter instead)
3159 opacity: a.style.opacity === "0.5",
3160
3161 // Verify style float existence
3162 // (IE uses styleFloat instead of cssFloat)
3163 cssFloat: !!a.style.cssFloat,
3164
3165 // Will be defined later
3166 scriptEval: false,
3167 noCloneEvent: true,
3168 boxModel: null
3169 };
3170
3171 script.type = "text/javascript";
3172 try {
3173 script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
3174 } catch(e){}
3175
3176 root.insertBefore( script, root.firstChild );
3177
3178 // Make sure that the execution of code works by injecting a script
3179 // tag with appendChild/createTextNode
3180 // (IE doesn't support this, fails, and uses .text instead)
3181 if ( window[ id ] ) {
3182 jQuery.support.scriptEval = true;
3183 delete window[ id ];
3184 }
3185
3186 root.removeChild( script );
3187
3188 if ( div.attachEvent && div.fireEvent ) {
3189 div.attachEvent("onclick", function(){
3190 // Cloning a node shouldn't copy over any
3191 // bound event handlers (IE does this)
3192 jQuery.support.noCloneEvent = false;
3193 div.detachEvent("onclick", arguments.callee);
3194 });
3195 div.cloneNode(true).fireEvent("onclick");
3196 }
3197
3198 // Figure out if the W3C box model works as expected
3199 // document.body must exist before we can do this
3200 jQuery(function(){
3201 var div = document.createElement("div");
3202 div.style.width = div.style.paddingLeft = "1px";
3203
3204 document.body.appendChild( div );
3205 jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
3206 document.body.removeChild( div ).style.display = 'none';
3207 });
3208})();
3209
3210var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";
3211
3212jQuery.props = {
3213 "for": "htmlFor",
3214 "class": "className",
3215 "float": styleFloat,
3216 cssFloat: styleFloat,
3217 styleFloat: styleFloat,
3218 readonly: "readOnly",
3219 maxlength: "maxLength",
3220 cellspacing: "cellSpacing",
3221 rowspan: "rowSpan",
3222 tabindex: "tabIndex"
3223};
3224jQuery.fn.extend({
3225 // Keep a copy of the old load
3226 _load: jQuery.fn.load,
3227
3228 load: function( url, params, callback ) {
3229 if ( typeof url !== "string" )
3230 return this._load( url );
3231
3232 var off = url.indexOf(" ");
3233 if ( off >= 0 ) {
3234 var selector = url.slice(off, url.length);
3235 url = url.slice(0, off);
3236 }
3237
3238 // Default to a GET request
3239 var type = "GET";
3240
3241 // If the second parameter was provided
3242 if ( params )
3243 // If it's a function
3244 if ( jQuery.isFunction( params ) ) {
3245 // We assume that it's the callback
3246 callback = params;
3247 params = null;
3248
3249 // Otherwise, build a param string
3250 } else if( typeof params === "object" ) {
3251 params = jQuery.param( params );
3252 type = "POST";
3253 }
3254
3255 var self = this;
3256
3257 // Request the remote document
3258 jQuery.ajax({
3259 url: url,
3260 type: type,
3261 dataType: "html",
3262 data: params,
3263 complete: function(res, status){
3264 // If successful, inject the HTML into all the matched elements
3265 if ( status == "success" || status == "notmodified" )
3266 // See if a selector was specified
3267 self.html( selector ?
3268 // Create a dummy div to hold the results
3269 jQuery("<div/>")
3270 // inject the contents of the document in, removing the scripts
3271 // to avoid any 'Permission Denied' errors in IE
3272 .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
3273
3274 // Locate the specified elements
3275 .find(selector) :
3276
3277 // If not, just inject the full result
3278 res.responseText );
3279
3280 if( callback )
3281 self.each( callback, [res.responseText, status, res] );
3282 }
3283 });
3284 return this;
3285 },
3286
3287 serialize: function() {
3288 return jQuery.param(this.serializeArray());
3289 },
3290 serializeArray: function() {
3291 return this.map(function(){
3292 return this.elements ? jQuery.makeArray(this.elements) : this;
3293 })
3294 .filter(function(){
3295 return this.name && !this.disabled &&
3296 (this.checked || /select|textarea/i.test(this.nodeName) ||
3297 /text|hidden|password|search/i.test(this.type));
3298 })
3299 .map(function(i, elem){
3300 var val = jQuery(this).val();
3301 return val == null ? null :
3302 jQuery.isArray(val) ?
3303 jQuery.map( val, function(val, i){
3304 return {name: elem.name, value: val};
3305 }) :
3306 {name: elem.name, value: val};
3307 }).get();
3308 }
3309});
3310
3311// Attach a bunch of functions for handling common AJAX events
3312jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
3313 jQuery.fn[o] = function(f){
3314 return this.bind(o, f);
3315 };
3316});
3317
3318var jsc = now();
3319
3320jQuery.extend({
3321
3322 get: function( url, data, callback, type ) {
3323 // shift arguments if data argument was ommited
3324 if ( jQuery.isFunction( data ) ) {
3325 callback = data;
3326 data = null;
3327 }
3328
3329 return jQuery.ajax({
3330 type: "GET",
3331 url: url,
3332 data: data,
3333 success: callback,
3334 dataType: type
3335 });
3336 },
3337
3338 getScript: function( url, callback ) {
3339 return jQuery.get(url, null, callback, "script");
3340 },
3341
3342 getJSON: function( url, data, callback ) {
3343 return jQuery.get(url, data, callback, "json");
3344 },
3345
3346 post: function( url, data, callback, type ) {
3347 if ( jQuery.isFunction( data ) ) {
3348 callback = data;
3349 data = {};
3350 }
3351
3352 return jQuery.ajax({
3353 type: "POST",
3354 url: url,
3355 data: data,
3356 success: callback,
3357 dataType: type
3358 });
3359 },
3360
3361 ajaxSetup: function( settings ) {
3362 jQuery.extend( jQuery.ajaxSettings, settings );
3363 },
3364
3365 ajaxSettings: {
3366 url: location.href,
3367 global: true,
3368 type: "GET",
3369 contentType: "application/x-www-form-urlencoded",
3370 processData: true,
3371 async: true,
3372 /*
3373 timeout: 0,
3374 data: null,
3375 username: null,
3376 password: null,
3377 */
3378 // Create the request object; Microsoft failed to properly
3379 // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
3380 // This function can be overriden by calling jQuery.ajaxSetup
3381 xhr:function(){
3382 return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
3383 },
3384 accepts: {
3385 xml: "application/xml, text/xml",
3386 html: "text/html",
3387 script: "text/javascript, application/javascript",
3388 json: "application/json, text/javascript",
3389 text: "text/plain",
3390 _default: "*/*"
3391 }
3392 },
3393
3394 // Last-Modified header cache for next request
3395 lastModified: {},
3396
3397 ajax: function( s ) {
3398 // Extend the settings, but re-extend 's' so that it can be
3399 // checked again later (in the test suite, specifically)
3400 s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
3401
3402 var jsonp, jsre = /=\?(&|$)/g, status, data,
3403 type = s.type.toUpperCase();
3404
3405 // convert data if not already a string
3406 if ( s.data && s.processData && typeof s.data !== "string" )
3407 s.data = jQuery.param(s.data);
3408
3409 // Handle JSONP Parameter Callbacks
3410 if ( s.dataType == "jsonp" ) {
3411 if ( type == "GET" ) {
3412 if ( !s.url.match(jsre) )
3413 s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
3414 } else if ( !s.data || !s.data.match(jsre) )
3415 s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
3416 s.dataType = "json";
3417 }
3418
3419 // Build temporary JSONP function
3420 if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
3421 jsonp = "jsonp" + jsc++;
3422
3423 // Replace the =? sequence both in the query string and the data
3424 if ( s.data )
3425 s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
3426 s.url = s.url.replace(jsre, "=" + jsonp + "$1");
3427
3428 // We need to make sure
3429 // that a JSONP style response is executed properly
3430 s.dataType = "script";
3431
3432 // Handle JSONP-style loading
3433 window[ jsonp ] = function(tmp){
3434 data = tmp;
3435 success();
3436 complete();
3437 // Garbage collect
3438 window[ jsonp ] = undefined;
3439 try{ delete window[ jsonp ]; } catch(e){}
3440 if ( head )
3441 head.removeChild( script );
3442 };
3443 }
3444
3445 if ( s.dataType == "script" && s.cache == null )
3446 s.cache = false;
3447
3448 if ( s.cache === false && type == "GET" ) {
3449 var ts = now();
3450 // try replacing _= if it is there
3451 var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
3452 // if nothing was replaced, add timestamp to the end
3453 s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
3454 }
3455
3456 // If data is available, append data to url for get requests
3457 if ( s.data && type == "GET" ) {
3458 s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
3459
3460 // IE likes to send both get and post data, prevent this
3461 s.data = null;
3462 }
3463
3464 // Watch for a new set of requests
3465 if ( s.global && ! jQuery.active++ )
3466 jQuery.event.trigger( "ajaxStart" );
3467
3468 // Matches an absolute URL, and saves the domain
3469 var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );
3470
3471 // If we're requesting a remote document
3472 // and trying to load JSON or Script with a GET
3473 if ( s.dataType == "script" && type == "GET" && parts
3474 && ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
3475
3476 var head = document.getElementsByTagName("head")[0];
3477 var script = document.createElement("script");
3478 script.src = s.url;
3479 if (s.scriptCharset)
3480 script.charset = s.scriptCharset;
3481
3482 // Handle Script loading
3483 if ( !jsonp ) {
3484 var done = false;
3485
3486 // Attach handlers for all browsers
3487 script.onload = script.onreadystatechange = function(){
3488 if ( !done && (!this.readyState ||
3489 this.readyState == "loaded" || this.readyState == "complete") ) {
3490 done = true;
3491 success();
3492 complete();
3493
3494 // Handle memory leak in IE
3495 script.onload = script.onreadystatechange = null;
3496 head.removeChild( script );
3497 }
3498 };
3499 }
3500
3501 head.appendChild(script);
3502
3503 // We handle everything using the script element injection
3504 return undefined;
3505 }
3506
3507 var requestDone = false;
3508
3509 // Create the request object
3510 var xhr = s.xhr();
3511
3512 // Open the socket
3513 // Passing null username, generates a login popup on Opera (#2865)
3514 if( s.username )
3515 xhr.open(type, s.url, s.async, s.username, s.password);
3516 else
3517 xhr.open(type, s.url, s.async);
3518
3519 // Need an extra try/catch for cross domain requests in Firefox 3
3520 try {
3521 // Set the correct header, if data is being sent
3522 if ( s.data )
3523 xhr.setRequestHeader("Content-Type", s.contentType);
3524
3525 // Set the If-Modified-Since header, if ifModified mode.
3526 if ( s.ifModified )
3527 xhr.setRequestHeader("If-Modified-Since",
3528 jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
3529
3530 // Set header so the called script knows that it's an XMLHttpRequest
3531 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
3532
3533 // Set the Accepts header for the server, depending on the dataType
3534 xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
3535 s.accepts[ s.dataType ] + ", */*" :
3536 s.accepts._default );
3537 } catch(e){}
3538
3539 // Allow custom headers/mimetypes and early abort
3540 if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
3541 // Handle the global AJAX counter
3542 if ( s.global && ! --jQuery.active )
3543 jQuery.event.trigger( "ajaxStop" );
3544 // close opended socket
3545 xhr.abort();
3546 return false;
3547 }
3548
3549 if ( s.global )
3550 jQuery.event.trigger("ajaxSend", [xhr, s]);
3551
3552 // Wait for a response to come back
3553 var onreadystatechange = function(isTimeout){
3554 // The request was aborted, clear the interval and decrement jQuery.active
3555 if (xhr.readyState == 0) {
3556 if (ival) {
3557 // clear poll interval
3558 clearInterval(ival);
3559 ival = null;
3560 // Handle the global AJAX counter
3561 if ( s.global && ! --jQuery.active )
3562 jQuery.event.trigger( "ajaxStop" );
3563 }
3564 // The transfer is complete and the data is available, or the request timed out
3565 } else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
3566 requestDone = true;
3567
3568 // clear poll interval
3569 if (ival) {
3570 clearInterval(ival);
3571 ival = null;
3572 }
3573
3574 status = isTimeout == "timeout" ? "timeout" :
3575 !jQuery.httpSuccess( xhr ) ? "error" :
3576 s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :
3577 "success";
3578
3579 if ( status == "success" ) {
3580 // Watch for, and catch, XML document parse errors
3581 try {
3582 // process the data (runs the xml through httpData regardless of callback)
3583 data = jQuery.httpData( xhr, s.dataType, s );
3584 } catch(e) {
3585 status = "parsererror";
3586 }
3587 }
3588
3589 // Make sure that the request was successful or notmodified
3590 if ( status == "success" ) {
3591 // Cache Last-Modified header, if ifModified mode.
3592 var modRes;
3593 try {
3594 modRes = xhr.getResponseHeader("Last-Modified");
3595 } catch(e) {} // swallow exception thrown by FF if header is not available
3596
3597 if ( s.ifModified && modRes )
3598 jQuery.lastModified[s.url] = modRes;
3599
3600 // JSONP handles its own success callback
3601 if ( !jsonp )
3602 success();
3603 } else
3604 jQuery.handleError(s, xhr, status);
3605
3606 // Fire the complete handlers
3607 complete();
3608
3609 if ( isTimeout )
3610 xhr.abort();
3611
3612 // Stop memory leaks
3613 if ( s.async )
3614 xhr = null;
3615 }
3616 };
3617
3618 if ( s.async ) {
3619 // don't attach the handler to the request, just poll it instead
3620 var ival = setInterval(onreadystatechange, 13);
3621
3622 // Timeout checker
3623 if ( s.timeout > 0 )
3624 setTimeout(function(){
3625 // Check to see if the request is still happening
3626 if ( xhr && !requestDone )
3627 onreadystatechange( "timeout" );
3628 }, s.timeout);
3629 }
3630
3631 // Send the data
3632 try {
3633 xhr.send(s.data);
3634 } catch(e) {
3635 jQuery.handleError(s, xhr, null, e);
3636 }
3637
3638 // firefox 1.5 doesn't fire statechange for sync requests
3639 if ( !s.async )
3640 onreadystatechange();
3641
3642 function success(){
3643 // If a local callback was specified, fire it and pass it the data
3644 if ( s.success )
3645 s.success( data, status );
3646
3647 // Fire the global callback
3648 if ( s.global )
3649 jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
3650 }
3651
3652 function complete(){
3653 // Process result
3654 if ( s.complete )
3655 s.complete(xhr, status);
3656
3657 // The request was completed
3658 if ( s.global )
3659 jQuery.event.trigger( "ajaxComplete", [xhr, s] );
3660
3661 // Handle the global AJAX counter
3662 if ( s.global && ! --jQuery.active )
3663 jQuery.event.trigger( "ajaxStop" );
3664 }
3665
3666 // return XMLHttpRequest to allow aborting the request etc.
3667 return xhr;
3668 },
3669
3670 handleError: function( s, xhr, status, e ) {
3671 // If a local callback was specified, fire it
3672 if ( s.error ) s.error( xhr, status, e );
3673
3674 // Fire the global callback
3675 if ( s.global )
3676 jQuery.event.trigger( "ajaxError", [xhr, s, e] );
3677 },
3678
3679 // Counter for holding the number of active queries
3680 active: 0,
3681
3682 // Determines if an XMLHttpRequest was successful or not
3683 httpSuccess: function( xhr ) {
3684 try {
3685 // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
3686 return !xhr.status && location.protocol == "file:" ||
3687 ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
3688 } catch(e){}
3689 return false;
3690 },
3691
3692 // Determines if an XMLHttpRequest returns NotModified
3693 httpNotModified: function( xhr, url ) {
3694 try {
3695 var xhrRes = xhr.getResponseHeader("Last-Modified");
3696
3697 // Firefox always returns 200. check Last-Modified date
3698 return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
3699 } catch(e){}
3700 return false;
3701 },
3702
3703 httpData: function( xhr, type, s ) {
3704 var ct = xhr.getResponseHeader("content-type"),
3705 xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
3706 data = xml ? xhr.responseXML : xhr.responseText;
3707
3708 if ( xml && data.documentElement.tagName == "parsererror" )
3709 throw "parsererror";
3710
3711 // Allow a pre-filtering function to sanitize the response
3712 // s != null is checked to keep backwards compatibility
3713 if( s && s.dataFilter )
3714 data = s.dataFilter( data, type );
3715
3716 // The filter can actually parse the response
3717 if( typeof data === "string" ){
3718
3719 // If the type is "script", eval it in global context
3720 if ( type == "script" )
3721 jQuery.globalEval( data );
3722
3723 // Get the JavaScript object, if JSON is used.
3724 if ( type == "json" )
3725 data = window["eval"]("(" + data + ")");
3726 }
3727
3728 return data;
3729 },
3730
3731 // Serialize an array of form elements or a set of
3732 // key/values into a query string
3733 param: function( a ) {
3734 var s = [ ];
3735
3736 function add( key, value ){
3737 s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
3738 };
3739
3740 // If an array was passed in, assume that it is an array
3741 // of form elements
3742 if ( jQuery.isArray(a) || a.jquery )
3743 // Serialize the form elements
3744 jQuery.each( a, function(){
3745 add( this.name, this.value );
3746 });
3747
3748 // Otherwise, assume that it's an object of key/value pairs
3749 else
3750 // Serialize the key/values
3751 for ( var j in a )
3752 // If the value is an array then the key names need to be repeated
3753 if ( jQuery.isArray(a[j]) )
3754 jQuery.each( a[j], function(){
3755 add( j, this );
3756 });
3757 else
3758 add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );
3759
3760 // Return the resulting serialization
3761 return s.join("&").replace(/%20/g, "+");
3762 }
3763
3764});
3765var elemdisplay = {},
3766 timerId,
3767 fxAttrs = [
3768 // height animations
3769 [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
3770 // width animations
3771 [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
3772 // opacity animations
3773 [ "opacity" ]
3774 ];
3775
3776function genFx( type, num ){
3777 var obj = {};
3778 jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){
3779 obj[ this ] = type;
3780 });
3781 return obj;
3782}
3783
3784jQuery.fn.extend({
3785 show: function(speed,callback){
3786 if ( speed ) {
3787 return this.animate( genFx("show", 3), speed, callback);
3788 } else {
3789 for ( var i = 0, l = this.length; i < l; i++ ){
3790 var old = jQuery.data(this[i], "olddisplay");
3791
3792 this[i].style.display = old || "";
3793
3794 if ( jQuery.css(this[i], "display") === "none" ) {
3795 var tagName = this[i].tagName, display;
3796
3797 if ( elemdisplay[ tagName ] ) {
3798 display = elemdisplay[ tagName ];
3799 } else {
3800 var elem = jQuery("<" + tagName + " />").appendTo("body");
3801
3802 display = elem.css("display");
3803 if ( display === "none" )
3804 display = "block";
3805
3806 elem.remove();
3807
3808 elemdisplay[ tagName ] = display;
3809 }
3810
3811 jQuery.data(this[i], "olddisplay", display);
3812 }
3813 }
3814
3815 // Set the display of the elements in a second loop
3816 // to avoid the constant reflow
3817 for ( var i = 0, l = this.length; i < l; i++ ){
3818 this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
3819 }
3820
3821 return this;
3822 }
3823 },
3824
3825 hide: function(speed,callback){
3826 if ( speed ) {
3827 return this.animate( genFx("hide", 3), speed, callback);
3828 } else {
3829 for ( var i = 0, l = this.length; i < l; i++ ){
3830 var old = jQuery.data(this[i], "olddisplay");
3831 if ( !old && old !== "none" )
3832 jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
3833 }
3834
3835 // Set the display of the elements in a second loop
3836 // to avoid the constant reflow
3837 for ( var i = 0, l = this.length; i < l; i++ ){
3838 this[i].style.display = "none";
3839 }
3840
3841 return this;
3842 }
3843 },
3844
3845 // Save the old toggle function
3846 _toggle: jQuery.fn.toggle,
3847
3848 toggle: function( fn, fn2 ){
3849 var bool = typeof fn === "boolean";
3850
3851 return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
3852 this._toggle.apply( this, arguments ) :
3853 fn == null || bool ?
3854 this.each(function(){
3855 var state = bool ? fn : jQuery(this).is(":hidden");
3856 jQuery(this)[ state ? "show" : "hide" ]();
3857 }) :
3858 this.animate(genFx("toggle", 3), fn, fn2);
3859 },
3860
3861 fadeTo: function(speed,to,callback){
3862 return this.animate({opacity: to}, speed, callback);
3863 },
3864
3865 animate: function( prop, speed, easing, callback ) {
3866 var optall = jQuery.speed(speed, easing, callback);
3867
3868 return this[ optall.queue === false ? "each" : "queue" ](function(){
3869
3870 var opt = jQuery.extend({}, optall), p,
3871 hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
3872 self = this;
3873
3874 for ( p in prop ) {
3875 if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
3876 return opt.complete.call(this);
3877
3878 if ( ( p == "height" || p == "width" ) && this.style ) {
3879 // Store display property
3880 opt.display = jQuery.css(this, "display");
3881
3882 // Make sure that nothing sneaks out
3883 opt.overflow = this.style.overflow;
3884 }
3885 }
3886
3887 if ( opt.overflow != null )
3888 this.style.overflow = "hidden";
3889
3890 opt.curAnim = jQuery.extend({}, prop);
3891
3892 jQuery.each( prop, function(name, val){
3893 var e = new jQuery.fx( self, opt, name );
3894
3895 if ( /toggle|show|hide/.test(val) )
3896 e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
3897 else {
3898 var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
3899 start = e.cur(true) || 0;
3900
3901 if ( parts ) {
3902 var end = parseFloat(parts[2]),
3903 unit = parts[3] || "px";
3904
3905 // We need to compute starting value
3906 if ( unit != "px" ) {
3907 self.style[ name ] = (end || 1) + unit;
3908 start = ((end || 1) / e.cur(true)) * start;
3909 self.style[ name ] = start + unit;
3910 }
3911
3912 // If a +=/-= token was provided, we're doing a relative animation
3913 if ( parts[1] )
3914 end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
3915
3916 e.custom( start, end, unit );
3917 } else
3918 e.custom( start, val, "" );
3919 }
3920 });
3921
3922 // For JS strict compliance
3923 return true;
3924 });
3925 },
3926
3927 stop: function(clearQueue, gotoEnd){
3928 var timers = jQuery.timers;
3929
3930 if (clearQueue)
3931 this.queue([]);
3932
3933 this.each(function(){
3934 // go in reverse order so anything added to the queue during the loop is ignored
3935 for ( var i = timers.length - 1; i >= 0; i-- )
3936 if ( timers[i].elem == this ) {
3937 if (gotoEnd)
3938 // force the next step to be the last
3939 timers[i](true);
3940 timers.splice(i, 1);
3941 }
3942 });
3943
3944 // start the next in the queue if the last step wasn't forced
3945 if (!gotoEnd)
3946 this.dequeue();
3947
3948 return this;
3949 }
3950
3951});
3952
3953// Generate shortcuts for custom animations
3954jQuery.each({
3955 slideDown: genFx("show", 1),
3956 slideUp: genFx("hide", 1),
3957 slideToggle: genFx("toggle", 1),
3958 fadeIn: { opacity: "show" },
3959 fadeOut: { opacity: "hide" }
3960}, function( name, props ){
3961 jQuery.fn[ name ] = function( speed, callback ){
3962 return this.animate( props, speed, callback );
3963 };
3964});
3965
3966jQuery.extend({
3967
3968 speed: function(speed, easing, fn) {
3969 var opt = typeof speed === "object" ? speed : {
3970 complete: fn || !fn && easing ||
3971 jQuery.isFunction( speed ) && speed,
3972 duration: speed,
3973 easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
3974 };
3975
3976 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
3977 jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
3978
3979 // Queueing
3980 opt.old = opt.complete;
3981 opt.complete = function(){
3982 if ( opt.queue !== false )
3983 jQuery(this).dequeue();
3984 if ( jQuery.isFunction( opt.old ) )
3985 opt.old.call( this );
3986 };
3987
3988 return opt;
3989 },
3990
3991 easing: {
3992 linear: function( p, n, firstNum, diff ) {
3993 return firstNum + diff * p;
3994 },
3995 swing: function( p, n, firstNum, diff ) {
3996 return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
3997 }
3998 },
3999
4000 timers: [],
4001
4002 fx: function( elem, options, prop ){
4003 this.options = options;
4004 this.elem = elem;
4005 this.prop = prop;
4006
4007 if ( !options.orig )
4008 options.orig = {};
4009 }
4010
4011});
4012
4013jQuery.fx.prototype = {
4014
4015 // Simple function for setting a style value
4016 update: function(){
4017 if ( this.options.step )
4018 this.options.step.call( this.elem, this.now, this );
4019
4020 (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
4021
4022 // Set display property to block for height/width animations
4023 if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
4024 this.elem.style.display = "block";
4025 },
4026
4027 // Get the current size
4028 cur: function(force){
4029 if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
4030 return this.elem[ this.prop ];
4031
4032 var r = parseFloat(jQuery.css(this.elem, this.prop, force));
4033 return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
4034 },
4035
4036 // Start an animation from one number to another
4037 custom: function(from, to, unit){
4038 this.startTime = now();
4039 this.start = from;
4040 this.end = to;
4041 this.unit = unit || this.unit || "px";
4042 this.now = this.start;
4043 this.pos = this.state = 0;
4044
4045 var self = this;
4046 function t(gotoEnd){
4047 return self.step(gotoEnd);
4048 }
4049
4050 t.elem = this.elem;
4051
4052 if ( t() && jQuery.timers.push(t) && !timerId ) {
4053 timerId = setInterval(function(){
4054 var timers = jQuery.timers;
4055
4056 for ( var i = 0; i < timers.length; i++ )
4057 if ( !timers[i]() )
4058 timers.splice(i--, 1);
4059
4060 if ( !timers.length ) {
4061 clearInterval( timerId );
4062 timerId = undefined;
4063 }
4064 }, 13);
4065 }
4066 },
4067
4068 // Simple 'show' function
4069 show: function(){
4070 // Remember where we started, so that we can go back to it later
4071 this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
4072 this.options.show = true;
4073
4074 // Begin the animation
4075 // Make sure that we start at a small width/height to avoid any
4076 // flash of content
4077 this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
4078
4079 // Start by showing the element
4080 jQuery(this.elem).show();
4081 },
4082
4083 // Simple 'hide' function
4084 hide: function(){
4085 // Remember where we started, so that we can go back to it later
4086 this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
4087 this.options.hide = true;
4088
4089 // Begin the animation
4090 this.custom(this.cur(), 0);
4091 },
4092
4093 // Each step of an animation
4094 step: function(gotoEnd){
4095 var t = now();
4096
4097 if ( gotoEnd || t >= this.options.duration + this.startTime ) {
4098 this.now = this.end;
4099 this.pos = this.state = 1;
4100 this.update();
4101
4102 this.options.curAnim[ this.prop ] = true;
4103
4104 var done = true;
4105 for ( var i in this.options.curAnim )
4106 if ( this.options.curAnim[i] !== true )
4107 done = false;
4108
4109 if ( done ) {
4110 if ( this.options.display != null ) {
4111 // Reset the overflow
4112 this.elem.style.overflow = this.options.overflow;
4113
4114 // Reset the display
4115 this.elem.style.display = this.options.display;
4116 if ( jQuery.css(this.elem, "display") == "none" )
4117 this.elem.style.display = "block";
4118 }
4119
4120 // Hide the element if the "hide" operation was done
4121 if ( this.options.hide )
4122 jQuery(this.elem).hide();
4123
4124 // Reset the properties, if the item has been hidden or shown
4125 if ( this.options.hide || this.options.show )
4126 for ( var p in this.options.curAnim )
4127 jQuery.attr(this.elem.style, p, this.options.orig[p]);
4128
4129 // Execute the complete function
4130 this.options.complete.call( this.elem );
4131 }
4132
4133 return false;
4134 } else {
4135 var n = t - this.startTime;
4136 this.state = n / this.options.duration;
4137
4138 // Perform the easing function, defaults to swing
4139 this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
4140 this.now = this.start + ((this.end - this.start) * this.pos);
4141
4142 // Perform the next step of the animation
4143 this.update();
4144 }
4145
4146 return true;
4147 }
4148
4149};
4150
4151jQuery.extend( jQuery.fx, {
4152 speeds:{
4153 slow: 600,
4154 fast: 200,
4155 // Default speed
4156 _default: 400
4157 },
4158 step: {
4159
4160 opacity: function(fx){
4161 jQuery.attr(fx.elem.style, "opacity", fx.now);
4162 },
4163
4164 _default: function(fx){
4165 if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
4166 fx.elem.style[ fx.prop ] = fx.now + fx.unit;
4167 else
4168 fx.elem[ fx.prop ] = fx.now;
4169 }
4170 }
4171});
4172if ( document.documentElement["getBoundingClientRect"] )
4173 jQuery.fn.offset = function() {
4174 if ( !this[0] ) return { top: 0, left: 0 };
4175 if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
4176 var box = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,
4177 clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
4178 top = box.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,
4179 left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
4180 return { top: top, left: left };
4181 };
4182else
4183 jQuery.fn.offset = function() {
4184 if ( !this[0] ) return { top: 0, left: 0 };
4185 if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
4186 jQuery.offset.initialized || jQuery.offset.initialize();
4187
4188 var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,
4189 doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
4190 body = doc.body, defaultView = doc.defaultView,
4191 prevComputedStyle = defaultView.getComputedStyle(elem, null),
4192 top = elem.offsetTop, left = elem.offsetLeft;
4193
4194 while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
4195 computedStyle = defaultView.getComputedStyle(elem, null);
4196 top -= elem.scrollTop, left -= elem.scrollLeft;
4197 if ( elem === offsetParent ) {
4198 top += elem.offsetTop, left += elem.offsetLeft;
4199 if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
4200 top += parseInt( computedStyle.borderTopWidth, 10) || 0,
4201 left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
4202 prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
4203 }
4204 if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
4205 top += parseInt( computedStyle.borderTopWidth, 10) || 0,
4206 left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
4207 prevComputedStyle = computedStyle;
4208 }
4209
4210 if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )
4211 top += body.offsetTop,
4212 left += body.offsetLeft;
4213
4214 if ( prevComputedStyle.position === "fixed" )
4215 top += Math.max(docElem.scrollTop, body.scrollTop),
4216 left += Math.max(docElem.scrollLeft, body.scrollLeft);
4217
4218 return { top: top, left: left };
4219 };
4220
4221jQuery.offset = {
4222 initialize: function() {
4223 if ( this.initialized ) return;
4224 var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,
4225 html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';
4226
4227 rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
4228 for ( prop in rules ) container.style[prop] = rules[prop];
4229
4230 container.innerHTML = html;
4231 body.insertBefore(container, body.firstChild);
4232 innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;
4233
4234 this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
4235 this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
4236
4237 innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
4238 this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
4239
4240 body.style.marginTop = '1px';
4241 this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
4242 body.style.marginTop = bodyMarginTop;
4243
4244 body.removeChild(container);
4245 this.initialized = true;
4246 },
4247
4248 bodyOffset: function(body) {
4249 jQuery.offset.initialized || jQuery.offset.initialize();
4250 var top = body.offsetTop, left = body.offsetLeft;
4251 if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
4252 top += parseInt( jQuery.curCSS(body, 'marginTop', true), 10 ) || 0,
4253 left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
4254 return { top: top, left: left };
4255 }
4256};
4257
4258
4259jQuery.fn.extend({
4260 position: function() {
4261 var left = 0, top = 0, results;
4262
4263 if ( this[0] ) {
4264 // Get *real* offsetParent
4265 var offsetParent = this.offsetParent(),
4266
4267 // Get correct offsets
4268 offset = this.offset(),
4269 parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
4270
4271 // Subtract element margins
4272 // note: when an element has margin: auto the offsetLeft and marginLeft
4273 // are the same in Safari causing offset.left to incorrectly be 0
4274 offset.top -= num( this, 'marginTop' );
4275 offset.left -= num( this, 'marginLeft' );
4276
4277 // Add offsetParent borders
4278 parentOffset.top += num( offsetParent, 'borderTopWidth' );
4279 parentOffset.left += num( offsetParent, 'borderLeftWidth' );
4280
4281 // Subtract the two offsets
4282 results = {
4283 top: offset.top - parentOffset.top,
4284 left: offset.left - parentOffset.left
4285 };
4286 }
4287
4288 return results;
4289 },
4290
4291 offsetParent: function() {
4292 var offsetParent = this[0].offsetParent || document.body;
4293 while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
4294 offsetParent = offsetParent.offsetParent;
4295 return jQuery(offsetParent);
4296 }
4297});
4298
4299
4300// Create scrollLeft and scrollTop methods
4301jQuery.each( ['Left', 'Top'], function(i, name) {
4302 var method = 'scroll' + name;
4303
4304 jQuery.fn[ method ] = function(val) {
4305 if (!this[0]) return null;
4306
4307 return val !== undefined ?
4308
4309 // Set the scroll offset
4310 this.each(function() {
4311 this == window || this == document ?
4312 window.scrollTo(
4313 !i ? val : jQuery(window).scrollLeft(),
4314 i ? val : jQuery(window).scrollTop()
4315 ) :
4316 this[ method ] = val;
4317 }) :
4318
4319 // Return the scroll offset
4320 this[0] == window || this[0] == document ?
4321 self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
4322 jQuery.boxModel && document.documentElement[ method ] ||
4323 document.body[ method ] :
4324 this[0][ method ];
4325 };
4326});
4327// Create innerHeight, innerWidth, outerHeight and outerWidth methods
4328jQuery.each([ "Height", "Width" ], function(i, name){
4329
4330 var tl = i ? "Left" : "Top", // top or left
4331 br = i ? "Right" : "Bottom", // bottom or right
4332 lower = name.toLowerCase();
4333
4334 // innerHeight and innerWidth
4335 jQuery.fn["inner" + name] = function(){
4336 return this[0] ?
4337 jQuery.css( this[0], lower, false, "padding" ) :
4338 null;
4339 };
4340
4341 // outerHeight and outerWidth
4342 jQuery.fn["outer" + name] = function(margin) {
4343 return this[0] ?
4344 jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :
4345 null;
4346 };
4347
4348 var type = name.toLowerCase();
4349
4350 jQuery.fn[ type ] = function( size ) {
4351 // Get window width or height
4352 return this[0] == window ?
4353 // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
4354 document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
4355 document.body[ "client" + name ] :
4356
4357 // Get document width or height
4358 this[0] == document ?
4359 // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
4360 Math.max(
4361 document.documentElement["client" + name],
4362 document.body["scroll" + name], document.documentElement["scroll" + name],
4363 document.body["offset" + name], document.documentElement["offset" + name]
4364 ) :
4365
4366 // Get or set width or height on the element
4367 size === undefined ?
4368 // Get width or height on the element
4369 (this.length ? jQuery.css( this[0], type ) : null) :
4370
4371 // Set the width or height on the element (default to pixels if value is unitless)
4372 this.css( type, typeof size === "string" ? size : size + "px" );
4373 };
4374
4375});
4376})();
diff --git a/static/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png b/static/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 0000000..5b5dab2
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png b/static/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100644
index 0000000..ac8b229
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png b/static/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 0000000..ad3d634
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/static/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000..42ccba2
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.png b/static/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 0000000..5a46b47
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png b/static/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 0000000..86c2baa
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png b/static/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000..4443fdc
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/static/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 0000000..7c9fa6c
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-icons_222222_256x240.png b/static/development-bundle/themes/base/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000..ee039dc
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png b/static/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000..45e8928
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-icons_454545_256x240.png b/static/development-bundle/themes/base/images/ui-icons_454545_256x240.png
new file mode 100644
index 0000000..7ec70d1
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-icons_888888_256x240.png b/static/development-bundle/themes/base/images/ui-icons_888888_256x240.png
new file mode 100644
index 0000000..5ba708c
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png b/static/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000..7930a55
--- /dev/null
+++ b/static/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/base/ui.accordion.css b/static/development-bundle/themes/base/ui.accordion.css
new file mode 100644
index 0000000..ee1b1b6
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.accordion.css
@@ -0,0 +1,9 @@
1/* Accordion
2----------------------------------*/
3.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
4.ui-accordion .ui-accordion-li-fix { display: inline; }
5.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
6.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
7.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
8.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
9.ui-accordion .ui-accordion-content-active { display: block; } \ No newline at end of file
diff --git a/static/development-bundle/themes/base/ui.all.css b/static/development-bundle/themes/base/ui.all.css
new file mode 100644
index 0000000..543e4c3
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.all.css
@@ -0,0 +1,2 @@
1@import "ui.base.css";
2@import "ui.theme.css";
diff --git a/static/development-bundle/themes/base/ui.base.css b/static/development-bundle/themes/base/ui.base.css
new file mode 100644
index 0000000..d716095
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.base.css
@@ -0,0 +1,8 @@
1@import url("ui.core.css");
2@import url("ui.resizable.css");
3@import url("ui.accordion.css");
4@import url("ui.dialog.css");
5@import url("ui.slider.css");
6@import url("ui.tabs.css");
7@import url("ui.datepicker.css");
8@import url("ui.progressbar.css"); \ No newline at end of file
diff --git a/static/development-bundle/themes/base/ui.core.css b/static/development-bundle/themes/base/ui.core.css
new file mode 100644
index 0000000..c2f18f2
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.core.css
@@ -0,0 +1,37 @@
1/*
2* jQuery UI CSS Framework
3* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
5*/
6
7/* Layout helpers
8----------------------------------*/
9.ui-helper-hidden { display: none; }
10.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
11.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
12.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
13.ui-helper-clearfix { display: inline-block; }
14/* required comment for clearfix to work in Opera \*/
15* html .ui-helper-clearfix { height:1%; }
16.ui-helper-clearfix { display:block; }
17/* end clearfix */
18.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
20
21/* Interaction Cues
22----------------------------------*/
23.ui-state-disabled { cursor: default !important; }
24
25
26/* Icons
27----------------------------------*/
28
29/* states and images */
30.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
31
32
33/* Misc visuals
34----------------------------------*/
35
36/* Overlays */
37.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } \ No newline at end of file
diff --git a/static/development-bundle/themes/base/ui.datepicker.css b/static/development-bundle/themes/base/ui.datepicker.css
new file mode 100644
index 0000000..567f8c9
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.datepicker.css
@@ -0,0 +1,62 @@
1/* Datepicker
2----------------------------------*/
3.ui-datepicker { width: 17em; padding: .2em .2em 0; }
4.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
5.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
6.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
7.ui-datepicker .ui-datepicker-prev { left:2px; }
8.ui-datepicker .ui-datepicker-next { right:2px; }
9.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
10.ui-datepicker .ui-datepicker-next-hover { right:1px; }
11.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
12.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
13.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
14.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
15.ui-datepicker select.ui-datepicker-month,
16.ui-datepicker select.ui-datepicker-year { width: 49%;}
17.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
18.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
19.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
20.ui-datepicker td { border: 0; padding: 1px; }
21.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
22.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
23.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
24.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
25
26/* with multiple calendars */
27.ui-datepicker.ui-datepicker-multi { width:auto; }
28.ui-datepicker-multi .ui-datepicker-group { float:left; }
29.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
30.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
31.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
32.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
33.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
34.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
35.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
36.ui-datepicker-row-break { clear:both; width:100%; }
37
38/* RTL support */
39.ui-datepicker-rtl { direction: rtl; }
40.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
41.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
42.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
43.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
44.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
45.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
46.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
47.ui-datepicker-rtl .ui-datepicker-group { float:right; }
48.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
49.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
50
51/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
52.ui-datepicker-cover {
53 display: none; /*sorry for IE5*/
54 display/**/: block; /*sorry for IE5*/
55 position: absolute; /*must have*/
56 z-index: -1; /*must have*/
57 filter: mask(); /*must have*/
58 top: -4px; /*must have*/
59 left: -4px; /*must have*/
60 width: 200px; /*must have*/
61 height: 200px; /*must have*/
62} \ No newline at end of file
diff --git a/static/development-bundle/themes/base/ui.dialog.css b/static/development-bundle/themes/base/ui.dialog.css
new file mode 100644
index 0000000..2997595
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.dialog.css
@@ -0,0 +1,13 @@
1/* Dialog
2----------------------------------*/
3.ui-dialog { position: relative; padding: .2em; width: 300px; }
4.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
5.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
6.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
7.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
8.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
9.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
10.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
11.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
12.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
13.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/static/development-bundle/themes/base/ui.progressbar.css b/static/development-bundle/themes/base/ui.progressbar.css
new file mode 100644
index 0000000..bc0939e
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.progressbar.css
@@ -0,0 +1,4 @@
1/* Progressbar
2----------------------------------*/
3.ui-progressbar { height:2em; text-align: left; }
4.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file
diff --git a/static/development-bundle/themes/base/ui.resizable.css b/static/development-bundle/themes/base/ui.resizable.css
new file mode 100644
index 0000000..44efeb2
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.resizable.css
@@ -0,0 +1,13 @@
1/* Resizable
2----------------------------------*/
3.ui-resizable { position: relative;}
4.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
5.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
6.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
7.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
8.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
9.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
10.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
11.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
12.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
13.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} \ No newline at end of file
diff --git a/static/development-bundle/themes/base/ui.slider.css b/static/development-bundle/themes/base/ui.slider.css
new file mode 100644
index 0000000..4c56218
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.slider.css
@@ -0,0 +1,17 @@
1/* Slider
2----------------------------------*/
3.ui-slider { position: relative; text-align: left; }
4.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
5.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
6
7.ui-slider-horizontal { height: .8em; }
8.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
9.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
10.ui-slider-horizontal .ui-slider-range-min { left: 0; }
11.ui-slider-horizontal .ui-slider-range-max { right: 0; }
12
13.ui-slider-vertical { width: .8em; height: 100px; }
14.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
15.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
16.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
17.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file
diff --git a/static/development-bundle/themes/base/ui.tabs.css b/static/development-bundle/themes/base/ui.tabs.css
new file mode 100644
index 0000000..3ca6b9a
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.tabs.css
@@ -0,0 +1,11 @@
1/* Tabs
2----------------------------------*/
3.ui-tabs { padding: .2em; zoom: 1; }
4.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
5.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
6.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
7.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
8.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
9.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
10.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
11.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/static/development-bundle/themes/base/ui.theme.css b/static/development-bundle/themes/base/ui.theme.css
new file mode 100644
index 0000000..73ed788
--- /dev/null
+++ b/static/development-bundle/themes/base/ui.theme.css
@@ -0,0 +1,245 @@
1
2
3/*
4* jQuery UI CSS Framework
5* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
6* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
7* To view and modify this theme, visit http://jqueryui.com/themeroller/
8*/
9
10
11/* Component containers
12----------------------------------*/
13.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
14.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
15.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
16.ui-widget-content a { color: #222222/*{fcContent}*/; }
17.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
18.ui-widget-header a { color: #222222/*{fcHeader}*/; }
19
20/* Interaction states
21----------------------------------*/
22.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; outline: none; }
23.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; outline: none; }
24.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; outline: none; }
25.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; outline: none; }
26.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; outline: none; }
27.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; outline: none; text-decoration: none; }
28
29/* Interaction Cues
30----------------------------------*/
31.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
32.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
33.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
34.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
35.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
36.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
37.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
38.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
39
40/* Icons
41----------------------------------*/
42
43/* states and images */
44.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
45.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
46.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
47.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
48.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
49.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
50.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
51.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
52
53/* positioning */
54.ui-icon-carat-1-n { background-position: 0 0; }
55.ui-icon-carat-1-ne { background-position: -16px 0; }
56.ui-icon-carat-1-e { background-position: -32px 0; }
57.ui-icon-carat-1-se { background-position: -48px 0; }
58.ui-icon-carat-1-s { background-position: -64px 0; }
59.ui-icon-carat-1-sw { background-position: -80px 0; }
60.ui-icon-carat-1-w { background-position: -96px 0; }
61.ui-icon-carat-1-nw { background-position: -112px 0; }
62.ui-icon-carat-2-n-s { background-position: -128px 0; }
63.ui-icon-carat-2-e-w { background-position: -144px 0; }
64.ui-icon-triangle-1-n { background-position: 0 -16px; }
65.ui-icon-triangle-1-ne { background-position: -16px -16px; }
66.ui-icon-triangle-1-e { background-position: -32px -16px; }
67.ui-icon-triangle-1-se { background-position: -48px -16px; }
68.ui-icon-triangle-1-s { background-position: -64px -16px; }
69.ui-icon-triangle-1-sw { background-position: -80px -16px; }
70.ui-icon-triangle-1-w { background-position: -96px -16px; }
71.ui-icon-triangle-1-nw { background-position: -112px -16px; }
72.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
73.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
74.ui-icon-arrow-1-n { background-position: 0 -32px; }
75.ui-icon-arrow-1-ne { background-position: -16px -32px; }
76.ui-icon-arrow-1-e { background-position: -32px -32px; }
77.ui-icon-arrow-1-se { background-position: -48px -32px; }
78.ui-icon-arrow-1-s { background-position: -64px -32px; }
79.ui-icon-arrow-1-sw { background-position: -80px -32px; }
80.ui-icon-arrow-1-w { background-position: -96px -32px; }
81.ui-icon-arrow-1-nw { background-position: -112px -32px; }
82.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
83.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
84.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
85.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
86.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
87.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
88.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
89.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
90.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
91.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
92.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
93.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
94.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
95.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
96.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
97.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
98.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
99.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
100.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
101.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
102.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
103.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
104.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
105.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
106.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
107.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
108.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
109.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
110.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
111.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
112.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
113.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
114.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
115.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
116.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
117.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
118.ui-icon-arrow-4 { background-position: 0 -80px; }
119.ui-icon-arrow-4-diag { background-position: -16px -80px; }
120.ui-icon-extlink { background-position: -32px -80px; }
121.ui-icon-newwin { background-position: -48px -80px; }
122.ui-icon-refresh { background-position: -64px -80px; }
123.ui-icon-shuffle { background-position: -80px -80px; }
124.ui-icon-transfer-e-w { background-position: -96px -80px; }
125.ui-icon-transferthick-e-w { background-position: -112px -80px; }
126.ui-icon-folder-collapsed { background-position: 0 -96px; }
127.ui-icon-folder-open { background-position: -16px -96px; }
128.ui-icon-document { background-position: -32px -96px; }
129.ui-icon-document-b { background-position: -48px -96px; }
130.ui-icon-note { background-position: -64px -96px; }
131.ui-icon-mail-closed { background-position: -80px -96px; }
132.ui-icon-mail-open { background-position: -96px -96px; }
133.ui-icon-suitcase { background-position: -112px -96px; }
134.ui-icon-comment { background-position: -128px -96px; }
135.ui-icon-person { background-position: -144px -96px; }
136.ui-icon-print { background-position: -160px -96px; }
137.ui-icon-trash { background-position: -176px -96px; }
138.ui-icon-locked { background-position: -192px -96px; }
139.ui-icon-unlocked { background-position: -208px -96px; }
140.ui-icon-bookmark { background-position: -224px -96px; }
141.ui-icon-tag { background-position: -240px -96px; }
142.ui-icon-home { background-position: 0 -112px; }
143.ui-icon-flag { background-position: -16px -112px; }
144.ui-icon-calendar { background-position: -32px -112px; }
145.ui-icon-cart { background-position: -48px -112px; }
146.ui-icon-pencil { background-position: -64px -112px; }
147.ui-icon-clock { background-position: -80px -112px; }
148.ui-icon-disk { background-position: -96px -112px; }
149.ui-icon-calculator { background-position: -112px -112px; }
150.ui-icon-zoomin { background-position: -128px -112px; }
151.ui-icon-zoomout { background-position: -144px -112px; }
152.ui-icon-search { background-position: -160px -112px; }
153.ui-icon-wrench { background-position: -176px -112px; }
154.ui-icon-gear { background-position: -192px -112px; }
155.ui-icon-heart { background-position: -208px -112px; }
156.ui-icon-star { background-position: -224px -112px; }
157.ui-icon-link { background-position: -240px -112px; }
158.ui-icon-cancel { background-position: 0 -128px; }
159.ui-icon-plus { background-position: -16px -128px; }
160.ui-icon-plusthick { background-position: -32px -128px; }
161.ui-icon-minus { background-position: -48px -128px; }
162.ui-icon-minusthick { background-position: -64px -128px; }
163.ui-icon-close { background-position: -80px -128px; }
164.ui-icon-closethick { background-position: -96px -128px; }
165.ui-icon-key { background-position: -112px -128px; }
166.ui-icon-lightbulb { background-position: -128px -128px; }
167.ui-icon-scissors { background-position: -144px -128px; }
168.ui-icon-clipboard { background-position: -160px -128px; }
169.ui-icon-copy { background-position: -176px -128px; }
170.ui-icon-contact { background-position: -192px -128px; }
171.ui-icon-image { background-position: -208px -128px; }
172.ui-icon-video { background-position: -224px -128px; }
173.ui-icon-script { background-position: -240px -128px; }
174.ui-icon-alert { background-position: 0 -144px; }
175.ui-icon-info { background-position: -16px -144px; }
176.ui-icon-notice { background-position: -32px -144px; }
177.ui-icon-help { background-position: -48px -144px; }
178.ui-icon-check { background-position: -64px -144px; }
179.ui-icon-bullet { background-position: -80px -144px; }
180.ui-icon-radio-off { background-position: -96px -144px; }
181.ui-icon-radio-on { background-position: -112px -144px; }
182.ui-icon-pin-w { background-position: -128px -144px; }
183.ui-icon-pin-s { background-position: -144px -144px; }
184.ui-icon-play { background-position: 0 -160px; }
185.ui-icon-pause { background-position: -16px -160px; }
186.ui-icon-seek-next { background-position: -32px -160px; }
187.ui-icon-seek-prev { background-position: -48px -160px; }
188.ui-icon-seek-end { background-position: -64px -160px; }
189.ui-icon-seek-first { background-position: -80px -160px; }
190.ui-icon-stop { background-position: -96px -160px; }
191.ui-icon-eject { background-position: -112px -160px; }
192.ui-icon-volume-off { background-position: -128px -160px; }
193.ui-icon-volume-on { background-position: -144px -160px; }
194.ui-icon-power { background-position: 0 -176px; }
195.ui-icon-signal-diag { background-position: -16px -176px; }
196.ui-icon-signal { background-position: -32px -176px; }
197.ui-icon-battery-0 { background-position: -48px -176px; }
198.ui-icon-battery-1 { background-position: -64px -176px; }
199.ui-icon-battery-2 { background-position: -80px -176px; }
200.ui-icon-battery-3 { background-position: -96px -176px; }
201.ui-icon-circle-plus { background-position: 0 -192px; }
202.ui-icon-circle-minus { background-position: -16px -192px; }
203.ui-icon-circle-close { background-position: -32px -192px; }
204.ui-icon-circle-triangle-e { background-position: -48px -192px; }
205.ui-icon-circle-triangle-s { background-position: -64px -192px; }
206.ui-icon-circle-triangle-w { background-position: -80px -192px; }
207.ui-icon-circle-triangle-n { background-position: -96px -192px; }
208.ui-icon-circle-arrow-e { background-position: -112px -192px; }
209.ui-icon-circle-arrow-s { background-position: -128px -192px; }
210.ui-icon-circle-arrow-w { background-position: -144px -192px; }
211.ui-icon-circle-arrow-n { background-position: -160px -192px; }
212.ui-icon-circle-zoomin { background-position: -176px -192px; }
213.ui-icon-circle-zoomout { background-position: -192px -192px; }
214.ui-icon-circle-check { background-position: -208px -192px; }
215.ui-icon-circlesmall-plus { background-position: 0 -208px; }
216.ui-icon-circlesmall-minus { background-position: -16px -208px; }
217.ui-icon-circlesmall-close { background-position: -32px -208px; }
218.ui-icon-squaresmall-plus { background-position: -48px -208px; }
219.ui-icon-squaresmall-minus { background-position: -64px -208px; }
220.ui-icon-squaresmall-close { background-position: -80px -208px; }
221.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
222.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
223.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
224.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
225.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
226.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
227
228
229/* Misc visuals
230----------------------------------*/
231
232/* Corner radius */
233.ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; }
234.ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; }
235.ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; }
236.ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; }
237.ui-corner-top { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; }
238.ui-corner-bottom { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; }
239.ui-corner-right { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; }
240.ui-corner-left { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; }
241.ui-corner-all { -moz-border-radius: 4px/*{cornerRadius}*/; -webkit-border-radius: 4px/*{cornerRadius}*/; }
242
243/* Overlays */
244.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
245.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 0000000..954e22d
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 0000000..64ece57
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 0000000..abdc010
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 0000000..9b383f4
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 0000000..a23baad
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000..42ccba2
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 0000000..1b1972b
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 0000000..f127367
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 0000000..359397a
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-icons_222222_256x240.png b/static/development-bundle/themes/ui-lightness/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000..ee039dc
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-icons_228ef1_256x240.png b/static/development-bundle/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 0000000..6a05ba5
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png b/static/development-bundle/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 0000000..35bb8ef
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png b/static/development-bundle/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 0000000..baebb63
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/images/ui-icons_ffffff_256x240.png b/static/development-bundle/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..bef5178
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/static/development-bundle/themes/ui-lightness/jquery-ui-1.7.2.custom.css b/static/development-bundle/themes/ui-lightness/jquery-ui-1.7.2.custom.css
new file mode 100644
index 0000000..9d7aa08
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/jquery-ui-1.7.2.custom.css
@@ -0,0 +1,406 @@
1/*
2* jQuery UI CSS Framework
3* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
5*/
6
7/* Layout helpers
8----------------------------------*/
9.ui-helper-hidden { display: none; }
10.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
11.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
12.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
13.ui-helper-clearfix { display: inline-block; }
14/* required comment for clearfix to work in Opera \*/
15* html .ui-helper-clearfix { height:1%; }
16.ui-helper-clearfix { display:block; }
17/* end clearfix */
18.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
20
21/* Interaction Cues
22----------------------------------*/
23.ui-state-disabled { cursor: default !important; }
24
25
26/* Icons
27----------------------------------*/
28
29/* states and images */
30.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
31
32
33/* Misc visuals
34----------------------------------*/
35
36/* Overlays */
37.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
38
39
40
41/*
42* jQuery UI CSS Framework
43* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
44* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
45* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
46*/
47
48
49/* Component containers
50----------------------------------*/
51.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
52.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
53.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
54.ui-widget-content a { color: #333333; }
55.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
56.ui-widget-header a { color: #ffffff; }
57
58/* Interaction states
59----------------------------------*/
60.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
61.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
62.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
63.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
64.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
65.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
66
67/* Interaction Cues
68----------------------------------*/
69.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
70.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
71.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
72.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
73.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
74.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
75.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
76.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
77
78/* Icons
79----------------------------------*/
80
81/* states and images */
82.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
83.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
84.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
85.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
86.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
87.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
88.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
89.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
90
91/* positioning */
92.ui-icon-carat-1-n { background-position: 0 0; }
93.ui-icon-carat-1-ne { background-position: -16px 0; }
94.ui-icon-carat-1-e { background-position: -32px 0; }
95.ui-icon-carat-1-se { background-position: -48px 0; }
96.ui-icon-carat-1-s { background-position: -64px 0; }
97.ui-icon-carat-1-sw { background-position: -80px 0; }
98.ui-icon-carat-1-w { background-position: -96px 0; }
99.ui-icon-carat-1-nw { background-position: -112px 0; }
100.ui-icon-carat-2-n-s { background-position: -128px 0; }
101.ui-icon-carat-2-e-w { background-position: -144px 0; }
102.ui-icon-triangle-1-n { background-position: 0 -16px; }
103.ui-icon-triangle-1-ne { background-position: -16px -16px; }
104.ui-icon-triangle-1-e { background-position: -32px -16px; }
105.ui-icon-triangle-1-se { background-position: -48px -16px; }
106.ui-icon-triangle-1-s { background-position: -64px -16px; }
107.ui-icon-triangle-1-sw { background-position: -80px -16px; }
108.ui-icon-triangle-1-w { background-position: -96px -16px; }
109.ui-icon-triangle-1-nw { background-position: -112px -16px; }
110.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
111.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
112.ui-icon-arrow-1-n { background-position: 0 -32px; }
113.ui-icon-arrow-1-ne { background-position: -16px -32px; }
114.ui-icon-arrow-1-e { background-position: -32px -32px; }
115.ui-icon-arrow-1-se { background-position: -48px -32px; }
116.ui-icon-arrow-1-s { background-position: -64px -32px; }
117.ui-icon-arrow-1-sw { background-position: -80px -32px; }
118.ui-icon-arrow-1-w { background-position: -96px -32px; }
119.ui-icon-arrow-1-nw { background-position: -112px -32px; }
120.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
121.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
122.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
123.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
124.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
125.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
126.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
127.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
128.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
129.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
130.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
131.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
132.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
133.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
134.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
135.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
136.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
137.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
138.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
139.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
140.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
141.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
142.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
143.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
144.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
145.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
146.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
147.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
148.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
149.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
150.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
151.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
152.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
153.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
154.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
155.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
156.ui-icon-arrow-4 { background-position: 0 -80px; }
157.ui-icon-arrow-4-diag { background-position: -16px -80px; }
158.ui-icon-extlink { background-position: -32px -80px; }
159.ui-icon-newwin { background-position: -48px -80px; }
160.ui-icon-refresh { background-position: -64px -80px; }
161.ui-icon-shuffle { background-position: -80px -80px; }
162.ui-icon-transfer-e-w { background-position: -96px -80px; }
163.ui-icon-transferthick-e-w { background-position: -112px -80px; }
164.ui-icon-folder-collapsed { background-position: 0 -96px; }
165.ui-icon-folder-open { background-position: -16px -96px; }
166.ui-icon-document { background-position: -32px -96px; }
167.ui-icon-document-b { background-position: -48px -96px; }
168.ui-icon-note { background-position: -64px -96px; }
169.ui-icon-mail-closed { background-position: -80px -96px; }
170.ui-icon-mail-open { background-position: -96px -96px; }
171.ui-icon-suitcase { background-position: -112px -96px; }
172.ui-icon-comment { background-position: -128px -96px; }
173.ui-icon-person { background-position: -144px -96px; }
174.ui-icon-print { background-position: -160px -96px; }
175.ui-icon-trash { background-position: -176px -96px; }
176.ui-icon-locked { background-position: -192px -96px; }
177.ui-icon-unlocked { background-position: -208px -96px; }
178.ui-icon-bookmark { background-position: -224px -96px; }
179.ui-icon-tag { background-position: -240px -96px; }
180.ui-icon-home { background-position: 0 -112px; }
181.ui-icon-flag { background-position: -16px -112px; }
182.ui-icon-calendar { background-position: -32px -112px; }
183.ui-icon-cart { background-position: -48px -112px; }
184.ui-icon-pencil { background-position: -64px -112px; }
185.ui-icon-clock { background-position: -80px -112px; }
186.ui-icon-disk { background-position: -96px -112px; }
187.ui-icon-calculator { background-position: -112px -112px; }
188.ui-icon-zoomin { background-position: -128px -112px; }
189.ui-icon-zoomout { background-position: -144px -112px; }
190.ui-icon-search { background-position: -160px -112px; }
191.ui-icon-wrench { background-position: -176px -112px; }
192.ui-icon-gear { background-position: -192px -112px; }
193.ui-icon-heart { background-position: -208px -112px; }
194.ui-icon-star { background-position: -224px -112px; }
195.ui-icon-link { background-position: -240px -112px; }
196.ui-icon-cancel { background-position: 0 -128px; }
197.ui-icon-plus { background-position: -16px -128px; }
198.ui-icon-plusthick { background-position: -32px -128px; }
199.ui-icon-minus { background-position: -48px -128px; }
200.ui-icon-minusthick { background-position: -64px -128px; }
201.ui-icon-close { background-position: -80px -128px; }
202.ui-icon-closethick { background-position: -96px -128px; }
203.ui-icon-key { background-position: -112px -128px; }
204.ui-icon-lightbulb { background-position: -128px -128px; }
205.ui-icon-scissors { background-position: -144px -128px; }
206.ui-icon-clipboard { background-position: -160px -128px; }
207.ui-icon-copy { background-position: -176px -128px; }
208.ui-icon-contact { background-position: -192px -128px; }
209.ui-icon-image { background-position: -208px -128px; }
210.ui-icon-video { background-position: -224px -128px; }
211.ui-icon-script { background-position: -240px -128px; }
212.ui-icon-alert { background-position: 0 -144px; }
213.ui-icon-info { background-position: -16px -144px; }
214.ui-icon-notice { background-position: -32px -144px; }
215.ui-icon-help { background-position: -48px -144px; }
216.ui-icon-check { background-position: -64px -144px; }
217.ui-icon-bullet { background-position: -80px -144px; }
218.ui-icon-radio-off { background-position: -96px -144px; }
219.ui-icon-radio-on { background-position: -112px -144px; }
220.ui-icon-pin-w { background-position: -128px -144px; }
221.ui-icon-pin-s { background-position: -144px -144px; }
222.ui-icon-play { background-position: 0 -160px; }
223.ui-icon-pause { background-position: -16px -160px; }
224.ui-icon-seek-next { background-position: -32px -160px; }
225.ui-icon-seek-prev { background-position: -48px -160px; }
226.ui-icon-seek-end { background-position: -64px -160px; }
227.ui-icon-seek-first { background-position: -80px -160px; }
228.ui-icon-stop { background-position: -96px -160px; }
229.ui-icon-eject { background-position: -112px -160px; }
230.ui-icon-volume-off { background-position: -128px -160px; }
231.ui-icon-volume-on { background-position: -144px -160px; }
232.ui-icon-power { background-position: 0 -176px; }
233.ui-icon-signal-diag { background-position: -16px -176px; }
234.ui-icon-signal { background-position: -32px -176px; }
235.ui-icon-battery-0 { background-position: -48px -176px; }
236.ui-icon-battery-1 { background-position: -64px -176px; }
237.ui-icon-battery-2 { background-position: -80px -176px; }
238.ui-icon-battery-3 { background-position: -96px -176px; }
239.ui-icon-circle-plus { background-position: 0 -192px; }
240.ui-icon-circle-minus { background-position: -16px -192px; }
241.ui-icon-circle-close { background-position: -32px -192px; }
242.ui-icon-circle-triangle-e { background-position: -48px -192px; }
243.ui-icon-circle-triangle-s { background-position: -64px -192px; }
244.ui-icon-circle-triangle-w { background-position: -80px -192px; }
245.ui-icon-circle-triangle-n { background-position: -96px -192px; }
246.ui-icon-circle-arrow-e { background-position: -112px -192px; }
247.ui-icon-circle-arrow-s { background-position: -128px -192px; }
248.ui-icon-circle-arrow-w { background-position: -144px -192px; }
249.ui-icon-circle-arrow-n { background-position: -160px -192px; }
250.ui-icon-circle-zoomin { background-position: -176px -192px; }
251.ui-icon-circle-zoomout { background-position: -192px -192px; }
252.ui-icon-circle-check { background-position: -208px -192px; }
253.ui-icon-circlesmall-plus { background-position: 0 -208px; }
254.ui-icon-circlesmall-minus { background-position: -16px -208px; }
255.ui-icon-circlesmall-close { background-position: -32px -208px; }
256.ui-icon-squaresmall-plus { background-position: -48px -208px; }
257.ui-icon-squaresmall-minus { background-position: -64px -208px; }
258.ui-icon-squaresmall-close { background-position: -80px -208px; }
259.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
260.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
261.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
262.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
263.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
264.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
265
266
267/* Misc visuals
268----------------------------------*/
269
270/* Corner radius */
271.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
272.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
273.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
274.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
275.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
276.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
277.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
278.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
279.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
280
281/* Overlays */
282.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
283.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
284----------------------------------*/
285.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
286.ui-accordion .ui-accordion-li-fix { display: inline; }
287.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
288.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
289.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
290.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
291.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
292----------------------------------*/
293.ui-datepicker { width: 17em; padding: .2em .2em 0; }
294.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
295.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
296.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
297.ui-datepicker .ui-datepicker-prev { left:2px; }
298.ui-datepicker .ui-datepicker-next { right:2px; }
299.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
300.ui-datepicker .ui-datepicker-next-hover { right:1px; }
301.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
302.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
303.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
304.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
305.ui-datepicker select.ui-datepicker-month,
306.ui-datepicker select.ui-datepicker-year { width: 49%;}
307.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
308.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
309.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
310.ui-datepicker td { border: 0; padding: 1px; }
311.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
312.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
313.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
314.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
315
316/* with multiple calendars */
317.ui-datepicker.ui-datepicker-multi { width:auto; }
318.ui-datepicker-multi .ui-datepicker-group { float:left; }
319.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
320.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
321.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
322.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
323.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
324.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
325.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
326.ui-datepicker-row-break { clear:both; width:100%; }
327
328/* RTL support */
329.ui-datepicker-rtl { direction: rtl; }
330.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
331.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
332.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
333.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
334.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
335.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
336.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
337.ui-datepicker-rtl .ui-datepicker-group { float:right; }
338.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
339.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
340
341/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
342.ui-datepicker-cover {
343 display: none; /*sorry for IE5*/
344 display/**/: block; /*sorry for IE5*/
345 position: absolute; /*must have*/
346 z-index: -1; /*must have*/
347 filter: mask(); /*must have*/
348 top: -4px; /*must have*/
349 left: -4px; /*must have*/
350 width: 200px; /*must have*/
351 height: 200px; /*must have*/
352}/* Dialog
353----------------------------------*/
354.ui-dialog { position: relative; padding: .2em; width: 300px; }
355.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
356.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
357.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
358.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
359.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
360.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
361.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
362.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
363.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
364.ui-draggable .ui-dialog-titlebar { cursor: move; }
365/* Progressbar
366----------------------------------*/
367.ui-progressbar { height:2em; text-align: left; }
368.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
369----------------------------------*/
370.ui-resizable { position: relative;}
371.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
372.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
373.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
374.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
375.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
376.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
377.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
378.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
379.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
380.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
381----------------------------------*/
382.ui-slider { position: relative; text-align: left; }
383.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
384.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
385
386.ui-slider-horizontal { height: .8em; }
387.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
388.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
389.ui-slider-horizontal .ui-slider-range-min { left: 0; }
390.ui-slider-horizontal .ui-slider-range-max { right: 0; }
391
392.ui-slider-vertical { width: .8em; height: 100px; }
393.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
394.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
395.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
396.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
397----------------------------------*/
398.ui-tabs { padding: .2em; zoom: 1; }
399.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
400.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
401.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
402.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
403.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
404.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
405.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
406.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/static/development-bundle/themes/ui-lightness/ui.accordion.css b/static/development-bundle/themes/ui-lightness/ui.accordion.css
new file mode 100644
index 0000000..ee1b1b6
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.accordion.css
@@ -0,0 +1,9 @@
1/* Accordion
2----------------------------------*/
3.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
4.ui-accordion .ui-accordion-li-fix { display: inline; }
5.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
6.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
7.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
8.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
9.ui-accordion .ui-accordion-content-active { display: block; } \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/ui.all.css b/static/development-bundle/themes/ui-lightness/ui.all.css
new file mode 100644
index 0000000..543e4c3
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.all.css
@@ -0,0 +1,2 @@
1@import "ui.base.css";
2@import "ui.theme.css";
diff --git a/static/development-bundle/themes/ui-lightness/ui.base.css b/static/development-bundle/themes/ui-lightness/ui.base.css
new file mode 100644
index 0000000..d716095
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.base.css
@@ -0,0 +1,8 @@
1@import url("ui.core.css");
2@import url("ui.resizable.css");
3@import url("ui.accordion.css");
4@import url("ui.dialog.css");
5@import url("ui.slider.css");
6@import url("ui.tabs.css");
7@import url("ui.datepicker.css");
8@import url("ui.progressbar.css"); \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/ui.core.css b/static/development-bundle/themes/ui-lightness/ui.core.css
new file mode 100644
index 0000000..c2f18f2
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.core.css
@@ -0,0 +1,37 @@
1/*
2* jQuery UI CSS Framework
3* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
5*/
6
7/* Layout helpers
8----------------------------------*/
9.ui-helper-hidden { display: none; }
10.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
11.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
12.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
13.ui-helper-clearfix { display: inline-block; }
14/* required comment for clearfix to work in Opera \*/
15* html .ui-helper-clearfix { height:1%; }
16.ui-helper-clearfix { display:block; }
17/* end clearfix */
18.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
20
21/* Interaction Cues
22----------------------------------*/
23.ui-state-disabled { cursor: default !important; }
24
25
26/* Icons
27----------------------------------*/
28
29/* states and images */
30.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
31
32
33/* Misc visuals
34----------------------------------*/
35
36/* Overlays */
37.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/ui.datepicker.css b/static/development-bundle/themes/ui-lightness/ui.datepicker.css
new file mode 100644
index 0000000..567f8c9
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.datepicker.css
@@ -0,0 +1,62 @@
1/* Datepicker
2----------------------------------*/
3.ui-datepicker { width: 17em; padding: .2em .2em 0; }
4.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
5.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
6.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
7.ui-datepicker .ui-datepicker-prev { left:2px; }
8.ui-datepicker .ui-datepicker-next { right:2px; }
9.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
10.ui-datepicker .ui-datepicker-next-hover { right:1px; }
11.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
12.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
13.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
14.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
15.ui-datepicker select.ui-datepicker-month,
16.ui-datepicker select.ui-datepicker-year { width: 49%;}
17.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
18.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
19.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
20.ui-datepicker td { border: 0; padding: 1px; }
21.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
22.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
23.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
24.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
25
26/* with multiple calendars */
27.ui-datepicker.ui-datepicker-multi { width:auto; }
28.ui-datepicker-multi .ui-datepicker-group { float:left; }
29.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
30.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
31.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
32.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
33.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
34.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
35.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
36.ui-datepicker-row-break { clear:both; width:100%; }
37
38/* RTL support */
39.ui-datepicker-rtl { direction: rtl; }
40.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
41.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
42.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
43.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
44.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
45.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
46.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
47.ui-datepicker-rtl .ui-datepicker-group { float:right; }
48.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
49.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
50
51/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
52.ui-datepicker-cover {
53 display: none; /*sorry for IE5*/
54 display/**/: block; /*sorry for IE5*/
55 position: absolute; /*must have*/
56 z-index: -1; /*must have*/
57 filter: mask(); /*must have*/
58 top: -4px; /*must have*/
59 left: -4px; /*must have*/
60 width: 200px; /*must have*/
61 height: 200px; /*must have*/
62} \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/ui.dialog.css b/static/development-bundle/themes/ui-lightness/ui.dialog.css
new file mode 100644
index 0000000..2997595
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.dialog.css
@@ -0,0 +1,13 @@
1/* Dialog
2----------------------------------*/
3.ui-dialog { position: relative; padding: .2em; width: 300px; }
4.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
5.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
6.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
7.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
8.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
9.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
10.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
11.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
12.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
13.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/static/development-bundle/themes/ui-lightness/ui.progressbar.css b/static/development-bundle/themes/ui-lightness/ui.progressbar.css
new file mode 100644
index 0000000..bc0939e
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.progressbar.css
@@ -0,0 +1,4 @@
1/* Progressbar
2----------------------------------*/
3.ui-progressbar { height:2em; text-align: left; }
4.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/ui.resizable.css b/static/development-bundle/themes/ui-lightness/ui.resizable.css
new file mode 100644
index 0000000..44efeb2
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.resizable.css
@@ -0,0 +1,13 @@
1/* Resizable
2----------------------------------*/
3.ui-resizable { position: relative;}
4.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
5.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
6.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
7.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
8.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
9.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
10.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
11.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
12.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
13.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/ui.slider.css b/static/development-bundle/themes/ui-lightness/ui.slider.css
new file mode 100644
index 0000000..4c56218
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.slider.css
@@ -0,0 +1,17 @@
1/* Slider
2----------------------------------*/
3.ui-slider { position: relative; text-align: left; }
4.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
5.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
6
7.ui-slider-horizontal { height: .8em; }
8.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
9.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
10.ui-slider-horizontal .ui-slider-range-min { left: 0; }
11.ui-slider-horizontal .ui-slider-range-max { right: 0; }
12
13.ui-slider-vertical { width: .8em; height: 100px; }
14.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
15.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
16.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
17.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file
diff --git a/static/development-bundle/themes/ui-lightness/ui.tabs.css b/static/development-bundle/themes/ui-lightness/ui.tabs.css
new file mode 100644
index 0000000..3ca6b9a
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.tabs.css
@@ -0,0 +1,11 @@
1/* Tabs
2----------------------------------*/
3.ui-tabs { padding: .2em; zoom: 1; }
4.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
5.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
6.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
7.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
8.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
9.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
10.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
11.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/static/development-bundle/themes/ui-lightness/ui.theme.css b/static/development-bundle/themes/ui-lightness/ui.theme.css
new file mode 100644
index 0000000..7dfd141
--- /dev/null
+++ b/static/development-bundle/themes/ui-lightness/ui.theme.css
@@ -0,0 +1,247 @@
1
2
3
4
5/*
6* jQuery UI CSS Framework
7* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
9* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
10*/
11
12
13/* Component containers
14----------------------------------*/
15.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
16.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
17.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
18.ui-widget-content a { color: #333333; }
19.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
20.ui-widget-header a { color: #ffffff; }
21
22/* Interaction states
23----------------------------------*/
24.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
25.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
26.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
27.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
28.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
29.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
30
31/* Interaction Cues
32----------------------------------*/
33.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
34.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
35.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
36.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
37.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
38.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
39.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
40.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
41
42/* Icons
43----------------------------------*/
44
45/* states and images */
46.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
47.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
48.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
49.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
50.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
51.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
52.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
53.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
54
55/* positioning */
56.ui-icon-carat-1-n { background-position: 0 0; }
57.ui-icon-carat-1-ne { background-position: -16px 0; }
58.ui-icon-carat-1-e { background-position: -32px 0; }
59.ui-icon-carat-1-se { background-position: -48px 0; }
60.ui-icon-carat-1-s { background-position: -64px 0; }
61.ui-icon-carat-1-sw { background-position: -80px 0; }
62.ui-icon-carat-1-w { background-position: -96px 0; }
63.ui-icon-carat-1-nw { background-position: -112px 0; }
64.ui-icon-carat-2-n-s { background-position: -128px 0; }
65.ui-icon-carat-2-e-w { background-position: -144px 0; }
66.ui-icon-triangle-1-n { background-position: 0 -16px; }
67.ui-icon-triangle-1-ne { background-position: -16px -16px; }
68.ui-icon-triangle-1-e { background-position: -32px -16px; }
69.ui-icon-triangle-1-se { background-position: -48px -16px; }
70.ui-icon-triangle-1-s { background-position: -64px -16px; }
71.ui-icon-triangle-1-sw { background-position: -80px -16px; }
72.ui-icon-triangle-1-w { background-position: -96px -16px; }
73.ui-icon-triangle-1-nw { background-position: -112px -16px; }
74.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
75.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
76.ui-icon-arrow-1-n { background-position: 0 -32px; }
77.ui-icon-arrow-1-ne { background-position: -16px -32px; }
78.ui-icon-arrow-1-e { background-position: -32px -32px; }
79.ui-icon-arrow-1-se { background-position: -48px -32px; }
80.ui-icon-arrow-1-s { background-position: -64px -32px; }
81.ui-icon-arrow-1-sw { background-position: -80px -32px; }
82.ui-icon-arrow-1-w { background-position: -96px -32px; }
83.ui-icon-arrow-1-nw { background-position: -112px -32px; }
84.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
85.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
86.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
87.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
88.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
89.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
90.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
91.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
92.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
93.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
94.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
95.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
96.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
97.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
98.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
99.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
100.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
101.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
102.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
103.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
104.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
105.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
106.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
107.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
108.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
109.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
110.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
111.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
112.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
113.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
114.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
115.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
116.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
117.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
118.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
119.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
120.ui-icon-arrow-4 { background-position: 0 -80px; }
121.ui-icon-arrow-4-diag { background-position: -16px -80px; }
122.ui-icon-extlink { background-position: -32px -80px; }
123.ui-icon-newwin { background-position: -48px -80px; }
124.ui-icon-refresh { background-position: -64px -80px; }
125.ui-icon-shuffle { background-position: -80px -80px; }
126.ui-icon-transfer-e-w { background-position: -96px -80px; }
127.ui-icon-transferthick-e-w { background-position: -112px -80px; }
128.ui-icon-folder-collapsed { background-position: 0 -96px; }
129.ui-icon-folder-open { background-position: -16px -96px; }
130.ui-icon-document { background-position: -32px -96px; }
131.ui-icon-document-b { background-position: -48px -96px; }
132.ui-icon-note { background-position: -64px -96px; }
133.ui-icon-mail-closed { background-position: -80px -96px; }
134.ui-icon-mail-open { background-position: -96px -96px; }
135.ui-icon-suitcase { background-position: -112px -96px; }
136.ui-icon-comment { background-position: -128px -96px; }
137.ui-icon-person { background-position: -144px -96px; }
138.ui-icon-print { background-position: -160px -96px; }
139.ui-icon-trash { background-position: -176px -96px; }
140.ui-icon-locked { background-position: -192px -96px; }
141.ui-icon-unlocked { background-position: -208px -96px; }
142.ui-icon-bookmark { background-position: -224px -96px; }
143.ui-icon-tag { background-position: -240px -96px; }
144.ui-icon-home { background-position: 0 -112px; }
145.ui-icon-flag { background-position: -16px -112px; }
146.ui-icon-calendar { background-position: -32px -112px; }
147.ui-icon-cart { background-position: -48px -112px; }
148.ui-icon-pencil { background-position: -64px -112px; }
149.ui-icon-clock { background-position: -80px -112px; }
150.ui-icon-disk { background-position: -96px -112px; }
151.ui-icon-calculator { background-position: -112px -112px; }
152.ui-icon-zoomin { background-position: -128px -112px; }
153.ui-icon-zoomout { background-position: -144px -112px; }
154.ui-icon-search { background-position: -160px -112px; }
155.ui-icon-wrench { background-position: -176px -112px; }
156.ui-icon-gear { background-position: -192px -112px; }
157.ui-icon-heart { background-position: -208px -112px; }
158.ui-icon-star { background-position: -224px -112px; }
159.ui-icon-link { background-position: -240px -112px; }
160.ui-icon-cancel { background-position: 0 -128px; }
161.ui-icon-plus { background-position: -16px -128px; }
162.ui-icon-plusthick { background-position: -32px -128px; }
163.ui-icon-minus { background-position: -48px -128px; }
164.ui-icon-minusthick { background-position: -64px -128px; }
165.ui-icon-close { background-position: -80px -128px; }
166.ui-icon-closethick { background-position: -96px -128px; }
167.ui-icon-key { background-position: -112px -128px; }
168.ui-icon-lightbulb { background-position: -128px -128px; }
169.ui-icon-scissors { background-position: -144px -128px; }
170.ui-icon-clipboard { background-position: -160px -128px; }
171.ui-icon-copy { background-position: -176px -128px; }
172.ui-icon-contact { background-position: -192px -128px; }
173.ui-icon-image { background-position: -208px -128px; }
174.ui-icon-video { background-position: -224px -128px; }
175.ui-icon-script { background-position: -240px -128px; }
176.ui-icon-alert { background-position: 0 -144px; }
177.ui-icon-info { background-position: -16px -144px; }
178.ui-icon-notice { background-position: -32px -144px; }
179.ui-icon-help { background-position: -48px -144px; }
180.ui-icon-check { background-position: -64px -144px; }
181.ui-icon-bullet { background-position: -80px -144px; }
182.ui-icon-radio-off { background-position: -96px -144px; }
183.ui-icon-radio-on { background-position: -112px -144px; }
184.ui-icon-pin-w { background-position: -128px -144px; }
185.ui-icon-pin-s { background-position: -144px -144px; }
186.ui-icon-play { background-position: 0 -160px; }
187.ui-icon-pause { background-position: -16px -160px; }
188.ui-icon-seek-next { background-position: -32px -160px; }
189.ui-icon-seek-prev { background-position: -48px -160px; }
190.ui-icon-seek-end { background-position: -64px -160px; }
191.ui-icon-seek-first { background-position: -80px -160px; }
192.ui-icon-stop { background-position: -96px -160px; }
193.ui-icon-eject { background-position: -112px -160px; }
194.ui-icon-volume-off { background-position: -128px -160px; }
195.ui-icon-volume-on { background-position: -144px -160px; }
196.ui-icon-power { background-position: 0 -176px; }
197.ui-icon-signal-diag { background-position: -16px -176px; }
198.ui-icon-signal { background-position: -32px -176px; }
199.ui-icon-battery-0 { background-position: -48px -176px; }
200.ui-icon-battery-1 { background-position: -64px -176px; }
201.ui-icon-battery-2 { background-position: -80px -176px; }
202.ui-icon-battery-3 { background-position: -96px -176px; }
203.ui-icon-circle-plus { background-position: 0 -192px; }
204.ui-icon-circle-minus { background-position: -16px -192px; }
205.ui-icon-circle-close { background-position: -32px -192px; }
206.ui-icon-circle-triangle-e { background-position: -48px -192px; }
207.ui-icon-circle-triangle-s { background-position: -64px -192px; }
208.ui-icon-circle-triangle-w { background-position: -80px -192px; }
209.ui-icon-circle-triangle-n { background-position: -96px -192px; }
210.ui-icon-circle-arrow-e { background-position: -112px -192px; }
211.ui-icon-circle-arrow-s { background-position: -128px -192px; }
212.ui-icon-circle-arrow-w { background-position: -144px -192px; }
213.ui-icon-circle-arrow-n { background-position: -160px -192px; }
214.ui-icon-circle-zoomin { background-position: -176px -192px; }
215.ui-icon-circle-zoomout { background-position: -192px -192px; }
216.ui-icon-circle-check { background-position: -208px -192px; }
217.ui-icon-circlesmall-plus { background-position: 0 -208px; }
218.ui-icon-circlesmall-minus { background-position: -16px -208px; }
219.ui-icon-circlesmall-close { background-position: -32px -208px; }
220.ui-icon-squaresmall-plus { background-position: -48px -208px; }
221.ui-icon-squaresmall-minus { background-position: -64px -208px; }
222.ui-icon-squaresmall-close { background-position: -80px -208px; }
223.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
224.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
225.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
226.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
227.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
228.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
229
230
231/* Misc visuals
232----------------------------------*/
233
234/* Corner radius */
235.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
236.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
237.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
238.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
239.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
240.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
241.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
242.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
243.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
244
245/* Overlays */
246.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
247.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; } \ No newline at end of file
diff --git a/static/development-bundle/ui/effects.blind.js b/static/development-bundle/ui/effects.blind.js
new file mode 100644
index 0000000..62d86ef
--- /dev/null
+++ b/static/development-bundle/ui/effects.blind.js
@@ -0,0 +1,49 @@
1/*
2 * jQuery UI Effects Blind 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Blind
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.blind = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','left'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
24 var direction = o.options.direction || 'vertical'; // Default direction
25
26 // Adjust
27 $.effects.save(el, props); el.show(); // Save & Show
28 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
29 var ref = (direction == 'vertical') ? 'height' : 'width';
30 var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
31 if(mode == 'show') wrapper.css(ref, 0); // Shift
32
33 // Animation
34 var animation = {};
35 animation[ref] = mode == 'show' ? distance : 0;
36
37 // Animate
38 wrapper.animate(animation, o.duration, o.options.easing, function() {
39 if(mode == 'hide') el.hide(); // Hide
40 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
41 if(o.callback) o.callback.apply(el[0], arguments); // Callback
42 el.dequeue();
43 });
44
45 });
46
47};
48
49})(jQuery);
diff --git a/static/development-bundle/ui/effects.bounce.js b/static/development-bundle/ui/effects.bounce.js
new file mode 100644
index 0000000..6461332
--- /dev/null
+++ b/static/development-bundle/ui/effects.bounce.js
@@ -0,0 +1,78 @@
1/*
2 * jQuery UI Effects Bounce 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Bounce
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.bounce = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','left'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
24 var direction = o.options.direction || 'up'; // Default direction
25 var distance = o.options.distance || 20; // Default distance
26 var times = o.options.times || 5; // Default # of times
27 var speed = o.duration || 250; // Default speed per bounce
28 if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
29
30 // Adjust
31 $.effects.save(el, props); el.show(); // Save & Show
32 $.effects.createWrapper(el); // Create Wrapper
33 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
34 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
35 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
36 if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
37 if (mode == 'hide') distance = distance / (times * 2);
38 if (mode != 'hide') times--;
39
40 // Animate
41 if (mode == 'show') { // Show Bounce
42 var animation = {opacity: 1};
43 animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
44 el.animate(animation, speed / 2, o.options.easing);
45 distance = distance / 2;
46 times--;
47 };
48 for (var i = 0; i < times; i++) { // Bounces
49 var animation1 = {}, animation2 = {};
50 animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
51 animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
52 el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
53 distance = (mode == 'hide') ? distance * 2 : distance / 2;
54 };
55 if (mode == 'hide') { // Last Bounce
56 var animation = {opacity: 0};
57 animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
58 el.animate(animation, speed / 2, o.options.easing, function(){
59 el.hide(); // Hide
60 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
61 if(o.callback) o.callback.apply(this, arguments); // Callback
62 });
63 } else {
64 var animation1 = {}, animation2 = {};
65 animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
66 animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
67 el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
68 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
69 if(o.callback) o.callback.apply(this, arguments); // Callback
70 });
71 };
72 el.queue('fx', function() { el.dequeue(); });
73 el.dequeue();
74 });
75
76};
77
78})(jQuery);
diff --git a/static/development-bundle/ui/effects.clip.js b/static/development-bundle/ui/effects.clip.js
new file mode 100644
index 0000000..1775f83
--- /dev/null
+++ b/static/development-bundle/ui/effects.clip.js
@@ -0,0 +1,54 @@
1/*
2 * jQuery UI Effects Clip 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Clip
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.clip = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','left','height','width'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
24 var direction = o.options.direction || 'vertical'; // Default direction
25
26 // Adjust
27 $.effects.save(el, props); el.show(); // Save & Show
28 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
29 var animate = el[0].tagName == 'IMG' ? wrapper : el;
30 var ref = {
31 size: (direction == 'vertical') ? 'height' : 'width',
32 position: (direction == 'vertical') ? 'top' : 'left'
33 };
34 var distance = (direction == 'vertical') ? animate.height() : animate.width();
35 if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
36
37 // Animation
38 var animation = {};
39 animation[ref.size] = mode == 'show' ? distance : 0;
40 animation[ref.position] = mode == 'show' ? 0 : distance / 2;
41
42 // Animate
43 animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
44 if(mode == 'hide') el.hide(); // Hide
45 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
46 if(o.callback) o.callback.apply(el[0], arguments); // Callback
47 el.dequeue();
48 }});
49
50 });
51
52};
53
54})(jQuery);
diff --git a/static/development-bundle/ui/effects.core.js b/static/development-bundle/ui/effects.core.js
new file mode 100644
index 0000000..efd0d50
--- /dev/null
+++ b/static/development-bundle/ui/effects.core.js
@@ -0,0 +1,545 @@
1/*
2 * jQuery UI Effects 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/
9 */
10;jQuery.effects || (function($) {
11
12$.effects = {
13 version: "1.7.2",
14
15 // Saves a set of properties in a data storage
16 save: function(element, set) {
17 for(var i=0; i < set.length; i++) {
18 if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
19 }
20 },
21
22 // Restores a set of previously saved properties from a data storage
23 restore: function(element, set) {
24 for(var i=0; i < set.length; i++) {
25 if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
26 }
27 },
28
29 setMode: function(el, mode) {
30 if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
31 return mode;
32 },
33
34 getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
35 // this should be a little more flexible in the future to handle a string & hash
36 var y, x;
37 switch (origin[0]) {
38 case 'top': y = 0; break;
39 case 'middle': y = 0.5; break;
40 case 'bottom': y = 1; break;
41 default: y = origin[0] / original.height;
42 };
43 switch (origin[1]) {
44 case 'left': x = 0; break;
45 case 'center': x = 0.5; break;
46 case 'right': x = 1; break;
47 default: x = origin[1] / original.width;
48 };
49 return {x: x, y: y};
50 },
51
52 // Wraps the element around a wrapper that copies position properties
53 createWrapper: function(element) {
54
55 //if the element is already wrapped, return it
56 if (element.parent().is('.ui-effects-wrapper'))
57 return element.parent();
58
59 //Cache width,height and float properties of the element, and create a wrapper around it
60 var props = { width: element.outerWidth(true), height: element.outerHeight(true), 'float': element.css('float') };
61 element.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');
62 var wrapper = element.parent();
63
64 //Transfer the positioning of the element to the wrapper
65 if (element.css('position') == 'static') {
66 wrapper.css({ position: 'relative' });
67 element.css({ position: 'relative'} );
68 } else {
69 var top = element.css('top'); if(isNaN(parseInt(top,10))) top = 'auto';
70 var left = element.css('left'); if(isNaN(parseInt(left,10))) left = 'auto';
71 wrapper.css({ position: element.css('position'), top: top, left: left, zIndex: element.css('z-index') }).show();
72 element.css({position: 'relative', top: 0, left: 0 });
73 }
74
75 wrapper.css(props);
76 return wrapper;
77 },
78
79 removeWrapper: function(element) {
80 if (element.parent().is('.ui-effects-wrapper'))
81 return element.parent().replaceWith(element);
82 return element;
83 },
84
85 setTransition: function(element, list, factor, value) {
86 value = value || {};
87 $.each(list, function(i, x){
88 unit = element.cssUnit(x);
89 if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
90 });
91 return value;
92 },
93
94 //Base function to animate from one class to another in a seamless transition
95 animateClass: function(value, duration, easing, callback) {
96
97 var cb = (typeof easing == "function" ? easing : (callback ? callback : null));
98 var ea = (typeof easing == "string" ? easing : null);
99
100 return this.each(function() {
101
102 var offset = {}; var that = $(this); var oldStyleAttr = that.attr("style") || '';
103 if(typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"]; /* Stupidly in IE, style is a object.. */
104 if(value.toggle) { that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle; }
105
106 //Let's get a style offset
107 var oldStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
108 if(value.add) that.addClass(value.add); if(value.remove) that.removeClass(value.remove);
109 var newStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
110 if(value.add) that.removeClass(value.add); if(value.remove) that.addClass(value.remove);
111
112 // The main function to form the object for animation
113 for(var n in newStyle) {
114 if( typeof newStyle[n] != "function" && newStyle[n] /* No functions and null properties */
115 && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 /* No mozilla spezific render properties. */
116 && newStyle[n] != oldStyle[n] /* Only values that have changed are used for the animation */
117 && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n],10)))) /* Only things that can be parsed to integers or colors */
118 && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/))) /* No need for positions when dealing with static positions */
119 ) offset[n] = newStyle[n];
120 }
121
122 that.animate(offset, duration, ea, function() { // Animate the newly constructed offset object
123 // Change style attribute back to original. For stupid IE, we need to clear the damn object.
124 if(typeof $(this).attr("style") == 'object') { $(this).attr("style")["cssText"] = ""; $(this).attr("style")["cssText"] = oldStyleAttr; } else $(this).attr("style", oldStyleAttr);
125 if(value.add) $(this).addClass(value.add); if(value.remove) $(this).removeClass(value.remove);
126 if(cb) cb.apply(this, arguments);
127 });
128
129 });
130 }
131};
132
133
134function _normalizeArguments(a, m) {
135
136 var o = a[1] && a[1].constructor == Object ? a[1] : {}; if(m) o.mode = m;
137 var speed = a[1] && a[1].constructor != Object ? a[1] : (o.duration ? o.duration : a[2]); //either comes from options.duration or the secon/third argument
138 speed = $.fx.off ? 0 : typeof speed === "number" ? speed : $.fx.speeds[speed] || $.fx.speeds._default;
139 var callback = o.callback || ( $.isFunction(a[1]) && a[1] ) || ( $.isFunction(a[2]) && a[2] ) || ( $.isFunction(a[3]) && a[3] );
140
141 return [a[0], o, speed, callback];
142
143}
144
145//Extend the methods of jQuery
146$.fn.extend({
147
148 //Save old methods
149 _show: $.fn.show,
150 _hide: $.fn.hide,
151 __toggle: $.fn.toggle,
152 _addClass: $.fn.addClass,
153 _removeClass: $.fn.removeClass,
154 _toggleClass: $.fn.toggleClass,
155
156 // New effect methods
157 effect: function(fx, options, speed, callback) {
158 return $.effects[fx] ? $.effects[fx].call(this, {method: fx, options: options || {}, duration: speed, callback: callback }) : null;
159 },
160
161 show: function() {
162 if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
163 return this._show.apply(this, arguments);
164 else {
165 return this.effect.apply(this, _normalizeArguments(arguments, 'show'));
166 }
167 },
168
169 hide: function() {
170 if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
171 return this._hide.apply(this, arguments);
172 else {
173 return this.effect.apply(this, _normalizeArguments(arguments, 'hide'));
174 }
175 },
176
177 toggle: function(){
178 if(!arguments[0] ||
179 (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])) ||
180 ($.isFunction(arguments[0]) || typeof arguments[0] == 'boolean')) {
181 return this.__toggle.apply(this, arguments);
182 } else {
183 return this.effect.apply(this, _normalizeArguments(arguments, 'toggle'));
184 }
185 },
186
187 addClass: function(classNames, speed, easing, callback) {
188 return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
189 },
190 removeClass: function(classNames,speed,easing,callback) {
191 return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
192 },
193 toggleClass: function(classNames,speed,easing,callback) {
194 return ( (typeof speed !== "boolean") && speed ) ? $.effects.animateClass.apply(this, [{ toggle: classNames },speed,easing,callback]) : this._toggleClass(classNames, speed);
195 },
196 morph: function(remove,add,speed,easing,callback) {
197 return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
198 },
199 switchClass: function() {
200 return this.morph.apply(this, arguments);
201 },
202
203 // helper functions
204 cssUnit: function(key) {
205 var style = this.css(key), val = [];
206 $.each( ['em','px','%','pt'], function(i, unit){
207 if(style.indexOf(unit) > 0)
208 val = [parseFloat(style), unit];
209 });
210 return val;
211 }
212});
213
214/*
215 * jQuery Color Animations
216 * Copyright 2007 John Resig
217 * Released under the MIT and GPL licenses.
218 */
219
220// We override the animation for all of these color styles
221$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
222 $.fx.step[attr] = function(fx) {
223 if ( fx.state == 0 ) {
224 fx.start = getColor( fx.elem, attr );
225 fx.end = getRGB( fx.end );
226 }
227
228 fx.elem.style[attr] = "rgb(" + [
229 Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0],10), 255), 0),
230 Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1],10), 255), 0),
231 Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2],10), 255), 0)
232 ].join(",") + ")";
233 };
234});
235
236// Color Conversion functions from highlightFade
237// By Blair Mitchelmore
238// http://jquery.offput.ca/highlightFade/
239
240// Parse strings looking for color tuples [255,255,255]
241function getRGB(color) {
242 var result;
243
244 // Check if we're already dealing with an array of colors
245 if ( color && color.constructor == Array && color.length == 3 )
246 return color;
247
248 // Look for rgb(num,num,num)
249 if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
250 return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
251
252 // Look for rgb(num%,num%,num%)
253 if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
254 return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
255
256 // Look for #a0b1c2
257 if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
258 return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
259
260 // Look for #fff
261 if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
262 return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
263
264 // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
265 if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
266 return colors['transparent'];
267
268 // Otherwise, we're most likely dealing with a named color
269 return colors[$.trim(color).toLowerCase()];
270}
271
272function getColor(elem, attr) {
273 var color;
274
275 do {
276 color = $.curCSS(elem, attr);
277
278 // Keep going until we find an element that has color, or we hit the body
279 if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
280 break;
281
282 attr = "backgroundColor";
283 } while ( elem = elem.parentNode );
284
285 return getRGB(color);
286};
287
288// Some named colors to work with
289// From Interface by Stefan Petre
290// http://interface.eyecon.ro/
291
292var colors = {
293 aqua:[0,255,255],
294 azure:[240,255,255],
295 beige:[245,245,220],
296 black:[0,0,0],
297 blue:[0,0,255],
298 brown:[165,42,42],
299 cyan:[0,255,255],
300 darkblue:[0,0,139],
301 darkcyan:[0,139,139],
302 darkgrey:[169,169,169],
303 darkgreen:[0,100,0],
304 darkkhaki:[189,183,107],
305 darkmagenta:[139,0,139],
306 darkolivegreen:[85,107,47],
307 darkorange:[255,140,0],
308 darkorchid:[153,50,204],
309 darkred:[139,0,0],
310 darksalmon:[233,150,122],
311 darkviolet:[148,0,211],
312 fuchsia:[255,0,255],
313 gold:[255,215,0],
314 green:[0,128,0],
315 indigo:[75,0,130],
316 khaki:[240,230,140],
317 lightblue:[173,216,230],
318 lightcyan:[224,255,255],
319 lightgreen:[144,238,144],
320 lightgrey:[211,211,211],
321 lightpink:[255,182,193],
322 lightyellow:[255,255,224],
323 lime:[0,255,0],
324 magenta:[255,0,255],
325 maroon:[128,0,0],
326 navy:[0,0,128],
327 olive:[128,128,0],
328 orange:[255,165,0],
329 pink:[255,192,203],
330 purple:[128,0,128],
331 violet:[128,0,128],
332 red:[255,0,0],
333 silver:[192,192,192],
334 white:[255,255,255],
335 yellow:[255,255,0],
336 transparent: [255,255,255]
337};
338
339/*
340 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
341 *
342 * Uses the built in easing capabilities added In jQuery 1.1
343 * to offer multiple easing options
344 *
345 * TERMS OF USE - jQuery Easing
346 *
347 * Open source under the BSD License.
348 *
349 * Copyright 2008 George McGinley Smith
350 * All rights reserved.
351 *
352 * Redistribution and use in source and binary forms, with or without modification,
353 * are permitted provided that the following conditions are met:
354 *
355 * Redistributions of source code must retain the above copyright notice, this list of
356 * conditions and the following disclaimer.
357 * Redistributions in binary form must reproduce the above copyright notice, this list
358 * of conditions and the following disclaimer in the documentation and/or other materials
359 * provided with the distribution.
360 *
361 * Neither the name of the author nor the names of contributors may be used to endorse
362 * or promote products derived from this software without specific prior written permission.
363 *
364 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
365 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
366 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
367 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
368 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
369 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
370 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
371 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
372 * OF THE POSSIBILITY OF SUCH DAMAGE.
373 *
374*/
375
376// t: current time, b: begInnIng value, c: change In value, d: duration
377$.easing.jswing = $.easing.swing;
378
379$.extend($.easing,
380{
381 def: 'easeOutQuad',
382 swing: function (x, t, b, c, d) {
383 //alert($.easing.default);
384 return $.easing[$.easing.def](x, t, b, c, d);
385 },
386 easeInQuad: function (x, t, b, c, d) {
387 return c*(t/=d)*t + b;
388 },
389 easeOutQuad: function (x, t, b, c, d) {
390 return -c *(t/=d)*(t-2) + b;
391 },
392 easeInOutQuad: function (x, t, b, c, d) {
393 if ((t/=d/2) < 1) return c/2*t*t + b;
394 return -c/2 * ((--t)*(t-2) - 1) + b;
395 },
396 easeInCubic: function (x, t, b, c, d) {
397 return c*(t/=d)*t*t + b;
398 },
399 easeOutCubic: function (x, t, b, c, d) {
400 return c*((t=t/d-1)*t*t + 1) + b;
401 },
402 easeInOutCubic: function (x, t, b, c, d) {
403 if ((t/=d/2) < 1) return c/2*t*t*t + b;
404 return c/2*((t-=2)*t*t + 2) + b;
405 },
406 easeInQuart: function (x, t, b, c, d) {
407 return c*(t/=d)*t*t*t + b;
408 },
409 easeOutQuart: function (x, t, b, c, d) {
410 return -c * ((t=t/d-1)*t*t*t - 1) + b;
411 },
412 easeInOutQuart: function (x, t, b, c, d) {
413 if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
414 return -c/2 * ((t-=2)*t*t*t - 2) + b;
415 },
416 easeInQuint: function (x, t, b, c, d) {
417 return c*(t/=d)*t*t*t*t + b;
418 },
419 easeOutQuint: function (x, t, b, c, d) {
420 return c*((t=t/d-1)*t*t*t*t + 1) + b;
421 },
422 easeInOutQuint: function (x, t, b, c, d) {
423 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
424 return c/2*((t-=2)*t*t*t*t + 2) + b;
425 },
426 easeInSine: function (x, t, b, c, d) {
427 return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
428 },
429 easeOutSine: function (x, t, b, c, d) {
430 return c * Math.sin(t/d * (Math.PI/2)) + b;
431 },
432 easeInOutSine: function (x, t, b, c, d) {
433 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
434 },
435 easeInExpo: function (x, t, b, c, d) {
436 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
437 },
438 easeOutExpo: function (x, t, b, c, d) {
439 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
440 },
441 easeInOutExpo: function (x, t, b, c, d) {
442 if (t==0) return b;
443 if (t==d) return b+c;
444 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
445 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
446 },
447 easeInCirc: function (x, t, b, c, d) {
448 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
449 },
450 easeOutCirc: function (x, t, b, c, d) {
451 return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
452 },
453 easeInOutCirc: function (x, t, b, c, d) {
454 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
455 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
456 },
457 easeInElastic: function (x, t, b, c, d) {
458 var s=1.70158;var p=0;var a=c;
459 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
460 if (a < Math.abs(c)) { a=c; var s=p/4; }
461 else var s = p/(2*Math.PI) * Math.asin (c/a);
462 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
463 },
464 easeOutElastic: function (x, t, b, c, d) {
465 var s=1.70158;var p=0;var a=c;
466 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
467 if (a < Math.abs(c)) { a=c; var s=p/4; }
468 else var s = p/(2*Math.PI) * Math.asin (c/a);
469 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
470 },
471 easeInOutElastic: function (x, t, b, c, d) {
472 var s=1.70158;var p=0;var a=c;
473 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
474 if (a < Math.abs(c)) { a=c; var s=p/4; }
475 else var s = p/(2*Math.PI) * Math.asin (c/a);
476 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
477 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
478 },
479 easeInBack: function (x, t, b, c, d, s) {
480 if (s == undefined) s = 1.70158;
481 return c*(t/=d)*t*((s+1)*t - s) + b;
482 },
483 easeOutBack: function (x, t, b, c, d, s) {
484 if (s == undefined) s = 1.70158;
485 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
486 },
487 easeInOutBack: function (x, t, b, c, d, s) {
488 if (s == undefined) s = 1.70158;
489 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
490 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
491 },
492 easeInBounce: function (x, t, b, c, d) {
493 return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
494 },
495 easeOutBounce: function (x, t, b, c, d) {
496 if ((t/=d) < (1/2.75)) {
497 return c*(7.5625*t*t) + b;
498 } else if (t < (2/2.75)) {
499 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
500 } else if (t < (2.5/2.75)) {
501 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
502 } else {
503 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
504 }
505 },
506 easeInOutBounce: function (x, t, b, c, d) {
507 if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
508 return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
509 }
510});
511
512/*
513 *
514 * TERMS OF USE - EASING EQUATIONS
515 *
516 * Open source under the BSD License.
517 *
518 * Copyright 2001 Robert Penner
519 * All rights reserved.
520 *
521 * Redistribution and use in source and binary forms, with or without modification,
522 * are permitted provided that the following conditions are met:
523 *
524 * Redistributions of source code must retain the above copyright notice, this list of
525 * conditions and the following disclaimer.
526 * Redistributions in binary form must reproduce the above copyright notice, this list
527 * of conditions and the following disclaimer in the documentation and/or other materials
528 * provided with the distribution.
529 *
530 * Neither the name of the author nor the names of contributors may be used to endorse
531 * or promote products derived from this software without specific prior written permission.
532 *
533 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
534 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
535 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
536 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
537 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
538 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
539 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
540 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
541 * OF THE POSSIBILITY OF SUCH DAMAGE.
542 *
543 */
544
545})(jQuery);
diff --git a/static/development-bundle/ui/effects.drop.js b/static/development-bundle/ui/effects.drop.js
new file mode 100644
index 0000000..604ac8d
--- /dev/null
+++ b/static/development-bundle/ui/effects.drop.js
@@ -0,0 +1,50 @@
1/*
2 * jQuery UI Effects Drop 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Drop
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.drop = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','left','opacity'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
24 var direction = o.options.direction || 'left'; // Default Direction
25
26 // Adjust
27 $.effects.save(el, props); el.show(); // Save & Show
28 $.effects.createWrapper(el); // Create Wrapper
29 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
30 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
31 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
32 if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
33
34 // Animation
35 var animation = {opacity: mode == 'show' ? 1 : 0};
36 animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
37
38 // Animate
39 el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
40 if(mode == 'hide') el.hide(); // Hide
41 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
42 if(o.callback) o.callback.apply(this, arguments); // Callback
43 el.dequeue();
44 }});
45
46 });
47
48};
49
50})(jQuery);
diff --git a/static/development-bundle/ui/effects.explode.js b/static/development-bundle/ui/effects.explode.js
new file mode 100644
index 0000000..31efd2f
--- /dev/null
+++ b/static/development-bundle/ui/effects.explode.js
@@ -0,0 +1,79 @@
1/*
2 * jQuery UI Effects Explode 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Explode
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.explode = function(o) {
16
17 return this.queue(function() {
18
19 var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
20 var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
21
22 o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
23 var el = $(this).show().css('visibility', 'hidden');
24 var offset = el.offset();
25
26 //Substract the margins - not fixing the problem yet.
27 offset.top -= parseInt(el.css("marginTop"),10) || 0;
28 offset.left -= parseInt(el.css("marginLeft"),10) || 0;
29
30 var width = el.outerWidth(true);
31 var height = el.outerHeight(true);
32
33 for(var i=0;i<rows;i++) { // =
34 for(var j=0;j<cells;j++) { // ||
35 el
36 .clone()
37 .appendTo('body')
38 .wrap('<div></div>')
39 .css({
40 position: 'absolute',
41 visibility: 'visible',
42 left: -j*(width/cells),
43 top: -i*(height/rows)
44 })
45 .parent()
46 .addClass('ui-effects-explode')
47 .css({
48 position: 'absolute',
49 overflow: 'hidden',
50 width: width/cells,
51 height: height/rows,
52 left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
53 top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
54 opacity: o.options.mode == 'show' ? 0 : 1
55 }).animate({
56 left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
57 top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
58 opacity: o.options.mode == 'show' ? 1 : 0
59 }, o.duration || 500);
60 }
61 }
62
63 // Set a timeout, to call the callback approx. when the other animations have finished
64 setTimeout(function() {
65
66 o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
67 if(o.callback) o.callback.apply(el[0]); // Callback
68 el.dequeue();
69
70 $('div.ui-effects-explode').remove();
71
72 }, o.duration || 500);
73
74
75 });
76
77};
78
79})(jQuery);
diff --git a/static/development-bundle/ui/effects.fold.js b/static/development-bundle/ui/effects.fold.js
new file mode 100644
index 0000000..5ed1188
--- /dev/null
+++ b/static/development-bundle/ui/effects.fold.js
@@ -0,0 +1,56 @@
1/*
2 * jQuery UI Effects Fold 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Fold
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.fold = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','left'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
24 var size = o.options.size || 15; // Default fold size
25 var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
26 var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
27
28 // Adjust
29 $.effects.save(el, props); el.show(); // Save & Show
30 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
31 var widthFirst = ((mode == 'show') != horizFirst);
32 var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
33 var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
34 var percent = /([0-9]+)%/.exec(size);
35 if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
36 if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
37
38 // Animation
39 var animation1 = {}, animation2 = {};
40 animation1[ref[0]] = mode == 'show' ? distance[0] : size;
41 animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
42
43 // Animate
44 wrapper.animate(animation1, duration, o.options.easing)
45 .animate(animation2, duration, o.options.easing, function() {
46 if(mode == 'hide') el.hide(); // Hide
47 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
48 if(o.callback) o.callback.apply(el[0], arguments); // Callback
49 el.dequeue();
50 });
51
52 });
53
54};
55
56})(jQuery);
diff --git a/static/development-bundle/ui/effects.highlight.js b/static/development-bundle/ui/effects.highlight.js
new file mode 100644
index 0000000..828d059
--- /dev/null
+++ b/static/development-bundle/ui/effects.highlight.js
@@ -0,0 +1,48 @@
1/*
2 * jQuery UI Effects Highlight 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Highlight
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.highlight = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['backgroundImage','backgroundColor','opacity'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
24 var color = o.options.color || "#ffff99"; // Default highlight color
25 var oldColor = el.css("backgroundColor");
26
27 // Adjust
28 $.effects.save(el, props); el.show(); // Save & Show
29 el.css({backgroundImage: 'none', backgroundColor: color}); // Shift
30
31 // Animation
32 var animation = {backgroundColor: oldColor };
33 if (mode == "hide") animation['opacity'] = 0;
34
35 // Animate
36 el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
37 if(mode == "hide") el.hide();
38 $.effects.restore(el, props);
39 if (mode == "show" && $.browser.msie) this.style.removeAttribute('filter');
40 if(o.callback) o.callback.apply(this, arguments);
41 el.dequeue();
42 }});
43
44 });
45
46};
47
48})(jQuery);
diff --git a/static/development-bundle/ui/effects.pulsate.js b/static/development-bundle/ui/effects.pulsate.js
new file mode 100644
index 0000000..6459d18
--- /dev/null
+++ b/static/development-bundle/ui/effects.pulsate.js
@@ -0,0 +1,56 @@
1/*
2 * jQuery UI Effects Pulsate 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Pulsate
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.pulsate = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this);
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
24 var times = o.options.times || 5; // Default # of times
25 var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
26
27 // Adjust
28 if (mode == 'hide') times--;
29 if (el.is(':hidden')) { // Show fadeIn
30 el.css('opacity', 0);
31 el.show(); // Show
32 el.animate({opacity: 1}, duration, o.options.easing);
33 times = times-2;
34 }
35
36 // Animate
37 for (var i = 0; i < times; i++) { // Pulsate
38 el.animate({opacity: 0}, duration, o.options.easing).animate({opacity: 1}, duration, o.options.easing);
39 };
40 if (mode == 'hide') { // Last Pulse
41 el.animate({opacity: 0}, duration, o.options.easing, function(){
42 el.hide(); // Hide
43 if(o.callback) o.callback.apply(this, arguments); // Callback
44 });
45 } else {
46 el.animate({opacity: 0}, duration, o.options.easing).animate({opacity: 1}, duration, o.options.easing, function(){
47 if(o.callback) o.callback.apply(this, arguments); // Callback
48 });
49 };
50 el.queue('fx', function() { el.dequeue(); });
51 el.dequeue();
52 });
53
54};
55
56})(jQuery);
diff --git a/static/development-bundle/ui/effects.scale.js b/static/development-bundle/ui/effects.scale.js
new file mode 100644
index 0000000..ec15cf8
--- /dev/null
+++ b/static/development-bundle/ui/effects.scale.js
@@ -0,0 +1,180 @@
1/*
2 * jQuery UI Effects Scale 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Scale
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.puff = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this);
21
22 // Set options
23 var options = $.extend(true, {}, o.options);
24 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
25 var percent = parseInt(o.options.percent,10) || 150; // Set default puff percent
26 options.fade = true; // It's not a puff if it doesn't fade! :)
27 var original = {height: el.height(), width: el.width()}; // Save original
28
29 // Adjust
30 var factor = percent / 100;
31 el.from = (mode == 'hide') ? original : {height: original.height * factor, width: original.width * factor};
32
33 // Animation
34 options.from = el.from;
35 options.percent = (mode == 'hide') ? percent : 100;
36 options.mode = mode;
37
38 // Animate
39 el.effect('scale', options, o.duration, o.callback);
40 el.dequeue();
41 });
42
43};
44
45$.effects.scale = function(o) {
46
47 return this.queue(function() {
48
49 // Create element
50 var el = $(this);
51
52 // Set options
53 var options = $.extend(true, {}, o.options);
54 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
55 var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
56 var direction = o.options.direction || 'both'; // Set default axis
57 var origin = o.options.origin; // The origin of the scaling
58 if (mode != 'effect') { // Set default origin and restore for show/hide
59 options.origin = origin || ['middle','center'];
60 options.restore = true;
61 }
62 var original = {height: el.height(), width: el.width()}; // Save original
63 el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
64
65 // Adjust
66 var factor = { // Set scaling factor
67 y: direction != 'horizontal' ? (percent / 100) : 1,
68 x: direction != 'vertical' ? (percent / 100) : 1
69 };
70 el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
71
72 if (o.options.fade) { // Fade option to support puff
73 if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
74 if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
75 };
76
77 // Animation
78 options.from = el.from; options.to = el.to; options.mode = mode;
79
80 // Animate
81 el.effect('size', options, o.duration, o.callback);
82 el.dequeue();
83 });
84
85};
86
87$.effects.size = function(o) {
88
89 return this.queue(function() {
90
91 // Create element
92 var el = $(this), props = ['position','top','left','width','height','overflow','opacity'];
93 var props1 = ['position','top','left','overflow','opacity']; // Always restore
94 var props2 = ['width','height','overflow']; // Copy for children
95 var cProps = ['fontSize'];
96 var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
97 var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
98
99 // Set options
100 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
101 var restore = o.options.restore || false; // Default restore
102 var scale = o.options.scale || 'both'; // Default scale mode
103 var origin = o.options.origin; // The origin of the sizing
104 var original = {height: el.height(), width: el.width()}; // Save original
105 el.from = o.options.from || original; // Default from state
106 el.to = o.options.to || original; // Default to state
107 // Adjust
108 if (origin) { // Calculate baseline shifts
109 var baseline = $.effects.getBaseline(origin, original);
110 el.from.top = (original.height - el.from.height) * baseline.y;
111 el.from.left = (original.width - el.from.width) * baseline.x;
112 el.to.top = (original.height - el.to.height) * baseline.y;
113 el.to.left = (original.width - el.to.width) * baseline.x;
114 };
115 var factor = { // Set scaling factor
116 from: {y: el.from.height / original.height, x: el.from.width / original.width},
117 to: {y: el.to.height / original.height, x: el.to.width / original.width}
118 };
119 if (scale == 'box' || scale == 'both') { // Scale the css box
120 if (factor.from.y != factor.to.y) { // Vertical props scaling
121 props = props.concat(vProps);
122 el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
123 el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
124 };
125 if (factor.from.x != factor.to.x) { // Horizontal props scaling
126 props = props.concat(hProps);
127 el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
128 el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
129 };
130 };
131 if (scale == 'content' || scale == 'both') { // Scale the content
132 if (factor.from.y != factor.to.y) { // Vertical props scaling
133 props = props.concat(cProps);
134 el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
135 el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
136 };
137 };
138 $.effects.save(el, restore ? props : props1); el.show(); // Save & Show
139 $.effects.createWrapper(el); // Create Wrapper
140 el.css('overflow','hidden').css(el.from); // Shift
141
142 // Animate
143 if (scale == 'content' || scale == 'both') { // Scale the children
144 vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
145 hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
146 props2 = props.concat(vProps).concat(hProps); // Concat
147 el.find("*[width]").each(function(){
148 child = $(this);
149 if (restore) $.effects.save(child, props2);
150 var c_original = {height: child.height(), width: child.width()}; // Save original
151 child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
152 child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
153 if (factor.from.y != factor.to.y) { // Vertical props scaling
154 child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
155 child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
156 };
157 if (factor.from.x != factor.to.x) { // Horizontal props scaling
158 child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
159 child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
160 };
161 child.css(child.from); // Shift children
162 child.animate(child.to, o.duration, o.options.easing, function(){
163 if (restore) $.effects.restore(child, props2); // Restore children
164 }); // Animate children
165 });
166 };
167
168 // Animate
169 el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
170 if(mode == 'hide') el.hide(); // Hide
171 $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
172 if(o.callback) o.callback.apply(this, arguments); // Callback
173 el.dequeue();
174 }});
175
176 });
177
178};
179
180})(jQuery);
diff --git a/static/development-bundle/ui/effects.shake.js b/static/development-bundle/ui/effects.shake.js
new file mode 100644
index 0000000..dc9f597
--- /dev/null
+++ b/static/development-bundle/ui/effects.shake.js
@@ -0,0 +1,57 @@
1/*
2 * jQuery UI Effects Shake 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Shake
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.shake = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','left'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
24 var direction = o.options.direction || 'left'; // Default direction
25 var distance = o.options.distance || 20; // Default distance
26 var times = o.options.times || 3; // Default # of times
27 var speed = o.duration || o.options.duration || 140; // Default speed per shake
28
29 // Adjust
30 $.effects.save(el, props); el.show(); // Save & Show
31 $.effects.createWrapper(el); // Create Wrapper
32 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
33 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
34
35 // Animation
36 var animation = {}, animation1 = {}, animation2 = {};
37 animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
38 animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2;
39 animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2;
40
41 // Animate
42 el.animate(animation, speed, o.options.easing);
43 for (var i = 1; i < times; i++) { // Shakes
44 el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
45 };
46 el.animate(animation1, speed, o.options.easing).
47 animate(animation, speed / 2, o.options.easing, function(){ // Last shake
48 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
49 if(o.callback) o.callback.apply(this, arguments); // Callback
50 });
51 el.queue('fx', function() { el.dequeue(); });
52 el.dequeue();
53 });
54
55};
56
57})(jQuery);
diff --git a/static/development-bundle/ui/effects.slide.js b/static/development-bundle/ui/effects.slide.js
new file mode 100644
index 0000000..350f599
--- /dev/null
+++ b/static/development-bundle/ui/effects.slide.js
@@ -0,0 +1,50 @@
1/*
2 * jQuery UI Effects Slide 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Slide
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.slide = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','left'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
24 var direction = o.options.direction || 'left'; // Default Direction
25
26 // Adjust
27 $.effects.save(el, props); el.show(); // Save & Show
28 $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
29 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
30 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
31 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
32 if (mode == 'show') el.css(ref, motion == 'pos' ? -distance : distance); // Shift
33
34 // Animation
35 var animation = {};
36 animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
37
38 // Animate
39 el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
40 if(mode == 'hide') el.hide(); // Hide
41 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
42 if(o.callback) o.callback.apply(this, arguments); // Callback
43 el.dequeue();
44 }});
45
46 });
47
48};
49
50})(jQuery);
diff --git a/static/development-bundle/ui/effects.transfer.js b/static/development-bundle/ui/effects.transfer.js
new file mode 100644
index 0000000..82bab6d
--- /dev/null
+++ b/static/development-bundle/ui/effects.transfer.js
@@ -0,0 +1,45 @@
1/*
2 * jQuery UI Effects Transfer 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/Transfer
9 *
10 * Depends:
11 * effects.core.js
12 */
13(function($) {
14
15$.effects.transfer = function(o) {
16 return this.queue(function() {
17 var elem = $(this),
18 target = $(o.options.to),
19 endPosition = target.offset(),
20 animation = {
21 top: endPosition.top,
22 left: endPosition.left,
23 height: target.innerHeight(),
24 width: target.innerWidth()
25 },
26 startPosition = elem.offset(),
27 transfer = $('<div class="ui-effects-transfer"></div>')
28 .appendTo(document.body)
29 .addClass(o.options.className)
30 .css({
31 top: startPosition.top,
32 left: startPosition.left,
33 height: elem.innerHeight(),
34 width: elem.innerWidth(),
35 position: 'absolute'
36 })
37 .animate(animation, o.duration, o.options.easing, function() {
38 transfer.remove();
39 (o.callback && o.callback.apply(elem[0], arguments));
40 elem.dequeue();
41 });
42 });
43};
44
45})(jQuery);
diff --git a/static/development-bundle/ui/i18n/jquery-ui-i18n.js b/static/development-bundle/ui/i18n/jquery-ui-i18n.js
new file mode 100644
index 0000000..5fcfd22
--- /dev/null
+++ b/static/development-bundle/ui/i18n/jquery-ui-i18n.js
@@ -0,0 +1,771 @@
1/* Arabic Translation for jQuery UI date picker plugin. */
2/* Khaled Al Horani -- koko.dw@gmail.com */
3/* خالد الحوراني -- koko.dw@gmail.com */
4/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
5jQuery(function($){
6 $.datepicker.regional['ar'] = {
7 closeText: 'إغلاق',
8 prevText: '&#x3c;السابق',
9 nextText: 'التالي&#x3e;',
10 currentText: 'اليوم',
11 monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران',
12 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
13 monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
14 dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'],
15 dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
16 dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
17 dateFormat: 'dd/mm/yy', firstDay: 0,
18 isRTL: true};
19 $.datepicker.setDefaults($.datepicker.regional['ar']);
20});/* Bulgarian initialisation for the jQuery UI date picker plugin. */
21/* Written by Stoyan Kyosev (http://svest.org). */
22jQuery(function($){
23 $.datepicker.regional['bg'] = {
24 closeText: 'затвори',
25 prevText: '&#x3c;назад',
26 nextText: 'напред&#x3e;',
27 nextBigText: '&#x3e;&#x3e;',
28 currentText: 'днес',
29 monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
30 'Юли','Август','Септември','Октомври','Ноември','Декември'],
31 monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
32 'Юли','Авг','Сеп','Окт','Нов','Дек'],
33 dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
34 dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
35 dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
36 dateFormat: 'dd.mm.yy', firstDay: 1,
37 isRTL: false};
38 $.datepicker.setDefaults($.datepicker.regional['bg']);
39});
40/* Inicialitzaci� en catal� per a l'extenci� 'calendar' per jQuery. */
41/* Writers: (joan.leon@gmail.com). */
42jQuery(function($){
43 $.datepicker.regional['ca'] = {
44 closeText: 'Tancar',
45 prevText: '&#x3c;Ant',
46 nextText: 'Seg&#x3e;',
47 currentText: 'Avui',
48 monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
49 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
50 monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
51 'Jul','Ago','Set','Oct','Nov','Des'],
52 dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
53 dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
54 dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
55 dateFormat: 'mm/dd/yy', firstDay: 0,
56 isRTL: false};
57 $.datepicker.setDefaults($.datepicker.regional['ca']);
58});/* Czech initialisation for the jQuery UI date picker plugin. */
59/* Written by Tomas Muller (tomas@tomas-muller.net). */
60jQuery(function($){
61 $.datepicker.regional['cs'] = {
62 closeText: 'Zavřít',
63 prevText: '&#x3c;Dříve',
64 nextText: 'Později&#x3e;',
65 currentText: 'Nyní',
66 monthNames: ['leden','únor','březen','duben','květen','červen',
67 'červenec','srpen','září','říjen','listopad','prosinec'],
68 monthNamesShort: ['led','úno','bře','dub','kvě','čer',
69 'čvc','srp','zář','říj','lis','pro'],
70 dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
71 dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
72 dayNamesMin: ['ne','po','út','st','čt','pá','so'],
73 dateFormat: 'dd.mm.yy', firstDay: 1,
74 isRTL: false};
75 $.datepicker.setDefaults($.datepicker.regional['cs']);
76});
77/* Danish initialisation for the jQuery UI date picker plugin. */
78/* Written by Jan Christensen ( deletestuff@gmail.com). */
79jQuery(function($){
80 $.datepicker.regional['da'] = {
81 closeText: 'Luk',
82 prevText: '&#x3c;Forrige',
83 nextText: 'Næste&#x3e;',
84 currentText: 'Idag',
85 monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
86 'Juli','August','September','Oktober','November','December'],
87 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
88 'Jul','Aug','Sep','Okt','Nov','Dec'],
89 dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
90 dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
91 dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
92 dateFormat: 'dd-mm-yy', firstDay: 0,
93 isRTL: false};
94 $.datepicker.setDefaults($.datepicker.regional['da']);
95});
96/* German initialisation for the jQuery UI date picker plugin. */
97/* Written by Milian Wolff (mail@milianw.de). */
98jQuery(function($){
99 $.datepicker.regional['de'] = {
100 closeText: 'schließen',
101 prevText: '&#x3c;zurück',
102 nextText: 'Vor&#x3e;',
103 currentText: 'heute',
104 monthNames: ['Januar','Februar','März','April','Mai','Juni',
105 'Juli','August','September','Oktober','November','Dezember'],
106 monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
107 'Jul','Aug','Sep','Okt','Nov','Dez'],
108 dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
109 dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
110 dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
111 dateFormat: 'dd.mm.yy', firstDay: 1,
112 isRTL: false};
113 $.datepicker.setDefaults($.datepicker.regional['de']);
114});
115/* Greek (el) initialisation for the jQuery UI date picker plugin. */
116/* Written by Alex Cicovic (http://www.alexcicovic.com) */
117jQuery(function($){
118 $.datepicker.regional['el'] = {
119 closeText: 'Κλείσιμο',
120 prevText: 'Προηγούμενος',
121 nextText: 'Επόμενος',
122 currentText: 'Τρέχων Μήνας',
123 monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
124 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
125 monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
126 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
127 dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
128 dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
129 dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
130 dateFormat: 'dd/mm/yy', firstDay: 1,
131 isRTL: false};
132 $.datepicker.setDefaults($.datepicker.regional['el']);
133});/* Esperanto initialisation for the jQuery UI date picker plugin. */
134/* Written by Olivier M. (olivierweb@ifrance.com). */
135jQuery(function($){
136 $.datepicker.regional['eo'] = {
137 closeText: 'Fermi',
138 prevText: '&lt;Anta',
139 nextText: 'Sekv&gt;',
140 currentText: 'Nuna',
141 monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
142 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
143 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
144 'Jul','Aŭg','Sep','Okt','Nov','Dec'],
145 dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
146 dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
147 dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
148 dateFormat: 'dd/mm/yy', firstDay: 0,
149 isRTL: false};
150 $.datepicker.setDefaults($.datepicker.regional['eo']);
151});
152/* Inicializaci�n en espa�ol para la extensi�n 'UI date picker' para jQuery. */
153/* Traducido por Vester (xvester@gmail.com). */
154jQuery(function($){
155 $.datepicker.regional['es'] = {
156 closeText: 'Cerrar',
157 prevText: '&#x3c;Ant',
158 nextText: 'Sig&#x3e;',
159 currentText: 'Hoy',
160 monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
161 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
162 monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
163 'Jul','Ago','Sep','Oct','Nov','Dic'],
164 dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
165 dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
166 dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
167 dateFormat: 'dd/mm/yy', firstDay: 0,
168 isRTL: false};
169 $.datepicker.setDefaults($.datepicker.regional['es']);
170});/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
171/* Javad Mowlanezhad -- jmowla@gmail.com */
172/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
173jQuery(function($) {
174 $.datepicker.regional['fa'] = {
175 closeText: 'بستن',
176 prevText: '&#x3c;قبلي',
177 nextText: 'بعدي&#x3e;',
178 currentText: 'امروز',
179 monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور',
180 'مهر','آبان','آذر','دي','بهمن','اسفند'],
181 monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
182 dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'],
183 dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'],
184 dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'],
185 dateFormat: 'yy/mm/dd', firstDay: 6,
186 isRTL: true};
187 $.datepicker.setDefaults($.datepicker.regional['fa']);
188});/* Finnish initialisation for the jQuery UI date picker plugin. */
189/* Written by Harri Kilpi� (harrikilpio@gmail.com). */
190jQuery(function($){
191 $.datepicker.regional['fi'] = {
192 closeText: 'Sulje',
193 prevText: '&laquo;Edellinen',
194 nextText: 'Seuraava&raquo;',
195 currentText: 'T&auml;n&auml;&auml;n',
196 monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&auml;kuu',
197 'Hein&auml;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
198 monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&auml;',
199 'Hein&auml;','Elo','Syys','Loka','Marras','Joulu'],
200 dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'],
201 dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
202 dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
203 dateFormat: 'dd.mm.yy', firstDay: 1,
204 isRTL: false};
205 $.datepicker.setDefaults($.datepicker.regional['fi']);
206});
207/* French initialisation for the jQuery UI date picker plugin. */
208/* Written by Keith Wood (kbwood@virginbroadband.com.au) and Stéphane Nahmani (sholby@sholby.net). */
209jQuery(function($){
210 $.datepicker.regional['fr'] = {
211 closeText: 'Fermer',
212 prevText: '&#x3c;Préc',
213 nextText: 'Suiv&#x3e;',
214 currentText: 'Courant',
215 monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
216 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
217 monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
218 'Jul','Aoû','Sep','Oct','Nov','Déc'],
219 dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
220 dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
221 dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
222 dateFormat: 'dd/mm/yy', firstDay: 1,
223 isRTL: false};
224 $.datepicker.setDefaults($.datepicker.regional['fr']);
225});/* Hebrew initialisation for the UI Datepicker extension. */
226/* Written by Amir Hardon (ahardon at gmail dot com). */
227jQuery(function($){
228 $.datepicker.regional['he'] = {
229 closeText: 'סגור',
230 prevText: '&#x3c;הקודם',
231 nextText: 'הבא&#x3e;',
232 currentText: 'היום',
233 monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
234 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
235 monthNamesShort: ['1','2','3','4','5','6',
236 '7','8','9','10','11','12'],
237 dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
238 dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
239 dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
240 dateFormat: 'dd/mm/yy', firstDay: 0,
241 isRTL: true};
242 $.datepicker.setDefaults($.datepicker.regional['he']);
243});
244/* Croatian i18n for the jQuery UI date picker plugin. */
245/* Written by Vjekoslav Nesek. */
246jQuery(function($){
247 $.datepicker.regional['hr'] = {
248 closeText: 'Zatvori',
249 prevText: '&#x3c;',
250 nextText: '&#x3e;',
251 currentText: 'Danas',
252 monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipani',
253 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
254 monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
255 'Srp','Kol','Ruj','Lis','Stu','Pro'],
256 dayNames: ['Nedjalja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
257 dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
258 dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
259 dateFormat: 'dd.mm.yy.', firstDay: 1,
260 isRTL: false};
261 $.datepicker.setDefaults($.datepicker.regional['hr']);
262});/* Hungarian initialisation for the jQuery UI date picker plugin. */
263/* Written by Istvan Karaszi (jquerycalendar@spam.raszi.hu). */
264jQuery(function($){
265 $.datepicker.regional['hu'] = {
266 closeText: 'bezárás',
267 prevText: '&laquo;&nbsp;vissza',
268 nextText: 'előre&nbsp;&raquo;',
269 currentText: 'ma',
270 monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
271 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
272 monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
273 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
274 dayNames: ['Vasámap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
275 dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
276 dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
277 dateFormat: 'yy-mm-dd', firstDay: 1,
278 isRTL: false};
279 $.datepicker.setDefaults($.datepicker.regional['hu']);
280});
281/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
282/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
283jQuery(function($){
284 $.datepicker.regional['hy'] = {
285 closeText: 'Փակել',
286 prevText: '&#x3c;Նախ.',
287 nextText: 'Հաջ.&#x3e;',
288 currentText: 'Այսօր',
289 monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
290 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
291 monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
292 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
293 dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
294 dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
295 dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
296 dateFormat: 'dd.mm.yy', firstDay: 1,
297 isRTL: false};
298 $.datepicker.setDefaults($.datepicker.regional['hy']);
299});/* Indonesian initialisation for the jQuery UI date picker plugin. */
300/* Written by Deden Fathurahman (dedenf@gmail.com). */
301jQuery(function($){
302 $.datepicker.regional['id'] = {
303 closeText: 'Tutup',
304 prevText: '&#x3c;mundur',
305 nextText: 'maju&#x3e;',
306 currentText: 'hari ini',
307 monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
308 'Juli','Agustus','September','Oktober','Nopember','Desember'],
309 monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
310 'Jul','Agus','Sep','Okt','Nop','Des'],
311 dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
312 dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
313 dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
314 dateFormat: 'dd/mm/yy', firstDay: 0,
315 isRTL: false};
316 $.datepicker.setDefaults($.datepicker.regional['id']);
317});/* Icelandic initialisation for the jQuery UI date picker plugin. */
318/* Written by Haukur H. Thorsson (haukur@eskill.is). */
319jQuery(function($){
320 $.datepicker.regional['is'] = {
321 closeText: 'Loka',
322 prevText: '&#x3c; Fyrri',
323 nextText: 'N&aelig;sti &#x3e;',
324 currentText: '&Iacute; dag',
325 monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
326 'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
327 monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
328 'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
329 dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
330 dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
331 dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
332 dateFormat: 'dd/mm/yy', firstDay: 0,
333 isRTL: false};
334 $.datepicker.setDefaults($.datepicker.regional['is']);
335});/* Italian initialisation for the jQuery UI date picker plugin. */
336/* Written by Apaella (apaella@gmail.com). */
337jQuery(function($){
338 $.datepicker.regional['it'] = {
339 closeText: 'Chiudi',
340 prevText: '&#x3c;Prec',
341 nextText: 'Succ&#x3e;',
342 currentText: 'Oggi',
343 monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
344 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
345 monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
346 'Lug','Ago','Set','Ott','Nov','Dic'],
347 dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
348 dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
349 dayNamesMin: ['Do','Lu','Ma','Me','Gio','Ve','Sa'],
350 dateFormat: 'dd/mm/yy', firstDay: 1,
351 isRTL: false};
352 $.datepicker.setDefaults($.datepicker.regional['it']);
353});
354/* Japanese initialisation for the jQuery UI date picker plugin. */
355/* Written by Kentaro SATO (kentaro@ranvis.com). */
356jQuery(function($){
357 $.datepicker.regional['ja'] = {
358 closeText: '閉じる',
359 prevText: '&#x3c;前',
360 nextText: '次&#x3e;',
361 currentText: '今日',
362 monthNames: ['1月','2月','3月','4月','5月','6月',
363 '7月','8月','9月','10月','11月','12月'],
364 monthNamesShort: ['1月','2月','3月','4月','5月','6月',
365 '7月','8月','9月','10月','11月','12月'],
366 dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
367 dayNamesShort: ['日','月','火','水','木','金','土'],
368 dayNamesMin: ['日','月','火','水','木','金','土'],
369 dateFormat: 'yy/mm/dd', firstDay: 0,
370 isRTL: false,
371 showMonthAfterYear: true};
372 $.datepicker.setDefaults($.datepicker.regional['ja']);
373});/* Korean initialisation for the jQuery calendar extension. */
374/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */
375jQuery(function($){
376 $.datepicker.regional['ko'] = {
377 closeText: '닫기',
378 prevText: '이전달',
379 nextText: '다음달',
380 currentText: '오늘',
381 monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
382 '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
383 monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
384 '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
385 dayNames: ['일','월','화','수','목','금','토'],
386 dayNamesShort: ['일','월','화','수','목','금','토'],
387 dayNamesMin: ['일','월','화','수','목','금','토'],
388 dateFormat: 'yy-mm-dd', firstDay: 0,
389 isRTL: false};
390 $.datepicker.setDefaults($.datepicker.regional['ko']);
391});/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
392/* @author Arturas Paleicikas <arturas@avalon.lt> */
393jQuery(function($){
394 $.datepicker.regional['lt'] = {
395 closeText: 'Uždaryti',
396 prevText: '&#x3c;Atgal',
397 nextText: 'Pirmyn&#x3e;',
398 currentText: 'Šiandien',
399 monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
400 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
401 monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
402 'Lie','Rugp','Rugs','Spa','Lap','Gru'],
403 dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
404 dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
405 dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
406 dateFormat: 'yy-mm-dd', firstDay: 1,
407 isRTL: false};
408 $.datepicker.setDefaults($.datepicker.regional['lt']);
409});/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
410/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
411jQuery(function($){
412 $.datepicker.regional['lv'] = {
413 closeText: 'Aizvērt',
414 prevText: 'Iepr',
415 nextText: 'Nāka',
416 currentText: 'Šodien',
417 monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
418 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
419 monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
420 'Jūl','Aug','Sep','Okt','Nov','Dec'],
421 dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
422 dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
423 dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
424 dateFormat: 'dd-mm-yy', firstDay: 1,
425 isRTL: false};
426 $.datepicker.setDefaults($.datepicker.regional['lv']);
427});/* Malaysian initialisation for the jQuery UI date picker plugin. */
428/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
429jQuery(function($){
430 $.datepicker.regional['ms'] = {
431 closeText: 'Tutup',
432 prevText: '&#x3c;Sebelum',
433 nextText: 'Selepas&#x3e;',
434 currentText: 'hari ini',
435 monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
436 'Julai','Ogos','September','Oktober','November','Disember'],
437 monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
438 'Jul','Ogo','Sep','Okt','Nov','Dis'],
439 dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
440 dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
441 dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
442 dateFormat: 'dd/mm/yy', firstDay: 0,
443 isRTL: false};
444 $.datepicker.setDefaults($.datepicker.regional['ms']);
445});/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
446/* Written by Mathias Bynens <http://mathiasbynens.be/> */
447jQuery(function($){
448 $.datepicker.regional.nl = {
449 closeText: 'Sluiten',
450 prevText: '←',
451 nextText: '→',
452 currentText: 'Vandaag',
453 monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
454 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
455 monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
456 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
457 dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
458 dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
459 dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
460 dateFormat: 'dd/mm/yy', firstDay: 1,
461 isRTL: false};
462 $.datepicker.setDefaults($.datepicker.regional.nl);
463});/* Norwegian initialisation for the jQuery UI date picker plugin. */
464/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
465jQuery(function($){
466 $.datepicker.regional['no'] = {
467 closeText: 'Lukk',
468 prevText: '&laquo;Forrige',
469 nextText: 'Neste&raquo;',
470 currentText: 'I dag',
471 monthNames: ['Januar','Februar','Mars','April','Mai','Juni',
472 'Juli','August','September','Oktober','November','Desember'],
473 monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun',
474 'Jul','Aug','Sep','Okt','Nov','Des'],
475 dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
476 dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
477 dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
478 dateFormat: 'yy-mm-dd', firstDay: 0,
479 isRTL: false};
480 $.datepicker.setDefaults($.datepicker.regional['no']);
481});
482/* Polish initialisation for the jQuery UI date picker plugin. */
483/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
484jQuery(function($){
485 $.datepicker.regional['pl'] = {
486 closeText: 'Zamknij',
487 prevText: '&#x3c;Poprzedni',
488 nextText: 'Następny&#x3e;',
489 currentText: 'Dziś',
490 monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
491 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
492 monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
493 'Lip','Sie','Wrz','Pa','Lis','Gru'],
494 dayNames: ['Niedziela','Poniedzialek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
495 dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
496 dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
497 dateFormat: 'yy-mm-dd', firstDay: 1,
498 isRTL: false};
499 $.datepicker.setDefaults($.datepicker.regional['pl']);
500});
501/* Brazilian initialisation for the jQuery UI date picker plugin. */
502/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
503jQuery(function($){
504 $.datepicker.regional['pt-BR'] = {
505 closeText: 'Fechar',
506 prevText: '&#x3c;Anterior',
507 nextText: 'Pr&oacute;ximo&#x3e;',
508 currentText: 'Hoje',
509 monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
510 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
511 monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
512 'Jul','Ago','Set','Out','Nov','Dez'],
513 dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sabado'],
514 dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'],
515 dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'],
516 dateFormat: 'dd/mm/yy', firstDay: 0,
517 isRTL: false};
518 $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
519});/* Romanian initialisation for the jQuery UI date picker plugin.
520 *
521 * Written by Edmond L. (ll_edmond@walla.com)
522 * and Ionut G. Stan (ionut.g.stan@gmail.com)
523 */
524jQuery(function($){
525 $.datepicker.regional['ro'] = {
526 closeText: 'Închide',
527 prevText: '&laquo; Luna precedentă',
528 nextText: 'Luna următoare &raquo;',
529 currentText: 'Azi',
530 monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
531 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
532 monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
533 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
534 dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
535 dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
536 dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
537 dateFormat: 'dd MM yy', firstDay: 1,
538 isRTL: false};
539 $.datepicker.setDefaults($.datepicker.regional['ro']);
540});
541/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
542/* Written by Andrew Stromnov (stromnov@gmail.com). */
543jQuery(function($){
544 $.datepicker.regional['ru'] = {
545 closeText: 'Закрыть',
546 prevText: '&#x3c;Пред',
547 nextText: 'След&#x3e;',
548 currentText: 'Сегодня',
549 monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
550 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
551 monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
552 'Июл','Авг','Сен','Окт','Ноя','Дек'],
553 dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
554 dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
555 dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
556 dateFormat: 'dd.mm.yy', firstDay: 1,
557 isRTL: false};
558 $.datepicker.setDefaults($.datepicker.regional['ru']);
559});/* Slovak initialisation for the jQuery UI date picker plugin. */
560/* Written by Vojtech Rinik (vojto@hmm.sk). */
561jQuery(function($){
562 $.datepicker.regional['sk'] = {
563 closeText: 'Zavrieť',
564 prevText: '&#x3c;Predchádzajúci',
565 nextText: 'Nasledujúci&#x3e;',
566 currentText: 'Dnes',
567 monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
568 'Júl','August','September','Október','November','December'],
569 monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
570 'Júl','Aug','Sep','Okt','Nov','Dec'],
571 dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
572 dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
573 dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
574 dateFormat: 'dd.mm.yy', firstDay: 0,
575 isRTL: false};
576 $.datepicker.setDefaults($.datepicker.regional['sk']);
577});
578/* Slovenian initialisation for the jQuery UI date picker plugin. */
579/* Written by Jaka Jancar (jaka@kubje.org). */
580/* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
581jQuery(function($){
582 $.datepicker.regional['sl'] = {
583 closeText: 'Zapri',
584 prevText: '&lt;Prej&#x161;nji',
585 nextText: 'Naslednji&gt;',
586 currentText: 'Trenutni',
587 monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
588 'Julij','Avgust','September','Oktober','November','December'],
589 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
590 'Jul','Avg','Sep','Okt','Nov','Dec'],
591 dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
592 dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
593 dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
594 dateFormat: 'dd.mm.yy', firstDay: 1,
595 isRTL: false};
596 $.datepicker.setDefaults($.datepicker.regional['sl']);
597});
598/* Albanian initialisation for the jQuery UI date picker plugin. */
599/* Written by Flakron Bytyqi (flakron@gmail.com). */
600jQuery(function($){
601 $.datepicker.regional['sq'] = {
602 closeText: 'mbylle',
603 prevText: '&#x3c;mbrapa',
604 nextText: 'Përpara&#x3e;',
605 currentText: 'sot',
606 monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
607 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
608 monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
609 'Kor','Gus','Sht','Tet','Nën','Dhj'],
610 dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
611 dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
612 dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
613 dateFormat: 'dd.mm.yy', firstDay: 1,
614 isRTL: false};
615 $.datepicker.setDefaults($.datepicker.regional['sq']);
616});
617/* Serbian i18n for the jQuery UI date picker plugin. */
618/* Written by Dejan Dimić. */
619jQuery(function($){
620 $.datepicker.regional['sr-SR'] = {
621 closeText: 'Zatvori',
622 prevText: '&#x3c;',
623 nextText: '&#x3e;',
624 currentText: 'Danas',
625 monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
626 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
627 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
628 'Jul','Avg','Sep','Okt','Nov','Dec'],
629 dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
630 dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
631 dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
632 dateFormat: 'dd/mm/yy', firstDay: 1,
633 isRTL: false};
634 $.datepicker.setDefaults($.datepicker.regional['sr-SR']);
635});
636/* Serbian i18n for the jQuery UI date picker plugin. */
637/* Written by Dejan Dimić. */
638jQuery(function($){
639 $.datepicker.regional['sr'] = {
640 closeText: 'Затвори',
641 prevText: '&#x3c;',
642 nextText: '&#x3e;',
643 currentText: 'Данас',
644 monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
645 'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
646 monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
647 'Јул','Авг','Сеп','Окт','Нов','Дец'],
648 dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
649 dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
650 dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
651 dateFormat: 'dd/mm/yy', firstDay: 1,
652 isRTL: false};
653 $.datepicker.setDefaults($.datepicker.regional['sr']);
654});
655/* Swedish initialisation for the jQuery UI date picker plugin. */
656/* Written by Anders Ekdahl ( anders@nomadiz.se). */
657jQuery(function($){
658 $.datepicker.regional['sv'] = {
659 closeText: 'Stäng',
660 prevText: '&laquo;Förra',
661 nextText: 'Nästa&raquo;',
662 currentText: 'Idag',
663 monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
664 'Juli','Augusti','September','Oktober','November','December'],
665 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
666 'Jul','Aug','Sep','Okt','Nov','Dec'],
667 dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
668 dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
669 dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
670 dateFormat: 'yy-mm-dd', firstDay: 1,
671 isRTL: false};
672 $.datepicker.setDefaults($.datepicker.regional['sv']);
673});
674/* Thai initialisation for the jQuery UI date picker plugin. */
675/* Written by pipo (pipo@sixhead.com). */
676jQuery(function($){
677 $.datepicker.regional['th'] = {
678 closeText: 'ปิด',
679 prevText: '&laquo;&nbsp;ย้อน',
680 nextText: 'ถัดไป&nbsp;&raquo;',
681 currentText: 'วันนี้',
682 monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
683 'กรกฏาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
684 monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
685 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
686 dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
687 dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
688 dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
689 dateFormat: 'dd/mm/yy', firstDay: 0,
690 isRTL: false};
691 $.datepicker.setDefaults($.datepicker.regional['th']);
692});/* Turkish initialisation for the jQuery UI date picker plugin. */
693/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
694jQuery(function($){
695 $.datepicker.regional['tr'] = {
696 closeText: 'kapat',
697 prevText: '&#x3c;geri',
698 nextText: 'ileri&#x3e',
699 currentText: 'bugün',
700 monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
701 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
702 monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
703 'Tem','Ağu','Eyl','Eki','Kas','Ara'],
704 dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
705 dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
706 dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
707 dateFormat: 'dd.mm.yy', firstDay: 1,
708 isRTL: false};
709 $.datepicker.setDefaults($.datepicker.regional['tr']);
710});/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
711/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
712jQuery(function($){
713 $.datepicker.regional['uk'] = {
714 clearText: 'Очистити', clearStatus: '',
715 closeText: 'Закрити', closeStatus: '',
716 prevText: '&#x3c;', prevStatus: '',
717 prevBigText: '&#x3c;&#x3c;', prevBigStatus: '',
718 nextText: '&#x3e;', nextStatus: '',
719 nextBigText: '&#x3e;&#x3e;', nextBigStatus: '',
720 currentText: 'Сьогодні', currentStatus: '',
721 monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
722 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
723 monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
724 'Лип','Сер','Вер','Жов','Лис','Гру'],
725 monthStatus: '', yearStatus: '',
726 weekHeader: 'Не', weekStatus: '',
727 dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
728 dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
729 dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
730 dayStatus: 'DD', dateStatus: 'D, M d',
731 dateFormat: 'dd/mm/yy', firstDay: 1,
732 initStatus: '', isRTL: false};
733 $.datepicker.setDefaults($.datepicker.regional['uk']);
734});/* Chinese initialisation for the jQuery UI date picker plugin. */
735/* Written by Cloudream (cloudream@gmail.com). */
736jQuery(function($){
737 $.datepicker.regional['zh-CN'] = {
738 closeText: '关闭',
739 prevText: '&#x3c;上月',
740 nextText: '下月&#x3e;',
741 currentText: '今天',
742 monthNames: ['一月','二月','三月','四月','五月','六月',
743 '七月','八月','九月','十月','十一月','十二月'],
744 monthNamesShort: ['一','二','三','四','五','六',
745 '七','八','九','十','十一','十二'],
746 dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
747 dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
748 dayNamesMin: ['日','一','二','三','四','五','六'],
749 dateFormat: 'yy-mm-dd', firstDay: 1,
750 isRTL: false};
751 $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
752});
753/* Chinese initialisation for the jQuery UI date picker plugin. */
754/* Written by Ressol (ressol@gmail.com). */
755jQuery(function($){
756 $.datepicker.regional['zh-TW'] = {
757 closeText: '關閉',
758 prevText: '&#x3c;上月',
759 nextText: '下月&#x3e;',
760 currentText: '今天',
761 monthNames: ['一月','二月','三月','四月','五月','六月',
762 '七月','八月','九月','十月','十一月','十二月'],
763 monthNamesShort: ['一','二','三','四','五','六',
764 '七','八','九','十','十一','十二'],
765 dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
766 dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
767 dayNamesMin: ['日','一','二','三','四','五','六'],
768 dateFormat: 'yy/mm/dd', firstDay: 1,
769 isRTL: false};
770 $.datepicker.setDefaults($.datepicker.regional['zh-TW']);
771});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-ar.js b/static/development-bundle/ui/i18n/ui.datepicker-ar.js
new file mode 100644
index 0000000..b605878
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-ar.js
@@ -0,0 +1,20 @@
1/* Arabic Translation for jQuery UI date picker plugin. */
2/* Khaled Al Horani -- koko.dw@gmail.com */
3/* خالد الحوراني -- koko.dw@gmail.com */
4/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
5jQuery(function($){
6 $.datepicker.regional['ar'] = {
7 closeText: 'إغلاق',
8 prevText: '&#x3c;السابق',
9 nextText: 'التالي&#x3e;',
10 currentText: 'اليوم',
11 monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران',
12 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
13 monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
14 dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'],
15 dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
16 dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
17 dateFormat: 'dd/mm/yy', firstDay: 0,
18 isRTL: true};
19 $.datepicker.setDefaults($.datepicker.regional['ar']);
20}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-bg.js b/static/development-bundle/ui/i18n/ui.datepicker-bg.js
new file mode 100644
index 0000000..a73884e
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-bg.js
@@ -0,0 +1,20 @@
1/* Bulgarian initialisation for the jQuery UI date picker plugin. */
2/* Written by Stoyan Kyosev (http://svest.org). */
3jQuery(function($){
4 $.datepicker.regional['bg'] = {
5 closeText: 'затвори',
6 prevText: '&#x3c;назад',
7 nextText: 'напред&#x3e;',
8 nextBigText: '&#x3e;&#x3e;',
9 currentText: 'днес',
10 monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
11 'Юли','Август','Септември','Октомври','Ноември','Декември'],
12 monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
13 'Юли','Авг','Сеп','Окт','Нов','Дек'],
14 dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
15 dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
16 dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
17 dateFormat: 'dd.mm.yy', firstDay: 1,
18 isRTL: false};
19 $.datepicker.setDefaults($.datepicker.regional['bg']);
20});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-ca.js b/static/development-bundle/ui/i18n/ui.datepicker-ca.js
new file mode 100644
index 0000000..ad47af0
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-ca.js
@@ -0,0 +1,19 @@
1/* Inicialitzaci� en catal� per a l'extenci� 'calendar' per jQuery. */
2/* Writers: (joan.leon@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['ca'] = {
5 closeText: 'Tancar',
6 prevText: '&#x3c;Ant',
7 nextText: 'Seg&#x3e;',
8 currentText: 'Avui',
9 monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
10 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
11 monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
12 'Jul','Ago','Set','Oct','Nov','Des'],
13 dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
14 dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
15 dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
16 dateFormat: 'mm/dd/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['ca']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-cs.js b/static/development-bundle/ui/i18n/ui.datepicker-cs.js
new file mode 100644
index 0000000..334ae2f
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-cs.js
@@ -0,0 +1,19 @@
1/* Czech initialisation for the jQuery UI date picker plugin. */
2/* Written by Tomas Muller (tomas@tomas-muller.net). */
3jQuery(function($){
4 $.datepicker.regional['cs'] = {
5 closeText: 'Zavřít',
6 prevText: '&#x3c;Dříve',
7 nextText: 'Později&#x3e;',
8 currentText: 'Nyní',
9 monthNames: ['leden','únor','březen','duben','květen','červen',
10 'červenec','srpen','září','říjen','listopad','prosinec'],
11 monthNamesShort: ['led','úno','bře','dub','kvě','čer',
12 'čvc','srp','zář','říj','lis','pro'],
13 dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
14 dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
15 dayNamesMin: ['ne','po','út','st','čt','pá','so'],
16 dateFormat: 'dd.mm.yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['cs']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-da.js b/static/development-bundle/ui/i18n/ui.datepicker-da.js
new file mode 100644
index 0000000..8ad1e2c
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-da.js
@@ -0,0 +1,19 @@
1/* Danish initialisation for the jQuery UI date picker plugin. */
2/* Written by Jan Christensen ( deletestuff@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['da'] = {
5 closeText: 'Luk',
6 prevText: '&#x3c;Forrige',
7 nextText: 'Næste&#x3e;',
8 currentText: 'Idag',
9 monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
10 'Juli','August','September','Oktober','November','December'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
12 'Jul','Aug','Sep','Okt','Nov','Dec'],
13 dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
14 dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
15 dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
16 dateFormat: 'dd-mm-yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['da']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-de.js b/static/development-bundle/ui/i18n/ui.datepicker-de.js
new file mode 100644
index 0000000..f9299c8
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-de.js
@@ -0,0 +1,19 @@
1/* German initialisation for the jQuery UI date picker plugin. */
2/* Written by Milian Wolff (mail@milianw.de). */
3jQuery(function($){
4 $.datepicker.regional['de'] = {
5 closeText: 'schließen',
6 prevText: '&#x3c;zurück',
7 nextText: 'Vor&#x3e;',
8 currentText: 'heute',
9 monthNames: ['Januar','Februar','März','April','Mai','Juni',
10 'Juli','August','September','Oktober','November','Dezember'],
11 monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
12 'Jul','Aug','Sep','Okt','Nov','Dez'],
13 dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
14 dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
15 dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
16 dateFormat: 'dd.mm.yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['de']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-el.js b/static/development-bundle/ui/i18n/ui.datepicker-el.js
new file mode 100644
index 0000000..535080d
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-el.js
@@ -0,0 +1,19 @@
1/* Greek (el) initialisation for the jQuery UI date picker plugin. */
2/* Written by Alex Cicovic (http://www.alexcicovic.com) */
3jQuery(function($){
4 $.datepicker.regional['el'] = {
5 closeText: 'Κλείσιμο',
6 prevText: 'Προηγούμενος',
7 nextText: 'Επόμενος',
8 currentText: 'Τρέχων Μήνας',
9 monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
10 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
11 monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
12 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
13 dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
14 dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
15 dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
16 dateFormat: 'dd/mm/yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['el']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-eo.js b/static/development-bundle/ui/i18n/ui.datepicker-eo.js
new file mode 100644
index 0000000..28abac4
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-eo.js
@@ -0,0 +1,19 @@
1/* Esperanto initialisation for the jQuery UI date picker plugin. */
2/* Written by Olivier M. (olivierweb@ifrance.com). */
3jQuery(function($){
4 $.datepicker.regional['eo'] = {
5 closeText: 'Fermi',
6 prevText: '&lt;Anta',
7 nextText: 'Sekv&gt;',
8 currentText: 'Nuna',
9 monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
10 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
12 'Jul','Aŭg','Sep','Okt','Nov','Dec'],
13 dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
14 dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
15 dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['eo']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-es.js b/static/development-bundle/ui/i18n/ui.datepicker-es.js
new file mode 100644
index 0000000..0a699af
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-es.js
@@ -0,0 +1,19 @@
1/* Inicializaci�n en espa�ol para la extensi�n 'UI date picker' para jQuery. */
2/* Traducido por Vester (xvester@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['es'] = {
5 closeText: 'Cerrar',
6 prevText: '&#x3c;Ant',
7 nextText: 'Sig&#x3e;',
8 currentText: 'Hoy',
9 monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
10 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
11 monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
12 'Jul','Ago','Sep','Oct','Nov','Dic'],
13 dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
14 dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
15 dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['es']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-fa.js b/static/development-bundle/ui/i18n/ui.datepicker-fa.js
new file mode 100644
index 0000000..e40e1ac
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-fa.js
@@ -0,0 +1,19 @@
1/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
2/* Javad Mowlanezhad -- jmowla@gmail.com */
3/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
4jQuery(function($) {
5 $.datepicker.regional['fa'] = {
6 closeText: 'بستن',
7 prevText: '&#x3c;قبلي',
8 nextText: 'بعدي&#x3e;',
9 currentText: 'امروز',
10 monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور',
11 'مهر','آبان','آذر','دي','بهمن','اسفند'],
12 monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
13 dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'],
14 dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'],
15 dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'],
16 dateFormat: 'yy/mm/dd', firstDay: 6,
17 isRTL: true};
18 $.datepicker.setDefaults($.datepicker.regional['fa']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-fi.js b/static/development-bundle/ui/i18n/ui.datepicker-fi.js
new file mode 100644
index 0000000..3a0943f
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-fi.js
@@ -0,0 +1,19 @@
1/* Finnish initialisation for the jQuery UI date picker plugin. */
2/* Written by Harri Kilpi� (harrikilpio@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['fi'] = {
5 closeText: 'Sulje',
6 prevText: '&laquo;Edellinen',
7 nextText: 'Seuraava&raquo;',
8 currentText: 'T&auml;n&auml;&auml;n',
9 monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&auml;kuu',
10 'Hein&auml;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
11 monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&auml;',
12 'Hein&auml;','Elo','Syys','Loka','Marras','Joulu'],
13 dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'],
14 dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
15 dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
16 dateFormat: 'dd.mm.yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['fi']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-fr.js b/static/development-bundle/ui/i18n/ui.datepicker-fr.js
new file mode 100644
index 0000000..02edda2
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-fr.js
@@ -0,0 +1,19 @@
1/* French initialisation for the jQuery UI date picker plugin. */
2/* Written by Keith Wood (kbwood@virginbroadband.com.au) and Stéphane Nahmani (sholby@sholby.net). */
3jQuery(function($){
4 $.datepicker.regional['fr'] = {
5 closeText: 'Fermer',
6 prevText: '&#x3c;Préc',
7 nextText: 'Suiv&#x3e;',
8 currentText: 'Courant',
9 monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
10 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
11 monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
12 'Jul','Aoû','Sep','Oct','Nov','Déc'],
13 dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
14 dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
15 dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
16 dateFormat: 'dd/mm/yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['fr']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-he.js b/static/development-bundle/ui/i18n/ui.datepicker-he.js
new file mode 100644
index 0000000..38e0a03
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-he.js
@@ -0,0 +1,19 @@
1/* Hebrew initialisation for the UI Datepicker extension. */
2/* Written by Amir Hardon (ahardon at gmail dot com). */
3jQuery(function($){
4 $.datepicker.regional['he'] = {
5 closeText: 'סגור',
6 prevText: '&#x3c;הקודם',
7 nextText: 'הבא&#x3e;',
8 currentText: 'היום',
9 monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
10 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
11 monthNamesShort: ['1','2','3','4','5','6',
12 '7','8','9','10','11','12'],
13 dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
14 dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
15 dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: true};
18 $.datepicker.setDefaults($.datepicker.regional['he']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-hr.js b/static/development-bundle/ui/i18n/ui.datepicker-hr.js
new file mode 100644
index 0000000..78e4006
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-hr.js
@@ -0,0 +1,19 @@
1/* Croatian i18n for the jQuery UI date picker plugin. */
2/* Written by Vjekoslav Nesek. */
3jQuery(function($){
4 $.datepicker.regional['hr'] = {
5 closeText: 'Zatvori',
6 prevText: '&#x3c;',
7 nextText: '&#x3e;',
8 currentText: 'Danas',
9 monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipani',
10 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
11 monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
12 'Srp','Kol','Ruj','Lis','Stu','Pro'],
13 dayNames: ['Nedjalja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
14 dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
15 dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
16 dateFormat: 'dd.mm.yy.', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['hr']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-hu.js b/static/development-bundle/ui/i18n/ui.datepicker-hu.js
new file mode 100644
index 0000000..ee102ac
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-hu.js
@@ -0,0 +1,19 @@
1/* Hungarian initialisation for the jQuery UI date picker plugin. */
2/* Written by Istvan Karaszi (jquerycalendar@spam.raszi.hu). */
3jQuery(function($){
4 $.datepicker.regional['hu'] = {
5 closeText: 'bezárás',
6 prevText: '&laquo;&nbsp;vissza',
7 nextText: 'előre&nbsp;&raquo;',
8 currentText: 'ma',
9 monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
10 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
11 monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
12 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
13 dayNames: ['Vasámap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
14 dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
15 dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
16 dateFormat: 'yy-mm-dd', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['hu']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-hy.js b/static/development-bundle/ui/i18n/ui.datepicker-hy.js
new file mode 100644
index 0000000..1ffbeaa
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-hy.js
@@ -0,0 +1,19 @@
1/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
2/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
3jQuery(function($){
4 $.datepicker.regional['hy'] = {
5 closeText: 'Փակել',
6 prevText: '&#x3c;Նախ.',
7 nextText: 'Հաջ.&#x3e;',
8 currentText: 'Այսօր',
9 monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
10 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
11 monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
12 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
13 dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
14 dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
15 dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
16 dateFormat: 'dd.mm.yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['hy']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-id.js b/static/development-bundle/ui/i18n/ui.datepicker-id.js
new file mode 100644
index 0000000..e5246c8
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-id.js
@@ -0,0 +1,19 @@
1/* Indonesian initialisation for the jQuery UI date picker plugin. */
2/* Written by Deden Fathurahman (dedenf@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['id'] = {
5 closeText: 'Tutup',
6 prevText: '&#x3c;mundur',
7 nextText: 'maju&#x3e;',
8 currentText: 'hari ini',
9 monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
10 'Juli','Agustus','September','Oktober','Nopember','Desember'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
12 'Jul','Agus','Sep','Okt','Nop','Des'],
13 dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
14 dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
15 dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['id']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-is.js b/static/development-bundle/ui/i18n/ui.datepicker-is.js
new file mode 100644
index 0000000..68c1a07
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-is.js
@@ -0,0 +1,19 @@
1/* Icelandic initialisation for the jQuery UI date picker plugin. */
2/* Written by Haukur H. Thorsson (haukur@eskill.is). */
3jQuery(function($){
4 $.datepicker.regional['is'] = {
5 closeText: 'Loka',
6 prevText: '&#x3c; Fyrri',
7 nextText: 'N&aelig;sti &#x3e;',
8 currentText: '&Iacute; dag',
9 monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
10 'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
12 'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
13 dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
14 dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
15 dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['is']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-it.js b/static/development-bundle/ui/i18n/ui.datepicker-it.js
new file mode 100644
index 0000000..f3e691e
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-it.js
@@ -0,0 +1,19 @@
1/* Italian initialisation for the jQuery UI date picker plugin. */
2/* Written by Apaella (apaella@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['it'] = {
5 closeText: 'Chiudi',
6 prevText: '&#x3c;Prec',
7 nextText: 'Succ&#x3e;',
8 currentText: 'Oggi',
9 monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
10 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
11 monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
12 'Lug','Ago','Set','Ott','Nov','Dic'],
13 dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
14 dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
15 dayNamesMin: ['Do','Lu','Ma','Me','Gio','Ve','Sa'],
16 dateFormat: 'dd/mm/yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['it']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-ja.js b/static/development-bundle/ui/i18n/ui.datepicker-ja.js
new file mode 100644
index 0000000..a6a5f45
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-ja.js
@@ -0,0 +1,20 @@
1/* Japanese initialisation for the jQuery UI date picker plugin. */
2/* Written by Kentaro SATO (kentaro@ranvis.com). */
3jQuery(function($){
4 $.datepicker.regional['ja'] = {
5 closeText: '閉じる',
6 prevText: '&#x3c;前',
7 nextText: '次&#x3e;',
8 currentText: '今日',
9 monthNames: ['1月','2月','3月','4月','5月','6月',
10 '7月','8月','9月','10月','11月','12月'],
11 monthNamesShort: ['1月','2月','3月','4月','5月','6月',
12 '7月','8月','9月','10月','11月','12月'],
13 dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
14 dayNamesShort: ['日','月','火','水','木','金','土'],
15 dayNamesMin: ['日','月','火','水','木','金','土'],
16 dateFormat: 'yy/mm/dd', firstDay: 0,
17 isRTL: false,
18 showMonthAfterYear: true};
19 $.datepicker.setDefaults($.datepicker.regional['ja']);
20}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-ko.js b/static/development-bundle/ui/i18n/ui.datepicker-ko.js
new file mode 100644
index 0000000..53ede91
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-ko.js
@@ -0,0 +1,19 @@
1/* Korean initialisation for the jQuery calendar extension. */
2/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['ko'] = {
5 closeText: '닫기',
6 prevText: '이전달',
7 nextText: '다음달',
8 currentText: '오늘',
9 monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
10 '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
11 monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
12 '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
13 dayNames: ['일','월','화','수','목','금','토'],
14 dayNamesShort: ['일','월','화','수','목','금','토'],
15 dayNamesMin: ['일','월','화','수','목','금','토'],
16 dateFormat: 'yy-mm-dd', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['ko']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-lt.js b/static/development-bundle/ui/i18n/ui.datepicker-lt.js
new file mode 100644
index 0000000..a8a6aa1
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-lt.js
@@ -0,0 +1,19 @@
1/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
2/* @author Arturas Paleicikas <arturas@avalon.lt> */
3jQuery(function($){
4 $.datepicker.regional['lt'] = {
5 closeText: 'Uždaryti',
6 prevText: '&#x3c;Atgal',
7 nextText: 'Pirmyn&#x3e;',
8 currentText: 'Šiandien',
9 monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
10 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
11 monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
12 'Lie','Rugp','Rugs','Spa','Lap','Gru'],
13 dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
14 dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
15 dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
16 dateFormat: 'yy-mm-dd', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['lt']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-lv.js b/static/development-bundle/ui/i18n/ui.datepicker-lv.js
new file mode 100644
index 0000000..12c32f8
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-lv.js
@@ -0,0 +1,19 @@
1/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
2/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
3jQuery(function($){
4 $.datepicker.regional['lv'] = {
5 closeText: 'Aizvērt',
6 prevText: 'Iepr',
7 nextText: 'Nāka',
8 currentText: 'Šodien',
9 monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
10 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
12 'Jūl','Aug','Sep','Okt','Nov','Dec'],
13 dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
14 dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
15 dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
16 dateFormat: 'dd-mm-yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['lv']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-ms.js b/static/development-bundle/ui/i18n/ui.datepicker-ms.js
new file mode 100644
index 0000000..fa25305
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-ms.js
@@ -0,0 +1,19 @@
1/* Malaysian initialisation for the jQuery UI date picker plugin. */
2/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
3jQuery(function($){
4 $.datepicker.regional['ms'] = {
5 closeText: 'Tutup',
6 prevText: '&#x3c;Sebelum',
7 nextText: 'Selepas&#x3e;',
8 currentText: 'hari ini',
9 monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
10 'Julai','Ogos','September','Oktober','November','Disember'],
11 monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
12 'Jul','Ogo','Sep','Okt','Nov','Dis'],
13 dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
14 dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
15 dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['ms']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-nl.js b/static/development-bundle/ui/i18n/ui.datepicker-nl.js
new file mode 100644
index 0000000..938dc5e
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-nl.js
@@ -0,0 +1,19 @@
1/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
2/* Written by Mathias Bynens <http://mathiasbynens.be/> */
3jQuery(function($){
4 $.datepicker.regional.nl = {
5 closeText: 'Sluiten',
6 prevText: '←',
7 nextText: '→',
8 currentText: 'Vandaag',
9 monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
10 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
11 monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
12 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
13 dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
14 dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
15 dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
16 dateFormat: 'dd/mm/yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional.nl);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-no.js b/static/development-bundle/ui/i18n/ui.datepicker-no.js
new file mode 100644
index 0000000..d81f6bb
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-no.js
@@ -0,0 +1,19 @@
1/* Norwegian initialisation for the jQuery UI date picker plugin. */
2/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['no'] = {
5 closeText: 'Lukk',
6 prevText: '&laquo;Forrige',
7 nextText: 'Neste&raquo;',
8 currentText: 'I dag',
9 monthNames: ['Januar','Februar','Mars','April','Mai','Juni',
10 'Juli','August','September','Oktober','November','Desember'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun',
12 'Jul','Aug','Sep','Okt','Nov','Des'],
13 dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
14 dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
15 dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
16 dateFormat: 'yy-mm-dd', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['no']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-pl.js b/static/development-bundle/ui/i18n/ui.datepicker-pl.js
new file mode 100644
index 0000000..0ce38be
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-pl.js
@@ -0,0 +1,19 @@
1/* Polish initialisation for the jQuery UI date picker plugin. */
2/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['pl'] = {
5 closeText: 'Zamknij',
6 prevText: '&#x3c;Poprzedni',
7 nextText: 'Następny&#x3e;',
8 currentText: 'Dziś',
9 monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
10 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
11 monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
12 'Lip','Sie','Wrz','Pa','Lis','Gru'],
13 dayNames: ['Niedziela','Poniedzialek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
14 dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
15 dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
16 dateFormat: 'yy-mm-dd', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['pl']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-pt-BR.js b/static/development-bundle/ui/i18n/ui.datepicker-pt-BR.js
new file mode 100644
index 0000000..e3ac652
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-pt-BR.js
@@ -0,0 +1,19 @@
1/* Brazilian initialisation for the jQuery UI date picker plugin. */
2/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['pt-BR'] = {
5 closeText: 'Fechar',
6 prevText: '&#x3c;Anterior',
7 nextText: 'Pr&oacute;ximo&#x3e;',
8 currentText: 'Hoje',
9 monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
10 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
11 monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
12 'Jul','Ago','Set','Out','Nov','Dez'],
13 dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sabado'],
14 dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'],
15 dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-ro.js b/static/development-bundle/ui/i18n/ui.datepicker-ro.js
new file mode 100644
index 0000000..ec4033c
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-ro.js
@@ -0,0 +1,22 @@
1/* Romanian initialisation for the jQuery UI date picker plugin.
2 *
3 * Written by Edmond L. (ll_edmond@walla.com)
4 * and Ionut G. Stan (ionut.g.stan@gmail.com)
5 */
6jQuery(function($){
7 $.datepicker.regional['ro'] = {
8 closeText: 'Închide',
9 prevText: '&laquo; Luna precedentă',
10 nextText: 'Luna următoare &raquo;',
11 currentText: 'Azi',
12 monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
13 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
14 monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
15 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
16 dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
17 dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
18 dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
19 dateFormat: 'dd MM yy', firstDay: 1,
20 isRTL: false};
21 $.datepicker.setDefaults($.datepicker.regional['ro']);
22});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-ru.js b/static/development-bundle/ui/i18n/ui.datepicker-ru.js
new file mode 100644
index 0000000..62752c7
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-ru.js
@@ -0,0 +1,19 @@
1/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
2/* Written by Andrew Stromnov (stromnov@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['ru'] = {
5 closeText: 'Закрыть',
6 prevText: '&#x3c;Пред',
7 nextText: 'След&#x3e;',
8 currentText: 'Сегодня',
9 monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
10 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
11 monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
12 'Июл','Авг','Сен','Окт','Ноя','Дек'],
13 dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
14 dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
15 dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
16 dateFormat: 'dd.mm.yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['ru']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-sk.js b/static/development-bundle/ui/i18n/ui.datepicker-sk.js
new file mode 100644
index 0000000..a023ffa
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-sk.js
@@ -0,0 +1,19 @@
1/* Slovak initialisation for the jQuery UI date picker plugin. */
2/* Written by Vojtech Rinik (vojto@hmm.sk). */
3jQuery(function($){
4 $.datepicker.regional['sk'] = {
5 closeText: 'Zavrieť',
6 prevText: '&#x3c;Predchádzajúci',
7 nextText: 'Nasledujúci&#x3e;',
8 currentText: 'Dnes',
9 monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
10 'Júl','August','September','Október','November','December'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
12 'Júl','Aug','Sep','Okt','Nov','Dec'],
13 dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
14 dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
15 dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
16 dateFormat: 'dd.mm.yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['sk']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-sl.js b/static/development-bundle/ui/i18n/ui.datepicker-sl.js
new file mode 100644
index 0000000..480a4d8
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-sl.js
@@ -0,0 +1,20 @@
1/* Slovenian initialisation for the jQuery UI date picker plugin. */
2/* Written by Jaka Jancar (jaka@kubje.org). */
3/* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
4jQuery(function($){
5 $.datepicker.regional['sl'] = {
6 closeText: 'Zapri',
7 prevText: '&lt;Prej&#x161;nji',
8 nextText: 'Naslednji&gt;',
9 currentText: 'Trenutni',
10 monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
11 'Julij','Avgust','September','Oktober','November','December'],
12 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
13 'Jul','Avg','Sep','Okt','Nov','Dec'],
14 dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
15 dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
16 dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
17 dateFormat: 'dd.mm.yy', firstDay: 1,
18 isRTL: false};
19 $.datepicker.setDefaults($.datepicker.regional['sl']);
20});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-sq.js b/static/development-bundle/ui/i18n/ui.datepicker-sq.js
new file mode 100644
index 0000000..ac67e68
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-sq.js
@@ -0,0 +1,19 @@
1/* Albanian initialisation for the jQuery UI date picker plugin. */
2/* Written by Flakron Bytyqi (flakron@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['sq'] = {
5 closeText: 'mbylle',
6 prevText: '&#x3c;mbrapa',
7 nextText: 'Përpara&#x3e;',
8 currentText: 'sot',
9 monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
10 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
11 monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
12 'Kor','Gus','Sht','Tet','Nën','Dhj'],
13 dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
14 dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
15 dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
16 dateFormat: 'dd.mm.yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['sq']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-sr-SR.js b/static/development-bundle/ui/i18n/ui.datepicker-sr-SR.js
new file mode 100644
index 0000000..2f78f02
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-sr-SR.js
@@ -0,0 +1,19 @@
1/* Serbian i18n for the jQuery UI date picker plugin. */
2/* Written by Dejan Dimić. */
3jQuery(function($){
4 $.datepicker.regional['sr-SR'] = {
5 closeText: 'Zatvori',
6 prevText: '&#x3c;',
7 nextText: '&#x3e;',
8 currentText: 'Danas',
9 monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
10 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
12 'Jul','Avg','Sep','Okt','Nov','Dec'],
13 dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
14 dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
15 dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
16 dateFormat: 'dd/mm/yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['sr-SR']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-sr.js b/static/development-bundle/ui/i18n/ui.datepicker-sr.js
new file mode 100644
index 0000000..083e2c1
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-sr.js
@@ -0,0 +1,19 @@
1/* Serbian i18n for the jQuery UI date picker plugin. */
2/* Written by Dejan Dimić. */
3jQuery(function($){
4 $.datepicker.regional['sr'] = {
5 closeText: 'Затвори',
6 prevText: '&#x3c;',
7 nextText: '&#x3e;',
8 currentText: 'Данас',
9 monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
10 'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
11 monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
12 'Јул','Авг','Сеп','Окт','Нов','Дец'],
13 dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
14 dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
15 dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
16 dateFormat: 'dd/mm/yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['sr']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-sv.js b/static/development-bundle/ui/i18n/ui.datepicker-sv.js
new file mode 100644
index 0000000..47c4b24
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-sv.js
@@ -0,0 +1,19 @@
1/* Swedish initialisation for the jQuery UI date picker plugin. */
2/* Written by Anders Ekdahl ( anders@nomadiz.se). */
3jQuery(function($){
4 $.datepicker.regional['sv'] = {
5 closeText: 'Stäng',
6 prevText: '&laquo;Förra',
7 nextText: 'Nästa&raquo;',
8 currentText: 'Idag',
9 monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
10 'Juli','Augusti','September','Oktober','November','December'],
11 monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
12 'Jul','Aug','Sep','Okt','Nov','Dec'],
13 dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
14 dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
15 dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
16 dateFormat: 'yy-mm-dd', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['sv']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-th.js b/static/development-bundle/ui/i18n/ui.datepicker-th.js
new file mode 100644
index 0000000..3c2a02b
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-th.js
@@ -0,0 +1,19 @@
1/* Thai initialisation for the jQuery UI date picker plugin. */
2/* Written by pipo (pipo@sixhead.com). */
3jQuery(function($){
4 $.datepicker.regional['th'] = {
5 closeText: 'ปิด',
6 prevText: '&laquo;&nbsp;ย้อน',
7 nextText: 'ถัดไป&nbsp;&raquo;',
8 currentText: 'วันนี้',
9 monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
10 'กรกฏาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
11 monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
12 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
13 dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
14 dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
15 dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
16 dateFormat: 'dd/mm/yy', firstDay: 0,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['th']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-tr.js b/static/development-bundle/ui/i18n/ui.datepicker-tr.js
new file mode 100644
index 0000000..5817b2a
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-tr.js
@@ -0,0 +1,19 @@
1/* Turkish initialisation for the jQuery UI date picker plugin. */
2/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
3jQuery(function($){
4 $.datepicker.regional['tr'] = {
5 closeText: 'kapat',
6 prevText: '&#x3c;geri',
7 nextText: 'ileri&#x3e',
8 currentText: 'bugün',
9 monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
10 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
11 monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
12 'Tem','Ağu','Eyl','Eki','Kas','Ara'],
13 dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
14 dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
15 dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
16 dateFormat: 'dd.mm.yy', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['tr']);
19}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-uk.js b/static/development-bundle/ui/i18n/ui.datepicker-uk.js
new file mode 100644
index 0000000..1043d7c
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-uk.js
@@ -0,0 +1,25 @@
1/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
2/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['uk'] = {
5 clearText: 'Очистити', clearStatus: '',
6 closeText: 'Закрити', closeStatus: '',
7 prevText: '&#x3c;', prevStatus: '',
8 prevBigText: '&#x3c;&#x3c;', prevBigStatus: '',
9 nextText: '&#x3e;', nextStatus: '',
10 nextBigText: '&#x3e;&#x3e;', nextBigStatus: '',
11 currentText: 'Сьогодні', currentStatus: '',
12 monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
13 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
14 monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
15 'Лип','Сер','Вер','Жов','Лис','Гру'],
16 monthStatus: '', yearStatus: '',
17 weekHeader: 'Не', weekStatus: '',
18 dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
19 dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
20 dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
21 dayStatus: 'DD', dateStatus: 'D, M d',
22 dateFormat: 'dd/mm/yy', firstDay: 1,
23 initStatus: '', isRTL: false};
24 $.datepicker.setDefaults($.datepicker.regional['uk']);
25}); \ No newline at end of file
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-zh-CN.js b/static/development-bundle/ui/i18n/ui.datepicker-zh-CN.js
new file mode 100644
index 0000000..e3a69dc
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-zh-CN.js
@@ -0,0 +1,19 @@
1/* Chinese initialisation for the jQuery UI date picker plugin. */
2/* Written by Cloudream (cloudream@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['zh-CN'] = {
5 closeText: '关闭',
6 prevText: '&#x3c;上月',
7 nextText: '下月&#x3e;',
8 currentText: '今天',
9 monthNames: ['一月','二月','三月','四月','五月','六月',
10 '七月','八月','九月','十月','十一月','十二月'],
11 monthNamesShort: ['一','二','三','四','五','六',
12 '七','八','九','十','十一','十二'],
13 dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
14 dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
15 dayNamesMin: ['日','一','二','三','四','五','六'],
16 dateFormat: 'yy-mm-dd', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
19});
diff --git a/static/development-bundle/ui/i18n/ui.datepicker-zh-TW.js b/static/development-bundle/ui/i18n/ui.datepicker-zh-TW.js
new file mode 100644
index 0000000..9cb49b7
--- /dev/null
+++ b/static/development-bundle/ui/i18n/ui.datepicker-zh-TW.js
@@ -0,0 +1,19 @@
1/* Chinese initialisation for the jQuery UI date picker plugin. */
2/* Written by Ressol (ressol@gmail.com). */
3jQuery(function($){
4 $.datepicker.regional['zh-TW'] = {
5 closeText: '關閉',
6 prevText: '&#x3c;上月',
7 nextText: '下月&#x3e;',
8 currentText: '今天',
9 monthNames: ['一月','二月','三月','四月','五月','六月',
10 '七月','八月','九月','十月','十一月','十二月'],
11 monthNamesShort: ['一','二','三','四','五','六',
12 '七','八','九','十','十一','十二'],
13 dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
14 dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
15 dayNamesMin: ['日','一','二','三','四','五','六'],
16 dateFormat: 'yy/mm/dd', firstDay: 1,
17 isRTL: false};
18 $.datepicker.setDefaults($.datepicker.regional['zh-TW']);
19});
diff --git a/static/development-bundle/ui/jquery-ui-1.7.2.custom.js b/static/development-bundle/ui/jquery-ui-1.7.2.custom.js
new file mode 100644
index 0000000..01da18f
--- /dev/null
+++ b/static/development-bundle/ui/jquery-ui-1.7.2.custom.js
@@ -0,0 +1,9133 @@
1/*
2 * jQuery UI 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI
9 */
10;jQuery.ui || (function($) {
11
12var _remove = $.fn.remove,
13 isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);
14
15//Helper functions and ui object
16$.ui = {
17 version: "1.7.2",
18
19 // $.ui.plugin is deprecated. Use the proxy pattern instead.
20 plugin: {
21 add: function(module, option, set) {
22 var proto = $.ui[module].prototype;
23 for(var i in set) {
24 proto.plugins[i] = proto.plugins[i] || [];
25 proto.plugins[i].push([option, set[i]]);
26 }
27 },
28 call: function(instance, name, args) {
29 var set = instance.plugins[name];
30 if(!set || !instance.element[0].parentNode) { return; }
31
32 for (var i = 0; i < set.length; i++) {
33 if (instance.options[set[i][0]]) {
34 set[i][1].apply(instance.element, args);
35 }
36 }
37 }
38 },
39
40 contains: function(a, b) {
41 return document.compareDocumentPosition
42 ? a.compareDocumentPosition(b) & 16
43 : a !== b && a.contains(b);
44 },
45
46 hasScroll: function(el, a) {
47
48 //If overflow is hidden, the element might have extra content, but the user wants to hide it
49 if ($(el).css('overflow') == 'hidden') { return false; }
50
51 var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',
52 has = false;
53
54 if (el[scroll] > 0) { return true; }
55
56 // TODO: determine which cases actually cause this to happen
57 // if the element doesn't have the scroll set, see if it's possible to
58 // set the scroll
59 el[scroll] = 1;
60 has = (el[scroll] > 0);
61 el[scroll] = 0;
62 return has;
63 },
64
65 isOverAxis: function(x, reference, size) {
66 //Determines when x coordinate is over "b" element axis
67 return (x > reference) && (x < (reference + size));
68 },
69
70 isOver: function(y, x, top, left, height, width) {
71 //Determines when x, y coordinates is over "b" element
72 return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);
73 },
74
75 keyCode: {
76 BACKSPACE: 8,
77 CAPS_LOCK: 20,
78 COMMA: 188,
79 CONTROL: 17,
80 DELETE: 46,
81 DOWN: 40,
82 END: 35,
83 ENTER: 13,
84 ESCAPE: 27,
85 HOME: 36,
86 INSERT: 45,
87 LEFT: 37,
88 NUMPAD_ADD: 107,
89 NUMPAD_DECIMAL: 110,
90 NUMPAD_DIVIDE: 111,
91 NUMPAD_ENTER: 108,
92 NUMPAD_MULTIPLY: 106,
93 NUMPAD_SUBTRACT: 109,
94 PAGE_DOWN: 34,
95 PAGE_UP: 33,
96 PERIOD: 190,
97 RIGHT: 39,
98 SHIFT: 16,
99 SPACE: 32,
100 TAB: 9,
101 UP: 38
102 }
103};
104
105// WAI-ARIA normalization
106if (isFF2) {
107 var attr = $.attr,
108 removeAttr = $.fn.removeAttr,
109 ariaNS = "http://www.w3.org/2005/07/aaa",
110 ariaState = /^aria-/,
111 ariaRole = /^wairole:/;
112
113 $.attr = function(elem, name, value) {
114 var set = value !== undefined;
115
116 return (name == 'role'
117 ? (set
118 ? attr.call(this, elem, name, "wairole:" + value)
119 : (attr.apply(this, arguments) || "").replace(ariaRole, ""))
120 : (ariaState.test(name)
121 ? (set
122 ? elem.setAttributeNS(ariaNS,
123 name.replace(ariaState, "aaa:"), value)
124 : attr.call(this, elem, name.replace(ariaState, "aaa:")))
125 : attr.apply(this, arguments)));
126 };
127
128 $.fn.removeAttr = function(name) {
129 return (ariaState.test(name)
130 ? this.each(function() {
131 this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));
132 }) : removeAttr.call(this, name));
133 };
134}
135
136//jQuery plugins
137$.fn.extend({
138 remove: function() {
139 // Safari has a native remove event which actually removes DOM elements,
140 // so we have to use triggerHandler instead of trigger (#3037).
141 $("*", this).add(this).each(function() {
142 $(this).triggerHandler("remove");
143 });
144 return _remove.apply(this, arguments );
145 },
146
147 enableSelection: function() {
148 return this
149 .attr('unselectable', 'off')
150 .css('MozUserSelect', '')
151 .unbind('selectstart.ui');
152 },
153
154 disableSelection: function() {
155 return this
156 .attr('unselectable', 'on')
157 .css('MozUserSelect', 'none')
158 .bind('selectstart.ui', function() { return false; });
159 },
160
161 scrollParent: function() {
162 var scrollParent;
163 if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
164 scrollParent = this.parents().filter(function() {
165 return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
166 }).eq(0);
167 } else {
168 scrollParent = this.parents().filter(function() {
169 return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
170 }).eq(0);
171 }
172
173 return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
174 }
175});
176
177
178//Additional selectors
179$.extend($.expr[':'], {
180 data: function(elem, i, match) {
181 return !!$.data(elem, match[3]);
182 },
183
184 focusable: function(element) {
185 var nodeName = element.nodeName.toLowerCase(),
186 tabIndex = $.attr(element, 'tabindex');
187 return (/input|select|textarea|button|object/.test(nodeName)
188 ? !element.disabled
189 : 'a' == nodeName || 'area' == nodeName
190 ? element.href || !isNaN(tabIndex)
191 : !isNaN(tabIndex))
192 // the element and all of its ancestors must be visible
193 // the browser may report that the area is hidden
194 && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length;
195 },
196
197 tabbable: function(element) {
198 var tabIndex = $.attr(element, 'tabindex');
199 return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');
200 }
201});
202
203
204// $.widget is a factory to create jQuery plugins
205// taking some boilerplate code out of the plugin code
206function getter(namespace, plugin, method, args) {
207 function getMethods(type) {
208 var methods = $[namespace][plugin][type] || [];
209 return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);
210 }
211
212 var methods = getMethods('getter');
213 if (args.length == 1 && typeof args[0] == 'string') {
214 methods = methods.concat(getMethods('getterSetter'));
215 }
216 return ($.inArray(method, methods) != -1);
217}
218
219$.widget = function(name, prototype) {
220 var namespace = name.split(".")[0];
221 name = name.split(".")[1];
222
223 // create plugin method
224 $.fn[name] = function(options) {
225 var isMethodCall = (typeof options == 'string'),
226 args = Array.prototype.slice.call(arguments, 1);
227
228 // prevent calls to internal methods
229 if (isMethodCall && options.substring(0, 1) == '_') {
230 return this;
231 }
232
233 // handle getter methods
234 if (isMethodCall && getter(namespace, name, options, args)) {
235 var instance = $.data(this[0], name);
236 return (instance ? instance[options].apply(instance, args)
237 : undefined);
238 }
239
240 // handle initialization and non-getter methods
241 return this.each(function() {
242 var instance = $.data(this, name);
243
244 // constructor
245 (!instance && !isMethodCall &&
246 $.data(this, name, new $[namespace][name](this, options))._init());
247
248 // method call
249 (instance && isMethodCall && $.isFunction(instance[options]) &&
250 instance[options].apply(instance, args));
251 });
252 };
253
254 // create widget constructor
255 $[namespace] = $[namespace] || {};
256 $[namespace][name] = function(element, options) {
257 var self = this;
258
259 this.namespace = namespace;
260 this.widgetName = name;
261 this.widgetEventPrefix = $[namespace][name].eventPrefix || name;
262 this.widgetBaseClass = namespace + '-' + name;
263
264 this.options = $.extend({},
265 $.widget.defaults,
266 $[namespace][name].defaults,
267 $.metadata && $.metadata.get(element)[name],
268 options);
269
270 this.element = $(element)
271 .bind('setData.' + name, function(event, key, value) {
272 if (event.target == element) {
273 return self._setData(key, value);
274 }
275 })
276 .bind('getData.' + name, function(event, key) {
277 if (event.target == element) {
278 return self._getData(key);
279 }
280 })
281 .bind('remove', function() {
282 return self.destroy();
283 });
284 };
285
286 // add widget prototype
287 $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);
288
289 // TODO: merge getter and getterSetter properties from widget prototype
290 // and plugin prototype
291 $[namespace][name].getterSetter = 'option';
292};
293
294$.widget.prototype = {
295 _init: function() {},
296 destroy: function() {
297 this.element.removeData(this.widgetName)
298 .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')
299 .removeAttr('aria-disabled');
300 },
301
302 option: function(key, value) {
303 var options = key,
304 self = this;
305
306 if (typeof key == "string") {
307 if (value === undefined) {
308 return this._getData(key);
309 }
310 options = {};
311 options[key] = value;
312 }
313
314 $.each(options, function(key, value) {
315 self._setData(key, value);
316 });
317 },
318 _getData: function(key) {
319 return this.options[key];
320 },
321 _setData: function(key, value) {
322 this.options[key] = value;
323
324 if (key == 'disabled') {
325 this.element
326 [value ? 'addClass' : 'removeClass'](
327 this.widgetBaseClass + '-disabled' + ' ' +
328 this.namespace + '-state-disabled')
329 .attr("aria-disabled", value);
330 }
331 },
332
333 enable: function() {
334 this._setData('disabled', false);
335 },
336 disable: function() {
337 this._setData('disabled', true);
338 },
339
340 _trigger: function(type, event, data) {
341 var callback = this.options[type],
342 eventName = (type == this.widgetEventPrefix
343 ? type : this.widgetEventPrefix + type);
344
345 event = $.Event(event);
346 event.type = eventName;
347
348 // copy original event properties over to the new event
349 // this would happen if we could call $.event.fix instead of $.Event
350 // but we don't have a way to force an event to be fixed multiple times
351 if (event.originalEvent) {
352 for (var i = $.event.props.length, prop; i;) {
353 prop = $.event.props[--i];
354 event[prop] = event.originalEvent[prop];
355 }
356 }
357
358 this.element.trigger(event, data);
359
360 return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false
361 || event.isDefaultPrevented());
362 }
363};
364
365$.widget.defaults = {
366 disabled: false
367};
368
369
370/** Mouse Interaction Plugin **/
371
372$.ui.mouse = {
373 _mouseInit: function() {
374 var self = this;
375
376 this.element
377 .bind('mousedown.'+this.widgetName, function(event) {
378 return self._mouseDown(event);
379 })
380 .bind('click.'+this.widgetName, function(event) {
381 if(self._preventClickEvent) {
382 self._preventClickEvent = false;
383 event.stopImmediatePropagation();
384 return false;
385 }
386 });
387
388 // Prevent text selection in IE
389 if ($.browser.msie) {
390 this._mouseUnselectable = this.element.attr('unselectable');
391 this.element.attr('unselectable', 'on');
392 }
393
394 this.started = false;
395 },
396
397 // TODO: make sure destroying one instance of mouse doesn't mess with
398 // other instances of mouse
399 _mouseDestroy: function() {
400 this.element.unbind('.'+this.widgetName);
401
402 // Restore text selection in IE
403 ($.browser.msie
404 && this.element.attr('unselectable', this._mouseUnselectable));
405 },
406
407 _mouseDown: function(event) {
408 // don't let more than one widget handle mouseStart
409 // TODO: figure out why we have to use originalEvent
410 event.originalEvent = event.originalEvent || {};
411 if (event.originalEvent.mouseHandled) { return; }
412
413 // we may have missed mouseup (out of window)
414 (this._mouseStarted && this._mouseUp(event));
415
416 this._mouseDownEvent = event;
417
418 var self = this,
419 btnIsLeft = (event.which == 1),
420 elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
421 if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
422 return true;
423 }
424
425 this.mouseDelayMet = !this.options.delay;
426 if (!this.mouseDelayMet) {
427 this._mouseDelayTimer = setTimeout(function() {
428 self.mouseDelayMet = true;
429 }, this.options.delay);
430 }
431
432 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
433 this._mouseStarted = (this._mouseStart(event) !== false);
434 if (!this._mouseStarted) {
435 event.preventDefault();
436 return true;
437 }
438 }
439
440 // these delegates are required to keep context
441 this._mouseMoveDelegate = function(event) {
442 return self._mouseMove(event);
443 };
444 this._mouseUpDelegate = function(event) {
445 return self._mouseUp(event);
446 };
447 $(document)
448 .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
449 .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
450
451 // preventDefault() is used to prevent the selection of text here -
452 // however, in Safari, this causes select boxes not to be selectable
453 // anymore, so this fix is needed
454 ($.browser.safari || event.preventDefault());
455
456 event.originalEvent.mouseHandled = true;
457 return true;
458 },
459
460 _mouseMove: function(event) {
461 // IE mouseup check - mouseup happened when mouse was out of window
462 if ($.browser.msie && !event.button) {
463 return this._mouseUp(event);
464 }
465
466 if (this._mouseStarted) {
467 this._mouseDrag(event);
468 return event.preventDefault();
469 }
470
471 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
472 this._mouseStarted =
473 (this._mouseStart(this._mouseDownEvent, event) !== false);
474 (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
475 }
476
477 return !this._mouseStarted;
478 },
479
480 _mouseUp: function(event) {
481 $(document)
482 .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
483 .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
484
485 if (this._mouseStarted) {
486 this._mouseStarted = false;
487 this._preventClickEvent = (event.target == this._mouseDownEvent.target);
488 this._mouseStop(event);
489 }
490
491 return false;
492 },
493
494 _mouseDistanceMet: function(event) {
495 return (Math.max(
496 Math.abs(this._mouseDownEvent.pageX - event.pageX),
497 Math.abs(this._mouseDownEvent.pageY - event.pageY)
498 ) >= this.options.distance
499 );
500 },
501
502 _mouseDelayMet: function(event) {
503 return this.mouseDelayMet;
504 },
505
506 // These are placeholder methods, to be overriden by extending plugin
507 _mouseStart: function(event) {},
508 _mouseDrag: function(event) {},
509 _mouseStop: function(event) {},
510 _mouseCapture: function(event) { return true; }
511};
512
513$.ui.mouse.defaults = {
514 cancel: null,
515 distance: 1,
516 delay: 0
517};
518
519})(jQuery);
520/*
521 * jQuery UI Draggable 1.7.2
522 *
523 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
524 * Dual licensed under the MIT (MIT-LICENSE.txt)
525 * and GPL (GPL-LICENSE.txt) licenses.
526 *
527 * http://docs.jquery.com/UI/Draggables
528 *
529 * Depends:
530 * ui.core.js
531 */
532(function($) {
533
534$.widget("ui.draggable", $.extend({}, $.ui.mouse, {
535
536 _init: function() {
537
538 if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
539 this.element[0].style.position = 'relative';
540
541 (this.options.addClasses && this.element.addClass("ui-draggable"));
542 (this.options.disabled && this.element.addClass("ui-draggable-disabled"));
543
544 this._mouseInit();
545
546 },
547
548 destroy: function() {
549 if(!this.element.data('draggable')) return;
550 this.element
551 .removeData("draggable")
552 .unbind(".draggable")
553 .removeClass("ui-draggable"
554 + " ui-draggable-dragging"
555 + " ui-draggable-disabled");
556 this._mouseDestroy();
557 },
558
559 _mouseCapture: function(event) {
560
561 var o = this.options;
562
563 if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
564 return false;
565
566 //Quit if we're not on a valid handle
567 this.handle = this._getHandle(event);
568 if (!this.handle)
569 return false;
570
571 return true;
572
573 },
574
575 _mouseStart: function(event) {
576
577 var o = this.options;
578
579 //Create and append the visible helper
580 this.helper = this._createHelper(event);
581
582 //Cache the helper size
583 this._cacheHelperProportions();
584
585 //If ddmanager is used for droppables, set the global draggable
586 if($.ui.ddmanager)
587 $.ui.ddmanager.current = this;
588
589 /*
590 * - Position generation -
591 * This block generates everything position related - it's the core of draggables.
592 */
593
594 //Cache the margins of the original element
595 this._cacheMargins();
596
597 //Store the helper's css position
598 this.cssPosition = this.helper.css("position");
599 this.scrollParent = this.helper.scrollParent();
600
601 //The element's absolute position on the page minus margins
602 this.offset = this.element.offset();
603 this.offset = {
604 top: this.offset.top - this.margins.top,
605 left: this.offset.left - this.margins.left
606 };
607
608 $.extend(this.offset, {
609 click: { //Where the click happened, relative to the element
610 left: event.pageX - this.offset.left,
611 top: event.pageY - this.offset.top
612 },
613 parent: this._getParentOffset(),
614 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
615 });
616
617 //Generate the original position
618 this.originalPosition = this._generatePosition(event);
619 this.originalPageX = event.pageX;
620 this.originalPageY = event.pageY;
621
622 //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
623 if(o.cursorAt)
624 this._adjustOffsetFromHelper(o.cursorAt);
625
626 //Set a containment if given in the options
627 if(o.containment)
628 this._setContainment();
629
630 //Call plugins and callbacks
631 this._trigger("start", event);
632
633 //Recache the helper size
634 this._cacheHelperProportions();
635
636 //Prepare the droppable offsets
637 if ($.ui.ddmanager && !o.dropBehaviour)
638 $.ui.ddmanager.prepareOffsets(this, event);
639
640 this.helper.addClass("ui-draggable-dragging");
641 this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
642 return true;
643 },
644
645 _mouseDrag: function(event, noPropagation) {
646
647 //Compute the helpers position
648 this.position = this._generatePosition(event);
649 this.positionAbs = this._convertPositionTo("absolute");
650
651 //Call plugins and callbacks and use the resulting position if something is returned
652 if (!noPropagation) {
653 var ui = this._uiHash();
654 this._trigger('drag', event, ui);
655 this.position = ui.position;
656 }
657
658 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
659 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
660 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
661
662 return false;
663 },
664
665 _mouseStop: function(event) {
666
667 //If we are using droppables, inform the manager about the drop
668 var dropped = false;
669 if ($.ui.ddmanager && !this.options.dropBehaviour)
670 dropped = $.ui.ddmanager.drop(this, event);
671
672 //if a drop comes from outside (a sortable)
673 if(this.dropped) {
674 dropped = this.dropped;
675 this.dropped = false;
676 }
677
678 if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
679 var self = this;
680 $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
681 self._trigger("stop", event);
682 self._clear();
683 });
684 } else {
685 this._trigger("stop", event);
686 this._clear();
687 }
688
689 return false;
690 },
691
692 _getHandle: function(event) {
693
694 var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
695 $(this.options.handle, this.element)
696 .find("*")
697 .andSelf()
698 .each(function() {
699 if(this == event.target) handle = true;
700 });
701
702 return handle;
703
704 },
705
706 _createHelper: function(event) {
707
708 var o = this.options;
709 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element);
710
711 if(!helper.parents('body').length)
712 helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
713
714 if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
715 helper.css("position", "absolute");
716
717 return helper;
718
719 },
720
721 _adjustOffsetFromHelper: function(obj) {
722 if(obj.left != undefined) this.offset.click.left = obj.left + this.margins.left;
723 if(obj.right != undefined) this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
724 if(obj.top != undefined) this.offset.click.top = obj.top + this.margins.top;
725 if(obj.bottom != undefined) this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
726 },
727
728 _getParentOffset: function() {
729
730 //Get the offsetParent and cache its position
731 this.offsetParent = this.helper.offsetParent();
732 var po = this.offsetParent.offset();
733
734 // This is a special case where we need to modify a offset calculated on start, since the following happened:
735 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
736 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
737 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
738 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
739 po.left += this.scrollParent.scrollLeft();
740 po.top += this.scrollParent.scrollTop();
741 }
742
743 if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
744 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
745 po = { top: 0, left: 0 };
746
747 return {
748 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
749 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
750 };
751
752 },
753
754 _getRelativeOffset: function() {
755
756 if(this.cssPosition == "relative") {
757 var p = this.element.position();
758 return {
759 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
760 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
761 };
762 } else {
763 return { top: 0, left: 0 };
764 }
765
766 },
767
768 _cacheMargins: function() {
769 this.margins = {
770 left: (parseInt(this.element.css("marginLeft"),10) || 0),
771 top: (parseInt(this.element.css("marginTop"),10) || 0)
772 };
773 },
774
775 _cacheHelperProportions: function() {
776 this.helperProportions = {
777 width: this.helper.outerWidth(),
778 height: this.helper.outerHeight()
779 };
780 },
781
782 _setContainment: function() {
783
784 var o = this.options;
785 if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
786 if(o.containment == 'document' || o.containment == 'window') this.containment = [
787 0 - this.offset.relative.left - this.offset.parent.left,
788 0 - this.offset.relative.top - this.offset.parent.top,
789 $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
790 ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
791 ];
792
793 if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
794 var ce = $(o.containment)[0]; if(!ce) return;
795 var co = $(o.containment).offset();
796 var over = ($(ce).css("overflow") != 'hidden');
797
798 this.containment = [
799 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
800 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
801 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
802 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
803 ];
804 } else if(o.containment.constructor == Array) {
805 this.containment = o.containment;
806 }
807
808 },
809
810 _convertPositionTo: function(d, pos) {
811
812 if(!pos) pos = this.position;
813 var mod = d == "absolute" ? 1 : -1;
814 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
815
816 return {
817 top: (
818 pos.top // The absolute mouse position
819 + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
820 + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
821 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
822 ),
823 left: (
824 pos.left // The absolute mouse position
825 + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
826 + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
827 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
828 )
829 };
830
831 },
832
833 _generatePosition: function(event) {
834
835 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
836
837 // This is another very weird special case that only happens for relative elements:
838 // 1. If the css position is relative
839 // 2. and the scroll parent is the document or similar to the offset parent
840 // we have to refresh the relative offset during the scroll so there are no jumps
841 if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
842 this.offset.relative = this._getRelativeOffset();
843 }
844
845 var pageX = event.pageX;
846 var pageY = event.pageY;
847
848 /*
849 * - Position constraining -
850 * Constrain the position to a mix of grid, containment.
851 */
852
853 if(this.originalPosition) { //If we are not dragging yet, we won't check for options
854
855 if(this.containment) {
856 if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
857 if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
858 if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
859 if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
860 }
861
862 if(o.grid) {
863 var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
864 pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
865
866 var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
867 pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
868 }
869
870 }
871
872 return {
873 top: (
874 pageY // The absolute mouse position
875 - this.offset.click.top // Click offset (relative to the element)
876 - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
877 - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
878 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
879 ),
880 left: (
881 pageX // The absolute mouse position
882 - this.offset.click.left // Click offset (relative to the element)
883 - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
884 - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
885 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
886 )
887 };
888
889 },
890
891 _clear: function() {
892 this.helper.removeClass("ui-draggable-dragging");
893 if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
894 //if($.ui.ddmanager) $.ui.ddmanager.current = null;
895 this.helper = null;
896 this.cancelHelperRemoval = false;
897 },
898
899 // From now on bulk stuff - mainly helpers
900
901 _trigger: function(type, event, ui) {
902 ui = ui || this._uiHash();
903 $.ui.plugin.call(this, type, [event, ui]);
904 if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
905 return $.widget.prototype._trigger.call(this, type, event, ui);
906 },
907
908 plugins: {},
909
910 _uiHash: function(event) {
911 return {
912 helper: this.helper,
913 position: this.position,
914 absolutePosition: this.positionAbs, //deprecated
915 offset: this.positionAbs
916 };
917 }
918
919}));
920
921$.extend($.ui.draggable, {
922 version: "1.7.2",
923 eventPrefix: "drag",
924 defaults: {
925 addClasses: true,
926 appendTo: "parent",
927 axis: false,
928 cancel: ":input,option",
929 connectToSortable: false,
930 containment: false,
931 cursor: "auto",
932 cursorAt: false,
933 delay: 0,
934 distance: 1,
935 grid: false,
936 handle: false,
937 helper: "original",
938 iframeFix: false,
939 opacity: false,
940 refreshPositions: false,
941 revert: false,
942 revertDuration: 500,
943 scope: "default",
944 scroll: true,
945 scrollSensitivity: 20,
946 scrollSpeed: 20,
947 snap: false,
948 snapMode: "both",
949 snapTolerance: 20,
950 stack: false,
951 zIndex: false
952 }
953});
954
955$.ui.plugin.add("draggable", "connectToSortable", {
956 start: function(event, ui) {
957
958 var inst = $(this).data("draggable"), o = inst.options,
959 uiSortable = $.extend({}, ui, { item: inst.element });
960 inst.sortables = [];
961 $(o.connectToSortable).each(function() {
962 var sortable = $.data(this, 'sortable');
963 if (sortable && !sortable.options.disabled) {
964 inst.sortables.push({
965 instance: sortable,
966 shouldRevert: sortable.options.revert
967 });
968 sortable._refreshItems(); //Do a one-time refresh at start to refresh the containerCache
969 sortable._trigger("activate", event, uiSortable);
970 }
971 });
972
973 },
974 stop: function(event, ui) {
975
976 //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
977 var inst = $(this).data("draggable"),
978 uiSortable = $.extend({}, ui, { item: inst.element });
979
980 $.each(inst.sortables, function() {
981 if(this.instance.isOver) {
982
983 this.instance.isOver = 0;
984
985 inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
986 this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
987
988 //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
989 if(this.shouldRevert) this.instance.options.revert = true;
990
991 //Trigger the stop of the sortable
992 this.instance._mouseStop(event);
993
994 this.instance.options.helper = this.instance.options._helper;
995
996 //If the helper has been the original item, restore properties in the sortable
997 if(inst.options.helper == 'original')
998 this.instance.currentItem.css({ top: 'auto', left: 'auto' });
999
1000 } else {
1001 this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
1002 this.instance._trigger("deactivate", event, uiSortable);
1003 }
1004
1005 });
1006
1007 },
1008 drag: function(event, ui) {
1009
1010 var inst = $(this).data("draggable"), self = this;
1011
1012 var checkPos = function(o) {
1013 var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
1014 var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
1015 var itemHeight = o.height, itemWidth = o.width;
1016 var itemTop = o.top, itemLeft = o.left;
1017
1018 return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
1019 };
1020
1021 $.each(inst.sortables, function(i) {
1022
1023 //Copy over some variables to allow calling the sortable's native _intersectsWith
1024 this.instance.positionAbs = inst.positionAbs;
1025 this.instance.helperProportions = inst.helperProportions;
1026 this.instance.offset.click = inst.offset.click;
1027
1028 if(this.instance._intersectsWith(this.instance.containerCache)) {
1029
1030 //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
1031 if(!this.instance.isOver) {
1032
1033 this.instance.isOver = 1;
1034 //Now we fake the start of dragging for the sortable instance,
1035 //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
1036 //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
1037 this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
1038 this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
1039 this.instance.options.helper = function() { return ui.helper[0]; };
1040
1041 event.target = this.instance.currentItem[0];
1042 this.instance._mouseCapture(event, true);
1043 this.instance._mouseStart(event, true, true);
1044
1045 //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
1046 this.instance.offset.click.top = inst.offset.click.top;
1047 this.instance.offset.click.left = inst.offset.click.left;
1048 this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
1049 this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
1050
1051 inst._trigger("toSortable", event);
1052 inst.dropped = this.instance.element; //draggable revert needs that
1053 //hack so receive/update callbacks work (mostly)
1054 inst.currentItem = inst.element;
1055 this.instance.fromOutside = inst;
1056
1057 }
1058
1059 //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
1060 if(this.instance.currentItem) this.instance._mouseDrag(event);
1061
1062 } else {
1063
1064 //If it doesn't intersect with the sortable, and it intersected before,
1065 //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
1066 if(this.instance.isOver) {
1067
1068 this.instance.isOver = 0;
1069 this.instance.cancelHelperRemoval = true;
1070
1071 //Prevent reverting on this forced stop
1072 this.instance.options.revert = false;
1073
1074 // The out event needs to be triggered independently
1075 this.instance._trigger('out', event, this.instance._uiHash(this.instance));
1076
1077 this.instance._mouseStop(event, true);
1078 this.instance.options.helper = this.instance.options._helper;
1079
1080 //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
1081 this.instance.currentItem.remove();
1082 if(this.instance.placeholder) this.instance.placeholder.remove();
1083
1084 inst._trigger("fromSortable", event);
1085 inst.dropped = false; //draggable revert needs that
1086 }
1087
1088 };
1089
1090 });
1091
1092 }
1093});
1094
1095$.ui.plugin.add("draggable", "cursor", {
1096 start: function(event, ui) {
1097 var t = $('body'), o = $(this).data('draggable').options;
1098 if (t.css("cursor")) o._cursor = t.css("cursor");
1099 t.css("cursor", o.cursor);
1100 },
1101 stop: function(event, ui) {
1102 var o = $(this).data('draggable').options;
1103 if (o._cursor) $('body').css("cursor", o._cursor);
1104 }
1105});
1106
1107$.ui.plugin.add("draggable", "iframeFix", {
1108 start: function(event, ui) {
1109 var o = $(this).data('draggable').options;
1110 $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
1111 $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
1112 .css({
1113 width: this.offsetWidth+"px", height: this.offsetHeight+"px",
1114 position: "absolute", opacity: "0.001", zIndex: 1000
1115 })
1116 .css($(this).offset())
1117 .appendTo("body");
1118 });
1119 },
1120 stop: function(event, ui) {
1121 $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers
1122 }
1123});
1124
1125$.ui.plugin.add("draggable", "opacity", {
1126 start: function(event, ui) {
1127 var t = $(ui.helper), o = $(this).data('draggable').options;
1128 if(t.css("opacity")) o._opacity = t.css("opacity");
1129 t.css('opacity', o.opacity);
1130 },
1131 stop: function(event, ui) {
1132 var o = $(this).data('draggable').options;
1133 if(o._opacity) $(ui.helper).css('opacity', o._opacity);
1134 }
1135});
1136
1137$.ui.plugin.add("draggable", "scroll", {
1138 start: function(event, ui) {
1139 var i = $(this).data("draggable");
1140 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
1141 },
1142 drag: function(event, ui) {
1143
1144 var i = $(this).data("draggable"), o = i.options, scrolled = false;
1145
1146 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
1147
1148 if(!o.axis || o.axis != 'x') {
1149 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
1150 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
1151 else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
1152 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
1153 }
1154
1155 if(!o.axis || o.axis != 'y') {
1156 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
1157 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
1158 else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
1159 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
1160 }
1161
1162 } else {
1163
1164 if(!o.axis || o.axis != 'x') {
1165 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
1166 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
1167 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
1168 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
1169 }
1170
1171 if(!o.axis || o.axis != 'y') {
1172 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
1173 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
1174 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
1175 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
1176 }
1177
1178 }
1179
1180 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
1181 $.ui.ddmanager.prepareOffsets(i, event);
1182
1183 }
1184});
1185
1186$.ui.plugin.add("draggable", "snap", {
1187 start: function(event, ui) {
1188
1189 var i = $(this).data("draggable"), o = i.options;
1190 i.snapElements = [];
1191
1192 $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
1193 var $t = $(this); var $o = $t.offset();
1194 if(this != i.element[0]) i.snapElements.push({
1195 item: this,
1196 width: $t.outerWidth(), height: $t.outerHeight(),
1197 top: $o.top, left: $o.left
1198 });
1199 });
1200
1201 },
1202 drag: function(event, ui) {
1203
1204 var inst = $(this).data("draggable"), o = inst.options;
1205 var d = o.snapTolerance;
1206
1207 var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
1208 y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
1209
1210 for (var i = inst.snapElements.length - 1; i >= 0; i--){
1211
1212 var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
1213 t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
1214
1215 //Yes, I know, this is insane ;)
1216 if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
1217 if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
1218 inst.snapElements[i].snapping = false;
1219 continue;
1220 }
1221
1222 if(o.snapMode != 'inner') {
1223 var ts = Math.abs(t - y2) <= d;
1224 var bs = Math.abs(b - y1) <= d;
1225 var ls = Math.abs(l - x2) <= d;
1226 var rs = Math.abs(r - x1) <= d;
1227 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
1228 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
1229 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
1230 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
1231 }
1232
1233 var first = (ts || bs || ls || rs);
1234
1235 if(o.snapMode != 'outer') {
1236 var ts = Math.abs(t - y1) <= d;
1237 var bs = Math.abs(b - y2) <= d;
1238 var ls = Math.abs(l - x1) <= d;
1239 var rs = Math.abs(r - x2) <= d;
1240 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
1241 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
1242 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
1243 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
1244 }
1245
1246 if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
1247 (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
1248 inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
1249
1250 };
1251
1252 }
1253});
1254
1255$.ui.plugin.add("draggable", "stack", {
1256 start: function(event, ui) {
1257
1258 var o = $(this).data("draggable").options;
1259
1260 var group = $.makeArray($(o.stack.group)).sort(function(a,b) {
1261 return (parseInt($(a).css("zIndex"),10) || o.stack.min) - (parseInt($(b).css("zIndex"),10) || o.stack.min);
1262 });
1263
1264 $(group).each(function(i) {
1265 this.style.zIndex = o.stack.min + i;
1266 });
1267
1268 this[0].style.zIndex = o.stack.min + group.length;
1269
1270 }
1271});
1272
1273$.ui.plugin.add("draggable", "zIndex", {
1274 start: function(event, ui) {
1275 var t = $(ui.helper), o = $(this).data("draggable").options;
1276 if(t.css("zIndex")) o._zIndex = t.css("zIndex");
1277 t.css('zIndex', o.zIndex);
1278 },
1279 stop: function(event, ui) {
1280 var o = $(this).data("draggable").options;
1281 if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
1282 }
1283});
1284
1285})(jQuery);
1286/*
1287 * jQuery UI Droppable 1.7.2
1288 *
1289 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
1290 * Dual licensed under the MIT (MIT-LICENSE.txt)
1291 * and GPL (GPL-LICENSE.txt) licenses.
1292 *
1293 * http://docs.jquery.com/UI/Droppables
1294 *
1295 * Depends:
1296 * ui.core.js
1297 * ui.draggable.js
1298 */
1299(function($) {
1300
1301$.widget("ui.droppable", {
1302
1303 _init: function() {
1304
1305 var o = this.options, accept = o.accept;
1306 this.isover = 0; this.isout = 1;
1307
1308 this.options.accept = this.options.accept && $.isFunction(this.options.accept) ? this.options.accept : function(d) {
1309 return d.is(accept);
1310 };
1311
1312 //Store the droppable's proportions
1313 this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
1314
1315 // Add the reference and positions to the manager
1316 $.ui.ddmanager.droppables[this.options.scope] = $.ui.ddmanager.droppables[this.options.scope] || [];
1317 $.ui.ddmanager.droppables[this.options.scope].push(this);
1318
1319 (this.options.addClasses && this.element.addClass("ui-droppable"));
1320
1321 },
1322
1323 destroy: function() {
1324 var drop = $.ui.ddmanager.droppables[this.options.scope];
1325 for ( var i = 0; i < drop.length; i++ )
1326 if ( drop[i] == this )
1327 drop.splice(i, 1);
1328
1329 this.element
1330 .removeClass("ui-droppable ui-droppable-disabled")
1331 .removeData("droppable")
1332 .unbind(".droppable");
1333 },
1334
1335 _setData: function(key, value) {
1336
1337 if(key == 'accept') {
1338 this.options.accept = value && $.isFunction(value) ? value : function(d) {
1339 return d.is(value);
1340 };
1341 } else {
1342 $.widget.prototype._setData.apply(this, arguments);
1343 }
1344
1345 },
1346
1347 _activate: function(event) {
1348 var draggable = $.ui.ddmanager.current;
1349 if(this.options.activeClass) this.element.addClass(this.options.activeClass);
1350 (draggable && this._trigger('activate', event, this.ui(draggable)));
1351 },
1352
1353 _deactivate: function(event) {
1354 var draggable = $.ui.ddmanager.current;
1355 if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
1356 (draggable && this._trigger('deactivate', event, this.ui(draggable)));
1357 },
1358
1359 _over: function(event) {
1360
1361 var draggable = $.ui.ddmanager.current;
1362 if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
1363
1364 if (this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
1365 if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
1366 this._trigger('over', event, this.ui(draggable));
1367 }
1368
1369 },
1370
1371 _out: function(event) {
1372
1373 var draggable = $.ui.ddmanager.current;
1374 if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
1375
1376 if (this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
1377 if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
1378 this._trigger('out', event, this.ui(draggable));
1379 }
1380
1381 },
1382
1383 _drop: function(event,custom) {
1384
1385 var draggable = custom || $.ui.ddmanager.current;
1386 if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element
1387
1388 var childrenIntersection = false;
1389 this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
1390 var inst = $.data(this, 'droppable');
1391 if(inst.options.greedy && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)) {
1392 childrenIntersection = true; return false;
1393 }
1394 });
1395 if(childrenIntersection) return false;
1396
1397 if(this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
1398 if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
1399 if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
1400 this._trigger('drop', event, this.ui(draggable));
1401 return this.element;
1402 }
1403
1404 return false;
1405
1406 },
1407
1408 ui: function(c) {
1409 return {
1410 draggable: (c.currentItem || c.element),
1411 helper: c.helper,
1412 position: c.position,
1413 absolutePosition: c.positionAbs, //deprecated
1414 offset: c.positionAbs
1415 };
1416 }
1417
1418});
1419
1420$.extend($.ui.droppable, {
1421 version: "1.7.2",
1422 eventPrefix: 'drop',
1423 defaults: {
1424 accept: '*',
1425 activeClass: false,
1426 addClasses: true,
1427 greedy: false,
1428 hoverClass: false,
1429 scope: 'default',
1430 tolerance: 'intersect'
1431 }
1432});
1433
1434$.ui.intersect = function(draggable, droppable, toleranceMode) {
1435
1436 if (!droppable.offset) return false;
1437
1438 var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
1439 y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
1440 var l = droppable.offset.left, r = l + droppable.proportions.width,
1441 t = droppable.offset.top, b = t + droppable.proportions.height;
1442
1443 switch (toleranceMode) {
1444 case 'fit':
1445 return (l < x1 && x2 < r
1446 && t < y1 && y2 < b);
1447 break;
1448 case 'intersect':
1449 return (l < x1 + (draggable.helperProportions.width / 2) // Right Half
1450 && x2 - (draggable.helperProportions.width / 2) < r // Left Half
1451 && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half
1452 && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
1453 break;
1454 case 'pointer':
1455 var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),
1456 draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),
1457 isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
1458 return isOver;
1459 break;
1460 case 'touch':
1461 return (
1462 (y1 >= t && y1 <= b) || // Top edge touching
1463 (y2 >= t && y2 <= b) || // Bottom edge touching
1464 (y1 < t && y2 > b) // Surrounded vertically
1465 ) && (
1466 (x1 >= l && x1 <= r) || // Left edge touching
1467 (x2 >= l && x2 <= r) || // Right edge touching
1468 (x1 < l && x2 > r) // Surrounded horizontally
1469 );
1470 break;
1471 default:
1472 return false;
1473 break;
1474 }
1475
1476};
1477
1478/*
1479 This manager tracks offsets of draggables and droppables
1480*/
1481$.ui.ddmanager = {
1482 current: null,
1483 droppables: { 'default': [] },
1484 prepareOffsets: function(t, event) {
1485
1486 var m = $.ui.ddmanager.droppables[t.options.scope];
1487 var type = event ? event.type : null; // workaround for #2317
1488 var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
1489
1490 droppablesLoop: for (var i = 0; i < m.length; i++) {
1491
1492 if(m[i].options.disabled || (t && !m[i].options.accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted
1493 for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item
1494 m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue
1495
1496 m[i].offset = m[i].element.offset();
1497 m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
1498
1499 if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables
1500
1501 }
1502
1503 },
1504 drop: function(draggable, event) {
1505
1506 var dropped = false;
1507 $.each($.ui.ddmanager.droppables[draggable.options.scope], function() {
1508
1509 if(!this.options) return;
1510 if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
1511 dropped = this._drop.call(this, event);
1512
1513 if (!this.options.disabled && this.visible && this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
1514 this.isout = 1; this.isover = 0;
1515 this._deactivate.call(this, event);
1516 }
1517
1518 });
1519 return dropped;
1520
1521 },
1522 drag: function(draggable, event) {
1523
1524 //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
1525 if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);
1526
1527 //Run through all droppables and check their positions based on specific tolerance options
1528
1529 $.each($.ui.ddmanager.droppables[draggable.options.scope], function() {
1530
1531 if(this.options.disabled || this.greedyChild || !this.visible) return;
1532 var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
1533
1534 var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
1535 if(!c) return;
1536
1537 var parentInstance;
1538 if (this.options.greedy) {
1539 var parent = this.element.parents(':data(droppable):eq(0)');
1540 if (parent.length) {
1541 parentInstance = $.data(parent[0], 'droppable');
1542 parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
1543 }
1544 }
1545
1546 // we just moved into a greedy child
1547 if (parentInstance && c == 'isover') {
1548 parentInstance['isover'] = 0;
1549 parentInstance['isout'] = 1;
1550 parentInstance._out.call(parentInstance, event);
1551 }
1552
1553 this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;
1554 this[c == "isover" ? "_over" : "_out"].call(this, event);
1555
1556 // we just moved out of a greedy child
1557 if (parentInstance && c == 'isout') {
1558 parentInstance['isout'] = 0;
1559 parentInstance['isover'] = 1;
1560 parentInstance._over.call(parentInstance, event);
1561 }
1562 });
1563
1564 }
1565};
1566
1567})(jQuery);
1568/*
1569 * jQuery UI Resizable 1.7.2
1570 *
1571 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
1572 * Dual licensed under the MIT (MIT-LICENSE.txt)
1573 * and GPL (GPL-LICENSE.txt) licenses.
1574 *
1575 * http://docs.jquery.com/UI/Resizables
1576 *
1577 * Depends:
1578 * ui.core.js
1579 */
1580(function($) {
1581
1582$.widget("ui.resizable", $.extend({}, $.ui.mouse, {
1583
1584 _init: function() {
1585
1586 var self = this, o = this.options;
1587 this.element.addClass("ui-resizable");
1588
1589 $.extend(this, {
1590 _aspectRatio: !!(o.aspectRatio),
1591 aspectRatio: o.aspectRatio,
1592 originalElement: this.element,
1593 _proportionallyResizeElements: [],
1594 _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
1595 });
1596
1597 //Wrap the element if it cannot hold child nodes
1598 if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
1599
1600 //Opera fix for relative positioning
1601 if (/relative/.test(this.element.css('position')) && $.browser.opera)
1602 this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
1603
1604 //Create a wrapper element and set the wrapper to the new current internal element
1605 this.element.wrap(
1606 $('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
1607 position: this.element.css('position'),
1608 width: this.element.outerWidth(),
1609 height: this.element.outerHeight(),
1610 top: this.element.css('top'),
1611 left: this.element.css('left')
1612 })
1613 );
1614
1615 //Overwrite the original this.element
1616 this.element = this.element.parent().data(
1617 "resizable", this.element.data('resizable')
1618 );
1619
1620 this.elementIsWrapper = true;
1621
1622 //Move margins to the wrapper
1623 this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
1624 this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
1625
1626 //Prevent Safari textarea resize
1627 this.originalResizeStyle = this.originalElement.css('resize');
1628 this.originalElement.css('resize', 'none');
1629
1630 //Push the actual element to our proportionallyResize internal array
1631 this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
1632
1633 // avoid IE jump (hard set the margin)
1634 this.originalElement.css({ margin: this.originalElement.css('margin') });
1635
1636 // fix handlers offset
1637 this._proportionallyResize();
1638
1639 }
1640
1641 this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
1642 if(this.handles.constructor == String) {
1643
1644 if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
1645 var n = this.handles.split(","); this.handles = {};
1646
1647 for(var i = 0; i < n.length; i++) {
1648
1649 var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
1650 var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
1651
1652 // increase zIndex of sw, se, ne, nw axis
1653 //TODO : this modifies original option
1654 if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
1655
1656 //TODO : What's going on here?
1657 if ('se' == handle) {
1658 axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
1659 };
1660
1661 //Insert into internal handles object and append to element
1662 this.handles[handle] = '.ui-resizable-'+handle;
1663 this.element.append(axis);
1664 }
1665
1666 }
1667
1668 this._renderAxis = function(target) {
1669
1670 target = target || this.element;
1671
1672 for(var i in this.handles) {
1673
1674 if(this.handles[i].constructor == String)
1675 this.handles[i] = $(this.handles[i], this.element).show();
1676
1677 //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
1678 if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
1679
1680 var axis = $(this.handles[i], this.element), padWrapper = 0;
1681
1682 //Checking the correct pad and border
1683 padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
1684
1685 //The padding type i have to apply...
1686 var padPos = [ 'padding',
1687 /ne|nw|n/.test(i) ? 'Top' :
1688 /se|sw|s/.test(i) ? 'Bottom' :
1689 /^e$/.test(i) ? 'Right' : 'Left' ].join("");
1690
1691 target.css(padPos, padWrapper);
1692
1693 this._proportionallyResize();
1694
1695 }
1696
1697 //TODO: What's that good for? There's not anything to be executed left
1698 if(!$(this.handles[i]).length)
1699 continue;
1700
1701 }
1702 };
1703
1704 //TODO: make renderAxis a prototype function
1705 this._renderAxis(this.element);
1706
1707 this._handles = $('.ui-resizable-handle', this.element)
1708 .disableSelection();
1709
1710 //Matching axis name
1711 this._handles.mouseover(function() {
1712 if (!self.resizing) {
1713 if (this.className)
1714 var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
1715 //Axis, default = se
1716 self.axis = axis && axis[1] ? axis[1] : 'se';
1717 }
1718 });
1719
1720 //If we want to auto hide the elements
1721 if (o.autoHide) {
1722 this._handles.hide();
1723 $(this.element)
1724 .addClass("ui-resizable-autohide")
1725 .hover(function() {
1726 $(this).removeClass("ui-resizable-autohide");
1727 self._handles.show();
1728 },
1729 function(){
1730 if (!self.resizing) {
1731 $(this).addClass("ui-resizable-autohide");
1732 self._handles.hide();
1733 }
1734 });
1735 }
1736
1737 //Initialize the mouse interaction
1738 this._mouseInit();
1739
1740 },
1741
1742 destroy: function() {
1743
1744 this._mouseDestroy();
1745
1746 var _destroy = function(exp) {
1747 $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
1748 .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
1749 };
1750
1751 //TODO: Unwrap at same DOM position
1752 if (this.elementIsWrapper) {
1753 _destroy(this.element);
1754 var wrapper = this.element;
1755 wrapper.parent().append(
1756 this.originalElement.css({
1757 position: wrapper.css('position'),
1758 width: wrapper.outerWidth(),
1759 height: wrapper.outerHeight(),
1760 top: wrapper.css('top'),
1761 left: wrapper.css('left')
1762 })
1763 ).end().remove();
1764 }
1765
1766 this.originalElement.css('resize', this.originalResizeStyle);
1767 _destroy(this.originalElement);
1768
1769 },
1770
1771 _mouseCapture: function(event) {
1772
1773 var handle = false;
1774 for(var i in this.handles) {
1775 if($(this.handles[i])[0] == event.target) handle = true;
1776 }
1777
1778 return this.options.disabled || !!handle;
1779
1780 },
1781
1782 _mouseStart: function(event) {
1783
1784 var o = this.options, iniPos = this.element.position(), el = this.element;
1785
1786 this.resizing = true;
1787 this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
1788
1789 // bugfix for http://dev.jquery.com/ticket/1749
1790 if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
1791 el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
1792 }
1793
1794 //Opera fixing relative position
1795 if ($.browser.opera && (/relative/).test(el.css('position')))
1796 el.css({ position: 'relative', top: 'auto', left: 'auto' });
1797
1798 this._renderProxy();
1799
1800 var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
1801
1802 if (o.containment) {
1803 curleft += $(o.containment).scrollLeft() || 0;
1804 curtop += $(o.containment).scrollTop() || 0;
1805 }
1806
1807 //Store needed variables
1808 this.offset = this.helper.offset();
1809 this.position = { left: curleft, top: curtop };
1810 this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
1811 this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
1812 this.originalPosition = { left: curleft, top: curtop };
1813 this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
1814 this.originalMousePosition = { left: event.pageX, top: event.pageY };
1815
1816 //Aspect Ratio
1817 this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
1818
1819 var cursor = $('.ui-resizable-' + this.axis).css('cursor');
1820 $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
1821
1822 el.addClass("ui-resizable-resizing");
1823 this._propagate("start", event);
1824 return true;
1825 },
1826
1827 _mouseDrag: function(event) {
1828
1829 //Increase performance, avoid regex
1830 var el = this.helper, o = this.options, props = {},
1831 self = this, smp = this.originalMousePosition, a = this.axis;
1832
1833 var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
1834 var trigger = this._change[a];
1835 if (!trigger) return false;
1836
1837 // Calculate the attrs that will be change
1838 var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
1839
1840 if (this._aspectRatio || event.shiftKey)
1841 data = this._updateRatio(data, event);
1842
1843 data = this._respectSize(data, event);
1844
1845 // plugins callbacks need to be called first
1846 this._propagate("resize", event);
1847
1848 el.css({
1849 top: this.position.top + "px", left: this.position.left + "px",
1850 width: this.size.width + "px", height: this.size.height + "px"
1851 });
1852
1853 if (!this._helper && this._proportionallyResizeElements.length)
1854 this._proportionallyResize();
1855
1856 this._updateCache(data);
1857
1858 // calling the user callback at the end
1859 this._trigger('resize', event, this.ui());
1860
1861 return false;
1862 },
1863
1864 _mouseStop: function(event) {
1865
1866 this.resizing = false;
1867 var o = this.options, self = this;
1868
1869 if(this._helper) {
1870 var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
1871 soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
1872 soffsetw = ista ? 0 : self.sizeDiff.width;
1873
1874 var s = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
1875 left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
1876 top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
1877
1878 if (!o.animate)
1879 this.element.css($.extend(s, { top: top, left: left }));
1880
1881 self.helper.height(self.size.height);
1882 self.helper.width(self.size.width);
1883
1884 if (this._helper && !o.animate) this._proportionallyResize();
1885 }
1886
1887 $('body').css('cursor', 'auto');
1888
1889 this.element.removeClass("ui-resizable-resizing");
1890
1891 this._propagate("stop", event);
1892
1893 if (this._helper) this.helper.remove();
1894 return false;
1895
1896 },
1897
1898 _updateCache: function(data) {
1899 var o = this.options;
1900 this.offset = this.helper.offset();
1901 if (isNumber(data.left)) this.position.left = data.left;
1902 if (isNumber(data.top)) this.position.top = data.top;
1903 if (isNumber(data.height)) this.size.height = data.height;
1904 if (isNumber(data.width)) this.size.width = data.width;
1905 },
1906
1907 _updateRatio: function(data, event) {
1908
1909 var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
1910
1911 if (data.height) data.width = (csize.height * this.aspectRatio);
1912 else if (data.width) data.height = (csize.width / this.aspectRatio);
1913
1914 if (a == 'sw') {
1915 data.left = cpos.left + (csize.width - data.width);
1916 data.top = null;
1917 }
1918 if (a == 'nw') {
1919 data.top = cpos.top + (csize.height - data.height);
1920 data.left = cpos.left + (csize.width - data.width);
1921 }
1922
1923 return data;
1924 },
1925
1926 _respectSize: function(data, event) {
1927
1928 var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
1929 ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
1930 isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
1931
1932 if (isminw) data.width = o.minWidth;
1933 if (isminh) data.height = o.minHeight;
1934 if (ismaxw) data.width = o.maxWidth;
1935 if (ismaxh) data.height = o.maxHeight;
1936
1937 var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
1938 var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
1939
1940 if (isminw && cw) data.left = dw - o.minWidth;
1941 if (ismaxw && cw) data.left = dw - o.maxWidth;
1942 if (isminh && ch) data.top = dh - o.minHeight;
1943 if (ismaxh && ch) data.top = dh - o.maxHeight;
1944
1945 // fixing jump error on top/left - bug #2330
1946 var isNotwh = !data.width && !data.height;
1947 if (isNotwh && !data.left && data.top) data.top = null;
1948 else if (isNotwh && !data.top && data.left) data.left = null;
1949
1950 return data;
1951 },
1952
1953 _proportionallyResize: function() {
1954
1955 var o = this.options;
1956 if (!this._proportionallyResizeElements.length) return;
1957 var element = this.helper || this.element;
1958
1959 for (var i=0; i < this._proportionallyResizeElements.length; i++) {
1960
1961 var prel = this._proportionallyResizeElements[i];
1962
1963 if (!this.borderDif) {
1964 var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
1965 p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
1966
1967 this.borderDif = $.map(b, function(v, i) {
1968 var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
1969 return border + padding;
1970 });
1971 }
1972
1973 if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
1974 continue;
1975
1976 prel.css({
1977 height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
1978 width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
1979 });
1980
1981 };
1982
1983 },
1984
1985 _renderProxy: function() {
1986
1987 var el = this.element, o = this.options;
1988 this.elementOffset = el.offset();
1989
1990 if(this._helper) {
1991
1992 this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
1993
1994 // fix ie6 offset TODO: This seems broken
1995 var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
1996 pxyoffset = ( ie6 ? 2 : -1 );
1997
1998 this.helper.addClass(this._helper).css({
1999 width: this.element.outerWidth() + pxyoffset,
2000 height: this.element.outerHeight() + pxyoffset,
2001 position: 'absolute',
2002 left: this.elementOffset.left - ie6offset +'px',
2003 top: this.elementOffset.top - ie6offset +'px',
2004 zIndex: ++o.zIndex //TODO: Don't modify option
2005 });
2006
2007 this.helper
2008 .appendTo("body")
2009 .disableSelection();
2010
2011 } else {
2012 this.helper = this.element;
2013 }
2014
2015 },
2016
2017 _change: {
2018 e: function(event, dx, dy) {
2019 return { width: this.originalSize.width + dx };
2020 },
2021 w: function(event, dx, dy) {
2022 var o = this.options, cs = this.originalSize, sp = this.originalPosition;
2023 return { left: sp.left + dx, width: cs.width - dx };
2024 },
2025 n: function(event, dx, dy) {
2026 var o = this.options, cs = this.originalSize, sp = this.originalPosition;
2027 return { top: sp.top + dy, height: cs.height - dy };
2028 },
2029 s: function(event, dx, dy) {
2030 return { height: this.originalSize.height + dy };
2031 },
2032 se: function(event, dx, dy) {
2033 return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
2034 },
2035 sw: function(event, dx, dy) {
2036 return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
2037 },
2038 ne: function(event, dx, dy) {
2039 return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
2040 },
2041 nw: function(event, dx, dy) {
2042 return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
2043 }
2044 },
2045
2046 _propagate: function(n, event) {
2047 $.ui.plugin.call(this, n, [event, this.ui()]);
2048 (n != "resize" && this._trigger(n, event, this.ui()));
2049 },
2050
2051 plugins: {},
2052
2053 ui: function() {
2054 return {
2055 originalElement: this.originalElement,
2056 element: this.element,
2057 helper: this.helper,
2058 position: this.position,
2059 size: this.size,
2060 originalSize: this.originalSize,
2061 originalPosition: this.originalPosition
2062 };
2063 }
2064
2065}));
2066
2067$.extend($.ui.resizable, {
2068 version: "1.7.2",
2069 eventPrefix: "resize",
2070 defaults: {
2071 alsoResize: false,
2072 animate: false,
2073 animateDuration: "slow",
2074 animateEasing: "swing",
2075 aspectRatio: false,
2076 autoHide: false,
2077 cancel: ":input,option",
2078 containment: false,
2079 delay: 0,
2080 distance: 1,
2081 ghost: false,
2082 grid: false,
2083 handles: "e,s,se",
2084 helper: false,
2085 maxHeight: null,
2086 maxWidth: null,
2087 minHeight: 10,
2088 minWidth: 10,
2089 zIndex: 1000
2090 }
2091});
2092
2093/*
2094 * Resizable Extensions
2095 */
2096
2097$.ui.plugin.add("resizable", "alsoResize", {
2098
2099 start: function(event, ui) {
2100
2101 var self = $(this).data("resizable"), o = self.options;
2102
2103 _store = function(exp) {
2104 $(exp).each(function() {
2105 $(this).data("resizable-alsoresize", {
2106 width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10),
2107 left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10)
2108 });
2109 });
2110 };
2111
2112 if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
2113 if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
2114 else { $.each(o.alsoResize, function(exp, c) { _store(exp); }); }
2115 }else{
2116 _store(o.alsoResize);
2117 }
2118 },
2119
2120 resize: function(event, ui){
2121 var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
2122
2123 var delta = {
2124 height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
2125 top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
2126 },
2127
2128 _alsoResize = function(exp, c) {
2129 $(exp).each(function() {
2130 var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left'];
2131
2132 $.each(css || ['width', 'height', 'top', 'left'], function(i, prop) {
2133 var sum = (start[prop]||0) + (delta[prop]||0);
2134 if (sum && sum >= 0)
2135 style[prop] = sum || null;
2136 });
2137
2138 //Opera fixing relative position
2139 if (/relative/.test(el.css('position')) && $.browser.opera) {
2140 self._revertToRelativePosition = true;
2141 el.css({ position: 'absolute', top: 'auto', left: 'auto' });
2142 }
2143
2144 el.css(style);
2145 });
2146 };
2147
2148 if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
2149 $.each(o.alsoResize, function(exp, c) { _alsoResize(exp, c); });
2150 }else{
2151 _alsoResize(o.alsoResize);
2152 }
2153 },
2154
2155 stop: function(event, ui){
2156 var self = $(this).data("resizable");
2157
2158 //Opera fixing relative position
2159 if (self._revertToRelativePosition && $.browser.opera) {
2160 self._revertToRelativePosition = false;
2161 el.css({ position: 'relative' });
2162 }
2163
2164 $(this).removeData("resizable-alsoresize-start");
2165 }
2166});
2167
2168$.ui.plugin.add("resizable", "animate", {
2169
2170 stop: function(event, ui) {
2171 var self = $(this).data("resizable"), o = self.options;
2172
2173 var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
2174 soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
2175 soffsetw = ista ? 0 : self.sizeDiff.width;
2176
2177 var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
2178 left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
2179 top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
2180
2181 self.element.animate(
2182 $.extend(style, top && left ? { top: top, left: left } : {}), {
2183 duration: o.animateDuration,
2184 easing: o.animateEasing,
2185 step: function() {
2186
2187 var data = {
2188 width: parseInt(self.element.css('width'), 10),
2189 height: parseInt(self.element.css('height'), 10),
2190 top: parseInt(self.element.css('top'), 10),
2191 left: parseInt(self.element.css('left'), 10)
2192 };
2193
2194 if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
2195
2196 // propagating resize, and updating values for each animation step
2197 self._updateCache(data);
2198 self._propagate("resize", event);
2199
2200 }
2201 }
2202 );
2203 }
2204
2205});
2206
2207$.ui.plugin.add("resizable", "containment", {
2208
2209 start: function(event, ui) {
2210 var self = $(this).data("resizable"), o = self.options, el = self.element;
2211 var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
2212 if (!ce) return;
2213
2214 self.containerElement = $(ce);
2215
2216 if (/document/.test(oc) || oc == document) {
2217 self.containerOffset = { left: 0, top: 0 };
2218 self.containerPosition = { left: 0, top: 0 };
2219
2220 self.parentData = {
2221 element: $(document), left: 0, top: 0,
2222 width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
2223 };
2224 }
2225
2226 // i'm a node, so compute top, left, right, bottom
2227 else {
2228 var element = $(ce), p = [];
2229 $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
2230
2231 self.containerOffset = element.offset();
2232 self.containerPosition = element.position();
2233 self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
2234
2235 var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width,
2236 width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
2237
2238 self.parentData = {
2239 element: ce, left: co.left, top: co.top, width: width, height: height
2240 };
2241 }
2242 },
2243
2244 resize: function(event, ui) {
2245 var self = $(this).data("resizable"), o = self.options,
2246 ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
2247 pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
2248
2249 if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
2250
2251 if (cp.left < (self._helper ? co.left : 0)) {
2252 self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
2253 if (pRatio) self.size.height = self.size.width / o.aspectRatio;
2254 self.position.left = o.helper ? co.left : 0;
2255 }
2256
2257 if (cp.top < (self._helper ? co.top : 0)) {
2258 self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
2259 if (pRatio) self.size.width = self.size.height * o.aspectRatio;
2260 self.position.top = self._helper ? co.top : 0;
2261 }
2262
2263 self.offset.left = self.parentData.left+self.position.left;
2264 self.offset.top = self.parentData.top+self.position.top;
2265
2266 var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
2267 hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
2268
2269 var isParent = self.containerElement.get(0) == self.element.parent().get(0),
2270 isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
2271
2272 if(isParent && isOffsetRelative) woset -= self.parentData.left;
2273
2274 if (woset + self.size.width >= self.parentData.width) {
2275 self.size.width = self.parentData.width - woset;
2276 if (pRatio) self.size.height = self.size.width / self.aspectRatio;
2277 }
2278
2279 if (hoset + self.size.height >= self.parentData.height) {
2280 self.size.height = self.parentData.height - hoset;
2281 if (pRatio) self.size.width = self.size.height * self.aspectRatio;
2282 }
2283 },
2284
2285 stop: function(event, ui){
2286 var self = $(this).data("resizable"), o = self.options, cp = self.position,
2287 co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
2288
2289 var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
2290
2291 if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
2292 $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
2293
2294 if (self._helper && !o.animate && (/static/).test(ce.css('position')))
2295 $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
2296
2297 }
2298});
2299
2300$.ui.plugin.add("resizable", "ghost", {
2301
2302 start: function(event, ui) {
2303
2304 var self = $(this).data("resizable"), o = self.options, cs = self.size;
2305
2306 self.ghost = self.originalElement.clone();
2307 self.ghost
2308 .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
2309 .addClass('ui-resizable-ghost')
2310 .addClass(typeof o.ghost == 'string' ? o.ghost : '');
2311
2312 self.ghost.appendTo(self.helper);
2313
2314 },
2315
2316 resize: function(event, ui){
2317 var self = $(this).data("resizable"), o = self.options;
2318 if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
2319 },
2320
2321 stop: function(event, ui){
2322 var self = $(this).data("resizable"), o = self.options;
2323 if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
2324 }
2325
2326});
2327
2328$.ui.plugin.add("resizable", "grid", {
2329
2330 resize: function(event, ui) {
2331 var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
2332 o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
2333 var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
2334
2335 if (/^(se|s|e)$/.test(a)) {
2336 self.size.width = os.width + ox;
2337 self.size.height = os.height + oy;
2338 }
2339 else if (/^(ne)$/.test(a)) {
2340 self.size.width = os.width + ox;
2341 self.size.height = os.height + oy;
2342 self.position.top = op.top - oy;
2343 }
2344 else if (/^(sw)$/.test(a)) {
2345 self.size.width = os.width + ox;
2346 self.size.height = os.height + oy;
2347 self.position.left = op.left - ox;
2348 }
2349 else {
2350 self.size.width = os.width + ox;
2351 self.size.height = os.height + oy;
2352 self.position.top = op.top - oy;
2353 self.position.left = op.left - ox;
2354 }
2355 }
2356
2357});
2358
2359var num = function(v) {
2360 return parseInt(v, 10) || 0;
2361};
2362
2363var isNumber = function(value) {
2364 return !isNaN(parseInt(value, 10));
2365};
2366
2367})(jQuery);
2368/*
2369 * jQuery UI Selectable 1.7.2
2370 *
2371 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
2372 * Dual licensed under the MIT (MIT-LICENSE.txt)
2373 * and GPL (GPL-LICENSE.txt) licenses.
2374 *
2375 * http://docs.jquery.com/UI/Selectables
2376 *
2377 * Depends:
2378 * ui.core.js
2379 */
2380(function($) {
2381
2382$.widget("ui.selectable", $.extend({}, $.ui.mouse, {
2383
2384 _init: function() {
2385 var self = this;
2386
2387 this.element.addClass("ui-selectable");
2388
2389 this.dragged = false;
2390
2391 // cache selectee children based on filter
2392 var selectees;
2393 this.refresh = function() {
2394 selectees = $(self.options.filter, self.element[0]);
2395 selectees.each(function() {
2396 var $this = $(this);
2397 var pos = $this.offset();
2398 $.data(this, "selectable-item", {
2399 element: this,
2400 $element: $this,
2401 left: pos.left,
2402 top: pos.top,
2403 right: pos.left + $this.outerWidth(),
2404 bottom: pos.top + $this.outerHeight(),
2405 startselected: false,
2406 selected: $this.hasClass('ui-selected'),
2407 selecting: $this.hasClass('ui-selecting'),
2408 unselecting: $this.hasClass('ui-unselecting')
2409 });
2410 });
2411 };
2412 this.refresh();
2413
2414 this.selectees = selectees.addClass("ui-selectee");
2415
2416 this._mouseInit();
2417
2418 this.helper = $(document.createElement('div'))
2419 .css({border:'1px dotted black'})
2420 .addClass("ui-selectable-helper");
2421 },
2422
2423 destroy: function() {
2424 this.element
2425 .removeClass("ui-selectable ui-selectable-disabled")
2426 .removeData("selectable")
2427 .unbind(".selectable");
2428 this._mouseDestroy();
2429 },
2430
2431 _mouseStart: function(event) {
2432 var self = this;
2433
2434 this.opos = [event.pageX, event.pageY];
2435
2436 if (this.options.disabled)
2437 return;
2438
2439 var options = this.options;
2440
2441 this.selectees = $(options.filter, this.element[0]);
2442
2443 this._trigger("start", event);
2444
2445 $(options.appendTo).append(this.helper);
2446 // position helper (lasso)
2447 this.helper.css({
2448 "z-index": 100,
2449 "position": "absolute",
2450 "left": event.clientX,
2451 "top": event.clientY,
2452 "width": 0,
2453 "height": 0
2454 });
2455
2456 if (options.autoRefresh) {
2457 this.refresh();
2458 }
2459
2460 this.selectees.filter('.ui-selected').each(function() {
2461 var selectee = $.data(this, "selectable-item");
2462 selectee.startselected = true;
2463 if (!event.metaKey) {
2464 selectee.$element.removeClass('ui-selected');
2465 selectee.selected = false;
2466 selectee.$element.addClass('ui-unselecting');
2467 selectee.unselecting = true;
2468 // selectable UNSELECTING callback
2469 self._trigger("unselecting", event, {
2470 unselecting: selectee.element
2471 });
2472 }
2473 });
2474
2475 $(event.target).parents().andSelf().each(function() {
2476 var selectee = $.data(this, "selectable-item");
2477 if (selectee) {
2478 selectee.$element.removeClass("ui-unselecting").addClass('ui-selecting');
2479 selectee.unselecting = false;
2480 selectee.selecting = true;
2481 selectee.selected = true;
2482 // selectable SELECTING callback
2483 self._trigger("selecting", event, {
2484 selecting: selectee.element
2485 });
2486 return false;
2487 }
2488 });
2489
2490 },
2491
2492 _mouseDrag: function(event) {
2493 var self = this;
2494 this.dragged = true;
2495
2496 if (this.options.disabled)
2497 return;
2498
2499 var options = this.options;
2500
2501 var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
2502 if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
2503 if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
2504 this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
2505
2506 this.selectees.each(function() {
2507 var selectee = $.data(this, "selectable-item");
2508 //prevent helper from being selected if appendTo: selectable
2509 if (!selectee || selectee.element == self.element[0])
2510 return;
2511 var hit = false;
2512 if (options.tolerance == 'touch') {
2513 hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
2514 } else if (options.tolerance == 'fit') {
2515 hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
2516 }
2517
2518 if (hit) {
2519 // SELECT
2520 if (selectee.selected) {
2521 selectee.$element.removeClass('ui-selected');
2522 selectee.selected = false;
2523 }
2524 if (selectee.unselecting) {
2525 selectee.$element.removeClass('ui-unselecting');
2526 selectee.unselecting = false;
2527 }
2528 if (!selectee.selecting) {
2529 selectee.$element.addClass('ui-selecting');
2530 selectee.selecting = true;
2531 // selectable SELECTING callback
2532 self._trigger("selecting", event, {
2533 selecting: selectee.element
2534 });
2535 }
2536 } else {
2537 // UNSELECT
2538 if (selectee.selecting) {
2539 if (event.metaKey && selectee.startselected) {
2540 selectee.$element.removeClass('ui-selecting');
2541 selectee.selecting = false;
2542 selectee.$element.addClass('ui-selected');
2543 selectee.selected = true;
2544 } else {
2545 selectee.$element.removeClass('ui-selecting');
2546 selectee.selecting = false;
2547 if (selectee.startselected) {
2548 selectee.$element.addClass('ui-unselecting');
2549 selectee.unselecting = true;
2550 }
2551 // selectable UNSELECTING callback
2552 self._trigger("unselecting", event, {
2553 unselecting: selectee.element
2554 });
2555 }
2556 }
2557 if (selectee.selected) {
2558 if (!event.metaKey && !selectee.startselected) {
2559 selectee.$element.removeClass('ui-selected');
2560 selectee.selected = false;
2561
2562 selectee.$element.addClass('ui-unselecting');
2563 selectee.unselecting = true;
2564 // selectable UNSELECTING callback
2565 self._trigger("unselecting", event, {
2566 unselecting: selectee.element
2567 });
2568 }
2569 }
2570 }
2571 });
2572
2573 return false;
2574 },
2575
2576 _mouseStop: function(event) {
2577 var self = this;
2578
2579 this.dragged = false;
2580
2581 var options = this.options;
2582
2583 $('.ui-unselecting', this.element[0]).each(function() {
2584 var selectee = $.data(this, "selectable-item");
2585 selectee.$element.removeClass('ui-unselecting');
2586 selectee.unselecting = false;
2587 selectee.startselected = false;
2588 self._trigger("unselected", event, {
2589 unselected: selectee.element
2590 });
2591 });
2592 $('.ui-selecting', this.element[0]).each(function() {
2593 var selectee = $.data(this, "selectable-item");
2594 selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
2595 selectee.selecting = false;
2596 selectee.selected = true;
2597 selectee.startselected = true;
2598 self._trigger("selected", event, {
2599 selected: selectee.element
2600 });
2601 });
2602 this._trigger("stop", event);
2603
2604 this.helper.remove();
2605
2606 return false;
2607 }
2608
2609}));
2610
2611$.extend($.ui.selectable, {
2612 version: "1.7.2",
2613 defaults: {
2614 appendTo: 'body',
2615 autoRefresh: true,
2616 cancel: ":input,option",
2617 delay: 0,
2618 distance: 0,
2619 filter: '*',
2620 tolerance: 'touch'
2621 }
2622});
2623
2624})(jQuery);
2625/*
2626 * jQuery UI Sortable 1.7.2
2627 *
2628 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
2629 * Dual licensed under the MIT (MIT-LICENSE.txt)
2630 * and GPL (GPL-LICENSE.txt) licenses.
2631 *
2632 * http://docs.jquery.com/UI/Sortables
2633 *
2634 * Depends:
2635 * ui.core.js
2636 */
2637(function($) {
2638
2639$.widget("ui.sortable", $.extend({}, $.ui.mouse, {
2640 _init: function() {
2641
2642 var o = this.options;
2643 this.containerCache = {};
2644 this.element.addClass("ui-sortable");
2645
2646 //Get the items
2647 this.refresh();
2648
2649 //Let's determine if the items are floating
2650 this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false;
2651
2652 //Let's determine the parent's offset
2653 this.offset = this.element.offset();
2654
2655 //Initialize mouse events for interaction
2656 this._mouseInit();
2657
2658 },
2659
2660 destroy: function() {
2661 this.element
2662 .removeClass("ui-sortable ui-sortable-disabled")
2663 .removeData("sortable")
2664 .unbind(".sortable");
2665 this._mouseDestroy();
2666
2667 for ( var i = this.items.length - 1; i >= 0; i-- )
2668 this.items[i].item.removeData("sortable-item");
2669 },
2670
2671 _mouseCapture: function(event, overrideHandle) {
2672
2673 if (this.reverting) {
2674 return false;
2675 }
2676
2677 if(this.options.disabled || this.options.type == 'static') return false;
2678
2679 //We have to refresh the items data once first
2680 this._refreshItems(event);
2681
2682 //Find out if the clicked node (or one of its parents) is a actual item in this.items
2683 var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
2684 if($.data(this, 'sortable-item') == self) {
2685 currentItem = $(this);
2686 return false;
2687 }
2688 });
2689 if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);
2690
2691 if(!currentItem) return false;
2692 if(this.options.handle && !overrideHandle) {
2693 var validHandle = false;
2694
2695 $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
2696 if(!validHandle) return false;
2697 }
2698
2699 this.currentItem = currentItem;
2700 this._removeCurrentsFromItems();
2701 return true;
2702
2703 },
2704
2705 _mouseStart: function(event, overrideHandle, noActivation) {
2706
2707 var o = this.options, self = this;
2708 this.currentContainer = this;
2709
2710 //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
2711 this.refreshPositions();
2712
2713 //Create and append the visible helper
2714 this.helper = this._createHelper(event);
2715
2716 //Cache the helper size
2717 this._cacheHelperProportions();
2718
2719 /*
2720 * - Position generation -
2721 * This block generates everything position related - it's the core of draggables.
2722 */
2723
2724 //Cache the margins of the original element
2725 this._cacheMargins();
2726
2727 //Get the next scrolling parent
2728 this.scrollParent = this.helper.scrollParent();
2729
2730 //The element's absolute position on the page minus margins
2731 this.offset = this.currentItem.offset();
2732 this.offset = {
2733 top: this.offset.top - this.margins.top,
2734 left: this.offset.left - this.margins.left
2735 };
2736
2737 // Only after we got the offset, we can change the helper's position to absolute
2738 // TODO: Still need to figure out a way to make relative sorting possible
2739 this.helper.css("position", "absolute");
2740 this.cssPosition = this.helper.css("position");
2741
2742 $.extend(this.offset, {
2743 click: { //Where the click happened, relative to the element
2744 left: event.pageX - this.offset.left,
2745 top: event.pageY - this.offset.top
2746 },
2747 parent: this._getParentOffset(),
2748 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
2749 });
2750
2751 //Generate the original position
2752 this.originalPosition = this._generatePosition(event);
2753 this.originalPageX = event.pageX;
2754 this.originalPageY = event.pageY;
2755
2756 //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
2757 if(o.cursorAt)
2758 this._adjustOffsetFromHelper(o.cursorAt);
2759
2760 //Cache the former DOM position
2761 this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
2762
2763 //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
2764 if(this.helper[0] != this.currentItem[0]) {
2765 this.currentItem.hide();
2766 }
2767
2768 //Create the placeholder
2769 this._createPlaceholder();
2770
2771 //Set a containment if given in the options
2772 if(o.containment)
2773 this._setContainment();
2774
2775 if(o.cursor) { // cursor option
2776 if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
2777 $('body').css("cursor", o.cursor);
2778 }
2779
2780 if(o.opacity) { // opacity option
2781 if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
2782 this.helper.css("opacity", o.opacity);
2783 }
2784
2785 if(o.zIndex) { // zIndex option
2786 if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
2787 this.helper.css("zIndex", o.zIndex);
2788 }
2789
2790 //Prepare scrolling
2791 if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
2792 this.overflowOffset = this.scrollParent.offset();
2793
2794 //Call callbacks
2795 this._trigger("start", event, this._uiHash());
2796
2797 //Recache the helper size
2798 if(!this._preserveHelperProportions)
2799 this._cacheHelperProportions();
2800
2801
2802 //Post 'activate' events to possible containers
2803 if(!noActivation) {
2804 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
2805 }
2806
2807 //Prepare possible droppables
2808 if($.ui.ddmanager)
2809 $.ui.ddmanager.current = this;
2810
2811 if ($.ui.ddmanager && !o.dropBehaviour)
2812 $.ui.ddmanager.prepareOffsets(this, event);
2813
2814 this.dragging = true;
2815
2816 this.helper.addClass("ui-sortable-helper");
2817 this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
2818 return true;
2819
2820 },
2821
2822 _mouseDrag: function(event) {
2823
2824 //Compute the helpers position
2825 this.position = this._generatePosition(event);
2826 this.positionAbs = this._convertPositionTo("absolute");
2827
2828 if (!this.lastPositionAbs) {
2829 this.lastPositionAbs = this.positionAbs;
2830 }
2831
2832 //Do scrolling
2833 if(this.options.scroll) {
2834 var o = this.options, scrolled = false;
2835 if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
2836
2837 if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
2838 this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
2839 else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
2840 this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
2841
2842 if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
2843 this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
2844 else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
2845 this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
2846
2847 } else {
2848
2849 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
2850 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
2851 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
2852 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
2853
2854 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
2855 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
2856 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
2857 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
2858
2859 }
2860
2861 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
2862 $.ui.ddmanager.prepareOffsets(this, event);
2863 }
2864
2865 //Regenerate the absolute position used for position checks
2866 this.positionAbs = this._convertPositionTo("absolute");
2867
2868 //Set the helper position
2869 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
2870 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
2871
2872 //Rearrange
2873 for (var i = this.items.length - 1; i >= 0; i--) {
2874
2875 //Cache variables and intersection, continue if no intersection
2876 var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
2877 if (!intersection) continue;
2878
2879 if(itemElement != this.currentItem[0] //cannot intersect with itself
2880 && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
2881 && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
2882 && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
2883 ) {
2884
2885 this.direction = intersection == 1 ? "down" : "up";
2886
2887 if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
2888 this._rearrange(event, item);
2889 } else {
2890 break;
2891 }
2892
2893 this._trigger("change", event, this._uiHash());
2894 break;
2895 }
2896 }
2897
2898 //Post events to containers
2899 this._contactContainers(event);
2900
2901 //Interconnect with droppables
2902 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
2903
2904 //Call callbacks
2905 this._trigger('sort', event, this._uiHash());
2906
2907 this.lastPositionAbs = this.positionAbs;
2908 return false;
2909
2910 },
2911
2912 _mouseStop: function(event, noPropagation) {
2913
2914 if(!event) return;
2915
2916 //If we are using droppables, inform the manager about the drop
2917 if ($.ui.ddmanager && !this.options.dropBehaviour)
2918 $.ui.ddmanager.drop(this, event);
2919
2920 if(this.options.revert) {
2921 var self = this;
2922 var cur = self.placeholder.offset();
2923
2924 self.reverting = true;
2925
2926 $(this.helper).animate({
2927 left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
2928 top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
2929 }, parseInt(this.options.revert, 10) || 500, function() {
2930 self._clear(event);
2931 });
2932 } else {
2933 this._clear(event, noPropagation);
2934 }
2935
2936 return false;
2937
2938 },
2939
2940 cancel: function() {
2941
2942 var self = this;
2943
2944 if(this.dragging) {
2945
2946 this._mouseUp();
2947
2948 if(this.options.helper == "original")
2949 this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
2950 else
2951 this.currentItem.show();
2952
2953 //Post deactivating events to containers
2954 for (var i = this.containers.length - 1; i >= 0; i--){
2955 this.containers[i]._trigger("deactivate", null, self._uiHash(this));
2956 if(this.containers[i].containerCache.over) {
2957 this.containers[i]._trigger("out", null, self._uiHash(this));
2958 this.containers[i].containerCache.over = 0;
2959 }
2960 }
2961
2962 }
2963
2964 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
2965 if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
2966 if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
2967
2968 $.extend(this, {
2969 helper: null,
2970 dragging: false,
2971 reverting: false,
2972 _noFinalSort: null
2973 });
2974
2975 if(this.domPosition.prev) {
2976 $(this.domPosition.prev).after(this.currentItem);
2977 } else {
2978 $(this.domPosition.parent).prepend(this.currentItem);
2979 }
2980
2981 return true;
2982
2983 },
2984
2985 serialize: function(o) {
2986
2987 var items = this._getItemsAsjQuery(o && o.connected);
2988 var str = []; o = o || {};
2989
2990 $(items).each(function() {
2991 var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
2992 if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
2993 });
2994
2995 return str.join('&');
2996
2997 },
2998
2999 toArray: function(o) {
3000
3001 var items = this._getItemsAsjQuery(o && o.connected);
3002 var ret = []; o = o || {};
3003
3004 items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
3005 return ret;
3006
3007 },
3008
3009 /* Be careful with the following core functions */
3010 _intersectsWith: function(item) {
3011
3012 var x1 = this.positionAbs.left,
3013 x2 = x1 + this.helperProportions.width,
3014 y1 = this.positionAbs.top,
3015 y2 = y1 + this.helperProportions.height;
3016
3017 var l = item.left,
3018 r = l + item.width,
3019 t = item.top,
3020 b = t + item.height;
3021
3022 var dyClick = this.offset.click.top,
3023 dxClick = this.offset.click.left;
3024
3025 var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
3026
3027 if( this.options.tolerance == "pointer"
3028 || this.options.forcePointerForContainers
3029 || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
3030 ) {
3031 return isOverElement;
3032 } else {
3033
3034 return (l < x1 + (this.helperProportions.width / 2) // Right Half
3035 && x2 - (this.helperProportions.width / 2) < r // Left Half
3036 && t < y1 + (this.helperProportions.height / 2) // Bottom Half
3037 && y2 - (this.helperProportions.height / 2) < b ); // Top Half
3038
3039 }
3040 },
3041
3042 _intersectsWithPointer: function(item) {
3043
3044 var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
3045 isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
3046 isOverElement = isOverElementHeight && isOverElementWidth,
3047 verticalDirection = this._getDragVerticalDirection(),
3048 horizontalDirection = this._getDragHorizontalDirection();
3049
3050 if (!isOverElement)
3051 return false;
3052
3053 return this.floating ?
3054 ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
3055 : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
3056
3057 },
3058
3059 _intersectsWithSides: function(item) {
3060
3061 var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
3062 isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
3063 verticalDirection = this._getDragVerticalDirection(),
3064 horizontalDirection = this._getDragHorizontalDirection();
3065
3066 if (this.floating && horizontalDirection) {
3067 return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
3068 } else {
3069 return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
3070 }
3071
3072 },
3073
3074 _getDragVerticalDirection: function() {
3075 var delta = this.positionAbs.top - this.lastPositionAbs.top;
3076 return delta != 0 && (delta > 0 ? "down" : "up");
3077 },
3078
3079 _getDragHorizontalDirection: function() {
3080 var delta = this.positionAbs.left - this.lastPositionAbs.left;
3081 return delta != 0 && (delta > 0 ? "right" : "left");
3082 },
3083
3084 refresh: function(event) {
3085 this._refreshItems(event);
3086 this.refreshPositions();
3087 },
3088
3089 _connectWith: function() {
3090 var options = this.options;
3091 return options.connectWith.constructor == String
3092 ? [options.connectWith]
3093 : options.connectWith;
3094 },
3095
3096 _getItemsAsjQuery: function(connected) {
3097
3098 var self = this;
3099 var items = [];
3100 var queries = [];
3101 var connectWith = this._connectWith();
3102
3103 if(connectWith && connected) {
3104 for (var i = connectWith.length - 1; i >= 0; i--){
3105 var cur = $(connectWith[i]);
3106 for (var j = cur.length - 1; j >= 0; j--){
3107 var inst = $.data(cur[j], 'sortable');
3108 if(inst && inst != this && !inst.options.disabled) {
3109 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper"), inst]);
3110 }
3111 };
3112 };
3113 }
3114
3115 queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper"), this]);
3116
3117 for (var i = queries.length - 1; i >= 0; i--){
3118 queries[i][0].each(function() {
3119 items.push(this);
3120 });
3121 };
3122
3123 return $(items);
3124
3125 },
3126
3127 _removeCurrentsFromItems: function() {
3128
3129 var list = this.currentItem.find(":data(sortable-item)");
3130
3131 for (var i=0; i < this.items.length; i++) {
3132
3133 for (var j=0; j < list.length; j++) {
3134 if(list[j] == this.items[i].item[0])
3135 this.items.splice(i,1);
3136 };
3137
3138 };
3139
3140 },
3141
3142 _refreshItems: function(event) {
3143
3144 this.items = [];
3145 this.containers = [this];
3146 var items = this.items;
3147 var self = this;
3148 var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
3149 var connectWith = this._connectWith();
3150
3151 if(connectWith) {
3152 for (var i = connectWith.length - 1; i >= 0; i--){
3153 var cur = $(connectWith[i]);
3154 for (var j = cur.length - 1; j >= 0; j--){
3155 var inst = $.data(cur[j], 'sortable');
3156 if(inst && inst != this && !inst.options.disabled) {
3157 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
3158 this.containers.push(inst);
3159 }
3160 };
3161 };
3162 }
3163
3164 for (var i = queries.length - 1; i >= 0; i--) {
3165 var targetData = queries[i][1];
3166 var _queries = queries[i][0];
3167
3168 for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
3169 var item = $(_queries[j]);
3170
3171 item.data('sortable-item', targetData); // Data for target checking (mouse manager)
3172
3173 items.push({
3174 item: item,
3175 instance: targetData,
3176 width: 0, height: 0,
3177 left: 0, top: 0
3178 });
3179 };
3180 };
3181
3182 },
3183
3184 refreshPositions: function(fast) {
3185
3186 //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
3187 if(this.offsetParent && this.helper) {
3188 this.offset.parent = this._getParentOffset();
3189 }
3190
3191 for (var i = this.items.length - 1; i >= 0; i--){
3192 var item = this.items[i];
3193
3194 //We ignore calculating positions of all connected containers when we're not over them
3195 if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
3196 continue;
3197
3198 var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
3199
3200 if (!fast) {
3201 item.width = t.outerWidth();
3202 item.height = t.outerHeight();
3203 }
3204
3205 var p = t.offset();
3206 item.left = p.left;
3207 item.top = p.top;
3208 };
3209
3210 if(this.options.custom && this.options.custom.refreshContainers) {
3211 this.options.custom.refreshContainers.call(this);
3212 } else {
3213 for (var i = this.containers.length - 1; i >= 0; i--){
3214 var p = this.containers[i].element.offset();
3215 this.containers[i].containerCache.left = p.left;
3216 this.containers[i].containerCache.top = p.top;
3217 this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
3218 this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
3219 };
3220 }
3221
3222 },
3223
3224 _createPlaceholder: function(that) {
3225
3226 var self = that || this, o = self.options;
3227
3228 if(!o.placeholder || o.placeholder.constructor == String) {
3229 var className = o.placeholder;
3230 o.placeholder = {
3231 element: function() {
3232
3233 var el = $(document.createElement(self.currentItem[0].nodeName))
3234 .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
3235 .removeClass("ui-sortable-helper")[0];
3236
3237 if(!className)
3238 el.style.visibility = "hidden";
3239
3240 return el;
3241 },
3242 update: function(container, p) {
3243
3244 // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
3245 // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
3246 if(className && !o.forcePlaceholderSize) return;
3247
3248 //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
3249 if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
3250 if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
3251 }
3252 };
3253 }
3254
3255 //Create the placeholder
3256 self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
3257
3258 //Append it after the actual current item
3259 self.currentItem.after(self.placeholder);
3260
3261 //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
3262 o.placeholder.update(self, self.placeholder);
3263
3264 },
3265
3266 _contactContainers: function(event) {
3267 for (var i = this.containers.length - 1; i >= 0; i--){
3268
3269 if(this._intersectsWith(this.containers[i].containerCache)) {
3270 if(!this.containers[i].containerCache.over) {
3271
3272 if(this.currentContainer != this.containers[i]) {
3273
3274 //When entering a new container, we will find the item with the least distance and append our item near it
3275 var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[i].floating ? 'left' : 'top'];
3276 for (var j = this.items.length - 1; j >= 0; j--) {
3277 if(!$.ui.contains(this.containers[i].element[0], this.items[j].item[0])) continue;
3278 var cur = this.items[j][this.containers[i].floating ? 'left' : 'top'];
3279 if(Math.abs(cur - base) < dist) {
3280 dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
3281 }
3282 }
3283
3284 if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled
3285 continue;
3286
3287 this.currentContainer = this.containers[i];
3288 itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[i].element, true);
3289 this._trigger("change", event, this._uiHash());
3290 this.containers[i]._trigger("change", event, this._uiHash(this));
3291
3292 //Update the placeholder
3293 this.options.placeholder.update(this.currentContainer, this.placeholder);
3294
3295 }
3296
3297 this.containers[i]._trigger("over", event, this._uiHash(this));
3298 this.containers[i].containerCache.over = 1;
3299 }
3300 } else {
3301 if(this.containers[i].containerCache.over) {
3302 this.containers[i]._trigger("out", event, this._uiHash(this));
3303 this.containers[i].containerCache.over = 0;
3304 }
3305 }
3306
3307 };
3308 },
3309
3310 _createHelper: function(event) {
3311
3312 var o = this.options;
3313 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
3314
3315 if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
3316 $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
3317
3318 if(helper[0] == this.currentItem[0])
3319 this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
3320
3321 if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
3322 if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
3323
3324 return helper;
3325
3326 },
3327
3328 _adjustOffsetFromHelper: function(obj) {
3329 if(obj.left != undefined) this.offset.click.left = obj.left + this.margins.left;
3330 if(obj.right != undefined) this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
3331 if(obj.top != undefined) this.offset.click.top = obj.top + this.margins.top;
3332 if(obj.bottom != undefined) this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
3333 },
3334
3335 _getParentOffset: function() {
3336
3337
3338 //Get the offsetParent and cache its position
3339 this.offsetParent = this.helper.offsetParent();
3340 var po = this.offsetParent.offset();
3341
3342 // This is a special case where we need to modify a offset calculated on start, since the following happened:
3343 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
3344 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
3345 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
3346 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
3347 po.left += this.scrollParent.scrollLeft();
3348 po.top += this.scrollParent.scrollTop();
3349 }
3350
3351 if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
3352 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
3353 po = { top: 0, left: 0 };
3354
3355 return {
3356 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
3357 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
3358 };
3359
3360 },
3361
3362 _getRelativeOffset: function() {
3363
3364 if(this.cssPosition == "relative") {
3365 var p = this.currentItem.position();
3366 return {
3367 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
3368 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
3369 };
3370 } else {
3371 return { top: 0, left: 0 };
3372 }
3373
3374 },
3375
3376 _cacheMargins: function() {
3377 this.margins = {
3378 left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
3379 top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
3380 };
3381 },
3382
3383 _cacheHelperProportions: function() {
3384 this.helperProportions = {
3385 width: this.helper.outerWidth(),
3386 height: this.helper.outerHeight()
3387 };
3388 },
3389
3390 _setContainment: function() {
3391
3392 var o = this.options;
3393 if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
3394 if(o.containment == 'document' || o.containment == 'window') this.containment = [
3395 0 - this.offset.relative.left - this.offset.parent.left,
3396 0 - this.offset.relative.top - this.offset.parent.top,
3397 $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
3398 ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
3399 ];
3400
3401 if(!(/^(document|window|parent)$/).test(o.containment)) {
3402 var ce = $(o.containment)[0];
3403 var co = $(o.containment).offset();
3404 var over = ($(ce).css("overflow") != 'hidden');
3405
3406 this.containment = [
3407 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
3408 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
3409 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
3410 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
3411 ];
3412 }
3413
3414 },
3415
3416 _convertPositionTo: function(d, pos) {
3417
3418 if(!pos) pos = this.position;
3419 var mod = d == "absolute" ? 1 : -1;
3420 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
3421
3422 return {
3423 top: (
3424 pos.top // The absolute mouse position
3425 + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
3426 + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
3427 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
3428 ),
3429 left: (
3430 pos.left // The absolute mouse position
3431 + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
3432 + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
3433 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
3434 )
3435 };
3436
3437 },
3438
3439 _generatePosition: function(event) {
3440
3441 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
3442
3443 // This is another very weird special case that only happens for relative elements:
3444 // 1. If the css position is relative
3445 // 2. and the scroll parent is the document or similar to the offset parent
3446 // we have to refresh the relative offset during the scroll so there are no jumps
3447 if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
3448 this.offset.relative = this._getRelativeOffset();
3449 }
3450
3451 var pageX = event.pageX;
3452 var pageY = event.pageY;
3453
3454 /*
3455 * - Position constraining -
3456 * Constrain the position to a mix of grid, containment.
3457 */
3458
3459 if(this.originalPosition) { //If we are not dragging yet, we won't check for options
3460
3461 if(this.containment) {
3462 if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
3463 if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
3464 if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
3465 if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
3466 }
3467
3468 if(o.grid) {
3469 var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
3470 pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
3471
3472 var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
3473 pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
3474 }
3475
3476 }
3477
3478 return {
3479 top: (
3480 pageY // The absolute mouse position
3481 - this.offset.click.top // Click offset (relative to the element)
3482 - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
3483 - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
3484 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
3485 ),
3486 left: (
3487 pageX // The absolute mouse position
3488 - this.offset.click.left // Click offset (relative to the element)
3489 - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
3490 - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
3491 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
3492 )
3493 };
3494
3495 },
3496
3497 _rearrange: function(event, i, a, hardRefresh) {
3498
3499 a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
3500
3501 //Various things done here to improve the performance:
3502 // 1. we create a setTimeout, that calls refreshPositions
3503 // 2. on the instance, we have a counter variable, that get's higher after every append
3504 // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
3505 // 4. this lets only the last addition to the timeout stack through
3506 this.counter = this.counter ? ++this.counter : 1;
3507 var self = this, counter = this.counter;
3508
3509 window.setTimeout(function() {
3510 if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
3511 },0);
3512
3513 },
3514
3515 _clear: function(event, noPropagation) {
3516
3517 this.reverting = false;
3518 // We delay all events that have to be triggered to after the point where the placeholder has been removed and
3519 // everything else normalized again
3520 var delayedTriggers = [], self = this;
3521
3522 // We first have to update the dom position of the actual currentItem
3523 // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
3524 if(!this._noFinalSort && this.currentItem[0].parentNode) this.placeholder.before(this.currentItem);
3525 this._noFinalSort = null;
3526
3527 if(this.helper[0] == this.currentItem[0]) {
3528 for(var i in this._storedCSS) {
3529 if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
3530 }
3531 this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
3532 } else {
3533 this.currentItem.show();
3534 }
3535
3536 if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
3537 if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
3538 if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
3539 if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
3540 for (var i = this.containers.length - 1; i >= 0; i--){
3541 if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) {
3542 delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
3543 delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
3544 }
3545 };
3546 };
3547
3548 //Post events to containers
3549 for (var i = this.containers.length - 1; i >= 0; i--){
3550 if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
3551 if(this.containers[i].containerCache.over) {
3552 delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
3553 this.containers[i].containerCache.over = 0;
3554 }
3555 }
3556
3557 //Do what was originally in plugins
3558 if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
3559 if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset cursor
3560 if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
3561
3562 this.dragging = false;
3563 if(this.cancelHelperRemoval) {
3564 if(!noPropagation) {
3565 this._trigger("beforeStop", event, this._uiHash());
3566 for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
3567 this._trigger("stop", event, this._uiHash());
3568 }
3569 return false;
3570 }
3571
3572 if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
3573
3574 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
3575 this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
3576
3577 if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
3578
3579 if(!noPropagation) {
3580 for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
3581 this._trigger("stop", event, this._uiHash());
3582 }
3583
3584 this.fromOutside = false;
3585 return true;
3586
3587 },
3588
3589 _trigger: function() {
3590 if ($.widget.prototype._trigger.apply(this, arguments) === false) {
3591 this.cancel();
3592 }
3593 },
3594
3595 _uiHash: function(inst) {
3596 var self = inst || this;
3597 return {
3598 helper: self.helper,
3599 placeholder: self.placeholder || $([]),
3600 position: self.position,
3601 absolutePosition: self.positionAbs, //deprecated
3602 offset: self.positionAbs,
3603 item: self.currentItem,
3604 sender: inst ? inst.element : null
3605 };
3606 }
3607
3608}));
3609
3610$.extend($.ui.sortable, {
3611 getter: "serialize toArray",
3612 version: "1.7.2",
3613 eventPrefix: "sort",
3614 defaults: {
3615 appendTo: "parent",
3616 axis: false,
3617 cancel: ":input,option",
3618 connectWith: false,
3619 containment: false,
3620 cursor: 'auto',
3621 cursorAt: false,
3622 delay: 0,
3623 distance: 1,
3624 dropOnEmpty: true,
3625 forcePlaceholderSize: false,
3626 forceHelperSize: false,
3627 grid: false,
3628 handle: false,
3629 helper: "original",
3630 items: '> *',
3631 opacity: false,
3632 placeholder: false,
3633 revert: false,
3634 scroll: true,
3635 scrollSensitivity: 20,
3636 scrollSpeed: 20,
3637 scope: "default",
3638 tolerance: "intersect",
3639 zIndex: 1000
3640 }
3641});
3642
3643})(jQuery);
3644/*
3645 * jQuery UI Accordion 1.7.2
3646 *
3647 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
3648 * Dual licensed under the MIT (MIT-LICENSE.txt)
3649 * and GPL (GPL-LICENSE.txt) licenses.
3650 *
3651 * http://docs.jquery.com/UI/Accordion
3652 *
3653 * Depends:
3654 * ui.core.js
3655 */
3656(function($) {
3657
3658$.widget("ui.accordion", {
3659
3660 _init: function() {
3661
3662 var o = this.options, self = this;
3663 this.running = 0;
3664
3665 // if the user set the alwaysOpen option on init
3666 // then we need to set the collapsible option
3667 // if they set both on init, collapsible will take priority
3668 if (o.collapsible == $.ui.accordion.defaults.collapsible &&
3669 o.alwaysOpen != $.ui.accordion.defaults.alwaysOpen) {
3670 o.collapsible = !o.alwaysOpen;
3671 }
3672
3673 if ( o.navigation ) {
3674 var current = this.element.find("a").filter(o.navigationFilter);
3675 if ( current.length ) {
3676 if ( current.filter(o.header).length ) {
3677 this.active = current;
3678 } else {
3679 this.active = current.parent().parent().prev();
3680 current.addClass("ui-accordion-content-active");
3681 }
3682 }
3683 }
3684
3685 this.element.addClass("ui-accordion ui-widget ui-helper-reset");
3686
3687 // in lack of child-selectors in CSS we need to mark top-LIs in a UL-accordion for some IE-fix
3688 if (this.element[0].nodeName == "UL") {
3689 this.element.children("li").addClass("ui-accordion-li-fix");
3690 }
3691
3692 this.headers = this.element.find(o.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all")
3693 .bind("mouseenter.accordion", function(){ $(this).addClass('ui-state-hover'); })
3694 .bind("mouseleave.accordion", function(){ $(this).removeClass('ui-state-hover'); })
3695 .bind("focus.accordion", function(){ $(this).addClass('ui-state-focus'); })
3696 .bind("blur.accordion", function(){ $(this).removeClass('ui-state-focus'); });
3697
3698 this.headers
3699 .next()
3700 .addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
3701
3702 this.active = this._findActive(this.active || o.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");
3703 this.active.next().addClass('ui-accordion-content-active');
3704
3705 //Append icon elements
3706 $("<span/>").addClass("ui-icon " + o.icons.header).prependTo(this.headers);
3707 this.active.find(".ui-icon").toggleClass(o.icons.header).toggleClass(o.icons.headerSelected);
3708
3709 // IE7-/Win - Extra vertical space in lists fixed
3710 if ($.browser.msie) {
3711 this.element.find('a').css('zoom', '1');
3712 }
3713
3714 this.resize();
3715
3716 //ARIA
3717 this.element.attr('role','tablist');
3718
3719 this.headers
3720 .attr('role','tab')
3721 .bind('keydown', function(event) { return self._keydown(event); })
3722 .next()
3723 .attr('role','tabpanel');
3724
3725 this.headers
3726 .not(this.active || "")
3727 .attr('aria-expanded','false')
3728 .attr("tabIndex", "-1")
3729 .next()
3730 .hide();
3731
3732 // make sure at least one header is in the tab order
3733 if (!this.active.length) {
3734 this.headers.eq(0).attr('tabIndex','0');
3735 } else {
3736 this.active
3737 .attr('aria-expanded','true')
3738 .attr('tabIndex', '0');
3739 }
3740
3741 // only need links in taborder for Safari
3742 if (!$.browser.safari)
3743 this.headers.find('a').attr('tabIndex','-1');
3744
3745 if (o.event) {
3746 this.headers.bind((o.event) + ".accordion", function(event) { return self._clickHandler.call(self, event, this); });
3747 }
3748
3749 },
3750
3751 destroy: function() {
3752 var o = this.options;
3753
3754 this.element
3755 .removeClass("ui-accordion ui-widget ui-helper-reset")
3756 .removeAttr("role")
3757 .unbind('.accordion')
3758 .removeData('accordion');
3759
3760 this.headers
3761 .unbind(".accordion")
3762 .removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top")
3763 .removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");
3764
3765 this.headers.find("a").removeAttr("tabindex");
3766 this.headers.children(".ui-icon").remove();
3767 var contents = this.headers.next().css("display", "").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");
3768 if (o.autoHeight || o.fillHeight) {
3769 contents.css("height", "");
3770 }
3771 },
3772
3773 _setData: function(key, value) {
3774 if(key == 'alwaysOpen') { key = 'collapsible'; value = !value; }
3775 $.widget.prototype._setData.apply(this, arguments);
3776 },
3777
3778 _keydown: function(event) {
3779
3780 var o = this.options, keyCode = $.ui.keyCode;
3781
3782 if (o.disabled || event.altKey || event.ctrlKey)
3783 return;
3784
3785 var length = this.headers.length;
3786 var currentIndex = this.headers.index(event.target);
3787 var toFocus = false;
3788
3789 switch(event.keyCode) {
3790 case keyCode.RIGHT:
3791 case keyCode.DOWN:
3792 toFocus = this.headers[(currentIndex + 1) % length];
3793 break;
3794 case keyCode.LEFT:
3795 case keyCode.UP:
3796 toFocus = this.headers[(currentIndex - 1 + length) % length];
3797 break;
3798 case keyCode.SPACE:
3799 case keyCode.ENTER:
3800 return this._clickHandler({ target: event.target }, event.target);
3801 }
3802
3803 if (toFocus) {
3804 $(event.target).attr('tabIndex','-1');
3805 $(toFocus).attr('tabIndex','0');
3806 toFocus.focus();
3807 return false;
3808 }
3809
3810 return true;
3811
3812 },
3813
3814 resize: function() {
3815
3816 var o = this.options, maxHeight;
3817
3818 if (o.fillSpace) {
3819
3820 if($.browser.msie) { var defOverflow = this.element.parent().css('overflow'); this.element.parent().css('overflow', 'hidden'); }
3821 maxHeight = this.element.parent().height();
3822 if($.browser.msie) { this.element.parent().css('overflow', defOverflow); }
3823
3824 this.headers.each(function() {
3825 maxHeight -= $(this).outerHeight();
3826 });
3827
3828 var maxPadding = 0;
3829 this.headers.next().each(function() {
3830 maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height());
3831 }).height(Math.max(0, maxHeight - maxPadding))
3832 .css('overflow', 'auto');
3833
3834 } else if ( o.autoHeight ) {
3835 maxHeight = 0;
3836 this.headers.next().each(function() {
3837 maxHeight = Math.max(maxHeight, $(this).outerHeight());
3838 }).height(maxHeight);
3839 }
3840
3841 },
3842
3843 activate: function(index) {
3844 // call clickHandler with custom event
3845 var active = this._findActive(index)[0];
3846 this._clickHandler({ target: active }, active);
3847 },
3848
3849 _findActive: function(selector) {
3850 return selector
3851 ? typeof selector == "number"
3852 ? this.headers.filter(":eq(" + selector + ")")
3853 : this.headers.not(this.headers.not(selector))
3854 : selector === false
3855 ? $([])
3856 : this.headers.filter(":eq(0)");
3857 },
3858
3859 _clickHandler: function(event, target) {
3860
3861 var o = this.options;
3862 if (o.disabled) return false;
3863
3864 // called only when using activate(false) to close all parts programmatically
3865 if (!event.target && o.collapsible) {
3866 this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all")
3867 .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header);
3868 this.active.next().addClass('ui-accordion-content-active');
3869 var toHide = this.active.next(),
3870 data = {
3871 options: o,
3872 newHeader: $([]),
3873 oldHeader: o.active,
3874 newContent: $([]),
3875 oldContent: toHide
3876 },
3877 toShow = (this.active = $([]));
3878 this._toggle(toShow, toHide, data);
3879 return false;
3880 }
3881
3882 // get the click target
3883 var clicked = $(event.currentTarget || target);
3884 var clickedIsActive = clicked[0] == this.active[0];
3885
3886 // if animations are still active, or the active header is the target, ignore click
3887 if (this.running || (!o.collapsible && clickedIsActive)) {
3888 return false;
3889 }
3890
3891 // switch classes
3892 this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all")
3893 .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header);
3894 this.active.next().addClass('ui-accordion-content-active');
3895 if (!clickedIsActive) {
3896 clicked.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top")
3897 .find(".ui-icon").removeClass(o.icons.header).addClass(o.icons.headerSelected);
3898 clicked.next().addClass('ui-accordion-content-active');
3899 }
3900
3901 // find elements to show and hide
3902 var toShow = clicked.next(),
3903 toHide = this.active.next(),
3904 data = {
3905 options: o,
3906 newHeader: clickedIsActive && o.collapsible ? $([]) : clicked,
3907 oldHeader: this.active,
3908 newContent: clickedIsActive && o.collapsible ? $([]) : toShow.find('> *'),
3909 oldContent: toHide.find('> *')
3910 },
3911 down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
3912
3913 this.active = clickedIsActive ? $([]) : clicked;
3914 this._toggle(toShow, toHide, data, clickedIsActive, down);
3915
3916 return false;
3917
3918 },
3919
3920 _toggle: function(toShow, toHide, data, clickedIsActive, down) {
3921
3922 var o = this.options, self = this;
3923
3924 this.toShow = toShow;
3925 this.toHide = toHide;
3926 this.data = data;
3927
3928 var complete = function() { if(!self) return; return self._completed.apply(self, arguments); };
3929
3930 // trigger changestart event
3931 this._trigger("changestart", null, this.data);
3932
3933 // count elements to animate
3934 this.running = toHide.size() === 0 ? toShow.size() : toHide.size();
3935
3936 if (o.animated) {
3937
3938 var animOptions = {};
3939
3940 if ( o.collapsible && clickedIsActive ) {
3941 animOptions = {
3942 toShow: $([]),
3943 toHide: toHide,
3944 complete: complete,
3945 down: down,
3946 autoHeight: o.autoHeight || o.fillSpace
3947 };
3948 } else {
3949 animOptions = {
3950 toShow: toShow,
3951 toHide: toHide,
3952 complete: complete,
3953 down: down,
3954 autoHeight: o.autoHeight || o.fillSpace
3955 };
3956 }
3957
3958 if (!o.proxied) {
3959 o.proxied = o.animated;
3960 }
3961
3962 if (!o.proxiedDuration) {
3963 o.proxiedDuration = o.duration;
3964 }
3965
3966 o.animated = $.isFunction(o.proxied) ?
3967 o.proxied(animOptions) : o.proxied;
3968
3969 o.duration = $.isFunction(o.proxiedDuration) ?
3970 o.proxiedDuration(animOptions) : o.proxiedDuration;
3971
3972 var animations = $.ui.accordion.animations,
3973 duration = o.duration,
3974 easing = o.animated;
3975
3976 if (!animations[easing]) {
3977 animations[easing] = function(options) {
3978 this.slide(options, {
3979 easing: easing,
3980 duration: duration || 700
3981 });
3982 };
3983 }
3984
3985 animations[easing](animOptions);
3986
3987 } else {
3988
3989 if (o.collapsible && clickedIsActive) {
3990 toShow.toggle();
3991 } else {
3992 toHide.hide();
3993 toShow.show();
3994 }
3995
3996 complete(true);
3997
3998 }
3999
4000 toHide.prev().attr('aria-expanded','false').attr("tabIndex", "-1").blur();
4001 toShow.prev().attr('aria-expanded','true').attr("tabIndex", "0").focus();
4002
4003 },
4004
4005 _completed: function(cancel) {
4006
4007 var o = this.options;
4008
4009 this.running = cancel ? 0 : --this.running;
4010 if (this.running) return;
4011
4012 if (o.clearStyle) {
4013 this.toShow.add(this.toHide).css({
4014 height: "",
4015 overflow: ""
4016 });
4017 }
4018
4019 this._trigger('change', null, this.data);
4020 }
4021
4022});
4023
4024
4025$.extend($.ui.accordion, {
4026 version: "1.7.2",
4027 defaults: {
4028 active: null,
4029 alwaysOpen: true, //deprecated, use collapsible
4030 animated: 'slide',
4031 autoHeight: true,
4032 clearStyle: false,
4033 collapsible: false,
4034 event: "click",
4035 fillSpace: false,
4036 header: "> li > :first-child,> :not(li):even",
4037 icons: {
4038 header: "ui-icon-triangle-1-e",
4039 headerSelected: "ui-icon-triangle-1-s"
4040 },
4041 navigation: false,
4042 navigationFilter: function() {
4043 return this.href.toLowerCase() == location.href.toLowerCase();
4044 }
4045 },
4046 animations: {
4047 slide: function(options, additions) {
4048 options = $.extend({
4049 easing: "swing",
4050 duration: 300
4051 }, options, additions);
4052 if ( !options.toHide.size() ) {
4053 options.toShow.animate({height: "show"}, options);
4054 return;
4055 }
4056 if ( !options.toShow.size() ) {
4057 options.toHide.animate({height: "hide"}, options);
4058 return;
4059 }
4060 var overflow = options.toShow.css('overflow'),
4061 percentDone,
4062 showProps = {},
4063 hideProps = {},
4064 fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
4065 originalWidth;
4066 // fix width before calculating height of hidden element
4067 var s = options.toShow;
4068 originalWidth = s[0].style.width;
4069 s.width( parseInt(s.parent().width(),10) - parseInt(s.css("paddingLeft"),10) - parseInt(s.css("paddingRight"),10) - (parseInt(s.css("borderLeftWidth"),10) || 0) - (parseInt(s.css("borderRightWidth"),10) || 0) );
4070
4071 $.each(fxAttrs, function(i, prop) {
4072 hideProps[prop] = 'hide';
4073
4074 var parts = ('' + $.css(options.toShow[0], prop)).match(/^([\d+-.]+)(.*)$/);
4075 showProps[prop] = {
4076 value: parts[1],
4077 unit: parts[2] || 'px'
4078 };
4079 });
4080 options.toShow.css({ height: 0, overflow: 'hidden' }).show();
4081 options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate(hideProps,{
4082 step: function(now, settings) {
4083 // only calculate the percent when animating height
4084 // IE gets very inconsistent results when animating elements
4085 // with small values, which is common for padding
4086 if (settings.prop == 'height') {
4087 percentDone = (settings.now - settings.start) / (settings.end - settings.start);
4088 }
4089
4090 options.toShow[0].style[settings.prop] =
4091 (percentDone * showProps[settings.prop].value) + showProps[settings.prop].unit;
4092 },
4093 duration: options.duration,
4094 easing: options.easing,
4095 complete: function() {
4096 if ( !options.autoHeight ) {
4097 options.toShow.css("height", "");
4098 }
4099 options.toShow.css("width", originalWidth);
4100 options.toShow.css({overflow: overflow});
4101 options.complete();
4102 }
4103 });
4104 },
4105 bounceslide: function(options) {
4106 this.slide(options, {
4107 easing: options.down ? "easeOutBounce" : "swing",
4108 duration: options.down ? 1000 : 200
4109 });
4110 },
4111 easeslide: function(options) {
4112 this.slide(options, {
4113 easing: "easeinout",
4114 duration: 700
4115 });
4116 }
4117 }
4118});
4119
4120})(jQuery);
4121/*
4122 * jQuery UI Dialog 1.7.2
4123 *
4124 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4125 * Dual licensed under the MIT (MIT-LICENSE.txt)
4126 * and GPL (GPL-LICENSE.txt) licenses.
4127 *
4128 * http://docs.jquery.com/UI/Dialog
4129 *
4130 * Depends:
4131 * ui.core.js
4132 * ui.draggable.js
4133 * ui.resizable.js
4134 */
4135(function($) {
4136
4137var setDataSwitch = {
4138 dragStart: "start.draggable",
4139 drag: "drag.draggable",
4140 dragStop: "stop.draggable",
4141 maxHeight: "maxHeight.resizable",
4142 minHeight: "minHeight.resizable",
4143 maxWidth: "maxWidth.resizable",
4144 minWidth: "minWidth.resizable",
4145 resizeStart: "start.resizable",
4146 resize: "drag.resizable",
4147 resizeStop: "stop.resizable"
4148 },
4149
4150 uiDialogClasses =
4151 'ui-dialog ' +
4152 'ui-widget ' +
4153 'ui-widget-content ' +
4154 'ui-corner-all ';
4155
4156$.widget("ui.dialog", {
4157
4158 _init: function() {
4159 this.originalTitle = this.element.attr('title');
4160
4161 var self = this,
4162 options = this.options,
4163
4164 title = options.title || this.originalTitle || '&nbsp;',
4165 titleId = $.ui.dialog.getTitleId(this.element),
4166
4167 uiDialog = (this.uiDialog = $('<div/>'))
4168 .appendTo(document.body)
4169 .hide()
4170 .addClass(uiDialogClasses + options.dialogClass)
4171 .css({
4172 position: 'absolute',
4173 overflow: 'hidden',
4174 zIndex: options.zIndex
4175 })
4176 // setting tabIndex makes the div focusable
4177 // setting outline to 0 prevents a border on focus in Mozilla
4178 .attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
4179 (options.closeOnEscape && event.keyCode
4180 && event.keyCode == $.ui.keyCode.ESCAPE && self.close(event));
4181 })
4182 .attr({
4183 role: 'dialog',
4184 'aria-labelledby': titleId
4185 })
4186 .mousedown(function(event) {
4187 self.moveToTop(false, event);
4188 }),
4189
4190 uiDialogContent = this.element
4191 .show()
4192 .removeAttr('title')
4193 .addClass(
4194 'ui-dialog-content ' +
4195 'ui-widget-content')
4196 .appendTo(uiDialog),
4197
4198 uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>'))
4199 .addClass(
4200 'ui-dialog-titlebar ' +
4201 'ui-widget-header ' +
4202 'ui-corner-all ' +
4203 'ui-helper-clearfix'
4204 )
4205 .prependTo(uiDialog),
4206
4207 uiDialogTitlebarClose = $('<a href="#"/>')
4208 .addClass(
4209 'ui-dialog-titlebar-close ' +
4210 'ui-corner-all'
4211 )
4212 .attr('role', 'button')
4213 .hover(
4214 function() {
4215 uiDialogTitlebarClose.addClass('ui-state-hover');
4216 },
4217 function() {
4218 uiDialogTitlebarClose.removeClass('ui-state-hover');
4219 }
4220 )
4221 .focus(function() {
4222 uiDialogTitlebarClose.addClass('ui-state-focus');
4223 })
4224 .blur(function() {
4225 uiDialogTitlebarClose.removeClass('ui-state-focus');
4226 })
4227 .mousedown(function(ev) {
4228 ev.stopPropagation();
4229 })
4230 .click(function(event) {
4231 self.close(event);
4232 return false;
4233 })
4234 .appendTo(uiDialogTitlebar),
4235
4236 uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>'))
4237 .addClass(
4238 'ui-icon ' +
4239 'ui-icon-closethick'
4240 )
4241 .text(options.closeText)
4242 .appendTo(uiDialogTitlebarClose),
4243
4244 uiDialogTitle = $('<span/>')
4245 .addClass('ui-dialog-title')
4246 .attr('id', titleId)
4247 .html(title)
4248 .prependTo(uiDialogTitlebar);
4249
4250 uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
4251
4252 (options.draggable && $.fn.draggable && this._makeDraggable());
4253 (options.resizable && $.fn.resizable && this._makeResizable());
4254
4255 this._createButtons(options.buttons);
4256 this._isOpen = false;
4257
4258 (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe());
4259 (options.autoOpen && this.open());
4260
4261 },
4262
4263 destroy: function() {
4264 (this.overlay && this.overlay.destroy());
4265 this.uiDialog.hide();
4266 this.element
4267 .unbind('.dialog')
4268 .removeData('dialog')
4269 .removeClass('ui-dialog-content ui-widget-content')
4270 .hide().appendTo('body');
4271 this.uiDialog.remove();
4272
4273 (this.originalTitle && this.element.attr('title', this.originalTitle));
4274 },
4275
4276 close: function(event) {
4277 var self = this;
4278
4279 if (false === self._trigger('beforeclose', event)) {
4280 return;
4281 }
4282
4283 (self.overlay && self.overlay.destroy());
4284 self.uiDialog.unbind('keypress.ui-dialog');
4285
4286 (self.options.hide
4287 ? self.uiDialog.hide(self.options.hide, function() {
4288 self._trigger('close', event);
4289 })
4290 : self.uiDialog.hide() && self._trigger('close', event));
4291
4292 $.ui.dialog.overlay.resize();
4293
4294 self._isOpen = false;
4295
4296 // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
4297 if (self.options.modal) {
4298 var maxZ = 0;
4299 $('.ui-dialog').each(function() {
4300 if (this != self.uiDialog[0]) {
4301 maxZ = Math.max(maxZ, $(this).css('z-index'));
4302 }
4303 });
4304 $.ui.dialog.maxZ = maxZ;
4305 }
4306 },
4307
4308 isOpen: function() {
4309 return this._isOpen;
4310 },
4311
4312 // the force parameter allows us to move modal dialogs to their correct
4313 // position on open
4314 moveToTop: function(force, event) {
4315
4316 if ((this.options.modal && !force)
4317 || (!this.options.stack && !this.options.modal)) {
4318 return this._trigger('focus', event);
4319 }
4320
4321 if (this.options.zIndex > $.ui.dialog.maxZ) {
4322 $.ui.dialog.maxZ = this.options.zIndex;
4323 }
4324 (this.overlay && this.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = ++$.ui.dialog.maxZ));
4325
4326 //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
4327 // http://ui.jquery.com/bugs/ticket/3193
4328 var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') };
4329 this.uiDialog.css('z-index', ++$.ui.dialog.maxZ);
4330 this.element.attr(saveScroll);
4331 this._trigger('focus', event);
4332 },
4333
4334 open: function() {
4335 if (this._isOpen) { return; }
4336
4337 var options = this.options,
4338 uiDialog = this.uiDialog;
4339
4340 this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null;
4341 (uiDialog.next().length && uiDialog.appendTo('body'));
4342 this._size();
4343 this._position(options.position);
4344 uiDialog.show(options.show);
4345 this.moveToTop(true);
4346
4347 // prevent tabbing out of modal dialogs
4348 (options.modal && uiDialog.bind('keypress.ui-dialog', function(event) {
4349 if (event.keyCode != $.ui.keyCode.TAB) {
4350 return;
4351 }
4352
4353 var tabbables = $(':tabbable', this),
4354 first = tabbables.filter(':first')[0],
4355 last = tabbables.filter(':last')[0];
4356
4357 if (event.target == last && !event.shiftKey) {
4358 setTimeout(function() {
4359 first.focus();
4360 }, 1);
4361 } else if (event.target == first && event.shiftKey) {
4362 setTimeout(function() {
4363 last.focus();
4364 }, 1);
4365 }
4366 }));
4367
4368 // set focus to the first tabbable element in the content area or the first button
4369 // if there are no tabbable elements, set focus on the dialog itself
4370 $([])
4371 .add(uiDialog.find('.ui-dialog-content :tabbable:first'))
4372 .add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first'))
4373 .add(uiDialog)
4374 .filter(':first')
4375 .focus();
4376
4377 this._trigger('open');
4378 this._isOpen = true;
4379 },
4380
4381 _createButtons: function(buttons) {
4382 var self = this,
4383 hasButtons = false,
4384 uiDialogButtonPane = $('<div></div>')
4385 .addClass(
4386 'ui-dialog-buttonpane ' +
4387 'ui-widget-content ' +
4388 'ui-helper-clearfix'
4389 );
4390
4391 // if we already have a button pane, remove it
4392 this.uiDialog.find('.ui-dialog-buttonpane').remove();
4393
4394 (typeof buttons == 'object' && buttons !== null &&
4395 $.each(buttons, function() { return !(hasButtons = true); }));
4396 if (hasButtons) {
4397 $.each(buttons, function(name, fn) {
4398 $('<button type="button"></button>')
4399 .addClass(
4400 'ui-state-default ' +
4401 'ui-corner-all'
4402 )
4403 .text(name)
4404 .click(function() { fn.apply(self.element[0], arguments); })
4405 .hover(
4406 function() {
4407 $(this).addClass('ui-state-hover');
4408 },
4409 function() {
4410 $(this).removeClass('ui-state-hover');
4411 }
4412 )
4413 .focus(function() {
4414 $(this).addClass('ui-state-focus');
4415 })
4416 .blur(function() {
4417 $(this).removeClass('ui-state-focus');
4418 })
4419 .appendTo(uiDialogButtonPane);
4420 });
4421 uiDialogButtonPane.appendTo(this.uiDialog);
4422 }
4423 },
4424
4425 _makeDraggable: function() {
4426 var self = this,
4427 options = this.options,
4428 heightBeforeDrag;
4429
4430 this.uiDialog.draggable({
4431 cancel: '.ui-dialog-content',
4432 handle: '.ui-dialog-titlebar',
4433 containment: 'document',
4434 start: function() {
4435 heightBeforeDrag = options.height;
4436 $(this).height($(this).height()).addClass("ui-dialog-dragging");
4437 (options.dragStart && options.dragStart.apply(self.element[0], arguments));
4438 },
4439 drag: function() {
4440 (options.drag && options.drag.apply(self.element[0], arguments));
4441 },
4442 stop: function() {
4443 $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
4444 (options.dragStop && options.dragStop.apply(self.element[0], arguments));
4445 $.ui.dialog.overlay.resize();
4446 }
4447 });
4448 },
4449
4450 _makeResizable: function(handles) {
4451 handles = (handles === undefined ? this.options.resizable : handles);
4452 var self = this,
4453 options = this.options,
4454 resizeHandles = typeof handles == 'string'
4455 ? handles
4456 : 'n,e,s,w,se,sw,ne,nw';
4457
4458 this.uiDialog.resizable({
4459 cancel: '.ui-dialog-content',
4460 alsoResize: this.element,
4461 maxWidth: options.maxWidth,
4462 maxHeight: options.maxHeight,
4463 minWidth: options.minWidth,
4464 minHeight: options.minHeight,
4465 start: function() {
4466 $(this).addClass("ui-dialog-resizing");
4467 (options.resizeStart && options.resizeStart.apply(self.element[0], arguments));
4468 },
4469 resize: function() {
4470 (options.resize && options.resize.apply(self.element[0], arguments));
4471 },
4472 handles: resizeHandles,
4473 stop: function() {
4474 $(this).removeClass("ui-dialog-resizing");
4475 options.height = $(this).height();
4476 options.width = $(this).width();
4477 (options.resizeStop && options.resizeStop.apply(self.element[0], arguments));
4478 $.ui.dialog.overlay.resize();
4479 }
4480 })
4481 .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
4482 },
4483
4484 _position: function(pos) {
4485 var wnd = $(window), doc = $(document),
4486 pTop = doc.scrollTop(), pLeft = doc.scrollLeft(),
4487 minTop = pTop;
4488
4489 if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) {
4490 pos = [
4491 pos == 'right' || pos == 'left' ? pos : 'center',
4492 pos == 'top' || pos == 'bottom' ? pos : 'middle'
4493 ];
4494 }
4495 if (pos.constructor != Array) {
4496 pos = ['center', 'middle'];
4497 }
4498 if (pos[0].constructor == Number) {
4499 pLeft += pos[0];
4500 } else {
4501 switch (pos[0]) {
4502 case 'left':
4503 pLeft += 0;
4504 break;
4505 case 'right':
4506 pLeft += wnd.width() - this.uiDialog.outerWidth();
4507 break;
4508 default:
4509 case 'center':
4510 pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2;
4511 }
4512 }
4513 if (pos[1].constructor == Number) {
4514 pTop += pos[1];
4515 } else {
4516 switch (pos[1]) {
4517 case 'top':
4518 pTop += 0;
4519 break;
4520 case 'bottom':
4521 pTop += wnd.height() - this.uiDialog.outerHeight();
4522 break;
4523 default:
4524 case 'middle':
4525 pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2;
4526 }
4527 }
4528
4529 // prevent the dialog from being too high (make sure the titlebar
4530 // is accessible)
4531 pTop = Math.max(pTop, minTop);
4532 this.uiDialog.css({top: pTop, left: pLeft});
4533 },
4534
4535 _setData: function(key, value){
4536 (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value));
4537 switch (key) {
4538 case "buttons":
4539 this._createButtons(value);
4540 break;
4541 case "closeText":
4542 this.uiDialogTitlebarCloseText.text(value);
4543 break;
4544 case "dialogClass":
4545 this.uiDialog
4546 .removeClass(this.options.dialogClass)
4547 .addClass(uiDialogClasses + value);
4548 break;
4549 case "draggable":
4550 (value
4551 ? this._makeDraggable()
4552 : this.uiDialog.draggable('destroy'));
4553 break;
4554 case "height":
4555 this.uiDialog.height(value);
4556 break;
4557 case "position":
4558 this._position(value);
4559 break;
4560 case "resizable":
4561 var uiDialog = this.uiDialog,
4562 isResizable = this.uiDialog.is(':data(resizable)');
4563
4564 // currently resizable, becoming non-resizable
4565 (isResizable && !value && uiDialog.resizable('destroy'));
4566
4567 // currently resizable, changing handles
4568 (isResizable && typeof value == 'string' &&
4569 uiDialog.resizable('option', 'handles', value));
4570
4571 // currently non-resizable, becoming resizable
4572 (isResizable || this._makeResizable(value));
4573 break;
4574 case "title":
4575 $(".ui-dialog-title", this.uiDialogTitlebar).html(value || '&nbsp;');
4576 break;
4577 case "width":
4578 this.uiDialog.width(value);
4579 break;
4580 }
4581
4582 $.widget.prototype._setData.apply(this, arguments);
4583 },
4584
4585 _size: function() {
4586 /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
4587 * divs will both have width and height set, so we need to reset them
4588 */
4589 var options = this.options;
4590
4591 // reset content sizing
4592 this.element.css({
4593 height: 0,
4594 minHeight: 0,
4595 width: 'auto'
4596 });
4597
4598 // reset wrapper sizing
4599 // determine the height of all the non-content elements
4600 var nonContentHeight = this.uiDialog.css({
4601 height: 'auto',
4602 width: options.width
4603 })
4604 .height();
4605
4606 this.element
4607 .css({
4608 minHeight: Math.max(options.minHeight - nonContentHeight, 0),
4609 height: options.height == 'auto'
4610 ? 'auto'
4611 : Math.max(options.height - nonContentHeight, 0)
4612 });
4613 }
4614});
4615
4616$.extend($.ui.dialog, {
4617 version: "1.7.2",
4618 defaults: {
4619 autoOpen: true,
4620 bgiframe: false,
4621 buttons: {},
4622 closeOnEscape: true,
4623 closeText: 'close',
4624 dialogClass: '',
4625 draggable: true,
4626 hide: null,
4627 height: 'auto',
4628 maxHeight: false,
4629 maxWidth: false,
4630 minHeight: 150,
4631 minWidth: 150,
4632 modal: false,
4633 position: 'center',
4634 resizable: true,
4635 show: null,
4636 stack: true,
4637 title: '',
4638 width: 300,
4639 zIndex: 1000
4640 },
4641
4642 getter: 'isOpen',
4643
4644 uuid: 0,
4645 maxZ: 0,
4646
4647 getTitleId: function($el) {
4648 return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid);
4649 },
4650
4651 overlay: function(dialog) {
4652 this.$el = $.ui.dialog.overlay.create(dialog);
4653 }
4654});
4655
4656$.extend($.ui.dialog.overlay, {
4657 instances: [],
4658 maxZ: 0,
4659 events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
4660 function(event) { return event + '.dialog-overlay'; }).join(' '),
4661 create: function(dialog) {
4662 if (this.instances.length === 0) {
4663 // prevent use of anchors and inputs
4664 // we use a setTimeout in case the overlay is created from an
4665 // event that we're going to be cancelling (see #2804)
4666 setTimeout(function() {
4667 // handle $(el).dialog().dialog('close') (see #4065)
4668 if ($.ui.dialog.overlay.instances.length) {
4669 $(document).bind($.ui.dialog.overlay.events, function(event) {
4670 var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0;
4671 return (dialogZ > $.ui.dialog.overlay.maxZ);
4672 });
4673 }
4674 }, 1);
4675
4676 // allow closing by pressing the escape key
4677 $(document).bind('keydown.dialog-overlay', function(event) {
4678 (dialog.options.closeOnEscape && event.keyCode
4679 && event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event));
4680 });
4681
4682 // handle window resize
4683 $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
4684 }
4685
4686 var $el = $('<div></div>').appendTo(document.body)
4687 .addClass('ui-widget-overlay').css({
4688 width: this.width(),
4689 height: this.height()
4690 });
4691
4692 (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe());
4693
4694 this.instances.push($el);
4695 return $el;
4696 },
4697
4698 destroy: function($el) {
4699 this.instances.splice($.inArray(this.instances, $el), 1);
4700
4701 if (this.instances.length === 0) {
4702 $([document, window]).unbind('.dialog-overlay');
4703 }
4704
4705 $el.remove();
4706
4707 // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
4708 var maxZ = 0;
4709 $.each(this.instances, function() {
4710 maxZ = Math.max(maxZ, this.css('z-index'));
4711 });
4712 this.maxZ = maxZ;
4713 },
4714
4715 height: function() {
4716 // handle IE 6
4717 if ($.browser.msie && $.browser.version < 7) {
4718 var scrollHeight = Math.max(
4719 document.documentElement.scrollHeight,
4720 document.body.scrollHeight
4721 );
4722 var offsetHeight = Math.max(
4723 document.documentElement.offsetHeight,
4724 document.body.offsetHeight
4725 );
4726
4727 if (scrollHeight < offsetHeight) {
4728 return $(window).height() + 'px';
4729 } else {
4730 return scrollHeight + 'px';
4731 }
4732 // handle "good" browsers
4733 } else {
4734 return $(document).height() + 'px';
4735 }
4736 },
4737
4738 width: function() {
4739 // handle IE 6
4740 if ($.browser.msie && $.browser.version < 7) {
4741 var scrollWidth = Math.max(
4742 document.documentElement.scrollWidth,
4743 document.body.scrollWidth
4744 );
4745 var offsetWidth = Math.max(
4746 document.documentElement.offsetWidth,
4747 document.body.offsetWidth
4748 );
4749
4750 if (scrollWidth < offsetWidth) {
4751 return $(window).width() + 'px';
4752 } else {
4753 return scrollWidth + 'px';
4754 }
4755 // handle "good" browsers
4756 } else {
4757 return $(document).width() + 'px';
4758 }
4759 },
4760
4761 resize: function() {
4762 /* If the dialog is draggable and the user drags it past the
4763 * right edge of the window, the document becomes wider so we
4764 * need to stretch the overlay. If the user then drags the
4765 * dialog back to the left, the document will become narrower,
4766 * so we need to shrink the overlay to the appropriate size.
4767 * This is handled by shrinking the overlay before setting it
4768 * to the full document size.
4769 */
4770 var $overlays = $([]);
4771 $.each($.ui.dialog.overlay.instances, function() {
4772 $overlays = $overlays.add(this);
4773 });
4774
4775 $overlays.css({
4776 width: 0,
4777 height: 0
4778 }).css({
4779 width: $.ui.dialog.overlay.width(),
4780 height: $.ui.dialog.overlay.height()
4781 });
4782 }
4783});
4784
4785$.extend($.ui.dialog.overlay.prototype, {
4786 destroy: function() {
4787 $.ui.dialog.overlay.destroy(this.$el);
4788 }
4789});
4790
4791})(jQuery);
4792/*
4793 * jQuery UI Slider 1.7.2
4794 *
4795 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4796 * Dual licensed under the MIT (MIT-LICENSE.txt)
4797 * and GPL (GPL-LICENSE.txt) licenses.
4798 *
4799 * http://docs.jquery.com/UI/Slider
4800 *
4801 * Depends:
4802 * ui.core.js
4803 */
4804
4805(function($) {
4806
4807$.widget("ui.slider", $.extend({}, $.ui.mouse, {
4808
4809 _init: function() {
4810
4811 var self = this, o = this.options;
4812 this._keySliding = false;
4813 this._handleIndex = null;
4814 this._detectOrientation();
4815 this._mouseInit();
4816
4817 this.element
4818 .addClass("ui-slider"
4819 + " ui-slider-" + this.orientation
4820 + " ui-widget"
4821 + " ui-widget-content"
4822 + " ui-corner-all");
4823
4824 this.range = $([]);
4825
4826 if (o.range) {
4827
4828 if (o.range === true) {
4829 this.range = $('<div></div>');
4830 if (!o.values) o.values = [this._valueMin(), this._valueMin()];
4831 if (o.values.length && o.values.length != 2) {
4832 o.values = [o.values[0], o.values[0]];
4833 }
4834 } else {
4835 this.range = $('<div></div>');
4836 }
4837
4838 this.range
4839 .appendTo(this.element)
4840 .addClass("ui-slider-range");
4841
4842 if (o.range == "min" || o.range == "max") {
4843 this.range.addClass("ui-slider-range-" + o.range);
4844 }
4845
4846 // note: this isn't the most fittingly semantic framework class for this element,
4847 // but worked best visually with a variety of themes
4848 this.range.addClass("ui-widget-header");
4849
4850 }
4851
4852 if ($(".ui-slider-handle", this.element).length == 0)
4853 $('<a href="#"></a>')
4854 .appendTo(this.element)
4855 .addClass("ui-slider-handle");
4856
4857 if (o.values && o.values.length) {
4858 while ($(".ui-slider-handle", this.element).length < o.values.length)
4859 $('<a href="#"></a>')
4860 .appendTo(this.element)
4861 .addClass("ui-slider-handle");
4862 }
4863
4864 this.handles = $(".ui-slider-handle", this.element)
4865 .addClass("ui-state-default"
4866 + " ui-corner-all");
4867
4868 this.handle = this.handles.eq(0);
4869
4870 this.handles.add(this.range).filter("a")
4871 .click(function(event) {
4872 event.preventDefault();
4873 })
4874 .hover(function() {
4875 if (!o.disabled) {
4876 $(this).addClass('ui-state-hover');
4877 }
4878 }, function() {
4879 $(this).removeClass('ui-state-hover');
4880 })
4881 .focus(function() {
4882 if (!o.disabled) {
4883 $(".ui-slider .ui-state-focus").removeClass('ui-state-focus'); $(this).addClass('ui-state-focus');
4884 } else {
4885 $(this).blur();
4886 }
4887 })
4888 .blur(function() {
4889 $(this).removeClass('ui-state-focus');
4890 });
4891
4892 this.handles.each(function(i) {
4893 $(this).data("index.ui-slider-handle", i);
4894 });
4895
4896 this.handles.keydown(function(event) {
4897
4898 var ret = true;
4899
4900 var index = $(this).data("index.ui-slider-handle");
4901
4902 if (self.options.disabled)
4903 return;
4904
4905 switch (event.keyCode) {
4906 case $.ui.keyCode.HOME:
4907 case $.ui.keyCode.END:
4908 case $.ui.keyCode.UP:
4909 case $.ui.keyCode.RIGHT:
4910 case $.ui.keyCode.DOWN:
4911 case $.ui.keyCode.LEFT:
4912 ret = false;
4913 if (!self._keySliding) {
4914 self._keySliding = true;
4915 $(this).addClass("ui-state-active");
4916 self._start(event, index);
4917 }
4918 break;
4919 }
4920
4921 var curVal, newVal, step = self._step();
4922 if (self.options.values && self.options.values.length) {
4923 curVal = newVal = self.values(index);
4924 } else {
4925 curVal = newVal = self.value();
4926 }
4927
4928 switch (event.keyCode) {
4929 case $.ui.keyCode.HOME:
4930 newVal = self._valueMin();
4931 break;
4932 case $.ui.keyCode.END:
4933 newVal = self._valueMax();
4934 break;
4935 case $.ui.keyCode.UP:
4936 case $.ui.keyCode.RIGHT:
4937 if(curVal == self._valueMax()) return;
4938 newVal = curVal + step;
4939 break;
4940 case $.ui.keyCode.DOWN:
4941 case $.ui.keyCode.LEFT:
4942 if(curVal == self._valueMin()) return;
4943 newVal = curVal - step;
4944 break;
4945 }
4946
4947 self._slide(event, index, newVal);
4948
4949 return ret;
4950
4951 }).keyup(function(event) {
4952
4953 var index = $(this).data("index.ui-slider-handle");
4954
4955 if (self._keySliding) {
4956 self._stop(event, index);
4957 self._change(event, index);
4958 self._keySliding = false;
4959 $(this).removeClass("ui-state-active");
4960 }
4961
4962 });
4963
4964 this._refreshValue();
4965
4966 },
4967
4968 destroy: function() {
4969
4970 this.handles.remove();
4971 this.range.remove();
4972
4973 this.element
4974 .removeClass("ui-slider"
4975 + " ui-slider-horizontal"
4976 + " ui-slider-vertical"
4977 + " ui-slider-disabled"
4978 + " ui-widget"
4979 + " ui-widget-content"
4980 + " ui-corner-all")
4981 .removeData("slider")
4982 .unbind(".slider");
4983
4984 this._mouseDestroy();
4985
4986 },
4987
4988 _mouseCapture: function(event) {
4989
4990 var o = this.options;
4991
4992 if (o.disabled)
4993 return false;
4994
4995 this.elementSize = {
4996 width: this.element.outerWidth(),
4997 height: this.element.outerHeight()
4998 };
4999 this.elementOffset = this.element.offset();
5000
5001 var position = { x: event.pageX, y: event.pageY };
5002 var normValue = this._normValueFromMouse(position);
5003
5004 var distance = this._valueMax() - this._valueMin() + 1, closestHandle;
5005 var self = this, index;
5006 this.handles.each(function(i) {
5007 var thisDistance = Math.abs(normValue - self.values(i));
5008 if (distance > thisDistance) {
5009 distance = thisDistance;
5010 closestHandle = $(this);
5011 index = i;
5012 }
5013 });
5014
5015 // workaround for bug #3736 (if both handles of a range are at 0,
5016 // the first is always used as the one with least distance,
5017 // and moving it is obviously prevented by preventing negative ranges)
5018 if(o.range == true && this.values(1) == o.min) {
5019 closestHandle = $(this.handles[++index]);
5020 }
5021
5022 this._start(event, index);
5023
5024 self._handleIndex = index;
5025
5026 closestHandle
5027 .addClass("ui-state-active")
5028 .focus();
5029
5030 var offset = closestHandle.offset();
5031 var mouseOverHandle = !$(event.target).parents().andSelf().is('.ui-slider-handle');
5032 this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
5033 left: event.pageX - offset.left - (closestHandle.width() / 2),
5034 top: event.pageY - offset.top
5035 - (closestHandle.height() / 2)
5036 - (parseInt(closestHandle.css('borderTopWidth'),10) || 0)
5037 - (parseInt(closestHandle.css('borderBottomWidth'),10) || 0)
5038 + (parseInt(closestHandle.css('marginTop'),10) || 0)
5039 };
5040
5041 normValue = this._normValueFromMouse(position);
5042 this._slide(event, index, normValue);
5043 return true;
5044
5045 },
5046
5047 _mouseStart: function(event) {
5048 return true;
5049 },
5050
5051 _mouseDrag: function(event) {
5052
5053 var position = { x: event.pageX, y: event.pageY };
5054 var normValue = this._normValueFromMouse(position);
5055
5056 this._slide(event, this._handleIndex, normValue);
5057
5058 return false;
5059
5060 },
5061
5062 _mouseStop: function(event) {
5063
5064 this.handles.removeClass("ui-state-active");
5065 this._stop(event, this._handleIndex);
5066 this._change(event, this._handleIndex);
5067 this._handleIndex = null;
5068 this._clickOffset = null;
5069
5070 return false;
5071
5072 },
5073
5074 _detectOrientation: function() {
5075 this.orientation = this.options.orientation == 'vertical' ? 'vertical' : 'horizontal';
5076 },
5077
5078 _normValueFromMouse: function(position) {
5079
5080 var pixelTotal, pixelMouse;
5081 if ('horizontal' == this.orientation) {
5082 pixelTotal = this.elementSize.width;
5083 pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0);
5084 } else {
5085 pixelTotal = this.elementSize.height;
5086 pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0);
5087 }
5088
5089 var percentMouse = (pixelMouse / pixelTotal);
5090 if (percentMouse > 1) percentMouse = 1;
5091 if (percentMouse < 0) percentMouse = 0;
5092 if ('vertical' == this.orientation)
5093 percentMouse = 1 - percentMouse;
5094
5095 var valueTotal = this._valueMax() - this._valueMin(),
5096 valueMouse = percentMouse * valueTotal,
5097 valueMouseModStep = valueMouse % this.options.step,
5098 normValue = this._valueMin() + valueMouse - valueMouseModStep;
5099
5100 if (valueMouseModStep > (this.options.step / 2))
5101 normValue += this.options.step;
5102
5103 // Since JavaScript has problems with large floats, round
5104 // the final value to 5 digits after the decimal point (see #4124)
5105 return parseFloat(normValue.toFixed(5));
5106
5107 },
5108
5109 _start: function(event, index) {
5110 var uiHash = {
5111 handle: this.handles[index],
5112 value: this.value()
5113 };
5114 if (this.options.values && this.options.values.length) {
5115 uiHash.value = this.values(index);
5116 uiHash.values = this.values();
5117 }
5118 this._trigger("start", event, uiHash);
5119 },
5120
5121 _slide: function(event, index, newVal) {
5122
5123 var handle = this.handles[index];
5124
5125 if (this.options.values && this.options.values.length) {
5126
5127 var otherVal = this.values(index ? 0 : 1);
5128
5129 if ((this.options.values.length == 2 && this.options.range === true) &&
5130 ((index == 0 && newVal > otherVal) || (index == 1 && newVal < otherVal))){
5131 newVal = otherVal;
5132 }
5133
5134 if (newVal != this.values(index)) {
5135 var newValues = this.values();
5136 newValues[index] = newVal;
5137 // A slide can be canceled by returning false from the slide callback
5138 var allowed = this._trigger("slide", event, {
5139 handle: this.handles[index],
5140 value: newVal,
5141 values: newValues
5142 });
5143 var otherVal = this.values(index ? 0 : 1);
5144 if (allowed !== false) {
5145 this.values(index, newVal, ( event.type == 'mousedown' && this.options.animate ), true);
5146 }
5147 }
5148
5149 } else {
5150
5151 if (newVal != this.value()) {
5152 // A slide can be canceled by returning false from the slide callback
5153 var allowed = this._trigger("slide", event, {
5154 handle: this.handles[index],
5155 value: newVal
5156 });
5157 if (allowed !== false) {
5158 this._setData('value', newVal, ( event.type == 'mousedown' && this.options.animate ));
5159 }
5160
5161 }
5162
5163 }
5164
5165 },
5166
5167 _stop: function(event, index) {
5168 var uiHash = {
5169 handle: this.handles[index],
5170 value: this.value()
5171 };
5172 if (this.options.values && this.options.values.length) {
5173 uiHash.value = this.values(index);
5174 uiHash.values = this.values();
5175 }
5176 this._trigger("stop", event, uiHash);
5177 },
5178
5179 _change: function(event, index) {
5180 var uiHash = {
5181 handle: this.handles[index],
5182 value: this.value()
5183 };
5184 if (this.options.values && this.options.values.length) {
5185 uiHash.value = this.values(index);
5186 uiHash.values = this.values();
5187 }
5188 this._trigger("change", event, uiHash);
5189 },
5190
5191 value: function(newValue) {
5192
5193 if (arguments.length) {
5194 this._setData("value", newValue);
5195 this._change(null, 0);
5196 }
5197
5198 return this._value();
5199
5200 },
5201
5202 values: function(index, newValue, animated, noPropagation) {
5203
5204 if (arguments.length > 1) {
5205 this.options.values[index] = newValue;
5206 this._refreshValue(animated);
5207 if(!noPropagation) this._change(null, index);
5208 }
5209
5210 if (arguments.length) {
5211 if (this.options.values && this.options.values.length) {
5212 return this._values(index);
5213 } else {
5214 return this.value();
5215 }
5216 } else {
5217 return this._values();
5218 }
5219
5220 },
5221
5222 _setData: function(key, value, animated) {
5223
5224 $.widget.prototype._setData.apply(this, arguments);
5225
5226 switch (key) {
5227 case 'disabled':
5228 if (value) {
5229 this.handles.filter(".ui-state-focus").blur();
5230 this.handles.removeClass("ui-state-hover");
5231 this.handles.attr("disabled", "disabled");
5232 } else {
5233 this.handles.removeAttr("disabled");
5234 }
5235 case 'orientation':
5236
5237 this._detectOrientation();
5238
5239 this.element
5240 .removeClass("ui-slider-horizontal ui-slider-vertical")
5241 .addClass("ui-slider-" + this.orientation);
5242 this._refreshValue(animated);
5243 break;
5244 case 'value':
5245 this._refreshValue(animated);
5246 break;
5247 }
5248
5249 },
5250
5251 _step: function() {
5252 var step = this.options.step;
5253 return step;
5254 },
5255
5256 _value: function() {
5257
5258 var val = this.options.value;
5259 if (val < this._valueMin()) val = this._valueMin();
5260 if (val > this._valueMax()) val = this._valueMax();
5261
5262 return val;
5263
5264 },
5265
5266 _values: function(index) {
5267
5268 if (arguments.length) {
5269 var val = this.options.values[index];
5270 if (val < this._valueMin()) val = this._valueMin();
5271 if (val > this._valueMax()) val = this._valueMax();
5272
5273 return val;
5274 } else {
5275 return this.options.values;
5276 }
5277
5278 },
5279
5280 _valueMin: function() {
5281 var valueMin = this.options.min;
5282 return valueMin;
5283 },
5284
5285 _valueMax: function() {
5286 var valueMax = this.options.max;
5287 return valueMax;
5288 },
5289
5290 _refreshValue: function(animate) {
5291
5292 var oRange = this.options.range, o = this.options, self = this;
5293
5294 if (this.options.values && this.options.values.length) {
5295 var vp0, vp1;
5296 this.handles.each(function(i, j) {
5297 var valPercent = (self.values(i) - self._valueMin()) / (self._valueMax() - self._valueMin()) * 100;
5298 var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
5299 $(this).stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);
5300 if (self.options.range === true) {
5301 if (self.orientation == 'horizontal') {
5302 (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ left: valPercent + '%' }, o.animate);
5303 (i == 1) && self.range[animate ? 'animate' : 'css']({ width: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
5304 } else {
5305 (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ bottom: (valPercent) + '%' }, o.animate);
5306 (i == 1) && self.range[animate ? 'animate' : 'css']({ height: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
5307 }
5308 }
5309 lastValPercent = valPercent;
5310 });
5311 } else {
5312 var value = this.value(),
5313 valueMin = this._valueMin(),
5314 valueMax = this._valueMax(),
5315 valPercent = valueMax != valueMin
5316 ? (value - valueMin) / (valueMax - valueMin) * 100
5317 : 0;
5318 var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
5319 this.handle.stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);
5320
5321 (oRange == "min") && (this.orientation == "horizontal") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ width: valPercent + '%' }, o.animate);
5322 (oRange == "max") && (this.orientation == "horizontal") && this.range[animate ? 'animate' : 'css']({ width: (100 - valPercent) + '%' }, { queue: false, duration: o.animate });
5323 (oRange == "min") && (this.orientation == "vertical") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ height: valPercent + '%' }, o.animate);
5324 (oRange == "max") && (this.orientation == "vertical") && this.range[animate ? 'animate' : 'css']({ height: (100 - valPercent) + '%' }, { queue: false, duration: o.animate });
5325 }
5326
5327 }
5328
5329}));
5330
5331$.extend($.ui.slider, {
5332 getter: "value values",
5333 version: "1.7.2",
5334 eventPrefix: "slide",
5335 defaults: {
5336 animate: false,
5337 delay: 0,
5338 distance: 0,
5339 max: 100,
5340 min: 0,
5341 orientation: 'horizontal',
5342 range: false,
5343 step: 1,
5344 value: 0,
5345 values: null
5346 }
5347});
5348
5349})(jQuery);
5350/*
5351 * jQuery UI Tabs 1.7.2
5352 *
5353 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5354 * Dual licensed under the MIT (MIT-LICENSE.txt)
5355 * and GPL (GPL-LICENSE.txt) licenses.
5356 *
5357 * http://docs.jquery.com/UI/Tabs
5358 *
5359 * Depends:
5360 * ui.core.js
5361 */
5362(function($) {
5363
5364$.widget("ui.tabs", {
5365
5366 _init: function() {
5367 if (this.options.deselectable !== undefined) {
5368 this.options.collapsible = this.options.deselectable;
5369 }
5370 this._tabify(true);
5371 },
5372
5373 _setData: function(key, value) {
5374 if (key == 'selected') {
5375 if (this.options.collapsible && value == this.options.selected) {
5376 return;
5377 }
5378 this.select(value);
5379 }
5380 else {
5381 this.options[key] = value;
5382 if (key == 'deselectable') {
5383 this.options.collapsible = value;
5384 }
5385 this._tabify();
5386 }
5387 },
5388
5389 _tabId: function(a) {
5390 return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') ||
5391 this.options.idPrefix + $.data(a);
5392 },
5393
5394 _sanitizeSelector: function(hash) {
5395 return hash.replace(/:/g, '\\:'); // we need this because an id may contain a ":"
5396 },
5397
5398 _cookie: function() {
5399 var cookie = this.cookie || (this.cookie = this.options.cookie.name || 'ui-tabs-' + $.data(this.list[0]));
5400 return $.cookie.apply(null, [cookie].concat($.makeArray(arguments)));
5401 },
5402
5403 _ui: function(tab, panel) {
5404 return {
5405 tab: tab,
5406 panel: panel,
5407 index: this.anchors.index(tab)
5408 };
5409 },
5410
5411 _cleanup: function() {
5412 // restore all former loading tabs labels
5413 this.lis.filter('.ui-state-processing').removeClass('ui-state-processing')
5414 .find('span:data(label.tabs)')
5415 .each(function() {
5416 var el = $(this);
5417 el.html(el.data('label.tabs')).removeData('label.tabs');
5418 });
5419 },
5420
5421 _tabify: function(init) {
5422
5423 this.list = this.element.children('ul:first');
5424 this.lis = $('li:has(a[href])', this.list);
5425 this.anchors = this.lis.map(function() { return $('a', this)[0]; });
5426 this.panels = $([]);
5427
5428 var self = this, o = this.options;
5429
5430 var fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
5431 this.anchors.each(function(i, a) {
5432 var href = $(a).attr('href');
5433
5434 // For dynamically created HTML that contains a hash as href IE < 8 expands
5435 // such href to the full page url with hash and then misinterprets tab as ajax.
5436 // Same consideration applies for an added tab with a fragment identifier
5437 // since a[href=#fragment-identifier] does unexpectedly not match.
5438 // Thus normalize href attribute...
5439 var hrefBase = href.split('#')[0], baseEl;
5440 if (hrefBase && (hrefBase === location.toString().split('#')[0] ||
5441 (baseEl = $('base')[0]) && hrefBase === baseEl.href)) {
5442 href = a.hash;
5443 a.href = href;
5444 }
5445
5446 // inline tab
5447 if (fragmentId.test(href)) {
5448 self.panels = self.panels.add(self._sanitizeSelector(href));
5449 }
5450
5451 // remote tab
5452 else if (href != '#') { // prevent loading the page itself if href is just "#"
5453 $.data(a, 'href.tabs', href); // required for restore on destroy
5454
5455 // TODO until #3808 is fixed strip fragment identifier from url
5456 // (IE fails to load from such url)
5457 $.data(a, 'load.tabs', href.replace(/#.*$/, '')); // mutable data
5458
5459 var id = self._tabId(a);
5460 a.href = '#' + id;
5461 var $panel = $('#' + id);
5462 if (!$panel.length) {
5463 $panel = $(o.panelTemplate).attr('id', id).addClass('ui-tabs-panel ui-widget-content ui-corner-bottom')
5464 .insertAfter(self.panels[i - 1] || self.list);
5465 $panel.data('destroy.tabs', true);
5466 }
5467 self.panels = self.panels.add($panel);
5468 }
5469
5470 // invalid tab href
5471 else {
5472 o.disabled.push(i);
5473 }
5474 });
5475
5476 // initialization from scratch
5477 if (init) {
5478
5479 // attach necessary classes for styling
5480 this.element.addClass('ui-tabs ui-widget ui-widget-content ui-corner-all');
5481 this.list.addClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');
5482 this.lis.addClass('ui-state-default ui-corner-top');
5483 this.panels.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom');
5484
5485 // Selected tab
5486 // use "selected" option or try to retrieve:
5487 // 1. from fragment identifier in url
5488 // 2. from cookie
5489 // 3. from selected class attribute on <li>
5490 if (o.selected === undefined) {
5491 if (location.hash) {
5492 this.anchors.each(function(i, a) {
5493 if (a.hash == location.hash) {
5494 o.selected = i;
5495 return false; // break
5496 }
5497 });
5498 }
5499 if (typeof o.selected != 'number' && o.cookie) {
5500 o.selected = parseInt(self._cookie(), 10);
5501 }
5502 if (typeof o.selected != 'number' && this.lis.filter('.ui-tabs-selected').length) {
5503 o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected'));
5504 }
5505 o.selected = o.selected || 0;
5506 }
5507 else if (o.selected === null) { // usage of null is deprecated, TODO remove in next release
5508 o.selected = -1;
5509 }
5510
5511 // sanity check - default to first tab...
5512 o.selected = ((o.selected >= 0 && this.anchors[o.selected]) || o.selected < 0) ? o.selected : 0;
5513
5514 // Take disabling tabs via class attribute from HTML
5515 // into account and update option properly.
5516 // A selected tab cannot become disabled.
5517 o.disabled = $.unique(o.disabled.concat(
5518 $.map(this.lis.filter('.ui-state-disabled'),
5519 function(n, i) { return self.lis.index(n); } )
5520 )).sort();
5521
5522 if ($.inArray(o.selected, o.disabled) != -1) {
5523 o.disabled.splice($.inArray(o.selected, o.disabled), 1);
5524 }
5525
5526 // highlight selected tab
5527 this.panels.addClass('ui-tabs-hide');
5528 this.lis.removeClass('ui-tabs-selected ui-state-active');
5529 if (o.selected >= 0 && this.anchors.length) { // check for length avoids error when initializing empty list
5530 this.panels.eq(o.selected).removeClass('ui-tabs-hide');
5531 this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active');
5532
5533 // seems to be expected behavior that the show callback is fired
5534 self.element.queue("tabs", function() {
5535 self._trigger('show', null, self._ui(self.anchors[o.selected], self.panels[o.selected]));
5536 });
5537
5538 this.load(o.selected);
5539 }
5540
5541 // clean up to avoid memory leaks in certain versions of IE 6
5542 $(window).bind('unload', function() {
5543 self.lis.add(self.anchors).unbind('.tabs');
5544 self.lis = self.anchors = self.panels = null;
5545 });
5546
5547 }
5548 // update selected after add/remove
5549 else {
5550 o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected'));
5551 }
5552
5553 // update collapsible
5554 this.element[o.collapsible ? 'addClass' : 'removeClass']('ui-tabs-collapsible');
5555
5556 // set or update cookie after init and add/remove respectively
5557 if (o.cookie) {
5558 this._cookie(o.selected, o.cookie);
5559 }
5560
5561 // disable tabs
5562 for (var i = 0, li; (li = this.lis[i]); i++) {
5563 $(li)[$.inArray(i, o.disabled) != -1 &&
5564 !$(li).hasClass('ui-tabs-selected') ? 'addClass' : 'removeClass']('ui-state-disabled');
5565 }
5566
5567 // reset cache if switching from cached to not cached
5568 if (o.cache === false) {
5569 this.anchors.removeData('cache.tabs');
5570 }
5571
5572 // remove all handlers before, tabify may run on existing tabs after add or option change
5573 this.lis.add(this.anchors).unbind('.tabs');
5574
5575 if (o.event != 'mouseover') {
5576 var addState = function(state, el) {
5577 if (el.is(':not(.ui-state-disabled)')) {
5578 el.addClass('ui-state-' + state);
5579 }
5580 };
5581 var removeState = function(state, el) {
5582 el.removeClass('ui-state-' + state);
5583 };
5584 this.lis.bind('mouseover.tabs', function() {
5585 addState('hover', $(this));
5586 });
5587 this.lis.bind('mouseout.tabs', function() {
5588 removeState('hover', $(this));
5589 });
5590 this.anchors.bind('focus.tabs', function() {
5591 addState('focus', $(this).closest('li'));
5592 });
5593 this.anchors.bind('blur.tabs', function() {
5594 removeState('focus', $(this).closest('li'));
5595 });
5596 }
5597
5598 // set up animations
5599 var hideFx, showFx;
5600 if (o.fx) {
5601 if ($.isArray(o.fx)) {
5602 hideFx = o.fx[0];
5603 showFx = o.fx[1];
5604 }
5605 else {
5606 hideFx = showFx = o.fx;
5607 }
5608 }
5609
5610 // Reset certain styles left over from animation
5611 // and prevent IE's ClearType bug...
5612 function resetStyle($el, fx) {
5613 $el.css({ display: '' });
5614 if ($.browser.msie && fx.opacity) {
5615 $el[0].style.removeAttribute('filter');
5616 }
5617 }
5618
5619 // Show a tab...
5620 var showTab = showFx ?
5621 function(clicked, $show) {
5622 $(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');
5623 $show.hide().removeClass('ui-tabs-hide') // avoid flicker that way
5624 .animate(showFx, showFx.duration || 'normal', function() {
5625 resetStyle($show, showFx);
5626 self._trigger('show', null, self._ui(clicked, $show[0]));
5627 });
5628 } :
5629 function(clicked, $show) {
5630 $(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');
5631 $show.removeClass('ui-tabs-hide');
5632 self._trigger('show', null, self._ui(clicked, $show[0]));
5633 };
5634
5635 // Hide a tab, $show is optional...
5636 var hideTab = hideFx ?
5637 function(clicked, $hide) {
5638 $hide.animate(hideFx, hideFx.duration || 'normal', function() {
5639 self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');
5640 $hide.addClass('ui-tabs-hide');
5641 resetStyle($hide, hideFx);
5642 self.element.dequeue("tabs");
5643 });
5644 } :
5645 function(clicked, $hide, $show) {
5646 self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');
5647 $hide.addClass('ui-tabs-hide');
5648 self.element.dequeue("tabs");
5649 };
5650
5651 // attach tab event handler, unbind to avoid duplicates from former tabifying...
5652 this.anchors.bind(o.event + '.tabs', function() {
5653 var el = this, $li = $(this).closest('li'), $hide = self.panels.filter(':not(.ui-tabs-hide)'),
5654 $show = $(self._sanitizeSelector(this.hash));
5655
5656 // If tab is already selected and not collapsible or tab disabled or
5657 // or is already loading or click callback returns false stop here.
5658 // Check if click handler returns false last so that it is not executed
5659 // for a disabled or loading tab!
5660 if (($li.hasClass('ui-tabs-selected') && !o.collapsible) ||
5661 $li.hasClass('ui-state-disabled') ||
5662 $li.hasClass('ui-state-processing') ||
5663 self._trigger('select', null, self._ui(this, $show[0])) === false) {
5664 this.blur();
5665 return false;
5666 }
5667
5668 o.selected = self.anchors.index(this);
5669
5670 self.abort();
5671
5672 // if tab may be closed
5673 if (o.collapsible) {
5674 if ($li.hasClass('ui-tabs-selected')) {
5675 o.selected = -1;
5676
5677 if (o.cookie) {
5678 self._cookie(o.selected, o.cookie);
5679 }
5680
5681 self.element.queue("tabs", function() {
5682 hideTab(el, $hide);
5683 }).dequeue("tabs");
5684
5685 this.blur();
5686 return false;
5687 }
5688 else if (!$hide.length) {
5689 if (o.cookie) {
5690 self._cookie(o.selected, o.cookie);
5691 }
5692
5693 self.element.queue("tabs", function() {
5694 showTab(el, $show);
5695 });
5696
5697 self.load(self.anchors.index(this)); // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
5698
5699 this.blur();
5700 return false;
5701 }
5702 }
5703
5704 if (o.cookie) {
5705 self._cookie(o.selected, o.cookie);
5706 }
5707
5708 // show new tab
5709 if ($show.length) {
5710 if ($hide.length) {
5711 self.element.queue("tabs", function() {
5712 hideTab(el, $hide);
5713 });
5714 }
5715 self.element.queue("tabs", function() {
5716 showTab(el, $show);
5717 });
5718
5719 self.load(self.anchors.index(this));
5720 }
5721 else {
5722 throw 'jQuery UI Tabs: Mismatching fragment identifier.';
5723 }
5724
5725 // Prevent IE from keeping other link focussed when using the back button
5726 // and remove dotted border from clicked link. This is controlled via CSS
5727 // in modern browsers; blur() removes focus from address bar in Firefox
5728 // which can become a usability and annoying problem with tabs('rotate').
5729 if ($.browser.msie) {
5730 this.blur();
5731 }
5732
5733 });
5734
5735 // disable click in any case
5736 this.anchors.bind('click.tabs', function(){return false;});
5737
5738 },
5739
5740 destroy: function() {
5741 var o = this.options;
5742
5743 this.abort();
5744
5745 this.element.unbind('.tabs')
5746 .removeClass('ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible')
5747 .removeData('tabs');
5748
5749 this.list.removeClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');
5750
5751 this.anchors.each(function() {
5752 var href = $.data(this, 'href.tabs');
5753 if (href) {
5754 this.href = href;
5755 }
5756 var $this = $(this).unbind('.tabs');
5757 $.each(['href', 'load', 'cache'], function(i, prefix) {
5758 $this.removeData(prefix + '.tabs');
5759 });
5760 });
5761
5762 this.lis.unbind('.tabs').add(this.panels).each(function() {
5763 if ($.data(this, 'destroy.tabs')) {
5764 $(this).remove();
5765 }
5766 else {
5767 $(this).removeClass([
5768 'ui-state-default',
5769 'ui-corner-top',
5770 'ui-tabs-selected',
5771 'ui-state-active',
5772 'ui-state-hover',
5773 'ui-state-focus',
5774 'ui-state-disabled',
5775 'ui-tabs-panel',
5776 'ui-widget-content',
5777 'ui-corner-bottom',
5778 'ui-tabs-hide'
5779 ].join(' '));
5780 }
5781 });
5782
5783 if (o.cookie) {
5784 this._cookie(null, o.cookie);
5785 }
5786 },
5787
5788 add: function(url, label, index) {
5789 if (index === undefined) {
5790 index = this.anchors.length; // append by default
5791 }
5792
5793 var self = this, o = this.options,
5794 $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label)),
5795 id = !url.indexOf('#') ? url.replace('#', '') : this._tabId($('a', $li)[0]);
5796
5797 $li.addClass('ui-state-default ui-corner-top').data('destroy.tabs', true);
5798
5799 // try to find an existing element before creating a new one
5800 var $panel = $('#' + id);
5801 if (!$panel.length) {
5802 $panel = $(o.panelTemplate).attr('id', id).data('destroy.tabs', true);
5803 }
5804 $panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide');
5805
5806 if (index >= this.lis.length) {
5807 $li.appendTo(this.list);
5808 $panel.appendTo(this.list[0].parentNode);
5809 }
5810 else {
5811 $li.insertBefore(this.lis[index]);
5812 $panel.insertBefore(this.panels[index]);
5813 }
5814
5815 o.disabled = $.map(o.disabled,
5816 function(n, i) { return n >= index ? ++n : n; });
5817
5818 this._tabify();
5819
5820 if (this.anchors.length == 1) { // after tabify
5821 $li.addClass('ui-tabs-selected ui-state-active');
5822 $panel.removeClass('ui-tabs-hide');
5823 this.element.queue("tabs", function() {
5824 self._trigger('show', null, self._ui(self.anchors[0], self.panels[0]));
5825 });
5826
5827 this.load(0);
5828 }
5829
5830 // callback
5831 this._trigger('add', null, this._ui(this.anchors[index], this.panels[index]));
5832 },
5833
5834 remove: function(index) {
5835 var o = this.options, $li = this.lis.eq(index).remove(),
5836 $panel = this.panels.eq(index).remove();
5837
5838 // If selected tab was removed focus tab to the right or
5839 // in case the last tab was removed the tab to the left.
5840 if ($li.hasClass('ui-tabs-selected') && this.anchors.length > 1) {
5841 this.select(index + (index + 1 < this.anchors.length ? 1 : -1));
5842 }
5843
5844 o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }),
5845 function(n, i) { return n >= index ? --n : n; });
5846
5847 this._tabify();
5848
5849 // callback
5850 this._trigger('remove', null, this._ui($li.find('a')[0], $panel[0]));
5851 },
5852
5853 enable: function(index) {
5854 var o = this.options;
5855 if ($.inArray(index, o.disabled) == -1) {
5856 return;
5857 }
5858
5859 this.lis.eq(index).removeClass('ui-state-disabled');
5860 o.disabled = $.grep(o.disabled, function(n, i) { return n != index; });
5861
5862 // callback
5863 this._trigger('enable', null, this._ui(this.anchors[index], this.panels[index]));
5864 },
5865
5866 disable: function(index) {
5867 var self = this, o = this.options;
5868 if (index != o.selected) { // cannot disable already selected tab
5869 this.lis.eq(index).addClass('ui-state-disabled');
5870
5871 o.disabled.push(index);
5872 o.disabled.sort();
5873
5874 // callback
5875 this._trigger('disable', null, this._ui(this.anchors[index], this.panels[index]));
5876 }
5877 },
5878
5879 select: function(index) {
5880 if (typeof index == 'string') {
5881 index = this.anchors.index(this.anchors.filter('[href$=' + index + ']'));
5882 }
5883 else if (index === null) { // usage of null is deprecated, TODO remove in next release
5884 index = -1;
5885 }
5886 if (index == -1 && this.options.collapsible) {
5887 index = this.options.selected;
5888 }
5889
5890 this.anchors.eq(index).trigger(this.options.event + '.tabs');
5891 },
5892
5893 load: function(index) {
5894 var self = this, o = this.options, a = this.anchors.eq(index)[0], url = $.data(a, 'load.tabs');
5895
5896 this.abort();
5897
5898 // not remote or from cache
5899 if (!url || this.element.queue("tabs").length !== 0 && $.data(a, 'cache.tabs')) {
5900 this.element.dequeue("tabs");
5901 return;
5902 }
5903
5904 // load remote from here on
5905 this.lis.eq(index).addClass('ui-state-processing');
5906
5907 if (o.spinner) {
5908 var span = $('span', a);
5909 span.data('label.tabs', span.html()).html(o.spinner);
5910 }
5911
5912 this.xhr = $.ajax($.extend({}, o.ajaxOptions, {
5913 url: url,
5914 success: function(r, s) {
5915 $(self._sanitizeSelector(a.hash)).html(r);
5916
5917 // take care of tab labels
5918 self._cleanup();
5919
5920 if (o.cache) {
5921 $.data(a, 'cache.tabs', true); // if loaded once do not load them again
5922 }
5923
5924 // callbacks
5925 self._trigger('load', null, self._ui(self.anchors[index], self.panels[index]));
5926 try {
5927 o.ajaxOptions.success(r, s);
5928 }
5929 catch (e) {}
5930
5931 // last, so that load event is fired before show...
5932 self.element.dequeue("tabs");
5933 }
5934 }));
5935 },
5936
5937 abort: function() {
5938 // stop possibly running animations
5939 this.element.queue([]);
5940 this.panels.stop(false, true);
5941
5942 // terminate pending requests from other tabs
5943 if (this.xhr) {
5944 this.xhr.abort();
5945 delete this.xhr;
5946 }
5947
5948 // take care of tab labels
5949 this._cleanup();
5950
5951 },
5952
5953 url: function(index, url) {
5954 this.anchors.eq(index).removeData('cache.tabs').data('load.tabs', url);
5955 },
5956
5957 length: function() {
5958 return this.anchors.length;
5959 }
5960
5961});
5962
5963$.extend($.ui.tabs, {
5964 version: '1.7.2',
5965 getter: 'length',
5966 defaults: {
5967 ajaxOptions: null,
5968 cache: false,
5969 cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
5970 collapsible: false,
5971 disabled: [],
5972 event: 'click',
5973 fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
5974 idPrefix: 'ui-tabs-',
5975 panelTemplate: '<div></div>',
5976 spinner: '<em>Loading&#8230;</em>',
5977 tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>'
5978 }
5979});
5980
5981/*
5982 * Tabs Extensions
5983 */
5984
5985/*
5986 * Rotate
5987 */
5988$.extend($.ui.tabs.prototype, {
5989 rotation: null,
5990 rotate: function(ms, continuing) {
5991
5992 var self = this, o = this.options;
5993
5994 var rotate = self._rotate || (self._rotate = function(e) {
5995 clearTimeout(self.rotation);
5996 self.rotation = setTimeout(function() {
5997 var t = o.selected;
5998 self.select( ++t < self.anchors.length ? t : 0 );
5999 }, ms);
6000
6001 if (e) {
6002 e.stopPropagation();
6003 }
6004 });
6005
6006 var stop = self._unrotate || (self._unrotate = !continuing ?
6007 function(e) {
6008 if (e.clientX) { // in case of a true click
6009 self.rotate(null);
6010 }
6011 } :
6012 function(e) {
6013 t = o.selected;
6014 rotate();
6015 });
6016
6017 // start rotation
6018 if (ms) {
6019 this.element.bind('tabsshow', rotate);
6020 this.anchors.bind(o.event + '.tabs', stop);
6021 rotate();
6022 }
6023 // stop rotation
6024 else {
6025 clearTimeout(self.rotation);
6026 this.element.unbind('tabsshow', rotate);
6027 this.anchors.unbind(o.event + '.tabs', stop);
6028 delete this._rotate;
6029 delete this._unrotate;
6030 }
6031 }
6032});
6033
6034})(jQuery);
6035/*
6036 * jQuery UI Datepicker 1.7.2
6037 *
6038 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
6039 * Dual licensed under the MIT (MIT-LICENSE.txt)
6040 * and GPL (GPL-LICENSE.txt) licenses.
6041 *
6042 * http://docs.jquery.com/UI/Datepicker
6043 *
6044 * Depends:
6045 * ui.core.js
6046 */
6047
6048(function($) { // hide the namespace
6049
6050$.extend($.ui, { datepicker: { version: "1.7.2" } });
6051
6052var PROP_NAME = 'datepicker';
6053
6054/* Date picker manager.
6055 Use the singleton instance of this class, $.datepicker, to interact with the date picker.
6056 Settings for (groups of) date pickers are maintained in an instance object,
6057 allowing multiple different settings on the same page. */
6058
6059function Datepicker() {
6060 this.debug = false; // Change this to true to start debugging
6061 this._curInst = null; // The current instance in use
6062 this._keyEvent = false; // If the last event was a key event
6063 this._disabledInputs = []; // List of date picker inputs that have been disabled
6064 this._datepickerShowing = false; // True if the popup picker is showing , false if not
6065 this._inDialog = false; // True if showing within a "dialog", false if not
6066 this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
6067 this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
6068 this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
6069 this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
6070 this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
6071 this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
6072 this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
6073 this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
6074 this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
6075 this.regional = []; // Available regional settings, indexed by language code
6076 this.regional[''] = { // Default regional settings
6077 closeText: 'Done', // Display text for close link
6078 prevText: 'Prev', // Display text for previous month link
6079 nextText: 'Next', // Display text for next month link
6080 currentText: 'Today', // Display text for current month link
6081 monthNames: ['January','February','March','April','May','June',
6082 'July','August','September','October','November','December'], // Names of months for drop-down and formatting
6083 monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
6084 dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
6085 dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
6086 dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
6087 dateFormat: 'mm/dd/yy', // See format options on parseDate
6088 firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
6089 isRTL: false // True if right-to-left language, false if left-to-right
6090 };
6091 this._defaults = { // Global defaults for all the date picker instances
6092 showOn: 'focus', // 'focus' for popup on focus,
6093 // 'button' for trigger button, or 'both' for either
6094 showAnim: 'show', // Name of jQuery animation for popup
6095 showOptions: {}, // Options for enhanced animations
6096 defaultDate: null, // Used when field is blank: actual date,
6097 // +/-number for offset from today, null for today
6098 appendText: '', // Display text following the input box, e.g. showing the format
6099 buttonText: '...', // Text for trigger button
6100 buttonImage: '', // URL for trigger button image
6101 buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
6102 hideIfNoPrevNext: false, // True to hide next/previous month links
6103 // if not applicable, false to just disable them
6104 navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
6105 gotoCurrent: false, // True if today link goes back to current selection instead
6106 changeMonth: false, // True if month can be selected directly, false if only prev/next
6107 changeYear: false, // True if year can be selected directly, false if only prev/next
6108 showMonthAfterYear: false, // True if the year select precedes month, false for month then year
6109 yearRange: '-10:+10', // Range of years to display in drop-down,
6110 // either relative to current year (-nn:+nn) or absolute (nnnn:nnnn)
6111 showOtherMonths: false, // True to show dates in other months, false to leave blank
6112 calculateWeek: this.iso8601Week, // How to calculate the week of the year,
6113 // takes a Date and returns the number of the week for it
6114 shortYearCutoff: '+10', // Short year values < this are in the current century,
6115 // > this are in the previous century,
6116 // string value starting with '+' for current year + value
6117 minDate: null, // The earliest selectable date, or null for no limit
6118 maxDate: null, // The latest selectable date, or null for no limit
6119 duration: 'normal', // Duration of display/closure
6120 beforeShowDay: null, // Function that takes a date and returns an array with
6121 // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
6122 // [2] = cell title (optional), e.g. $.datepicker.noWeekends
6123 beforeShow: null, // Function that takes an input field and
6124 // returns a set of custom settings for the date picker
6125 onSelect: null, // Define a callback function when a date is selected
6126 onChangeMonthYear: null, // Define a callback function when the month or year is changed
6127 onClose: null, // Define a callback function when the datepicker is closed
6128 numberOfMonths: 1, // Number of months to show at a time
6129 showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
6130 stepMonths: 1, // Number of months to step back/forward
6131 stepBigMonths: 12, // Number of months to step back/forward for the big links
6132 altField: '', // Selector for an alternate field to store selected dates into
6133 altFormat: '', // The date format to use for the alternate field
6134 constrainInput: true, // The input is constrained by the current date format
6135 showButtonPanel: false // True to show button panel, false to not show it
6136 };
6137 $.extend(this._defaults, this.regional['']);
6138 this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');
6139}
6140
6141$.extend(Datepicker.prototype, {
6142 /* Class name added to elements to indicate already configured with a date picker. */
6143 markerClassName: 'hasDatepicker',
6144
6145 /* Debug logging (if enabled). */
6146 log: function () {
6147 if (this.debug)
6148 console.log.apply('', arguments);
6149 },
6150
6151 /* Override the default settings for all instances of the date picker.
6152 @param settings object - the new settings to use as defaults (anonymous object)
6153 @return the manager object */
6154 setDefaults: function(settings) {
6155 extendRemove(this._defaults, settings || {});
6156 return this;
6157 },
6158
6159 /* Attach the date picker to a jQuery selection.
6160 @param target element - the target input field or division or span
6161 @param settings object - the new settings to use for this date picker instance (anonymous) */
6162 _attachDatepicker: function(target, settings) {
6163 // check for settings on the control itself - in namespace 'date:'
6164 var inlineSettings = null;
6165 for (var attrName in this._defaults) {
6166 var attrValue = target.getAttribute('date:' + attrName);
6167 if (attrValue) {
6168 inlineSettings = inlineSettings || {};
6169 try {
6170 inlineSettings[attrName] = eval(attrValue);
6171 } catch (err) {
6172 inlineSettings[attrName] = attrValue;
6173 }
6174 }
6175 }
6176 var nodeName = target.nodeName.toLowerCase();
6177 var inline = (nodeName == 'div' || nodeName == 'span');
6178 if (!target.id)
6179 target.id = 'dp' + (++this.uuid);
6180 var inst = this._newInst($(target), inline);
6181 inst.settings = $.extend({}, settings || {}, inlineSettings || {});
6182 if (nodeName == 'input') {
6183 this._connectDatepicker(target, inst);
6184 } else if (inline) {
6185 this._inlineDatepicker(target, inst);
6186 }
6187 },
6188
6189 /* Create a new instance object. */
6190 _newInst: function(target, inline) {
6191 var id = target[0].id.replace(/([:\[\]\.])/g, '\\\\$1'); // escape jQuery meta chars
6192 return {id: id, input: target, // associated target
6193 selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
6194 drawMonth: 0, drawYear: 0, // month being drawn
6195 inline: inline, // is datepicker inline or not
6196 dpDiv: (!inline ? this.dpDiv : // presentation div
6197 $('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};
6198 },
6199
6200 /* Attach the date picker to an input field. */
6201 _connectDatepicker: function(target, inst) {
6202 var input = $(target);
6203 inst.append = $([]);
6204 inst.trigger = $([]);
6205 if (input.hasClass(this.markerClassName))
6206 return;
6207 var appendText = this._get(inst, 'appendText');
6208 var isRTL = this._get(inst, 'isRTL');
6209 if (appendText) {
6210 inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
6211 input[isRTL ? 'before' : 'after'](inst.append);
6212 }
6213 var showOn = this._get(inst, 'showOn');
6214 if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
6215 input.focus(this._showDatepicker);
6216 if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
6217 var buttonText = this._get(inst, 'buttonText');
6218 var buttonImage = this._get(inst, 'buttonImage');
6219 inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
6220 $('<img/>').addClass(this._triggerClass).
6221 attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
6222 $('<button type="button"></button>').addClass(this._triggerClass).
6223 html(buttonImage == '' ? buttonText : $('<img/>').attr(
6224 { src:buttonImage, alt:buttonText, title:buttonText })));
6225 input[isRTL ? 'before' : 'after'](inst.trigger);
6226 inst.trigger.click(function() {
6227 if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target)
6228 $.datepicker._hideDatepicker();
6229 else
6230 $.datepicker._showDatepicker(target);
6231 return false;
6232 });
6233 }
6234 input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).
6235 bind("setData.datepicker", function(event, key, value) {
6236 inst.settings[key] = value;
6237 }).bind("getData.datepicker", function(event, key) {
6238 return this._get(inst, key);
6239 });
6240 $.data(target, PROP_NAME, inst);
6241 },
6242
6243 /* Attach an inline date picker to a div. */
6244 _inlineDatepicker: function(target, inst) {
6245 var divSpan = $(target);
6246 if (divSpan.hasClass(this.markerClassName))
6247 return;
6248 divSpan.addClass(this.markerClassName).append(inst.dpDiv).
6249 bind("setData.datepicker", function(event, key, value){
6250 inst.settings[key] = value;
6251 }).bind("getData.datepicker", function(event, key){
6252 return this._get(inst, key);
6253 });
6254 $.data(target, PROP_NAME, inst);
6255 this._setDate(inst, this._getDefaultDate(inst));
6256 this._updateDatepicker(inst);
6257 this._updateAlternate(inst);
6258 },
6259
6260 /* Pop-up the date picker in a "dialog" box.
6261 @param input element - ignored
6262 @param dateText string - the initial date to display (in the current format)
6263 @param onSelect function - the function(dateText) to call when a date is selected
6264 @param settings object - update the dialog date picker instance's settings (anonymous object)
6265 @param pos int[2] - coordinates for the dialog's position within the screen or
6266 event - with x/y coordinates or
6267 leave empty for default (screen centre)
6268 @return the manager object */
6269 _dialogDatepicker: function(input, dateText, onSelect, settings, pos) {
6270 var inst = this._dialogInst; // internal instance
6271 if (!inst) {
6272 var id = 'dp' + (++this.uuid);
6273 this._dialogInput = $('<input type="text" id="' + id +
6274 '" size="1" style="position: absolute; top: -100px;"/>');
6275 this._dialogInput.keydown(this._doKeyDown);
6276 $('body').append(this._dialogInput);
6277 inst = this._dialogInst = this._newInst(this._dialogInput, false);
6278 inst.settings = {};
6279 $.data(this._dialogInput[0], PROP_NAME, inst);
6280 }
6281 extendRemove(inst.settings, settings || {});
6282 this._dialogInput.val(dateText);
6283
6284 this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
6285 if (!this._pos) {
6286 var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
6287 var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
6288 var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
6289 var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
6290 this._pos = // should use actual width/height below
6291 [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
6292 }
6293
6294 // move input on screen for focus, but hidden behind dialog
6295 this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px');
6296 inst.settings.onSelect = onSelect;
6297 this._inDialog = true;
6298 this.dpDiv.addClass(this._dialogClass);
6299 this._showDatepicker(this._dialogInput[0]);
6300 if ($.blockUI)
6301 $.blockUI(this.dpDiv);
6302 $.data(this._dialogInput[0], PROP_NAME, inst);
6303 return this;
6304 },
6305
6306 /* Detach a datepicker from its control.
6307 @param target element - the target input field or division or span */
6308 _destroyDatepicker: function(target) {
6309 var $target = $(target);
6310 var inst = $.data(target, PROP_NAME);
6311 if (!$target.hasClass(this.markerClassName)) {
6312 return;
6313 }
6314 var nodeName = target.nodeName.toLowerCase();
6315 $.removeData(target, PROP_NAME);
6316 if (nodeName == 'input') {
6317 inst.append.remove();
6318 inst.trigger.remove();
6319 $target.removeClass(this.markerClassName).
6320 unbind('focus', this._showDatepicker).
6321 unbind('keydown', this._doKeyDown).
6322 unbind('keypress', this._doKeyPress);
6323 } else if (nodeName == 'div' || nodeName == 'span')
6324 $target.removeClass(this.markerClassName).empty();
6325 },
6326
6327 /* Enable the date picker to a jQuery selection.
6328 @param target element - the target input field or division or span */
6329 _enableDatepicker: function(target) {
6330 var $target = $(target);
6331 var inst = $.data(target, PROP_NAME);
6332 if (!$target.hasClass(this.markerClassName)) {
6333 return;
6334 }
6335 var nodeName = target.nodeName.toLowerCase();
6336 if (nodeName == 'input') {
6337 target.disabled = false;
6338 inst.trigger.filter('button').
6339 each(function() { this.disabled = false; }).end().
6340 filter('img').css({opacity: '1.0', cursor: ''});
6341 }
6342 else if (nodeName == 'div' || nodeName == 'span') {
6343 var inline = $target.children('.' + this._inlineClass);
6344 inline.children().removeClass('ui-state-disabled');
6345 }
6346 this._disabledInputs = $.map(this._disabledInputs,
6347 function(value) { return (value == target ? null : value); }); // delete entry
6348 },
6349
6350 /* Disable the date picker to a jQuery selection.
6351 @param target element - the target input field or division or span */
6352 _disableDatepicker: function(target) {
6353 var $target = $(target);
6354 var inst = $.data(target, PROP_NAME);
6355 if (!$target.hasClass(this.markerClassName)) {
6356 return;
6357 }
6358 var nodeName = target.nodeName.toLowerCase();
6359 if (nodeName == 'input') {
6360 target.disabled = true;
6361 inst.trigger.filter('button').
6362 each(function() { this.disabled = true; }).end().
6363 filter('img').css({opacity: '0.5', cursor: 'default'});
6364 }
6365 else if (nodeName == 'div' || nodeName == 'span') {
6366 var inline = $target.children('.' + this._inlineClass);
6367 inline.children().addClass('ui-state-disabled');
6368 }
6369 this._disabledInputs = $.map(this._disabledInputs,
6370 function(value) { return (value == target ? null : value); }); // delete entry
6371 this._disabledInputs[this._disabledInputs.length] = target;
6372 },
6373
6374 /* Is the first field in a jQuery collection disabled as a datepicker?
6375 @param target element - the target input field or division or span
6376 @return boolean - true if disabled, false if enabled */
6377 _isDisabledDatepicker: function(target) {
6378 if (!target) {
6379 return false;
6380 }
6381 for (var i = 0; i < this._disabledInputs.length; i++) {
6382 if (this._disabledInputs[i] == target)
6383 return true;
6384 }
6385 return false;
6386 },
6387
6388 /* Retrieve the instance data for the target control.
6389 @param target element - the target input field or division or span
6390 @return object - the associated instance data
6391 @throws error if a jQuery problem getting data */
6392 _getInst: function(target) {
6393 try {
6394 return $.data(target, PROP_NAME);
6395 }
6396 catch (err) {
6397 throw 'Missing instance data for this datepicker';
6398 }
6399 },
6400
6401 /* Update or retrieve the settings for a date picker attached to an input field or division.
6402 @param target element - the target input field or division or span
6403 @param name object - the new settings to update or
6404 string - the name of the setting to change or retrieve,
6405 when retrieving also 'all' for all instance settings or
6406 'defaults' for all global defaults
6407 @param value any - the new value for the setting
6408 (omit if above is an object or to retrieve a value) */
6409 _optionDatepicker: function(target, name, value) {
6410 var inst = this._getInst(target);
6411 if (arguments.length == 2 && typeof name == 'string') {
6412 return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
6413 (inst ? (name == 'all' ? $.extend({}, inst.settings) :
6414 this._get(inst, name)) : null));
6415 }
6416 var settings = name || {};
6417 if (typeof name == 'string') {
6418 settings = {};
6419 settings[name] = value;
6420 }
6421 if (inst) {
6422 if (this._curInst == inst) {
6423 this._hideDatepicker(null);
6424 }
6425 var date = this._getDateDatepicker(target);
6426 extendRemove(inst.settings, settings);
6427 this._setDateDatepicker(target, date);
6428 this._updateDatepicker(inst);
6429 }
6430 },
6431
6432 // change method deprecated
6433 _changeDatepicker: function(target, name, value) {
6434 this._optionDatepicker(target, name, value);
6435 },
6436
6437 /* Redraw the date picker attached to an input field or division.
6438 @param target element - the target input field or division or span */
6439 _refreshDatepicker: function(target) {
6440 var inst = this._getInst(target);
6441 if (inst) {
6442 this._updateDatepicker(inst);
6443 }
6444 },
6445
6446 /* Set the dates for a jQuery selection.
6447 @param target element - the target input field or division or span
6448 @param date Date - the new date
6449 @param endDate Date - the new end date for a range (optional) */
6450 _setDateDatepicker: function(target, date, endDate) {
6451 var inst = this._getInst(target);
6452 if (inst) {
6453 this._setDate(inst, date, endDate);
6454 this._updateDatepicker(inst);
6455 this._updateAlternate(inst);
6456 }
6457 },
6458
6459 /* Get the date(s) for the first entry in a jQuery selection.
6460 @param target element - the target input field or division or span
6461 @return Date - the current date or
6462 Date[2] - the current dates for a range */
6463 _getDateDatepicker: function(target) {
6464 var inst = this._getInst(target);
6465 if (inst && !inst.inline)
6466 this._setDateFromField(inst);
6467 return (inst ? this._getDate(inst) : null);
6468 },
6469
6470 /* Handle keystrokes. */
6471 _doKeyDown: function(event) {
6472 var inst = $.datepicker._getInst(event.target);
6473 var handled = true;
6474 var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
6475 inst._keyEvent = true;
6476 if ($.datepicker._datepickerShowing)
6477 switch (event.keyCode) {
6478 case 9: $.datepicker._hideDatepicker(null, '');
6479 break; // hide on tab out
6480 case 13: var sel = $('td.' + $.datepicker._dayOverClass +
6481 ', td.' + $.datepicker._currentClass, inst.dpDiv);
6482 if (sel[0])
6483 $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
6484 else
6485 $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
6486 return false; // don't submit the form
6487 break; // select the value on enter
6488 case 27: $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
6489 break; // hide on escape
6490 case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
6491 -$.datepicker._get(inst, 'stepBigMonths') :
6492 -$.datepicker._get(inst, 'stepMonths')), 'M');
6493 break; // previous month/year on page up/+ ctrl
6494 case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
6495 +$.datepicker._get(inst, 'stepBigMonths') :
6496 +$.datepicker._get(inst, 'stepMonths')), 'M');
6497 break; // next month/year on page down/+ ctrl
6498 case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
6499 handled = event.ctrlKey || event.metaKey;
6500 break; // clear on ctrl or command +end
6501 case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
6502 handled = event.ctrlKey || event.metaKey;
6503 break; // current on ctrl or command +home
6504 case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
6505 handled = event.ctrlKey || event.metaKey;
6506 // -1 day on ctrl or command +left
6507 if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
6508 -$.datepicker._get(inst, 'stepBigMonths') :
6509 -$.datepicker._get(inst, 'stepMonths')), 'M');
6510 // next month/year on alt +left on Mac
6511 break;
6512 case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
6513 handled = event.ctrlKey || event.metaKey;
6514 break; // -1 week on ctrl or command +up
6515 case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
6516 handled = event.ctrlKey || event.metaKey;
6517 // +1 day on ctrl or command +right
6518 if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
6519 +$.datepicker._get(inst, 'stepBigMonths') :
6520 +$.datepicker._get(inst, 'stepMonths')), 'M');
6521 // next month/year on alt +right
6522 break;
6523 case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
6524 handled = event.ctrlKey || event.metaKey;
6525 break; // +1 week on ctrl or command +down
6526 default: handled = false;
6527 }
6528 else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
6529 $.datepicker._showDatepicker(this);
6530 else {
6531 handled = false;
6532 }
6533 if (handled) {
6534 event.preventDefault();
6535 event.stopPropagation();
6536 }
6537 },
6538
6539 /* Filter entered characters - based on date format. */
6540 _doKeyPress: function(event) {
6541 var inst = $.datepicker._getInst(event.target);
6542 if ($.datepicker._get(inst, 'constrainInput')) {
6543 var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
6544 var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
6545 return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
6546 }
6547 },
6548
6549 /* Pop-up the date picker for a given input field.
6550 @param input element - the input field attached to the date picker or
6551 event - if triggered by focus */
6552 _showDatepicker: function(input) {
6553 input = input.target || input;
6554 if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
6555 input = $('input', input.parentNode)[0];
6556 if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
6557 return;
6558 var inst = $.datepicker._getInst(input);
6559 var beforeShow = $.datepicker._get(inst, 'beforeShow');
6560 extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
6561 $.datepicker._hideDatepicker(null, '');
6562 $.datepicker._lastInput = input;
6563 $.datepicker._setDateFromField(inst);
6564 if ($.datepicker._inDialog) // hide cursor
6565 input.value = '';
6566 if (!$.datepicker._pos) { // position below input
6567 $.datepicker._pos = $.datepicker._findPos(input);
6568 $.datepicker._pos[1] += input.offsetHeight; // add the height
6569 }
6570 var isFixed = false;
6571 $(input).parents().each(function() {
6572 isFixed |= $(this).css('position') == 'fixed';
6573 return !isFixed;
6574 });
6575 if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
6576 $.datepicker._pos[0] -= document.documentElement.scrollLeft;
6577 $.datepicker._pos[1] -= document.documentElement.scrollTop;
6578 }
6579 var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
6580 $.datepicker._pos = null;
6581 inst.rangeStart = null;
6582 // determine sizing offscreen
6583 inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
6584 $.datepicker._updateDatepicker(inst);
6585 // fix width for dynamic number of date pickers
6586 // and adjust position before showing
6587 offset = $.datepicker._checkOffset(inst, offset, isFixed);
6588 inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
6589 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
6590 left: offset.left + 'px', top: offset.top + 'px'});
6591 if (!inst.inline) {
6592 var showAnim = $.datepicker._get(inst, 'showAnim') || 'show';
6593 var duration = $.datepicker._get(inst, 'duration');
6594 var postProcess = function() {
6595 $.datepicker._datepickerShowing = true;
6596 if ($.browser.msie && parseInt($.browser.version,10) < 7) // fix IE < 7 select problems
6597 $('iframe.ui-datepicker-cover').css({width: inst.dpDiv.width() + 4,
6598 height: inst.dpDiv.height() + 4});
6599 };
6600 if ($.effects && $.effects[showAnim])
6601 inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
6602 else
6603 inst.dpDiv[showAnim](duration, postProcess);
6604 if (duration == '')
6605 postProcess();
6606 if (inst.input[0].type != 'hidden')
6607 inst.input[0].focus();
6608 $.datepicker._curInst = inst;
6609 }
6610 },
6611
6612 /* Generate the date picker content. */
6613 _updateDatepicker: function(inst) {
6614 var dims = {width: inst.dpDiv.width() + 4,
6615 height: inst.dpDiv.height() + 4};
6616 var self = this;
6617 inst.dpDiv.empty().append(this._generateHTML(inst))
6618 .find('iframe.ui-datepicker-cover').
6619 css({width: dims.width, height: dims.height})
6620 .end()
6621 .find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
6622 .bind('mouseout', function(){
6623 $(this).removeClass('ui-state-hover');
6624 if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
6625 if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover');
6626 })
6627 .bind('mouseover', function(){
6628 if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) {
6629 $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
6630 $(this).addClass('ui-state-hover');
6631 if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover');
6632 if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover');
6633 }
6634 })
6635 .end()
6636 .find('.' + this._dayOverClass + ' a')
6637 .trigger('mouseover')
6638 .end();
6639 var numMonths = this._getNumberOfMonths(inst);
6640 var cols = numMonths[1];
6641 var width = 17;
6642 if (cols > 1) {
6643 inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
6644 } else {
6645 inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
6646 }
6647 inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
6648 'Class']('ui-datepicker-multi');
6649 inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
6650 'Class']('ui-datepicker-rtl');
6651 if (inst.input && inst.input[0].type != 'hidden' && inst == $.datepicker._curInst)
6652 $(inst.input[0]).focus();
6653 },
6654
6655 /* Check positioning to remain on screen. */
6656 _checkOffset: function(inst, offset, isFixed) {
6657 var dpWidth = inst.dpDiv.outerWidth();
6658 var dpHeight = inst.dpDiv.outerHeight();
6659 var inputWidth = inst.input ? inst.input.outerWidth() : 0;
6660 var inputHeight = inst.input ? inst.input.outerHeight() : 0;
6661 var viewWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) + $(document).scrollLeft();
6662 var viewHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) + $(document).scrollTop();
6663
6664 offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
6665 offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
6666 offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
6667
6668 // now check if datepicker is showing outside window viewport - move to a better place if so.
6669 offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0;
6670 offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight*2 - viewHeight) : 0;
6671
6672 return offset;
6673 },
6674
6675 /* Find an object's position on the screen. */
6676 _findPos: function(obj) {
6677 while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {
6678 obj = obj.nextSibling;
6679 }
6680 var position = $(obj).offset();
6681 return [position.left, position.top];
6682 },
6683
6684 /* Hide the date picker from view.
6685 @param input element - the input field attached to the date picker
6686 @param duration string - the duration over which to close the date picker */
6687 _hideDatepicker: function(input, duration) {
6688 var inst = this._curInst;
6689 if (!inst || (input && inst != $.data(input, PROP_NAME)))
6690 return;
6691 if (inst.stayOpen)
6692 this._selectDate('#' + inst.id, this._formatDate(inst,
6693 inst.currentDay, inst.currentMonth, inst.currentYear));
6694 inst.stayOpen = false;
6695 if (this._datepickerShowing) {
6696 duration = (duration != null ? duration : this._get(inst, 'duration'));
6697 var showAnim = this._get(inst, 'showAnim');
6698 var postProcess = function() {
6699 $.datepicker._tidyDialog(inst);
6700 };
6701 if (duration != '' && $.effects && $.effects[showAnim])
6702 inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'),
6703 duration, postProcess);
6704 else
6705 inst.dpDiv[(duration == '' ? 'hide' : (showAnim == 'slideDown' ? 'slideUp' :
6706 (showAnim == 'fadeIn' ? 'fadeOut' : 'hide')))](duration, postProcess);
6707 if (duration == '')
6708 this._tidyDialog(inst);
6709 var onClose = this._get(inst, 'onClose');
6710 if (onClose)
6711 onClose.apply((inst.input ? inst.input[0] : null),
6712 [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback
6713 this._datepickerShowing = false;
6714 this._lastInput = null;
6715 if (this._inDialog) {
6716 this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
6717 if ($.blockUI) {
6718 $.unblockUI();
6719 $('body').append(this.dpDiv);
6720 }
6721 }
6722 this._inDialog = false;
6723 }
6724 this._curInst = null;
6725 },
6726
6727 /* Tidy up after a dialog display. */
6728 _tidyDialog: function(inst) {
6729 inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
6730 },
6731
6732 /* Close date picker if clicked elsewhere. */
6733 _checkExternalClick: function(event) {
6734 if (!$.datepicker._curInst)
6735 return;
6736 var $target = $(event.target);
6737 if (($target.parents('#' + $.datepicker._mainDivId).length == 0) &&
6738 !$target.hasClass($.datepicker.markerClassName) &&
6739 !$target.hasClass($.datepicker._triggerClass) &&
6740 $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
6741 $.datepicker._hideDatepicker(null, '');
6742 },
6743
6744 /* Adjust one of the date sub-fields. */
6745 _adjustDate: function(id, offset, period) {
6746 var target = $(id);
6747 var inst = this._getInst(target[0]);
6748 if (this._isDisabledDatepicker(target[0])) {
6749 return;
6750 }
6751 this._adjustInstDate(inst, offset +
6752 (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
6753 period);
6754 this._updateDatepicker(inst);
6755 },
6756
6757 /* Action for current link. */
6758 _gotoToday: function(id) {
6759 var target = $(id);
6760 var inst = this._getInst(target[0]);
6761 if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
6762 inst.selectedDay = inst.currentDay;
6763 inst.drawMonth = inst.selectedMonth = inst.currentMonth;
6764 inst.drawYear = inst.selectedYear = inst.currentYear;
6765 }
6766 else {
6767 var date = new Date();
6768 inst.selectedDay = date.getDate();
6769 inst.drawMonth = inst.selectedMonth = date.getMonth();
6770 inst.drawYear = inst.selectedYear = date.getFullYear();
6771 }
6772 this._notifyChange(inst);
6773 this._adjustDate(target);
6774 },
6775
6776 /* Action for selecting a new month/year. */
6777 _selectMonthYear: function(id, select, period) {
6778 var target = $(id);
6779 var inst = this._getInst(target[0]);
6780 inst._selectingMonthYear = false;
6781 inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
6782 inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
6783 parseInt(select.options[select.selectedIndex].value,10);
6784 this._notifyChange(inst);
6785 this._adjustDate(target);
6786 },
6787
6788 /* Restore input focus after not changing month/year. */
6789 _clickMonthYear: function(id) {
6790 var target = $(id);
6791 var inst = this._getInst(target[0]);
6792 if (inst.input && inst._selectingMonthYear && !$.browser.msie)
6793 inst.input[0].focus();
6794 inst._selectingMonthYear = !inst._selectingMonthYear;
6795 },
6796
6797 /* Action for selecting a day. */
6798 _selectDay: function(id, month, year, td) {
6799 var target = $(id);
6800 if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
6801 return;
6802 }
6803 var inst = this._getInst(target[0]);
6804 inst.selectedDay = inst.currentDay = $('a', td).html();
6805 inst.selectedMonth = inst.currentMonth = month;
6806 inst.selectedYear = inst.currentYear = year;
6807 if (inst.stayOpen) {
6808 inst.endDay = inst.endMonth = inst.endYear = null;
6809 }
6810 this._selectDate(id, this._formatDate(inst,
6811 inst.currentDay, inst.currentMonth, inst.currentYear));
6812 if (inst.stayOpen) {
6813 inst.rangeStart = this._daylightSavingAdjust(
6814 new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
6815 this._updateDatepicker(inst);
6816 }
6817 },
6818
6819 /* Erase the input field and hide the date picker. */
6820 _clearDate: function(id) {
6821 var target = $(id);
6822 var inst = this._getInst(target[0]);
6823 inst.stayOpen = false;
6824 inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null;
6825 this._selectDate(target, '');
6826 },
6827
6828 /* Update the input field with the selected date. */
6829 _selectDate: function(id, dateStr) {
6830 var target = $(id);
6831 var inst = this._getInst(target[0]);
6832 dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
6833 if (inst.input)
6834 inst.input.val(dateStr);
6835 this._updateAlternate(inst);
6836 var onSelect = this._get(inst, 'onSelect');
6837 if (onSelect)
6838 onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
6839 else if (inst.input)
6840 inst.input.trigger('change'); // fire the change event
6841 if (inst.inline)
6842 this._updateDatepicker(inst);
6843 else if (!inst.stayOpen) {
6844 this._hideDatepicker(null, this._get(inst, 'duration'));
6845 this._lastInput = inst.input[0];
6846 if (typeof(inst.input[0]) != 'object')
6847 inst.input[0].focus(); // restore focus
6848 this._lastInput = null;
6849 }
6850 },
6851
6852 /* Update any alternate field to synchronise with the main field. */
6853 _updateAlternate: function(inst) {
6854 var altField = this._get(inst, 'altField');
6855 if (altField) { // update alternate field too
6856 var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
6857 var date = this._getDate(inst);
6858 dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
6859 $(altField).each(function() { $(this).val(dateStr); });
6860 }
6861 },
6862
6863 /* Set as beforeShowDay function to prevent selection of weekends.
6864 @param date Date - the date to customise
6865 @return [boolean, string] - is this date selectable?, what is its CSS class? */
6866 noWeekends: function(date) {
6867 var day = date.getDay();
6868 return [(day > 0 && day < 6), ''];
6869 },
6870
6871 /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
6872 @param date Date - the date to get the week for
6873 @return number - the number of the week within the year that contains this date */
6874 iso8601Week: function(date) {
6875 var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
6876 var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan
6877 var firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7
6878 firstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday
6879 if (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary
6880 checkDate.setDate(checkDate.getDate() - 3); // Generate for previous year
6881 return $.datepicker.iso8601Week(checkDate);
6882 } else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year
6883 firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7;
6884 if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary
6885 return 1;
6886 }
6887 }
6888 return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date
6889 },
6890
6891 /* Parse a string value into a date object.
6892 See formatDate below for the possible formats.
6893
6894 @param format string - the expected format of the date
6895 @param value string - the date in the above format
6896 @param settings Object - attributes include:
6897 shortYearCutoff number - the cutoff year for determining the century (optional)
6898 dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
6899 dayNames string[7] - names of the days from Sunday (optional)
6900 monthNamesShort string[12] - abbreviated names of the months (optional)
6901 monthNames string[12] - names of the months (optional)
6902 @return Date - the extracted date value or null if value is blank */
6903 parseDate: function (format, value, settings) {
6904 if (format == null || value == null)
6905 throw 'Invalid arguments';
6906 value = (typeof value == 'object' ? value.toString() : value + '');
6907 if (value == '')
6908 return null;
6909 var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
6910 var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
6911 var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
6912 var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
6913 var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
6914 var year = -1;
6915 var month = -1;
6916 var day = -1;
6917 var doy = -1;
6918 var literal = false;
6919 // Check whether a format character is doubled
6920 var lookAhead = function(match) {
6921 var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
6922 if (matches)
6923 iFormat++;
6924 return matches;
6925 };
6926 // Extract a number from the string value
6927 var getNumber = function(match) {
6928 lookAhead(match);
6929 var origSize = (match == '@' ? 14 : (match == 'y' ? 4 : (match == 'o' ? 3 : 2)));
6930 var size = origSize;
6931 var num = 0;
6932 while (size > 0 && iValue < value.length &&
6933 value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') {
6934 num = num * 10 + parseInt(value.charAt(iValue++),10);
6935 size--;
6936 }
6937 if (size == origSize)
6938 throw 'Missing number at position ' + iValue;
6939 return num;
6940 };
6941 // Extract a name from the string value and convert to an index
6942 var getName = function(match, shortNames, longNames) {
6943 var names = (lookAhead(match) ? longNames : shortNames);
6944 var size = 0;
6945 for (var j = 0; j < names.length; j++)
6946 size = Math.max(size, names[j].length);
6947 var name = '';
6948 var iInit = iValue;
6949 while (size > 0 && iValue < value.length) {
6950 name += value.charAt(iValue++);
6951 for (var i = 0; i < names.length; i++)
6952 if (name == names[i])
6953 return i + 1;
6954 size--;
6955 }
6956 throw 'Unknown name at position ' + iInit;
6957 };
6958 // Confirm that a literal character matches the string value
6959 var checkLiteral = function() {
6960 if (value.charAt(iValue) != format.charAt(iFormat))
6961 throw 'Unexpected literal at position ' + iValue;
6962 iValue++;
6963 };
6964 var iValue = 0;
6965 for (var iFormat = 0; iFormat < format.length; iFormat++) {
6966 if (literal)
6967 if (format.charAt(iFormat) == "'" && !lookAhead("'"))
6968 literal = false;
6969 else
6970 checkLiteral();
6971 else
6972 switch (format.charAt(iFormat)) {
6973 case 'd':
6974 day = getNumber('d');
6975 break;
6976 case 'D':
6977 getName('D', dayNamesShort, dayNames);
6978 break;
6979 case 'o':
6980 doy = getNumber('o');
6981 break;
6982 case 'm':
6983 month = getNumber('m');
6984 break;
6985 case 'M':
6986 month = getName('M', monthNamesShort, monthNames);
6987 break;
6988 case 'y':
6989 year = getNumber('y');
6990 break;
6991 case '@':
6992 var date = new Date(getNumber('@'));
6993 year = date.getFullYear();
6994 month = date.getMonth() + 1;
6995 day = date.getDate();
6996 break;
6997 case "'":
6998 if (lookAhead("'"))
6999 checkLiteral();
7000 else
7001 literal = true;
7002 break;
7003 default:
7004 checkLiteral();
7005 }
7006 }
7007 if (year == -1)
7008 year = new Date().getFullYear();
7009 else if (year < 100)
7010 year += new Date().getFullYear() - new Date().getFullYear() % 100 +
7011 (year <= shortYearCutoff ? 0 : -100);
7012 if (doy > -1) {
7013 month = 1;
7014 day = doy;
7015 do {
7016 var dim = this._getDaysInMonth(year, month - 1);
7017 if (day <= dim)
7018 break;
7019 month++;
7020 day -= dim;
7021 } while (true);
7022 }
7023 var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
7024 if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
7025 throw 'Invalid date'; // E.g. 31/02/*
7026 return date;
7027 },
7028
7029 /* Standard date formats. */
7030 ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
7031 COOKIE: 'D, dd M yy',
7032 ISO_8601: 'yy-mm-dd',
7033 RFC_822: 'D, d M y',
7034 RFC_850: 'DD, dd-M-y',
7035 RFC_1036: 'D, d M y',
7036 RFC_1123: 'D, d M yy',
7037 RFC_2822: 'D, d M yy',
7038 RSS: 'D, d M y', // RFC 822
7039 TIMESTAMP: '@',
7040 W3C: 'yy-mm-dd', // ISO 8601
7041
7042 /* Format a date object into a string value.
7043 The format can be combinations of the following:
7044 d - day of month (no leading zero)
7045 dd - day of month (two digit)
7046 o - day of year (no leading zeros)
7047 oo - day of year (three digit)
7048 D - day name short
7049 DD - day name long
7050 m - month of year (no leading zero)
7051 mm - month of year (two digit)
7052 M - month name short
7053 MM - month name long
7054 y - year (two digit)
7055 yy - year (four digit)
7056 @ - Unix timestamp (ms since 01/01/1970)
7057 '...' - literal text
7058 '' - single quote
7059
7060 @param format string - the desired format of the date
7061 @param date Date - the date value to format
7062 @param settings Object - attributes include:
7063 dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
7064 dayNames string[7] - names of the days from Sunday (optional)
7065 monthNamesShort string[12] - abbreviated names of the months (optional)
7066 monthNames string[12] - names of the months (optional)
7067 @return string - the date in the above format */
7068 formatDate: function (format, date, settings) {
7069 if (!date)
7070 return '';
7071 var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
7072 var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
7073 var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
7074 var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
7075 // Check whether a format character is doubled
7076 var lookAhead = function(match) {
7077 var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
7078 if (matches)
7079 iFormat++;
7080 return matches;
7081 };
7082 // Format a number, with leading zero if necessary
7083 var formatNumber = function(match, value, len) {
7084 var num = '' + value;
7085 if (lookAhead(match))
7086 while (num.length < len)
7087 num = '0' + num;
7088 return num;
7089 };
7090 // Format a name, short or long as requested
7091 var formatName = function(match, value, shortNames, longNames) {
7092 return (lookAhead(match) ? longNames[value] : shortNames[value]);
7093 };
7094 var output = '';
7095 var literal = false;
7096 if (date)
7097 for (var iFormat = 0; iFormat < format.length; iFormat++) {
7098 if (literal)
7099 if (format.charAt(iFormat) == "'" && !lookAhead("'"))
7100 literal = false;
7101 else
7102 output += format.charAt(iFormat);
7103 else
7104 switch (format.charAt(iFormat)) {
7105 case 'd':
7106 output += formatNumber('d', date.getDate(), 2);
7107 break;
7108 case 'D':
7109 output += formatName('D', date.getDay(), dayNamesShort, dayNames);
7110 break;
7111 case 'o':
7112 var doy = date.getDate();
7113 for (var m = date.getMonth() - 1; m >= 0; m--)
7114 doy += this._getDaysInMonth(date.getFullYear(), m);
7115 output += formatNumber('o', doy, 3);
7116 break;
7117 case 'm':
7118 output += formatNumber('m', date.getMonth() + 1, 2);
7119 break;
7120 case 'M':
7121 output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
7122 break;
7123 case 'y':
7124 output += (lookAhead('y') ? date.getFullYear() :
7125 (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
7126 break;
7127 case '@':
7128 output += date.getTime();
7129 break;
7130 case "'":
7131 if (lookAhead("'"))
7132 output += "'";
7133 else
7134 literal = true;
7135 break;
7136 default:
7137 output += format.charAt(iFormat);
7138 }
7139 }
7140 return output;
7141 },
7142
7143 /* Extract all possible characters from the date format. */
7144 _possibleChars: function (format) {
7145 var chars = '';
7146 var literal = false;
7147 for (var iFormat = 0; iFormat < format.length; iFormat++)
7148 if (literal)
7149 if (format.charAt(iFormat) == "'" && !lookAhead("'"))
7150 literal = false;
7151 else
7152 chars += format.charAt(iFormat);
7153 else
7154 switch (format.charAt(iFormat)) {
7155 case 'd': case 'm': case 'y': case '@':
7156 chars += '0123456789';
7157 break;
7158 case 'D': case 'M':
7159 return null; // Accept anything
7160 case "'":
7161 if (lookAhead("'"))
7162 chars += "'";
7163 else
7164 literal = true;
7165 break;
7166 default:
7167 chars += format.charAt(iFormat);
7168 }
7169 return chars;
7170 },
7171
7172 /* Get a setting value, defaulting if necessary. */
7173 _get: function(inst, name) {
7174 return inst.settings[name] !== undefined ?
7175 inst.settings[name] : this._defaults[name];
7176 },
7177
7178 /* Parse existing date and initialise date picker. */
7179 _setDateFromField: function(inst) {
7180 var dateFormat = this._get(inst, 'dateFormat');
7181 var dates = inst.input ? inst.input.val() : null;
7182 inst.endDay = inst.endMonth = inst.endYear = null;
7183 var date = defaultDate = this._getDefaultDate(inst);
7184 var settings = this._getFormatConfig(inst);
7185 try {
7186 date = this.parseDate(dateFormat, dates, settings) || defaultDate;
7187 } catch (event) {
7188 this.log(event);
7189 date = defaultDate;
7190 }
7191 inst.selectedDay = date.getDate();
7192 inst.drawMonth = inst.selectedMonth = date.getMonth();
7193 inst.drawYear = inst.selectedYear = date.getFullYear();
7194 inst.currentDay = (dates ? date.getDate() : 0);
7195 inst.currentMonth = (dates ? date.getMonth() : 0);
7196 inst.currentYear = (dates ? date.getFullYear() : 0);
7197 this._adjustInstDate(inst);
7198 },
7199
7200 /* Retrieve the default date shown on opening. */
7201 _getDefaultDate: function(inst) {
7202 var date = this._determineDate(this._get(inst, 'defaultDate'), new Date());
7203 var minDate = this._getMinMaxDate(inst, 'min', true);
7204 var maxDate = this._getMinMaxDate(inst, 'max');
7205 date = (minDate && date < minDate ? minDate : date);
7206 date = (maxDate && date > maxDate ? maxDate : date);
7207 return date;
7208 },
7209
7210 /* A date may be specified as an exact value or a relative one. */
7211 _determineDate: function(date, defaultDate) {
7212 var offsetNumeric = function(offset) {
7213 var date = new Date();
7214 date.setDate(date.getDate() + offset);
7215 return date;
7216 };
7217 var offsetString = function(offset, getDaysInMonth) {
7218 var date = new Date();
7219 var year = date.getFullYear();
7220 var month = date.getMonth();
7221 var day = date.getDate();
7222 var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
7223 var matches = pattern.exec(offset);
7224 while (matches) {
7225 switch (matches[2] || 'd') {
7226 case 'd' : case 'D' :
7227 day += parseInt(matches[1],10); break;
7228 case 'w' : case 'W' :
7229 day += parseInt(matches[1],10) * 7; break;
7230 case 'm' : case 'M' :
7231 month += parseInt(matches[1],10);
7232 day = Math.min(day, getDaysInMonth(year, month));
7233 break;
7234 case 'y': case 'Y' :
7235 year += parseInt(matches[1],10);
7236 day = Math.min(day, getDaysInMonth(year, month));
7237 break;
7238 }
7239 matches = pattern.exec(offset);
7240 }
7241 return new Date(year, month, day);
7242 };
7243 date = (date == null ? defaultDate :
7244 (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) :
7245 (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
7246 date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
7247 if (date) {
7248 date.setHours(0);
7249 date.setMinutes(0);
7250 date.setSeconds(0);
7251 date.setMilliseconds(0);
7252 }
7253 return this._daylightSavingAdjust(date);
7254 },
7255
7256 /* Handle switch to/from daylight saving.
7257 Hours may be non-zero on daylight saving cut-over:
7258 > 12 when midnight changeover, but then cannot generate
7259 midnight datetime, so jump to 1AM, otherwise reset.
7260 @param date (Date) the date to check
7261 @return (Date) the corrected date */
7262 _daylightSavingAdjust: function(date) {
7263 if (!date) return null;
7264 date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
7265 return date;
7266 },
7267
7268 /* Set the date(s) directly. */
7269 _setDate: function(inst, date, endDate) {
7270 var clear = !(date);
7271 var origMonth = inst.selectedMonth;
7272 var origYear = inst.selectedYear;
7273 date = this._determineDate(date, new Date());
7274 inst.selectedDay = inst.currentDay = date.getDate();
7275 inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
7276 inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
7277 if (origMonth != inst.selectedMonth || origYear != inst.selectedYear)
7278 this._notifyChange(inst);
7279 this._adjustInstDate(inst);
7280 if (inst.input) {
7281 inst.input.val(clear ? '' : this._formatDate(inst));
7282 }
7283 },
7284
7285 /* Retrieve the date(s) directly. */
7286 _getDate: function(inst) {
7287 var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
7288 this._daylightSavingAdjust(new Date(
7289 inst.currentYear, inst.currentMonth, inst.currentDay)));
7290 return startDate;
7291 },
7292
7293 /* Generate the HTML for the current state of the date picker. */
7294 _generateHTML: function(inst) {
7295 var today = new Date();
7296 today = this._daylightSavingAdjust(
7297 new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
7298 var isRTL = this._get(inst, 'isRTL');
7299 var showButtonPanel = this._get(inst, 'showButtonPanel');
7300 var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
7301 var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
7302 var numMonths = this._getNumberOfMonths(inst);
7303 var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
7304 var stepMonths = this._get(inst, 'stepMonths');
7305 var stepBigMonths = this._get(inst, 'stepBigMonths');
7306 var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
7307 var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
7308 new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
7309 var minDate = this._getMinMaxDate(inst, 'min', true);
7310 var maxDate = this._getMinMaxDate(inst, 'max');
7311 var drawMonth = inst.drawMonth - showCurrentAtPos;
7312 var drawYear = inst.drawYear;
7313 if (drawMonth < 0) {
7314 drawMonth += 12;
7315 drawYear--;
7316 }
7317 if (maxDate) {
7318 var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
7319 maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()));
7320 maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
7321 while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
7322 drawMonth--;
7323 if (drawMonth < 0) {
7324 drawMonth = 11;
7325 drawYear--;
7326 }
7327 }
7328 }
7329 inst.drawMonth = drawMonth;
7330 inst.drawYear = drawYear;
7331 var prevText = this._get(inst, 'prevText');
7332 prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
7333 this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
7334 this._getFormatConfig(inst)));
7335 var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
7336 '<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
7337 ' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
7338 (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
7339 var nextText = this._get(inst, 'nextText');
7340 nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
7341 this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
7342 this._getFormatConfig(inst)));
7343 var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
7344 '<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
7345 ' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
7346 (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
7347 var currentText = this._get(inst, 'currentText');
7348 var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
7349 currentText = (!navigationAsDateFormat ? currentText :
7350 this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
7351 var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
7352 var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
7353 (this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#' + inst.id + '\');"' +
7354 '>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
7355 var firstDay = parseInt(this._get(inst, 'firstDay'),10);
7356 firstDay = (isNaN(firstDay) ? 0 : firstDay);
7357 var dayNames = this._get(inst, 'dayNames');
7358 var dayNamesShort = this._get(inst, 'dayNamesShort');
7359 var dayNamesMin = this._get(inst, 'dayNamesMin');
7360 var monthNames = this._get(inst, 'monthNames');
7361 var monthNamesShort = this._get(inst, 'monthNamesShort');
7362 var beforeShowDay = this._get(inst, 'beforeShowDay');
7363 var showOtherMonths = this._get(inst, 'showOtherMonths');
7364 var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
7365 var endDate = inst.endDay ? this._daylightSavingAdjust(
7366 new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate;
7367 var defaultDate = this._getDefaultDate(inst);
7368 var html = '';
7369 for (var row = 0; row < numMonths[0]; row++) {
7370 var group = '';
7371 for (var col = 0; col < numMonths[1]; col++) {
7372 var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
7373 var cornerClass = ' ui-corner-all';
7374 var calender = '';
7375 if (isMultiMonth) {
7376 calender += '<div class="ui-datepicker-group ui-datepicker-group-';
7377 switch (col) {
7378 case 0: calender += 'first'; cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
7379 case numMonths[1]-1: calender += 'last'; cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
7380 default: calender += 'middle'; cornerClass = ''; break;
7381 }
7382 calender += '">';
7383 }
7384 calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
7385 (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
7386 (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
7387 this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
7388 selectedDate, row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
7389 '</div><table class="ui-datepicker-calendar"><thead>' +
7390 '<tr>';
7391 var thead = '';
7392 for (var dow = 0; dow < 7; dow++) { // days of the week
7393 var day = (dow + firstDay) % 7;
7394 thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
7395 '<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
7396 }
7397 calender += thead + '</tr></thead><tbody>';
7398 var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
7399 if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
7400 inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
7401 var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
7402 var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate
7403 var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
7404 for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
7405 calender += '<tr>';
7406 var tbody = '';
7407 for (var dow = 0; dow < 7; dow++) { // create date picker days
7408 var daySettings = (beforeShowDay ?
7409 beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
7410 var otherMonth = (printDate.getMonth() != drawMonth);
7411 var unselectable = otherMonth || !daySettings[0] ||
7412 (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
7413 tbody += '<td class="' +
7414 ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
7415 (otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
7416 ((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
7417 (defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
7418 // or defaultDate is current printedDate and defaultDate is selectedDate
7419 ' ' + this._dayOverClass : '') + // highlight selected day
7420 (unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') + // highlight unselectable days
7421 (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
7422 (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
7423 ' ' + this._currentClass : '') + // highlight selected day
7424 (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
7425 ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
7426 (unselectable ? '' : ' onclick="DP_jQuery.datepicker._selectDay(\'#' +
7427 inst.id + '\',' + drawMonth + ',' + drawYear + ', this);return false;"') + '>' + // actions
7428 (otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : // display for other months
7429 (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
7430 (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
7431 (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
7432 ' ui-state-active' : '') + // highlight selected day
7433 '" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display for this month
7434 printDate.setDate(printDate.getDate() + 1);
7435 printDate = this._daylightSavingAdjust(printDate);
7436 }
7437 calender += tbody + '</tr>';
7438 }
7439 drawMonth++;
7440 if (drawMonth > 11) {
7441 drawMonth = 0;
7442 drawYear++;
7443 }
7444 calender += '</tbody></table>' + (isMultiMonth ? '</div>' +
7445 ((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
7446 group += calender;
7447 }
7448 html += group;
7449 }
7450 html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
7451 '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
7452 inst._keyEvent = false;
7453 return html;
7454 },
7455
7456 /* Generate the month and year header. */
7457 _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
7458 selectedDate, secondary, monthNames, monthNamesShort) {
7459 minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate);
7460 var changeMonth = this._get(inst, 'changeMonth');
7461 var changeYear = this._get(inst, 'changeYear');
7462 var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
7463 var html = '<div class="ui-datepicker-title">';
7464 var monthHtml = '';
7465 // month selection
7466 if (secondary || !changeMonth)
7467 monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span> ';
7468 else {
7469 var inMinYear = (minDate && minDate.getFullYear() == drawYear);
7470 var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
7471 monthHtml += '<select class="ui-datepicker-month" ' +
7472 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
7473 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
7474 '>';
7475 for (var month = 0; month < 12; month++) {
7476 if ((!inMinYear || month >= minDate.getMonth()) &&
7477 (!inMaxYear || month <= maxDate.getMonth()))
7478 monthHtml += '<option value="' + month + '"' +
7479 (month == drawMonth ? ' selected="selected"' : '') +
7480 '>' + monthNamesShort[month] + '</option>';
7481 }
7482 monthHtml += '</select>';
7483 }
7484 if (!showMonthAfterYear)
7485 html += monthHtml + ((secondary || changeMonth || changeYear) && (!(changeMonth && changeYear)) ? '&#xa0;' : '');
7486 // year selection
7487 if (secondary || !changeYear)
7488 html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
7489 else {
7490 // determine range of years to display
7491 var years = this._get(inst, 'yearRange').split(':');
7492 var year = 0;
7493 var endYear = 0;
7494 if (years.length != 2) {
7495 year = drawYear - 10;
7496 endYear = drawYear + 10;
7497 } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {
7498 year = drawYear + parseInt(years[0], 10);
7499 endYear = drawYear + parseInt(years[1], 10);
7500 } else {
7501 year = parseInt(years[0], 10);
7502 endYear = parseInt(years[1], 10);
7503 }
7504 year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
7505 endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
7506 html += '<select class="ui-datepicker-year" ' +
7507 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
7508 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
7509 '>';
7510 for (; year <= endYear; year++) {
7511 html += '<option value="' + year + '"' +
7512 (year == drawYear ? ' selected="selected"' : '') +
7513 '>' + year + '</option>';
7514 }
7515 html += '</select>';
7516 }
7517 if (showMonthAfterYear)
7518 html += (secondary || changeMonth || changeYear ? '&#xa0;' : '') + monthHtml;
7519 html += '</div>'; // Close datepicker_header
7520 return html;
7521 },
7522
7523 /* Adjust one of the date sub-fields. */
7524 _adjustInstDate: function(inst, offset, period) {
7525 var year = inst.drawYear + (period == 'Y' ? offset : 0);
7526 var month = inst.drawMonth + (period == 'M' ? offset : 0);
7527 var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
7528 (period == 'D' ? offset : 0);
7529 var date = this._daylightSavingAdjust(new Date(year, month, day));
7530 // ensure it is within the bounds set
7531 var minDate = this._getMinMaxDate(inst, 'min', true);
7532 var maxDate = this._getMinMaxDate(inst, 'max');
7533 date = (minDate && date < minDate ? minDate : date);
7534 date = (maxDate && date > maxDate ? maxDate : date);
7535 inst.selectedDay = date.getDate();
7536 inst.drawMonth = inst.selectedMonth = date.getMonth();
7537 inst.drawYear = inst.selectedYear = date.getFullYear();
7538 if (period == 'M' || period == 'Y')
7539 this._notifyChange(inst);
7540 },
7541
7542 /* Notify change of month/year. */
7543 _notifyChange: function(inst) {
7544 var onChange = this._get(inst, 'onChangeMonthYear');
7545 if (onChange)
7546 onChange.apply((inst.input ? inst.input[0] : null),
7547 [inst.selectedYear, inst.selectedMonth + 1, inst]);
7548 },
7549
7550 /* Determine the number of months to show. */
7551 _getNumberOfMonths: function(inst) {
7552 var numMonths = this._get(inst, 'numberOfMonths');
7553 return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
7554 },
7555
7556 /* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */
7557 _getMinMaxDate: function(inst, minMax, checkRange) {
7558 var date = this._determineDate(this._get(inst, minMax + 'Date'), null);
7559 return (!checkRange || !inst.rangeStart ? date :
7560 (!date || inst.rangeStart > date ? inst.rangeStart : date));
7561 },
7562
7563 /* Find the number of days in a given month. */
7564 _getDaysInMonth: function(year, month) {
7565 return 32 - new Date(year, month, 32).getDate();
7566 },
7567
7568 /* Find the day of the week of the first of a month. */
7569 _getFirstDayOfMonth: function(year, month) {
7570 return new Date(year, month, 1).getDay();
7571 },
7572
7573 /* Determines if we should allow a "next/prev" month display change. */
7574 _canAdjustMonth: function(inst, offset, curYear, curMonth) {
7575 var numMonths = this._getNumberOfMonths(inst);
7576 var date = this._daylightSavingAdjust(new Date(
7577 curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1));
7578 if (offset < 0)
7579 date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
7580 return this._isInRange(inst, date);
7581 },
7582
7583 /* Is the given date in the accepted range? */
7584 _isInRange: function(inst, date) {
7585 // during range selection, use minimum of selected date and range start
7586 var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(
7587 new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay)));
7588 newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate);
7589 var minDate = newMinDate || this._getMinMaxDate(inst, 'min');
7590 var maxDate = this._getMinMaxDate(inst, 'max');
7591 return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));
7592 },
7593
7594 /* Provide the configuration settings for formatting/parsing. */
7595 _getFormatConfig: function(inst) {
7596 var shortYearCutoff = this._get(inst, 'shortYearCutoff');
7597 shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
7598 new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
7599 return {shortYearCutoff: shortYearCutoff,
7600 dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
7601 monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
7602 },
7603
7604 /* Format the given date for display. */
7605 _formatDate: function(inst, day, month, year) {
7606 if (!day) {
7607 inst.currentDay = inst.selectedDay;
7608 inst.currentMonth = inst.selectedMonth;
7609 inst.currentYear = inst.selectedYear;
7610 }
7611 var date = (day ? (typeof day == 'object' ? day :
7612 this._daylightSavingAdjust(new Date(year, month, day))) :
7613 this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
7614 return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
7615 }
7616});
7617
7618/* jQuery extend now ignores nulls! */
7619function extendRemove(target, props) {
7620 $.extend(target, props);
7621 for (var name in props)
7622 if (props[name] == null || props[name] == undefined)
7623 target[name] = props[name];
7624 return target;
7625};
7626
7627/* Determine whether an object is an array. */
7628function isArray(a) {
7629 return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
7630 (a.constructor && a.constructor.toString().match(/\Array\(\)/))));
7631};
7632
7633/* Invoke the datepicker functionality.
7634 @param options string - a command, optionally followed by additional parameters or
7635 Object - settings for attaching new datepicker functionality
7636 @return jQuery object */
7637$.fn.datepicker = function(options){
7638
7639 /* Initialise the date picker. */
7640 if (!$.datepicker.initialized) {
7641 $(document).mousedown($.datepicker._checkExternalClick).
7642 find('body').append($.datepicker.dpDiv);
7643 $.datepicker.initialized = true;
7644 }
7645
7646 var otherArgs = Array.prototype.slice.call(arguments, 1);
7647 if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate'))
7648 return $.datepicker['_' + options + 'Datepicker'].
7649 apply($.datepicker, [this[0]].concat(otherArgs));
7650 if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
7651 return $.datepicker['_' + options + 'Datepicker'].
7652 apply($.datepicker, [this[0]].concat(otherArgs));
7653 return this.each(function() {
7654 typeof options == 'string' ?
7655 $.datepicker['_' + options + 'Datepicker'].
7656 apply($.datepicker, [this].concat(otherArgs)) :
7657 $.datepicker._attachDatepicker(this, options);
7658 });
7659};
7660
7661$.datepicker = new Datepicker(); // singleton instance
7662$.datepicker.initialized = false;
7663$.datepicker.uuid = new Date().getTime();
7664$.datepicker.version = "1.7.2";
7665
7666// Workaround for #4055
7667// Add another global to avoid noConflict issues with inline event handlers
7668window.DP_jQuery = $;
7669
7670})(jQuery);
7671/*
7672 * jQuery UI Progressbar 1.7.2
7673 *
7674 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
7675 * Dual licensed under the MIT (MIT-LICENSE.txt)
7676 * and GPL (GPL-LICENSE.txt) licenses.
7677 *
7678 * http://docs.jquery.com/UI/Progressbar
7679 *
7680 * Depends:
7681 * ui.core.js
7682 */
7683(function($) {
7684
7685$.widget("ui.progressbar", {
7686
7687 _init: function() {
7688
7689 this.element
7690 .addClass("ui-progressbar"
7691 + " ui-widget"
7692 + " ui-widget-content"
7693 + " ui-corner-all")
7694 .attr({
7695 role: "progressbar",
7696 "aria-valuemin": this._valueMin(),
7697 "aria-valuemax": this._valueMax(),
7698 "aria-valuenow": this._value()
7699 });
7700
7701 this.valueDiv = $('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);
7702
7703 this._refreshValue();
7704
7705 },
7706
7707 destroy: function() {
7708
7709 this.element
7710 .removeClass("ui-progressbar"
7711 + " ui-widget"
7712 + " ui-widget-content"
7713 + " ui-corner-all")
7714 .removeAttr("role")
7715 .removeAttr("aria-valuemin")
7716 .removeAttr("aria-valuemax")
7717 .removeAttr("aria-valuenow")
7718 .removeData("progressbar")
7719 .unbind(".progressbar");
7720
7721 this.valueDiv.remove();
7722
7723 $.widget.prototype.destroy.apply(this, arguments);
7724
7725 },
7726
7727 value: function(newValue) {
7728 if (newValue === undefined) {
7729 return this._value();
7730 }
7731
7732 this._setData('value', newValue);
7733 return this;
7734 },
7735
7736 _setData: function(key, value) {
7737
7738 switch (key) {
7739 case 'value':
7740 this.options.value = value;
7741 this._refreshValue();
7742 this._trigger('change', null, {});
7743 break;
7744 }
7745
7746 $.widget.prototype._setData.apply(this, arguments);
7747
7748 },
7749
7750 _value: function() {
7751
7752 var val = this.options.value;
7753 if (val < this._valueMin()) val = this._valueMin();
7754 if (val > this._valueMax()) val = this._valueMax();
7755
7756 return val;
7757
7758 },
7759
7760 _valueMin: function() {
7761 var valueMin = 0;
7762 return valueMin;
7763 },
7764
7765 _valueMax: function() {
7766 var valueMax = 100;
7767 return valueMax;
7768 },
7769
7770 _refreshValue: function() {
7771 var value = this.value();
7772 this.valueDiv[value == this._valueMax() ? 'addClass' : 'removeClass']("ui-corner-right");
7773 this.valueDiv.width(value + '%');
7774 this.element.attr("aria-valuenow", value);
7775 }
7776
7777});
7778
7779$.extend($.ui.progressbar, {
7780 version: "1.7.2",
7781 defaults: {
7782 value: 0
7783 }
7784});
7785
7786})(jQuery);
7787/*
7788 * jQuery UI Effects 1.7.2
7789 *
7790 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
7791 * Dual licensed under the MIT (MIT-LICENSE.txt)
7792 * and GPL (GPL-LICENSE.txt) licenses.
7793 *
7794 * http://docs.jquery.com/UI/Effects/
7795 */
7796;jQuery.effects || (function($) {
7797
7798$.effects = {
7799 version: "1.7.2",
7800
7801 // Saves a set of properties in a data storage
7802 save: function(element, set) {
7803 for(var i=0; i < set.length; i++) {
7804 if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
7805 }
7806 },
7807
7808 // Restores a set of previously saved properties from a data storage
7809 restore: function(element, set) {
7810 for(var i=0; i < set.length; i++) {
7811 if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
7812 }
7813 },
7814
7815 setMode: function(el, mode) {
7816 if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
7817 return mode;
7818 },
7819
7820 getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
7821 // this should be a little more flexible in the future to handle a string & hash
7822 var y, x;
7823 switch (origin[0]) {
7824 case 'top': y = 0; break;
7825 case 'middle': y = 0.5; break;
7826 case 'bottom': y = 1; break;
7827 default: y = origin[0] / original.height;
7828 };
7829 switch (origin[1]) {
7830 case 'left': x = 0; break;
7831 case 'center': x = 0.5; break;
7832 case 'right': x = 1; break;
7833 default: x = origin[1] / original.width;
7834 };
7835 return {x: x, y: y};
7836 },
7837
7838 // Wraps the element around a wrapper that copies position properties
7839 createWrapper: function(element) {
7840
7841 //if the element is already wrapped, return it
7842 if (element.parent().is('.ui-effects-wrapper'))
7843 return element.parent();
7844
7845 //Cache width,height and float properties of the element, and create a wrapper around it
7846 var props = { width: element.outerWidth(true), height: element.outerHeight(true), 'float': element.css('float') };
7847 element.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');
7848 var wrapper = element.parent();
7849
7850 //Transfer the positioning of the element to the wrapper
7851 if (element.css('position') == 'static') {
7852 wrapper.css({ position: 'relative' });
7853 element.css({ position: 'relative'} );
7854 } else {
7855 var top = element.css('top'); if(isNaN(parseInt(top,10))) top = 'auto';
7856 var left = element.css('left'); if(isNaN(parseInt(left,10))) left = 'auto';
7857 wrapper.css({ position: element.css('position'), top: top, left: left, zIndex: element.css('z-index') }).show();
7858 element.css({position: 'relative', top: 0, left: 0 });
7859 }
7860
7861 wrapper.css(props);
7862 return wrapper;
7863 },
7864
7865 removeWrapper: function(element) {
7866 if (element.parent().is('.ui-effects-wrapper'))
7867 return element.parent().replaceWith(element);
7868 return element;
7869 },
7870
7871 setTransition: function(element, list, factor, value) {
7872 value = value || {};
7873 $.each(list, function(i, x){
7874 unit = element.cssUnit(x);
7875 if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
7876 });
7877 return value;
7878 },
7879
7880 //Base function to animate from one class to another in a seamless transition
7881 animateClass: function(value, duration, easing, callback) {
7882
7883 var cb = (typeof easing == "function" ? easing : (callback ? callback : null));
7884 var ea = (typeof easing == "string" ? easing : null);
7885
7886 return this.each(function() {
7887
7888 var offset = {}; var that = $(this); var oldStyleAttr = that.attr("style") || '';
7889 if(typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"]; /* Stupidly in IE, style is a object.. */
7890 if(value.toggle) { that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle; }
7891
7892 //Let's get a style offset
7893 var oldStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
7894 if(value.add) that.addClass(value.add); if(value.remove) that.removeClass(value.remove);
7895 var newStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
7896 if(value.add) that.removeClass(value.add); if(value.remove) that.addClass(value.remove);
7897
7898 // The main function to form the object for animation
7899 for(var n in newStyle) {
7900 if( typeof newStyle[n] != "function" && newStyle[n] /* No functions and null properties */
7901 && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 /* No mozilla spezific render properties. */
7902 && newStyle[n] != oldStyle[n] /* Only values that have changed are used for the animation */
7903 && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n],10)))) /* Only things that can be parsed to integers or colors */
7904 && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/))) /* No need for positions when dealing with static positions */
7905 ) offset[n] = newStyle[n];
7906 }
7907
7908 that.animate(offset, duration, ea, function() { // Animate the newly constructed offset object
7909 // Change style attribute back to original. For stupid IE, we need to clear the damn object.
7910 if(typeof $(this).attr("style") == 'object') { $(this).attr("style")["cssText"] = ""; $(this).attr("style")["cssText"] = oldStyleAttr; } else $(this).attr("style", oldStyleAttr);
7911 if(value.add) $(this).addClass(value.add); if(value.remove) $(this).removeClass(value.remove);
7912 if(cb) cb.apply(this, arguments);
7913 });
7914
7915 });
7916 }
7917};
7918
7919
7920function _normalizeArguments(a, m) {
7921
7922 var o = a[1] && a[1].constructor == Object ? a[1] : {}; if(m) o.mode = m;
7923 var speed = a[1] && a[1].constructor != Object ? a[1] : (o.duration ? o.duration : a[2]); //either comes from options.duration or the secon/third argument
7924 speed = $.fx.off ? 0 : typeof speed === "number" ? speed : $.fx.speeds[speed] || $.fx.speeds._default;
7925 var callback = o.callback || ( $.isFunction(a[1]) && a[1] ) || ( $.isFunction(a[2]) && a[2] ) || ( $.isFunction(a[3]) && a[3] );
7926
7927 return [a[0], o, speed, callback];
7928
7929}
7930
7931//Extend the methods of jQuery
7932$.fn.extend({
7933
7934 //Save old methods
7935 _show: $.fn.show,
7936 _hide: $.fn.hide,
7937 __toggle: $.fn.toggle,
7938 _addClass: $.fn.addClass,
7939 _removeClass: $.fn.removeClass,
7940 _toggleClass: $.fn.toggleClass,
7941
7942 // New effect methods
7943 effect: function(fx, options, speed, callback) {
7944 return $.effects[fx] ? $.effects[fx].call(this, {method: fx, options: options || {}, duration: speed, callback: callback }) : null;
7945 },
7946
7947 show: function() {
7948 if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
7949 return this._show.apply(this, arguments);
7950 else {
7951 return this.effect.apply(this, _normalizeArguments(arguments, 'show'));
7952 }
7953 },
7954
7955 hide: function() {
7956 if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
7957 return this._hide.apply(this, arguments);
7958 else {
7959 return this.effect.apply(this, _normalizeArguments(arguments, 'hide'));
7960 }
7961 },
7962
7963 toggle: function(){
7964 if(!arguments[0] ||
7965 (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])) ||
7966 ($.isFunction(arguments[0]) || typeof arguments[0] == 'boolean')) {
7967 return this.__toggle.apply(this, arguments);
7968 } else {
7969 return this.effect.apply(this, _normalizeArguments(arguments, 'toggle'));
7970 }
7971 },
7972
7973 addClass: function(classNames, speed, easing, callback) {
7974 return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
7975 },
7976 removeClass: function(classNames,speed,easing,callback) {
7977 return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
7978 },
7979 toggleClass: function(classNames,speed,easing,callback) {
7980 return ( (typeof speed !== "boolean") && speed ) ? $.effects.animateClass.apply(this, [{ toggle: classNames },speed,easing,callback]) : this._toggleClass(classNames, speed);
7981 },
7982 morph: function(remove,add,speed,easing,callback) {
7983 return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
7984 },
7985 switchClass: function() {
7986 return this.morph.apply(this, arguments);
7987 },
7988
7989 // helper functions
7990 cssUnit: function(key) {
7991 var style = this.css(key), val = [];
7992 $.each( ['em','px','%','pt'], function(i, unit){
7993 if(style.indexOf(unit) > 0)
7994 val = [parseFloat(style), unit];
7995 });
7996 return val;
7997 }
7998});
7999
8000/*
8001 * jQuery Color Animations
8002 * Copyright 2007 John Resig
8003 * Released under the MIT and GPL licenses.
8004 */
8005
8006// We override the animation for all of these color styles
8007$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
8008 $.fx.step[attr] = function(fx) {
8009 if ( fx.state == 0 ) {
8010 fx.start = getColor( fx.elem, attr );
8011 fx.end = getRGB( fx.end );
8012 }
8013
8014 fx.elem.style[attr] = "rgb(" + [
8015 Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0],10), 255), 0),
8016 Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1],10), 255), 0),
8017 Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2],10), 255), 0)
8018 ].join(",") + ")";
8019 };
8020});
8021
8022// Color Conversion functions from highlightFade
8023// By Blair Mitchelmore
8024// http://jquery.offput.ca/highlightFade/
8025
8026// Parse strings looking for color tuples [255,255,255]
8027function getRGB(color) {
8028 var result;
8029
8030 // Check if we're already dealing with an array of colors
8031 if ( color && color.constructor == Array && color.length == 3 )
8032 return color;
8033
8034 // Look for rgb(num,num,num)
8035 if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
8036 return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
8037
8038 // Look for rgb(num%,num%,num%)
8039 if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
8040 return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
8041
8042 // Look for #a0b1c2
8043 if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
8044 return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
8045
8046 // Look for #fff
8047 if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
8048 return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
8049
8050 // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
8051 if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
8052 return colors['transparent'];
8053
8054 // Otherwise, we're most likely dealing with a named color
8055 return colors[$.trim(color).toLowerCase()];
8056}
8057
8058function getColor(elem, attr) {
8059 var color;
8060
8061 do {
8062 color = $.curCSS(elem, attr);
8063
8064 // Keep going until we find an element that has color, or we hit the body
8065 if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
8066 break;
8067
8068 attr = "backgroundColor";
8069 } while ( elem = elem.parentNode );
8070
8071 return getRGB(color);
8072};
8073
8074// Some named colors to work with
8075// From Interface by Stefan Petre
8076// http://interface.eyecon.ro/
8077
8078var colors = {
8079 aqua:[0,255,255],
8080 azure:[240,255,255],
8081 beige:[245,245,220],
8082 black:[0,0,0],
8083 blue:[0,0,255],
8084 brown:[165,42,42],
8085 cyan:[0,255,255],
8086 darkblue:[0,0,139],
8087 darkcyan:[0,139,139],
8088 darkgrey:[169,169,169],
8089 darkgreen:[0,100,0],
8090 darkkhaki:[189,183,107],
8091 darkmagenta:[139,0,139],
8092 darkolivegreen:[85,107,47],
8093 darkorange:[255,140,0],
8094 darkorchid:[153,50,204],
8095 darkred:[139,0,0],
8096 darksalmon:[233,150,122],
8097 darkviolet:[148,0,211],
8098 fuchsia:[255,0,255],
8099 gold:[255,215,0],
8100 green:[0,128,0],
8101 indigo:[75,0,130],
8102 khaki:[240,230,140],
8103 lightblue:[173,216,230],
8104 lightcyan:[224,255,255],
8105 lightgreen:[144,238,144],
8106 lightgrey:[211,211,211],
8107 lightpink:[255,182,193],
8108 lightyellow:[255,255,224],
8109 lime:[0,255,0],
8110 magenta:[255,0,255],
8111 maroon:[128,0,0],
8112 navy:[0,0,128],
8113 olive:[128,128,0],
8114 orange:[255,165,0],
8115 pink:[255,192,203],
8116 purple:[128,0,128],
8117 violet:[128,0,128],
8118 red:[255,0,0],
8119 silver:[192,192,192],
8120 white:[255,255,255],
8121 yellow:[255,255,0],
8122 transparent: [255,255,255]
8123};
8124
8125/*
8126 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
8127 *
8128 * Uses the built in easing capabilities added In jQuery 1.1
8129 * to offer multiple easing options
8130 *
8131 * TERMS OF USE - jQuery Easing
8132 *
8133 * Open source under the BSD License.
8134 *
8135 * Copyright 2008 George McGinley Smith
8136 * All rights reserved.
8137 *
8138 * Redistribution and use in source and binary forms, with or without modification,
8139 * are permitted provided that the following conditions are met:
8140 *
8141 * Redistributions of source code must retain the above copyright notice, this list of
8142 * conditions and the following disclaimer.
8143 * Redistributions in binary form must reproduce the above copyright notice, this list
8144 * of conditions and the following disclaimer in the documentation and/or other materials
8145 * provided with the distribution.
8146 *
8147 * Neither the name of the author nor the names of contributors may be used to endorse
8148 * or promote products derived from this software without specific prior written permission.
8149 *
8150 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
8151 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
8152 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
8153 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
8154 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
8155 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
8156 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
8157 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
8158 * OF THE POSSIBILITY OF SUCH DAMAGE.
8159 *
8160*/
8161
8162// t: current time, b: begInnIng value, c: change In value, d: duration
8163$.easing.jswing = $.easing.swing;
8164
8165$.extend($.easing,
8166{
8167 def: 'easeOutQuad',
8168 swing: function (x, t, b, c, d) {
8169 //alert($.easing.default);
8170 return $.easing[$.easing.def](x, t, b, c, d);
8171 },
8172 easeInQuad: function (x, t, b, c, d) {
8173 return c*(t/=d)*t + b;
8174 },
8175 easeOutQuad: function (x, t, b, c, d) {
8176 return -c *(t/=d)*(t-2) + b;
8177 },
8178 easeInOutQuad: function (x, t, b, c, d) {
8179 if ((t/=d/2) < 1) return c/2*t*t + b;
8180 return -c/2 * ((--t)*(t-2) - 1) + b;
8181 },
8182 easeInCubic: function (x, t, b, c, d) {
8183 return c*(t/=d)*t*t + b;
8184 },
8185 easeOutCubic: function (x, t, b, c, d) {
8186 return c*((t=t/d-1)*t*t + 1) + b;
8187 },
8188 easeInOutCubic: function (x, t, b, c, d) {
8189 if ((t/=d/2) < 1) return c/2*t*t*t + b;
8190 return c/2*((t-=2)*t*t + 2) + b;
8191 },
8192 easeInQuart: function (x, t, b, c, d) {
8193 return c*(t/=d)*t*t*t + b;
8194 },
8195 easeOutQuart: function (x, t, b, c, d) {
8196 return -c * ((t=t/d-1)*t*t*t - 1) + b;
8197 },
8198 easeInOutQuart: function (x, t, b, c, d) {
8199 if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
8200 return -c/2 * ((t-=2)*t*t*t - 2) + b;
8201 },
8202 easeInQuint: function (x, t, b, c, d) {
8203 return c*(t/=d)*t*t*t*t + b;
8204 },
8205 easeOutQuint: function (x, t, b, c, d) {
8206 return c*((t=t/d-1)*t*t*t*t + 1) + b;
8207 },
8208 easeInOutQuint: function (x, t, b, c, d) {
8209 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
8210 return c/2*((t-=2)*t*t*t*t + 2) + b;
8211 },
8212 easeInSine: function (x, t, b, c, d) {
8213 return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
8214 },
8215 easeOutSine: function (x, t, b, c, d) {
8216 return c * Math.sin(t/d * (Math.PI/2)) + b;
8217 },
8218 easeInOutSine: function (x, t, b, c, d) {
8219 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
8220 },
8221 easeInExpo: function (x, t, b, c, d) {
8222 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
8223 },
8224 easeOutExpo: function (x, t, b, c, d) {
8225 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
8226 },
8227 easeInOutExpo: function (x, t, b, c, d) {
8228 if (t==0) return b;
8229 if (t==d) return b+c;
8230 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
8231 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
8232 },
8233 easeInCirc: function (x, t, b, c, d) {
8234 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
8235 },
8236 easeOutCirc: function (x, t, b, c, d) {
8237 return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
8238 },
8239 easeInOutCirc: function (x, t, b, c, d) {
8240 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
8241 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
8242 },
8243 easeInElastic: function (x, t, b, c, d) {
8244 var s=1.70158;var p=0;var a=c;
8245 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
8246 if (a < Math.abs(c)) { a=c; var s=p/4; }
8247 else var s = p/(2*Math.PI) * Math.asin (c/a);
8248 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
8249 },
8250 easeOutElastic: function (x, t, b, c, d) {
8251 var s=1.70158;var p=0;var a=c;
8252 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
8253 if (a < Math.abs(c)) { a=c; var s=p/4; }
8254 else var s = p/(2*Math.PI) * Math.asin (c/a);
8255 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
8256 },
8257 easeInOutElastic: function (x, t, b, c, d) {
8258 var s=1.70158;var p=0;var a=c;
8259 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
8260 if (a < Math.abs(c)) { a=c; var s=p/4; }
8261 else var s = p/(2*Math.PI) * Math.asin (c/a);
8262 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
8263 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
8264 },
8265 easeInBack: function (x, t, b, c, d, s) {
8266 if (s == undefined) s = 1.70158;
8267 return c*(t/=d)*t*((s+1)*t - s) + b;
8268 },
8269 easeOutBack: function (x, t, b, c, d, s) {
8270 if (s == undefined) s = 1.70158;
8271 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
8272 },
8273 easeInOutBack: function (x, t, b, c, d, s) {
8274 if (s == undefined) s = 1.70158;
8275 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
8276 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
8277 },
8278 easeInBounce: function (x, t, b, c, d) {
8279 return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
8280 },
8281 easeOutBounce: function (x, t, b, c, d) {
8282 if ((t/=d) < (1/2.75)) {
8283 return c*(7.5625*t*t) + b;
8284 } else if (t < (2/2.75)) {
8285 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
8286 } else if (t < (2.5/2.75)) {
8287 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
8288 } else {
8289 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
8290 }
8291 },
8292 easeInOutBounce: function (x, t, b, c, d) {
8293 if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
8294 return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
8295 }
8296});
8297
8298/*
8299 *
8300 * TERMS OF USE - EASING EQUATIONS
8301 *
8302 * Open source under the BSD License.
8303 *
8304 * Copyright 2001 Robert Penner
8305 * All rights reserved.
8306 *
8307 * Redistribution and use in source and binary forms, with or without modification,
8308 * are permitted provided that the following conditions are met:
8309 *
8310 * Redistributions of source code must retain the above copyright notice, this list of
8311 * conditions and the following disclaimer.
8312 * Redistributions in binary form must reproduce the above copyright notice, this list
8313 * of conditions and the following disclaimer in the documentation and/or other materials
8314 * provided with the distribution.
8315 *
8316 * Neither the name of the author nor the names of contributors may be used to endorse
8317 * or promote products derived from this software without specific prior written permission.
8318 *
8319 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
8320 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
8321 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
8322 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
8323 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
8324 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
8325 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
8326 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
8327 * OF THE POSSIBILITY OF SUCH DAMAGE.
8328 *
8329 */
8330
8331})(jQuery);
8332/*
8333 * jQuery UI Effects Blind 1.7.2
8334 *
8335 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8336 * Dual licensed under the MIT (MIT-LICENSE.txt)
8337 * and GPL (GPL-LICENSE.txt) licenses.
8338 *
8339 * http://docs.jquery.com/UI/Effects/Blind
8340 *
8341 * Depends:
8342 * effects.core.js
8343 */
8344(function($) {
8345
8346$.effects.blind = function(o) {
8347
8348 return this.queue(function() {
8349
8350 // Create element
8351 var el = $(this), props = ['position','top','left'];
8352
8353 // Set options
8354 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
8355 var direction = o.options.direction || 'vertical'; // Default direction
8356
8357 // Adjust
8358 $.effects.save(el, props); el.show(); // Save & Show
8359 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
8360 var ref = (direction == 'vertical') ? 'height' : 'width';
8361 var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
8362 if(mode == 'show') wrapper.css(ref, 0); // Shift
8363
8364 // Animation
8365 var animation = {};
8366 animation[ref] = mode == 'show' ? distance : 0;
8367
8368 // Animate
8369 wrapper.animate(animation, o.duration, o.options.easing, function() {
8370 if(mode == 'hide') el.hide(); // Hide
8371 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
8372 if(o.callback) o.callback.apply(el[0], arguments); // Callback
8373 el.dequeue();
8374 });
8375
8376 });
8377
8378};
8379
8380})(jQuery);
8381/*
8382 * jQuery UI Effects Bounce 1.7.2
8383 *
8384 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8385 * Dual licensed under the MIT (MIT-LICENSE.txt)
8386 * and GPL (GPL-LICENSE.txt) licenses.
8387 *
8388 * http://docs.jquery.com/UI/Effects/Bounce
8389 *
8390 * Depends:
8391 * effects.core.js
8392 */
8393(function($) {
8394
8395$.effects.bounce = function(o) {
8396
8397 return this.queue(function() {
8398
8399 // Create element
8400 var el = $(this), props = ['position','top','left'];
8401
8402 // Set options
8403 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
8404 var direction = o.options.direction || 'up'; // Default direction
8405 var distance = o.options.distance || 20; // Default distance
8406 var times = o.options.times || 5; // Default # of times
8407 var speed = o.duration || 250; // Default speed per bounce
8408 if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
8409
8410 // Adjust
8411 $.effects.save(el, props); el.show(); // Save & Show
8412 $.effects.createWrapper(el); // Create Wrapper
8413 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
8414 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
8415 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
8416 if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
8417 if (mode == 'hide') distance = distance / (times * 2);
8418 if (mode != 'hide') times--;
8419
8420 // Animate
8421 if (mode == 'show') { // Show Bounce
8422 var animation = {opacity: 1};
8423 animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
8424 el.animate(animation, speed / 2, o.options.easing);
8425 distance = distance / 2;
8426 times--;
8427 };
8428 for (var i = 0; i < times; i++) { // Bounces
8429 var animation1 = {}, animation2 = {};
8430 animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
8431 animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
8432 el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
8433 distance = (mode == 'hide') ? distance * 2 : distance / 2;
8434 };
8435 if (mode == 'hide') { // Last Bounce
8436 var animation = {opacity: 0};
8437 animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
8438 el.animate(animation, speed / 2, o.options.easing, function(){
8439 el.hide(); // Hide
8440 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
8441 if(o.callback) o.callback.apply(this, arguments); // Callback
8442 });
8443 } else {
8444 var animation1 = {}, animation2 = {};
8445 animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
8446 animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
8447 el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
8448 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
8449 if(o.callback) o.callback.apply(this, arguments); // Callback
8450 });
8451 };
8452 el.queue('fx', function() { el.dequeue(); });
8453 el.dequeue();
8454 });
8455
8456};
8457
8458})(jQuery);
8459/*
8460 * jQuery UI Effects Clip 1.7.2
8461 *
8462 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8463 * Dual licensed under the MIT (MIT-LICENSE.txt)
8464 * and GPL (GPL-LICENSE.txt) licenses.
8465 *
8466 * http://docs.jquery.com/UI/Effects/Clip
8467 *
8468 * Depends:
8469 * effects.core.js
8470 */
8471(function($) {
8472
8473$.effects.clip = function(o) {
8474
8475 return this.queue(function() {
8476
8477 // Create element
8478 var el = $(this), props = ['position','top','left','height','width'];
8479
8480 // Set options
8481 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
8482 var direction = o.options.direction || 'vertical'; // Default direction
8483
8484 // Adjust
8485 $.effects.save(el, props); el.show(); // Save & Show
8486 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
8487 var animate = el[0].tagName == 'IMG' ? wrapper : el;
8488 var ref = {
8489 size: (direction == 'vertical') ? 'height' : 'width',
8490 position: (direction == 'vertical') ? 'top' : 'left'
8491 };
8492 var distance = (direction == 'vertical') ? animate.height() : animate.width();
8493 if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
8494
8495 // Animation
8496 var animation = {};
8497 animation[ref.size] = mode == 'show' ? distance : 0;
8498 animation[ref.position] = mode == 'show' ? 0 : distance / 2;
8499
8500 // Animate
8501 animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
8502 if(mode == 'hide') el.hide(); // Hide
8503 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
8504 if(o.callback) o.callback.apply(el[0], arguments); // Callback
8505 el.dequeue();
8506 }});
8507
8508 });
8509
8510};
8511
8512})(jQuery);
8513/*
8514 * jQuery UI Effects Drop 1.7.2
8515 *
8516 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8517 * Dual licensed under the MIT (MIT-LICENSE.txt)
8518 * and GPL (GPL-LICENSE.txt) licenses.
8519 *
8520 * http://docs.jquery.com/UI/Effects/Drop
8521 *
8522 * Depends:
8523 * effects.core.js
8524 */
8525(function($) {
8526
8527$.effects.drop = function(o) {
8528
8529 return this.queue(function() {
8530
8531 // Create element
8532 var el = $(this), props = ['position','top','left','opacity'];
8533
8534 // Set options
8535 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
8536 var direction = o.options.direction || 'left'; // Default Direction
8537
8538 // Adjust
8539 $.effects.save(el, props); el.show(); // Save & Show
8540 $.effects.createWrapper(el); // Create Wrapper
8541 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
8542 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
8543 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
8544 if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
8545
8546 // Animation
8547 var animation = {opacity: mode == 'show' ? 1 : 0};
8548 animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
8549
8550 // Animate
8551 el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
8552 if(mode == 'hide') el.hide(); // Hide
8553 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
8554 if(o.callback) o.callback.apply(this, arguments); // Callback
8555 el.dequeue();
8556 }});
8557
8558 });
8559
8560};
8561
8562})(jQuery);
8563/*
8564 * jQuery UI Effects Explode 1.7.2
8565 *
8566 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8567 * Dual licensed under the MIT (MIT-LICENSE.txt)
8568 * and GPL (GPL-LICENSE.txt) licenses.
8569 *
8570 * http://docs.jquery.com/UI/Effects/Explode
8571 *
8572 * Depends:
8573 * effects.core.js
8574 */
8575(function($) {
8576
8577$.effects.explode = function(o) {
8578
8579 return this.queue(function() {
8580
8581 var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
8582 var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
8583
8584 o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
8585 var el = $(this).show().css('visibility', 'hidden');
8586 var offset = el.offset();
8587
8588 //Substract the margins - not fixing the problem yet.
8589 offset.top -= parseInt(el.css("marginTop"),10) || 0;
8590 offset.left -= parseInt(el.css("marginLeft"),10) || 0;
8591
8592 var width = el.outerWidth(true);
8593 var height = el.outerHeight(true);
8594
8595 for(var i=0;i<rows;i++) { // =
8596 for(var j=0;j<cells;j++) { // ||
8597 el
8598 .clone()
8599 .appendTo('body')
8600 .wrap('<div></div>')
8601 .css({
8602 position: 'absolute',
8603 visibility: 'visible',
8604 left: -j*(width/cells),
8605 top: -i*(height/rows)
8606 })
8607 .parent()
8608 .addClass('ui-effects-explode')
8609 .css({
8610 position: 'absolute',
8611 overflow: 'hidden',
8612 width: width/cells,
8613 height: height/rows,
8614 left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
8615 top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
8616 opacity: o.options.mode == 'show' ? 0 : 1
8617 }).animate({
8618 left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
8619 top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
8620 opacity: o.options.mode == 'show' ? 1 : 0
8621 }, o.duration || 500);
8622 }
8623 }
8624
8625 // Set a timeout, to call the callback approx. when the other animations have finished
8626 setTimeout(function() {
8627
8628 o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
8629 if(o.callback) o.callback.apply(el[0]); // Callback
8630 el.dequeue();
8631
8632 $('div.ui-effects-explode').remove();
8633
8634 }, o.duration || 500);
8635
8636
8637 });
8638
8639};
8640
8641})(jQuery);
8642/*
8643 * jQuery UI Effects Fold 1.7.2
8644 *
8645 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8646 * Dual licensed under the MIT (MIT-LICENSE.txt)
8647 * and GPL (GPL-LICENSE.txt) licenses.
8648 *
8649 * http://docs.jquery.com/UI/Effects/Fold
8650 *
8651 * Depends:
8652 * effects.core.js
8653 */
8654(function($) {
8655
8656$.effects.fold = function(o) {
8657
8658 return this.queue(function() {
8659
8660 // Create element
8661 var el = $(this), props = ['position','top','left'];
8662
8663 // Set options
8664 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
8665 var size = o.options.size || 15; // Default fold size
8666 var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
8667 var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
8668
8669 // Adjust
8670 $.effects.save(el, props); el.show(); // Save & Show
8671 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
8672 var widthFirst = ((mode == 'show') != horizFirst);
8673 var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
8674 var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
8675 var percent = /([0-9]+)%/.exec(size);
8676 if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
8677 if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
8678
8679 // Animation
8680 var animation1 = {}, animation2 = {};
8681 animation1[ref[0]] = mode == 'show' ? distance[0] : size;
8682 animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
8683
8684 // Animate
8685 wrapper.animate(animation1, duration, o.options.easing)
8686 .animate(animation2, duration, o.options.easing, function() {
8687 if(mode == 'hide') el.hide(); // Hide
8688 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
8689 if(o.callback) o.callback.apply(el[0], arguments); // Callback
8690 el.dequeue();
8691 });
8692
8693 });
8694
8695};
8696
8697})(jQuery);
8698/*
8699 * jQuery UI Effects Highlight 1.7.2
8700 *
8701 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8702 * Dual licensed under the MIT (MIT-LICENSE.txt)
8703 * and GPL (GPL-LICENSE.txt) licenses.
8704 *
8705 * http://docs.jquery.com/UI/Effects/Highlight
8706 *
8707 * Depends:
8708 * effects.core.js
8709 */
8710(function($) {
8711
8712$.effects.highlight = function(o) {
8713
8714 return this.queue(function() {
8715
8716 // Create element
8717 var el = $(this), props = ['backgroundImage','backgroundColor','opacity'];
8718
8719 // Set options
8720 var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
8721 var color = o.options.color || "#ffff99"; // Default highlight color
8722 var oldColor = el.css("backgroundColor");
8723
8724 // Adjust
8725 $.effects.save(el, props); el.show(); // Save & Show
8726 el.css({backgroundImage: 'none', backgroundColor: color}); // Shift
8727
8728 // Animation
8729 var animation = {backgroundColor: oldColor };
8730 if (mode == "hide") animation['opacity'] = 0;
8731
8732 // Animate
8733 el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
8734 if(mode == "hide") el.hide();
8735 $.effects.restore(el, props);
8736 if (mode == "show" && $.browser.msie) this.style.removeAttribute('filter');
8737 if(o.callback) o.callback.apply(this, arguments);
8738 el.dequeue();
8739 }});
8740
8741 });
8742
8743};
8744
8745})(jQuery);
8746/*
8747 * jQuery UI Effects Pulsate 1.7.2
8748 *
8749 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8750 * Dual licensed under the MIT (MIT-LICENSE.txt)
8751 * and GPL (GPL-LICENSE.txt) licenses.
8752 *
8753 * http://docs.jquery.com/UI/Effects/Pulsate
8754 *
8755 * Depends:
8756 * effects.core.js
8757 */
8758(function($) {
8759
8760$.effects.pulsate = function(o) {
8761
8762 return this.queue(function() {
8763
8764 // Create element
8765 var el = $(this);
8766
8767 // Set options
8768 var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
8769 var times = o.options.times || 5; // Default # of times
8770 var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
8771
8772 // Adjust
8773 if (mode == 'hide') times--;
8774 if (el.is(':hidden')) { // Show fadeIn
8775 el.css('opacity', 0);
8776 el.show(); // Show
8777 el.animate({opacity: 1}, duration, o.options.easing);
8778 times = times-2;
8779 }
8780
8781 // Animate
8782 for (var i = 0; i < times; i++) { // Pulsate
8783 el.animate({opacity: 0}, duration, o.options.easing).animate({opacity: 1}, duration, o.options.easing);
8784 };
8785 if (mode == 'hide') { // Last Pulse
8786 el.animate({opacity: 0}, duration, o.options.easing, function(){
8787 el.hide(); // Hide
8788 if(o.callback) o.callback.apply(this, arguments); // Callback
8789 });
8790 } else {
8791 el.animate({opacity: 0}, duration, o.options.easing).animate({opacity: 1}, duration, o.options.easing, function(){
8792 if(o.callback) o.callback.apply(this, arguments); // Callback
8793 });
8794 };
8795 el.queue('fx', function() { el.dequeue(); });
8796 el.dequeue();
8797 });
8798
8799};
8800
8801})(jQuery);
8802/*
8803 * jQuery UI Effects Scale 1.7.2
8804 *
8805 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8806 * Dual licensed under the MIT (MIT-LICENSE.txt)
8807 * and GPL (GPL-LICENSE.txt) licenses.
8808 *
8809 * http://docs.jquery.com/UI/Effects/Scale
8810 *
8811 * Depends:
8812 * effects.core.js
8813 */
8814(function($) {
8815
8816$.effects.puff = function(o) {
8817
8818 return this.queue(function() {
8819
8820 // Create element
8821 var el = $(this);
8822
8823 // Set options
8824 var options = $.extend(true, {}, o.options);
8825 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
8826 var percent = parseInt(o.options.percent,10) || 150; // Set default puff percent
8827 options.fade = true; // It's not a puff if it doesn't fade! :)
8828 var original = {height: el.height(), width: el.width()}; // Save original
8829
8830 // Adjust
8831 var factor = percent / 100;
8832 el.from = (mode == 'hide') ? original : {height: original.height * factor, width: original.width * factor};
8833
8834 // Animation
8835 options.from = el.from;
8836 options.percent = (mode == 'hide') ? percent : 100;
8837 options.mode = mode;
8838
8839 // Animate
8840 el.effect('scale', options, o.duration, o.callback);
8841 el.dequeue();
8842 });
8843
8844};
8845
8846$.effects.scale = function(o) {
8847
8848 return this.queue(function() {
8849
8850 // Create element
8851 var el = $(this);
8852
8853 // Set options
8854 var options = $.extend(true, {}, o.options);
8855 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
8856 var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
8857 var direction = o.options.direction || 'both'; // Set default axis
8858 var origin = o.options.origin; // The origin of the scaling
8859 if (mode != 'effect') { // Set default origin and restore for show/hide
8860 options.origin = origin || ['middle','center'];
8861 options.restore = true;
8862 }
8863 var original = {height: el.height(), width: el.width()}; // Save original
8864 el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
8865
8866 // Adjust
8867 var factor = { // Set scaling factor
8868 y: direction != 'horizontal' ? (percent / 100) : 1,
8869 x: direction != 'vertical' ? (percent / 100) : 1
8870 };
8871 el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
8872
8873 if (o.options.fade) { // Fade option to support puff
8874 if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
8875 if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
8876 };
8877
8878 // Animation
8879 options.from = el.from; options.to = el.to; options.mode = mode;
8880
8881 // Animate
8882 el.effect('size', options, o.duration, o.callback);
8883 el.dequeue();
8884 });
8885
8886};
8887
8888$.effects.size = function(o) {
8889
8890 return this.queue(function() {
8891
8892 // Create element
8893 var el = $(this), props = ['position','top','left','width','height','overflow','opacity'];
8894 var props1 = ['position','top','left','overflow','opacity']; // Always restore
8895 var props2 = ['width','height','overflow']; // Copy for children
8896 var cProps = ['fontSize'];
8897 var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
8898 var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
8899
8900 // Set options
8901 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
8902 var restore = o.options.restore || false; // Default restore
8903 var scale = o.options.scale || 'both'; // Default scale mode
8904 var origin = o.options.origin; // The origin of the sizing
8905 var original = {height: el.height(), width: el.width()}; // Save original
8906 el.from = o.options.from || original; // Default from state
8907 el.to = o.options.to || original; // Default to state
8908 // Adjust
8909 if (origin) { // Calculate baseline shifts
8910 var baseline = $.effects.getBaseline(origin, original);
8911 el.from.top = (original.height - el.from.height) * baseline.y;
8912 el.from.left = (original.width - el.from.width) * baseline.x;
8913 el.to.top = (original.height - el.to.height) * baseline.y;
8914 el.to.left = (original.width - el.to.width) * baseline.x;
8915 };
8916 var factor = { // Set scaling factor
8917 from: {y: el.from.height / original.height, x: el.from.width / original.width},
8918 to: {y: el.to.height / original.height, x: el.to.width / original.width}
8919 };
8920 if (scale == 'box' || scale == 'both') { // Scale the css box
8921 if (factor.from.y != factor.to.y) { // Vertical props scaling
8922 props = props.concat(vProps);
8923 el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
8924 el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
8925 };
8926 if (factor.from.x != factor.to.x) { // Horizontal props scaling
8927 props = props.concat(hProps);
8928 el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
8929 el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
8930 };
8931 };
8932 if (scale == 'content' || scale == 'both') { // Scale the content
8933 if (factor.from.y != factor.to.y) { // Vertical props scaling
8934 props = props.concat(cProps);
8935 el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
8936 el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
8937 };
8938 };
8939 $.effects.save(el, restore ? props : props1); el.show(); // Save & Show
8940 $.effects.createWrapper(el); // Create Wrapper
8941 el.css('overflow','hidden').css(el.from); // Shift
8942
8943 // Animate
8944 if (scale == 'content' || scale == 'both') { // Scale the children
8945 vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
8946 hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
8947 props2 = props.concat(vProps).concat(hProps); // Concat
8948 el.find("*[width]").each(function(){
8949 child = $(this);
8950 if (restore) $.effects.save(child, props2);
8951 var c_original = {height: child.height(), width: child.width()}; // Save original
8952 child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
8953 child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
8954 if (factor.from.y != factor.to.y) { // Vertical props scaling
8955 child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
8956 child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
8957 };
8958 if (factor.from.x != factor.to.x) { // Horizontal props scaling
8959 child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
8960 child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
8961 };
8962 child.css(child.from); // Shift children
8963 child.animate(child.to, o.duration, o.options.easing, function(){
8964 if (restore) $.effects.restore(child, props2); // Restore children
8965 }); // Animate children
8966 });
8967 };
8968
8969 // Animate
8970 el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
8971 if(mode == 'hide') el.hide(); // Hide
8972 $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
8973 if(o.callback) o.callback.apply(this, arguments); // Callback
8974 el.dequeue();
8975 }});
8976
8977 });
8978
8979};
8980
8981})(jQuery);
8982/*
8983 * jQuery UI Effects Shake 1.7.2
8984 *
8985 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
8986 * Dual licensed under the MIT (MIT-LICENSE.txt)
8987 * and GPL (GPL-LICENSE.txt) licenses.
8988 *
8989 * http://docs.jquery.com/UI/Effects/Shake
8990 *
8991 * Depends:
8992 * effects.core.js
8993 */
8994(function($) {
8995
8996$.effects.shake = function(o) {
8997
8998 return this.queue(function() {
8999
9000 // Create element
9001 var el = $(this), props = ['position','top','left'];
9002
9003 // Set options
9004 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
9005 var direction = o.options.direction || 'left'; // Default direction
9006 var distance = o.options.distance || 20; // Default distance
9007 var times = o.options.times || 3; // Default # of times
9008 var speed = o.duration || o.options.duration || 140; // Default speed per shake
9009
9010 // Adjust
9011 $.effects.save(el, props); el.show(); // Save & Show
9012 $.effects.createWrapper(el); // Create Wrapper
9013 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
9014 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
9015
9016 // Animation
9017 var animation = {}, animation1 = {}, animation2 = {};
9018 animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
9019 animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2;
9020 animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2;
9021
9022 // Animate
9023 el.animate(animation, speed, o.options.easing);
9024 for (var i = 1; i < times; i++) { // Shakes
9025 el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
9026 };
9027 el.animate(animation1, speed, o.options.easing).
9028 animate(animation, speed / 2, o.options.easing, function(){ // Last shake
9029 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
9030 if(o.callback) o.callback.apply(this, arguments); // Callback
9031 });
9032 el.queue('fx', function() { el.dequeue(); });
9033 el.dequeue();
9034 });
9035
9036};
9037
9038})(jQuery);
9039/*
9040 * jQuery UI Effects Slide 1.7.2
9041 *
9042 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
9043 * Dual licensed under the MIT (MIT-LICENSE.txt)
9044 * and GPL (GPL-LICENSE.txt) licenses.
9045 *
9046 * http://docs.jquery.com/UI/Effects/Slide
9047 *
9048 * Depends:
9049 * effects.core.js
9050 */
9051(function($) {
9052
9053$.effects.slide = function(o) {
9054
9055 return this.queue(function() {
9056
9057 // Create element
9058 var el = $(this), props = ['position','top','left'];
9059
9060 // Set options
9061 var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
9062 var direction = o.options.direction || 'left'; // Default Direction
9063
9064 // Adjust
9065 $.effects.save(el, props); el.show(); // Save & Show
9066 $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
9067 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
9068 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
9069 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
9070 if (mode == 'show') el.css(ref, motion == 'pos' ? -distance : distance); // Shift
9071
9072 // Animation
9073 var animation = {};
9074 animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
9075
9076 // Animate
9077 el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
9078 if(mode == 'hide') el.hide(); // Hide
9079 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
9080 if(o.callback) o.callback.apply(this, arguments); // Callback
9081 el.dequeue();
9082 }});
9083
9084 });
9085
9086};
9087
9088})(jQuery);
9089/*
9090 * jQuery UI Effects Transfer 1.7.2
9091 *
9092 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
9093 * Dual licensed under the MIT (MIT-LICENSE.txt)
9094 * and GPL (GPL-LICENSE.txt) licenses.
9095 *
9096 * http://docs.jquery.com/UI/Effects/Transfer
9097 *
9098 * Depends:
9099 * effects.core.js
9100 */
9101(function($) {
9102
9103$.effects.transfer = function(o) {
9104 return this.queue(function() {
9105 var elem = $(this),
9106 target = $(o.options.to),
9107 endPosition = target.offset(),
9108 animation = {
9109 top: endPosition.top,
9110 left: endPosition.left,
9111 height: target.innerHeight(),
9112 width: target.innerWidth()
9113 },
9114 startPosition = elem.offset(),
9115 transfer = $('<div class="ui-effects-transfer"></div>')
9116 .appendTo(document.body)
9117 .addClass(o.options.className)
9118 .css({
9119 top: startPosition.top,
9120 left: startPosition.left,
9121 height: elem.innerHeight(),
9122 width: elem.innerWidth(),
9123 position: 'absolute'
9124 })
9125 .animate(animation, o.duration, o.options.easing, function() {
9126 transfer.remove();
9127 (o.callback && o.callback.apply(elem[0], arguments));
9128 elem.dequeue();
9129 });
9130 });
9131};
9132
9133})(jQuery);
diff --git a/static/development-bundle/ui/ui.accordion.js b/static/development-bundle/ui/ui.accordion.js
new file mode 100644
index 0000000..e469c3a
--- /dev/null
+++ b/static/development-bundle/ui/ui.accordion.js
@@ -0,0 +1,477 @@
1/*
2 * jQuery UI Accordion 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Accordion
9 *
10 * Depends:
11 * ui.core.js
12 */
13(function($) {
14
15$.widget("ui.accordion", {
16
17 _init: function() {
18
19 var o = this.options, self = this;
20 this.running = 0;
21
22 // if the user set the alwaysOpen option on init
23 // then we need to set the collapsible option
24 // if they set both on init, collapsible will take priority
25 if (o.collapsible == $.ui.accordion.defaults.collapsible &&
26 o.alwaysOpen != $.ui.accordion.defaults.alwaysOpen) {
27 o.collapsible = !o.alwaysOpen;
28 }
29
30 if ( o.navigation ) {
31 var current = this.element.find("a").filter(o.navigationFilter);
32 if ( current.length ) {
33 if ( current.filter(o.header).length ) {
34 this.active = current;
35 } else {
36 this.active = current.parent().parent().prev();
37 current.addClass("ui-accordion-content-active");
38 }
39 }
40 }
41
42 this.element.addClass("ui-accordion ui-widget ui-helper-reset");
43
44 // in lack of child-selectors in CSS we need to mark top-LIs in a UL-accordion for some IE-fix
45 if (this.element[0].nodeName == "UL") {
46 this.element.children("li").addClass("ui-accordion-li-fix");
47 }
48
49 this.headers = this.element.find(o.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all")
50 .bind("mouseenter.accordion", function(){ $(this).addClass('ui-state-hover'); })
51 .bind("mouseleave.accordion", function(){ $(this).removeClass('ui-state-hover'); })
52 .bind("focus.accordion", function(){ $(this).addClass('ui-state-focus'); })
53 .bind("blur.accordion", function(){ $(this).removeClass('ui-state-focus'); });
54
55 this.headers
56 .next()
57 .addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
58
59 this.active = this._findActive(this.active || o.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");
60 this.active.next().addClass('ui-accordion-content-active');
61
62 //Append icon elements
63 $("<span/>").addClass("ui-icon " + o.icons.header).prependTo(this.headers);
64 this.active.find(".ui-icon").toggleClass(o.icons.header).toggleClass(o.icons.headerSelected);
65
66 // IE7-/Win - Extra vertical space in lists fixed
67 if ($.browser.msie) {
68 this.element.find('a').css('zoom', '1');
69 }
70
71 this.resize();
72
73 //ARIA
74 this.element.attr('role','tablist');
75
76 this.headers
77 .attr('role','tab')
78 .bind('keydown', function(event) { return self._keydown(event); })
79 .next()
80 .attr('role','tabpanel');
81
82 this.headers
83 .not(this.active || "")
84 .attr('aria-expanded','false')
85 .attr("tabIndex", "-1")
86 .next()
87 .hide();
88
89 // make sure at least one header is in the tab order
90 if (!this.active.length) {
91 this.headers.eq(0).attr('tabIndex','0');
92 } else {
93 this.active
94 .attr('aria-expanded','true')
95 .attr('tabIndex', '0');
96 }
97
98 // only need links in taborder for Safari
99 if (!$.browser.safari)
100 this.headers.find('a').attr('tabIndex','-1');
101
102 if (o.event) {
103 this.headers.bind((o.event) + ".accordion", function(event) { return self._clickHandler.call(self, event, this); });
104 }
105
106 },
107
108 destroy: function() {
109 var o = this.options;
110
111 this.element
112 .removeClass("ui-accordion ui-widget ui-helper-reset")
113 .removeAttr("role")
114 .unbind('.accordion')
115 .removeData('accordion');
116
117 this.headers
118 .unbind(".accordion")
119 .removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top")
120 .removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");
121
122 this.headers.find("a").removeAttr("tabindex");
123 this.headers.children(".ui-icon").remove();
124 var contents = this.headers.next().css("display", "").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");
125 if (o.autoHeight || o.fillHeight) {
126 contents.css("height", "");
127 }
128 },
129
130 _setData: function(key, value) {
131 if(key == 'alwaysOpen') { key = 'collapsible'; value = !value; }
132 $.widget.prototype._setData.apply(this, arguments);
133 },
134
135 _keydown: function(event) {
136
137 var o = this.options, keyCode = $.ui.keyCode;
138
139 if (o.disabled || event.altKey || event.ctrlKey)
140 return;
141
142 var length = this.headers.length;
143 var currentIndex = this.headers.index(event.target);
144 var toFocus = false;
145
146 switch(event.keyCode) {
147 case keyCode.RIGHT:
148 case keyCode.DOWN:
149 toFocus = this.headers[(currentIndex + 1) % length];
150 break;
151 case keyCode.LEFT:
152 case keyCode.UP:
153 toFocus = this.headers[(currentIndex - 1 + length) % length];
154 break;
155 case keyCode.SPACE:
156 case keyCode.ENTER:
157 return this._clickHandler({ target: event.target }, event.target);
158 }
159
160 if (toFocus) {
161 $(event.target).attr('tabIndex','-1');
162 $(toFocus).attr('tabIndex','0');
163 toFocus.focus();
164 return false;
165 }
166
167 return true;
168
169 },
170
171 resize: function() {
172
173 var o = this.options, maxHeight;
174
175 if (o.fillSpace) {
176
177 if($.browser.msie) { var defOverflow = this.element.parent().css('overflow'); this.element.parent().css('overflow', 'hidden'); }
178 maxHeight = this.element.parent().height();
179 if($.browser.msie) { this.element.parent().css('overflow', defOverflow); }
180
181 this.headers.each(function() {
182 maxHeight -= $(this).outerHeight();
183 });
184
185 var maxPadding = 0;
186 this.headers.next().each(function() {
187 maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height());
188 }).height(Math.max(0, maxHeight - maxPadding))
189 .css('overflow', 'auto');
190
191 } else if ( o.autoHeight ) {
192 maxHeight = 0;
193 this.headers.next().each(function() {
194 maxHeight = Math.max(maxHeight, $(this).outerHeight());
195 }).height(maxHeight);
196 }
197
198 },
199
200 activate: function(index) {
201 // call clickHandler with custom event
202 var active = this._findActive(index)[0];
203 this._clickHandler({ target: active }, active);
204 },
205
206 _findActive: function(selector) {
207 return selector
208 ? typeof selector == "number"
209 ? this.headers.filter(":eq(" + selector + ")")
210 : this.headers.not(this.headers.not(selector))
211 : selector === false
212 ? $([])
213 : this.headers.filter(":eq(0)");
214 },
215
216 _clickHandler: function(event, target) {
217
218 var o = this.options;
219 if (o.disabled) return false;
220
221 // called only when using activate(false) to close all parts programmatically
222 if (!event.target && o.collapsible) {
223 this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all")
224 .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header);
225 this.active.next().addClass('ui-accordion-content-active');
226 var toHide = this.active.next(),
227 data = {
228 options: o,
229 newHeader: $([]),
230 oldHeader: o.active,
231 newContent: $([]),
232 oldContent: toHide
233 },
234 toShow = (this.active = $([]));
235 this._toggle(toShow, toHide, data);
236 return false;
237 }
238
239 // get the click target
240 var clicked = $(event.currentTarget || target);
241 var clickedIsActive = clicked[0] == this.active[0];
242
243 // if animations are still active, or the active header is the target, ignore click
244 if (this.running || (!o.collapsible && clickedIsActive)) {
245 return false;
246 }
247
248 // switch classes
249 this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all")
250 .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header);
251 this.active.next().addClass('ui-accordion-content-active');
252 if (!clickedIsActive) {
253 clicked.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top")
254 .find(".ui-icon").removeClass(o.icons.header).addClass(o.icons.headerSelected);
255 clicked.next().addClass('ui-accordion-content-active');
256 }
257
258 // find elements to show and hide
259 var toShow = clicked.next(),
260 toHide = this.active.next(),
261 data = {
262 options: o,
263 newHeader: clickedIsActive && o.collapsible ? $([]) : clicked,
264 oldHeader: this.active,
265 newContent: clickedIsActive && o.collapsible ? $([]) : toShow.find('> *'),
266 oldContent: toHide.find('> *')
267 },
268 down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
269
270 this.active = clickedIsActive ? $([]) : clicked;
271 this._toggle(toShow, toHide, data, clickedIsActive, down);
272
273 return false;
274
275 },
276
277 _toggle: function(toShow, toHide, data, clickedIsActive, down) {
278
279 var o = this.options, self = this;
280
281 this.toShow = toShow;
282 this.toHide = toHide;
283 this.data = data;
284
285 var complete = function() { if(!self) return; return self._completed.apply(self, arguments); };
286
287 // trigger changestart event
288 this._trigger("changestart", null, this.data);
289
290 // count elements to animate
291 this.running = toHide.size() === 0 ? toShow.size() : toHide.size();
292
293 if (o.animated) {
294
295 var animOptions = {};
296
297 if ( o.collapsible && clickedIsActive ) {
298 animOptions = {
299 toShow: $([]),
300 toHide: toHide,
301 complete: complete,
302 down: down,
303 autoHeight: o.autoHeight || o.fillSpace
304 };
305 } else {
306 animOptions = {
307 toShow: toShow,
308 toHide: toHide,
309 complete: complete,
310 down: down,
311 autoHeight: o.autoHeight || o.fillSpace
312 };
313 }
314
315 if (!o.proxied) {
316 o.proxied = o.animated;
317 }
318
319 if (!o.proxiedDuration) {
320 o.proxiedDuration = o.duration;
321 }
322
323 o.animated = $.isFunction(o.proxied) ?
324 o.proxied(animOptions) : o.proxied;
325
326 o.duration = $.isFunction(o.proxiedDuration) ?
327 o.proxiedDuration(animOptions) : o.proxiedDuration;
328
329 var animations = $.ui.accordion.animations,
330 duration = o.duration,
331 easing = o.animated;
332
333 if (!animations[easing]) {
334 animations[easing] = function(options) {
335 this.slide(options, {
336 easing: easing,
337 duration: duration || 700
338 });
339 };
340 }
341
342 animations[easing](animOptions);
343
344 } else {
345
346 if (o.collapsible && clickedIsActive) {
347 toShow.toggle();
348 } else {
349 toHide.hide();
350 toShow.show();
351 }
352
353 complete(true);
354
355 }
356
357 toHide.prev().attr('aria-expanded','false').attr("tabIndex", "-1").blur();
358 toShow.prev().attr('aria-expanded','true').attr("tabIndex", "0").focus();
359
360 },
361
362 _completed: function(cancel) {
363
364 var o = this.options;
365
366 this.running = cancel ? 0 : --this.running;
367 if (this.running) return;
368
369 if (o.clearStyle) {
370 this.toShow.add(this.toHide).css({
371 height: "",
372 overflow: ""
373 });
374 }
375
376 this._trigger('change', null, this.data);
377 }
378
379});
380
381
382$.extend($.ui.accordion, {
383 version: "1.7.2",
384 defaults: {
385 active: null,
386 alwaysOpen: true, //deprecated, use collapsible
387 animated: 'slide',
388 autoHeight: true,
389 clearStyle: false,
390 collapsible: false,
391 event: "click",
392 fillSpace: false,
393 header: "> li > :first-child,> :not(li):even",
394 icons: {
395 header: "ui-icon-triangle-1-e",
396 headerSelected: "ui-icon-triangle-1-s"
397 },
398 navigation: false,
399 navigationFilter: function() {
400 return this.href.toLowerCase() == location.href.toLowerCase();
401 }
402 },
403 animations: {
404 slide: function(options, additions) {
405 options = $.extend({
406 easing: "swing",
407 duration: 300
408 }, options, additions);
409 if ( !options.toHide.size() ) {
410 options.toShow.animate({height: "show"}, options);
411 return;
412 }
413 if ( !options.toShow.size() ) {
414 options.toHide.animate({height: "hide"}, options);
415 return;
416 }
417 var overflow = options.toShow.css('overflow'),
418 percentDone,
419 showProps = {},
420 hideProps = {},
421 fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
422 originalWidth;
423 // fix width before calculating height of hidden element
424 var s = options.toShow;
425 originalWidth = s[0].style.width;
426 s.width( parseInt(s.parent().width(),10) - parseInt(s.css("paddingLeft"),10) - parseInt(s.css("paddingRight"),10) - (parseInt(s.css("borderLeftWidth"),10) || 0) - (parseInt(s.css("borderRightWidth"),10) || 0) );
427
428 $.each(fxAttrs, function(i, prop) {
429 hideProps[prop] = 'hide';
430
431 var parts = ('' + $.css(options.toShow[0], prop)).match(/^([\d+-.]+)(.*)$/);
432 showProps[prop] = {
433 value: parts[1],
434 unit: parts[2] || 'px'
435 };
436 });
437 options.toShow.css({ height: 0, overflow: 'hidden' }).show();
438 options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate(hideProps,{
439 step: function(now, settings) {
440 // only calculate the percent when animating height
441 // IE gets very inconsistent results when animating elements
442 // with small values, which is common for padding
443 if (settings.prop == 'height') {
444 percentDone = (settings.now - settings.start) / (settings.end - settings.start);
445 }
446
447 options.toShow[0].style[settings.prop] =
448 (percentDone * showProps[settings.prop].value) + showProps[settings.prop].unit;
449 },
450 duration: options.duration,
451 easing: options.easing,
452 complete: function() {
453 if ( !options.autoHeight ) {
454 options.toShow.css("height", "");
455 }
456 options.toShow.css("width", originalWidth);
457 options.toShow.css({overflow: overflow});
458 options.complete();
459 }
460 });
461 },
462 bounceslide: function(options) {
463 this.slide(options, {
464 easing: options.down ? "easeOutBounce" : "swing",
465 duration: options.down ? 1000 : 200
466 });
467 },
468 easeslide: function(options) {
469 this.slide(options, {
470 easing: "easeinout",
471 duration: 700
472 });
473 }
474 }
475});
476
477})(jQuery);
diff --git a/static/development-bundle/ui/ui.core.js b/static/development-bundle/ui/ui.core.js
new file mode 100644
index 0000000..5493e0a
--- /dev/null
+++ b/static/development-bundle/ui/ui.core.js
@@ -0,0 +1,519 @@
1/*
2 * jQuery UI 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI
9 */
10;jQuery.ui || (function($) {
11
12var _remove = $.fn.remove,
13 isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);
14
15//Helper functions and ui object
16$.ui = {
17 version: "1.7.2",
18
19 // $.ui.plugin is deprecated. Use the proxy pattern instead.
20 plugin: {
21 add: function(module, option, set) {
22 var proto = $.ui[module].prototype;
23 for(var i in set) {
24 proto.plugins[i] = proto.plugins[i] || [];
25 proto.plugins[i].push([option, set[i]]);
26 }
27 },
28 call: function(instance, name, args) {
29 var set = instance.plugins[name];
30 if(!set || !instance.element[0].parentNode) { return; }
31
32 for (var i = 0; i < set.length; i++) {
33 if (instance.options[set[i][0]]) {
34 set[i][1].apply(instance.element, args);
35 }
36 }
37 }
38 },
39
40 contains: function(a, b) {
41 return document.compareDocumentPosition
42 ? a.compareDocumentPosition(b) & 16
43 : a !== b && a.contains(b);
44 },
45
46 hasScroll: function(el, a) {
47
48 //If overflow is hidden, the element might have extra content, but the user wants to hide it
49 if ($(el).css('overflow') == 'hidden') { return false; }
50
51 var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',
52 has = false;
53
54 if (el[scroll] > 0) { return true; }
55
56 // TODO: determine which cases actually cause this to happen
57 // if the element doesn't have the scroll set, see if it's possible to
58 // set the scroll
59 el[scroll] = 1;
60 has = (el[scroll] > 0);
61 el[scroll] = 0;
62 return has;
63 },
64
65 isOverAxis: function(x, reference, size) {
66 //Determines when x coordinate is over "b" element axis
67 return (x > reference) && (x < (reference + size));
68 },
69
70 isOver: function(y, x, top, left, height, width) {
71 //Determines when x, y coordinates is over "b" element
72 return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);
73 },
74
75 keyCode: {
76 BACKSPACE: 8,
77 CAPS_LOCK: 20,
78 COMMA: 188,
79 CONTROL: 17,
80 DELETE: 46,
81 DOWN: 40,
82 END: 35,
83 ENTER: 13,
84 ESCAPE: 27,
85 HOME: 36,
86 INSERT: 45,
87 LEFT: 37,
88 NUMPAD_ADD: 107,
89 NUMPAD_DECIMAL: 110,
90 NUMPAD_DIVIDE: 111,
91 NUMPAD_ENTER: 108,
92 NUMPAD_MULTIPLY: 106,
93 NUMPAD_SUBTRACT: 109,
94 PAGE_DOWN: 34,
95 PAGE_UP: 33,
96 PERIOD: 190,
97 RIGHT: 39,
98 SHIFT: 16,
99 SPACE: 32,
100 TAB: 9,
101 UP: 38
102 }
103};
104
105// WAI-ARIA normalization
106if (isFF2) {
107 var attr = $.attr,
108 removeAttr = $.fn.removeAttr,
109 ariaNS = "http://www.w3.org/2005/07/aaa",
110 ariaState = /^aria-/,
111 ariaRole = /^wairole:/;
112
113 $.attr = function(elem, name, value) {
114 var set = value !== undefined;
115
116 return (name == 'role'
117 ? (set
118 ? attr.call(this, elem, name, "wairole:" + value)
119 : (attr.apply(this, arguments) || "").replace(ariaRole, ""))
120 : (ariaState.test(name)
121 ? (set
122 ? elem.setAttributeNS(ariaNS,
123 name.replace(ariaState, "aaa:"), value)
124 : attr.call(this, elem, name.replace(ariaState, "aaa:")))
125 : attr.apply(this, arguments)));
126 };
127
128 $.fn.removeAttr = function(name) {
129 return (ariaState.test(name)
130 ? this.each(function() {
131 this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));
132 }) : removeAttr.call(this, name));
133 };
134}
135
136//jQuery plugins
137$.fn.extend({
138 remove: function() {
139 // Safari has a native remove event which actually removes DOM elements,
140 // so we have to use triggerHandler instead of trigger (#3037).
141 $("*", this).add(this).each(function() {
142 $(this).triggerHandler("remove");
143 });
144 return _remove.apply(this, arguments );
145 },
146
147 enableSelection: function() {
148 return this
149 .attr('unselectable', 'off')
150 .css('MozUserSelect', '')
151 .unbind('selectstart.ui');
152 },
153
154 disableSelection: function() {
155 return this
156 .attr('unselectable', 'on')
157 .css('MozUserSelect', 'none')
158 .bind('selectstart.ui', function() { return false; });
159 },
160
161 scrollParent: function() {
162 var scrollParent;
163 if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
164 scrollParent = this.parents().filter(function() {
165 return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
166 }).eq(0);
167 } else {
168 scrollParent = this.parents().filter(function() {
169 return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
170 }).eq(0);
171 }
172
173 return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
174 }
175});
176
177
178//Additional selectors
179$.extend($.expr[':'], {
180 data: function(elem, i, match) {
181 return !!$.data(elem, match[3]);
182 },
183
184 focusable: function(element) {
185 var nodeName = element.nodeName.toLowerCase(),
186 tabIndex = $.attr(element, 'tabindex');
187 return (/input|select|textarea|button|object/.test(nodeName)
188 ? !element.disabled
189 : 'a' == nodeName || 'area' == nodeName
190 ? element.href || !isNaN(tabIndex)
191 : !isNaN(tabIndex))
192 // the element and all of its ancestors must be visible
193 // the browser may report that the area is hidden
194 && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length;
195 },
196
197 tabbable: function(element) {
198 var tabIndex = $.attr(element, 'tabindex');
199 return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');
200 }
201});
202
203
204// $.widget is a factory to create jQuery plugins
205// taking some boilerplate code out of the plugin code
206function getter(namespace, plugin, method, args) {
207 function getMethods(type) {
208 var methods = $[namespace][plugin][type] || [];
209 return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);
210 }
211
212 var methods = getMethods('getter');
213 if (args.length == 1 && typeof args[0] == 'string') {
214 methods = methods.concat(getMethods('getterSetter'));
215 }
216 return ($.inArray(method, methods) != -1);
217}
218
219$.widget = function(name, prototype) {
220 var namespace = name.split(".")[0];
221 name = name.split(".")[1];
222
223 // create plugin method
224 $.fn[name] = function(options) {
225 var isMethodCall = (typeof options == 'string'),
226 args = Array.prototype.slice.call(arguments, 1);
227
228 // prevent calls to internal methods
229 if (isMethodCall && options.substring(0, 1) == '_') {
230 return this;
231 }
232
233 // handle getter methods
234 if (isMethodCall && getter(namespace, name, options, args)) {
235 var instance = $.data(this[0], name);
236 return (instance ? instance[options].apply(instance, args)
237 : undefined);
238 }
239
240 // handle initialization and non-getter methods
241 return this.each(function() {
242 var instance = $.data(this, name);
243
244 // constructor
245 (!instance && !isMethodCall &&
246 $.data(this, name, new $[namespace][name](this, options))._init());
247
248 // method call
249 (instance && isMethodCall && $.isFunction(instance[options]) &&
250 instance[options].apply(instance, args));
251 });
252 };
253
254 // create widget constructor
255 $[namespace] = $[namespace] || {};
256 $[namespace][name] = function(element, options) {
257 var self = this;
258
259 this.namespace = namespace;
260 this.widgetName = name;
261 this.widgetEventPrefix = $[namespace][name].eventPrefix || name;
262 this.widgetBaseClass = namespace + '-' + name;
263
264 this.options = $.extend({},
265 $.widget.defaults,
266 $[namespace][name].defaults,
267 $.metadata && $.metadata.get(element)[name],
268 options);
269
270 this.element = $(element)
271 .bind('setData.' + name, function(event, key, value) {
272 if (event.target == element) {
273 return self._setData(key, value);
274 }
275 })
276 .bind('getData.' + name, function(event, key) {
277 if (event.target == element) {
278 return self._getData(key);
279 }
280 })
281 .bind('remove', function() {
282 return self.destroy();
283 });
284 };
285
286 // add widget prototype
287 $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);
288
289 // TODO: merge getter and getterSetter properties from widget prototype
290 // and plugin prototype
291 $[namespace][name].getterSetter = 'option';
292};
293
294$.widget.prototype = {
295 _init: function() {},
296 destroy: function() {
297 this.element.removeData(this.widgetName)
298 .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')
299 .removeAttr('aria-disabled');
300 },
301
302 option: function(key, value) {
303 var options = key,
304 self = this;
305
306 if (typeof key == "string") {
307 if (value === undefined) {
308 return this._getData(key);
309 }
310 options = {};
311 options[key] = value;
312 }
313
314 $.each(options, function(key, value) {
315 self._setData(key, value);
316 });
317 },
318 _getData: function(key) {
319 return this.options[key];
320 },
321 _setData: function(key, value) {
322 this.options[key] = value;
323
324 if (key == 'disabled') {
325 this.element
326 [value ? 'addClass' : 'removeClass'](
327 this.widgetBaseClass + '-disabled' + ' ' +
328 this.namespace + '-state-disabled')
329 .attr("aria-disabled", value);
330 }
331 },
332
333 enable: function() {
334 this._setData('disabled', false);
335 },
336 disable: function() {
337 this._setData('disabled', true);
338 },
339
340 _trigger: function(type, event, data) {
341 var callback = this.options[type],
342 eventName = (type == this.widgetEventPrefix
343 ? type : this.widgetEventPrefix + type);
344
345 event = $.Event(event);
346 event.type = eventName;
347
348 // copy original event properties over to the new event
349 // this would happen if we could call $.event.fix instead of $.Event
350 // but we don't have a way to force an event to be fixed multiple times
351 if (event.originalEvent) {
352 for (var i = $.event.props.length, prop; i;) {
353 prop = $.event.props[--i];
354 event[prop] = event.originalEvent[prop];
355 }
356 }
357
358 this.element.trigger(event, data);
359
360 return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false
361 || event.isDefaultPrevented());
362 }
363};
364
365$.widget.defaults = {
366 disabled: false
367};
368
369
370/** Mouse Interaction Plugin **/
371
372$.ui.mouse = {
373 _mouseInit: function() {
374 var self = this;
375
376 this.element
377 .bind('mousedown.'+this.widgetName, function(event) {
378 return self._mouseDown(event);
379 })
380 .bind('click.'+this.widgetName, function(event) {
381 if(self._preventClickEvent) {
382 self._preventClickEvent = false;
383 event.stopImmediatePropagation();
384 return false;
385 }
386 });
387
388 // Prevent text selection in IE
389 if ($.browser.msie) {
390 this._mouseUnselectable = this.element.attr('unselectable');
391 this.element.attr('unselectable', 'on');
392 }
393
394 this.started = false;
395 },
396
397 // TODO: make sure destroying one instance of mouse doesn't mess with
398 // other instances of mouse
399 _mouseDestroy: function() {
400 this.element.unbind('.'+this.widgetName);
401
402 // Restore text selection in IE
403 ($.browser.msie
404 && this.element.attr('unselectable', this._mouseUnselectable));
405 },
406
407 _mouseDown: function(event) {
408 // don't let more than one widget handle mouseStart
409 // TODO: figure out why we have to use originalEvent
410 event.originalEvent = event.originalEvent || {};
411 if (event.originalEvent.mouseHandled) { return; }
412
413 // we may have missed mouseup (out of window)
414 (this._mouseStarted && this._mouseUp(event));
415
416 this._mouseDownEvent = event;
417
418 var self = this,
419 btnIsLeft = (event.which == 1),
420 elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
421 if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
422 return true;
423 }
424
425 this.mouseDelayMet = !this.options.delay;
426 if (!this.mouseDelayMet) {
427 this._mouseDelayTimer = setTimeout(function() {
428 self.mouseDelayMet = true;
429 }, this.options.delay);
430 }
431
432 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
433 this._mouseStarted = (this._mouseStart(event) !== false);
434 if (!this._mouseStarted) {
435 event.preventDefault();
436 return true;
437 }
438 }
439
440 // these delegates are required to keep context
441 this._mouseMoveDelegate = function(event) {
442 return self._mouseMove(event);
443 };
444 this._mouseUpDelegate = function(event) {
445 return self._mouseUp(event);
446 };
447 $(document)
448 .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
449 .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
450
451 // preventDefault() is used to prevent the selection of text here -
452 // however, in Safari, this causes select boxes not to be selectable
453 // anymore, so this fix is needed
454 ($.browser.safari || event.preventDefault());
455
456 event.originalEvent.mouseHandled = true;
457 return true;
458 },
459
460 _mouseMove: function(event) {
461 // IE mouseup check - mouseup happened when mouse was out of window
462 if ($.browser.msie && !event.button) {
463 return this._mouseUp(event);
464 }
465
466 if (this._mouseStarted) {
467 this._mouseDrag(event);
468 return event.preventDefault();
469 }
470
471 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
472 this._mouseStarted =
473 (this._mouseStart(this._mouseDownEvent, event) !== false);
474 (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
475 }
476
477 return !this._mouseStarted;
478 },
479
480 _mouseUp: function(event) {
481 $(document)
482 .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
483 .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
484
485 if (this._mouseStarted) {
486 this._mouseStarted = false;
487 this._preventClickEvent = (event.target == this._mouseDownEvent.target);
488 this._mouseStop(event);
489 }
490
491 return false;
492 },
493
494 _mouseDistanceMet: function(event) {
495 return (Math.max(
496 Math.abs(this._mouseDownEvent.pageX - event.pageX),
497 Math.abs(this._mouseDownEvent.pageY - event.pageY)
498 ) >= this.options.distance
499 );
500 },
501
502 _mouseDelayMet: function(event) {
503 return this.mouseDelayMet;
504 },
505
506 // These are placeholder methods, to be overriden by extending plugin
507 _mouseStart: function(event) {},
508 _mouseDrag: function(event) {},
509 _mouseStop: function(event) {},
510 _mouseCapture: function(event) { return true; }
511};
512
513$.ui.mouse.defaults = {
514 cancel: null,
515 distance: 1,
516 delay: 0
517};
518
519})(jQuery);
diff --git a/static/development-bundle/ui/ui.datepicker.js b/static/development-bundle/ui/ui.datepicker.js
new file mode 100644
index 0000000..0ce166e
--- /dev/null
+++ b/static/development-bundle/ui/ui.datepicker.js
@@ -0,0 +1,1636 @@
1/*
2 * jQuery UI Datepicker 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Datepicker
9 *
10 * Depends:
11 * ui.core.js
12 */
13
14(function($) { // hide the namespace
15
16$.extend($.ui, { datepicker: { version: "1.7.2" } });
17
18var PROP_NAME = 'datepicker';
19
20/* Date picker manager.
21 Use the singleton instance of this class, $.datepicker, to interact with the date picker.
22 Settings for (groups of) date pickers are maintained in an instance object,
23 allowing multiple different settings on the same page. */
24
25function Datepicker() {
26 this.debug = false; // Change this to true to start debugging
27 this._curInst = null; // The current instance in use
28 this._keyEvent = false; // If the last event was a key event
29 this._disabledInputs = []; // List of date picker inputs that have been disabled
30 this._datepickerShowing = false; // True if the popup picker is showing , false if not
31 this._inDialog = false; // True if showing within a "dialog", false if not
32 this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
33 this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
34 this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
35 this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
36 this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
37 this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
38 this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
39 this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
40 this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
41 this.regional = []; // Available regional settings, indexed by language code
42 this.regional[''] = { // Default regional settings
43 closeText: 'Done', // Display text for close link
44 prevText: 'Prev', // Display text for previous month link
45 nextText: 'Next', // Display text for next month link
46 currentText: 'Today', // Display text for current month link
47 monthNames: ['January','February','March','April','May','June',
48 'July','August','September','October','November','December'], // Names of months for drop-down and formatting
49 monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
50 dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
51 dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
52 dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
53 dateFormat: 'mm/dd/yy', // See format options on parseDate
54 firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
55 isRTL: false // True if right-to-left language, false if left-to-right
56 };
57 this._defaults = { // Global defaults for all the date picker instances
58 showOn: 'focus', // 'focus' for popup on focus,
59 // 'button' for trigger button, or 'both' for either
60 showAnim: 'show', // Name of jQuery animation for popup
61 showOptions: {}, // Options for enhanced animations
62 defaultDate: null, // Used when field is blank: actual date,
63 // +/-number for offset from today, null for today
64 appendText: '', // Display text following the input box, e.g. showing the format
65 buttonText: '...', // Text for trigger button
66 buttonImage: '', // URL for trigger button image
67 buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
68 hideIfNoPrevNext: false, // True to hide next/previous month links
69 // if not applicable, false to just disable them
70 navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
71 gotoCurrent: false, // True if today link goes back to current selection instead
72 changeMonth: false, // True if month can be selected directly, false if only prev/next
73 changeYear: false, // True if year can be selected directly, false if only prev/next
74 showMonthAfterYear: false, // True if the year select precedes month, false for month then year
75 yearRange: '-10:+10', // Range of years to display in drop-down,
76 // either relative to current year (-nn:+nn) or absolute (nnnn:nnnn)
77 showOtherMonths: false, // True to show dates in other months, false to leave blank
78 calculateWeek: this.iso8601Week, // How to calculate the week of the year,
79 // takes a Date and returns the number of the week for it
80 shortYearCutoff: '+10', // Short year values < this are in the current century,
81 // > this are in the previous century,
82 // string value starting with '+' for current year + value
83 minDate: null, // The earliest selectable date, or null for no limit
84 maxDate: null, // The latest selectable date, or null for no limit
85 duration: 'normal', // Duration of display/closure
86 beforeShowDay: null, // Function that takes a date and returns an array with
87 // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
88 // [2] = cell title (optional), e.g. $.datepicker.noWeekends
89 beforeShow: null, // Function that takes an input field and
90 // returns a set of custom settings for the date picker
91 onSelect: null, // Define a callback function when a date is selected
92 onChangeMonthYear: null, // Define a callback function when the month or year is changed
93 onClose: null, // Define a callback function when the datepicker is closed
94 numberOfMonths: 1, // Number of months to show at a time
95 showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
96 stepMonths: 1, // Number of months to step back/forward
97 stepBigMonths: 12, // Number of months to step back/forward for the big links
98 altField: '', // Selector for an alternate field to store selected dates into
99 altFormat: '', // The date format to use for the alternate field
100 constrainInput: true, // The input is constrained by the current date format
101 showButtonPanel: false // True to show button panel, false to not show it
102 };
103 $.extend(this._defaults, this.regional['']);
104 this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');
105}
106
107$.extend(Datepicker.prototype, {
108 /* Class name added to elements to indicate already configured with a date picker. */
109 markerClassName: 'hasDatepicker',
110
111 /* Debug logging (if enabled). */
112 log: function () {
113 if (this.debug)
114 console.log.apply('', arguments);
115 },
116
117 /* Override the default settings for all instances of the date picker.
118 @param settings object - the new settings to use as defaults (anonymous object)
119 @return the manager object */
120 setDefaults: function(settings) {
121 extendRemove(this._defaults, settings || {});
122 return this;
123 },
124
125 /* Attach the date picker to a jQuery selection.
126 @param target element - the target input field or division or span
127 @param settings object - the new settings to use for this date picker instance (anonymous) */
128 _attachDatepicker: function(target, settings) {
129 // check for settings on the control itself - in namespace 'date:'
130 var inlineSettings = null;
131 for (var attrName in this._defaults) {
132 var attrValue = target.getAttribute('date:' + attrName);
133 if (attrValue) {
134 inlineSettings = inlineSettings || {};
135 try {
136 inlineSettings[attrName] = eval(attrValue);
137 } catch (err) {
138 inlineSettings[attrName] = attrValue;
139 }
140 }
141 }
142 var nodeName = target.nodeName.toLowerCase();
143 var inline = (nodeName == 'div' || nodeName == 'span');
144 if (!target.id)
145 target.id = 'dp' + (++this.uuid);
146 var inst = this._newInst($(target), inline);
147 inst.settings = $.extend({}, settings || {}, inlineSettings || {});
148 if (nodeName == 'input') {
149 this._connectDatepicker(target, inst);
150 } else if (inline) {
151 this._inlineDatepicker(target, inst);
152 }
153 },
154
155 /* Create a new instance object. */
156 _newInst: function(target, inline) {
157 var id = target[0].id.replace(/([:\[\]\.])/g, '\\\\$1'); // escape jQuery meta chars
158 return {id: id, input: target, // associated target
159 selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
160 drawMonth: 0, drawYear: 0, // month being drawn
161 inline: inline, // is datepicker inline or not
162 dpDiv: (!inline ? this.dpDiv : // presentation div
163 $('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};
164 },
165
166 /* Attach the date picker to an input field. */
167 _connectDatepicker: function(target, inst) {
168 var input = $(target);
169 inst.append = $([]);
170 inst.trigger = $([]);
171 if (input.hasClass(this.markerClassName))
172 return;
173 var appendText = this._get(inst, 'appendText');
174 var isRTL = this._get(inst, 'isRTL');
175 if (appendText) {
176 inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
177 input[isRTL ? 'before' : 'after'](inst.append);
178 }
179 var showOn = this._get(inst, 'showOn');
180 if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
181 input.focus(this._showDatepicker);
182 if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
183 var buttonText = this._get(inst, 'buttonText');
184 var buttonImage = this._get(inst, 'buttonImage');
185 inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
186 $('<img/>').addClass(this._triggerClass).
187 attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
188 $('<button type="button"></button>').addClass(this._triggerClass).
189 html(buttonImage == '' ? buttonText : $('<img/>').attr(
190 { src:buttonImage, alt:buttonText, title:buttonText })));
191 input[isRTL ? 'before' : 'after'](inst.trigger);
192 inst.trigger.click(function() {
193 if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target)
194 $.datepicker._hideDatepicker();
195 else
196 $.datepicker._showDatepicker(target);
197 return false;
198 });
199 }
200 input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).
201 bind("setData.datepicker", function(event, key, value) {
202 inst.settings[key] = value;
203 }).bind("getData.datepicker", function(event, key) {
204 return this._get(inst, key);
205 });
206 $.data(target, PROP_NAME, inst);
207 },
208
209 /* Attach an inline date picker to a div. */
210 _inlineDatepicker: function(target, inst) {
211 var divSpan = $(target);
212 if (divSpan.hasClass(this.markerClassName))
213 return;
214 divSpan.addClass(this.markerClassName).append(inst.dpDiv).
215 bind("setData.datepicker", function(event, key, value){
216 inst.settings[key] = value;
217 }).bind("getData.datepicker", function(event, key){
218 return this._get(inst, key);
219 });
220 $.data(target, PROP_NAME, inst);
221 this._setDate(inst, this._getDefaultDate(inst));
222 this._updateDatepicker(inst);
223 this._updateAlternate(inst);
224 },
225
226 /* Pop-up the date picker in a "dialog" box.
227 @param input element - ignored
228 @param dateText string - the initial date to display (in the current format)
229 @param onSelect function - the function(dateText) to call when a date is selected
230 @param settings object - update the dialog date picker instance's settings (anonymous object)
231 @param pos int[2] - coordinates for the dialog's position within the screen or
232 event - with x/y coordinates or
233 leave empty for default (screen centre)
234 @return the manager object */
235 _dialogDatepicker: function(input, dateText, onSelect, settings, pos) {
236 var inst = this._dialogInst; // internal instance
237 if (!inst) {
238 var id = 'dp' + (++this.uuid);
239 this._dialogInput = $('<input type="text" id="' + id +
240 '" size="1" style="position: absolute; top: -100px;"/>');
241 this._dialogInput.keydown(this._doKeyDown);
242 $('body').append(this._dialogInput);
243 inst = this._dialogInst = this._newInst(this._dialogInput, false);
244 inst.settings = {};
245 $.data(this._dialogInput[0], PROP_NAME, inst);
246 }
247 extendRemove(inst.settings, settings || {});
248 this._dialogInput.val(dateText);
249
250 this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
251 if (!this._pos) {
252 var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
253 var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
254 var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
255 var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
256 this._pos = // should use actual width/height below
257 [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
258 }
259
260 // move input on screen for focus, but hidden behind dialog
261 this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px');
262 inst.settings.onSelect = onSelect;
263 this._inDialog = true;
264 this.dpDiv.addClass(this._dialogClass);
265 this._showDatepicker(this._dialogInput[0]);
266 if ($.blockUI)
267 $.blockUI(this.dpDiv);
268 $.data(this._dialogInput[0], PROP_NAME, inst);
269 return this;
270 },
271
272 /* Detach a datepicker from its control.
273 @param target element - the target input field or division or span */
274 _destroyDatepicker: function(target) {
275 var $target = $(target);
276 var inst = $.data(target, PROP_NAME);
277 if (!$target.hasClass(this.markerClassName)) {
278 return;
279 }
280 var nodeName = target.nodeName.toLowerCase();
281 $.removeData(target, PROP_NAME);
282 if (nodeName == 'input') {
283 inst.append.remove();
284 inst.trigger.remove();
285 $target.removeClass(this.markerClassName).
286 unbind('focus', this._showDatepicker).
287 unbind('keydown', this._doKeyDown).
288 unbind('keypress', this._doKeyPress);
289 } else if (nodeName == 'div' || nodeName == 'span')
290 $target.removeClass(this.markerClassName).empty();
291 },
292
293 /* Enable the date picker to a jQuery selection.
294 @param target element - the target input field or division or span */
295 _enableDatepicker: function(target) {
296 var $target = $(target);
297 var inst = $.data(target, PROP_NAME);
298 if (!$target.hasClass(this.markerClassName)) {
299 return;
300 }
301 var nodeName = target.nodeName.toLowerCase();
302 if (nodeName == 'input') {
303 target.disabled = false;
304 inst.trigger.filter('button').
305 each(function() { this.disabled = false; }).end().
306 filter('img').css({opacity: '1.0', cursor: ''});
307 }
308 else if (nodeName == 'div' || nodeName == 'span') {
309 var inline = $target.children('.' + this._inlineClass);
310 inline.children().removeClass('ui-state-disabled');
311 }
312 this._disabledInputs = $.map(this._disabledInputs,
313 function(value) { return (value == target ? null : value); }); // delete entry
314 },
315
316 /* Disable the date picker to a jQuery selection.
317 @param target element - the target input field or division or span */
318 _disableDatepicker: function(target) {
319 var $target = $(target);
320 var inst = $.data(target, PROP_NAME);
321 if (!$target.hasClass(this.markerClassName)) {
322 return;
323 }
324 var nodeName = target.nodeName.toLowerCase();
325 if (nodeName == 'input') {
326 target.disabled = true;
327 inst.trigger.filter('button').
328 each(function() { this.disabled = true; }).end().
329 filter('img').css({opacity: '0.5', cursor: 'default'});
330 }
331 else if (nodeName == 'div' || nodeName == 'span') {
332 var inline = $target.children('.' + this._inlineClass);
333 inline.children().addClass('ui-state-disabled');
334 }
335 this._disabledInputs = $.map(this._disabledInputs,
336 function(value) { return (value == target ? null : value); }); // delete entry
337 this._disabledInputs[this._disabledInputs.length] = target;
338 },
339
340 /* Is the first field in a jQuery collection disabled as a datepicker?
341 @param target element - the target input field or division or span
342 @return boolean - true if disabled, false if enabled */
343 _isDisabledDatepicker: function(target) {
344 if (!target) {
345 return false;
346 }
347 for (var i = 0; i < this._disabledInputs.length; i++) {
348 if (this._disabledInputs[i] == target)
349 return true;
350 }
351 return false;
352 },
353
354 /* Retrieve the instance data for the target control.
355 @param target element - the target input field or division or span
356 @return object - the associated instance data
357 @throws error if a jQuery problem getting data */
358 _getInst: function(target) {
359 try {
360 return $.data(target, PROP_NAME);
361 }
362 catch (err) {
363 throw 'Missing instance data for this datepicker';
364 }
365 },
366
367 /* Update or retrieve the settings for a date picker attached to an input field or division.
368 @param target element - the target input field or division or span
369 @param name object - the new settings to update or
370 string - the name of the setting to change or retrieve,
371 when retrieving also 'all' for all instance settings or
372 'defaults' for all global defaults
373 @param value any - the new value for the setting
374 (omit if above is an object or to retrieve a value) */
375 _optionDatepicker: function(target, name, value) {
376 var inst = this._getInst(target);
377 if (arguments.length == 2 && typeof name == 'string') {
378 return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
379 (inst ? (name == 'all' ? $.extend({}, inst.settings) :
380 this._get(inst, name)) : null));
381 }
382 var settings = name || {};
383 if (typeof name == 'string') {
384 settings = {};
385 settings[name] = value;
386 }
387 if (inst) {
388 if (this._curInst == inst) {
389 this._hideDatepicker(null);
390 }
391 var date = this._getDateDatepicker(target);
392 extendRemove(inst.settings, settings);
393 this._setDateDatepicker(target, date);
394 this._updateDatepicker(inst);
395 }
396 },
397
398 // change method deprecated
399 _changeDatepicker: function(target, name, value) {
400 this._optionDatepicker(target, name, value);
401 },
402
403 /* Redraw the date picker attached to an input field or division.
404 @param target element - the target input field or division or span */
405 _refreshDatepicker: function(target) {
406 var inst = this._getInst(target);
407 if (inst) {
408 this._updateDatepicker(inst);
409 }
410 },
411
412 /* Set the dates for a jQuery selection.
413 @param target element - the target input field or division or span
414 @param date Date - the new date
415 @param endDate Date - the new end date for a range (optional) */
416 _setDateDatepicker: function(target, date, endDate) {
417 var inst = this._getInst(target);
418 if (inst) {
419 this._setDate(inst, date, endDate);
420 this._updateDatepicker(inst);
421 this._updateAlternate(inst);
422 }
423 },
424
425 /* Get the date(s) for the first entry in a jQuery selection.
426 @param target element - the target input field or division or span
427 @return Date - the current date or
428 Date[2] - the current dates for a range */
429 _getDateDatepicker: function(target) {
430 var inst = this._getInst(target);
431 if (inst && !inst.inline)
432 this._setDateFromField(inst);
433 return (inst ? this._getDate(inst) : null);
434 },
435
436 /* Handle keystrokes. */
437 _doKeyDown: function(event) {
438 var inst = $.datepicker._getInst(event.target);
439 var handled = true;
440 var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
441 inst._keyEvent = true;
442 if ($.datepicker._datepickerShowing)
443 switch (event.keyCode) {
444 case 9: $.datepicker._hideDatepicker(null, '');
445 break; // hide on tab out
446 case 13: var sel = $('td.' + $.datepicker._dayOverClass +
447 ', td.' + $.datepicker._currentClass, inst.dpDiv);
448 if (sel[0])
449 $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
450 else
451 $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
452 return false; // don't submit the form
453 break; // select the value on enter
454 case 27: $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
455 break; // hide on escape
456 case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
457 -$.datepicker._get(inst, 'stepBigMonths') :
458 -$.datepicker._get(inst, 'stepMonths')), 'M');
459 break; // previous month/year on page up/+ ctrl
460 case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
461 +$.datepicker._get(inst, 'stepBigMonths') :
462 +$.datepicker._get(inst, 'stepMonths')), 'M');
463 break; // next month/year on page down/+ ctrl
464 case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
465 handled = event.ctrlKey || event.metaKey;
466 break; // clear on ctrl or command +end
467 case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
468 handled = event.ctrlKey || event.metaKey;
469 break; // current on ctrl or command +home
470 case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
471 handled = event.ctrlKey || event.metaKey;
472 // -1 day on ctrl or command +left
473 if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
474 -$.datepicker._get(inst, 'stepBigMonths') :
475 -$.datepicker._get(inst, 'stepMonths')), 'M');
476 // next month/year on alt +left on Mac
477 break;
478 case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
479 handled = event.ctrlKey || event.metaKey;
480 break; // -1 week on ctrl or command +up
481 case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
482 handled = event.ctrlKey || event.metaKey;
483 // +1 day on ctrl or command +right
484 if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
485 +$.datepicker._get(inst, 'stepBigMonths') :
486 +$.datepicker._get(inst, 'stepMonths')), 'M');
487 // next month/year on alt +right
488 break;
489 case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
490 handled = event.ctrlKey || event.metaKey;
491 break; // +1 week on ctrl or command +down
492 default: handled = false;
493 }
494 else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
495 $.datepicker._showDatepicker(this);
496 else {
497 handled = false;
498 }
499 if (handled) {
500 event.preventDefault();
501 event.stopPropagation();
502 }
503 },
504
505 /* Filter entered characters - based on date format. */
506 _doKeyPress: function(event) {
507 var inst = $.datepicker._getInst(event.target);
508 if ($.datepicker._get(inst, 'constrainInput')) {
509 var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
510 var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
511 return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
512 }
513 },
514
515 /* Pop-up the date picker for a given input field.
516 @param input element - the input field attached to the date picker or
517 event - if triggered by focus */
518 _showDatepicker: function(input) {
519 input = input.target || input;
520 if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
521 input = $('input', input.parentNode)[0];
522 if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
523 return;
524 var inst = $.datepicker._getInst(input);
525 var beforeShow = $.datepicker._get(inst, 'beforeShow');
526 extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
527 $.datepicker._hideDatepicker(null, '');
528 $.datepicker._lastInput = input;
529 $.datepicker._setDateFromField(inst);
530 if ($.datepicker._inDialog) // hide cursor
531 input.value = '';
532 if (!$.datepicker._pos) { // position below input
533 $.datepicker._pos = $.datepicker._findPos(input);
534 $.datepicker._pos[1] += input.offsetHeight; // add the height
535 }
536 var isFixed = false;
537 $(input).parents().each(function() {
538 isFixed |= $(this).css('position') == 'fixed';
539 return !isFixed;
540 });
541 if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
542 $.datepicker._pos[0] -= document.documentElement.scrollLeft;
543 $.datepicker._pos[1] -= document.documentElement.scrollTop;
544 }
545 var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
546 $.datepicker._pos = null;
547 inst.rangeStart = null;
548 // determine sizing offscreen
549 inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
550 $.datepicker._updateDatepicker(inst);
551 // fix width for dynamic number of date pickers
552 // and adjust position before showing
553 offset = $.datepicker._checkOffset(inst, offset, isFixed);
554 inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
555 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
556 left: offset.left + 'px', top: offset.top + 'px'});
557 if (!inst.inline) {
558 var showAnim = $.datepicker._get(inst, 'showAnim') || 'show';
559 var duration = $.datepicker._get(inst, 'duration');
560 var postProcess = function() {
561 $.datepicker._datepickerShowing = true;
562 if ($.browser.msie && parseInt($.browser.version,10) < 7) // fix IE < 7 select problems
563 $('iframe.ui-datepicker-cover').css({width: inst.dpDiv.width() + 4,
564 height: inst.dpDiv.height() + 4});
565 };
566 if ($.effects && $.effects[showAnim])
567 inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
568 else
569 inst.dpDiv[showAnim](duration, postProcess);
570 if (duration == '')
571 postProcess();
572 if (inst.input[0].type != 'hidden')
573 inst.input[0].focus();
574 $.datepicker._curInst = inst;
575 }
576 },
577
578 /* Generate the date picker content. */
579 _updateDatepicker: function(inst) {
580 var dims = {width: inst.dpDiv.width() + 4,
581 height: inst.dpDiv.height() + 4};
582 var self = this;
583 inst.dpDiv.empty().append(this._generateHTML(inst))
584 .find('iframe.ui-datepicker-cover').
585 css({width: dims.width, height: dims.height})
586 .end()
587 .find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
588 .bind('mouseout', function(){
589 $(this).removeClass('ui-state-hover');
590 if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
591 if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover');
592 })
593 .bind('mouseover', function(){
594 if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) {
595 $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
596 $(this).addClass('ui-state-hover');
597 if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover');
598 if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover');
599 }
600 })
601 .end()
602 .find('.' + this._dayOverClass + ' a')
603 .trigger('mouseover')
604 .end();
605 var numMonths = this._getNumberOfMonths(inst);
606 var cols = numMonths[1];
607 var width = 17;
608 if (cols > 1) {
609 inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
610 } else {
611 inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
612 }
613 inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
614 'Class']('ui-datepicker-multi');
615 inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
616 'Class']('ui-datepicker-rtl');
617 if (inst.input && inst.input[0].type != 'hidden' && inst == $.datepicker._curInst)
618 $(inst.input[0]).focus();
619 },
620
621 /* Check positioning to remain on screen. */
622 _checkOffset: function(inst, offset, isFixed) {
623 var dpWidth = inst.dpDiv.outerWidth();
624 var dpHeight = inst.dpDiv.outerHeight();
625 var inputWidth = inst.input ? inst.input.outerWidth() : 0;
626 var inputHeight = inst.input ? inst.input.outerHeight() : 0;
627 var viewWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) + $(document).scrollLeft();
628 var viewHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) + $(document).scrollTop();
629
630 offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
631 offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
632 offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
633
634 // now check if datepicker is showing outside window viewport - move to a better place if so.
635 offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0;
636 offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight*2 - viewHeight) : 0;
637
638 return offset;
639 },
640
641 /* Find an object's position on the screen. */
642 _findPos: function(obj) {
643 while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {
644 obj = obj.nextSibling;
645 }
646 var position = $(obj).offset();
647 return [position.left, position.top];
648 },
649
650 /* Hide the date picker from view.
651 @param input element - the input field attached to the date picker
652 @param duration string - the duration over which to close the date picker */
653 _hideDatepicker: function(input, duration) {
654 var inst = this._curInst;
655 if (!inst || (input && inst != $.data(input, PROP_NAME)))
656 return;
657 if (inst.stayOpen)
658 this._selectDate('#' + inst.id, this._formatDate(inst,
659 inst.currentDay, inst.currentMonth, inst.currentYear));
660 inst.stayOpen = false;
661 if (this._datepickerShowing) {
662 duration = (duration != null ? duration : this._get(inst, 'duration'));
663 var showAnim = this._get(inst, 'showAnim');
664 var postProcess = function() {
665 $.datepicker._tidyDialog(inst);
666 };
667 if (duration != '' && $.effects && $.effects[showAnim])
668 inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'),
669 duration, postProcess);
670 else
671 inst.dpDiv[(duration == '' ? 'hide' : (showAnim == 'slideDown' ? 'slideUp' :
672 (showAnim == 'fadeIn' ? 'fadeOut' : 'hide')))](duration, postProcess);
673 if (duration == '')
674 this._tidyDialog(inst);
675 var onClose = this._get(inst, 'onClose');
676 if (onClose)
677 onClose.apply((inst.input ? inst.input[0] : null),
678 [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback
679 this._datepickerShowing = false;
680 this._lastInput = null;
681 if (this._inDialog) {
682 this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
683 if ($.blockUI) {
684 $.unblockUI();
685 $('body').append(this.dpDiv);
686 }
687 }
688 this._inDialog = false;
689 }
690 this._curInst = null;
691 },
692
693 /* Tidy up after a dialog display. */
694 _tidyDialog: function(inst) {
695 inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
696 },
697
698 /* Close date picker if clicked elsewhere. */
699 _checkExternalClick: function(event) {
700 if (!$.datepicker._curInst)
701 return;
702 var $target = $(event.target);
703 if (($target.parents('#' + $.datepicker._mainDivId).length == 0) &&
704 !$target.hasClass($.datepicker.markerClassName) &&
705 !$target.hasClass($.datepicker._triggerClass) &&
706 $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
707 $.datepicker._hideDatepicker(null, '');
708 },
709
710 /* Adjust one of the date sub-fields. */
711 _adjustDate: function(id, offset, period) {
712 var target = $(id);
713 var inst = this._getInst(target[0]);
714 if (this._isDisabledDatepicker(target[0])) {
715 return;
716 }
717 this._adjustInstDate(inst, offset +
718 (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
719 period);
720 this._updateDatepicker(inst);
721 },
722
723 /* Action for current link. */
724 _gotoToday: function(id) {
725 var target = $(id);
726 var inst = this._getInst(target[0]);
727 if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
728 inst.selectedDay = inst.currentDay;
729 inst.drawMonth = inst.selectedMonth = inst.currentMonth;
730 inst.drawYear = inst.selectedYear = inst.currentYear;
731 }
732 else {
733 var date = new Date();
734 inst.selectedDay = date.getDate();
735 inst.drawMonth = inst.selectedMonth = date.getMonth();
736 inst.drawYear = inst.selectedYear = date.getFullYear();
737 }
738 this._notifyChange(inst);
739 this._adjustDate(target);
740 },
741
742 /* Action for selecting a new month/year. */
743 _selectMonthYear: function(id, select, period) {
744 var target = $(id);
745 var inst = this._getInst(target[0]);
746 inst._selectingMonthYear = false;
747 inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
748 inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
749 parseInt(select.options[select.selectedIndex].value,10);
750 this._notifyChange(inst);
751 this._adjustDate(target);
752 },
753
754 /* Restore input focus after not changing month/year. */
755 _clickMonthYear: function(id) {
756 var target = $(id);
757 var inst = this._getInst(target[0]);
758 if (inst.input && inst._selectingMonthYear && !$.browser.msie)
759 inst.input[0].focus();
760 inst._selectingMonthYear = !inst._selectingMonthYear;
761 },
762
763 /* Action for selecting a day. */
764 _selectDay: function(id, month, year, td) {
765 var target = $(id);
766 if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
767 return;
768 }
769 var inst = this._getInst(target[0]);
770 inst.selectedDay = inst.currentDay = $('a', td).html();
771 inst.selectedMonth = inst.currentMonth = month;
772 inst.selectedYear = inst.currentYear = year;
773 if (inst.stayOpen) {
774 inst.endDay = inst.endMonth = inst.endYear = null;
775 }
776 this._selectDate(id, this._formatDate(inst,
777 inst.currentDay, inst.currentMonth, inst.currentYear));
778 if (inst.stayOpen) {
779 inst.rangeStart = this._daylightSavingAdjust(
780 new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
781 this._updateDatepicker(inst);
782 }
783 },
784
785 /* Erase the input field and hide the date picker. */
786 _clearDate: function(id) {
787 var target = $(id);
788 var inst = this._getInst(target[0]);
789 inst.stayOpen = false;
790 inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null;
791 this._selectDate(target, '');
792 },
793
794 /* Update the input field with the selected date. */
795 _selectDate: function(id, dateStr) {
796 var target = $(id);
797 var inst = this._getInst(target[0]);
798 dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
799 if (inst.input)
800 inst.input.val(dateStr);
801 this._updateAlternate(inst);
802 var onSelect = this._get(inst, 'onSelect');
803 if (onSelect)
804 onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
805 else if (inst.input)
806 inst.input.trigger('change'); // fire the change event
807 if (inst.inline)
808 this._updateDatepicker(inst);
809 else if (!inst.stayOpen) {
810 this._hideDatepicker(null, this._get(inst, 'duration'));
811 this._lastInput = inst.input[0];
812 if (typeof(inst.input[0]) != 'object')
813 inst.input[0].focus(); // restore focus
814 this._lastInput = null;
815 }
816 },
817
818 /* Update any alternate field to synchronise with the main field. */
819 _updateAlternate: function(inst) {
820 var altField = this._get(inst, 'altField');
821 if (altField) { // update alternate field too
822 var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
823 var date = this._getDate(inst);
824 dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
825 $(altField).each(function() { $(this).val(dateStr); });
826 }
827 },
828
829 /* Set as beforeShowDay function to prevent selection of weekends.
830 @param date Date - the date to customise
831 @return [boolean, string] - is this date selectable?, what is its CSS class? */
832 noWeekends: function(date) {
833 var day = date.getDay();
834 return [(day > 0 && day < 6), ''];
835 },
836
837 /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
838 @param date Date - the date to get the week for
839 @return number - the number of the week within the year that contains this date */
840 iso8601Week: function(date) {
841 var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
842 var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan
843 var firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7
844 firstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday
845 if (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary
846 checkDate.setDate(checkDate.getDate() - 3); // Generate for previous year
847 return $.datepicker.iso8601Week(checkDate);
848 } else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year
849 firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7;
850 if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary
851 return 1;
852 }
853 }
854 return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date
855 },
856
857 /* Parse a string value into a date object.
858 See formatDate below for the possible formats.
859
860 @param format string - the expected format of the date
861 @param value string - the date in the above format
862 @param settings Object - attributes include:
863 shortYearCutoff number - the cutoff year for determining the century (optional)
864 dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
865 dayNames string[7] - names of the days from Sunday (optional)
866 monthNamesShort string[12] - abbreviated names of the months (optional)
867 monthNames string[12] - names of the months (optional)
868 @return Date - the extracted date value or null if value is blank */
869 parseDate: function (format, value, settings) {
870 if (format == null || value == null)
871 throw 'Invalid arguments';
872 value = (typeof value == 'object' ? value.toString() : value + '');
873 if (value == '')
874 return null;
875 var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
876 var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
877 var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
878 var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
879 var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
880 var year = -1;
881 var month = -1;
882 var day = -1;
883 var doy = -1;
884 var literal = false;
885 // Check whether a format character is doubled
886 var lookAhead = function(match) {
887 var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
888 if (matches)
889 iFormat++;
890 return matches;
891 };
892 // Extract a number from the string value
893 var getNumber = function(match) {
894 lookAhead(match);
895 var origSize = (match == '@' ? 14 : (match == 'y' ? 4 : (match == 'o' ? 3 : 2)));
896 var size = origSize;
897 var num = 0;
898 while (size > 0 && iValue < value.length &&
899 value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') {
900 num = num * 10 + parseInt(value.charAt(iValue++),10);
901 size--;
902 }
903 if (size == origSize)
904 throw 'Missing number at position ' + iValue;
905 return num;
906 };
907 // Extract a name from the string value and convert to an index
908 var getName = function(match, shortNames, longNames) {
909 var names = (lookAhead(match) ? longNames : shortNames);
910 var size = 0;
911 for (var j = 0; j < names.length; j++)
912 size = Math.max(size, names[j].length);
913 var name = '';
914 var iInit = iValue;
915 while (size > 0 && iValue < value.length) {
916 name += value.charAt(iValue++);
917 for (var i = 0; i < names.length; i++)
918 if (name == names[i])
919 return i + 1;
920 size--;
921 }
922 throw 'Unknown name at position ' + iInit;
923 };
924 // Confirm that a literal character matches the string value
925 var checkLiteral = function() {
926 if (value.charAt(iValue) != format.charAt(iFormat))
927 throw 'Unexpected literal at position ' + iValue;
928 iValue++;
929 };
930 var iValue = 0;
931 for (var iFormat = 0; iFormat < format.length; iFormat++) {
932 if (literal)
933 if (format.charAt(iFormat) == "'" && !lookAhead("'"))
934 literal = false;
935 else
936 checkLiteral();
937 else
938 switch (format.charAt(iFormat)) {
939 case 'd':
940 day = getNumber('d');
941 break;
942 case 'D':
943 getName('D', dayNamesShort, dayNames);
944 break;
945 case 'o':
946 doy = getNumber('o');
947 break;
948 case 'm':
949 month = getNumber('m');
950 break;
951 case 'M':
952 month = getName('M', monthNamesShort, monthNames);
953 break;
954 case 'y':
955 year = getNumber('y');
956 break;
957 case '@':
958 var date = new Date(getNumber('@'));
959 year = date.getFullYear();
960 month = date.getMonth() + 1;
961 day = date.getDate();
962 break;
963 case "'":
964 if (lookAhead("'"))
965 checkLiteral();
966 else
967 literal = true;
968 break;
969 default:
970 checkLiteral();
971 }
972 }
973 if (year == -1)
974 year = new Date().getFullYear();
975 else if (year < 100)
976 year += new Date().getFullYear() - new Date().getFullYear() % 100 +
977 (year <= shortYearCutoff ? 0 : -100);
978 if (doy > -1) {
979 month = 1;
980 day = doy;
981 do {
982 var dim = this._getDaysInMonth(year, month - 1);
983 if (day <= dim)
984 break;
985 month++;
986 day -= dim;
987 } while (true);
988 }
989 var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
990 if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
991 throw 'Invalid date'; // E.g. 31/02/*
992 return date;
993 },
994
995 /* Standard date formats. */
996 ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
997 COOKIE: 'D, dd M yy',
998 ISO_8601: 'yy-mm-dd',
999 RFC_822: 'D, d M y',
1000 RFC_850: 'DD, dd-M-y',
1001 RFC_1036: 'D, d M y',
1002 RFC_1123: 'D, d M yy',
1003 RFC_2822: 'D, d M yy',
1004 RSS: 'D, d M y', // RFC 822
1005 TIMESTAMP: '@',
1006 W3C: 'yy-mm-dd', // ISO 8601
1007
1008 /* Format a date object into a string value.
1009 The format can be combinations of the following:
1010 d - day of month (no leading zero)
1011 dd - day of month (two digit)
1012 o - day of year (no leading zeros)
1013 oo - day of year (three digit)
1014 D - day name short
1015 DD - day name long
1016 m - month of year (no leading zero)
1017 mm - month of year (two digit)
1018 M - month name short
1019 MM - month name long
1020 y - year (two digit)
1021 yy - year (four digit)
1022 @ - Unix timestamp (ms since 01/01/1970)
1023 '...' - literal text
1024 '' - single quote
1025
1026 @param format string - the desired format of the date
1027 @param date Date - the date value to format
1028 @param settings Object - attributes include:
1029 dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
1030 dayNames string[7] - names of the days from Sunday (optional)
1031 monthNamesShort string[12] - abbreviated names of the months (optional)
1032 monthNames string[12] - names of the months (optional)
1033 @return string - the date in the above format */
1034 formatDate: function (format, date, settings) {
1035 if (!date)
1036 return '';
1037 var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
1038 var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
1039 var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
1040 var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
1041 // Check whether a format character is doubled
1042 var lookAhead = function(match) {
1043 var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
1044 if (matches)
1045 iFormat++;
1046 return matches;
1047 };
1048 // Format a number, with leading zero if necessary
1049 var formatNumber = function(match, value, len) {
1050 var num = '' + value;
1051 if (lookAhead(match))
1052 while (num.length < len)
1053 num = '0' + num;
1054 return num;
1055 };
1056 // Format a name, short or long as requested
1057 var formatName = function(match, value, shortNames, longNames) {
1058 return (lookAhead(match) ? longNames[value] : shortNames[value]);
1059 };
1060 var output = '';
1061 var literal = false;
1062 if (date)
1063 for (var iFormat = 0; iFormat < format.length; iFormat++) {
1064 if (literal)
1065 if (format.charAt(iFormat) == "'" && !lookAhead("'"))
1066 literal = false;
1067 else
1068 output += format.charAt(iFormat);
1069 else
1070 switch (format.charAt(iFormat)) {
1071 case 'd':
1072 output += formatNumber('d', date.getDate(), 2);
1073 break;
1074 case 'D':
1075 output += formatName('D', date.getDay(), dayNamesShort, dayNames);
1076 break;
1077 case 'o':
1078 var doy = date.getDate();
1079 for (var m = date.getMonth() - 1; m >= 0; m--)
1080 doy += this._getDaysInMonth(date.getFullYear(), m);
1081 output += formatNumber('o', doy, 3);
1082 break;
1083 case 'm':
1084 output += formatNumber('m', date.getMonth() + 1, 2);
1085 break;
1086 case 'M':
1087 output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
1088 break;
1089 case 'y':
1090 output += (lookAhead('y') ? date.getFullYear() :
1091 (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
1092 break;
1093 case '@':
1094 output += date.getTime();
1095 break;
1096 case "'":
1097 if (lookAhead("'"))
1098 output += "'";
1099 else
1100 literal = true;
1101 break;
1102 default:
1103 output += format.charAt(iFormat);
1104 }
1105 }
1106 return output;
1107 },
1108
1109 /* Extract all possible characters from the date format. */
1110 _possibleChars: function (format) {
1111 var chars = '';
1112 var literal = false;
1113 for (var iFormat = 0; iFormat < format.length; iFormat++)
1114 if (literal)
1115 if (format.charAt(iFormat) == "'" && !lookAhead("'"))
1116 literal = false;
1117 else
1118 chars += format.charAt(iFormat);
1119 else
1120 switch (format.charAt(iFormat)) {
1121 case 'd': case 'm': case 'y': case '@':
1122 chars += '0123456789';
1123 break;
1124 case 'D': case 'M':
1125 return null; // Accept anything
1126 case "'":
1127 if (lookAhead("'"))
1128 chars += "'";
1129 else
1130 literal = true;
1131 break;
1132 default:
1133 chars += format.charAt(iFormat);
1134 }
1135 return chars;
1136 },
1137
1138 /* Get a setting value, defaulting if necessary. */
1139 _get: function(inst, name) {
1140 return inst.settings[name] !== undefined ?
1141 inst.settings[name] : this._defaults[name];
1142 },
1143
1144 /* Parse existing date and initialise date picker. */
1145 _setDateFromField: function(inst) {
1146 var dateFormat = this._get(inst, 'dateFormat');
1147 var dates = inst.input ? inst.input.val() : null;
1148 inst.endDay = inst.endMonth = inst.endYear = null;
1149 var date = defaultDate = this._getDefaultDate(inst);
1150 var settings = this._getFormatConfig(inst);
1151 try {
1152 date = this.parseDate(dateFormat, dates, settings) || defaultDate;
1153 } catch (event) {
1154 this.log(event);
1155 date = defaultDate;
1156 }
1157 inst.selectedDay = date.getDate();
1158 inst.drawMonth = inst.selectedMonth = date.getMonth();
1159 inst.drawYear = inst.selectedYear = date.getFullYear();
1160 inst.currentDay = (dates ? date.getDate() : 0);
1161 inst.currentMonth = (dates ? date.getMonth() : 0);
1162 inst.currentYear = (dates ? date.getFullYear() : 0);
1163 this._adjustInstDate(inst);
1164 },
1165
1166 /* Retrieve the default date shown on opening. */
1167 _getDefaultDate: function(inst) {
1168 var date = this._determineDate(this._get(inst, 'defaultDate'), new Date());
1169 var minDate = this._getMinMaxDate(inst, 'min', true);
1170 var maxDate = this._getMinMaxDate(inst, 'max');
1171 date = (minDate && date < minDate ? minDate : date);
1172 date = (maxDate && date > maxDate ? maxDate : date);
1173 return date;
1174 },
1175
1176 /* A date may be specified as an exact value or a relative one. */
1177 _determineDate: function(date, defaultDate) {
1178 var offsetNumeric = function(offset) {
1179 var date = new Date();
1180 date.setDate(date.getDate() + offset);
1181 return date;
1182 };
1183 var offsetString = function(offset, getDaysInMonth) {
1184 var date = new Date();
1185 var year = date.getFullYear();
1186 var month = date.getMonth();
1187 var day = date.getDate();
1188 var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
1189 var matches = pattern.exec(offset);
1190 while (matches) {
1191 switch (matches[2] || 'd') {
1192 case 'd' : case 'D' :
1193 day += parseInt(matches[1],10); break;
1194 case 'w' : case 'W' :
1195 day += parseInt(matches[1],10) * 7; break;
1196 case 'm' : case 'M' :
1197 month += parseInt(matches[1],10);
1198 day = Math.min(day, getDaysInMonth(year, month));
1199 break;
1200 case 'y': case 'Y' :
1201 year += parseInt(matches[1],10);
1202 day = Math.min(day, getDaysInMonth(year, month));
1203 break;
1204 }
1205 matches = pattern.exec(offset);
1206 }
1207 return new Date(year, month, day);
1208 };
1209 date = (date == null ? defaultDate :
1210 (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) :
1211 (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
1212 date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
1213 if (date) {
1214 date.setHours(0);
1215 date.setMinutes(0);
1216 date.setSeconds(0);
1217 date.setMilliseconds(0);
1218 }
1219 return this._daylightSavingAdjust(date);
1220 },
1221
1222 /* Handle switch to/from daylight saving.
1223 Hours may be non-zero on daylight saving cut-over:
1224 > 12 when midnight changeover, but then cannot generate
1225 midnight datetime, so jump to 1AM, otherwise reset.
1226 @param date (Date) the date to check
1227 @return (Date) the corrected date */
1228 _daylightSavingAdjust: function(date) {
1229 if (!date) return null;
1230 date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
1231 return date;
1232 },
1233
1234 /* Set the date(s) directly. */
1235 _setDate: function(inst, date, endDate) {
1236 var clear = !(date);
1237 var origMonth = inst.selectedMonth;
1238 var origYear = inst.selectedYear;
1239 date = this._determineDate(date, new Date());
1240 inst.selectedDay = inst.currentDay = date.getDate();
1241 inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
1242 inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
1243 if (origMonth != inst.selectedMonth || origYear != inst.selectedYear)
1244 this._notifyChange(inst);
1245 this._adjustInstDate(inst);
1246 if (inst.input) {
1247 inst.input.val(clear ? '' : this._formatDate(inst));
1248 }
1249 },
1250
1251 /* Retrieve the date(s) directly. */
1252 _getDate: function(inst) {
1253 var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
1254 this._daylightSavingAdjust(new Date(
1255 inst.currentYear, inst.currentMonth, inst.currentDay)));
1256 return startDate;
1257 },
1258
1259 /* Generate the HTML for the current state of the date picker. */
1260 _generateHTML: function(inst) {
1261 var today = new Date();
1262 today = this._daylightSavingAdjust(
1263 new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
1264 var isRTL = this._get(inst, 'isRTL');
1265 var showButtonPanel = this._get(inst, 'showButtonPanel');
1266 var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
1267 var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
1268 var numMonths = this._getNumberOfMonths(inst);
1269 var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
1270 var stepMonths = this._get(inst, 'stepMonths');
1271 var stepBigMonths = this._get(inst, 'stepBigMonths');
1272 var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
1273 var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
1274 new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
1275 var minDate = this._getMinMaxDate(inst, 'min', true);
1276 var maxDate = this._getMinMaxDate(inst, 'max');
1277 var drawMonth = inst.drawMonth - showCurrentAtPos;
1278 var drawYear = inst.drawYear;
1279 if (drawMonth < 0) {
1280 drawMonth += 12;
1281 drawYear--;
1282 }
1283 if (maxDate) {
1284 var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
1285 maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()));
1286 maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
1287 while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
1288 drawMonth--;
1289 if (drawMonth < 0) {
1290 drawMonth = 11;
1291 drawYear--;
1292 }
1293 }
1294 }
1295 inst.drawMonth = drawMonth;
1296 inst.drawYear = drawYear;
1297 var prevText = this._get(inst, 'prevText');
1298 prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
1299 this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
1300 this._getFormatConfig(inst)));
1301 var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
1302 '<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
1303 ' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
1304 (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
1305 var nextText = this._get(inst, 'nextText');
1306 nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
1307 this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
1308 this._getFormatConfig(inst)));
1309 var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
1310 '<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
1311 ' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
1312 (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
1313 var currentText = this._get(inst, 'currentText');
1314 var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
1315 currentText = (!navigationAsDateFormat ? currentText :
1316 this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
1317 var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
1318 var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
1319 (this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#' + inst.id + '\');"' +
1320 '>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
1321 var firstDay = parseInt(this._get(inst, 'firstDay'),10);
1322 firstDay = (isNaN(firstDay) ? 0 : firstDay);
1323 var dayNames = this._get(inst, 'dayNames');
1324 var dayNamesShort = this._get(inst, 'dayNamesShort');
1325 var dayNamesMin = this._get(inst, 'dayNamesMin');
1326 var monthNames = this._get(inst, 'monthNames');
1327 var monthNamesShort = this._get(inst, 'monthNamesShort');
1328 var beforeShowDay = this._get(inst, 'beforeShowDay');
1329 var showOtherMonths = this._get(inst, 'showOtherMonths');
1330 var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
1331 var endDate = inst.endDay ? this._daylightSavingAdjust(
1332 new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate;
1333 var defaultDate = this._getDefaultDate(inst);
1334 var html = '';
1335 for (var row = 0; row < numMonths[0]; row++) {
1336 var group = '';
1337 for (var col = 0; col < numMonths[1]; col++) {
1338 var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
1339 var cornerClass = ' ui-corner-all';
1340 var calender = '';
1341 if (isMultiMonth) {
1342 calender += '<div class="ui-datepicker-group ui-datepicker-group-';
1343 switch (col) {
1344 case 0: calender += 'first'; cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
1345 case numMonths[1]-1: calender += 'last'; cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
1346 default: calender += 'middle'; cornerClass = ''; break;
1347 }
1348 calender += '">';
1349 }
1350 calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
1351 (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
1352 (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
1353 this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
1354 selectedDate, row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
1355 '</div><table class="ui-datepicker-calendar"><thead>' +
1356 '<tr>';
1357 var thead = '';
1358 for (var dow = 0; dow < 7; dow++) { // days of the week
1359 var day = (dow + firstDay) % 7;
1360 thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
1361 '<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
1362 }
1363 calender += thead + '</tr></thead><tbody>';
1364 var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
1365 if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
1366 inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
1367 var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
1368 var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate
1369 var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
1370 for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
1371 calender += '<tr>';
1372 var tbody = '';
1373 for (var dow = 0; dow < 7; dow++) { // create date picker days
1374 var daySettings = (beforeShowDay ?
1375 beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
1376 var otherMonth = (printDate.getMonth() != drawMonth);
1377 var unselectable = otherMonth || !daySettings[0] ||
1378 (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
1379 tbody += '<td class="' +
1380 ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
1381 (otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
1382 ((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
1383 (defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
1384 // or defaultDate is current printedDate and defaultDate is selectedDate
1385 ' ' + this._dayOverClass : '') + // highlight selected day
1386 (unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') + // highlight unselectable days
1387 (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
1388 (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
1389 ' ' + this._currentClass : '') + // highlight selected day
1390 (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
1391 ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
1392 (unselectable ? '' : ' onclick="DP_jQuery.datepicker._selectDay(\'#' +
1393 inst.id + '\',' + drawMonth + ',' + drawYear + ', this);return false;"') + '>' + // actions
1394 (otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : // display for other months
1395 (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
1396 (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
1397 (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
1398 ' ui-state-active' : '') + // highlight selected day
1399 '" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display for this month
1400 printDate.setDate(printDate.getDate() + 1);
1401 printDate = this._daylightSavingAdjust(printDate);
1402 }
1403 calender += tbody + '</tr>';
1404 }
1405 drawMonth++;
1406 if (drawMonth > 11) {
1407 drawMonth = 0;
1408 drawYear++;
1409 }
1410 calender += '</tbody></table>' + (isMultiMonth ? '</div>' +
1411 ((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
1412 group += calender;
1413 }
1414 html += group;
1415 }
1416 html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
1417 '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
1418 inst._keyEvent = false;
1419 return html;
1420 },
1421
1422 /* Generate the month and year header. */
1423 _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
1424 selectedDate, secondary, monthNames, monthNamesShort) {
1425 minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate);
1426 var changeMonth = this._get(inst, 'changeMonth');
1427 var changeYear = this._get(inst, 'changeYear');
1428 var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
1429 var html = '<div class="ui-datepicker-title">';
1430 var monthHtml = '';
1431 // month selection
1432 if (secondary || !changeMonth)
1433 monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span> ';
1434 else {
1435 var inMinYear = (minDate && minDate.getFullYear() == drawYear);
1436 var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
1437 monthHtml += '<select class="ui-datepicker-month" ' +
1438 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
1439 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
1440 '>';
1441 for (var month = 0; month < 12; month++) {
1442 if ((!inMinYear || month >= minDate.getMonth()) &&
1443 (!inMaxYear || month <= maxDate.getMonth()))
1444 monthHtml += '<option value="' + month + '"' +
1445 (month == drawMonth ? ' selected="selected"' : '') +
1446 '>' + monthNamesShort[month] + '</option>';
1447 }
1448 monthHtml += '</select>';
1449 }
1450 if (!showMonthAfterYear)
1451 html += monthHtml + ((secondary || changeMonth || changeYear) && (!(changeMonth && changeYear)) ? '&#xa0;' : '');
1452 // year selection
1453 if (secondary || !changeYear)
1454 html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
1455 else {
1456 // determine range of years to display
1457 var years = this._get(inst, 'yearRange').split(':');
1458 var year = 0;
1459 var endYear = 0;
1460 if (years.length != 2) {
1461 year = drawYear - 10;
1462 endYear = drawYear + 10;
1463 } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {
1464 year = drawYear + parseInt(years[0], 10);
1465 endYear = drawYear + parseInt(years[1], 10);
1466 } else {
1467 year = parseInt(years[0], 10);
1468 endYear = parseInt(years[1], 10);
1469 }
1470 year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
1471 endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
1472 html += '<select class="ui-datepicker-year" ' +
1473 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
1474 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
1475 '>';
1476 for (; year <= endYear; year++) {
1477 html += '<option value="' + year + '"' +
1478 (year == drawYear ? ' selected="selected"' : '') +
1479 '>' + year + '</option>';
1480 }
1481 html += '</select>';
1482 }
1483 if (showMonthAfterYear)
1484 html += (secondary || changeMonth || changeYear ? '&#xa0;' : '') + monthHtml;
1485 html += '</div>'; // Close datepicker_header
1486 return html;
1487 },
1488
1489 /* Adjust one of the date sub-fields. */
1490 _adjustInstDate: function(inst, offset, period) {
1491 var year = inst.drawYear + (period == 'Y' ? offset : 0);
1492 var month = inst.drawMonth + (period == 'M' ? offset : 0);
1493 var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
1494 (period == 'D' ? offset : 0);
1495 var date = this._daylightSavingAdjust(new Date(year, month, day));
1496 // ensure it is within the bounds set
1497 var minDate = this._getMinMaxDate(inst, 'min', true);
1498 var maxDate = this._getMinMaxDate(inst, 'max');
1499 date = (minDate && date < minDate ? minDate : date);
1500 date = (maxDate && date > maxDate ? maxDate : date);
1501 inst.selectedDay = date.getDate();
1502 inst.drawMonth = inst.selectedMonth = date.getMonth();
1503 inst.drawYear = inst.selectedYear = date.getFullYear();
1504 if (period == 'M' || period == 'Y')
1505 this._notifyChange(inst);
1506 },
1507
1508 /* Notify change of month/year. */
1509 _notifyChange: function(inst) {
1510 var onChange = this._get(inst, 'onChangeMonthYear');
1511 if (onChange)
1512 onChange.apply((inst.input ? inst.input[0] : null),
1513 [inst.selectedYear, inst.selectedMonth + 1, inst]);
1514 },
1515
1516 /* Determine the number of months to show. */
1517 _getNumberOfMonths: function(inst) {
1518 var numMonths = this._get(inst, 'numberOfMonths');
1519 return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
1520 },
1521
1522 /* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */
1523 _getMinMaxDate: function(inst, minMax, checkRange) {
1524 var date = this._determineDate(this._get(inst, minMax + 'Date'), null);
1525 return (!checkRange || !inst.rangeStart ? date :
1526 (!date || inst.rangeStart > date ? inst.rangeStart : date));
1527 },
1528
1529 /* Find the number of days in a given month. */
1530 _getDaysInMonth: function(year, month) {
1531 return 32 - new Date(year, month, 32).getDate();
1532 },
1533
1534 /* Find the day of the week of the first of a month. */
1535 _getFirstDayOfMonth: function(year, month) {
1536 return new Date(year, month, 1).getDay();
1537 },
1538
1539 /* Determines if we should allow a "next/prev" month display change. */
1540 _canAdjustMonth: function(inst, offset, curYear, curMonth) {
1541 var numMonths = this._getNumberOfMonths(inst);
1542 var date = this._daylightSavingAdjust(new Date(
1543 curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1));
1544 if (offset < 0)
1545 date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
1546 return this._isInRange(inst, date);
1547 },
1548
1549 /* Is the given date in the accepted range? */
1550 _isInRange: function(inst, date) {
1551 // during range selection, use minimum of selected date and range start
1552 var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(
1553 new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay)));
1554 newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate);
1555 var minDate = newMinDate || this._getMinMaxDate(inst, 'min');
1556 var maxDate = this._getMinMaxDate(inst, 'max');
1557 return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));
1558 },
1559
1560 /* Provide the configuration settings for formatting/parsing. */
1561 _getFormatConfig: function(inst) {
1562 var shortYearCutoff = this._get(inst, 'shortYearCutoff');
1563 shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
1564 new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
1565 return {shortYearCutoff: shortYearCutoff,
1566 dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
1567 monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
1568 },
1569
1570 /* Format the given date for display. */
1571 _formatDate: function(inst, day, month, year) {
1572 if (!day) {
1573 inst.currentDay = inst.selectedDay;
1574 inst.currentMonth = inst.selectedMonth;
1575 inst.currentYear = inst.selectedYear;
1576 }
1577 var date = (day ? (typeof day == 'object' ? day :
1578 this._daylightSavingAdjust(new Date(year, month, day))) :
1579 this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
1580 return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
1581 }
1582});
1583
1584/* jQuery extend now ignores nulls! */
1585function extendRemove(target, props) {
1586 $.extend(target, props);
1587 for (var name in props)
1588 if (props[name] == null || props[name] == undefined)
1589 target[name] = props[name];
1590 return target;
1591};
1592
1593/* Determine whether an object is an array. */
1594function isArray(a) {
1595 return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
1596 (a.constructor && a.constructor.toString().match(/\Array\(\)/))));
1597};
1598
1599/* Invoke the datepicker functionality.
1600 @param options string - a command, optionally followed by additional parameters or
1601 Object - settings for attaching new datepicker functionality
1602 @return jQuery object */
1603$.fn.datepicker = function(options){
1604
1605 /* Initialise the date picker. */
1606 if (!$.datepicker.initialized) {
1607 $(document).mousedown($.datepicker._checkExternalClick).
1608 find('body').append($.datepicker.dpDiv);
1609 $.datepicker.initialized = true;
1610 }
1611
1612 var otherArgs = Array.prototype.slice.call(arguments, 1);
1613 if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate'))
1614 return $.datepicker['_' + options + 'Datepicker'].
1615 apply($.datepicker, [this[0]].concat(otherArgs));
1616 if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
1617 return $.datepicker['_' + options + 'Datepicker'].
1618 apply($.datepicker, [this[0]].concat(otherArgs));
1619 return this.each(function() {
1620 typeof options == 'string' ?
1621 $.datepicker['_' + options + 'Datepicker'].
1622 apply($.datepicker, [this].concat(otherArgs)) :
1623 $.datepicker._attachDatepicker(this, options);
1624 });
1625};
1626
1627$.datepicker = new Datepicker(); // singleton instance
1628$.datepicker.initialized = false;
1629$.datepicker.uuid = new Date().getTime();
1630$.datepicker.version = "1.7.2";
1631
1632// Workaround for #4055
1633// Add another global to avoid noConflict issues with inline event handlers
1634window.DP_jQuery = $;
1635
1636})(jQuery);
diff --git a/static/development-bundle/ui/ui.dialog.js b/static/development-bundle/ui/ui.dialog.js
new file mode 100644
index 0000000..fdd5b26
--- /dev/null
+++ b/static/development-bundle/ui/ui.dialog.js
@@ -0,0 +1,671 @@
1/*
2 * jQuery UI Dialog 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Dialog
9 *
10 * Depends:
11 * ui.core.js
12 * ui.draggable.js
13 * ui.resizable.js
14 */
15(function($) {
16
17var setDataSwitch = {
18 dragStart: "start.draggable",
19 drag: "drag.draggable",
20 dragStop: "stop.draggable",
21 maxHeight: "maxHeight.resizable",
22 minHeight: "minHeight.resizable",
23 maxWidth: "maxWidth.resizable",
24 minWidth: "minWidth.resizable",
25 resizeStart: "start.resizable",
26 resize: "drag.resizable",
27 resizeStop: "stop.resizable"
28 },
29
30 uiDialogClasses =
31 'ui-dialog ' +
32 'ui-widget ' +
33 'ui-widget-content ' +
34 'ui-corner-all ';
35
36$.widget("ui.dialog", {
37
38 _init: function() {
39 this.originalTitle = this.element.attr('title');
40
41 var self = this,
42 options = this.options,
43
44 title = options.title || this.originalTitle || '&nbsp;',
45 titleId = $.ui.dialog.getTitleId(this.element),
46
47 uiDialog = (this.uiDialog = $('<div/>'))
48 .appendTo(document.body)
49 .hide()
50 .addClass(uiDialogClasses + options.dialogClass)
51 .css({
52 position: 'absolute',
53 overflow: 'hidden',
54 zIndex: options.zIndex
55 })
56 // setting tabIndex makes the div focusable
57 // setting outline to 0 prevents a border on focus in Mozilla
58 .attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
59 (options.closeOnEscape && event.keyCode
60 && event.keyCode == $.ui.keyCode.ESCAPE && self.close(event));
61 })
62 .attr({
63 role: 'dialog',
64 'aria-labelledby': titleId
65 })
66 .mousedown(function(event) {
67 self.moveToTop(false, event);
68 }),
69
70 uiDialogContent = this.element
71 .show()
72 .removeAttr('title')
73 .addClass(
74 'ui-dialog-content ' +
75 'ui-widget-content')
76 .appendTo(uiDialog),
77
78 uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>'))
79 .addClass(
80 'ui-dialog-titlebar ' +
81 'ui-widget-header ' +
82 'ui-corner-all ' +
83 'ui-helper-clearfix'
84 )
85 .prependTo(uiDialog),
86
87 uiDialogTitlebarClose = $('<a href="#"/>')
88 .addClass(
89 'ui-dialog-titlebar-close ' +
90 'ui-corner-all'
91 )
92 .attr('role', 'button')
93 .hover(
94 function() {
95 uiDialogTitlebarClose.addClass('ui-state-hover');
96 },
97 function() {
98 uiDialogTitlebarClose.removeClass('ui-state-hover');
99 }
100 )
101 .focus(function() {
102 uiDialogTitlebarClose.addClass('ui-state-focus');
103 })
104 .blur(function() {
105 uiDialogTitlebarClose.removeClass('ui-state-focus');
106 })
107 .mousedown(function(ev) {
108 ev.stopPropagation();
109 })
110 .click(function(event) {
111 self.close(event);
112 return false;
113 })
114 .appendTo(uiDialogTitlebar),
115
116 uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>'))
117 .addClass(
118 'ui-icon ' +
119 'ui-icon-closethick'
120 )
121 .text(options.closeText)
122 .appendTo(uiDialogTitlebarClose),
123
124 uiDialogTitle = $('<span/>')
125 .addClass('ui-dialog-title')
126 .attr('id', titleId)
127 .html(title)
128 .prependTo(uiDialogTitlebar);
129
130 uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
131
132 (options.draggable && $.fn.draggable && this._makeDraggable());
133 (options.resizable && $.fn.resizable && this._makeResizable());
134
135 this._createButtons(options.buttons);
136 this._isOpen = false;
137
138 (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe());
139 (options.autoOpen && this.open());
140
141 },
142
143 destroy: function() {
144 (this.overlay && this.overlay.destroy());
145 this.uiDialog.hide();
146 this.element
147 .unbind('.dialog')
148 .removeData('dialog')
149 .removeClass('ui-dialog-content ui-widget-content')
150 .hide().appendTo('body');
151 this.uiDialog.remove();
152
153 (this.originalTitle && this.element.attr('title', this.originalTitle));
154 },
155
156 close: function(event) {
157 var self = this;
158
159 if (false === self._trigger('beforeclose', event)) {
160 return;
161 }
162
163 (self.overlay && self.overlay.destroy());
164 self.uiDialog.unbind('keypress.ui-dialog');
165
166 (self.options.hide
167 ? self.uiDialog.hide(self.options.hide, function() {
168 self._trigger('close', event);
169 })
170 : self.uiDialog.hide() && self._trigger('close', event));
171
172 $.ui.dialog.overlay.resize();
173
174 self._isOpen = false;
175
176 // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
177 if (self.options.modal) {
178 var maxZ = 0;
179 $('.ui-dialog').each(function() {
180 if (this != self.uiDialog[0]) {
181 maxZ = Math.max(maxZ, $(this).css('z-index'));
182 }
183 });
184 $.ui.dialog.maxZ = maxZ;
185 }
186 },
187
188 isOpen: function() {
189 return this._isOpen;
190 },
191
192 // the force parameter allows us to move modal dialogs to their correct
193 // position on open
194 moveToTop: function(force, event) {
195
196 if ((this.options.modal && !force)
197 || (!this.options.stack && !this.options.modal)) {
198 return this._trigger('focus', event);
199 }
200
201 if (this.options.zIndex > $.ui.dialog.maxZ) {
202 $.ui.dialog.maxZ = this.options.zIndex;
203 }
204 (this.overlay && this.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = ++$.ui.dialog.maxZ));
205
206 //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
207 // http://ui.jquery.com/bugs/ticket/3193
208 var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') };
209 this.uiDialog.css('z-index', ++$.ui.dialog.maxZ);
210 this.element.attr(saveScroll);
211 this._trigger('focus', event);
212 },
213
214 open: function() {
215 if (this._isOpen) { return; }
216
217 var options = this.options,
218 uiDialog = this.uiDialog;
219
220 this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null;
221 (uiDialog.next().length && uiDialog.appendTo('body'));
222 this._size();
223 this._position(options.position);
224 uiDialog.show(options.show);
225 this.moveToTop(true);
226
227 // prevent tabbing out of modal dialogs
228 (options.modal && uiDialog.bind('keypress.ui-dialog', function(event) {
229 if (event.keyCode != $.ui.keyCode.TAB) {
230 return;
231 }
232
233 var tabbables = $(':tabbable', this),
234 first = tabbables.filter(':first')[0],
235 last = tabbables.filter(':last')[0];
236
237 if (event.target == last && !event.shiftKey) {
238 setTimeout(function() {
239 first.focus();
240 }, 1);
241 } else if (event.target == first && event.shiftKey) {
242 setTimeout(function() {
243 last.focus();
244 }, 1);
245 }
246 }));
247
248 // set focus to the first tabbable element in the content area or the first button
249 // if there are no tabbable elements, set focus on the dialog itself
250 $([])
251 .add(uiDialog.find('.ui-dialog-content :tabbable:first'))
252 .add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first'))
253 .add(uiDialog)
254 .filter(':first')
255 .focus();
256
257 this._trigger('open');
258 this._isOpen = true;
259 },
260
261 _createButtons: function(buttons) {
262 var self = this,
263 hasButtons = false,
264 uiDialogButtonPane = $('<div></div>')
265 .addClass(
266 'ui-dialog-buttonpane ' +
267 'ui-widget-content ' +
268 'ui-helper-clearfix'
269 );
270
271 // if we already have a button pane, remove it
272 this.uiDialog.find('.ui-dialog-buttonpane').remove();
273
274 (typeof buttons == 'object' && buttons !== null &&
275 $.each(buttons, function() { return !(hasButtons = true); }));
276 if (hasButtons) {
277 $.each(buttons, function(name, fn) {
278 $('<button type="button"></button>')
279 .addClass(
280 'ui-state-default ' +
281 'ui-corner-all'
282 )
283 .text(name)
284 .click(function() { fn.apply(self.element[0], arguments); })
285 .hover(
286 function() {
287 $(this).addClass('ui-state-hover');
288 },
289 function() {
290 $(this).removeClass('ui-state-hover');
291 }
292 )
293 .focus(function() {
294 $(this).addClass('ui-state-focus');
295 })
296 .blur(function() {
297 $(this).removeClass('ui-state-focus');
298 })
299 .appendTo(uiDialogButtonPane);
300 });
301 uiDialogButtonPane.appendTo(this.uiDialog);
302 }
303 },
304
305 _makeDraggable: function() {
306 var self = this,
307 options = this.options,
308 heightBeforeDrag;
309
310 this.uiDialog.draggable({
311 cancel: '.ui-dialog-content',
312 handle: '.ui-dialog-titlebar',
313 containment: 'document',
314 start: function() {
315 heightBeforeDrag = options.height;
316 $(this).height($(this).height()).addClass("ui-dialog-dragging");
317 (options.dragStart && options.dragStart.apply(self.element[0], arguments));
318 },
319 drag: function() {
320 (options.drag && options.drag.apply(self.element[0], arguments));
321 },
322 stop: function() {
323 $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
324 (options.dragStop && options.dragStop.apply(self.element[0], arguments));
325 $.ui.dialog.overlay.resize();
326 }
327 });
328 },
329
330 _makeResizable: function(handles) {
331 handles = (handles === undefined ? this.options.resizable : handles);
332 var self = this,
333 options = this.options,
334 resizeHandles = typeof handles == 'string'
335 ? handles
336 : 'n,e,s,w,se,sw,ne,nw';
337
338 this.uiDialog.resizable({
339 cancel: '.ui-dialog-content',
340 alsoResize: this.element,
341 maxWidth: options.maxWidth,
342 maxHeight: options.maxHeight,
343 minWidth: options.minWidth,
344 minHeight: options.minHeight,
345 start: function() {
346 $(this).addClass("ui-dialog-resizing");
347 (options.resizeStart && options.resizeStart.apply(self.element[0], arguments));
348 },
349 resize: function() {
350 (options.resize && options.resize.apply(self.element[0], arguments));
351 },
352 handles: resizeHandles,
353 stop: function() {
354 $(this).removeClass("ui-dialog-resizing");
355 options.height = $(this).height();
356 options.width = $(this).width();
357 (options.resizeStop && options.resizeStop.apply(self.element[0], arguments));
358 $.ui.dialog.overlay.resize();
359 }
360 })
361 .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
362 },
363
364 _position: function(pos) {
365 var wnd = $(window), doc = $(document),
366 pTop = doc.scrollTop(), pLeft = doc.scrollLeft(),
367 minTop = pTop;
368
369 if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) {
370 pos = [
371 pos == 'right' || pos == 'left' ? pos : 'center',
372 pos == 'top' || pos == 'bottom' ? pos : 'middle'
373 ];
374 }
375 if (pos.constructor != Array) {
376 pos = ['center', 'middle'];
377 }
378 if (pos[0].constructor == Number) {
379 pLeft += pos[0];
380 } else {
381 switch (pos[0]) {
382 case 'left':
383 pLeft += 0;
384 break;
385 case 'right':
386 pLeft += wnd.width() - this.uiDialog.outerWidth();
387 break;
388 default:
389 case 'center':
390 pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2;
391 }
392 }
393 if (pos[1].constructor == Number) {
394 pTop += pos[1];
395 } else {
396 switch (pos[1]) {
397 case 'top':
398 pTop += 0;
399 break;
400 case 'bottom':
401 pTop += wnd.height() - this.uiDialog.outerHeight();
402 break;
403 default:
404 case 'middle':
405 pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2;
406 }
407 }
408
409 // prevent the dialog from being too high (make sure the titlebar
410 // is accessible)
411 pTop = Math.max(pTop, minTop);
412 this.uiDialog.css({top: pTop, left: pLeft});
413 },
414
415 _setData: function(key, value){
416 (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value));
417 switch (key) {
418 case "buttons":
419 this._createButtons(value);
420 break;
421 case "closeText":
422 this.uiDialogTitlebarCloseText.text(value);
423 break;
424 case "dialogClass":
425 this.uiDialog
426 .removeClass(this.options.dialogClass)
427 .addClass(uiDialogClasses + value);
428 break;
429 case "draggable":
430 (value
431 ? this._makeDraggable()
432 : this.uiDialog.draggable('destroy'));
433 break;
434 case "height":
435 this.uiDialog.height(value);
436 break;
437 case "position":
438 this._position(value);
439 break;
440 case "resizable":
441 var uiDialog = this.uiDialog,
442 isResizable = this.uiDialog.is(':data(resizable)');
443
444 // currently resizable, becoming non-resizable
445 (isResizable && !value && uiDialog.resizable('destroy'));
446
447 // currently resizable, changing handles
448 (isResizable && typeof value == 'string' &&
449 uiDialog.resizable('option', 'handles', value));
450
451 // currently non-resizable, becoming resizable
452 (isResizable || this._makeResizable(value));
453 break;
454 case "title":
455 $(".ui-dialog-title", this.uiDialogTitlebar).html(value || '&nbsp;');
456 break;
457 case "width":
458 this.uiDialog.width(value);
459 break;
460 }
461
462 $.widget.prototype._setData.apply(this, arguments);
463 },
464
465 _size: function() {
466 /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
467 * divs will both have width and height set, so we need to reset them
468 */
469 var options = this.options;
470
471 // reset content sizing
472 this.element.css({
473 height: 0,
474 minHeight: 0,
475 width: 'auto'
476 });
477
478 // reset wrapper sizing
479 // determine the height of all the non-content elements
480 var nonContentHeight = this.uiDialog.css({
481 height: 'auto',
482 width: options.width
483 })
484 .height();
485
486 this.element
487 .css({
488 minHeight: Math.max(options.minHeight - nonContentHeight, 0),
489 height: options.height == 'auto'
490 ? 'auto'
491 : Math.max(options.height - nonContentHeight, 0)
492 });
493 }
494});
495
496$.extend($.ui.dialog, {
497 version: "1.7.2",
498 defaults: {
499 autoOpen: true,
500 bgiframe: false,
501 buttons: {},
502 closeOnEscape: true,
503 closeText: 'close',
504 dialogClass: '',
505 draggable: true,
506 hide: null,
507 height: 'auto',
508 maxHeight: false,
509 maxWidth: false,
510 minHeight: 150,
511 minWidth: 150,
512 modal: false,
513 position: 'center',
514 resizable: true,
515 show: null,
516 stack: true,
517 title: '',
518 width: 300,
519 zIndex: 1000
520 },
521
522 getter: 'isOpen',
523
524 uuid: 0,
525 maxZ: 0,
526
527 getTitleId: function($el) {
528 return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid);
529 },
530
531 overlay: function(dialog) {
532 this.$el = $.ui.dialog.overlay.create(dialog);
533 }
534});
535
536$.extend($.ui.dialog.overlay, {
537 instances: [],
538 maxZ: 0,
539 events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
540 function(event) { return event + '.dialog-overlay'; }).join(' '),
541 create: function(dialog) {
542 if (this.instances.length === 0) {
543 // prevent use of anchors and inputs
544 // we use a setTimeout in case the overlay is created from an
545 // event that we're going to be cancelling (see #2804)
546 setTimeout(function() {
547 // handle $(el).dialog().dialog('close') (see #4065)
548 if ($.ui.dialog.overlay.instances.length) {
549 $(document).bind($.ui.dialog.overlay.events, function(event) {
550 var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0;
551 return (dialogZ > $.ui.dialog.overlay.maxZ);
552 });
553 }
554 }, 1);
555
556 // allow closing by pressing the escape key
557 $(document).bind('keydown.dialog-overlay', function(event) {
558 (dialog.options.closeOnEscape && event.keyCode
559 && event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event));
560 });
561
562 // handle window resize
563 $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
564 }
565
566 var $el = $('<div></div>').appendTo(document.body)
567 .addClass('ui-widget-overlay').css({
568 width: this.width(),
569 height: this.height()
570 });
571
572 (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe());
573
574 this.instances.push($el);
575 return $el;
576 },
577
578 destroy: function($el) {
579 this.instances.splice($.inArray(this.instances, $el), 1);
580
581 if (this.instances.length === 0) {
582 $([document, window]).unbind('.dialog-overlay');
583 }
584
585 $el.remove();
586
587 // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
588 var maxZ = 0;
589 $.each(this.instances, function() {
590 maxZ = Math.max(maxZ, this.css('z-index'));
591 });
592 this.maxZ = maxZ;
593 },
594
595 height: function() {
596 // handle IE 6
597 if ($.browser.msie && $.browser.version < 7) {
598 var scrollHeight = Math.max(
599 document.documentElement.scrollHeight,
600 document.body.scrollHeight
601 );
602 var offsetHeight = Math.max(
603 document.documentElement.offsetHeight,
604 document.body.offsetHeight
605 );
606
607 if (scrollHeight < offsetHeight) {
608 return $(window).height() + 'px';
609 } else {
610 return scrollHeight + 'px';
611 }
612 // handle "good" browsers
613 } else {
614 return $(document).height() + 'px';
615 }
616 },
617
618 width: function() {
619 // handle IE 6
620 if ($.browser.msie && $.browser.version < 7) {
621 var scrollWidth = Math.max(
622 document.documentElement.scrollWidth,
623 document.body.scrollWidth
624 );
625 var offsetWidth = Math.max(
626 document.documentElement.offsetWidth,
627 document.body.offsetWidth
628 );
629
630 if (scrollWidth < offsetWidth) {
631 return $(window).width() + 'px';
632 } else {
633 return scrollWidth + 'px';
634 }
635 // handle "good" browsers
636 } else {
637 return $(document).width() + 'px';
638 }
639 },
640
641 resize: function() {
642 /* If the dialog is draggable and the user drags it past the
643 * right edge of the window, the document becomes wider so we
644 * need to stretch the overlay. If the user then drags the
645 * dialog back to the left, the document will become narrower,
646 * so we need to shrink the overlay to the appropriate size.
647 * This is handled by shrinking the overlay before setting it
648 * to the full document size.
649 */
650 var $overlays = $([]);
651 $.each($.ui.dialog.overlay.instances, function() {
652 $overlays = $overlays.add(this);
653 });
654
655 $overlays.css({
656 width: 0,
657 height: 0
658 }).css({
659 width: $.ui.dialog.overlay.width(),
660 height: $.ui.dialog.overlay.height()
661 });
662 }
663});
664
665$.extend($.ui.dialog.overlay.prototype, {
666 destroy: function() {
667 $.ui.dialog.overlay.destroy(this.$el);
668 }
669});
670
671})(jQuery);
diff --git a/static/development-bundle/ui/ui.draggable.js b/static/development-bundle/ui/ui.draggable.js
new file mode 100644
index 0000000..0402f0e
--- /dev/null
+++ b/static/development-bundle/ui/ui.draggable.js
@@ -0,0 +1,766 @@
1/*
2 * jQuery UI Draggable 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Draggables
9 *
10 * Depends:
11 * ui.core.js
12 */
13(function($) {
14
15$.widget("ui.draggable", $.extend({}, $.ui.mouse, {
16
17 _init: function() {
18
19 if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
20 this.element[0].style.position = 'relative';
21
22 (this.options.addClasses && this.element.addClass("ui-draggable"));
23 (this.options.disabled && this.element.addClass("ui-draggable-disabled"));
24
25 this._mouseInit();
26
27 },
28
29 destroy: function() {
30 if(!this.element.data('draggable')) return;
31 this.element
32 .removeData("draggable")
33 .unbind(".draggable")
34 .removeClass("ui-draggable"
35 + " ui-draggable-dragging"
36 + " ui-draggable-disabled");
37 this._mouseDestroy();
38 },
39
40 _mouseCapture: function(event) {
41
42 var o = this.options;
43
44 if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
45 return false;
46
47 //Quit if we're not on a valid handle
48 this.handle = this._getHandle(event);
49 if (!this.handle)
50 return false;
51
52 return true;
53
54 },
55
56 _mouseStart: function(event) {
57
58 var o = this.options;
59
60 //Create and append the visible helper
61 this.helper = this._createHelper(event);
62
63 //Cache the helper size
64 this._cacheHelperProportions();
65
66 //If ddmanager is used for droppables, set the global draggable
67 if($.ui.ddmanager)
68 $.ui.ddmanager.current = this;
69
70 /*
71 * - Position generation -
72 * This block generates everything position related - it's the core of draggables.
73 */
74
75 //Cache the margins of the original element
76 this._cacheMargins();
77
78 //Store the helper's css position
79 this.cssPosition = this.helper.css("position");
80 this.scrollParent = this.helper.scrollParent();
81
82 //The element's absolute position on the page minus margins
83 this.offset = this.element.offset();
84 this.offset = {
85 top: this.offset.top - this.margins.top,
86 left: this.offset.left - this.margins.left
87 };
88
89 $.extend(this.offset, {
90 click: { //Where the click happened, relative to the element
91 left: event.pageX - this.offset.left,
92 top: event.pageY - this.offset.top
93 },
94 parent: this._getParentOffset(),
95 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
96 });
97
98 //Generate the original position
99 this.originalPosition = this._generatePosition(event);
100 this.originalPageX = event.pageX;
101 this.originalPageY = event.pageY;
102
103 //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
104 if(o.cursorAt)
105 this._adjustOffsetFromHelper(o.cursorAt);
106
107 //Set a containment if given in the options
108 if(o.containment)
109 this._setContainment();
110
111 //Call plugins and callbacks
112 this._trigger("start", event);
113
114 //Recache the helper size
115 this._cacheHelperProportions();
116
117 //Prepare the droppable offsets
118 if ($.ui.ddmanager && !o.dropBehaviour)
119 $.ui.ddmanager.prepareOffsets(this, event);
120
121 this.helper.addClass("ui-draggable-dragging");
122 this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
123 return true;
124 },
125
126 _mouseDrag: function(event, noPropagation) {
127
128 //Compute the helpers position
129 this.position = this._generatePosition(event);
130 this.positionAbs = this._convertPositionTo("absolute");
131
132 //Call plugins and callbacks and use the resulting position if something is returned
133 if (!noPropagation) {
134 var ui = this._uiHash();
135 this._trigger('drag', event, ui);
136 this.position = ui.position;
137 }
138
139 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
140 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
141 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
142
143 return false;
144 },
145
146 _mouseStop: function(event) {
147
148 //If we are using droppables, inform the manager about the drop
149 var dropped = false;
150 if ($.ui.ddmanager && !this.options.dropBehaviour)
151 dropped = $.ui.ddmanager.drop(this, event);
152
153 //if a drop comes from outside (a sortable)
154 if(this.dropped) {
155 dropped = this.dropped;
156 this.dropped = false;
157 }
158
159 if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
160 var self = this;
161 $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
162 self._trigger("stop", event);
163 self._clear();
164 });
165 } else {
166 this._trigger("stop", event);
167 this._clear();
168 }
169
170 return false;
171 },
172
173 _getHandle: function(event) {
174
175 var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
176 $(this.options.handle, this.element)
177 .find("*")
178 .andSelf()
179 .each(function() {
180 if(this == event.target) handle = true;
181 });
182
183 return handle;
184
185 },
186
187 _createHelper: function(event) {
188
189 var o = this.options;
190 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element);
191
192 if(!helper.parents('body').length)
193 helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
194
195 if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
196 helper.css("position", "absolute");
197
198 return helper;
199
200 },
201
202 _adjustOffsetFromHelper: function(obj) {
203 if(obj.left != undefined) this.offset.click.left = obj.left + this.margins.left;
204 if(obj.right != undefined) this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
205 if(obj.top != undefined) this.offset.click.top = obj.top + this.margins.top;
206 if(obj.bottom != undefined) this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
207 },
208
209 _getParentOffset: function() {
210
211 //Get the offsetParent and cache its position
212 this.offsetParent = this.helper.offsetParent();
213 var po = this.offsetParent.offset();
214
215 // This is a special case where we need to modify a offset calculated on start, since the following happened:
216 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
217 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
218 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
219 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
220 po.left += this.scrollParent.scrollLeft();
221 po.top += this.scrollParent.scrollTop();
222 }
223
224 if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
225 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
226 po = { top: 0, left: 0 };
227
228 return {
229 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
230 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
231 };
232
233 },
234
235 _getRelativeOffset: function() {
236
237 if(this.cssPosition == "relative") {
238 var p = this.element.position();
239 return {
240 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
241 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
242 };
243 } else {
244 return { top: 0, left: 0 };
245 }
246
247 },
248
249 _cacheMargins: function() {
250 this.margins = {
251 left: (parseInt(this.element.css("marginLeft"),10) || 0),
252 top: (parseInt(this.element.css("marginTop"),10) || 0)
253 };
254 },
255
256 _cacheHelperProportions: function() {
257 this.helperProportions = {
258 width: this.helper.outerWidth(),
259 height: this.helper.outerHeight()
260 };
261 },
262
263 _setContainment: function() {
264
265 var o = this.options;
266 if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
267 if(o.containment == 'document' || o.containment == 'window') this.containment = [
268 0 - this.offset.relative.left - this.offset.parent.left,
269 0 - this.offset.relative.top - this.offset.parent.top,
270 $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
271 ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
272 ];
273
274 if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
275 var ce = $(o.containment)[0]; if(!ce) return;
276 var co = $(o.containment).offset();
277 var over = ($(ce).css("overflow") != 'hidden');
278
279 this.containment = [
280 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
281 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
282 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
283 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
284 ];
285 } else if(o.containment.constructor == Array) {
286 this.containment = o.containment;
287 }
288
289 },
290
291 _convertPositionTo: function(d, pos) {
292
293 if(!pos) pos = this.position;
294 var mod = d == "absolute" ? 1 : -1;
295 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
296
297 return {
298 top: (
299 pos.top // The absolute mouse position
300 + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
301 + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
302 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
303 ),
304 left: (
305 pos.left // The absolute mouse position
306 + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
307 + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
308 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
309 )
310 };
311
312 },
313
314 _generatePosition: function(event) {
315
316 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
317
318 // This is another very weird special case that only happens for relative elements:
319 // 1. If the css position is relative
320 // 2. and the scroll parent is the document or similar to the offset parent
321 // we have to refresh the relative offset during the scroll so there are no jumps
322 if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
323 this.offset.relative = this._getRelativeOffset();
324 }
325
326 var pageX = event.pageX;
327 var pageY = event.pageY;
328
329 /*
330 * - Position constraining -
331 * Constrain the position to a mix of grid, containment.
332 */
333
334 if(this.originalPosition) { //If we are not dragging yet, we won't check for options
335
336 if(this.containment) {
337 if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
338 if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
339 if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
340 if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
341 }
342
343 if(o.grid) {
344 var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
345 pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
346
347 var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
348 pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
349 }
350
351 }
352
353 return {
354 top: (
355 pageY // The absolute mouse position
356 - this.offset.click.top // Click offset (relative to the element)
357 - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
358 - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
359 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
360 ),
361 left: (
362 pageX // The absolute mouse position
363 - this.offset.click.left // Click offset (relative to the element)
364 - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
365 - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
366 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
367 )
368 };
369
370 },
371
372 _clear: function() {
373 this.helper.removeClass("ui-draggable-dragging");
374 if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
375 //if($.ui.ddmanager) $.ui.ddmanager.current = null;
376 this.helper = null;
377 this.cancelHelperRemoval = false;
378 },
379
380 // From now on bulk stuff - mainly helpers
381
382 _trigger: function(type, event, ui) {
383 ui = ui || this._uiHash();
384 $.ui.plugin.call(this, type, [event, ui]);
385 if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
386 return $.widget.prototype._trigger.call(this, type, event, ui);
387 },
388
389 plugins: {},
390
391 _uiHash: function(event) {
392 return {
393 helper: this.helper,
394 position: this.position,
395 absolutePosition: this.positionAbs, //deprecated
396 offset: this.positionAbs
397 };
398 }
399
400}));
401
402$.extend($.ui.draggable, {
403 version: "1.7.2",
404 eventPrefix: "drag",
405 defaults: {
406 addClasses: true,
407 appendTo: "parent",
408 axis: false,
409 cancel: ":input,option",
410 connectToSortable: false,
411 containment: false,
412 cursor: "auto",
413 cursorAt: false,
414 delay: 0,
415 distance: 1,
416 grid: false,
417 handle: false,
418 helper: "original",
419 iframeFix: false,
420 opacity: false,
421 refreshPositions: false,
422 revert: false,
423 revertDuration: 500,
424 scope: "default",
425 scroll: true,
426 scrollSensitivity: 20,
427 scrollSpeed: 20,
428 snap: false,
429 snapMode: "both",
430 snapTolerance: 20,
431 stack: false,
432 zIndex: false
433 }
434});
435
436$.ui.plugin.add("draggable", "connectToSortable", {
437 start: function(event, ui) {
438
439 var inst = $(this).data("draggable"), o = inst.options,
440 uiSortable = $.extend({}, ui, { item: inst.element });
441 inst.sortables = [];
442 $(o.connectToSortable).each(function() {
443 var sortable = $.data(this, 'sortable');
444 if (sortable && !sortable.options.disabled) {
445 inst.sortables.push({
446 instance: sortable,
447 shouldRevert: sortable.options.revert
448 });
449 sortable._refreshItems(); //Do a one-time refresh at start to refresh the containerCache
450 sortable._trigger("activate", event, uiSortable);
451 }
452 });
453
454 },
455 stop: function(event, ui) {
456
457 //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
458 var inst = $(this).data("draggable"),
459 uiSortable = $.extend({}, ui, { item: inst.element });
460
461 $.each(inst.sortables, function() {
462 if(this.instance.isOver) {
463
464 this.instance.isOver = 0;
465
466 inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
467 this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
468
469 //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
470 if(this.shouldRevert) this.instance.options.revert = true;
471
472 //Trigger the stop of the sortable
473 this.instance._mouseStop(event);
474
475 this.instance.options.helper = this.instance.options._helper;
476
477 //If the helper has been the original item, restore properties in the sortable
478 if(inst.options.helper == 'original')
479 this.instance.currentItem.css({ top: 'auto', left: 'auto' });
480
481 } else {
482 this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
483 this.instance._trigger("deactivate", event, uiSortable);
484 }
485
486 });
487
488 },
489 drag: function(event, ui) {
490
491 var inst = $(this).data("draggable"), self = this;
492
493 var checkPos = function(o) {
494 var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
495 var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
496 var itemHeight = o.height, itemWidth = o.width;
497 var itemTop = o.top, itemLeft = o.left;
498
499 return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
500 };
501
502 $.each(inst.sortables, function(i) {
503
504 //Copy over some variables to allow calling the sortable's native _intersectsWith
505 this.instance.positionAbs = inst.positionAbs;
506 this.instance.helperProportions = inst.helperProportions;
507 this.instance.offset.click = inst.offset.click;
508
509 if(this.instance._intersectsWith(this.instance.containerCache)) {
510
511 //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
512 if(!this.instance.isOver) {
513
514 this.instance.isOver = 1;
515 //Now we fake the start of dragging for the sortable instance,
516 //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
517 //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
518 this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
519 this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
520 this.instance.options.helper = function() { return ui.helper[0]; };
521
522 event.target = this.instance.currentItem[0];
523 this.instance._mouseCapture(event, true);
524 this.instance._mouseStart(event, true, true);
525
526 //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
527 this.instance.offset.click.top = inst.offset.click.top;
528 this.instance.offset.click.left = inst.offset.click.left;
529 this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
530 this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
531
532 inst._trigger("toSortable", event);
533 inst.dropped = this.instance.element; //draggable revert needs that
534 //hack so receive/update callbacks work (mostly)
535 inst.currentItem = inst.element;
536 this.instance.fromOutside = inst;
537
538 }
539
540 //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
541 if(this.instance.currentItem) this.instance._mouseDrag(event);
542
543 } else {
544
545 //If it doesn't intersect with the sortable, and it intersected before,
546 //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
547 if(this.instance.isOver) {
548
549 this.instance.isOver = 0;
550 this.instance.cancelHelperRemoval = true;
551
552 //Prevent reverting on this forced stop
553 this.instance.options.revert = false;
554
555 // The out event needs to be triggered independently
556 this.instance._trigger('out', event, this.instance._uiHash(this.instance));
557
558 this.instance._mouseStop(event, true);
559 this.instance.options.helper = this.instance.options._helper;
560
561 //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
562 this.instance.currentItem.remove();
563 if(this.instance.placeholder) this.instance.placeholder.remove();
564
565 inst._trigger("fromSortable", event);
566 inst.dropped = false; //draggable revert needs that
567 }
568
569 };
570
571 });
572
573 }
574});
575
576$.ui.plugin.add("draggable", "cursor", {
577 start: function(event, ui) {
578 var t = $('body'), o = $(this).data('draggable').options;
579 if (t.css("cursor")) o._cursor = t.css("cursor");
580 t.css("cursor", o.cursor);
581 },
582 stop: function(event, ui) {
583 var o = $(this).data('draggable').options;
584 if (o._cursor) $('body').css("cursor", o._cursor);
585 }
586});
587
588$.ui.plugin.add("draggable", "iframeFix", {
589 start: function(event, ui) {
590 var o = $(this).data('draggable').options;
591 $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
592 $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
593 .css({
594 width: this.offsetWidth+"px", height: this.offsetHeight+"px",
595 position: "absolute", opacity: "0.001", zIndex: 1000
596 })
597 .css($(this).offset())
598 .appendTo("body");
599 });
600 },
601 stop: function(event, ui) {
602 $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers
603 }
604});
605
606$.ui.plugin.add("draggable", "opacity", {
607 start: function(event, ui) {
608 var t = $(ui.helper), o = $(this).data('draggable').options;
609 if(t.css("opacity")) o._opacity = t.css("opacity");
610 t.css('opacity', o.opacity);
611 },
612 stop: function(event, ui) {
613 var o = $(this).data('draggable').options;
614 if(o._opacity) $(ui.helper).css('opacity', o._opacity);
615 }
616});
617
618$.ui.plugin.add("draggable", "scroll", {
619 start: function(event, ui) {
620 var i = $(this).data("draggable");
621 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
622 },
623 drag: function(event, ui) {
624
625 var i = $(this).data("draggable"), o = i.options, scrolled = false;
626
627 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
628
629 if(!o.axis || o.axis != 'x') {
630 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
631 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
632 else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
633 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
634 }
635
636 if(!o.axis || o.axis != 'y') {
637 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
638 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
639 else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
640 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
641 }
642
643 } else {
644
645 if(!o.axis || o.axis != 'x') {
646 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
647 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
648 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
649 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
650 }
651
652 if(!o.axis || o.axis != 'y') {
653 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
654 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
655 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
656 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
657 }
658
659 }
660
661 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
662 $.ui.ddmanager.prepareOffsets(i, event);
663
664 }
665});
666
667$.ui.plugin.add("draggable", "snap", {
668 start: function(event, ui) {
669
670 var i = $(this).data("draggable"), o = i.options;
671 i.snapElements = [];
672
673 $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
674 var $t = $(this); var $o = $t.offset();
675 if(this != i.element[0]) i.snapElements.push({
676 item: this,
677 width: $t.outerWidth(), height: $t.outerHeight(),
678 top: $o.top, left: $o.left
679 });
680 });
681
682 },
683 drag: function(event, ui) {
684
685 var inst = $(this).data("draggable"), o = inst.options;
686 var d = o.snapTolerance;
687
688 var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
689 y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
690
691 for (var i = inst.snapElements.length - 1; i >= 0; i--){
692
693 var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
694 t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
695
696 //Yes, I know, this is insane ;)
697 if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
698 if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
699 inst.snapElements[i].snapping = false;
700 continue;
701 }
702
703 if(o.snapMode != 'inner') {
704 var ts = Math.abs(t - y2) <= d;
705 var bs = Math.abs(b - y1) <= d;
706 var ls = Math.abs(l - x2) <= d;
707 var rs = Math.abs(r - x1) <= d;
708 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
709 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
710 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
711 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
712 }
713
714 var first = (ts || bs || ls || rs);
715
716 if(o.snapMode != 'outer') {
717 var ts = Math.abs(t - y1) <= d;
718 var bs = Math.abs(b - y2) <= d;
719 var ls = Math.abs(l - x1) <= d;
720 var rs = Math.abs(r - x2) <= d;
721 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
722 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
723 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
724 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
725 }
726
727 if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
728 (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
729 inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
730
731 };
732
733 }
734});
735
736$.ui.plugin.add("draggable", "stack", {
737 start: function(event, ui) {
738
739 var o = $(this).data("draggable").options;
740
741 var group = $.makeArray($(o.stack.group)).sort(function(a,b) {
742 return (parseInt($(a).css("zIndex"),10) || o.stack.min) - (parseInt($(b).css("zIndex"),10) || o.stack.min);
743 });
744
745 $(group).each(function(i) {
746 this.style.zIndex = o.stack.min + i;
747 });
748
749 this[0].style.zIndex = o.stack.min + group.length;
750
751 }
752});
753
754$.ui.plugin.add("draggable", "zIndex", {
755 start: function(event, ui) {
756 var t = $(ui.helper), o = $(this).data("draggable").options;
757 if(t.css("zIndex")) o._zIndex = t.css("zIndex");
758 t.css('zIndex', o.zIndex);
759 },
760 stop: function(event, ui) {
761 var o = $(this).data("draggable").options;
762 if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
763 }
764});
765
766})(jQuery);
diff --git a/static/development-bundle/ui/ui.droppable.js b/static/development-bundle/ui/ui.droppable.js
new file mode 100644
index 0000000..8e7be33
--- /dev/null
+++ b/static/development-bundle/ui/ui.droppable.js
@@ -0,0 +1,282 @@
1/*
2 * jQuery UI Droppable 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Droppables
9 *
10 * Depends:
11 * ui.core.js
12 * ui.draggable.js
13 */
14(function($) {
15
16$.widget("ui.droppable", {
17
18 _init: function() {
19
20 var o = this.options, accept = o.accept;
21 this.isover = 0; this.isout = 1;
22
23 this.options.accept = this.options.accept && $.isFunction(this.options.accept) ? this.options.accept : function(d) {
24 return d.is(accept);
25 };
26
27 //Store the droppable's proportions
28 this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
29
30 // Add the reference and positions to the manager
31 $.ui.ddmanager.droppables[this.options.scope] = $.ui.ddmanager.droppables[this.options.scope] || [];
32 $.ui.ddmanager.droppables[this.options.scope].push(this);
33
34 (this.options.addClasses && this.element.addClass("ui-droppable"));
35
36 },
37
38 destroy: function() {
39 var drop = $.ui.ddmanager.droppables[this.options.scope];
40 for ( var i = 0; i < drop.length; i++ )
41 if ( drop[i] == this )
42 drop.splice(i, 1);
43
44 this.element
45 .removeClass("ui-droppable ui-droppable-disabled")
46 .removeData("droppable")
47 .unbind(".droppable");
48 },
49
50 _setData: function(key, value) {
51
52 if(key == 'accept') {
53 this.options.accept = value && $.isFunction(value) ? value : function(d) {
54 return d.is(value);
55 };
56 } else {
57 $.widget.prototype._setData.apply(this, arguments);
58 }
59
60 },
61
62 _activate: function(event) {
63 var draggable = $.ui.ddmanager.current;
64 if(this.options.activeClass) this.element.addClass(this.options.activeClass);
65 (draggable && this._trigger('activate', event, this.ui(draggable)));
66 },
67
68 _deactivate: function(event) {
69 var draggable = $.ui.ddmanager.current;
70 if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
71 (draggable && this._trigger('deactivate', event, this.ui(draggable)));
72 },
73
74 _over: function(event) {
75
76 var draggable = $.ui.ddmanager.current;
77 if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
78
79 if (this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
80 if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
81 this._trigger('over', event, this.ui(draggable));
82 }
83
84 },
85
86 _out: function(event) {
87
88 var draggable = $.ui.ddmanager.current;
89 if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
90
91 if (this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
92 if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
93 this._trigger('out', event, this.ui(draggable));
94 }
95
96 },
97
98 _drop: function(event,custom) {
99
100 var draggable = custom || $.ui.ddmanager.current;
101 if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element
102
103 var childrenIntersection = false;
104 this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
105 var inst = $.data(this, 'droppable');
106 if(inst.options.greedy && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)) {
107 childrenIntersection = true; return false;
108 }
109 });
110 if(childrenIntersection) return false;
111
112 if(this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
113 if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
114 if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
115 this._trigger('drop', event, this.ui(draggable));
116 return this.element;
117 }
118
119 return false;
120
121 },
122
123 ui: function(c) {
124 return {
125 draggable: (c.currentItem || c.element),
126 helper: c.helper,
127 position: c.position,
128 absolutePosition: c.positionAbs, //deprecated
129 offset: c.positionAbs
130 };
131 }
132
133});
134
135$.extend($.ui.droppable, {
136 version: "1.7.2",
137 eventPrefix: 'drop',
138 defaults: {
139 accept: '*',
140 activeClass: false,
141 addClasses: true,
142 greedy: false,
143 hoverClass: false,
144 scope: 'default',
145 tolerance: 'intersect'
146 }
147});
148
149$.ui.intersect = function(draggable, droppable, toleranceMode) {
150
151 if (!droppable.offset) return false;
152
153 var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
154 y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
155 var l = droppable.offset.left, r = l + droppable.proportions.width,
156 t = droppable.offset.top, b = t + droppable.proportions.height;
157
158 switch (toleranceMode) {
159 case 'fit':
160 return (l < x1 && x2 < r
161 && t < y1 && y2 < b);
162 break;
163 case 'intersect':
164 return (l < x1 + (draggable.helperProportions.width / 2) // Right Half
165 && x2 - (draggable.helperProportions.width / 2) < r // Left Half
166 && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half
167 && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
168 break;
169 case 'pointer':
170 var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),
171 draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),
172 isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
173 return isOver;
174 break;
175 case 'touch':
176 return (
177 (y1 >= t && y1 <= b) || // Top edge touching
178 (y2 >= t && y2 <= b) || // Bottom edge touching
179 (y1 < t && y2 > b) // Surrounded vertically
180 ) && (
181 (x1 >= l && x1 <= r) || // Left edge touching
182 (x2 >= l && x2 <= r) || // Right edge touching
183 (x1 < l && x2 > r) // Surrounded horizontally
184 );
185 break;
186 default:
187 return false;
188 break;
189 }
190
191};
192
193/*
194 This manager tracks offsets of draggables and droppables
195*/
196$.ui.ddmanager = {
197 current: null,
198 droppables: { 'default': [] },
199 prepareOffsets: function(t, event) {
200
201 var m = $.ui.ddmanager.droppables[t.options.scope];
202 var type = event ? event.type : null; // workaround for #2317
203 var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
204
205 droppablesLoop: for (var i = 0; i < m.length; i++) {
206
207 if(m[i].options.disabled || (t && !m[i].options.accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted
208 for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item
209 m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue
210
211 m[i].offset = m[i].element.offset();
212 m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
213
214 if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables
215
216 }
217
218 },
219 drop: function(draggable, event) {
220
221 var dropped = false;
222 $.each($.ui.ddmanager.droppables[draggable.options.scope], function() {
223
224 if(!this.options) return;
225 if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
226 dropped = this._drop.call(this, event);
227
228 if (!this.options.disabled && this.visible && this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
229 this.isout = 1; this.isover = 0;
230 this._deactivate.call(this, event);
231 }
232
233 });
234 return dropped;
235
236 },
237 drag: function(draggable, event) {
238
239 //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
240 if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);
241
242 //Run through all droppables and check their positions based on specific tolerance options
243
244 $.each($.ui.ddmanager.droppables[draggable.options.scope], function() {
245
246 if(this.options.disabled || this.greedyChild || !this.visible) return;
247 var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
248
249 var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
250 if(!c) return;
251
252 var parentInstance;
253 if (this.options.greedy) {
254 var parent = this.element.parents(':data(droppable):eq(0)');
255 if (parent.length) {
256 parentInstance = $.data(parent[0], 'droppable');
257 parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
258 }
259 }
260
261 // we just moved into a greedy child
262 if (parentInstance && c == 'isover') {
263 parentInstance['isover'] = 0;
264 parentInstance['isout'] = 1;
265 parentInstance._out.call(parentInstance, event);
266 }
267
268 this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;
269 this[c == "isover" ? "_over" : "_out"].call(this, event);
270
271 // we just moved out of a greedy child
272 if (parentInstance && c == 'isout') {
273 parentInstance['isout'] = 0;
274 parentInstance['isover'] = 1;
275 parentInstance._over.call(parentInstance, event);
276 }
277 });
278
279 }
280};
281
282})(jQuery);
diff --git a/static/development-bundle/ui/ui.progressbar.js b/static/development-bundle/ui/ui.progressbar.js
new file mode 100644
index 0000000..30aac98
--- /dev/null
+++ b/static/development-bundle/ui/ui.progressbar.js
@@ -0,0 +1,116 @@
1/*
2 * jQuery UI Progressbar 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Progressbar
9 *
10 * Depends:
11 * ui.core.js
12 */
13(function($) {
14
15$.widget("ui.progressbar", {
16
17 _init: function() {
18
19 this.element
20 .addClass("ui-progressbar"
21 + " ui-widget"
22 + " ui-widget-content"
23 + " ui-corner-all")
24 .attr({
25 role: "progressbar",
26 "aria-valuemin": this._valueMin(),
27 "aria-valuemax": this._valueMax(),
28 "aria-valuenow": this._value()
29 });
30
31 this.valueDiv = $('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);
32
33 this._refreshValue();
34
35 },
36
37 destroy: function() {
38
39 this.element
40 .removeClass("ui-progressbar"
41 + " ui-widget"
42 + " ui-widget-content"
43 + " ui-corner-all")
44 .removeAttr("role")
45 .removeAttr("aria-valuemin")
46 .removeAttr("aria-valuemax")
47 .removeAttr("aria-valuenow")
48 .removeData("progressbar")
49 .unbind(".progressbar");
50
51 this.valueDiv.remove();
52
53 $.widget.prototype.destroy.apply(this, arguments);
54
55 },
56
57 value: function(newValue) {
58 if (newValue === undefined) {
59 return this._value();
60 }
61
62 this._setData('value', newValue);
63 return this;
64 },
65
66 _setData: function(key, value) {
67
68 switch (key) {
69 case 'value':
70 this.options.value = value;
71 this._refreshValue();
72 this._trigger('change', null, {});
73 break;
74 }
75
76 $.widget.prototype._setData.apply(this, arguments);
77
78 },
79
80 _value: function() {
81
82 var val = this.options.value;
83 if (val < this._valueMin()) val = this._valueMin();
84 if (val > this._valueMax()) val = this._valueMax();
85
86 return val;
87
88 },
89
90 _valueMin: function() {
91 var valueMin = 0;
92 return valueMin;
93 },
94
95 _valueMax: function() {
96 var valueMax = 100;
97 return valueMax;
98 },
99
100 _refreshValue: function() {
101 var value = this.value();
102 this.valueDiv[value == this._valueMax() ? 'addClass' : 'removeClass']("ui-corner-right");
103 this.valueDiv.width(value + '%');
104 this.element.attr("aria-valuenow", value);
105 }
106
107});
108
109$.extend($.ui.progressbar, {
110 version: "1.7.2",
111 defaults: {
112 value: 0
113 }
114});
115
116})(jQuery);
diff --git a/static/development-bundle/ui/ui.resizable.js b/static/development-bundle/ui/ui.resizable.js
new file mode 100644
index 0000000..6172d6c
--- /dev/null
+++ b/static/development-bundle/ui/ui.resizable.js
@@ -0,0 +1,800 @@
1/*
2 * jQuery UI Resizable 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Resizables
9 *
10 * Depends:
11 * ui.core.js
12 */
13(function($) {
14
15$.widget("ui.resizable", $.extend({}, $.ui.mouse, {
16
17 _init: function() {
18
19 var self = this, o = this.options;
20 this.element.addClass("ui-resizable");
21
22 $.extend(this, {
23 _aspectRatio: !!(o.aspectRatio),
24 aspectRatio: o.aspectRatio,
25 originalElement: this.element,
26 _proportionallyResizeElements: [],
27 _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
28 });
29
30 //Wrap the element if it cannot hold child nodes
31 if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
32
33 //Opera fix for relative positioning
34 if (/relative/.test(this.element.css('position')) && $.browser.opera)
35 this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
36
37 //Create a wrapper element and set the wrapper to the new current internal element
38 this.element.wrap(
39 $('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
40 position: this.element.css('position'),
41 width: this.element.outerWidth(),
42 height: this.element.outerHeight(),
43 top: this.element.css('top'),
44 left: this.element.css('left')
45 })
46 );
47
48 //Overwrite the original this.element
49 this.element = this.element.parent().data(
50 "resizable", this.element.data('resizable')
51 );
52
53 this.elementIsWrapper = true;
54
55 //Move margins to the wrapper
56 this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
57 this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
58
59 //Prevent Safari textarea resize
60 this.originalResizeStyle = this.originalElement.css('resize');
61 this.originalElement.css('resize', 'none');
62
63 //Push the actual element to our proportionallyResize internal array
64 this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
65
66 // avoid IE jump (hard set the margin)
67 this.originalElement.css({ margin: this.originalElement.css('margin') });
68
69 // fix handlers offset
70 this._proportionallyResize();
71
72 }
73
74 this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
75 if(this.handles.constructor == String) {
76
77 if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
78 var n = this.handles.split(","); this.handles = {};
79
80 for(var i = 0; i < n.length; i++) {
81
82 var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
83 var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
84
85 // increase zIndex of sw, se, ne, nw axis
86 //TODO : this modifies original option
87 if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
88
89 //TODO : What's going on here?
90 if ('se' == handle) {
91 axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
92 };
93
94 //Insert into internal handles object and append to element
95 this.handles[handle] = '.ui-resizable-'+handle;
96 this.element.append(axis);
97 }
98
99 }
100
101 this._renderAxis = function(target) {
102
103 target = target || this.element;
104
105 for(var i in this.handles) {
106
107 if(this.handles[i].constructor == String)
108 this.handles[i] = $(this.handles[i], this.element).show();
109
110 //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
111 if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
112
113 var axis = $(this.handles[i], this.element), padWrapper = 0;
114
115 //Checking the correct pad and border
116 padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
117
118 //The padding type i have to apply...
119 var padPos = [ 'padding',
120 /ne|nw|n/.test(i) ? 'Top' :
121 /se|sw|s/.test(i) ? 'Bottom' :
122 /^e$/.test(i) ? 'Right' : 'Left' ].join("");
123
124 target.css(padPos, padWrapper);
125
126 this._proportionallyResize();
127
128 }
129
130 //TODO: What's that good for? There's not anything to be executed left
131 if(!$(this.handles[i]).length)
132 continue;
133
134 }
135 };
136
137 //TODO: make renderAxis a prototype function
138 this._renderAxis(this.element);
139
140 this._handles = $('.ui-resizable-handle', this.element)
141 .disableSelection();
142
143 //Matching axis name
144 this._handles.mouseover(function() {
145 if (!self.resizing) {
146 if (this.className)
147 var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
148 //Axis, default = se
149 self.axis = axis && axis[1] ? axis[1] : 'se';
150 }
151 });
152
153 //If we want to auto hide the elements
154 if (o.autoHide) {
155 this._handles.hide();
156 $(this.element)
157 .addClass("ui-resizable-autohide")
158 .hover(function() {
159 $(this).removeClass("ui-resizable-autohide");
160 self._handles.show();
161 },
162 function(){
163 if (!self.resizing) {
164 $(this).addClass("ui-resizable-autohide");
165 self._handles.hide();
166 }
167 });
168 }
169
170 //Initialize the mouse interaction
171 this._mouseInit();
172
173 },
174
175 destroy: function() {
176
177 this._mouseDestroy();
178
179 var _destroy = function(exp) {
180 $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
181 .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
182 };
183
184 //TODO: Unwrap at same DOM position
185 if (this.elementIsWrapper) {
186 _destroy(this.element);
187 var wrapper = this.element;
188 wrapper.parent().append(
189 this.originalElement.css({
190 position: wrapper.css('position'),
191 width: wrapper.outerWidth(),
192 height: wrapper.outerHeight(),
193 top: wrapper.css('top'),
194 left: wrapper.css('left')
195 })
196 ).end().remove();
197 }
198
199 this.originalElement.css('resize', this.originalResizeStyle);
200 _destroy(this.originalElement);
201
202 },
203
204 _mouseCapture: function(event) {
205
206 var handle = false;
207 for(var i in this.handles) {
208 if($(this.handles[i])[0] == event.target) handle = true;
209 }
210
211 return this.options.disabled || !!handle;
212
213 },
214
215 _mouseStart: function(event) {
216
217 var o = this.options, iniPos = this.element.position(), el = this.element;
218
219 this.resizing = true;
220 this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
221
222 // bugfix for http://dev.jquery.com/ticket/1749
223 if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
224 el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
225 }
226
227 //Opera fixing relative position
228 if ($.browser.opera && (/relative/).test(el.css('position')))
229 el.css({ position: 'relative', top: 'auto', left: 'auto' });
230
231 this._renderProxy();
232
233 var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
234
235 if (o.containment) {
236 curleft += $(o.containment).scrollLeft() || 0;
237 curtop += $(o.containment).scrollTop() || 0;
238 }
239
240 //Store needed variables
241 this.offset = this.helper.offset();
242 this.position = { left: curleft, top: curtop };
243 this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
244 this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
245 this.originalPosition = { left: curleft, top: curtop };
246 this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
247 this.originalMousePosition = { left: event.pageX, top: event.pageY };
248
249 //Aspect Ratio
250 this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
251
252 var cursor = $('.ui-resizable-' + this.axis).css('cursor');
253 $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
254
255 el.addClass("ui-resizable-resizing");
256 this._propagate("start", event);
257 return true;
258 },
259
260 _mouseDrag: function(event) {
261
262 //Increase performance, avoid regex
263 var el = this.helper, o = this.options, props = {},
264 self = this, smp = this.originalMousePosition, a = this.axis;
265
266 var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
267 var trigger = this._change[a];
268 if (!trigger) return false;
269
270 // Calculate the attrs that will be change
271 var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
272
273 if (this._aspectRatio || event.shiftKey)
274 data = this._updateRatio(data, event);
275
276 data = this._respectSize(data, event);
277
278 // plugins callbacks need to be called first
279 this._propagate("resize", event);
280
281 el.css({
282 top: this.position.top + "px", left: this.position.left + "px",
283 width: this.size.width + "px", height: this.size.height + "px"
284 });
285
286 if (!this._helper && this._proportionallyResizeElements.length)
287 this._proportionallyResize();
288
289 this._updateCache(data);
290
291 // calling the user callback at the end
292 this._trigger('resize', event, this.ui());
293
294 return false;
295 },
296
297 _mouseStop: function(event) {
298
299 this.resizing = false;
300 var o = this.options, self = this;
301
302 if(this._helper) {
303 var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
304 soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
305 soffsetw = ista ? 0 : self.sizeDiff.width;
306
307 var s = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
308 left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
309 top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
310
311 if (!o.animate)
312 this.element.css($.extend(s, { top: top, left: left }));
313
314 self.helper.height(self.size.height);
315 self.helper.width(self.size.width);
316
317 if (this._helper && !o.animate) this._proportionallyResize();
318 }
319
320 $('body').css('cursor', 'auto');
321
322 this.element.removeClass("ui-resizable-resizing");
323
324 this._propagate("stop", event);
325
326 if (this._helper) this.helper.remove();
327 return false;
328
329 },
330
331 _updateCache: function(data) {
332 var o = this.options;
333 this.offset = this.helper.offset();
334 if (isNumber(data.left)) this.position.left = data.left;
335 if (isNumber(data.top)) this.position.top = data.top;
336 if (isNumber(data.height)) this.size.height = data.height;
337 if (isNumber(data.width)) this.size.width = data.width;
338 },
339
340 _updateRatio: function(data, event) {
341
342 var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
343
344 if (data.height) data.width = (csize.height * this.aspectRatio);
345 else if (data.width) data.height = (csize.width / this.aspectRatio);
346
347 if (a == 'sw') {
348 data.left = cpos.left + (csize.width - data.width);
349 data.top = null;
350 }
351 if (a == 'nw') {
352 data.top = cpos.top + (csize.height - data.height);
353 data.left = cpos.left + (csize.width - data.width);
354 }
355
356 return data;
357 },
358
359 _respectSize: function(data, event) {
360
361 var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
362 ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
363 isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
364
365 if (isminw) data.width = o.minWidth;
366 if (isminh) data.height = o.minHeight;
367 if (ismaxw) data.width = o.maxWidth;
368 if (ismaxh) data.height = o.maxHeight;
369
370 var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
371 var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
372
373 if (isminw && cw) data.left = dw - o.minWidth;
374 if (ismaxw && cw) data.left = dw - o.maxWidth;
375 if (isminh && ch) data.top = dh - o.minHeight;
376 if (ismaxh && ch) data.top = dh - o.maxHeight;
377
378 // fixing jump error on top/left - bug #2330
379 var isNotwh = !data.width && !data.height;
380 if (isNotwh && !data.left && data.top) data.top = null;
381 else if (isNotwh && !data.top && data.left) data.left = null;
382
383 return data;
384 },
385
386 _proportionallyResize: function() {
387
388 var o = this.options;
389 if (!this._proportionallyResizeElements.length) return;
390 var element = this.helper || this.element;
391
392 for (var i=0; i < this._proportionallyResizeElements.length; i++) {
393
394 var prel = this._proportionallyResizeElements[i];
395
396 if (!this.borderDif) {
397 var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
398 p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
399
400 this.borderDif = $.map(b, function(v, i) {
401 var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
402 return border + padding;
403 });
404 }
405
406 if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
407 continue;
408
409 prel.css({
410 height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
411 width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
412 });
413
414 };
415
416 },
417
418 _renderProxy: function() {
419
420 var el = this.element, o = this.options;
421 this.elementOffset = el.offset();
422
423 if(this._helper) {
424
425 this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
426
427 // fix ie6 offset TODO: This seems broken
428 var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
429 pxyoffset = ( ie6 ? 2 : -1 );
430
431 this.helper.addClass(this._helper).css({
432 width: this.element.outerWidth() + pxyoffset,
433 height: this.element.outerHeight() + pxyoffset,
434 position: 'absolute',
435 left: this.elementOffset.left - ie6offset +'px',
436 top: this.elementOffset.top - ie6offset +'px',
437 zIndex: ++o.zIndex //TODO: Don't modify option
438 });
439
440 this.helper
441 .appendTo("body")
442 .disableSelection();
443
444 } else {
445 this.helper = this.element;
446 }
447
448 },
449
450 _change: {
451 e: function(event, dx, dy) {
452 return { width: this.originalSize.width + dx };
453 },
454 w: function(event, dx, dy) {
455 var o = this.options, cs = this.originalSize, sp = this.originalPosition;
456 return { left: sp.left + dx, width: cs.width - dx };
457 },
458 n: function(event, dx, dy) {
459 var o = this.options, cs = this.originalSize, sp = this.originalPosition;
460 return { top: sp.top + dy, height: cs.height - dy };
461 },
462 s: function(event, dx, dy) {
463 return { height: this.originalSize.height + dy };
464 },
465 se: function(event, dx, dy) {
466 return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
467 },
468 sw: function(event, dx, dy) {
469 return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
470 },
471 ne: function(event, dx, dy) {
472 return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
473 },
474 nw: function(event, dx, dy) {
475 return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
476 }
477 },
478
479 _propagate: function(n, event) {
480 $.ui.plugin.call(this, n, [event, this.ui()]);
481 (n != "resize" && this._trigger(n, event, this.ui()));
482 },
483
484 plugins: {},
485
486 ui: function() {
487 return {
488 originalElement: this.originalElement,
489 element: this.element,
490 helper: this.helper,
491 position: this.position,
492 size: this.size,
493 originalSize: this.originalSize,
494 originalPosition: this.originalPosition
495 };
496 }
497
498}));
499
500$.extend($.ui.resizable, {
501 version: "1.7.2",
502 eventPrefix: "resize",
503 defaults: {
504 alsoResize: false,
505 animate: false,
506 animateDuration: "slow",
507 animateEasing: "swing",
508 aspectRatio: false,
509 autoHide: false,
510 cancel: ":input,option",
511 containment: false,
512 delay: 0,
513 distance: 1,
514 ghost: false,
515 grid: false,
516 handles: "e,s,se",
517 helper: false,
518 maxHeight: null,
519 maxWidth: null,
520 minHeight: 10,
521 minWidth: 10,
522 zIndex: 1000
523 }
524});
525
526/*
527 * Resizable Extensions
528 */
529
530$.ui.plugin.add("resizable", "alsoResize", {
531
532 start: function(event, ui) {
533
534 var self = $(this).data("resizable"), o = self.options;
535
536 _store = function(exp) {
537 $(exp).each(function() {
538 $(this).data("resizable-alsoresize", {
539 width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10),
540 left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10)
541 });
542 });
543 };
544
545 if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
546 if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
547 else { $.each(o.alsoResize, function(exp, c) { _store(exp); }); }
548 }else{
549 _store(o.alsoResize);
550 }
551 },
552
553 resize: function(event, ui){
554 var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
555
556 var delta = {
557 height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
558 top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
559 },
560
561 _alsoResize = function(exp, c) {
562 $(exp).each(function() {
563 var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left'];
564
565 $.each(css || ['width', 'height', 'top', 'left'], function(i, prop) {
566 var sum = (start[prop]||0) + (delta[prop]||0);
567 if (sum && sum >= 0)
568 style[prop] = sum || null;
569 });
570
571 //Opera fixing relative position
572 if (/relative/.test(el.css('position')) && $.browser.opera) {
573 self._revertToRelativePosition = true;
574 el.css({ position: 'absolute', top: 'auto', left: 'auto' });
575 }
576
577 el.css(style);
578 });
579 };
580
581 if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
582 $.each(o.alsoResize, function(exp, c) { _alsoResize(exp, c); });
583 }else{
584 _alsoResize(o.alsoResize);
585 }
586 },
587
588 stop: function(event, ui){
589 var self = $(this).data("resizable");
590
591 //Opera fixing relative position
592 if (self._revertToRelativePosition && $.browser.opera) {
593 self._revertToRelativePosition = false;
594 el.css({ position: 'relative' });
595 }
596
597 $(this).removeData("resizable-alsoresize-start");
598 }
599});
600
601$.ui.plugin.add("resizable", "animate", {
602
603 stop: function(event, ui) {
604 var self = $(this).data("resizable"), o = self.options;
605
606 var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
607 soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
608 soffsetw = ista ? 0 : self.sizeDiff.width;
609
610 var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
611 left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
612 top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
613
614 self.element.animate(
615 $.extend(style, top && left ? { top: top, left: left } : {}), {
616 duration: o.animateDuration,
617 easing: o.animateEasing,
618 step: function() {
619
620 var data = {
621 width: parseInt(self.element.css('width'), 10),
622 height: parseInt(self.element.css('height'), 10),
623 top: parseInt(self.element.css('top'), 10),
624 left: parseInt(self.element.css('left'), 10)
625 };
626
627 if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
628
629 // propagating resize, and updating values for each animation step
630 self._updateCache(data);
631 self._propagate("resize", event);
632
633 }
634 }
635 );
636 }
637
638});
639
640$.ui.plugin.add("resizable", "containment", {
641
642 start: function(event, ui) {
643 var self = $(this).data("resizable"), o = self.options, el = self.element;
644 var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
645 if (!ce) return;
646
647 self.containerElement = $(ce);
648
649 if (/document/.test(oc) || oc == document) {
650 self.containerOffset = { left: 0, top: 0 };
651 self.containerPosition = { left: 0, top: 0 };
652
653 self.parentData = {
654 element: $(document), left: 0, top: 0,
655 width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
656 };
657 }
658
659 // i'm a node, so compute top, left, right, bottom
660 else {
661 var element = $(ce), p = [];
662 $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
663
664 self.containerOffset = element.offset();
665 self.containerPosition = element.position();
666 self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
667
668 var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width,
669 width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
670
671 self.parentData = {
672 element: ce, left: co.left, top: co.top, width: width, height: height
673 };
674 }
675 },
676
677 resize: function(event, ui) {
678 var self = $(this).data("resizable"), o = self.options,
679 ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
680 pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
681
682 if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
683
684 if (cp.left < (self._helper ? co.left : 0)) {
685 self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
686 if (pRatio) self.size.height = self.size.width / o.aspectRatio;
687 self.position.left = o.helper ? co.left : 0;
688 }
689
690 if (cp.top < (self._helper ? co.top : 0)) {
691 self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
692 if (pRatio) self.size.width = self.size.height * o.aspectRatio;
693 self.position.top = self._helper ? co.top : 0;
694 }
695
696 self.offset.left = self.parentData.left+self.position.left;
697 self.offset.top = self.parentData.top+self.position.top;
698
699 var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
700 hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
701
702 var isParent = self.containerElement.get(0) == self.element.parent().get(0),
703 isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
704
705 if(isParent && isOffsetRelative) woset -= self.parentData.left;
706
707 if (woset + self.size.width >= self.parentData.width) {
708 self.size.width = self.parentData.width - woset;
709 if (pRatio) self.size.height = self.size.width / self.aspectRatio;
710 }
711
712 if (hoset + self.size.height >= self.parentData.height) {
713 self.size.height = self.parentData.height - hoset;
714 if (pRatio) self.size.width = self.size.height * self.aspectRatio;
715 }
716 },
717
718 stop: function(event, ui){
719 var self = $(this).data("resizable"), o = self.options, cp = self.position,
720 co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
721
722 var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
723
724 if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
725 $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
726
727 if (self._helper && !o.animate && (/static/).test(ce.css('position')))
728 $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
729
730 }
731});
732
733$.ui.plugin.add("resizable", "ghost", {
734
735 start: function(event, ui) {
736
737 var self = $(this).data("resizable"), o = self.options, cs = self.size;
738
739 self.ghost = self.originalElement.clone();
740 self.ghost
741 .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
742 .addClass('ui-resizable-ghost')
743 .addClass(typeof o.ghost == 'string' ? o.ghost : '');
744
745 self.ghost.appendTo(self.helper);
746
747 },
748
749 resize: function(event, ui){
750 var self = $(this).data("resizable"), o = self.options;
751 if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
752 },
753
754 stop: function(event, ui){
755 var self = $(this).data("resizable"), o = self.options;
756 if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
757 }
758
759});
760
761$.ui.plugin.add("resizable", "grid", {
762
763 resize: function(event, ui) {
764 var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
765 o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
766 var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
767
768 if (/^(se|s|e)$/.test(a)) {
769 self.size.width = os.width + ox;
770 self.size.height = os.height + oy;
771 }
772 else if (/^(ne)$/.test(a)) {
773 self.size.width = os.width + ox;
774 self.size.height = os.height + oy;
775 self.position.top = op.top - oy;
776 }
777 else if (/^(sw)$/.test(a)) {
778 self.size.width = os.width + ox;
779 self.size.height = os.height + oy;
780 self.position.left = op.left - ox;
781 }
782 else {
783 self.size.width = os.width + ox;
784 self.size.height = os.height + oy;
785 self.position.top = op.top - oy;
786 self.position.left = op.left - ox;
787 }
788 }
789
790});
791
792var num = function(v) {
793 return parseInt(v, 10) || 0;
794};
795
796var isNumber = function(value) {
797 return !isNaN(parseInt(value, 10));
798};
799
800})(jQuery);
diff --git a/static/development-bundle/ui/ui.selectable.js b/static/development-bundle/ui/ui.selectable.js
new file mode 100644
index 0000000..08f99cf
--- /dev/null
+++ b/static/development-bundle/ui/ui.selectable.js
@@ -0,0 +1,257 @@
1/*
2 * jQuery UI Selectable 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Selectables
9 *
10 * Depends:
11 * ui.core.js
12 */
13(function($) {
14
15$.widget("ui.selectable", $.extend({}, $.ui.mouse, {
16
17 _init: function() {
18 var self = this;
19
20 this.element.addClass("ui-selectable");
21
22 this.dragged = false;
23
24 // cache selectee children based on filter
25 var selectees;
26 this.refresh = function() {
27 selectees = $(self.options.filter, self.element[0]);
28 selectees.each(function() {
29 var $this = $(this);
30 var pos = $this.offset();
31 $.data(this, "selectable-item", {
32 element: this,
33 $element: $this,
34 left: pos.left,
35 top: pos.top,
36 right: pos.left + $this.outerWidth(),
37 bottom: pos.top + $this.outerHeight(),
38 startselected: false,
39 selected: $this.hasClass('ui-selected'),
40 selecting: $this.hasClass('ui-selecting'),
41 unselecting: $this.hasClass('ui-unselecting')
42 });
43 });
44 };
45 this.refresh();
46
47 this.selectees = selectees.addClass("ui-selectee");
48
49 this._mouseInit();
50
51 this.helper = $(document.createElement('div'))
52 .css({border:'1px dotted black'})
53 .addClass("ui-selectable-helper");
54 },
55
56 destroy: function() {
57 this.element
58 .removeClass("ui-selectable ui-selectable-disabled")
59 .removeData("selectable")
60 .unbind(".selectable");
61 this._mouseDestroy();
62 },
63
64 _mouseStart: function(event) {
65 var self = this;
66
67 this.opos = [event.pageX, event.pageY];
68
69 if (this.options.disabled)
70 return;
71
72 var options = this.options;
73
74 this.selectees = $(options.filter, this.element[0]);
75
76 this._trigger("start", event);
77
78 $(options.appendTo).append(this.helper);
79 // position helper (lasso)
80 this.helper.css({
81 "z-index": 100,
82 "position": "absolute",
83 "left": event.clientX,
84 "top": event.clientY,
85 "width": 0,
86 "height": 0
87 });
88
89 if (options.autoRefresh) {
90 this.refresh();
91 }
92
93 this.selectees.filter('.ui-selected').each(function() {
94 var selectee = $.data(this, "selectable-item");
95 selectee.startselected = true;
96 if (!event.metaKey) {
97 selectee.$element.removeClass('ui-selected');
98 selectee.selected = false;
99 selectee.$element.addClass('ui-unselecting');
100 selectee.unselecting = true;
101 // selectable UNSELECTING callback
102 self._trigger("unselecting", event, {
103 unselecting: selectee.element
104 });
105 }
106 });
107
108 $(event.target).parents().andSelf().each(function() {
109 var selectee = $.data(this, "selectable-item");
110 if (selectee) {
111 selectee.$element.removeClass("ui-unselecting").addClass('ui-selecting');
112 selectee.unselecting = false;
113 selectee.selecting = true;
114 selectee.selected = true;
115 // selectable SELECTING callback
116 self._trigger("selecting", event, {
117 selecting: selectee.element
118 });
119 return false;
120 }
121 });
122
123 },
124
125 _mouseDrag: function(event) {
126 var self = this;
127 this.dragged = true;
128
129 if (this.options.disabled)
130 return;
131
132 var options = this.options;
133
134 var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
135 if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
136 if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
137 this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
138
139 this.selectees.each(function() {
140 var selectee = $.data(this, "selectable-item");
141 //prevent helper from being selected if appendTo: selectable
142 if (!selectee || selectee.element == self.element[0])
143 return;
144 var hit = false;
145 if (options.tolerance == 'touch') {
146 hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
147 } else if (options.tolerance == 'fit') {
148 hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
149 }
150
151 if (hit) {
152 // SELECT
153 if (selectee.selected) {
154 selectee.$element.removeClass('ui-selected');
155 selectee.selected = false;
156 }
157 if (selectee.unselecting) {
158 selectee.$element.removeClass('ui-unselecting');
159 selectee.unselecting = false;
160 }
161 if (!selectee.selecting) {
162 selectee.$element.addClass('ui-selecting');
163 selectee.selecting = true;
164 // selectable SELECTING callback
165 self._trigger("selecting", event, {
166 selecting: selectee.element
167 });
168 }
169 } else {
170 // UNSELECT
171 if (selectee.selecting) {
172 if (event.metaKey && selectee.startselected) {
173 selectee.$element.removeClass('ui-selecting');
174 selectee.selecting = false;
175 selectee.$element.addClass('ui-selected');
176 selectee.selected = true;
177 } else {
178 selectee.$element.removeClass('ui-selecting');
179 selectee.selecting = false;
180 if (selectee.startselected) {
181 selectee.$element.addClass('ui-unselecting');
182 selectee.unselecting = true;
183 }
184 // selectable UNSELECTING callback
185 self._trigger("unselecting", event, {
186 unselecting: selectee.element
187 });
188 }
189 }
190 if (selectee.selected) {
191 if (!event.metaKey && !selectee.startselected) {
192 selectee.$element.removeClass('ui-selected');
193 selectee.selected = false;
194
195 selectee.$element.addClass('ui-unselecting');
196 selectee.unselecting = true;
197 // selectable UNSELECTING callback
198 self._trigger("unselecting", event, {
199 unselecting: selectee.element
200 });
201 }
202 }
203 }
204 });
205
206 return false;
207 },
208
209 _mouseStop: function(event) {
210 var self = this;
211
212 this.dragged = false;
213
214 var options = this.options;
215
216 $('.ui-unselecting', this.element[0]).each(function() {
217 var selectee = $.data(this, "selectable-item");
218 selectee.$element.removeClass('ui-unselecting');
219 selectee.unselecting = false;
220 selectee.startselected = false;
221 self._trigger("unselected", event, {
222 unselected: selectee.element
223 });
224 });
225 $('.ui-selecting', this.element[0]).each(function() {
226 var selectee = $.data(this, "selectable-item");
227 selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
228 selectee.selecting = false;
229 selectee.selected = true;
230 selectee.startselected = true;
231 self._trigger("selected", event, {
232 selected: selectee.element
233 });
234 });
235 this._trigger("stop", event);
236
237 this.helper.remove();
238
239 return false;
240 }
241
242}));
243
244$.extend($.ui.selectable, {
245 version: "1.7.2",
246 defaults: {
247 appendTo: 'body',
248 autoRefresh: true,
249 cancel: ":input,option",
250 delay: 0,
251 distance: 0,
252 filter: '*',
253 tolerance: 'touch'
254 }
255});
256
257})(jQuery);
diff --git a/static/development-bundle/ui/ui.slider.js b/static/development-bundle/ui/ui.slider.js
new file mode 100644
index 0000000..f466a69
--- /dev/null
+++ b/static/development-bundle/ui/ui.slider.js
@@ -0,0 +1,558 @@
1/*
2 * jQuery UI Slider 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Slider
9 *
10 * Depends:
11 * ui.core.js
12 */
13
14(function($) {
15
16$.widget("ui.slider", $.extend({}, $.ui.mouse, {
17
18 _init: function() {
19
20 var self = this, o = this.options;
21 this._keySliding = false;
22 this._handleIndex = null;
23 this._detectOrientation();
24 this._mouseInit();
25
26 this.element
27 .addClass("ui-slider"
28 + " ui-slider-" + this.orientation
29 + " ui-widget"
30 + " ui-widget-content"
31 + " ui-corner-all");
32
33 this.range = $([]);
34
35 if (o.range) {
36
37 if (o.range === true) {
38 this.range = $('<div></div>');
39 if (!o.values) o.values = [this._valueMin(), this._valueMin()];
40 if (o.values.length && o.values.length != 2) {
41 o.values = [o.values[0], o.values[0]];
42 }
43 } else {
44 this.range = $('<div></div>');
45 }
46
47 this.range
48 .appendTo(this.element)
49 .addClass("ui-slider-range");
50
51 if (o.range == "min" || o.range == "max") {
52 this.range.addClass("ui-slider-range-" + o.range);
53 }
54
55 // note: this isn't the most fittingly semantic framework class for this element,
56 // but worked best visually with a variety of themes
57 this.range.addClass("ui-widget-header");
58
59 }
60
61 if ($(".ui-slider-handle", this.element).length == 0)
62 $('<a href="#"></a>')
63 .appendTo(this.element)
64 .addClass("ui-slider-handle");
65
66 if (o.values && o.values.length) {
67 while ($(".ui-slider-handle", this.element).length < o.values.length)
68 $('<a href="#"></a>')
69 .appendTo(this.element)
70 .addClass("ui-slider-handle");
71 }
72
73 this.handles = $(".ui-slider-handle", this.element)
74 .addClass("ui-state-default"
75 + " ui-corner-all");
76
77 this.handle = this.handles.eq(0);
78
79 this.handles.add(this.range).filter("a")
80 .click(function(event) {
81 event.preventDefault();
82 })
83 .hover(function() {
84 if (!o.disabled) {
85 $(this).addClass('ui-state-hover');
86 }
87 }, function() {
88 $(this).removeClass('ui-state-hover');
89 })
90 .focus(function() {
91 if (!o.disabled) {
92 $(".ui-slider .ui-state-focus").removeClass('ui-state-focus'); $(this).addClass('ui-state-focus');
93 } else {
94 $(this).blur();
95 }
96 })
97 .blur(function() {
98 $(this).removeClass('ui-state-focus');
99 });
100
101 this.handles.each(function(i) {
102 $(this).data("index.ui-slider-handle", i);
103 });
104
105 this.handles.keydown(function(event) {
106
107 var ret = true;
108
109 var index = $(this).data("index.ui-slider-handle");
110
111 if (self.options.disabled)
112 return;
113
114 switch (event.keyCode) {
115 case $.ui.keyCode.HOME:
116 case $.ui.keyCode.END:
117 case $.ui.keyCode.UP:
118 case $.ui.keyCode.RIGHT:
119 case $.ui.keyCode.DOWN:
120 case $.ui.keyCode.LEFT:
121 ret = false;
122 if (!self._keySliding) {
123 self._keySliding = true;
124 $(this).addClass("ui-state-active");
125 self._start(event, index);
126 }
127 break;
128 }
129
130 var curVal, newVal, step = self._step();
131 if (self.options.values && self.options.values.length) {
132 curVal = newVal = self.values(index);
133 } else {
134 curVal = newVal = self.value();
135 }
136
137 switch (event.keyCode) {
138 case $.ui.keyCode.HOME:
139 newVal = self._valueMin();
140 break;
141 case $.ui.keyCode.END:
142 newVal = self._valueMax();
143 break;
144 case $.ui.keyCode.UP:
145 case $.ui.keyCode.RIGHT:
146 if(curVal == self._valueMax()) return;
147 newVal = curVal + step;
148 break;
149 case $.ui.keyCode.DOWN:
150 case $.ui.keyCode.LEFT:
151 if(curVal == self._valueMin()) return;
152 newVal = curVal - step;
153 break;
154 }
155
156 self._slide(event, index, newVal);
157
158 return ret;
159
160 }).keyup(function(event) {
161
162 var index = $(this).data("index.ui-slider-handle");
163
164 if (self._keySliding) {
165 self._stop(event, index);
166 self._change(event, index);
167 self._keySliding = false;
168 $(this).removeClass("ui-state-active");
169 }
170
171 });
172
173 this._refreshValue();
174
175 },
176
177 destroy: function() {
178
179 this.handles.remove();
180 this.range.remove();
181
182 this.element
183 .removeClass("ui-slider"
184 + " ui-slider-horizontal"
185 + " ui-slider-vertical"
186 + " ui-slider-disabled"
187 + " ui-widget"
188 + " ui-widget-content"
189 + " ui-corner-all")
190 .removeData("slider")
191 .unbind(".slider");
192
193 this._mouseDestroy();
194
195 },
196
197 _mouseCapture: function(event) {
198
199 var o = this.options;
200
201 if (o.disabled)
202 return false;
203
204 this.elementSize = {
205 width: this.element.outerWidth(),
206 height: this.element.outerHeight()
207 };
208 this.elementOffset = this.element.offset();
209
210 var position = { x: event.pageX, y: event.pageY };
211 var normValue = this._normValueFromMouse(position);
212
213 var distance = this._valueMax() - this._valueMin() + 1, closestHandle;
214 var self = this, index;
215 this.handles.each(function(i) {
216 var thisDistance = Math.abs(normValue - self.values(i));
217 if (distance > thisDistance) {
218 distance = thisDistance;
219 closestHandle = $(this);
220 index = i;
221 }
222 });
223
224 // workaround for bug #3736 (if both handles of a range are at 0,
225 // the first is always used as the one with least distance,
226 // and moving it is obviously prevented by preventing negative ranges)
227 if(o.range == true && this.values(1) == o.min) {
228 closestHandle = $(this.handles[++index]);
229 }
230
231 this._start(event, index);
232
233 self._handleIndex = index;
234
235 closestHandle
236 .addClass("ui-state-active")
237 .focus();
238
239 var offset = closestHandle.offset();
240 var mouseOverHandle = !$(event.target).parents().andSelf().is('.ui-slider-handle');
241 this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
242 left: event.pageX - offset.left - (closestHandle.width() / 2),
243 top: event.pageY - offset.top
244 - (closestHandle.height() / 2)
245 - (parseInt(closestHandle.css('borderTopWidth'),10) || 0)
246 - (parseInt(closestHandle.css('borderBottomWidth'),10) || 0)
247 + (parseInt(closestHandle.css('marginTop'),10) || 0)
248 };
249
250 normValue = this._normValueFromMouse(position);
251 this._slide(event, index, normValue);
252 return true;
253
254 },
255
256 _mouseStart: function(event) {
257 return true;
258 },
259
260 _mouseDrag: function(event) {
261
262 var position = { x: event.pageX, y: event.pageY };
263 var normValue = this._normValueFromMouse(position);
264
265 this._slide(event, this._handleIndex, normValue);
266
267 return false;
268
269 },
270
271 _mouseStop: function(event) {
272
273 this.handles.removeClass("ui-state-active");
274 this._stop(event, this._handleIndex);
275 this._change(event, this._handleIndex);
276 this._handleIndex = null;
277 this._clickOffset = null;
278
279 return false;
280
281 },
282
283 _detectOrientation: function() {
284 this.orientation = this.options.orientation == 'vertical' ? 'vertical' : 'horizontal';
285 },
286
287 _normValueFromMouse: function(position) {
288
289 var pixelTotal, pixelMouse;
290 if ('horizontal' == this.orientation) {
291 pixelTotal = this.elementSize.width;
292 pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0);
293 } else {
294 pixelTotal = this.elementSize.height;
295 pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0);
296 }
297
298 var percentMouse = (pixelMouse / pixelTotal);
299 if (percentMouse > 1) percentMouse = 1;
300 if (percentMouse < 0) percentMouse = 0;
301 if ('vertical' == this.orientation)
302 percentMouse = 1 - percentMouse;
303
304 var valueTotal = this._valueMax() - this._valueMin(),
305 valueMouse = percentMouse * valueTotal,
306 valueMouseModStep = valueMouse % this.options.step,
307 normValue = this._valueMin() + valueMouse - valueMouseModStep;
308
309 if (valueMouseModStep > (this.options.step / 2))
310 normValue += this.options.step;
311
312 // Since JavaScript has problems with large floats, round
313 // the final value to 5 digits after the decimal point (see #4124)
314 return parseFloat(normValue.toFixed(5));
315
316 },
317
318 _start: function(event, index) {
319 var uiHash = {
320 handle: this.handles[index],
321 value: this.value()
322 };
323 if (this.options.values && this.options.values.length) {
324 uiHash.value = this.values(index);
325 uiHash.values = this.values();
326 }
327 this._trigger("start", event, uiHash);
328 },
329
330 _slide: function(event, index, newVal) {
331
332 var handle = this.handles[index];
333
334 if (this.options.values && this.options.values.length) {
335
336 var otherVal = this.values(index ? 0 : 1);
337
338 if ((this.options.values.length == 2 && this.options.range === true) &&
339 ((index == 0 && newVal > otherVal) || (index == 1 && newVal < otherVal))){
340 newVal = otherVal;
341 }
342
343 if (newVal != this.values(index)) {
344 var newValues = this.values();
345 newValues[index] = newVal;
346 // A slide can be canceled by returning false from the slide callback
347 var allowed = this._trigger("slide", event, {
348 handle: this.handles[index],
349 value: newVal,
350 values: newValues
351 });
352 var otherVal = this.values(index ? 0 : 1);
353 if (allowed !== false) {
354 this.values(index, newVal, ( event.type == 'mousedown' && this.options.animate ), true);
355 }
356 }
357
358 } else {
359
360 if (newVal != this.value()) {
361 // A slide can be canceled by returning false from the slide callback
362 var allowed = this._trigger("slide", event, {
363 handle: this.handles[index],
364 value: newVal
365 });
366 if (allowed !== false) {
367 this._setData('value', newVal, ( event.type == 'mousedown' && this.options.animate ));
368 }
369
370 }
371
372 }
373
374 },
375
376 _stop: function(event, index) {
377 var uiHash = {
378 handle: this.handles[index],
379 value: this.value()
380 };
381 if (this.options.values && this.options.values.length) {
382 uiHash.value = this.values(index);
383 uiHash.values = this.values();
384 }
385 this._trigger("stop", event, uiHash);
386 },
387
388 _change: function(event, index) {
389 var uiHash = {
390 handle: this.handles[index],
391 value: this.value()
392 };
393 if (this.options.values && this.options.values.length) {
394 uiHash.value = this.values(index);
395 uiHash.values = this.values();
396 }
397 this._trigger("change", event, uiHash);
398 },
399
400 value: function(newValue) {
401
402 if (arguments.length) {
403 this._setData("value", newValue);
404 this._change(null, 0);
405 }
406
407 return this._value();
408
409 },
410
411 values: function(index, newValue, animated, noPropagation) {
412
413 if (arguments.length > 1) {
414 this.options.values[index] = newValue;
415 this._refreshValue(animated);
416 if(!noPropagation) this._change(null, index);
417 }
418
419 if (arguments.length) {
420 if (this.options.values && this.options.values.length) {
421 return this._values(index);
422 } else {
423 return this.value();
424 }
425 } else {
426 return this._values();
427 }
428
429 },
430
431 _setData: function(key, value, animated) {
432
433 $.widget.prototype._setData.apply(this, arguments);
434
435 switch (key) {
436 case 'disabled':
437 if (value) {
438 this.handles.filter(".ui-state-focus").blur();
439 this.handles.removeClass("ui-state-hover");
440 this.handles.attr("disabled", "disabled");
441 } else {
442 this.handles.removeAttr("disabled");
443 }
444 case 'orientation':
445
446 this._detectOrientation();
447
448 this.element
449 .removeClass("ui-slider-horizontal ui-slider-vertical")
450 .addClass("ui-slider-" + this.orientation);
451 this._refreshValue(animated);
452 break;
453 case 'value':
454 this._refreshValue(animated);
455 break;
456 }
457
458 },
459
460 _step: function() {
461 var step = this.options.step;
462 return step;
463 },
464
465 _value: function() {
466
467 var val = this.options.value;
468 if (val < this._valueMin()) val = this._valueMin();
469 if (val > this._valueMax()) val = this._valueMax();
470
471 return val;
472
473 },
474
475 _values: function(index) {
476
477 if (arguments.length) {
478 var val = this.options.values[index];
479 if (val < this._valueMin()) val = this._valueMin();
480 if (val > this._valueMax()) val = this._valueMax();
481
482 return val;
483 } else {
484 return this.options.values;
485 }
486
487 },
488
489 _valueMin: function() {
490 var valueMin = this.options.min;
491 return valueMin;
492 },
493
494 _valueMax: function() {
495 var valueMax = this.options.max;
496 return valueMax;
497 },
498
499 _refreshValue: function(animate) {
500
501 var oRange = this.options.range, o = this.options, self = this;
502
503 if (this.options.values && this.options.values.length) {
504 var vp0, vp1;
505 this.handles.each(function(i, j) {
506 var valPercent = (self.values(i) - self._valueMin()) / (self._valueMax() - self._valueMin()) * 100;
507 var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
508 $(this).stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);
509 if (self.options.range === true) {
510 if (self.orientation == 'horizontal') {
511 (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ left: valPercent + '%' }, o.animate);
512 (i == 1) && self.range[animate ? 'animate' : 'css']({ width: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
513 } else {
514 (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ bottom: (valPercent) + '%' }, o.animate);
515 (i == 1) && self.range[animate ? 'animate' : 'css']({ height: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
516 }
517 }
518 lastValPercent = valPercent;
519 });
520 } else {
521 var value = this.value(),
522 valueMin = this._valueMin(),
523 valueMax = this._valueMax(),
524 valPercent = valueMax != valueMin
525 ? (value - valueMin) / (valueMax - valueMin) * 100
526 : 0;
527 var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
528 this.handle.stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);
529
530 (oRange == "min") && (this.orientation == "horizontal") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ width: valPercent + '%' }, o.animate);
531 (oRange == "max") && (this.orientation == "horizontal") && this.range[animate ? 'animate' : 'css']({ width: (100 - valPercent) + '%' }, { queue: false, duration: o.animate });
532 (oRange == "min") && (this.orientation == "vertical") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ height: valPercent + '%' }, o.animate);
533 (oRange == "max") && (this.orientation == "vertical") && this.range[animate ? 'animate' : 'css']({ height: (100 - valPercent) + '%' }, { queue: false, duration: o.animate });
534 }
535
536 }
537
538}));
539
540$.extend($.ui.slider, {
541 getter: "value values",
542 version: "1.7.2",
543 eventPrefix: "slide",
544 defaults: {
545 animate: false,
546 delay: 0,
547 distance: 0,
548 max: 100,
549 min: 0,
550 orientation: 'horizontal',
551 range: false,
552 step: 1,
553 value: 0,
554 values: null
555 }
556});
557
558})(jQuery);
diff --git a/static/development-bundle/ui/ui.sortable.js b/static/development-bundle/ui/ui.sortable.js
new file mode 100644
index 0000000..5460850
--- /dev/null
+++ b/static/development-bundle/ui/ui.sortable.js
@@ -0,0 +1,1019 @@
1/*
2 * jQuery UI Sortable 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Sortables
9 *
10 * Depends:
11 * ui.core.js
12 */
13(function($) {
14
15$.widget("ui.sortable", $.extend({}, $.ui.mouse, {
16 _init: function() {
17
18 var o = this.options;
19 this.containerCache = {};
20 this.element.addClass("ui-sortable");
21
22 //Get the items
23 this.refresh();
24
25 //Let's determine if the items are floating
26 this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false;
27
28 //Let's determine the parent's offset
29 this.offset = this.element.offset();
30
31 //Initialize mouse events for interaction
32 this._mouseInit();
33
34 },
35
36 destroy: function() {
37 this.element
38 .removeClass("ui-sortable ui-sortable-disabled")
39 .removeData("sortable")
40 .unbind(".sortable");
41 this._mouseDestroy();
42
43 for ( var i = this.items.length - 1; i >= 0; i-- )
44 this.items[i].item.removeData("sortable-item");
45 },
46
47 _mouseCapture: function(event, overrideHandle) {
48
49 if (this.reverting) {
50 return false;
51 }
52
53 if(this.options.disabled || this.options.type == 'static') return false;
54
55 //We have to refresh the items data once first
56 this._refreshItems(event);
57
58 //Find out if the clicked node (or one of its parents) is a actual item in this.items
59 var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
60 if($.data(this, 'sortable-item') == self) {
61 currentItem = $(this);
62 return false;
63 }
64 });
65 if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);
66
67 if(!currentItem) return false;
68 if(this.options.handle && !overrideHandle) {
69 var validHandle = false;
70
71 $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
72 if(!validHandle) return false;
73 }
74
75 this.currentItem = currentItem;
76 this._removeCurrentsFromItems();
77 return true;
78
79 },
80
81 _mouseStart: function(event, overrideHandle, noActivation) {
82
83 var o = this.options, self = this;
84 this.currentContainer = this;
85
86 //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
87 this.refreshPositions();
88
89 //Create and append the visible helper
90 this.helper = this._createHelper(event);
91
92 //Cache the helper size
93 this._cacheHelperProportions();
94
95 /*
96 * - Position generation -
97 * This block generates everything position related - it's the core of draggables.
98 */
99
100 //Cache the margins of the original element
101 this._cacheMargins();
102
103 //Get the next scrolling parent
104 this.scrollParent = this.helper.scrollParent();
105
106 //The element's absolute position on the page minus margins
107 this.offset = this.currentItem.offset();
108 this.offset = {
109 top: this.offset.top - this.margins.top,
110 left: this.offset.left - this.margins.left
111 };
112
113 // Only after we got the offset, we can change the helper's position to absolute
114 // TODO: Still need to figure out a way to make relative sorting possible
115 this.helper.css("position", "absolute");
116 this.cssPosition = this.helper.css("position");
117
118 $.extend(this.offset, {
119 click: { //Where the click happened, relative to the element
120 left: event.pageX - this.offset.left,
121 top: event.pageY - this.offset.top
122 },
123 parent: this._getParentOffset(),
124 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
125 });
126
127 //Generate the original position
128 this.originalPosition = this._generatePosition(event);
129 this.originalPageX = event.pageX;
130 this.originalPageY = event.pageY;
131
132 //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
133 if(o.cursorAt)
134 this._adjustOffsetFromHelper(o.cursorAt);
135
136 //Cache the former DOM position
137 this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
138
139 //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
140 if(this.helper[0] != this.currentItem[0]) {
141 this.currentItem.hide();
142 }
143
144 //Create the placeholder
145 this._createPlaceholder();
146
147 //Set a containment if given in the options
148 if(o.containment)
149 this._setContainment();
150
151 if(o.cursor) { // cursor option
152 if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
153 $('body').css("cursor", o.cursor);
154 }
155
156 if(o.opacity) { // opacity option
157 if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
158 this.helper.css("opacity", o.opacity);
159 }
160
161 if(o.zIndex) { // zIndex option
162 if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
163 this.helper.css("zIndex", o.zIndex);
164 }
165
166 //Prepare scrolling
167 if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
168 this.overflowOffset = this.scrollParent.offset();
169
170 //Call callbacks
171 this._trigger("start", event, this._uiHash());
172
173 //Recache the helper size
174 if(!this._preserveHelperProportions)
175 this._cacheHelperProportions();
176
177
178 //Post 'activate' events to possible containers
179 if(!noActivation) {
180 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
181 }
182
183 //Prepare possible droppables
184 if($.ui.ddmanager)
185 $.ui.ddmanager.current = this;
186
187 if ($.ui.ddmanager && !o.dropBehaviour)
188 $.ui.ddmanager.prepareOffsets(this, event);
189
190 this.dragging = true;
191
192 this.helper.addClass("ui-sortable-helper");
193 this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
194 return true;
195
196 },
197
198 _mouseDrag: function(event) {
199
200 //Compute the helpers position
201 this.position = this._generatePosition(event);
202 this.positionAbs = this._convertPositionTo("absolute");
203
204 if (!this.lastPositionAbs) {
205 this.lastPositionAbs = this.positionAbs;
206 }
207
208 //Do scrolling
209 if(this.options.scroll) {
210 var o = this.options, scrolled = false;
211 if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
212
213 if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
214 this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
215 else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
216 this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
217
218 if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
219 this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
220 else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
221 this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
222
223 } else {
224
225 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
226 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
227 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
228 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
229
230 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
231 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
232 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
233 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
234
235 }
236
237 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
238 $.ui.ddmanager.prepareOffsets(this, event);
239 }
240
241 //Regenerate the absolute position used for position checks
242 this.positionAbs = this._convertPositionTo("absolute");
243
244 //Set the helper position
245 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
246 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
247
248 //Rearrange
249 for (var i = this.items.length - 1; i >= 0; i--) {
250
251 //Cache variables and intersection, continue if no intersection
252 var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
253 if (!intersection) continue;
254
255 if(itemElement != this.currentItem[0] //cannot intersect with itself
256 && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
257 && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
258 && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
259 ) {
260
261 this.direction = intersection == 1 ? "down" : "up";
262
263 if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
264 this._rearrange(event, item);
265 } else {
266 break;
267 }
268
269 this._trigger("change", event, this._uiHash());
270 break;
271 }
272 }
273
274 //Post events to containers
275 this._contactContainers(event);
276
277 //Interconnect with droppables
278 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
279
280 //Call callbacks
281 this._trigger('sort', event, this._uiHash());
282
283 this.lastPositionAbs = this.positionAbs;
284 return false;
285
286 },
287
288 _mouseStop: function(event, noPropagation) {
289
290 if(!event) return;
291
292 //If we are using droppables, inform the manager about the drop
293 if ($.ui.ddmanager && !this.options.dropBehaviour)
294 $.ui.ddmanager.drop(this, event);
295
296 if(this.options.revert) {
297 var self = this;
298 var cur = self.placeholder.offset();
299
300 self.reverting = true;
301
302 $(this.helper).animate({
303 left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
304 top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
305 }, parseInt(this.options.revert, 10) || 500, function() {
306 self._clear(event);
307 });
308 } else {
309 this._clear(event, noPropagation);
310 }
311
312 return false;
313
314 },
315
316 cancel: function() {
317
318 var self = this;
319
320 if(this.dragging) {
321
322 this._mouseUp();
323
324 if(this.options.helper == "original")
325 this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
326 else
327 this.currentItem.show();
328
329 //Post deactivating events to containers
330 for (var i = this.containers.length - 1; i >= 0; i--){
331 this.containers[i]._trigger("deactivate", null, self._uiHash(this));
332 if(this.containers[i].containerCache.over) {
333 this.containers[i]._trigger("out", null, self._uiHash(this));
334 this.containers[i].containerCache.over = 0;
335 }
336 }
337
338 }
339
340 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
341 if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
342 if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
343
344 $.extend(this, {
345 helper: null,
346 dragging: false,
347 reverting: false,
348 _noFinalSort: null
349 });
350
351 if(this.domPosition.prev) {
352 $(this.domPosition.prev).after(this.currentItem);
353 } else {
354 $(this.domPosition.parent).prepend(this.currentItem);
355 }
356
357 return true;
358
359 },
360
361 serialize: function(o) {
362
363 var items = this._getItemsAsjQuery(o && o.connected);
364 var str = []; o = o || {};
365
366 $(items).each(function() {
367 var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
368 if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
369 });
370
371 return str.join('&');
372
373 },
374
375 toArray: function(o) {
376
377 var items = this._getItemsAsjQuery(o && o.connected);
378 var ret = []; o = o || {};
379
380 items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
381 return ret;
382
383 },
384
385 /* Be careful with the following core functions */
386 _intersectsWith: function(item) {
387
388 var x1 = this.positionAbs.left,
389 x2 = x1 + this.helperProportions.width,
390 y1 = this.positionAbs.top,
391 y2 = y1 + this.helperProportions.height;
392
393 var l = item.left,
394 r = l + item.width,
395 t = item.top,
396 b = t + item.height;
397
398 var dyClick = this.offset.click.top,
399 dxClick = this.offset.click.left;
400
401 var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
402
403 if( this.options.tolerance == "pointer"
404 || this.options.forcePointerForContainers
405 || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
406 ) {
407 return isOverElement;
408 } else {
409
410 return (l < x1 + (this.helperProportions.width / 2) // Right Half
411 && x2 - (this.helperProportions.width / 2) < r // Left Half
412 && t < y1 + (this.helperProportions.height / 2) // Bottom Half
413 && y2 - (this.helperProportions.height / 2) < b ); // Top Half
414
415 }
416 },
417
418 _intersectsWithPointer: function(item) {
419
420 var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
421 isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
422 isOverElement = isOverElementHeight && isOverElementWidth,
423 verticalDirection = this._getDragVerticalDirection(),
424 horizontalDirection = this._getDragHorizontalDirection();
425
426 if (!isOverElement)
427 return false;
428
429 return this.floating ?
430 ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
431 : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
432
433 },
434
435 _intersectsWithSides: function(item) {
436
437 var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
438 isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
439 verticalDirection = this._getDragVerticalDirection(),
440 horizontalDirection = this._getDragHorizontalDirection();
441
442 if (this.floating && horizontalDirection) {
443 return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
444 } else {
445 return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
446 }
447
448 },
449
450 _getDragVerticalDirection: function() {
451 var delta = this.positionAbs.top - this.lastPositionAbs.top;
452 return delta != 0 && (delta > 0 ? "down" : "up");
453 },
454
455 _getDragHorizontalDirection: function() {
456 var delta = this.positionAbs.left - this.lastPositionAbs.left;
457 return delta != 0 && (delta > 0 ? "right" : "left");
458 },
459
460 refresh: function(event) {
461 this._refreshItems(event);
462 this.refreshPositions();
463 },
464
465 _connectWith: function() {
466 var options = this.options;
467 return options.connectWith.constructor == String
468 ? [options.connectWith]
469 : options.connectWith;
470 },
471
472 _getItemsAsjQuery: function(connected) {
473
474 var self = this;
475 var items = [];
476 var queries = [];
477 var connectWith = this._connectWith();
478
479 if(connectWith && connected) {
480 for (var i = connectWith.length - 1; i >= 0; i--){
481 var cur = $(connectWith[i]);
482 for (var j = cur.length - 1; j >= 0; j--){
483 var inst = $.data(cur[j], 'sortable');
484 if(inst && inst != this && !inst.options.disabled) {
485 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper"), inst]);
486 }
487 };
488 };
489 }
490
491 queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper"), this]);
492
493 for (var i = queries.length - 1; i >= 0; i--){
494 queries[i][0].each(function() {
495 items.push(this);
496 });
497 };
498
499 return $(items);
500
501 },
502
503 _removeCurrentsFromItems: function() {
504
505 var list = this.currentItem.find(":data(sortable-item)");
506
507 for (var i=0; i < this.items.length; i++) {
508
509 for (var j=0; j < list.length; j++) {
510 if(list[j] == this.items[i].item[0])
511 this.items.splice(i,1);
512 };
513
514 };
515
516 },
517
518 _refreshItems: function(event) {
519
520 this.items = [];
521 this.containers = [this];
522 var items = this.items;
523 var self = this;
524 var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
525 var connectWith = this._connectWith();
526
527 if(connectWith) {
528 for (var i = connectWith.length - 1; i >= 0; i--){
529 var cur = $(connectWith[i]);
530 for (var j = cur.length - 1; j >= 0; j--){
531 var inst = $.data(cur[j], 'sortable');
532 if(inst && inst != this && !inst.options.disabled) {
533 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
534 this.containers.push(inst);
535 }
536 };
537 };
538 }
539
540 for (var i = queries.length - 1; i >= 0; i--) {
541 var targetData = queries[i][1];
542 var _queries = queries[i][0];
543
544 for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
545 var item = $(_queries[j]);
546
547 item.data('sortable-item', targetData); // Data for target checking (mouse manager)
548
549 items.push({
550 item: item,
551 instance: targetData,
552 width: 0, height: 0,
553 left: 0, top: 0
554 });
555 };
556 };
557
558 },
559
560 refreshPositions: function(fast) {
561
562 //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
563 if(this.offsetParent && this.helper) {
564 this.offset.parent = this._getParentOffset();
565 }
566
567 for (var i = this.items.length - 1; i >= 0; i--){
568 var item = this.items[i];
569
570 //We ignore calculating positions of all connected containers when we're not over them
571 if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
572 continue;
573
574 var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
575
576 if (!fast) {
577 item.width = t.outerWidth();
578 item.height = t.outerHeight();
579 }
580
581 var p = t.offset();
582 item.left = p.left;
583 item.top = p.top;
584 };
585
586 if(this.options.custom && this.options.custom.refreshContainers) {
587 this.options.custom.refreshContainers.call(this);
588 } else {
589 for (var i = this.containers.length - 1; i >= 0; i--){
590 var p = this.containers[i].element.offset();
591 this.containers[i].containerCache.left = p.left;
592 this.containers[i].containerCache.top = p.top;
593 this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
594 this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
595 };
596 }
597
598 },
599
600 _createPlaceholder: function(that) {
601
602 var self = that || this, o = self.options;
603
604 if(!o.placeholder || o.placeholder.constructor == String) {
605 var className = o.placeholder;
606 o.placeholder = {
607 element: function() {
608
609 var el = $(document.createElement(self.currentItem[0].nodeName))
610 .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
611 .removeClass("ui-sortable-helper")[0];
612
613 if(!className)
614 el.style.visibility = "hidden";
615
616 return el;
617 },
618 update: function(container, p) {
619
620 // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
621 // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
622 if(className && !o.forcePlaceholderSize) return;
623
624 //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
625 if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
626 if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
627 }
628 };
629 }
630
631 //Create the placeholder
632 self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
633
634 //Append it after the actual current item
635 self.currentItem.after(self.placeholder);
636
637 //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
638 o.placeholder.update(self, self.placeholder);
639
640 },
641
642 _contactContainers: function(event) {
643 for (var i = this.containers.length - 1; i >= 0; i--){
644
645 if(this._intersectsWith(this.containers[i].containerCache)) {
646 if(!this.containers[i].containerCache.over) {
647
648 if(this.currentContainer != this.containers[i]) {
649
650 //When entering a new container, we will find the item with the least distance and append our item near it
651 var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[i].floating ? 'left' : 'top'];
652 for (var j = this.items.length - 1; j >= 0; j--) {
653 if(!$.ui.contains(this.containers[i].element[0], this.items[j].item[0])) continue;
654 var cur = this.items[j][this.containers[i].floating ? 'left' : 'top'];
655 if(Math.abs(cur - base) < dist) {
656 dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
657 }
658 }
659
660 if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled
661 continue;
662
663 this.currentContainer = this.containers[i];
664 itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[i].element, true);
665 this._trigger("change", event, this._uiHash());
666 this.containers[i]._trigger("change", event, this._uiHash(this));
667
668 //Update the placeholder
669 this.options.placeholder.update(this.currentContainer, this.placeholder);
670
671 }
672
673 this.containers[i]._trigger("over", event, this._uiHash(this));
674 this.containers[i].containerCache.over = 1;
675 }
676 } else {
677 if(this.containers[i].containerCache.over) {
678 this.containers[i]._trigger("out", event, this._uiHash(this));
679 this.containers[i].containerCache.over = 0;
680 }
681 }
682
683 };
684 },
685
686 _createHelper: function(event) {
687
688 var o = this.options;
689 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
690
691 if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
692 $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
693
694 if(helper[0] == this.currentItem[0])
695 this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
696
697 if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
698 if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
699
700 return helper;
701
702 },
703
704 _adjustOffsetFromHelper: function(obj) {
705 if(obj.left != undefined) this.offset.click.left = obj.left + this.margins.left;
706 if(obj.right != undefined) this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
707 if(obj.top != undefined) this.offset.click.top = obj.top + this.margins.top;
708 if(obj.bottom != undefined) this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
709 },
710
711 _getParentOffset: function() {
712
713
714 //Get the offsetParent and cache its position
715 this.offsetParent = this.helper.offsetParent();
716 var po = this.offsetParent.offset();
717
718 // This is a special case where we need to modify a offset calculated on start, since the following happened:
719 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
720 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
721 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
722 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
723 po.left += this.scrollParent.scrollLeft();
724 po.top += this.scrollParent.scrollTop();
725 }
726
727 if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
728 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
729 po = { top: 0, left: 0 };
730
731 return {
732 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
733 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
734 };
735
736 },
737
738 _getRelativeOffset: function() {
739
740 if(this.cssPosition == "relative") {
741 var p = this.currentItem.position();
742 return {
743 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
744 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
745 };
746 } else {
747 return { top: 0, left: 0 };
748 }
749
750 },
751
752 _cacheMargins: function() {
753 this.margins = {
754 left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
755 top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
756 };
757 },
758
759 _cacheHelperProportions: function() {
760 this.helperProportions = {
761 width: this.helper.outerWidth(),
762 height: this.helper.outerHeight()
763 };
764 },
765
766 _setContainment: function() {
767
768 var o = this.options;
769 if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
770 if(o.containment == 'document' || o.containment == 'window') this.containment = [
771 0 - this.offset.relative.left - this.offset.parent.left,
772 0 - this.offset.relative.top - this.offset.parent.top,
773 $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
774 ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
775 ];
776
777 if(!(/^(document|window|parent)$/).test(o.containment)) {
778 var ce = $(o.containment)[0];
779 var co = $(o.containment).offset();
780 var over = ($(ce).css("overflow") != 'hidden');
781
782 this.containment = [
783 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
784 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
785 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
786 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
787 ];
788 }
789
790 },
791
792 _convertPositionTo: function(d, pos) {
793
794 if(!pos) pos = this.position;
795 var mod = d == "absolute" ? 1 : -1;
796 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
797
798 return {
799 top: (
800 pos.top // The absolute mouse position
801 + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
802 + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
803 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
804 ),
805 left: (
806 pos.left // The absolute mouse position
807 + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
808 + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
809 - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
810 )
811 };
812
813 },
814
815 _generatePosition: function(event) {
816
817 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
818
819 // This is another very weird special case that only happens for relative elements:
820 // 1. If the css position is relative
821 // 2. and the scroll parent is the document or similar to the offset parent
822 // we have to refresh the relative offset during the scroll so there are no jumps
823 if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
824 this.offset.relative = this._getRelativeOffset();
825 }
826
827 var pageX = event.pageX;
828 var pageY = event.pageY;
829
830 /*
831 * - Position constraining -
832 * Constrain the position to a mix of grid, containment.
833 */
834
835 if(this.originalPosition) { //If we are not dragging yet, we won't check for options
836
837 if(this.containment) {
838 if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
839 if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
840 if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
841 if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
842 }
843
844 if(o.grid) {
845 var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
846 pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
847
848 var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
849 pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
850 }
851
852 }
853
854 return {
855 top: (
856 pageY // The absolute mouse position
857 - this.offset.click.top // Click offset (relative to the element)
858 - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
859 - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
860 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
861 ),
862 left: (
863 pageX // The absolute mouse position
864 - this.offset.click.left // Click offset (relative to the element)
865 - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
866 - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
867 + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
868 )
869 };
870
871 },
872
873 _rearrange: function(event, i, a, hardRefresh) {
874
875 a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
876
877 //Various things done here to improve the performance:
878 // 1. we create a setTimeout, that calls refreshPositions
879 // 2. on the instance, we have a counter variable, that get's higher after every append
880 // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
881 // 4. this lets only the last addition to the timeout stack through
882 this.counter = this.counter ? ++this.counter : 1;
883 var self = this, counter = this.counter;
884
885 window.setTimeout(function() {
886 if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
887 },0);
888
889 },
890
891 _clear: function(event, noPropagation) {
892
893 this.reverting = false;
894 // We delay all events that have to be triggered to after the point where the placeholder has been removed and
895 // everything else normalized again
896 var delayedTriggers = [], self = this;
897
898 // We first have to update the dom position of the actual currentItem
899 // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
900 if(!this._noFinalSort && this.currentItem[0].parentNode) this.placeholder.before(this.currentItem);
901 this._noFinalSort = null;
902
903 if(this.helper[0] == this.currentItem[0]) {
904 for(var i in this._storedCSS) {
905 if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
906 }
907 this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
908 } else {
909 this.currentItem.show();
910 }
911
912 if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
913 if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
914 if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
915 if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
916 for (var i = this.containers.length - 1; i >= 0; i--){
917 if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) {
918 delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
919 delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
920 }
921 };
922 };
923
924 //Post events to containers
925 for (var i = this.containers.length - 1; i >= 0; i--){
926 if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
927 if(this.containers[i].containerCache.over) {
928 delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
929 this.containers[i].containerCache.over = 0;
930 }
931 }
932
933 //Do what was originally in plugins
934 if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
935 if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset cursor
936 if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
937
938 this.dragging = false;
939 if(this.cancelHelperRemoval) {
940 if(!noPropagation) {
941 this._trigger("beforeStop", event, this._uiHash());
942 for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
943 this._trigger("stop", event, this._uiHash());
944 }
945 return false;
946 }
947
948 if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
949
950 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
951 this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
952
953 if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
954
955 if(!noPropagation) {
956 for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
957 this._trigger("stop", event, this._uiHash());
958 }
959
960 this.fromOutside = false;
961 return true;
962
963 },
964
965 _trigger: function() {
966 if ($.widget.prototype._trigger.apply(this, arguments) === false) {
967 this.cancel();
968 }
969 },
970
971 _uiHash: function(inst) {
972 var self = inst || this;
973 return {
974 helper: self.helper,
975 placeholder: self.placeholder || $([]),
976 position: self.position,
977 absolutePosition: self.positionAbs, //deprecated
978 offset: self.positionAbs,
979 item: self.currentItem,
980 sender: inst ? inst.element : null
981 };
982 }
983
984}));
985
986$.extend($.ui.sortable, {
987 getter: "serialize toArray",
988 version: "1.7.2",
989 eventPrefix: "sort",
990 defaults: {
991 appendTo: "parent",
992 axis: false,
993 cancel: ":input,option",
994 connectWith: false,
995 containment: false,
996 cursor: 'auto',
997 cursorAt: false,
998 delay: 0,
999 distance: 1,
1000 dropOnEmpty: true,
1001 forcePlaceholderSize: false,
1002 forceHelperSize: false,
1003 grid: false,
1004 handle: false,
1005 helper: "original",
1006 items: '> *',
1007 opacity: false,
1008 placeholder: false,
1009 revert: false,
1010 scroll: true,
1011 scrollSensitivity: 20,
1012 scrollSpeed: 20,
1013 scope: "default",
1014 tolerance: "intersect",
1015 zIndex: 1000
1016 }
1017});
1018
1019})(jQuery);
diff --git a/static/development-bundle/ui/ui.tabs.js b/static/development-bundle/ui/ui.tabs.js
new file mode 100644
index 0000000..d914b3e
--- /dev/null
+++ b/static/development-bundle/ui/ui.tabs.js
@@ -0,0 +1,685 @@
1/*
2 * jQuery UI Tabs 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Tabs
9 *
10 * Depends:
11 * ui.core.js
12 */
13(function($) {
14
15$.widget("ui.tabs", {
16
17 _init: function() {
18 if (this.options.deselectable !== undefined) {
19 this.options.collapsible = this.options.deselectable;
20 }
21 this._tabify(true);
22 },
23
24 _setData: function(key, value) {
25 if (key == 'selected') {
26 if (this.options.collapsible && value == this.options.selected) {
27 return;
28 }
29 this.select(value);
30 }
31 else {
32 this.options[key] = value;
33 if (key == 'deselectable') {
34 this.options.collapsible = value;
35 }
36 this._tabify();
37 }
38 },
39
40 _tabId: function(a) {
41 return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') ||
42 this.options.idPrefix + $.data(a);
43 },
44
45 _sanitizeSelector: function(hash) {
46 return hash.replace(/:/g, '\\:'); // we need this because an id may contain a ":"
47 },
48
49 _cookie: function() {
50 var cookie = this.cookie || (this.cookie = this.options.cookie.name || 'ui-tabs-' + $.data(this.list[0]));
51 return $.cookie.apply(null, [cookie].concat($.makeArray(arguments)));
52 },
53
54 _ui: function(tab, panel) {
55 return {
56 tab: tab,
57 panel: panel,
58 index: this.anchors.index(tab)
59 };
60 },
61
62 _cleanup: function() {
63 // restore all former loading tabs labels
64 this.lis.filter('.ui-state-processing').removeClass('ui-state-processing')
65 .find('span:data(label.tabs)')
66 .each(function() {
67 var el = $(this);
68 el.html(el.data('label.tabs')).removeData('label.tabs');
69 });
70 },
71
72 _tabify: function(init) {
73
74 this.list = this.element.children('ul:first');
75 this.lis = $('li:has(a[href])', this.list);
76 this.anchors = this.lis.map(function() { return $('a', this)[0]; });
77 this.panels = $([]);
78
79 var self = this, o = this.options;
80
81 var fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
82 this.anchors.each(function(i, a) {
83 var href = $(a).attr('href');
84
85 // For dynamically created HTML that contains a hash as href IE < 8 expands
86 // such href to the full page url with hash and then misinterprets tab as ajax.
87 // Same consideration applies for an added tab with a fragment identifier
88 // since a[href=#fragment-identifier] does unexpectedly not match.
89 // Thus normalize href attribute...
90 var hrefBase = href.split('#')[0], baseEl;
91 if (hrefBase && (hrefBase === location.toString().split('#')[0] ||
92 (baseEl = $('base')[0]) && hrefBase === baseEl.href)) {
93 href = a.hash;
94 a.href = href;
95 }
96
97 // inline tab
98 if (fragmentId.test(href)) {
99 self.panels = self.panels.add(self._sanitizeSelector(href));
100 }
101
102 // remote tab
103 else if (href != '#') { // prevent loading the page itself if href is just "#"
104 $.data(a, 'href.tabs', href); // required for restore on destroy
105
106 // TODO until #3808 is fixed strip fragment identifier from url
107 // (IE fails to load from such url)
108 $.data(a, 'load.tabs', href.replace(/#.*$/, '')); // mutable data
109
110 var id = self._tabId(a);
111 a.href = '#' + id;
112 var $panel = $('#' + id);
113 if (!$panel.length) {
114 $panel = $(o.panelTemplate).attr('id', id).addClass('ui-tabs-panel ui-widget-content ui-corner-bottom')
115 .insertAfter(self.panels[i - 1] || self.list);
116 $panel.data('destroy.tabs', true);
117 }
118 self.panels = self.panels.add($panel);
119 }
120
121 // invalid tab href
122 else {
123 o.disabled.push(i);
124 }
125 });
126
127 // initialization from scratch
128 if (init) {
129
130 // attach necessary classes for styling
131 this.element.addClass('ui-tabs ui-widget ui-widget-content ui-corner-all');
132 this.list.addClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');
133 this.lis.addClass('ui-state-default ui-corner-top');
134 this.panels.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom');
135
136 // Selected tab
137 // use "selected" option or try to retrieve:
138 // 1. from fragment identifier in url
139 // 2. from cookie
140 // 3. from selected class attribute on <li>
141 if (o.selected === undefined) {
142 if (location.hash) {
143 this.anchors.each(function(i, a) {
144 if (a.hash == location.hash) {
145 o.selected = i;
146 return false; // break
147 }
148 });
149 }
150 if (typeof o.selected != 'number' && o.cookie) {
151 o.selected = parseInt(self._cookie(), 10);
152 }
153 if (typeof o.selected != 'number' && this.lis.filter('.ui-tabs-selected').length) {
154 o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected'));
155 }
156 o.selected = o.selected || 0;
157 }
158 else if (o.selected === null) { // usage of null is deprecated, TODO remove in next release
159 o.selected = -1;
160 }
161
162 // sanity check - default to first tab...
163 o.selected = ((o.selected >= 0 && this.anchors[o.selected]) || o.selected < 0) ? o.selected : 0;
164
165 // Take disabling tabs via class attribute from HTML
166 // into account and update option properly.
167 // A selected tab cannot become disabled.
168 o.disabled = $.unique(o.disabled.concat(
169 $.map(this.lis.filter('.ui-state-disabled'),
170 function(n, i) { return self.lis.index(n); } )
171 )).sort();
172
173 if ($.inArray(o.selected, o.disabled) != -1) {
174 o.disabled.splice($.inArray(o.selected, o.disabled), 1);
175 }
176
177 // highlight selected tab
178 this.panels.addClass('ui-tabs-hide');
179 this.lis.removeClass('ui-tabs-selected ui-state-active');
180 if (o.selected >= 0 && this.anchors.length) { // check for length avoids error when initializing empty list
181 this.panels.eq(o.selected).removeClass('ui-tabs-hide');
182 this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active');
183
184 // seems to be expected behavior that the show callback is fired
185 self.element.queue("tabs", function() {
186 self._trigger('show', null, self._ui(self.anchors[o.selected], self.panels[o.selected]));
187 });
188
189 this.load(o.selected);
190 }
191
192 // clean up to avoid memory leaks in certain versions of IE 6
193 $(window).bind('unload', function() {
194 self.lis.add(self.anchors).unbind('.tabs');
195 self.lis = self.anchors = self.panels = null;
196 });
197
198 }
199 // update selected after add/remove
200 else {
201 o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected'));
202 }
203
204 // update collapsible
205 this.element[o.collapsible ? 'addClass' : 'removeClass']('ui-tabs-collapsible');
206
207 // set or update cookie after init and add/remove respectively
208 if (o.cookie) {
209 this._cookie(o.selected, o.cookie);
210 }
211
212 // disable tabs
213 for (var i = 0, li; (li = this.lis[i]); i++) {
214 $(li)[$.inArray(i, o.disabled) != -1 &&
215 !$(li).hasClass('ui-tabs-selected') ? 'addClass' : 'removeClass']('ui-state-disabled');
216 }
217
218 // reset cache if switching from cached to not cached
219 if (o.cache === false) {
220 this.anchors.removeData('cache.tabs');
221 }
222
223 // remove all handlers before, tabify may run on existing tabs after add or option change
224 this.lis.add(this.anchors).unbind('.tabs');
225
226 if (o.event != 'mouseover') {
227 var addState = function(state, el) {
228 if (el.is(':not(.ui-state-disabled)')) {
229 el.addClass('ui-state-' + state);
230 }
231 };
232 var removeState = function(state, el) {
233 el.removeClass('ui-state-' + state);
234 };
235 this.lis.bind('mouseover.tabs', function() {
236 addState('hover', $(this));
237 });
238 this.lis.bind('mouseout.tabs', function() {
239 removeState('hover', $(this));
240 });
241 this.anchors.bind('focus.tabs', function() {
242 addState('focus', $(this).closest('li'));
243 });
244 this.anchors.bind('blur.tabs', function() {
245 removeState('focus', $(this).closest('li'));
246 });
247 }
248
249 // set up animations
250 var hideFx, showFx;
251 if (o.fx) {
252 if ($.isArray(o.fx)) {
253 hideFx = o.fx[0];
254 showFx = o.fx[1];
255 }
256 else {
257 hideFx = showFx = o.fx;
258 }
259 }
260
261 // Reset certain styles left over from animation
262 // and prevent IE's ClearType bug...
263 function resetStyle($el, fx) {
264 $el.css({ display: '' });
265 if ($.browser.msie && fx.opacity) {
266 $el[0].style.removeAttribute('filter');
267 }
268 }
269
270 // Show a tab...
271 var showTab = showFx ?
272 function(clicked, $show) {
273 $(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');
274 $show.hide().removeClass('ui-tabs-hide') // avoid flicker that way
275 .animate(showFx, showFx.duration || 'normal', function() {
276 resetStyle($show, showFx);
277 self._trigger('show', null, self._ui(clicked, $show[0]));
278 });
279 } :
280 function(clicked, $show) {
281 $(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');
282 $show.removeClass('ui-tabs-hide');
283 self._trigger('show', null, self._ui(clicked, $show[0]));
284 };
285
286 // Hide a tab, $show is optional...
287 var hideTab = hideFx ?
288 function(clicked, $hide) {
289 $hide.animate(hideFx, hideFx.duration || 'normal', function() {
290 self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');
291 $hide.addClass('ui-tabs-hide');
292 resetStyle($hide, hideFx);
293 self.element.dequeue("tabs");
294 });
295 } :
296 function(clicked, $hide, $show) {
297 self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');
298 $hide.addClass('ui-tabs-hide');
299 self.element.dequeue("tabs");
300 };
301
302 // attach tab event handler, unbind to avoid duplicates from former tabifying...
303 this.anchors.bind(o.event + '.tabs', function() {
304 var el = this, $li = $(this).closest('li'), $hide = self.panels.filter(':not(.ui-tabs-hide)'),
305 $show = $(self._sanitizeSelector(this.hash));
306
307 // If tab is already selected and not collapsible or tab disabled or
308 // or is already loading or click callback returns false stop here.
309 // Check if click handler returns false last so that it is not executed
310 // for a disabled or loading tab!
311 if (($li.hasClass('ui-tabs-selected') && !o.collapsible) ||
312 $li.hasClass('ui-state-disabled') ||
313 $li.hasClass('ui-state-processing') ||
314 self._trigger('select', null, self._ui(this, $show[0])) === false) {
315 this.blur();
316 return false;
317 }
318
319 o.selected = self.anchors.index(this);
320
321 self.abort();
322
323 // if tab may be closed
324 if (o.collapsible) {
325 if ($li.hasClass('ui-tabs-selected')) {
326 o.selected = -1;
327
328 if (o.cookie) {
329 self._cookie(o.selected, o.cookie);
330 }
331
332 self.element.queue("tabs", function() {
333 hideTab(el, $hide);
334 }).dequeue("tabs");
335
336 this.blur();
337 return false;
338 }
339 else if (!$hide.length) {
340 if (o.cookie) {
341 self._cookie(o.selected, o.cookie);
342 }
343
344 self.element.queue("tabs", function() {
345 showTab(el, $show);
346 });
347
348 self.load(self.anchors.index(this)); // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
349
350 this.blur();
351 return false;
352 }
353 }
354
355 if (o.cookie) {
356 self._cookie(o.selected, o.cookie);
357 }
358
359 // show new tab
360 if ($show.length) {
361 if ($hide.length) {
362 self.element.queue("tabs", function() {
363 hideTab(el, $hide);
364 });
365 }
366 self.element.queue("tabs", function() {
367 showTab(el, $show);
368 });
369
370 self.load(self.anchors.index(this));
371 }
372 else {
373 throw 'jQuery UI Tabs: Mismatching fragment identifier.';
374 }
375
376 // Prevent IE from keeping other link focussed when using the back button
377 // and remove dotted border from clicked link. This is controlled via CSS
378 // in modern browsers; blur() removes focus from address bar in Firefox
379 // which can become a usability and annoying problem with tabs('rotate').
380 if ($.browser.msie) {
381 this.blur();
382 }
383
384 });
385
386 // disable click in any case
387 this.anchors.bind('click.tabs', function(){return false;});
388
389 },
390
391 destroy: function() {
392 var o = this.options;
393
394 this.abort();
395
396 this.element.unbind('.tabs')
397 .removeClass('ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible')
398 .removeData('tabs');
399
400 this.list.removeClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');
401
402 this.anchors.each(function() {
403 var href = $.data(this, 'href.tabs');
404 if (href) {
405 this.href = href;
406 }
407 var $this = $(this).unbind('.tabs');
408 $.each(['href', 'load', 'cache'], function(i, prefix) {
409 $this.removeData(prefix + '.tabs');
410 });
411 });
412
413 this.lis.unbind('.tabs').add(this.panels).each(function() {
414 if ($.data(this, 'destroy.tabs')) {
415 $(this).remove();
416 }
417 else {
418 $(this).removeClass([
419 'ui-state-default',
420 'ui-corner-top',
421 'ui-tabs-selected',
422 'ui-state-active',
423 'ui-state-hover',
424 'ui-state-focus',
425 'ui-state-disabled',
426 'ui-tabs-panel',
427 'ui-widget-content',
428 'ui-corner-bottom',
429 'ui-tabs-hide'
430 ].join(' '));
431 }
432 });
433
434 if (o.cookie) {
435 this._cookie(null, o.cookie);
436 }
437 },
438
439 add: function(url, label, index) {
440 if (index === undefined) {
441 index = this.anchors.length; // append by default
442 }
443
444 var self = this, o = this.options,
445 $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label)),
446 id = !url.indexOf('#') ? url.replace('#', '') : this._tabId($('a', $li)[0]);
447
448 $li.addClass('ui-state-default ui-corner-top').data('destroy.tabs', true);
449
450 // try to find an existing element before creating a new one
451 var $panel = $('#' + id);
452 if (!$panel.length) {
453 $panel = $(o.panelTemplate).attr('id', id).data('destroy.tabs', true);
454 }
455 $panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide');
456
457 if (index >= this.lis.length) {
458 $li.appendTo(this.list);
459 $panel.appendTo(this.list[0].parentNode);
460 }
461 else {
462 $li.insertBefore(this.lis[index]);
463 $panel.insertBefore(this.panels[index]);
464 }
465
466 o.disabled = $.map(o.disabled,
467 function(n, i) { return n >= index ? ++n : n; });
468
469 this._tabify();
470
471 if (this.anchors.length == 1) { // after tabify
472 $li.addClass('ui-tabs-selected ui-state-active');
473 $panel.removeClass('ui-tabs-hide');
474 this.element.queue("tabs", function() {
475 self._trigger('show', null, self._ui(self.anchors[0], self.panels[0]));
476 });
477
478 this.load(0);
479 }
480
481 // callback
482 this._trigger('add', null, this._ui(this.anchors[index], this.panels[index]));
483 },
484
485 remove: function(index) {
486 var o = this.options, $li = this.lis.eq(index).remove(),
487 $panel = this.panels.eq(index).remove();
488
489 // If selected tab was removed focus tab to the right or
490 // in case the last tab was removed the tab to the left.
491 if ($li.hasClass('ui-tabs-selected') && this.anchors.length > 1) {
492 this.select(index + (index + 1 < this.anchors.length ? 1 : -1));
493 }
494
495 o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }),
496 function(n, i) { return n >= index ? --n : n; });
497
498 this._tabify();
499
500 // callback
501 this._trigger('remove', null, this._ui($li.find('a')[0], $panel[0]));
502 },
503
504 enable: function(index) {
505 var o = this.options;
506 if ($.inArray(index, o.disabled) == -1) {
507 return;
508 }
509
510 this.lis.eq(index).removeClass('ui-state-disabled');
511 o.disabled = $.grep(o.disabled, function(n, i) { return n != index; });
512
513 // callback
514 this._trigger('enable', null, this._ui(this.anchors[index], this.panels[index]));
515 },
516
517 disable: function(index) {
518 var self = this, o = this.options;
519 if (index != o.selected) { // cannot disable already selected tab
520 this.lis.eq(index).addClass('ui-state-disabled');
521
522 o.disabled.push(index);
523 o.disabled.sort();
524
525 // callback
526 this._trigger('disable', null, this._ui(this.anchors[index], this.panels[index]));
527 }
528 },
529
530 select: function(index) {
531 if (typeof index == 'string') {
532 index = this.anchors.index(this.anchors.filter('[href$=' + index + ']'));
533 }
534 else if (index === null) { // usage of null is deprecated, TODO remove in next release
535 index = -1;
536 }
537 if (index == -1 && this.options.collapsible) {
538 index = this.options.selected;
539 }
540
541 this.anchors.eq(index).trigger(this.options.event + '.tabs');
542 },
543
544 load: function(index) {
545 var self = this, o = this.options, a = this.anchors.eq(index)[0], url = $.data(a, 'load.tabs');
546
547 this.abort();
548
549 // not remote or from cache
550 if (!url || this.element.queue("tabs").length !== 0 && $.data(a, 'cache.tabs')) {
551 this.element.dequeue("tabs");
552 return;
553 }
554
555 // load remote from here on
556 this.lis.eq(index).addClass('ui-state-processing');
557
558 if (o.spinner) {
559 var span = $('span', a);
560 span.data('label.tabs', span.html()).html(o.spinner);
561 }
562
563 this.xhr = $.ajax($.extend({}, o.ajaxOptions, {
564 url: url,
565 success: function(r, s) {
566 $(self._sanitizeSelector(a.hash)).html(r);
567
568 // take care of tab labels
569 self._cleanup();
570
571 if (o.cache) {
572 $.data(a, 'cache.tabs', true); // if loaded once do not load them again
573 }
574
575 // callbacks
576 self._trigger('load', null, self._ui(self.anchors[index], self.panels[index]));
577 try {
578 o.ajaxOptions.success(r, s);
579 }
580 catch (e) {}
581
582 // last, so that load event is fired before show...
583 self.element.dequeue("tabs");
584 }
585 }));
586 },
587
588 abort: function() {
589 // stop possibly running animations
590 this.element.queue([]);
591 this.panels.stop(false, true);
592
593 // terminate pending requests from other tabs
594 if (this.xhr) {
595 this.xhr.abort();
596 delete this.xhr;
597 }
598
599 // take care of tab labels
600 this._cleanup();
601
602 },
603
604 url: function(index, url) {
605 this.anchors.eq(index).removeData('cache.tabs').data('load.tabs', url);
606 },
607
608 length: function() {
609 return this.anchors.length;
610 }
611
612});
613
614$.extend($.ui.tabs, {
615 version: '1.7.2',
616 getter: 'length',
617 defaults: {
618 ajaxOptions: null,
619 cache: false,
620 cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
621 collapsible: false,
622 disabled: [],
623 event: 'click',
624 fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
625 idPrefix: 'ui-tabs-',
626 panelTemplate: '<div></div>',
627 spinner: '<em>Loading&#8230;</em>',
628 tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>'
629 }
630});
631
632/*
633 * Tabs Extensions
634 */
635
636/*
637 * Rotate
638 */
639$.extend($.ui.tabs.prototype, {
640 rotation: null,
641 rotate: function(ms, continuing) {
642
643 var self = this, o = this.options;
644
645 var rotate = self._rotate || (self._rotate = function(e) {
646 clearTimeout(self.rotation);
647 self.rotation = setTimeout(function() {
648 var t = o.selected;
649 self.select( ++t < self.anchors.length ? t : 0 );
650 }, ms);
651
652 if (e) {
653 e.stopPropagation();
654 }
655 });
656
657 var stop = self._unrotate || (self._unrotate = !continuing ?
658 function(e) {
659 if (e.clientX) { // in case of a true click
660 self.rotate(null);
661 }
662 } :
663 function(e) {
664 t = o.selected;
665 rotate();
666 });
667
668 // start rotation
669 if (ms) {
670 this.element.bind('tabsshow', rotate);
671 this.anchors.bind(o.event + '.tabs', stop);
672 rotate();
673 }
674 // stop rotation
675 else {
676 clearTimeout(self.rotation);
677 this.element.unbind('tabsshow', rotate);
678 this.anchors.unbind(o.event + '.tabs', stop);
679 delete this._rotate;
680 delete this._unrotate;
681 }
682 }
683});
684
685})(jQuery);
diff --git a/static/development-bundle/version.txt b/static/development-bundle/version.txt
new file mode 100644
index 0000000..0a182f2
--- /dev/null
+++ b/static/development-bundle/version.txt
@@ -0,0 +1 @@
1.7.2 \ No newline at end of file
diff --git a/static/index.html b/static/index.html
new file mode 100644
index 0000000..751cebe
--- /dev/null
+++ b/static/index.html
@@ -0,0 +1,367 @@
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5 <title>jQuery UI Example Page</title>
6 <link type="text/css" href="css/ui-lightness/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
7 <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
8 <script type="text/javascript" src="js/jquery-ui-1.7.2.custom.min.js"></script>
9 <script type="text/javascript">
10 $(function(){
11
12 // Accordion
13 $("#accordion").accordion({ header: "h3" });
14
15 // Tabs
16 $('#tabs').tabs();
17
18
19 // Dialog
20 $('#dialog').dialog({
21 autoOpen: false,
22 width: 600,
23 buttons: {
24 "Ok": function() {
25 $(this).dialog("close");
26 },
27 "Cancel": function() {
28 $(this).dialog("close");
29 }
30 }
31 });
32
33 // Dialog Link
34 $('#dialog_link').click(function(){
35 $('#dialog').dialog('open');
36 return false;
37 });
38
39 // Datepicker
40 $('#datepicker').datepicker({
41 inline: true
42 });
43
44 // Slider
45 $('#slider').slider({
46 range: true,
47 values: [17, 67]
48 });
49
50 // Progressbar
51 $("#progressbar").progressbar({
52 value: 20
53 });
54
55 //hover states on the static widgets
56 $('#dialog_link, ul#icons li').hover(
57 function() { $(this).addClass('ui-state-hover'); },
58 function() { $(this).removeClass('ui-state-hover'); }
59 );
60
61 });
62 </script>
63 <style type="text/css">
64 /*demo page css*/
65 body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;}
66 .demoHeaders { margin-top: 2em; }
67 #dialog_link {padding: .4em 1em .4em 20px;text-decoration: none;position: relative;}
68 #dialog_link span.ui-icon {margin: 0 5px 0 0;position: absolute;left: .2em;top: 50%;margin-top: -8px;}
69 ul#icons {margin: 0; padding: 0;}
70 ul#icons li {margin: 2px; position: relative; padding: 4px 0; cursor: pointer; float: left; list-style: none;}
71 ul#icons span.ui-icon {float: left; margin: 0 4px;}
72 </style>
73 </head>
74 <body>
75 <h1>Welcome to jQuery UI!</h1>
76 <p style="font-size: 1.3em; line-height: 1.5; margin: 1em 0; width: 50%;">This page demonstrates the widgets you downloaded using the theme you selected in the download builder. We've included and linked to minified versions of <a href="js/jquery-1.3.2.min.js">jQuery</a>, your personalized copy of <a href="js/jquery-ui-1.7.2.custom.min.js">jQuery UI (js/jquery-ui-1.7.2.custom.min.js)</a>, and <a href="css/ui-lightness/jquery-ui-1.7.2.custom.css">css/ui-lightness/jquery-ui-1.7.2.custom.css</a> which imports the entire jQuery UI CSS Framework. You can choose to link a subset of the CSS Framework depending on your needs. </p>
77 <p style="font-size: 1.2em; line-height: 1.5; margin: 1em 0; width: 50%;">You've downloaded components and a theme that are compatible with jQuery 1.3+. Please make sure you are using jQuery 1.3+ in your production environment. <em>If you need jQuery UI components that work with an earlier version of jQuery, you can choose an older version in the <a href="http://jqueryui.com/download">jQuery UI download builder</a>.</em></p>
78
79 <p style="font-weight: bold; margin: 2em 0 1em; font-size: 1.3em;">YOUR COMPONENTS:</p>
80
81 <!-- Accordion -->
82 <h2 class="demoHeaders">Accordion</h2>
83 <div id="accordion">
84 <div>
85 <h3><a href="#">First</a></h3>
86 <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
87 </div>
88 <div>
89 <h3><a href="#">Second</a></h3>
90 <div>Phasellus mattis tincidunt nibh.</div>
91 </div>
92 <div>
93 <h3><a href="#">Third</a></h3>
94 <div>Nam dui erat, auctor a, dignissim quis.</div>
95 </div>
96 </div>
97
98 <!-- Tabs -->
99 <h2 class="demoHeaders">Tabs</h2>
100 <div id="tabs">
101 <ul>
102 <li><a href="#tabs-1">First</a></li>
103 <li><a href="#tabs-2">Second</a></li>
104 <li><a href="#tabs-3">Third</a></li>
105 </ul>
106 <div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
107 <div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>
108 <div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
109 </div>
110
111 <!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller-->
112 <h2 class="demoHeaders">Dialog</h2>
113 <p><a href="#" id="dialog_link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>Open Dialog</a></p>
114
115
116 <h2 class="demoHeaders">Overlay and Shadow Classes <em>(not currently used in UI widgets)</em></h2>
117 <div style="position: relative; width: 96%; height: 200px; padding:1% 4%; overflow:hidden;" class="fakewindowcontain">
118 <p>Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
119
120 <!-- ui-dialog -->
121 <div class="ui-overlay"><div class="ui-widget-overlay"></div><div class="ui-widget-shadow ui-corner-all" style="width: 302px; height: 152px; position: absolute; left: 50px; top: 30px;"></div></div>
122 <div style="position: absolute; width: 280px; height: 130px;left: 50px; top: 30px; padding: 10px;" class="ui-widget ui-widget-content ui-corner-all">
123 <div class="ui-dialog-content ui-widget-content" style="background: none; border: 0;">
124 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
125 </div>
126 </div>
127
128 </div>
129
130
131 <!-- ui-dialog -->
132 <div id="dialog" title="Dialog Title">
133 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
134 </div>
135
136
137
138 <h2 class="demoHeaders">Framework Icons (content color preview)</h2>
139 <ul id="icons" class="ui-widget ui-helper-clearfix">
140
141 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-n"><span class="ui-icon ui-icon-carat-1-n"></span></li>
142 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-ne"><span class="ui-icon ui-icon-carat-1-ne"></span></li>
143 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-e"><span class="ui-icon ui-icon-carat-1-e"></span></li>
144
145 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-se"><span class="ui-icon ui-icon-carat-1-se"></span></li>
146 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-s"><span class="ui-icon ui-icon-carat-1-s"></span></li>
147 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-sw"><span class="ui-icon ui-icon-carat-1-sw"></span></li>
148 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-w"><span class="ui-icon ui-icon-carat-1-w"></span></li>
149 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-nw"><span class="ui-icon ui-icon-carat-1-nw"></span></li>
150 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-n-s"><span class="ui-icon ui-icon-carat-2-n-s"></span></li>
151 <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-e-w"><span class="ui-icon ui-icon-carat-2-e-w"></span></li>
152 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li>
153 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li>
154
155 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li>
156 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li>
157 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li>
158 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li>
159 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li>
160 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li>
161 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li>
162 <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li>
163 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li>
164
165 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li>
166 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li>
167 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li>
168 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li>
169 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li>
170 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li>
171 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li>
172 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li>
173 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
174
175 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li>
176 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
177 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li>
178 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li>
179 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li>
180 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li>
181 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li>
182 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
183 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li>
184
185 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li>
186 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li>
187 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
188 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li>
189 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
190 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
191 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
192 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
193 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
194
195 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
196 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
197 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
198 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
199 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
200 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
201 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
202 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
203 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
204
205 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
206 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
207 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
208 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
209 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
210 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
211 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
212 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li>
213 <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li>
214
215 <li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li>
216 <li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
217 <li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li>
218 <li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li>
219 <li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li>
220 <li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li>
221 <li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li>
222 <li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li>
223 <li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li>
224
225 <li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li>
226 <li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
227 <li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li>
228 <li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li>
229 <li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li>
230 <li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li>
231 <li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
232 <li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
233 <li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
234
235 <li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
236 <li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li>
237 <li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li>
238 <li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
239 <li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
240 <li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
241 <li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li>
242 <li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
243 <li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
244
245 <li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
246 <li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
247 <li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li>
248 <li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
249 <li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li>
250 <li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
251 <li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
252 <li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
253 <li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
254
255 <li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
256 <li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
257 <li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
258 <li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
259 <li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li>
260 <li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
261 <li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li>
262 <li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
263 <li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li>
264
265 <li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
266 <li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li>
267 <li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li>
268 <li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li>
269 <li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
270 <li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li>
271 <li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
272 <li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
273 <li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
274 <li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
275
276 <li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
277 <li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
278 <li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
279 <li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
280 <li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
281 <li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li>
282 <li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li>
283 <li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
284 <li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
285 <li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
286 <li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
287
288 <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li>
289 <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li>
290 <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li>
291 <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li>
292 <li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
293 <li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
294 <li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li>
295 <li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li>
296 <li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
297
298 <li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li>
299 <li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
300 <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li>
301 <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li>
302 <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li>
303 <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li>
304 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li>
305 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li>
306 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li>
307
308 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li>
309 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li>
310 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li>
311 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li>
312 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li>
313 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li>
314 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li>
315 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li>
316 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li>
317
318 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li>
319 <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li>
320 <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li>
321 <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li>
322 <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li>
323 <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li>
324 <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li>
325 <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li>
326 <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
327
328 <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
329 <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li>
330 <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
331 <li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
332 <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
333 </ul>
334
335
336 <!-- Slider -->
337 <h2 class="demoHeaders">Slider</h2>
338 <div id="slider"></div>
339
340 <!-- Datepicker -->
341 <h2 class="demoHeaders">Datepicker</h2>
342 <div id="datepicker"></div>
343
344 <!-- Progressbar -->
345 <h2 class="demoHeaders">Progressbar</h2>
346 <div id="progressbar"></div>
347
348 <!-- Highlight / Error -->
349 <h2 class="demoHeaders">Highlight / Error</h2>
350 <div class="ui-widget">
351 <div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
352 <p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
353 <strong>Hey!</strong> Sample ui-state-highlight style.</p>
354 </div>
355 </div>
356 <br/>
357 <div class="ui-widget">
358 <div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
359 <p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
360 <strong>Alert:</strong> Sample ui-state-error style.</p>
361 </div>
362 </div>
363
364 </body>
365</html>
366
367
diff --git a/static/js/jquery-1.3.2.min.js b/static/js/jquery-1.3.2.min.js
new file mode 100644
index 0000000..b1ae21d
--- /dev/null
+++ b/static/js/jquery-1.3.2.min.js
@@ -0,0 +1,19 @@
1/*
2 * jQuery JavaScript Library v1.3.2
3 * http://jquery.com/
4 *
5 * Copyright (c) 2009 John Resig
6 * Dual licensed under the MIT and GPL licenses.
7 * http://docs.jquery.com/License
8 *
9 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
10 * Revision: 6246
11 */
12(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
13/*
14 * Sizzle CSS Selector Engine - v0.9.3
15 * Copyright 2009, The Dojo Foundation
16 * Released under the MIT, BSD, and GPL Licenses.
17 * More information: http://sizzlejs.com/
18 */
19(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file
diff --git a/static/js/jquery-1.4.2.min.js b/static/js/jquery-1.4.2.min.js
new file mode 100644
index 0000000..7c24308
--- /dev/null
+++ b/static/js/jquery-1.4.2.min.js
@@ -0,0 +1,154 @@
1/*!
2 * jQuery JavaScript Library v1.4.2
3 * http://jquery.com/
4 *
5 * Copyright 2010, John Resig
6 * Dual licensed under the MIT or GPL Version 2 licenses.
7 * http://jquery.org/license
8 *
9 * Includes Sizzle.js
10 * http://sizzlejs.com/
11 * Copyright 2010, The Dojo Foundation
12 * Released under the MIT, BSD, and GPL Licenses.
13 *
14 * Date: Sat Feb 13 22:33:48 2010 -0500
15 */
16(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
17e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
18j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
19"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
20true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
21Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
22(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
23a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
24"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
25function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
26c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
27L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
28"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
29a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
30d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
31a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
32!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
33true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
34var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
35parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
36false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
37s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
38applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
39else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
40a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
41w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
42cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
43i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
44" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
45this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
46e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
47c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
48a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
49function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
50k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
51C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
52null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
53e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
54f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
55if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
56fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
57d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
58"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
59a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
60isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
61{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
62if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
63e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
64"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
65d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
66!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
67toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
68u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
69function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
70if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
71e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
72t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
73g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
74for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
751)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
76CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
77relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
78l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
79h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
80CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
81g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
82text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
83setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
84h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
85m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
86"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
87h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
88!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
89h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
90q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
91if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
92(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
93function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
94gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
95c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
96{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
97"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
98d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
99a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1001&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
101a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
102c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
103wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
104prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
105this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
106return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
107""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
108this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
109u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1101?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
111return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
112""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
113c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
114c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
115function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
116Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
117"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
118a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
119a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
120"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
121serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
122function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
123global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
124e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
125"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
126false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
127false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
128c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
129d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
130g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1311223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
132"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
133if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
134this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
135"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
136animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
137j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
138this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
139"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
140c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
141this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
142this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
143e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
144c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
145function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
146this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
147k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
148f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
149a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
150c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
151d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
152f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
153"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
154e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/static/js/jquery-ui-1.7.2.custom.min.js b/static/js/jquery-ui-1.7.2.custom.min.js
new file mode 100644
index 0000000..cf19f30
--- /dev/null
+++ b/static/js/jquery-ui-1.7.2.custom.min.js
@@ -0,0 +1,298 @@
1/*
2 * jQuery UI 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI
9 */
10jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
11 * jQuery UI Draggable 1.7.2
12 *
13 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
14 * Dual licensed under the MIT (MIT-LICENSE.txt)
15 * and GPL (GPL-LICENSE.txt) licenses.
16 *
17 * http://docs.jquery.com/UI/Draggables
18 *
19 * Depends:
20 * ui.core.js
21 */
22(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
23 * jQuery UI Droppable 1.7.2
24 *
25 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
26 * Dual licensed under the MIT (MIT-LICENSE.txt)
27 * and GPL (GPL-LICENSE.txt) licenses.
28 *
29 * http://docs.jquery.com/UI/Droppables
30 *
31 * Depends:
32 * ui.core.js
33 * ui.draggable.js
34 */
35(function(a){a.widget("ui.droppable",{_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(c)}}else{a.widget.prototype._setData.apply(this,arguments)}},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.7.2",eventPrefix:"drop",defaults:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"}});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].options.accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
36 * jQuery UI Resizable 1.7.2
37 *
38 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
39 * Dual licensed under the MIT (MIT-LICENSE.txt)
40 * and GPL (GPL-LICENSE.txt) licenses.
41 *
42 * http://docs.jquery.com/UI/Resizables
43 *
44 * Depends:
45 * ui.core.js
46 */
47(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
48 * jQuery UI Selectable 1.7.2
49 *
50 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
51 * Dual licensed under the MIT (MIT-LICENSE.txt)
52 * and GPL (GPL-LICENSE.txt) licenses.
53 *
54 * http://docs.jquery.com/UI/Selectables
55 *
56 * Depends:
57 * ui.core.js
58 */
59(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}}));a.extend(a.ui.selectable,{version:"1.7.2",defaults:{appendTo:"body",autoRefresh:true,cancel:":input,option",delay:0,distance:0,filter:"*",tolerance:"touch"}})})(jQuery);;/*
60 * jQuery UI Sortable 1.7.2
61 *
62 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
63 * Dual licensed under the MIT (MIT-LICENSE.txt)
64 * and GPL (GPL-LICENSE.txt) licenses.
65 *
66 * http://docs.jquery.com/UI/Sortables
67 *
68 * Depends:
69 * ui.core.js
70 */
71(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.2",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/*
72 * jQuery UI Accordion 1.7.2
73 *
74 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
75 * Dual licensed under the MIT (MIT-LICENSE.txt)
76 * and GPL (GPL-LICENSE.txt) licenses.
77 *
78 * http://docs.jquery.com/UI/Accordion
79 *
80 * Depends:
81 * ui.core.js
82 */
83(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("<span/>").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/*
84 * jQuery UI Dialog 1.7.2
85 *
86 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
87 * Dual licensed under the MIT (MIT-LICENSE.txt)
88 * and GPL (GPL-LICENSE.txt) licenses.
89 *
90 * http://docs.jquery.com/UI/Dialog
91 *
92 * Depends:
93 * ui.core.js
94 * ui.draggable.js
95 * ui.resizable.js
96 */
97(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||"&nbsp;",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("<div/>")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('<a href="#"/>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("<span/>")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("<span/>").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('<button type="button"></button>').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||"&nbsp;");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("<div></div>").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e<d){return c(window).height()+"px"}else{return e+"px"}}else{return c(document).height()+"px"}},width:function(){if(c.browser.msie&&c.browser.version<7){var d=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var e=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(d<e){return c(window).width()+"px"}else{return d+"px"}}else{return c(document).width()+"px"}},resize:function(){var d=c([]);c.each(c.ui.dialog.overlay.instances,function(){d=d.add(this)});d.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/*
98 * jQuery UI Slider 1.7.2
99 *
100 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
101 * Dual licensed under the MIT (MIT-LICENSE.txt)
102 * and GPL (GPL-LICENSE.txt) licenses.
103 *
104 * http://docs.jquery.com/UI/Slider
105 *
106 * Depends:
107 * ui.core.js
108 */
109(function(a){a.widget("ui.slider",a.extend({},a.ui.mouse,{_init:function(){var b=this,c=this.options;this._keySliding=false;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");this.range=a([]);if(c.range){if(c.range===true){this.range=a("<div></div>");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length<c.values.length){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d<b))){d=b}if(d!=this.values(e)){var c=this.values();c[e]=d;var h=this._trigger("slide",f,{handle:this.handles[e],value:d,values:c});var b=this.values(e?0:1);if(h!==false){this.values(e,d,(f.type=="mousedown"&&this.options.animate),true)}}}else{if(d!=this.value()){var h=this._trigger("slide",f,{handle:this.handles[e],value:d});if(h!==false){this._setData("value",d,(f.type=="mousedown"&&this.options.animate))}}}},_stop:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("stop",d,b)},_change:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("change",d,b)},value:function(b){if(arguments.length){this._setData("value",b);this._change(null,0)}return this._value()},values:function(b,e,c,d){if(arguments.length>1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.2",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/*
110 * jQuery UI Tabs 1.7.2
111 *
112 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
113 * Dual licensed under the MIT (MIT-LICENSE.txt)
114 * and GPL (GPL-LICENSE.txt) licenses.
115 *
116 * http://docs.jquery.com/UI/Tabs
117 *
118 * Depends:
119 * ui.core.js
120 */
121(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;/*
122 * jQuery UI Datepicker 1.7.2
123 *
124 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
125 * Dual licensed under the MIT (MIT-LICENSE.txt)
126 * and GPL (GPL-LICENSE.txt) licenses.
127 *
128 * http://docs.jquery.com/UI/Datepicker
129 *
130 * Depends:
131 * ui.core.js
132 */
133(function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$('<span class="'+this._appendClass+'">'+appendText+"</span>");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var inst=this._getInst(target);if(arguments.length==2&&typeof name=="string"){return(name=="defaults"?$.extend({},$.datepicker._defaults):(inst?(name=="all"?$.extend({},inst.settings):this._get(inst,name)):null))}var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}if(inst){if(this._curInst==inst){this._hideDatepicker(null)}var date=this._getDateDatepicker(target);extendRemove(inst.settings,settings);this._setDateDatepicker(target,date);this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:var sel=$("td."+$.datepicker._dayOverClass+", td."+$.datepicker._currentClass,inst.dpDiv);if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"))}return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);date=defaultDate}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>":"");var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+="first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+="last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+="middle";cornerClass="";break}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():"&#xa0;"):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+"</span>":'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>"+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span> "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?"&#xa0;":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?"&#xa0;":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery);;/*
134 * jQuery UI Progressbar 1.7.2
135 *
136 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
137 * Dual licensed under the MIT (MIT-LICENSE.txt)
138 * and GPL (GPL-LICENSE.txt) licenses.
139 *
140 * http://docs.jquery.com/UI/Progressbar
141 *
142 * Depends:
143 * ui.core.js
144 */
145(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/*
146 * jQuery UI Effects 1.7.2
147 *
148 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
149 * Dual licensed under the MIT (MIT-LICENSE.txt)
150 * and GPL (GPL-LICENSE.txt) licenses.
151 *
152 * http://docs.jquery.com/UI/Effects/
153 */
154jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.data("ec.storage."+h[f],g[0].style[h[f]])}}},restore:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.css(h[f],g.data("ec.storage."+h[f]))}}},setMode:function(f,g){if(g=="toggle"){g=f.is(":hidden")?"show":"hide"}return g},getBaseline:function(g,h){var i,f;switch(g[0]){case"top":i=0;break;case"middle":i=0.5;break;case"bottom":i=1;break;default:i=g[0]/h.height}switch(g[1]){case"left":f=0;break;case"center":f=0.5;break;case"right":f=1;break;default:f=g[1]/h.width}return{x:f,y:i}},createWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent()}var g={width:f.outerWidth(true),height:f.outerHeight(true),"float":f.css("float")};f.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return -(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f},easeOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return h*Math.pow(2,-10*i)*Math.sin((i*l-j)*(2*Math.PI)/k)+m+f},easeInOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l/2)==2){return f+m}if(!k){k=l*(0.3*1.5)}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}if(i<1){return -0.5*(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f}return h*Math.pow(2,-10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k)*0.5+m+f},easeInBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*(h/=j)*h*((i+1)*h-i)+f},easeOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*((h=h/j-1)*h*((i+1)*h+i)+1)+f},easeInOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}if((h/=j/2)<1){return k/2*(h*h*(((i*=(1.525))+1)*h-i))+f}return k/2*((h-=2)*h*(((i*=(1.525))+1)*h+i)+2)+f},easeInBounce:function(g,h,f,j,i){return j-d.easing.easeOutBounce(g,i-h,0,j,i)+f},easeOutBounce:function(g,h,f,j,i){if((h/=i)<(1/2.75)){return j*(7.5625*h*h)+f}else{if(h<(2/2.75)){return j*(7.5625*(h-=(1.5/2.75))*h+0.75)+f}else{if(h<(2.5/2.75)){return j*(7.5625*(h-=(2.25/2.75))*h+0.9375)+f}else{return j*(7.5625*(h-=(2.625/2.75))*h+0.984375)+f}}}},easeInOutBounce:function(g,h,f,j,i){if(h<i/2){return d.easing.easeInBounce(g,h*2,0,j,i)*0.5+f}return d.easing.easeOutBounce(g,h*2-i,0,j,i)*0.5+j*0.5+f}})})(jQuery);;/*
155 * jQuery UI Effects Blind 1.7.2
156 *
157 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
158 * Dual licensed under the MIT (MIT-LICENSE.txt)
159 * and GPL (GPL-LICENSE.txt) licenses.
160 *
161 * http://docs.jquery.com/UI/Effects/Blind
162 *
163 * Depends:
164 * effects.core.js
165 */
166(function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/*
167 * jQuery UI Effects Bounce 1.7.2
168 *
169 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
170 * Dual licensed under the MIT (MIT-LICENSE.txt)
171 * and GPL (GPL-LICENSE.txt) licenses.
172 *
173 * http://docs.jquery.com/UI/Effects/Bounce
174 *
175 * Depends:
176 * effects.core.js
177 */
178(function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
179 * jQuery UI Effects Clip 1.7.2
180 *
181 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
182 * Dual licensed under the MIT (MIT-LICENSE.txt)
183 * and GPL (GPL-LICENSE.txt) licenses.
184 *
185 * http://docs.jquery.com/UI/Effects/Clip
186 *
187 * Depends:
188 * effects.core.js
189 */
190(function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/*
191 * jQuery UI Effects Drop 1.7.2
192 *
193 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
194 * Dual licensed under the MIT (MIT-LICENSE.txt)
195 * and GPL (GPL-LICENSE.txt) licenses.
196 *
197 * http://docs.jquery.com/UI/Effects/Drop
198 *
199 * Depends:
200 * effects.core.js
201 */
202(function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
203 * jQuery UI Effects Explode 1.7.2
204 *
205 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
206 * Dual licensed under the MIT (MIT-LICENSE.txt)
207 * and GPL (GPL-LICENSE.txt) licenses.
208 *
209 * http://docs.jquery.com/UI/Effects/Explode
210 *
211 * Depends:
212 * effects.core.js
213 */
214(function(a){a.effects.explode=function(b){return this.queue(function(){var k=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;var e=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?(a(this).is(":visible")?"hide":"show"):b.options.mode;var h=a(this).show().css("visibility","hidden");var l=h.offset();l.top-=parseInt(h.css("marginTop"),10)||0;l.left-=parseInt(h.css("marginLeft"),10)||0;var g=h.outerWidth(true);var c=h.outerHeight(true);for(var f=0;f<k;f++){for(var d=0;d<e;d++){h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*
215 * jQuery UI Effects Fold 1.7.2
216 *
217 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
218 * Dual licensed under the MIT (MIT-LICENSE.txt)
219 * and GPL (GPL-LICENSE.txt) licenses.
220 *
221 * http://docs.jquery.com/UI/Effects/Fold
222 *
223 * Depends:
224 * effects.core.js
225 */
226(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/*
227 * jQuery UI Effects Highlight 1.7.2
228 *
229 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
230 * Dual licensed under the MIT (MIT-LICENSE.txt)
231 * and GPL (GPL-LICENSE.txt) licenses.
232 *
233 * http://docs.jquery.com/UI/Effects/Highlight
234 *
235 * Depends:
236 * effects.core.js
237 */
238(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
239 * jQuery UI Effects Pulsate 1.7.2
240 *
241 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
242 * Dual licensed under the MIT (MIT-LICENSE.txt)
243 * and GPL (GPL-LICENSE.txt) licenses.
244 *
245 * http://docs.jquery.com/UI/Effects/Pulsate
246 *
247 * Depends:
248 * effects.core.js
249 */
250(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c<f;c++){d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing)}if(g=="hide"){d.animate({opacity:0},e,b.options.easing,function(){d.hide();if(b.callback){b.callback.apply(this,arguments)}})}else{d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing,function(){if(b.callback){b.callback.apply(this,arguments)}})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);;/*
251 * jQuery UI Effects Scale 1.7.2
252 *
253 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
254 * Dual licensed under the MIT (MIT-LICENSE.txt)
255 * and GPL (GPL-LICENSE.txt) licenses.
256 *
257 * http://docs.jquery.com/UI/Effects/Scale
258 *
259 * Depends:
260 * effects.core.js
261 */
262(function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this);var c=a.extend(true,{},b.options);var h=a.effects.setMode(f,b.options.mode||"hide");var g=parseInt(b.options.percent,10)||150;c.fade=true;var e={height:f.height(),width:f.width()};var d=g/100;f.from=(h=="hide")?e:{height:e.height*d,width:e.width*d};c.from=f.from;c.percent=(h=="hide")?g:100;c.mode=h;f.effect("scale",c,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/*
263 * jQuery UI Effects Shake 1.7.2
264 *
265 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
266 * Dual licensed under the MIT (MIT-LICENSE.txt)
267 * and GPL (GPL-LICENSE.txt) licenses.
268 *
269 * http://docs.jquery.com/UI/Effects/Shake
270 *
271 * Depends:
272 * effects.core.js
273 */
274(function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
275 * jQuery UI Effects Slide 1.7.2
276 *
277 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
278 * Dual licensed under the MIT (MIT-LICENSE.txt)
279 * and GPL (GPL-LICENSE.txt) licenses.
280 *
281 * http://docs.jquery.com/UI/Effects/Slide
282 *
283 * Depends:
284 * effects.core.js
285 */
286(function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
287 * jQuery UI Effects Transfer 1.7.2
288 *
289 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
290 * Dual licensed under the MIT (MIT-LICENSE.txt)
291 * and GPL (GPL-LICENSE.txt) licenses.
292 *
293 * http://docs.jquery.com/UI/Effects/Transfer
294 *
295 * Depends:
296 * effects.core.js
297 */
298(function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);; \ No newline at end of file